Od jakiegoś czasu próbuję nauczyć się obsługi mikrofonu w c# za pomocą NAudio. Chodzi o nagrywanie dzwięku z mikrofonu, i odtworzenie, ze strumienia bez zapisywania do pliku. Oto moje najnowsze osiągnięcie:
public class SoundMessage
{
private BufferedWaveProvider waveProvider = null;
private WaveIn m_WaveIn;
WaveOut waveOut = new WaveOut();
public void StartRecording()
{
m_WaveIn = new WaveIn();
m_WaveIn.DeviceNumber = 0;
m_WaveIn.BufferMilliseconds = 50;
m_WaveIn.DataAvailable += new EventHandler<WaveInEventArgs>(WaveIn_DataAvailable);
m_WaveIn.WaveFormat = new NAudio.Wave.WaveFormat(16000, 1);
waveProvider = new BufferedWaveProvider(m_WaveIn.WaveFormat);
m_WaveIn.StartRecording();
}
public void StopRecording()
{
m_WaveIn.StopRecording();
// m_WaveIn.Dispose();
// m_WaveIn = null;
}
public void Play()
{
waveOut.Init(waveProvider);
waveOut.Play();
}
public void WaveIn_DataAvailable(object sender, WaveInEventArgs e)
{
byte[] buffer = e.Buffer;
waveProvider.AddSamples(buffer, 0, buffer.Length);
}
public SoundMessage()
{
}
}
Gdy wywołam metodę nagrywania po jakichś 5 sekundach program wywala "Buffer full". Z jakiegoś powodu bufor nie dodaje kolejnych fragmentów. Poradźcie coś. Ewentualnie jakąś naprawdę dobrą bibliotekę darmową do zastosowań komercyjnych.