【问题标题】:Record sound of a certain application录制某个应用程序的声音
【发布时间】:2014-04-03 17:57:18
【问题描述】:

我想知道有没有办法录制某个应用程序的声音?我已经搜索了一段时间,但没有找到一些有用的信息。所以现在我正在使用 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);

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

【问题讨论】:

  • CSCore 实现了 AudioSessions API。但不幸的是,Windows 没有提供任何 API 来捕捉某个应用程序的声音。

标签: c# audio record naudio wasapi


【解决方案1】:

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

有两种 hack 风格的方法可以实现目标:

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

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

另见:

【讨论】:

  • re: #1 -- 我想知道您是否可以“破解”应用程序以使用默认通信设备与默认声音设备作为将应用程序音频与其他音频分开的一种方式(如果那样的话会比 #2 更容易)——或者“我真的希望 Windows 允许您为应用程序指定音频设备”:D
  • 这将是#2 而不是#1。有不同的音频 API,任何挂钩基本上都是从检查目标应用程序使用的 API 开始,然后准确地挂钩这个 API。实际上有#3,它是一个功能齐全的虚拟音频设备,但即使与#2(最干净的方法)相比,它也是一种矫枉过正。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-06-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多