使用 NAudio Wasapi 包装器录制音频,声音文件权重不为 0 但音频为空白
Record audio using NAudio Wasapi wrapper, sound file weight is not 0 but audio is blank
什么在起作用
- 保存文件
什么不是:
- 音频文件是空白的(作为一个长度但听不到声音,又名声音是空白的)
编辑(为清楚起见):文件权重不为 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
您正在使用 WasapiLoopbackCapture
,它试图捕获正在计算机上播放的音频。如果您打算捕获输入设备(如麦克风),则应改用 WasapiCapture
。
什么在起作用 - 保存文件
什么不是: - 音频文件是空白的(作为一个长度但听不到声音,又名声音是空白的) 编辑(为清楚起见):文件权重不为 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
您正在使用 WasapiLoopbackCapture
,它试图捕获正在计算机上播放的音频。如果您打算捕获输入设备(如麦克风),则应改用 WasapiCapture
。