正如標題所暗示的,我使用PortAudio庫來記錄音頻輸入,以便通過網絡將數據發送到其他音頻將播放的機器。這是創建基本語音聊天程序的先決條件。使用PortAudio通過網絡發送音頻
此刻我正在正確捕獲音頻&數據正在發送到一個「服務器」程序(當前運行在同一臺機器上(但結果是相同的,否則)。然後服務器程序只是回聲的數據回到它的來源,以便它可以播放。
我遇到的問題是,從服務器收到的數據似乎是發送到數據的長度的1/2服務器即數據回放時,音頻(正確的)只有1秒而不是2秒
這就是數據從記錄位置發送的方式,每條數據都發送,並應收回馬上進行存儲,以便以後可以回放:
floatData outData;
for (int i = 0; i < mData.maxFrameIndex; i++)
{
outData.dataSample = mData.recordedSamples[i];
send(mConnectSocket, (char*)&outData, sizeof(floatData), NULL);
//Receive the data send, which is echo'd back from the server straight away.
Receive(i);
}
closesocket(mConnectSocket);
WSACleanup();
這裏是它是如何發送接收&從服務器發回:
int iRecvResult = 0;
floatData inData;
do
{
iRecvResult = recv(mConnectSocket, (char*)&inData, sizeof(floatData), NULL);
if (iRecvResult > 0)
{
// Send the data straight back again.
iRecvResult = send(mConnectSocket, (char*)&inData, sizeof(floatData), NULL);
if(iRecvResult < 0)
{
break;
}
}
} while (iRecvResult > 0);
closesocket(mConnectSocket);
WSACleanup();
這是數據是如何處接收回的原始發件人:
int iRecvResult = 0;
floatData inData;
iRecvResult = recv(mConnectSocket, (char*)&inData, sizeof(floatData), NULL);
mRecvData.recordedSamples[index] = inData.dataSample;
我不知道爲什麼被接收僅1/2的數據傳回,這一切都沒有任何問題被髮送。我想我可以在服務器端回放數據,以確保所有數據都達到100%,但我想知道是否有人可以闡明任何可能的理論。
在此先感謝。