Я пытаюсь написать приложение, которое записывает звук с микрофона и отправляю его прямо на динамики.Для тестирования я использую гарнитуру, чтобы избежать акустической обратной связи.Я нашел этот урок https://markheath.net/post/how-to-record-and-play-audio-at-same.Так как у меня возникла проблема с моим последним приложением, я создал небольшое тестовое приложение, чтобы убедиться, что причина моей проблемы не в побочном эффекте.Я создаю небольшую тестовую программу с 2 кнопками (старт и стоп), чтобы протестировать ее.Но по какой-то причине записанный звук в моем большом финальном приложении и в этом приложении содержит периодические части тишины, которые я не могу найти почему.
Этомой код:
public partial class MainWindow : Window
{
private AudioLive MyLive;
public MainWindow()
{
InitializeComponent();
MyLive = new AudioLive();
MyLive.Init();
}
private void ButtonStart(object sender, RoutedEventArgs e)
{
MyLive.StartLive();
}
private void ButtonEnd(object sender, RoutedEventArgs e)
{
MyLive.EndLive();
}
}
class AudioLive
{
private WaveIn m_Recorder;
private BufferedWaveProvider m_BufferedWaveProvider;
private SavingWaveProvider m_SavingWaveProvider;
private WaveOut m_Player;
public void Dispose()
{
Dispose(true);
}
protected virtual void Dispose(bool disposing)
{
if (m_Recorder != null)
{
m_Recorder.Dispose();
}
m_Recorder = null;
if (m_SavingWaveProvider != null)
{
m_SavingWaveProvider.Dispose();
}
m_SavingWaveProvider = null;
}
private void RecorderOnDataAvailable(object sender, WaveInEventArgs waveInEventArgs)
{
m_BufferedWaveProvider.AddSamples(waveInEventArgs.Buffer, 0, waveInEventArgs.BytesRecorded);
}
public bool Init()
{
m_Recorder = new WaveIn();
m_Recorder.WaveFormat = new WaveFormat(44100, 2);
m_Recorder.DataAvailable += RecorderOnDataAvailable;
// set up our signal chain
m_BufferedWaveProvider = new BufferedWaveProvider(m_Recorder.WaveFormat);
return true;
}
public void StartLive()
{
m_SavingWaveProvider = new SavingWaveProvider(m_BufferedWaveProvider, "live.wav");
// set up playback
m_Player = new WaveOut();
m_Player.Init(m_SavingWaveProvider);
// begin playback & record
m_Player.Play();
m_Recorder.StartRecording();
}
public void EndLive()
{
// stop recording
m_Recorder.StopRecording();
// stop playback
m_Player.Stop();
m_Player.Dispose();
// finalise the WAV file
m_SavingWaveProvider.Dispose();
}
}
Мое тестовое приложение не содержит ничего, кроме этих 2 кнопок.Кто-нибудь знает, почему я получаю эти партии периодического молчания во время записи?