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.