Работа с микшерными устройствами
Для этого юзал стандартные функции из набора mixer-API. И гдей-то у меня закралась гадкая ошибка (вот только не надо щас приколов про глюк в ДНК).
Подход был следующий (схематично):
1)получить количество устройств (mixerGetNumDevs)
2) открываем по очереди каждое из устройств (mixerOpen)
3) получаем параметры микшерного устройства (mixerGetDevCaps)
4) По каждой из аудио-линий получаем ее параметры (mixerGetLineInfo) и параметры ее управляющих элементов (mixerGetLineControls )
5) По каждому управляющему элементу можем получить или установить его значение (mixerGetControlDetails/mixerSetControlDetails).
Короче, все практически работает, только количество найденных прогой звуковых каналов явно не соответствует действительности. Ну, например, в стандартном Регуляторе я могу поменять с десяток различных видов каналов (общая громкость, Wave-audio, CD-audio и куча прочего). А мне винда говорит только про то, что у меня всего пара каналов. Я пробовал на разных виндах (то есть, и та и другоая XP, но разных редакций), и разные звуковухи и на других компах тестил. Видать, баг в самом моем понимании всей этой микшерной катавасии.
Я не спрашиваю, где у меня глюк, просто, может, подскажете, как еще можно это все сделать - может, переделаю все заново по другой схеме - глядишь, и прояснится чего. Или может кто делал уже такое - киньте исходники желательно на Delphi или можно на C/Cpp.
Цитата:
Originally posted by AviDen
Народ, я тут пытался как-то создать свой аналог Регулятора громкости (ну, чтобы показывал установленные звуковые устройства, по ним - аудиоканалы и позволял последние изменять, "мутировать", устанавливать громкость и пр).
Для этого юзал стандартные функции из набора 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.
Подробней , нужны рабочии процедурки на Delphi5-6 ,
"без лишних понтов великих программистов" ,
тоесть нужна коротко сама суть:
1) снять стерео сигнал с микшера ;
2) регулировать уровень записи с микшера ;
3) после , поместить этот сигнал в массив ;
4) затем , поместить массив "MCISendString(play..."
на воспроизведение;
5) далее , регулировать урровень громкости
воспроизведения ;
6) регулировать низкие и высокие частоты при
воспроизведении ;
P.S. : Пожалуйсто в отдельные процедурки закоментированные для использования в программе на Delphi5-6.
С Уважением Сергей.
Цитата:
Originally posted by genirator
Цитата:
Originally posted by AviDen
Народ, я тут пытался как-то создать свой аналог Регулятора громкости (ну, чтобы показывал установленные звуковые устройства, по ним - аудиоканалы и позволял последние изменять, "мутировать", устанавливать громкость и пр).
Для этого юзал стандартные функции из набора 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.