【问题标题】:Record audio using NAudio Wasapi wrapper, sound file weight is not 0 but audio is blank使用 NAudio Wasapi 包装器录制音频,声音文件权重不为 0 但音频为空白
【发布时间】:2019-01-03 20:03:45
【问题描述】:

什么是有效的 - 保存文件

什么不是: - 音频文件是空白的(作为一个长度但没有可听见的声音,又名声音是空白的) 编辑(为清楚起见):文件权重不是 0。

已经使用 winmm.dll 实现了一个解决方案,但正在寻找比 16 位质量更好的解决方案。已经为 libmp3lame dll 使用 NAudio 包装器,因此使用 NAudio 是一个可行的选择。

public void Start()
        {
            if(this.isInitialized)
            {
                string outputFilePath = "...";
                this.capture = new NAudio.Wave.WasapiLoopbackCapture();
                this.writer = new NAudio.Wave.WaveFileWriter(outputFilePath, this.capture.WaveFormat);

                this.capture.DataAvailable += (s, a) =>
                {
                    this.writer.Write(a.Buffer, 0, a.BytesRecorded);
                };

                this.capture.RecordingStopped += (s, a) =>
                {
                    this.writer.Dispose();
                    this.writer = null;
                    this.capture.Dispose();
                };

                this.capture.StartRecording();
            }


        }

        public void StopAndSave()
        {
            if(this.isInitialized)
            {
                this.capture.StopRecording();
            }
        }

预期:以 WAV 音频文件格式录制音频

this.isInitialized 检查路径和文件命名约定。因为文件保存到预期位置没有添加代码。此代码部分按预期工作。

注意 - 使用 NAudio 1.8.5 - 目标系统是Win10 x64 pro

【问题讨论】:

  • “什么不是: - 音频文件是空白的(作为长度但没有可听见的声音,也就是声音是空白的)”没有多大意义。你是说文件包含数据(长度不是0字节)但数据不包含声音?
  • @Will 更正。我更新了我的问题以反映这一点
  • 您是否通过另一个录音应用程序验证您的计算机实际上是从您认为的来源捕获声音?
  • @Will 是的。录音能力已经过验证。我使用 winmm.dll 实现了一个解决方案。我能够捕获音频并播放它。我还对目标机器上的录音设备进行了故障排除,以确认录音设备工作正常。
  • @Will 明天我将使用模拟录音设备进行测试。我怀疑问题可能是因为录音设备是通过 USB 连接的,这可能会带来复杂性。

标签: c# wpf naudio wasapi


【解决方案1】:

您正在使用WasapiLoopbackCapture,它试图捕捉计算机上播放的音频。如果您要捕获输入设备(如麦克风),则应改用 WasapiCapture

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多