[英]unwanted silence parts in NAudio recording
我嘗試編寫一個應用程序來記錄麥克風的聲音,然后將其直接發送到揚聲器。 為了進行測試,我使用頭戴式耳機以避免聲音反饋。 我找到了本教程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();
}
}
我的測試應用程序除了這兩個按鈕外沒有其他任何內容。 有人知道為什么我在錄音時會出現這些周期性的靜音部分嗎?
這是因為BufferedWaveProvider
在沒有緩沖任何音頻的情況下會產生靜音,這在實時流式傳輸音頻時可能會發生。 您最好將接收到的音頻寫入WaveFileWriter
並將其放入RecorderOnDataAvailable
BufferedWaveProvider
中,而不是使用SavingWaveProvider
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.