Page 1 of 2
Единый регулятор громкости
Posted: Sun Oct 27, 2013 12:53 am
by Mario_r4
Я не буду оригинален - мысль возникала у всех. Пока что на форуме наблюдались отдельные попытки, то для AC97, то для HDA. Изобретение велосипедов в общем то. Предлагаю сделать таки общий велосипед.
Так как сделано сейчас - каждое приложение регулирует свой звук, хорошо. Не хорошо, когда запускаешь плеер аудио или видео ночью и твои соседи начинают стучать в стены, а домашние вскакивают с кровати, орут благим матом и крутят у виска.
В общем мысль такая. Договориться где драйверы будут брать настройку звука. Оптимальным я считаю получение через системную функцию. Которая будет получать, хранить и отдавать произвольный блок с данными (формат которого нужно проработать), определяющими громкость отдельных устройств (есть ведь еще, как минимум, и на запись регулировка громкости). Таким образом будет две подфункции. Со стороны приложения можно хранить настройки в INI файле и применять при старте системы. Со стороны драйверов - получать блок информацией и использовать записанные в нем значения.
Может я конечно тут все упростил - я не писал звуковые драйвера ни разу. В общем есть ли есть возражения и замечания просьба высказываться. А может я вообще не прав и то что есть сейчас уже идеал, а я чего то не понимаю.
Re: Единый регулятор громкости
Posted: Sun Oct 27, 2013 1:16 am
by Leency
Тебя прёт на хорошие идеи в последнее время. Поддерживаю.
>> Оптимальным я считаю получение через системную функцию. Которая будет получать, хранить и отдавать произвольный блок с данными (формат которого нужно проработать), определяющими громкость отдельных устройств (есть ведь еще, как минимум, и на запись регулировка громкости).
Re: Единый регулятор громкости
Posted: Sun Oct 27, 2013 7:39 am
by Serge
Mario_r4
Приложения уровень программно регулируют. А системные настройки имеют смысл для master volume.
Re: Единый регулятор громкости
Posted: Sun Oct 27, 2013 9:33 am
by Asper
Системная функция не нужна. Приложение "Единый регулятор громкости" взаимодействует с драйвером. Другие приложения запускают его с параметром.
Re: Единый регулятор громкости
Posted: Sun Oct 27, 2013 10:09 am
by Serge
Надо этот "Единый регулятор громкости" встроить в панель.
Re: Единый регулятор громкости
Posted: Sun Oct 27, 2013 12:35 pm
by Leency
Serge wrote:Надо этот "Единый регулятор громкости" встроить в панель.
Может отдельное приложение? Так удобнее будет модифицировать, не комильфо всё в панель засовывать
Регулятор будет открываеться как Календарь возле панели. Скрытие при повторном нажатии на значёк звука или при деактивации окна.
Re: Единый регулятор громкости
Posted: Sun Oct 27, 2013 1:00 pm
by Mario_r4
Asper wrote:Системная функция не нужна. Приложение "Единый регулятор громкости" взаимодействует с драйвером. Другие приложения запускают его с параметром.
Ага, а если драйвер не запускается, то пользователь крутит регулятор и удивляется почему звука нет. Надо продумывать все ситуации.
Еще я не видел, чтобы один и тот же регулятор из выложенных работал и с AC97 и HDA.
Re: Единый регулятор громкости
Posted: Sun Oct 27, 2013 4:22 pm
by Serge
Mario_r4
Если драйвер не запускается должен быть значок с перечёркнутым динамиком. И пользователь всё поймёт.
Еще я не видел, чтобы один и тот же регулятор из выложенных работал и с AC97 и HDA.
API для всех одинаковое. Если у драйвера проблема с регулировкой громкости, приложение не виновато.
Re: Единый регулятор громкости
Posted: Sun Oct 27, 2013 4:22 pm
by Asper
Mario_r4 wrote:Ага, а если драйвер не запускается, то пользователь крутит регулятор и удивляется почему звука нет. Надо продумывать все ситуации.
Если драйвер не запускается, то регулятор не запускается тоже, и сообщает пользователю об ошибке.
Mario_r4 wrote:Еще я не видел, чтобы один и тот же регулятор из выложенных работал и с AC97 и HDA.
Эта версия "регулятора" работает и с
HDA tv 12 и c
AC97.
Re: Единый регулятор громкости
Posted: Sun Oct 27, 2013 5:04 pm
by Mario_r4
Asper wrote:Эта версия "регулятора" работает и с
HDA tv 0.12 и c
AC97.
Замечательно, беру сборку 4107, запускаю Qemu 0.12.2 со строкой:
Code: Select all
qemu -L . -m 128 -fda kolibri.img -fdb w98.img -boot a -hda c100.img -hdb c100_2.img -cdrom kolibri.iso -localtime -k ru -vga vmware -net nic,model=ne2k_pci -net user -soundhw ac97,pcspk
Запускаю MP3 ассоциации из файлового менеджера. Файл проигрывает AC97SND. Запускаю MIXER, проверяю все 6 кнопок совместно с PgUp|PgDn и Home|End - никакого эффекта. Может быть проблема в том, что:
Из AC97 тестировался только на EMU10K1X
Кстати о том что он не работает в Qemu я писал. Реакции не было совсем никакой. Так что утверждать о работоспособности наверняка, если не проверено - нельзя.
Re: Единый регулятор громкости
Posted: Sun Oct 27, 2013 5:06 pm
by Mario_r4
Serge wrote:Если драйвер не запускается должен быть значок с перечёркнутым динамиком. И пользователь всё поймёт.
Еще я не видел, чтобы один и тот же регулятор из выложенных работал и с AC97 и HDA.
API для всех одинаковое. Если у драйвера проблема с регулировкой громкости, приложение не виновато.
И по какому критерию/признаку приложение должно выводить перечеркнутый динамик?
Re: Единый регулятор громкости
Posted: Sun Oct 27, 2013 5:07 pm
by Serge
Mario_r4
Qemu стал эталоном железки ?
Re: Единый регулятор громкости
Posted: Sun Oct 27, 2013 5:09 pm
by Serge
И по какому критерию/признаку приложение должно выводить перечеркнутый динамик?
Чтобы работать с драйвером надо получить его логический номер. Если вместо номера ядро возвращает 0, значит драйвер не загружается.
Re: Единый регулятор громкости
Posted: Sun Oct 27, 2013 5:27 pm
by Mario_r4
Serge wrote:Mario_r4
Qemu стал эталоном железки ?
Т.е. то что драйвер используется стандартный, звук проигрывается что в плеера аудио, что в плеере видео, в них же регулируется, а в миксере не регулируется это нормальное положение вещей? По мне так никак это не является нормальной ситуацией.
Re: Единый регулятор громкости
Posted: Sun Oct 27, 2013 6:34 pm
by Serge
Mario_r4
Потому что приложения регулируют громкость программно. Infinity при помощи нехитрой математики
Code: Select all
.mix_loop:
add dword [edx], 8
add edx, 12
dec ecx
jz @F
mov eax, [edx]
movq mm1, [eax] ;семпл
movd mm2, [edx+4] ;громкость
punpckldq mm2, mm2
pmulhw mm1, mm2
psllw mm1, 1
paddsw mm0, mm1
jmp .mix_loop
независимо управляет громкостью каждого звукового буфера. А насколько достоверно Qemu эмулирует AC97 вопрос к разработчикам эмулятора. Есть ещё Vbox, правда он прямой потомок Qemu.