使用C 中的套接字通过网络发送音频数据
Send Audio Data over the network using socket in c++
是否可以告诉我如何数据包音频数据并将其发送给客户端,以便客户可以播放已收到的音频?这就是程序开始从麦克风录制音频的方式:
{
waveOutReset (hWaveOut) ;
waveInReset (hWaveIn) ;
pBuffer1=reinterpret_cast <PBYTE> (malloc(INP_BUFFER_SIZE) );
pBuffer2= reinterpret_cast <PBYTE> ( malloc(INP_BUFFER_SIZE) );
if (!pBuffer1 || !pBuffer2)
{
if (pBuffer1) free (pBuffer1);
if (pBuffer2) free (pBuffer2);
MessageBox (hWnd, szMemError, NULL,
MB_ICONEXCLAMATION|MB_OK) ;
return TRUE ;
}
// Open waveform audio for input
waveform.wFormatTag = WAVE_FORMAT_PCM ;
waveform.nChannels = 1;
waveform.nSamplesPerSec = 11025 ;
waveform.nAvgBytesPerSec = 11025 ;
waveform.nBlockAlign = 1 ;
waveform.wBitsPerSample = 8 ;
waveform.cbSize = 0 ;
if (waveInOpen (&hWaveIn, WAVE_MAPPER, &waveform,
(DWORD) hWnd, 0, CALLBACK_WINDOW))
{
free (pBuffer1) ;
free (pBuffer2) ;
}
// Set up headers and prepare them
pWaveHdr1->lpData = reinterpret_cast <CHAR*>( pBuffer1 ) ;
pWaveHdr1->dwBufferLength = INP_BUFFER_SIZE ;
pWaveHdr1->dwBytesRecorded = 0 ;
pWaveHdr1->dwUser = 0 ;
pWaveHdr1->dwFlags = 0 ;
pWaveHdr1->dwLoops = 1 ;
pWaveHdr1->lpNext = NULL ;
pWaveHdr1->reserved = 0 ;
waveInPrepareHeader (hWaveIn, pWaveHdr1, sizeof (WAVEHDR)) ;
pWaveHdr2->lpData = reinterpret_cast <CHAR*>(pBuffer2 ) ; pWaveHdr2->dwBufferLength = INP_BUFFER_SIZE ;
pWaveHdr2->dwBytesRecorded = 0 ;
pWaveHdr2->dwUser = 0 ;
pWaveHdr2->dwFlags = 0 ;
pWaveHdr2->dwLoops = 1 ;
pWaveHdr2->lpNext = NULL ;
pWaveHdr2->reserved = 0 ;
waveInPrepareHeader (hWaveIn, pWaveHdr2, sizeof(WAVEHDR));
}
break;
这是插座版本,它接受,接收和发送数据:
switch(WSAGETSELECTEVENT(lParam))
{
case FD_ACCEPT:
if((new_socket = accept(wParam, NULL, NULL)) == -1){
MessageBox(NULL, L"Error while accepting connection", L"Error", MB_OK);
break;
}
// Prepare accepted socket for read, write, and close notification
if(WSAAsyncSelect(new_socket,hWnd, WM_SOCKET,FD_READ|FD_WRITE|FD_CLOSE) == -1){
MessageBox(NULL, L"Error while intialization", L"Error", MB_OK);
break;
}
break;
case FD_READ: // Receive data from the socket in wParam
break;
case FD_WRITE: // The socket in wParam is ready for sending data
break;
case FD_CLOSE:
// The connection is now closed
closesocket((SOCKET)wParam);
break;
}
问题是我无法打包音频数据以将其发送给客户端以及客户端如何重新包装并播放音频
所有答复都受到赞赏谢谢
您可能正在学习C ,并尝试一次尝试太多步骤。尝试录制到文件,然后播放文件。这将为您提供声音到副作用的零件。不要尝试使用特定的文件格式,只需写入和读取原始音频数据。
相关文章:
- 我的神经网络不起作用 [XOR 问题]
- 用c++阅读音频
- GetShortPathName在网络驱动器上使用中文文件夹时失败
- 通过网络、跨平台传递std::变体是否安全
- 如何在MNIST上提高网络运行的准确性
- 为什么这个音频包络不能通过开关的情况?
- Active Directory:从网络服务帐户下运行的Windows服务调用ADsOpenObject时失败
- FFMpeg库:如何在音频文件中精确查找
- OpenCV 4.1.2 - 从网络摄像头获取帧并将其拆分
- 使用OpenCV和覆盆子上的多个网络摄像头拍摄延时摄影,出现多个V4L错误
- 需要反转音频步进公式
- 神经网络不学习.卡在50%
- 如何绑定 C++ gRPC 客户端的网络接口
- 如何在音频处理中使用超能力时间拉伸类
- 在本地网络中通过OpenCV(C++)实时流式传输图像
- 在不知道套接字的情况下关闭网络连接
- 是否有 Windows 用户空间函数来枚举连接的网络共享?
- C++新手,想知道如何使用VS code 2019播放音频文件
- 使用C 中的套接字通过网络发送音频数据
- 使用 ffmpeg 从网络摄像头捕获帧,从微型捕获音频并保存到文件