Вот за что я люблю Linux. Помимо свободы и полного контроля над системой я люблю его за вызов, который он периодически бросает пользователю, когда что-то не работает, либо работает не так как надо. Многие запишут это в недостатки этой операционной системы, для меня же это головоломка, которую весьма интересно решать, и возможность узнать что-то новое, поближе познакомившись с системой, её устройством и принципом работы.
Решил я вспомнить былое и поставил Quake 3. Под предыдущими версиями системы проблем не было никаких, в 8-ой же Федоре появились проблемы со звуком, а точнее его отставание. Дело явно в PulseAudio, звукового сервера, который является одним из нововведений этой версии дистрибутива. Начал разбираться. Часа два мучал гугл, прочитал кучу тредов и архивов списков рассылки и всё-таки нашёл решение.
Так как OpenAL не поддерживает PulseAudio, звук идёт через SDL, который тоже в свою очередь PulseAudio не поддерживает, поэтому в качестве драйвера аудио приходится использовать ESD, который эмулирует PulseAudio. Звук-то работает, но в результате длинного пути, который ему приходится проходить перед тем, как он достигает звуковой карты и колонок, появляется задержка почти в целую секунду и ни о какому low-latency, ради которого и затеяели PulseAudio, и речи быть не может.
Весь этот путь можно немного сократить, так как поддержка PulseAudio в последней версии SDL есть, но кривая. Если перед командой запуска Quake 3 прописать SDL_AUDIODRIVER=pulse, заставив тем самым SDL использовать PulseAudio в качестве драйвера, звук начинает ужасно заикаться, зато не тормозит. Заикание является результатом уменьшения размера буффера для предварительной буферизации и исправляется приминением вот этого
патча, после которого всё замечательно работает.