Board.KolibriOS.org

Официальный форум KolibriOS
Текущее время: Ср май 24, 2017 1:31 am

Часовой пояс: UTC+03:00




Начать новую тему  Ответить на тему  [ 32 сообщения ]  На страницу 1 2 3 След.
Автор Сообщение
 Заголовок сообщения: System audio mixer
СообщениеДобавлено: Вт авг 17, 2010 11:28 pm 
Не в сети
Аватара пользователя

Зарегистрирован: Пт июн 27, 2008 3:22 pm
Сообщения: 971
Простой системный аудиомикшер. Вообще-то писался под драйвер HDA, но сделал также поддержку AC97 драйверов. Из AC97 тестировался только на EMU10K1X, так, что если найдёте ошибку сообщайте.
Внимание корректно работает только с самыми последними версиями драйвера HDA, не старше 15 августа этого года!

Для HDA есть возможность отдельно регулировать громкость правого и левого канала.
Для регулировки левого канала - Home/End, правого - PageUp/PageDown.
Для AC97 возможно регулировать только оба канала одновременно, т.е. уровень звучания в обоих каналах будет одинаковый.


Вложения:
Комментарий к файлу: System audio mixer
MIXER.7z [11.36 КБ]
232 скачивания
Вернуться к началу
 Заголовок сообщения: Re: System audio mixer
СообщениеДобавлено: Ср авг 18, 2010 9:32 am 
Не в сети
Kernel Developer

Зарегистрирован: Ср мар 08, 2006 6:25 pm
Сообщения: 3925
Asper

Уровень громкости задаётся как в DirectSound: ослабление сигнала в сотых db от 0db до -100db. Конвертировать уровень в формат кодека должен драйвер, а не прикладной софт.


Вернуться к началу
 Заголовок сообщения: Re: System audio mixer
СообщениеДобавлено: Ср авг 18, 2010 1:03 pm 
Не в сети
Аватара пользователя

Зарегистрирован: Пт июн 27, 2008 3:22 pm
Сообщения: 971
Serge писал(а):
Asper

Уровень громкости задаётся как в DirectSound: ослабление сигнала в сотых db от 0db до -100db. Конвертировать уровень в формат кодека должен драйвер, а не прикладной софт.


Для AC97 да от 0 до -100, для HDA из установок виджета. Не понял, в чем вопрос, вроде бы сейчас для AC97 драйверов уровень громкости задается именно в децибеллах. ЧЯДНТ?


Вернуться к началу
 Заголовок сообщения: Re: System audio mixer
СообщениеДобавлено: Ср авг 18, 2010 2:32 pm 
Не в сети
Kernel Developer

Зарегистрирован: Ср мар 08, 2006 6:25 pm
Сообщения: 3925
Asper
Цитата:
вроде бы сейчас для AC97 драйверов уровень громкости задается именно в децибеллах
И для SB16.

1.Мне не нравится идея пересчитывать уровни из db в фиксированные шаги. Тем более что в последних кодеках АС97 было не 5 а 6 бит на громкость (ALC658 - один из самых распространненых), у SBPro их 4, а у SB16 8.

Лучше оперировать уровнями в децибелах. А точное значение получать парой SetMasterVol/GetMasterVol.

2.Формат вызовов DEV_GET_MASTERVOL и DEV_SET_MASTERVOL в новом драйвере изменён, что приводит к несовместимости.


Вернуться к началу
 Заголовок сообщения: Re: System audio mixer
СообщениеДобавлено: Ср авг 18, 2010 2:42 pm 
Не в сети
Аватара пользователя

Зарегистрирован: Пт июн 27, 2008 3:22 pm
Сообщения: 971
А как ты представляешь установку 10000 значений?

Цитата:
А точное значение получать парой SetMasterVol/GetMasterVol.

Так и делается.

Цитата:
2.Формат вызовов DEV_GET_MASTERVOL и DEV_SET_MASTERVOL в новом драйвере изменён, что приводит к несовместимости.

А можно подробнее?


Вернуться к началу
 Заголовок сообщения: Re: System audio mixer
СообщениеДобавлено: Ср авг 18, 2010 4:13 pm 
Не в сети
Kernel Developer

Зарегистрирован: Ср мар 08, 2006 6:25 pm
Сообщения: 3925
10 000 и не получится. Уровни ниже -60 db должно быть одинаково неслышно на всех кодеках. Сделать ползунок на 10 000 позиций тоже проблематично. В любом случае финальная конвертация уровня из db в формат чипа дело драйвера, а не прикладного софта.

В вызове SOUND.DEV_SET_MASTERVOL уровень передаётся в децибелах как знаковое целое 32 бита. В твоей программе в виде упакованной структуры где старшие 8 бит - номер канала а младшие 24 уровень в шагах кодека. Разный формат параметров для одного вызова очень неудачная идея.

Вызов SRV_GETVERSION возвращает текущую версию SOUND.API в младшем слове и минимальную совместимую в старшем. Изменение версии API с 1.00 (0х0100) до 17.218 (0x11DA) выглядит слишком большим.


Вернуться к началу
 Заголовок сообщения: Re: System audio mixer
СообщениеДобавлено: Ср авг 18, 2010 7:21 pm 
Не в сети
Аватара пользователя

Зарегистрирован: Пт июн 27, 2008 3:22 pm
Сообщения: 971
Всё теперь понял.
Хм... а всё-таки регулировка отдельно правого и левого канала мне показалась интересной, может сделать под это дело дополнительный вызов драйвера? Кстати для AC97 кодеков в принципе можно отдельно регулировать каналы или нет?
DEV_GET_INFO тоже стандартизован?


Вернуться к началу
 Заголовок сообщения: Re: System audio mixer
СообщениеДобавлено: Ср авг 18, 2010 8:46 pm 
Не в сети
Kernel Developer

Зарегистрирован: Ср мар 08, 2006 6:25 pm
Сообщения: 3925
Asper

Раньше DEV_GET_INFO возвращала данные в формате
Код:
struc CTRL_INFO
{   .pci_cmd         dd ?
    .irq         dd ?
    .glob_cntrl       dd ?
    .glob_sta         dd ?
    .codec_io_base    dd ?
    .ctrl_io_base     dd ?
    .codec_mem_base   dd ?
    .ctrl_mem_base    dd ?
    .codec_id         dd ?
}
Сейчас этот вызов остался только в Emu10k1x.asm, в приложениях он не используется.

Я думаю что лучше всего дополнить структуру необходимыми полями. Драйвер будет определять версию по размеру структуры в вызове DEV_GET_INFO, а приложение по версии SOUND.API.
Цитата:
а всё-таки регулировка отдельно правого и левого канала мне показалась интересной, может сделать под это дело дополнительный вызов драйвера? Кстати для AC97 кодеков в принципе можно отдельно регулировать каналы или нет?
Да, такая регулировка есть.
Я не знаю есть ли сейчас программы напрямую устанавливающие громкость кодека. Раньше это был плеер, но теперь в Infinity уровни устанавливаются отдельно для каждого звукового буфера. ИМХО лучший вариант добавить новые вызовы, сохранив совместимость с уже существующими. В этом случае в драйвере надо прописать
Код:
CURRENT_API     equ   0x0200      ;2.00
COMPATIBLE_API  equ   0x0100      ;1.00
API_VERSION     equ   (COMPATIBLE_API shl 16) or CURRENT_API


Вернуться к началу
 Заголовок сообщения: Re: System audio mixer
СообщениеДобавлено: Чт авг 19, 2010 8:01 am 
Не в сети
Аватара пользователя

Зарегистрирован: Пт июн 27, 2008 3:22 pm
Сообщения: 971
Нашёл у себя на компьютере документацию на AC97 кодеки AC97ComponentSpecificationv2.1.pdf, которую я скачивал когда-то давно вместе с другой хардварной документацией. Так вот в ней прочитал про формат регистра master volume [mute:1][0:1][right channel:6][0:2][left channel:6]. Максимум 63 Дб. В вызове SET_MASTER_VOLUME ты проверяешь устанавливаемое значение на границы и затем это значение копируешь и в al и в ah, т.е. отдельная установка каналов теряется на уровне этой функции.
Если делать новую версию драйверов, то не проще ли сразу изменить формат SET_MASTER_VOLUME для установки каналов отдельно, а не делать новый вызов, который по большей части будет дублировать данный? Да это приведёт к несовместимости с текущими программами выводящими звук и использующими этот вызов, но даже если такие есть (врядли) то их немного, можно их поправить. То же касается вызова GET_MASTER_VOLUME.
В общем для чего сохранять совместимость не понимаю.


Вернуться к началу
 Заголовок сообщения: Re: System audio mixer
СообщениеДобавлено: Чт авг 19, 2010 8:14 am 
Не в сети
Аватара пользователя

Зарегистрирован: Пт июн 27, 2008 3:22 pm
Сообщения: 971
Насчёт DEV_GET_INFO я его использовал некоторое время для отладки, а так в приложениях да пока не был задействован. Я просто думал использовать его в HDA драйвере для возвращения данных из переменной spec типа HDA_GSPEC, это позволило бы например программе определять к каким портам какие устройства подключены и другую полезную информацию о имеющихся нодах. Но т.к. в AC97 такой информации нет, то делать отдельный вызов что ли?


Вернуться к началу
 Заголовок сообщения: Re: System audio mixer
СообщениеДобавлено: Чт авг 19, 2010 11:08 am 
Не в сети
Kernel Developer

Зарегистрирован: Ср мар 08, 2006 6:25 pm
Сообщения: 3925
Asper

Большевики сами создают себе трудности, которые успешно преодолевают.
Править придётся не только программы но и все драйверы. Зачем на ровном месте создавать несовместимость с уже существующим API, когда достаточно двух новых ioctl SET_CHANNEL_VOLUME и GET_CHANNEL_VOLUME ?


Вернуться к началу
 Заголовок сообщения: Re: System audio mixer
СообщениеДобавлено: Чт авг 19, 2010 8:00 pm 
Не в сети
Аватара пользователя

Зарегистрирован: Пт июн 27, 2008 3:22 pm
Сообщения: 971
:)
Ок. Номера новых вызовов и формат?


Вернуться к началу
 Заголовок сообщения: Re: System audio mixer
СообщениеДобавлено: Вс авг 22, 2010 8:32 am 
Не в сети
Kernel Developer

Зарегистрирован: Ср мар 08, 2006 6:25 pm
Сообщения: 3925
SET_CHANNEL_VOLUME equ 9
GET_CHANNEL_VOLUME equ 10

формат: номер канала, уровень в -db.

Дополнительно можно сделать пакетный вызов для обработки всех каналов сразу. Передавать битовую карту каналов и за ней массив уровней. Данные лучше не паковать и передавать как dword. Экономия памяти минимальна, больше возни.


Вернуться к началу
 Заголовок сообщения: Re: System audio mixer
СообщениеДобавлено: Вс авг 22, 2010 8:15 pm 
Не в сети
Аватара пользователя

Зарегистрирован: Пт июн 27, 2008 3:22 pm
Сообщения: 971
Спасибо, примерно так я это себе и представлял.


Вернуться к началу
 Заголовок сообщения: Re: System audio mixer
СообщениеДобавлено: Сб апр 21, 2012 6:35 pm 
Почти два года прошло, а общесистемного микшера так и нет.


Вернуться к началу
   
Показать сообщения за:  Поле сортировки  
Начать новую тему  Ответить на тему  [ 32 сообщения ]  На страницу 1 2 3 След.

Часовой пояс: UTC+03:00


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Создано на основе phpBB® Forum Software © phpBB Limited
Русская поддержка phpBB