Board.KolibriOS.org

Official KolibriOS board
It is currently Sat Oct 31, 2020 6:43 pm

All times are UTC+03:00




Post new topic  Reply to topic  [ 983 posts ]  Go to page Previous 14 5 6 7 866 Next
Author Message
 Post subject:
PostPosted: Sun Apr 23, 2006 1:10 pm 
O01eg
Я спрашивал не эти данные.
Например, у меня кодек C-Media SIS 7012.
Запусти в Колибри BOARD, переключи в режим USER. Запусти AC97WAV и посмотри, что будет написано в первой строке BOARD.
У меня, например, пишется:
SI7012 integrated AC97 audio codec detected


Top
   
 Post subject:
PostPosted: Sun Apr 23, 2006 6:04 pm 
Offline

Joined: Mon Apr 10, 2006 7:22 am
Posts: 76
ICH4 integrated AC97 audio codec detected
NAMBAR: 0000e000 NABMBAR: 000e400
IRQ 5
а в Windows IRQ=17, похоже Windows сама назначает IRQ для устройств.


Top
   
 Post subject:
PostPosted: Sun Apr 23, 2006 9:01 pm 
O01eg
Хм, Интеловский кодек, странная ситуация.
У меня правда имеется тоже баг с максимальной громкостью. Но звук просто начинает дребезжать, и я грешил на дохлые емкости на выходе кодека, хотя Винде при максимальном звуке проблем нету.


Top
   
 Post subject:
PostPosted: Tue Apr 25, 2006 8:28 pm 
Offline

Joined: Sat Jan 07, 2006 4:07 am
Posts: 47
Долго думал над тем, какими блоками запускать воспроизведение в звуковой подсистеме и на данный момент решил за основу взять 48000 16 бит стерео. При этом страница делится на 128 блоков, где каждый блок по 128 выборок. Для других звуковух, размер блоков будет меняться пропорционально. Так что время воспроизведения одного блока на любой частоте дискретизации будет практически одинаковое.
Почему я решил использовать именно такие значения? Я пока не знаю, но что-то мне подсказывает, что это ещё пригодится при использовании трекерной музыки. По умолчанию в трекерах используют значение темпа 128 при 6 скорости (1:2).


Top
   
 Post subject:
PostPosted: Tue May 30, 2006 9:41 pm 
Offline
Kernel Developer

Joined: Wed Mar 08, 2006 6:25 pm
Posts: 3952
Всем
У кого-нибудь есть ссылки на исходники ресемплеров для звука? Или описания алгоритмов? Я сделал драйвер для интелловских контроллеров и начинаю прикручивать к нему звуковую библиотеку, но осталась проблема с простыми кодеками, работающими только на частоте 48000. Нужен ресемплер.


Top
   
 Post subject:
PostPosted: Tue May 30, 2006 10:06 pm 
Offline

Joined: Sat May 27, 2006 5:26 am
Posts: 100
http://ccrma-www.stanford.edu/~jos/resample/

Суть в том, чтобы с помощью интерполяции привести сигнал любой частоты < 48KHz к эталлону в 48K. А все ли звуковые карты поддерживают такую высокую пропускную способность?


Top
   
 Post subject:
PostPosted: Tue May 30, 2006 11:19 pm 
Offline
Kernel Developer

Joined: Wed Mar 08, 2006 6:25 pm
Posts: 3952
Quote:
Суть в том, чтобы с помощью интерполяции привести сигнал любой частоты < 48KHz к эталлону в 48K. А все ли звуковые карты поддерживают такую высокую пропускную способность?
Все АС97 кодеки поддерживают 48000. Для них это стандарт. Проблема в том, что некоторые только эту частоту и поддерживают :( Я этого не знал и думал вначале на 48000 24000 32000 просто забить :) оказалось фиг - вам.


Top
   
 Post subject:
PostPosted: Tue May 30, 2006 11:50 pm 
Offline

Joined: Sat May 27, 2006 5:26 am
Posts: 100
2 Serge:
Вот ещё нашёл доку про DirectSound:
http://www.sensaura.com/whitepapers/pdfs/devpc014.pdf

Там пишут, что "on all modern sound cards, the codec runs at 48 kHz. So, if you use anything other than 48 kHz for your samples (popular choices being 22,050 Hz or 44,100 Hz) then at some point a sample rate conversion (SRC) step will be required."

Так что вопрос снимается.

Вообще, интересующий сабж называется software sample rate conversion (SSRC).

ЗЫ: Не заметил, что ты уже ответил...


Top
   
 Post subject:
PostPosted: Wed May 31, 2006 11:30 am 
Offline
Kernel Developer

Joined: Wed Mar 08, 2006 6:25 pm
Posts: 3952
Quantum
Спасибо за информацию. Стэнфорд - очень полезная ссылка. Буду разбираться как всё это использовать.
Что касается звука в Win то у меня в настройка драйвера есть закладка "Качество записи" и ползунок задающий частоту дискретизации. Похоже что именно он окончательно определяет частоту кодека. По документации видно, что раньше DirectSound работал со звуковой в монопольном режиме и мог устанавливать частоту кодека по собственному желанию но теперь весь вывод микшируется программно и идет через драйвер и как драйвер решил, так и будет.


Top
   
 Post subject:
PostPosted: Wed May 31, 2006 4:21 pm 
Offline

Joined: Sat May 27, 2006 5:26 am
Posts: 100
2 Serge:
Да, в последних версиях DX миксеры исключительно софтовые. Обьясняется это тем, что невозможно гарантировать эквивалентность (по громкости, например) между любым софтовым каналом и любым хардовым. Поэтому, если приложение использует 2 канала и один окажется в софте, а второй в харде, на разных машинах результат может значительно различаться. Поэтому на хардовые каналы наложили вето.


Top
   
 Post subject:
PostPosted: Wed May 31, 2006 7:12 pm 
Serge
Когда я переделывал приложение AC97WAV (изначально написано Иваном Поддубным и поддерживало только 48 КГц, остальные проигрывались с повышенной скоростью), то реализовал линейный метод предложенный Trans'ом.
Суть его в том, что между выборками вставляется еще одна со среднеарифметическим значением двух соседних выборок.
Конечно это не самый лучший способ (преобразование Фурье лучше), но самый простой и самый быстрый.
Так можно получить из любой частоты любую частоту. Но по стандарту PCM есть только определенное количество частот, которое используется: 8000, 11025, 12000, 16000, 22050, 24000, 32000, 44100, 48000.
Я попытался написать универсальный алгоритм, который не совсем хорош, так как получились щелчки при преобразовании частот, не делящихся старшее на младшее с целым результатом. Вылеты отдельных выборок между 2-я буферами как раз и воспринимаются как щелчки.
Также тебе придется еще, и написать процедуру преобразования между 4-х, 8-и, 16-и битными данными, 32-х битные редко используются.
Наверное, проще написать отдельную процедуру для преобразования любой частоты в 48 КГц.
Микширование отдельных источников можно производить уже на 48 КГц, после преобразования.
Если нужна помощь в кодировании мыло ты знаешь.


Top
   
 Post subject:
PostPosted: Wed May 31, 2006 9:31 pm 
Offline
Kernel Developer

Joined: Wed Mar 08, 2006 6:25 pm
Posts: 3952
У меня уже готовы простые (линейная интерполяция) ММХ ресемплеры для 11025 -> 44100 и 22050 -> 44100 + конверация 8 бит в 16 и моно в стерео. Про 4 бита я первый раз слышу. Что это такое? Если разберусь с стэнфордским ресемплером то возможно переделаю свои ресемплеры под него. Я хочу сделать два варианта: если кодек работет только на 48000, то все буферы будут ресемлироваться в эту частоту. Если поддерживается 44100, то она будет основной. Я сомневаюсь, что ресемплинг сидишных 44100 в 48000 улучшает качество звука (хотя драйвер в настройках обещает максимальное качество на 48 Кгц :) ), да и 22050 и 44100 встречается чаще чем остальные частоты. Мне 12-16-24-32-48Кгц пока ни разу не попадались. Еще нужен код для загрузки драйвера. Похоже, что придётся делать загрузчик самому. 32 битный звук АС97 не поддерживает максимум 20 бит и 96 кГц (double rate mode)


Top
   
 Post subject:
PostPosted: Wed May 31, 2006 10:30 pm 
Offline

Joined: Sat May 27, 2006 5:26 am
Posts: 100
2 Serge:
Существуют следующие форматы:
* 8 бит со знаком
* 8 бит без знака (стандарт)
* 16 бит big endian
* 16 бит little endian (стандарт)
* 4 бит со сжатием IMA ADPCM (очень редко используется, разжимается в 16 бит)
* Как предыдущий, только от SoundBlaster (ещё реже)
* A-law (раритет)
* mu-law (логарифмическая кодировка)

Всё остальное слишком нестандартно, чтоб вообще упоминать. В большинстве случаев дрова поддерживают только 2 выделенных стандартных формата (8 и 16 бит).

Quote:
Я сомневаюсь, что ресемплинг сидишных 44100 в 48000 улучшает качество звука

Теоретически, ресемплинг не может уличшить качество звука. Зато, если сама звуковуха "нативно" работает на 48К, но воспринимает другие частоты (само железо преобразовывает другие частоты в 48К), лучше сразу подавать ей именно 48К, т.к. хардовые ресемплеры обычно не очень качественные.


Top
   
 Post subject:
PostPosted: Thu Jun 01, 2006 11:47 am 
Serge
Правильный ресемплеринг - это свертка с sin(\pi x)/\pi x ...


Top
   
 Post subject:
PostPosted: Thu Jun 01, 2006 11:49 am 
Offline
Kernel Developer

Joined: Wed Mar 08, 2006 6:25 pm
Posts: 3952
Пока я хочу ограничиться только поддержкой РСМ 8 и 16 бит. По стандарту АС97 кодеки могут воспроизводить 8000 - 48000 Гц с шагом в 1 Гц. Как они это делают вопрос интересный. Похоже, что у некоторых продвинутых кодеков два кварца на 48000 и 44100. Вчера проверил стэнфордский ресемплер (точнее libresample-0.1.3). Внушает. Думаю что от частоты 44100 можно смело отказываться и делать весь ресемплинг через него. Один недостаток - очень любит память. Для работы ему нужна таблица коэффициентов размером 560Кб. А чтобы звук был очень хороший таких таблиц нужно две в зависимости от соотношения частот при ресемплировании. Зато очень хорошо подходит для потокового звука. Никаких артефактов и никакой разницы при конвертировании 44100 в 48000 я не нашёл.


Top
   
Display posts from previous:  Sort by  
Post new topic  Reply to topic  [ 983 posts ]  Go to page Previous 14 5 6 7 866 Next

All times are UTC+03:00


Who is online

Users browsing this forum: No registered users and 4 guests


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to:  
Powered by phpBB® Forum Software © phpBB Limited