Перехват проигрываемого wave audio
От: АлександрП  
Дата: 30.07.02 14:51
Оценка:
Существует такая задача:
необходимо реализовать частотный анализатор, вне зависимости от того, какой программой идет воспроизведение.
Подобно тому, как реализовано в WinAmp, только отдельной программой.
Возник вопрос : каким образом считывать в буфер проигрываемые данные, чтобы потом с помощью разложения в ряд Фурье их проанализировать.
Использование MCI, функций WaveAudio (waveInOpen.. ) не приводит к необходимому результату, потому что
программа, которая проигрывает файл уже открыла устройство, и повторно открыть его моей программой не представляется возможным.
Использование ACM тоже по всей видимости помочь здесь не может.
Подскажите способ, которым можно реализовать данную программу.
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
Re: Перехват проигрываемого wave audio
От: PSP Беларусь  
Дата: 01.08.02 07:43
Оценка:
Здравствуйте АлександрП, Вы писали:

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

АП>необходимо реализовать частотный анализатор, вне зависимости от того, какой программой идет воспроизведение.
АП>Подобно тому, как реализовано в WinAmp, только отдельной программой.
А что реализовано в винамп?

АП>Возник вопрос : каким образом считывать в буфер проигрываемые данные, чтобы потом с помощью разложения в ряд Фурье их проанализировать.

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

Тут конечно про хуки говорили. Но это криво.

Тебе надо считывать с микрофона или то, что играют?

Если то что играют, то во всех нормальных(современных картах) в recording control можно вместо микрофона или Line In выбрать Wave Out Mix. Это будет всё то, что в данный момент ты слышишь из спикеров.
Всегда Ваш, PSP.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.