Я давно прочитал несколько проблем о вине и pulseaudio в Ubuntu, но никогда не понимал этого ясно. Каковы проблемы или, кажется, проблемы, связанные с вином и использованием по умолчанию pulseaudio в отношении звука в играх, выполняемых с помощью Wine. Это затрагивает целый ряд пользователей, которые используют Ubuntu, но хотят иметь возможность играть в определенные игры для Windows.
Последнее обновление: В Wine 1.7.55 добавлена надлежащая поддержка PulseAudio.
Во все эти дни нет большой проблемы.
То, что вы описываете, было много лет назад.
Приложения под Wine знают только, как общаться со звуковым стеком Windows, так что, как и в большинстве других подсистем Windows, Wine обеспечивает это. Проблема заключается в том, что наш звуковой стек значительно изменился за последнее десятилетие.
... у нас были только OSS и ALSA. Они предоставляют предсказуемые интерфейсы, но их нелегко кодировать. Винным возрастам потребовалось «просто поработать» с их поддержкой ALSA. Диаграмма стеков была довольно простой:
Hardware → ALSA → Wine/Win32-api → Windows app
Основная проблема с ALSA - это общеизвестно привередливая, если вы хотите, чтобы одновременно играли более одной вещи. Приложения могут случайно заблокировать его от других.
Внезапно на каждом рабочем столе появилась эта вещь под названием PulseAudio. Это был еще один уровень между приложениями и ALSA, который позволял многим приложениям одновременно создавать шум и добавлять такие функции, как звук по сети.
Но Wine все еще знал, как разговаривать с ALSA, и теперь была эта штука PulseAudio, которая связывала его прямо с загрузки. Аудио вина должно было быть передано через слой совместимости ALSA в PulseAudio, а затем обратно в ALSA. Стек показывает, насколько ужасно это выглядит:
Hardware → ALSA → PulseAudio → ALSA emulator → Wine/Win32 → Windows app
Кроме того, слой эмуляции ALSA (предоставленный PulseAudio) не был отличным. Он будет поддерживать пару каналов и несколько опций записи, но далеко не так сильно, как ALSA, над которым сидел сам PulseAudio.
Аудио в Wine не работало. Оглядываясь назад, легко увидеть, где на самом деле была проблема, но в то время было три мнения, которые сделали Wine настоящим полем битвы:
Пользователи требовали, чтобы разработчики Wine добавить собственный драйвер PulseAudio.
Разработчики вин не понимали, почему они должны потратить еще один возраст (а мы говорим о месяцах и месяцах времени разработчиков), взаимодействуя с еще одним звуковым слоем, когда они считают, что проблема PulseAudio в том, что он не предоставляет работающий интерфейс ALSA. В их глазах люди могли просто использовать pasuspender
, чтобы заставить ПА высвобождать низкоуровневую АЛСА для прямой манипуляции.
Разработчики PulseAudio также предложили, чтобы Wine вытащил их коллективный палец и просто добавил драйвер PA. Десятки других приложений были, так почему они не могли? И каждый раз, когда я спрашивал, слой PulseAudio ALSA был в порядке, без ошибок, и проблема заключалась только в собственных ошибках разработчиков Wine.
Пользователь написал взломанный драйвер PulseAudio , который напрямую общался с Pulseaudio и выполнял само преобразование растрового звука. Другие пользователи любили его, потому что, несмотря на его хаки, он часто "просто работал", но разработчики Wine ненавидели его, потому что это была другая большая ветвь кода, которую нужно поддерживать, и это был хак.
Все дали немного.
Пользователи перестали так жаловаться.
Wine реорганизован для использования подхода Windows Vista и Windows 7 к звуку. Они называют это MMDevAPI. Вы можете прочитать все о MMDevAPI здесь . Это убирает тонну звукового кода и упрощает настройки. Тем не менее, он все еще использует ALSA.
В PulseAudio исправлены ошибки, позволяющие Wine работать лучше.
Разработка WinePulse прекратилась, когда MMDevAPI начал показывать, что он работает.
И хотя может показаться, что это так, я сомневаюсь, что это не конец этой истории. Есть коммерчески поддерживаемые проекты, такие как OpenAL и GStreamer, которые действительно могут упростить звуковой стек Wine, а также предоставить дополнительные функции.
Более того, он втянулся в основную версию Wine .
В установленном префиксе просто запустите wine regedit
и измените HKCU\Software\Wine\Drivers\Audio
с alsa
на pulse
. Все, включая объемный звук , кажется, работает. Вот этот стек:
Hardware → ALSA → PulseAudio → Wine/Win32-api → Windows app
Это лучше, чем уровень совместимости ALSA? Я все еще не уверен. Я попробовал то, что, как мне показалось, было некоторыми из шумных игр, и они все еще немного пропускают.
Это работает, хотя, что является главным ... но так же, как и обертка ALSA в конце.