gpt4 book ai didi

c++ - 套接字上的音频 C++

转载 作者:行者123 更新时间:2023-11-28 00:25:38 27 4
gpt4 key购买 nike

我正在使用 SFML 从我的麦克风中捕捉一些音频.数据存储在 Int16* 类型的样本中。

Int16* samples;

我的问题是。我应该如何处理此示例以通过套接字将其流式传输到另一个地方播放?我问的是数据类型。我需要将这个 Int16 数组转换为另一种类型吗?或者我可以直接发送这个 Int16* 吗?

编辑

void BroadcastRecorder::loadBufferFromSamples()
{
//m_samples is of type vector<Int16*>
if (!m_samples.empty()){
m_buffer.loadFromSamples(&m_samples[0], m_samples.size(), 1, getSampleRate());
m_samples.clear();
}
}

void Broadcaster::Send()
{
//load the buffer with the samples
if(!m_recorder->empty()){
m_recorder->loadBufferFromSamples();
const sf::SoundBuffer& buffer = m_recorder->getBuffer();

size_t dataLength = m_recorder->GetSamplesSize();

wxSocketClient * socket = new wxSocketClient(wxSOCKET_NOWAIT);
socket->Notify(false);

// ------------- DATA----------------------
wxString data = "";
wxString strToPrepend(_("--myboundary\r\nContent-Type: audio/wav\r\n"));
wxString strToAppend(_("\r\n--myboundary\r\n"));

// ------------- HEADER -----------------------
wxString header = "";

header.append("POST ");
header.append("/cgi-bin/operator/transmit");
header.append(" HTTP/1.0\r\n");
header.append("Content-Type: multipart/form-data; boundary=--myboundary\r\n");
header.append("Content-Length: " + wxString::Format(wxT("%i"),(dataLength + strToPrepend.Len() + strToAppend.Len()) ) + "\r\n");
header.append("Authorization: Basic keykeykeykey\r\n");
header.append("\r\n");

//-------------- CONNECTION ---------------
wxString host = _("192.168.50.11");
wxIPV4address * address = new wxIPV4address();
address->Hostname(host);
address->Service(8084);

if (socket->Connect(*address)){
//Write header
socket->Write(header.c_str(),header.Len());
//Write data
socket->Write(strToPrepend.c_str(),strToPrepend.Len());
const sf::Int16* samples = buffer.getSamples();

const char* bytesData = reinterpret_cast<const char*>(samples);

socket->Write(bytesData,dataLength);

socket->Write(strToAppend.c_str(),strToAppend.Len());

socket->Close();
}

delete socket;
delete address;
}
}

我在间隙之间只听到一些噪音。

顺便说一句。音频正在发送到 IP 摄像机 p2 连接器。

最佳答案

数据格式就是您的应用程序处理它们的方式。毕竟您通过套接字发送原始字节。你可以随心所欲地做这件事

Int16 data;
const char* pBytesOfData = (const char*) &data;
int size = sizeof (Int16);

send( socket, pBytesOfdata, size, flags);

当字节到达第二端时,由您来正确解释它们。可能您会再次将它们视为 Int16。您需要有一个协议(protocol)(通用通信方式)才能正确执行(可能在传输开始时发送数据大小等)。

您还可以查看简化 serialization 的库: Boost.AsioBoost.Serialization .

关于c++ - 套接字上的音频 C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25264766/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com