Версия для печати
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум на Исходниках.RU > Программирование звука > как программно определить наличие звука на выходе звуковой карты?


Автор: p486 11.07.13, 14:47
доброго времени суток!

появилась идея автоматически вкл/откл акустическую систему...
аппаратно и программно все уже состыковал, могу программно отключить усилитель от сети.

осталось только научить программу определять наличие звука на выходе звуковой карты. изначальный план такой: если появился относительно непрерывный звук на протяжении 5с, то включаем усилитель если звука нет на протяжении 10мин, то усилитель можно отключить.

я со звуком никогда не работал прошу УКАЗАТЬ правильное направление и/или помочь ПРИМЕРОМ желательно на С++

за ранее спасибо.

Автор: Prince 11.07.13, 15:56
Цитата
аппаратно и программно все уже состыковал, могу программно отключить усилитель от сети.

Почему не отключать/включать усилитель по наличию/отсуствию сигнала на его входе, аппаратно.

Автор: p486 11.07.13, 18:57
Цитата Prince @
Почему не отключать/включать усилитель по наличию/отсуствию сигнала на его входе, аппаратно.

1) прибор задумывался как устройство централизованного управления приборами, не хотелось бы к нему подводить провода с аудиовыхода звуковой карты
2) аппаратная реализация не является экономически оправданной
3) зачем усложнять прибор функцией которая возможно не окажется востребованной?
4) при программной реализации появится возможность гибкого управления временными задержками перед вкл/откл

Автор: Prince 11.07.13, 20:03
Цитата
прибор задумывался как устройство централизованного управления приборами, не хотелось бы к нему подводить провода с аудиовыхода звуковой карты

Я имел в виду устройство, смонтированное внутри усилителя(активной акустической системы), можно отключаемое, можно с регулировками задержек. Провода аудио к нему и так подведены. В чём экономическая неоправданность тоже не пойму. Устройство реализует аппаратно стендбай режим, аналогичный тому, что вы хотите реализовать аппаратно-програмным способом. Можно будет подключать любой источник звука, не обязательно комп, устройство(усилитель) будет фунциклировать самостоятельно.

Цитата
я со звуком никогда не работал прошу УКАЗАТЬ правильное направление и/или помочь ПРИМЕРОМ желательно на С++

:scratch: :-? В FAQ есть литература. Что-нибудь почитать и попробовать что-нибудь сделать. Секунова почитайте. Или Музыченко. Или Кинтцеля. Примеры записи звука в приложениях к книгам есть, и на форуме есть, и в этом разделе есть, и вообще в интернете есть. А вам прежде всего необходимо реализовать процесс записи.

Автор: p486 11.07.13, 20:20
Цитата Prince @
А вам прежде всего необходимо реализовать процесс записи.

что то я не совсем понял. зачем мне записывать звук? вот к примеру в win7 при изменении системной громкости (при воспроизведении) двигается направляющая ползунка в такт со звуком. я думал можно получить доступ к регистру ЦАП и по среднеарифметическому значению за определенное время определить идет ли сейчас воспроизведение звука.

Автор: Prince 11.07.13, 21:03
Цитата
вот к примеру в win7 при изменении системной громкости (при воспроизведении) двигается направляющая ползунка в такт со звуком.

Какая такая направляющая? Скрин приведите.
Цитата

я думал можно получить доступ к регистру ЦАП и по среднеарифметическому значению за определенное время определить идет ли сейчас воспроизведение звука.

Нету такого регистра.
Но в любой из версий винды можно свободно получать данные от АЦП. Записываете звук, вычисляете уровень по какому-то алгоритму и чё-то с ним дальше делаете. Правда, одновременно и полноценно пользоваться функциями записи других приложений будет затруднительно или невозможно, так как все они используют один и тот же аппаратный микшер. Т.е., не могут два приложения записывать звук с разных входов микшера.

Возможно, в 7-ке есть возможность получить доступ к общему миксу приложений через wasapi, я не в курсе. :-? Мне такая инфа не попадалась.

Автор: MIF 11.07.13, 21:17
Цитата Prince @
Правда, одновременно и полноценно пользоваться функциями записи других приложений будет затруднительно или невозможно, так как все они используют один и тот же аппаратный микшер. Т.е., не могут два приложения записывать звук с разных входов микшера.

По-моему, функции звуковой карты (wave...) ексклюзивны, а микшер (mixer...) можно шерить.

А в обшем, присоединяюсь к советам . Придется писать почти весь функционал захвата воспроизведения звука.

Автор: Prince 11.07.13, 21:23
Цитата
По-моему, функции звуковой карты (wave...) ексклюзивны, а микшер (mixer...) можно шерить.

Не, шерить функции можно и те и другие. Просто сам микшер и АЦП в единственном эеземпляре. Если первое приложение включает микрофонный вход, а второе - stereo mixer(или любой другой вход), и первое и второе приложение будут писать микс микрофон+стереовыход.
В 98-й, wave... были эксклюзивны, насколько помню. А в XP уже нет.

Цитата
Придется писать почти весь функционал воспроизведения звука.

Зачем зачеркнули? "Захвата" было правильным словом.

Автор: p486 11.07.13, 22:13
Цитата Prince @
Какая такая направляющая? Скрин приведите.
зелененькая такая :)
user posted imageuser posted imageuser posted image

Цитата Prince @
Нету такого регистра.

http://www.gaw.ru/html.cgi/txt/doc/dac/interdacs.htm см. Рисунок 15

Автор: Prince 12.07.13, 08:32
Цитата
зелененькая такая

Когда найдёте, каким способом в 7-ке можно вытянуть уровень из "микшера", дайте знать.
Нет у меня 7-ки под рукой, не на чем разбираться, я с ней сталкиваюсь эпизодически, что-то читаю, потом забываю.

Цитата

МС ЦАП и интерфейсы между ЦАП и 8/16 разрядными CPU, не имеют отношения к теме.
Возьмите что-нить из кодеков, применяемых в звуковых картах:
ALC861
Обратите внимание на раздел 7 (HDA Link Protocol)
Между собственно ЦАП и CPU кучка аппаратных и програмных посредников. Проц напрямую в ЦАП ничего не пишет, и не может в принципе, и такого регистра(ЦАП) в кодеке, куда проц мог бы что-то записать, нет.
Механизм взаимодействия аудиокодека с управляющим контроллером, и контроллера с другими подсистемами компа, сложнее связки ЦАП-ЦПУ на рисунке 15.

Powered by Invision Power Board (https://www.invisionboard.com)
© Invision Power Services (https://www.invisionpower.com)