Предыстория.
На основной машинке, подключенной к проектору, у меня стоит Russian Fedora 11. Звук шестиканальный. Чип Nvidia CK804.
На ноутбуке у меня стоит Ubuntu 9.04. Звук двухканальный. Чип ATI IXP.
Везде для воспроизведения видео используется mplayer.
Началось все с ноута. При воспроизведении видео внезапно звук вис - т.е. буфер воспроизводился по циклу. Сделать с этим было ничего нельзя. Вис в случайное время, но лучше всего отслеживалось на мультиках. Перезагрузка помогала слабо.
И тут неожиданно (после очередного обновления) такое же поведение перекочевало на основную машинку. И я полез в сеть.
С основной машинкой все решилось довольно просто. Вернул старое поведение (т.е. работу на прерываниях, а не на таймере).
Для этого в файле /etc/pulse/default.pa строчка load-module module-hal-detect была заменена на такую:
load-module module-hal-detect tsched=0
И на этом мучения прекратились.
С ноутом дело оказалось серьезнее. Там уже стояла эта строчка. Причем строка имела разветвленное условие на случай отсутствия hal'а.
Подстановка конфига из Fedora ничего не дала (ну кто бы сомневался).
И тогда я полез копаться глубже. Выяснилось вот что - при установке не ставится часть конфигов и программ. Ставим:
sudo apt-get install pavumeter
pavumeter - это такая полезная утилита, которая показывает силу сигнала на разных звуковых каналах. Она вытянет все остальное по зависимостям.
Далее мы проползем в файл /etc/libao.conf и в default_driver выставим значение pulse вместо alsa.
Затем создадим по неким причинам отсутствующий /etc/asound.conf с таким содержанием:
pcm.pulse {
type pulse
}
ctl.pulse {
type pulse
}
# Let's make it the default!
pcm.!default {
type pulse
}
ctl.!default {
type pulse
}
И в /etc/pulse/default.pa в строчке load-module module-hal-detect tsched=0 нафиг снесем tsched=0 (т.е. сделаем обратную федора вещь).
После чего в конфиге mplayer выставим ao = pulse и перегрузимся.
Все работает.