Re: Перехват проигрываемого wave audio
От: _noname Болгария  
Дата: 31.07.02 06:08
Оценка:
Здравствуйте АлександрП, Вы писали:

АП>Существует такая задача:

АП>необходимо реализовать частотный анализатор, вне зависимости от того, какой программой идет воспроизведение.
АП>Подобно тому, как реализовано в WinAmp, только отдельной программой.
АП>Возник вопрос : каким образом считывать в буфер проигрываемые данные, чтобы потом с помощью разложения в ряд Фурье их проанализировать.
АП>Использование MCI, функций WaveAudio (waveInOpen.. ) не приводит к необходимому результату, потому что
АП>программа, которая проигрывает файл уже открыла устройство, и повторно открыть его моей программой не представляется возможным.
АП>Использование ACM тоже по всей видимости помочь здесь не может.
АП>Подскажите способ, которым можно реализовать данную программу.

1. hooks in winmm.dll (mmdrv.dll on Win9x I think) — waveOutOpen() and other functions; — DLL injection and s.o. (Not completely sure but if the player uses DirectSound — stream could not be catched this way)
2. Kernel mode driver — attach to Wave device, on IRP_MJ_WRITE you should receive wave data. The problem is that communication between user mode driver and the kernel mode driver may not be through CreateFile/WriteFile (as should be) but with DeviceIoControl with custom control codes...
3. User mode driver — create a simple user mode sound driver (not a big deal) that will pass all data to the original one — this is the solution of HighCriteria, you may see their TotalRecorder at http://www.highcriteria.com
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.