簡體   English   中英

NAudio錄音中不需要的靜音部分

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM