[英]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 ++,並試圖一次采取太多步驟。 嘗試記錄到文件,然后播放文件。 這將為您提供聲音到字節和字節到聲音的部分。 不要嘗試使用特定的文件格式,只需寫入和讀取原始音頻數據即可。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.