c# - 录制某个应用程序的声音

标签 c# audio record naudio wasapi

我想知道有没有办法录制某个应用程序的声音?我搜索了一段时间,但没有找到有关此的一些有用信息。所以现在我使用 NAudio 库来录制 WASAPI 环回和麦克风声音,将它们混合在一起并使用以下代码保存到 mp3 文件:

Silence = new WaveOut();
Silence.Init(new SignalGenerator() { Gain = 0 });
Silence.Play();

SoundOut = new WasapiLoopbackCapture();
SoundOut.DataAvailable += SoundOut_DataAvailable;
SoundOut.StartRecording();

SoundOutBuffer = new BufferedWaveProvider(SoundOut.WaveFormat);

SoundIn = new WaveIn();
SoundIn.WaveFormat = SoundOut.WaveFormat;
SoundIn.DataAvailable += SoundIn_DataAvailable;
SoundIn.StartRecording();

SoundInBuffer = new BufferedWaveProvider(SoundIn.WaveFormat);

List<ISampleProvider> Sources = new List<ISampleProvider>
{
    SoundOutBuffer.ToSampleProvider(),
    SoundInBuffer.ToSampleProvider()
};

Mixer = new MixingSampleProvider(Sources);
Sampler = new SampleToWaveProvider16(Mixer);
MP3Writer = new LameMP3FileWriter("File.mp3", Mixer.WaveFormat, 128);

我还发现了 CSCore 库,它看起来像 NAudio,具有一些额外的功能,但完全缺乏文档。 CSCore 可能有我需要的功能吗?

最佳答案

没有“合法”的 API 可用于记录应用程序输出,以准确解决相关任务。

有两种黑客风格的方法可以实现这一目标:

  1. 从环回设备记录,数据将从所有应用程序混合输出,而不仅仅是特定的
  2. Hook 应用程序内的音频 API,以拦截应用程序将数据发送到音频输出设备的请求,并作为“中间主”记录它或以其他方式复制到其他地方

第一个相对简单,另一个是针对 API 和应用程序的破解,长话短说很难做到。

另请参阅:

关于c# - 录制某个应用程序的声音,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22845390/

相关文章:

c# - 获取鼠标的移动方向

arrays - 如何在VHDL中初始化记录数组?

ios - 如何用 iPhone 扬声器录制音频?

c# - XslCompiledTransform 换行符,如何输入它们?

c# - VB.NET 外部 EXE 嵌入式

android - openfl - 音频不适用于 cpp 目标

c# - 如何使用 C# 暂停 MP3 文件?

c# - WPF-在循环更新UI时播放声音

java - Java如何从第一行开始向mysql表的特定字段插入数据

c# - NHibernate QueryOver group by 不选择按列分组