UDP ソケットからデータを受信するループ内で再生する waveOut があります。しかし残念ながら、約 30 秒後に「MemoryAllocationError calling waveOutOpen」というエラーがスローされます。
これを達成するために以下のコードを使用します
private void startAudioTransfer(bool startSending, IPAddress receipientIP, bool startReceiving, IPAddress senderIP)
{
if (IsAudioSupported)
{
IsAudioTransferActive = true;
audioUDPClient = new UdpClient(audioPort);
if (startSending)
{
startRecording();
audioSender = new Thread(new ParameterizedThreadStart(sendAudio));
audioSender.Start(receipientIP);
}
if (startReceiving)
{
audioReceiver = new Thread(new ParameterizedThreadStart(receiveAudio));
audioReceiver.Start(senderIP);
}
}
else
{
MessageBox.Show("Audio Transfer is not supported by your computer", "Error", MessageBoxButton.OK, MessageBoxImage.Error, MessageBoxResult.OK);
}
}
private void receiveAudio(object sender)
{
IPEndPoint senderEP = new IPEndPoint(IPAddress.Any, 0);
MemoryStream audioDataStream;
RawSourceWaveStream receivedRawAudioData;
byte[] receivedAudioData;
while (IsAudioTransferActive)
{
receivedAudioData = audioUDPClient.Receive(ref senderEP);
waveOutStream = new WaveOut();
audioDataStream = new MemoryStream(receivedAudioData);
receivedRawAudioData = new RawSourceWaveStream(audioDataStream, audioFormat);
waveOutStream.Init(receivedRawAudioData);
waveOutStream.Play();
}
waveOutStream.Stop();
waveOutStream.Dispose();
}