Запись звука определенного приложения

Мне было интересно, есть ли способ записать звук определенного приложения? Я искал некоторое время, но не нашел полезной информации об этом. Итак, теперь я использую библиотеку 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 есть нужный мне функционал?


person Sign    schedule 03.04.2014    source источник
comment
CSCore имеет реализацию AudioSessions API. Но, к сожалению, Windows не предоставляет никаких API для захвата звука определенного приложения.   -  person Florian    schedule 06.04.2014


Ответы (1)


Не существует «легального» API, доступного для записи выходных данных приложения с точки зрения того, чтобы он был разработан именно для решения рассматриваемой задачи.

Есть два хакерских подхода для достижения цели:

  1. Для записи с петлевого устройства, и данные будут смешаны на выходе из всех приложений, а не только из определенного
  2. Перехватывать аудио API внутри приложения, чтобы перехватывать запросы приложений на отправку данных на устройство вывода звука и, будучи «основным посередине», записывать их или иным образом копировать в другое место.

Первый относительно просто сделать, другой — это хак, специфичный для API и приложения, и, короче говоря, его трудно сделать.

Смотрите также:

person Roman R.    schedule 03.04.2014
comment
re: # 1 -- Интересно, можно ли взломать приложение, чтобы использовать коммуникационное устройство по умолчанию и звуковое устройство по умолчанию как способ отделить звук приложения от остальных (и если это будет проще, чем # 2) - - или я действительно хотел бы, чтобы Windows позволяла вам указывать аудиоустройство для приложения: D - person bdimag; 03.04.2014
comment
Это будет №2, а не №1. Существуют разные аудио API, любое подключение в основном начинается с проверки того, какой API использует целевое приложение, а затем точного подключения этого API. На самом деле есть № 3, который представляет собой полнофункциональное виртуальное аудиоустройство, но это излишество даже по сравнению с № 2, который, однако, является самым чистым методом. - person Roman R.; 03.04.2014