Wie der Titel vermuten lässt, verwende ich die PortAudio-Bibliothek zum Aufzeichnen von Audioeingängen, um die Daten über ein Netzwerk an ein anderes Gerät zu senden, auf dem die Audiodaten wiedergegeben werden. Dies ist ein Vorläufer für die Erstellung eines grundlegenden Voice-Chat-Programms.Senden von Audiodaten über ein Netzwerk mithilfe von PortAudio
Im Moment habe ich die Audio korrekt erfasst & die Daten werden an ein "Server" -Programm gesendet (läuft derzeit auf dem gleichen Rechner (aber die Ergebnisse sind die gleichen, wenn es nicht ist). Das Server-Programm dann nur echo ist die Daten zurück, wo es herkam, so dass es abgespielt werden kann
Das Problem, das ich habe, ist, dass die Daten zurück vom Server empfangen werden scheint, von der halben Länge der Daten gesendet zu sein der Server, dh wenn die Daten wiedergegeben werden, ist der Ton (der korrekt ist) nur 1 Sekunde statt zwei.
So werden die Daten von wo es aufgezeichnet wird gesendet.Jedes Stück Daten wird gesendet Und sollte wieder sofort gespeichert werden, empfangen werden, so dass sie später wiedergegeben werden können:
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();
Hier ist, wie es & vom Server gesendet wird empfangen gesendet:
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();
Und das ist wie die Daten an den ursprünglichen Absender zurückerhalten:
int iRecvResult = 0;
floatData inData;
iRecvResult = recv(mConnectSocket, (char*)&inData, sizeof(floatData), NULL);
mRecvData.recordedSamples[index] = inData.dataSample;
ich es wieder weiß nicht, warum die Daten nur 1/2, alle wird gesendet, ohne irgendwelche Probleme empfangen werden. Ich vermutete, dass ich die Daten auf der Server-Seite der Dinge wiedergeben konnte, um sicherzustellen, dass alles zu 100% da ist, aber ich fragte mich, ob irgendjemand irgendein Licht auf mögliche Theorien werfen könnte.
Vielen Dank im Voraus.