Работа с микшерными устройствами
Для этого юзал стандартные функции из набора mixer-API. И гдей-то у меня закралась гадкая ошибка (вот только не надо щас приколов про глюк в ДНК).
Подход был следующий (схематично):
1)получить количество устройств (mixerGetNumDevs)
2) открываем по очереди каждое из устройств (mixerOpen)
3) получаем параметры микшерного устройства (mixerGetDevCaps)
4) По каждой из аудио-линий получаем ее параметры (mixerGetLineInfo) и параметры ее управляющих элементов (mixerGetLineControls )
5) По каждому управляющему элементу можем получить или установить его значение (mixerGetControlDetails/mixerSetControlDetails).
Короче, все практически работает, только количество найденных прогой звуковых каналов явно не соответствует действительности. Ну, например, в стандартном Регуляторе я могу поменять с десяток различных видов каналов (общая громкость, Wave-audio, CD-audio и куча прочего). А мне винда говорит только про то, что у меня всего пара каналов. Я пробовал на разных виндах (то есть, и та и другоая XP, но разных редакций), и разные звуковухи и на других компах тестил. Видать, баг в самом моем понимании всей этой микшерной катавасии.
Я не спрашиваю, где у меня глюк, просто, может, подскажете, как еще можно это все сделать - может, переделаю все заново по другой схеме - глядишь, и прояснится чего. Или может кто делал уже такое - киньте исходники желательно на Delphi или можно на C/Cpp.
Народ, я тут пытался как-то создать свой аналог Регулятора громкости (ну, чтобы показывал установленные звуковые устройства, по ним - аудиоканалы и позволял последние изменять, "мутировать", устанавливать громкость и пр).
Для этого юзал стандартные функции из набора mixer-API. И гдей-то у меня закралась гадкая ошибка (вот только не надо щас приколов про глюк в ДНК).
Подход был следующий (схематично):
1)получить количество устройств (mixerGetNumDevs)
2) открываем по очереди каждое из устройств (mixerOpen)
3) получаем параметры микшерного устройства (mixerGetDevCaps)
4) По каждой из аудио-линий получаем ее параметры (mixerGetLineInfo) и параметры ее управляющих элементов (mixerGetLineControls )
5) По каждому управляющему элементу можем получить или установить его значение (mixerGetControlDetails/mixerSetControlDetails).
Короче, все практически работает, только количество найденных прогой звуковых каналов явно не соответствует действительности. Ну, например, в стандартном Регуляторе я могу поменять с десяток различных видов каналов (общая громкость, Wave-audio, CD-audio и куча прочего). А мне винда говорит только про то, что у меня всего пара каналов. Я пробовал на разных виндах (то есть, и та и другоая XP, но разных редакций), и разные звуковухи и на других компах тестил. Видать, баг в самом моем понимании всей этой микшерной катавасии.
Я не спрашиваю, где у меня глюк, просто, может, подскажете, как еще можно это все сделать - может, переделаю все заново по другой схеме - глядишь, и прояснится чего. Или может кто делал уже такое - киньте исходники желательно на Delphi или можно на C/Cpp.
Не знаю как у вас там в XР-ях, па у меня в 2000 стандартный регулятор громкости не позволяет изменять параметры микшеров. :)
Мне кажется ты просто немного перепутал понятия. Короче, используй auxGetNumDevs, auxGetDevCaps и далее функции, начинающиеся с wave и midi (типа waveOutOpen).
Не знаю как у вас там в XР-ях, па у меня в 2000 стандартный регулятор громкости не позволяет изменять параметры микшеров. :)
Мне кажется ты просто немного перепутал понятия. Короче, используй auxGetNumDevs, auxGetDevCaps и далее функции, начинающиеся с wave и midi (типа waveOutOpen).
Хорошо, а как же тогда быть, например, с функцией Mute? Или если моя карточка поддерживает более 2х каналов, напр., 6? Эти функции могут только менять громкость с точностью до двух каналов, но они
1) не предоставляют информации о том, какие микшерные устройства есть в системе и какие аудио-линии на них доступны, их названия, возможности и пр.
2) повторюсь, не позволяют "мутировать" звук
3) не позволяют менять дополнительные параметры (напр., баланс, или усиление для микрофона, или доп. усиление нижних/верхних частот, как на нек. карточках)
4) короче, кроме установки громкости на Wave-линии не позволяют делать ничего из того, что можно сделать в Регуляторе Громкости