【发布时间】:2012-04-12 07:12:36
【问题描述】:
正如标题所暗示的,我正在使用 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% 到达那里,但我想知道是否有人可以阐明任何可能的理论。
提前致谢。
【问题讨论】:
标签: c++ voice-recording portaudio