sound, SB, AC97 и другое

Drivers for sound cards
  • ICH4 integrated AC97 audio codec detected
    NAMBAR: 0000e000 NABMBAR: 000e400
    IRQ 5
    а в Windows IRQ=17, похоже Windows сама назначает IRQ для устройств.
  • O01eg
    Хм, Интеловский кодек, странная ситуация.
    У меня правда имеется тоже баг с максимальной громкостью. Но звук просто начинает дребезжать, и я грешил на дохлые емкости на выходе кодека, хотя Винде при максимальном звуке проблем нету.
  • Долго думал над тем, какими блоками запускать воспроизведение в звуковой подсистеме и на данный момент решил за основу взять 48000 16 бит стерео. При этом страница делится на 128 блоков, где каждый блок по 128 выборок. Для других звуковух, размер блоков будет меняться пропорционально. Так что время воспроизведения одного блока на любой частоте дискретизации будет практически одинаковое.
    Почему я решил использовать именно такие значения? Я пока не знаю, но что-то мне подсказывает, что это ещё пригодится при использовании трекерной музыки. По умолчанию в трекерах используют значение темпа 128 при 6 скорости (1:2).
  • Всем
    У кого-нибудь есть ссылки на исходники ресемплеров для звука? Или описания алгоритмов? Я сделал драйвер для интелловских контроллеров и начинаю прикручивать к нему звуковую библиотеку, но осталась проблема с простыми кодеками, работающими только на частоте 48000. Нужен ресемплер.
  • http://ccrma-www.stanford.edu/~jos/resample/

    Суть в том, чтобы с помощью интерполяции привести сигнал любой частоты < 48KHz к эталлону в 48K. А все ли звуковые карты поддерживают такую высокую пропускную способность?
  • Суть в том, чтобы с помощью интерполяции привести сигнал любой частоты < 48KHz к эталлону в 48K. А все ли звуковые карты поддерживают такую высокую пропускную способность?
    Все АС97 кодеки поддерживают 48000. Для них это стандарт. Проблема в том, что некоторые только эту частоту и поддерживают :( Я этого не знал и думал вначале на 48000 24000 32000 просто забить :) оказалось фиг - вам.
  • 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).

    ЗЫ: Не заметил, что ты уже ответил...
  • Quantum
    Спасибо за информацию. Стэнфорд - очень полезная ссылка. Буду разбираться как всё это использовать.
    Что касается звука в Win то у меня в настройка драйвера есть закладка "Качество записи" и ползунок задающий частоту дискретизации. Похоже что именно он окончательно определяет частоту кодека. По документации видно, что раньше DirectSound работал со звуковой в монопольном режиме и мог устанавливать частоту кодека по собственному желанию но теперь весь вывод микшируется программно и идет через драйвер и как драйвер решил, так и будет.
  • 2 Serge:
    Да, в последних версиях DX миксеры исключительно софтовые. Обьясняется это тем, что невозможно гарантировать эквивалентность (по громкости, например) между любым софтовым каналом и любым хардовым. Поэтому, если приложение использует 2 канала и один окажется в софте, а второй в харде, на разных машинах результат может значительно различаться. Поэтому на хардовые каналы наложили вето.
  • Serge
    Когда я переделывал приложение AC97WAV (изначально написано Иваном Поддубным и поддерживало только 48 КГц, остальные проигрывались с повышенной скоростью), то реализовал линейный метод предложенный Trans'ом.
    Суть его в том, что между выборками вставляется еще одна со среднеарифметическим значением двух соседних выборок.
    Конечно это не самый лучший способ (преобразование Фурье лучше), но самый простой и самый быстрый.
    Так можно получить из любой частоты любую частоту. Но по стандарту PCM есть только определенное количество частот, которое используется: 8000, 11025, 12000, 16000, 22050, 24000, 32000, 44100, 48000.
    Я попытался написать универсальный алгоритм, который не совсем хорош, так как получились щелчки при преобразовании частот, не делящихся старшее на младшее с целым результатом. Вылеты отдельных выборок между 2-я буферами как раз и воспринимаются как щелчки.
    Также тебе придется еще, и написать процедуру преобразования между 4-х, 8-и, 16-и битными данными, 32-х битные редко используются.
    Наверное, проще написать отдельную процедуру для преобразования любой частоты в 48 КГц.
    Микширование отдельных источников можно производить уже на 48 КГц, после преобразования.
    Если нужна помощь в кодировании мыло ты знаешь.
  • У меня уже готовы простые (линейная интерполяция) ММХ ресемплеры для 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)
  • 2 Serge:
    Существуют следующие форматы:
    * 8 бит со знаком
    * 8 бит без знака (стандарт)
    * 16 бит big endian
    * 16 бит little endian (стандарт)
    * 4 бит со сжатием IMA ADPCM (очень редко используется, разжимается в 16 бит)
    * Как предыдущий, только от SoundBlaster (ещё реже)
    * A-law (раритет)
    * mu-law (логарифмическая кодировка)

    Всё остальное слишком нестандартно, чтоб вообще упоминать. В большинстве случаев дрова поддерживают только 2 выделенных стандартных формата (8 и 16 бит).
    Я сомневаюсь, что ресемплинг сидишных 44100 в 48000 улучшает качество звука
    Теоретически, ресемплинг не может уличшить качество звука. Зато, если сама звуковуха "нативно" работает на 48К, но воспринимает другие частоты (само железо преобразовывает другие частоты в 48К), лучше сразу подавать ей именно 48К, т.к. хардовые ресемплеры обычно не очень качественные.
  • Serge
    Правильный ресемплеринг - это свертка с sin(\pi x)/\pi x ...
  • Пока я хочу ограничиться только поддержкой РСМ 8 и 16 бит. По стандарту АС97 кодеки могут воспроизводить 8000 - 48000 Гц с шагом в 1 Гц. Как они это делают вопрос интересный. Похоже, что у некоторых продвинутых кодеков два кварца на 48000 и 44100. Вчера проверил стэнфордский ресемплер (точнее libresample-0.1.3). Внушает. Думаю что от частоты 44100 можно смело отказываться и делать весь ресемплинг через него. Один недостаток - очень любит память. Для работы ему нужна таблица коэффициентов размером 560Кб. А чтобы звук был очень хороший таких таблиц нужно две в зависимости от соотношения частот при ресемплировании. Зато очень хорошо подходит для потокового звука. Никаких артефактов и никакой разницы при конвертировании 44100 в 48000 я не нашёл.
  • Who is online

    Users browsing this forum: No registered users and 7 guests