Всем! Всем! Всем!
Желающим хоть чем нибудь помочь упрямому фанатику-дровосеку
http://atom-os.narod.ru/edit_versions/ac97_501.zip
там есть README что, как, чем...
Но MMX есть не на всех х86 процах. Например, на старых 486 ноутах это недопустимо, но я говорю про подсистему а не про драйвер. По этому в подсистеме я не буду использовать MMX, по крайней мере пока.Как подфункции сделаны ММХ микшеры на 2, 3, 4 потока в 1. ММХ конвертеры моно 44.1 в стерео 44.1, стерео 22.05 в стерео 44.1, моно 22.05 в стерео 44.1 и примитивный ресемплер 44.1 в 48.0
Этого недостатка можно избежать, если загружать (преобразовывать/микшировать) новую порцию звука после того, как запустил воспроизведение очередного блока (у тебя их 4 по 16 кб.). А вообще звуковые данные лучше измерять в выборках, а не в килобайтах.Когда заканчивается проигрывание очередного 16 кб сегмента АС97 генерирует прерывание
и драйвер микширует в первичный буфер очередные 16 кб из звуковых буферов. Само микширование
происходит блоками по 512 байт
...
Недостаток - задержка с началом воспроизведения статического буфера.
При 16 кб сегменте и частоте 44100 масимальная задержка будет приблизительно 0.185 с.
если уменьшить размер сегмента до 8 или 4 кб задержка уменьшится до 0.092 и 0.046 с, что должно
быть приемлемым.
Ну, это сотря для какого количества процессов, а так же смотря какая частота звукового устройства, хотя я опять говорю только про подсистему.Для экономии памяти звук в буферах хранится в исходном формате и приводится к основному
(стерео 44100 или 48000) перед микшированием также блоками по 256 или 512 байт.
А у меня конвертирование будет в произвольную частоту. Особенно это пригодится для трекерной музыки, где тональность звучания задаётся изменением частоты дискретизации.Для кратных частот 11025 -> 22050 -> 44100 это очень просто. Для преобразования дробных частот
44100 -> 48000 лучше конвертировать сразу весь буфер, моно в моно, стерео в стерео.
Я ориентировался на ММХ потому, что если на компе есть АС97 кодек то и процессор с ММХ тоже есть. Позже я хочу написать версии для SSE и SSE2. Версии для ALU тоже можно сделать.Но MMX есть не на всех х86 процах. Например, на старых 486 ноутах это недопустимо, но я говорю про подсистему а не про драйвер. По этому в подсистеме я не буду использовать MMX, по крайней мере пока.
Небольщая задержка будет в любом случае. Когда программа посылает драйверу команду play_buffer звук уже смикширован и воспроизводится, значит его можно смикшировать только в сегмент следующий за текущим. Возможна ситуация когда начнется воспроизводится сегмент, в который мы только что начали микшировать звук и будет щелчок.Этого недостатка можно избежать, если загружать (преобразовывать/микшировать) новую порцию звука после того, как запустил воспроизведение очередного блока (у тебя их 4 по 16 кб.). А вообще звуковые данные лучше измерять в выборках, а не в килобайтах.
Дык чуть ниже писал, что 502я теперь... т.е. глючное и старое удалил, оставил только более "уверенный"Mario79 wrote:VaStaNi
Сожалею, я не мог тебе ответить, так как болел гриппом целую неделю.
Сейчас ссылка уже не работает, вероятно, ты удалил файл. Если выложишь снова, могу протестировать.
Так в том то и оно, что криво и кто и когда это хотя бы НАЧНЕТ менять в системе!??? Для драйверов, именно для драйверов этот механизм что есть сейчас - не приемлем и надо менять ядро... Со стороны взглянуть - получается, что либо не хотят ребята, либо не видят зачем это нужно или не могут, но хуже всего, что просто молчание наблюдается! Т.е., как будто проблемы и нет. Не понимаю эту позицию. Лично я не раз говорил еще на старом форуме про эти вещи (IRQ,DMA,железо...), но это было столько раз, что я не хочу быть занудой (или перестал им быть)...Иван Поддубный wrote:Пользовательское прерывание установить можно. Пример - программа PPP. Однако это реализовано в системе ужасно криво. Программа может получить сигнал о прерывании с опозданием более двух секунд (это зависит от количества процессов).
Users browsing this forum: No registered users and 0 guests