2

特定のアプリケーションのサウンドを録音する方法はありますか? しばらく検索しましたが、これに関する有用な情報は見つかりませんでした。だから今、私は 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 には必要な機能がありますか?

4

1 に答える 1

3

問題のタスクに正確に対処するように設計されているという点で、アプリケーションの出力を記録するために利用できる「合法的な」API はありません。

目標を達成するための 2 つのハック スタイルのアプローチがあります。

  1. ループバックデバイスから記録するには、データは特定のアプリケーションだけでなく、すべてのアプリケーションからの混合出力になります
  2. アプリケーション内でオーディオ API をフックして、データをオーディオ出力デバイスに送信するアプリケーション リクエストをインターセプトし、「メイン イン ザ ミドル」としてデータを記録するか、別の場所にコピーします。

1 つ目は比較的簡単に実行できますが、もう 1 つは API とアプリケーションに固有のハックであり、簡単に説明するのは困難です。

以下も参照してください。

于 2014-04-03T18:06:22.557 に答える