This example shows you how to receive data from a microphone and stream it over UDP to another computer. The example application can act like a direct phone, if both endpoints listen for data and send microphone data to each other. One would probably suspect that no source code exists for that, but of course it does. I hate those who will do commercial advertising. There is also a second related project what will contain a UDP server that we need to send/receive audio and compress it with g711 codec.Though only UDP is not the best way to transport audio data, RTP is the right way to go. RTP adds quality of service to transported audio, you can see how many packets are lost and can even arrange disordered packets. I will try to add an RTP example soon, so be calm, it's under way. There are some similar example applications, but most of them aren't well commented and missing some parts, so I will try to fill this part.
The package contains:
LumiSoft.Media
LumiSoft.Net
WaveIn
WavIn.Devices
/// <summary>
/// Application main class.
/// </summary>
public class Test
{
private WavIn m_pSoundReceiver = null;
/// <summary>
/// Default constructor.
/// </summary>
public Test()
{
// G711 needs 8KHZ 16 bit 1 channel audio,
// 400kb buffer gives us 25ms audio frame.
m_pSoundReceiver = new WavIn(WavIn.Devices[0],8000,16,1,400);
m_pSoundReceiver.BufferFull += new BufferFullHandler
(m_pSoundReceiver_BufferFull);
m_pSoundReceiver.Start();
}
/// <summary>
/// This method is called when recording buffer is full
/// and we need to process it.
/// </summary>
/// <param name="buffer">Recorded data.</param>
private void m_pSoundReceiver_BufferFull(byte[] buffer)
{
// Just store audio data or stream it over the network ...
}
}
WaveOut
waveoutInstance.Play
Note: Sound quality depends on network delay jittering, if there will be too big a variance in delays, voice will have holes in it. In addition, UDP packet loss and disordered packets will affect.