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

Drivers for sound cards
  • Quantum

    Да насчёт всех чипсетов я погорячился. ICH6 уже PCI Express, там сложная система назначения вектора и похоже что они не исправили документацию. На всех предыдущих чипсетах контроллер был припаян к PIRQB#. На Express чипсетах это может быть любая линия.

    Выводить поток через статический буфер с опросами занятие довольно муторное, тем более что они не проигрываются по кругу. Пришли мне код, так не разобраться.
  • Serge

    Оказалось, что SND_PLAY проигрывает 16Кб данных (хотя буфер я создал размером 64Кб) и останавливается. Поэтому после каждого цикла обновлений я добавил ещё один SND_PLAY (контрольный :-) Теперь курсор плавно пробегает по всему буферу, но звука нет :( В отладчике прекрасно видно как данные перекачиваются из миксера в буфер (ни одно прерывание нигде не возвращает ошибку), но колонки молчат. Если поменять схему на PCM_OUT, звук появляется, но мне не нравится, что используются блокирующие вызовы - это может быть нежелательным ограничением в некоторых приложениях. Да и звук всё время прерывается как будто размер буфера задан неправильно. Схема со статическим буфером более универсальна, как мне кажется.

    > Выводить поток через статический буфер с опросами занятие довольно муторное, тем
    > более что они не проигрываются по кругу.
    В моём случае (после добавления SND_PLAY после каждого обновления) курсор движется по кругу. Вот точные значения, которые возвращает GETPOS:
    0 16K 32K 48K 0 16K 32K 48K и т.д.

    В коде долго разбираться, т.к. его очень много. Давай проверим сначала ключевые моменты:

    При создании буфера я указываю size = 0x10000, flags = PCM_2_16_48 | PCM_STATIC. Может, нужен ещё какой-то флаг?

    Потом буфер заполняется так:
    0. 0x0000 - 0x0FFF
    1. 0x1000 - 0x1FFF
    2. 0x2000 - 0x2FFF
    ...
    F. 0xF000 - 0xFFFF

    И только потом я задаю первый SND_PLAY. По идее, тут оно должно по крайней мере пикнуть что-то в колонки, ведь так?
  • Quantum

    SND_PLAY должен проигрывать буфер до конца. Попробуй PCM_2_16_44 или 2_16_24. 2_16_48 идёт на вывод без ресемплирования, фактически для него написан отдельный код и я его не очень много тестировал.

    SND_PLAY не выводит звук мгновенно. Вызов только помечает буфер, а выборка происходит в обработчике прерывания.

    Пришли только код работы с драйвером. Иначе не разобраться в чем проблема.
  • ААААААА!!! А я второй день и третью ночь пытаюсь найти баг в своём коде. Переключился на 44.1 КГц - всё наконец заработало. За одно попробовал ещё 22.05 Кгц - тоже нормально.

    Дамы и господа, сегодня uFMOD начинает официально поддерживать Колибри. Релизы можно хостить на сорсфорже?

    Теперь нормально работают и статическая и стриминговая схемы. Кстати, теперь я понял почему звук раньше обрывался в SND_OUT. Твой wave_out - это как статический буфер только меньшего размера. Если в этом буфере проигрывалось около 1/4 или 1/2 от общей длины, создавалось ощущение "торможения". Я, кстати, раньше уже писал, что баг может быть как-то связан с размером буфера.

    Желательно, конечно, исправить это дело, чтоб работало и без ресемплера. Причём звук одинаково обрывался на обоих кодеках: ICH и ICH6.
  • Quantum

    48 Кгц исправил, правда не тестил. А где можно скачать uFMOD ?
  • Serge
    48 Кгц исправил, правда не тестил
    Да, теперь всё нормально с 48КГц и драйвер уже не виснет на патче как в предыдущей версии (или ты просто убрал патч?)

    Code: Select all

               test [edx+STREAM.format], PCM_STATIC
               jz .fail
    Хоть бы предупредил, что GETPOS для PCM_OUT уже не работает.
    А где можно скачать uFMOD ?
    Версию для Колибри пока нельзя скачать. Сейчас я допишу документацию и поставлю галочку, чтоб можно было скачать с офф. сайта. Примеры пока только под Фасм и Насм в количестве 2 штуки: простейший фоновый плеер типа hello world и ещё плеер показывающий как использовать фишку с совмещением нескольких дорожек в одном файле. Потом сделаю примеры для других компиляторов. Плеера файлов пока нет. Как только ты выложишь недостающие файлы к исходникам ac97snd (см. сообщение выше), я постараюсь прикрутить к нему uFMOD. Кстати, как сделать файловую ассоциацию в KFM, чтоб при выборе XM'а запускался плеер? Но это всё отдельно от реализа.
  • Quantum

    Для PCM_OUT getpos просто не имеет смысла. Лучше сделать GET_FREE_SPACE.

    От солюшена и vcproj мало толку потому что дерево каталогов не совпадает.
    Для компиляции плеера всё есть. sdk/sound/src компилируется фасмом и собирается в sound.lib
    mp3dec не нужен. mpg собирается в mpg.lib. Остальные файлы компилируются вместе и линкуются с mpg.lib и sound.lib

    Опции линковки
    AdditionalOptions="/MERGE:/merge:.data=.text /align:32"
    AdditionalDependencies="$(OutDir)\mpg.lib $(OutDir)\sound.lib"
    GenerateManifest="false"
    IgnoreAllDefaultLibraries="true"
    SubSystem="1"
    LinkTimeCodeGeneration="1"
    EntryPointSymbol="crtStartUp"
    BaseAddress="0x00000000"
    MergeSections=".rdata=.text "
    FixedBaseAddress="2"

    http://infinity-sound.narod.ru/sdk.7z здесь pe2kos.exe и готовая sound.lib
  • Serge

    Последняя ревизия драйвера как есть ругается на irq на ICH. Чтоб работало надо включить ту новую опцию для патча и пересобрать, так? Может, есть возможность сделать универсальную версию, чтоб работала и при нормальном irq и при "завуалированном" как у меня на ICH?

    И ещё желательно рассмотреть возможность переназначения выхода в нужный разьём, а то всё время приходится переключать колонки при работе в Win32/Linux vs. Kolibri. Как я уже писал, судя по сообщениям в разных форумах, которые я нашёл гуглом, похоже, что это особенность данного кодека: стерео-выход является дефолтовым, а не тот "зелёный" что используется в других встроенных звуковухах для колонок.
    Лучше сделать GET_FREE_SPACE.
    Ещё лучше! Пока что это не критично.

    Думаю, что теперь плеер соберётся. Займусь этим вопросом после релиза.
  • Уже можно скачать бета-версию тут:
    http://sourceforge.net/project/platform ... tform=3096

    Тут руководство:
    http://ufmod.sourceforge.net/Kolibri/ru.htm

    Минимальный GUI-экзешник без сжатия и со встроенным ХМ-файлом получился размером 4997 байт.
  • Quantum

    Да для ICH надо разблокировать патч.
    Переназначение звукового выхода вещь плохо документированная. Я смотрел описания разных кодеков и ни фига толком не нашёл. Но разве Win не запоминает куда был подключён разъём ?
  • Serge
    Но разве Win не запоминает куда был подключён разъём ?
    Винда выводит звук всегда в "зелёный" разьём, а твой драйвер - в "чёрный". Линукс 2.6 с ALSA - в "зелёный". Кстати, "чёрный" разьём в винде неприятно потрескивает, напоминая мне, что я забыл переключить колонки.
  • Quantum

    Щелчки идут при автоопределении нагрузки. Потом Win запоминает конфигурацию и следующей загрузке уже не щёлкает.

    Потестил примеры всё работает но mini иногда потрескивает.
  • Исправил баг в ядре с SB16 (недочет при переходе на плоское ядро).

    Что мне нужно что бы mp3 играть??

    помогите сделать obj файл (библиотеку), у которой несколько функций..
    открытие файла и прочтение блока данных для проигрывания.. далее что бы можно применить в любом плеере.
  • Serge: пожалуйста, залей на SVN build.bat для проигрывателя или кинь сюда его содержание, потому что я не могу собрать, и не только я.
  • Who is online

    Users browsing this forum: No registered users and 44 guests