Каковы проблемы между PulseAudio и Wine

, используя «ps -ef», вы можете увидеть весь процесс, включая терминальные процессы:

tthtlc    2964     1  0 08:31 ?        00:00:02 gnome-terminal

только «ps», вы видите только свой собственный терминал:

[ f2]

См. «pts / 0»? Перейдите в / dev / pts:

ls -al
total 0
drwxr-xr-x  2 root   root       0 Jun 14 08:31 .
drwxr-xr-x 18 root   root    4420 Jun 14 08:31 ..
crw--w----  1 tthtlc tty  136,  0 Jun 14 09:03 0
crw--w----  1 tthtlc tty  136,  1 Jun 14 09:02 1
crw--w----  1 tthtlc tty  136,  2 Jun 14 09:02 2
crw--w----  1 tthtlc tty  136,  3 Jun 14 09:02 3
crw--w----  1 root   tty  136,  6 Jun 14 08:31 6
crw--w----  1 root   tty  136,  8 Jun 14 08:31 8
c---------  1 root   root   5,  2 Jun 14 08:31 ptmx

Здесь вы можете видеть, что я создал 0, 1, 2 ==> 3. «gnome-terminal» реализуется как процесс, который открывает stdin, stdout и stderr на одном и том же символьном устройстве, как указано выше. Во-первых, обратите внимание на pid 2974 для «bash» выше? Перейдите в / proc / 2974 / fd, чтобы открыть весь дескриптор файла:

/proc/2974/fd>ls -al
total 0
dr-x------ 2 tthtlc tthtlc  0 Jun 14 09:30 .
dr-xr-xr-x 8 tthtlc tthtlc  0 Jun 14 09:30 ..
lr-x------ 1 tthtlc tthtlc 64 Jun 14 09:30 0 -> /dev/pts/2
l-wx------ 1 tthtlc tthtlc 64 Jun 14 09:30 1 -> /dev/pts/2
l-wx------ 1 tthtlc tthtlc 64 Jun 14 09:30 2 -> /dev/pts/2
lrwx------ 1 tthtlc tthtlc 64 Jun 14 09:55 255 -> /dev/pts/2

Таким образом, все входные / выходные / stderr для bash поступают из драйверов устройств / dev / pts. [!d4 ]

Если вы открываете несколько гном-терминалов и в зависимости от того, какой из них является процессом переднего плана, фактическая клавиатура будет перенаправлена ​​на соответствующий процесс. т. е. если вы делаете «strace -p <pid>», где <pid> - это процесс 2974, в первый раз, когда вы вводите символ на этом терминале, вы сразу увидите read () - здесь ниже я вводил несколько «f»: [ ! d5]

read(0, "f", 1)                         = 1
rt_sigprocmask(SIG_BLOCK, [INT], [], 8) = 0
write(2, "f", 1)                        = 1
rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0
rt_sigprocmask(SIG_BLOCK, NULL, [], 8)  = 0
read(0, "f", 1)                         = 1
rt_sigprocmask(SIG_BLOCK, [INT], [], 8) = 0
write(2, "f", 1)                        = 1
rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0
rt_sigprocmask(SIG_BLOCK, NULL, [], 8)  = 0
read(0, "f", 1)                         = 1
rt_sigprocmask(SIG_BLOCK, [INT], [], 8) = 0
write(2, "f", 1)                        = 1
rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0
rt_sigprocmask(SIG_BLOCK, NULL, [], 8)  = 0
read(0, "f", 1)                         = 1

Итак, как работает терминал в целом: чтение символа по символу и одновременное вывод символа символами одновременно (вызов «эхо») на экран. Несколько терминалов могут работать одновременно, но только один будет получать прямой ввод с клавиатуры, другие будут блокироваться при чтении () API.

4
задан 31 December 2011 в 00:56

1 ответ

Последнее обновление: Wine 1.7.55 добавляет правильную поддержку PulseAudio.

В наши дни не так много проблемы.

То, что вы описываете, было много лет назад .

Приложения под Wine знают только, как разговаривать с звуковым стеклом Windows, так как с большинством других подсистем Windows под этим Wine. Проблема в том, что наш звуковой стек значительно изменился за последнее десятилетие.

Когда-то давно ...

... у нас были только OSS и ALSA. Они обеспечивают предсказуемые интерфейсы, но их нелегко кодировать. Это потребовало Wine age, чтобы добраться до точки «просто работает» со своей поддержкой ALSA. Диаграмма стека была довольно простой:

Hardware → ALSA → Wine/Win32-api → Windows app

Основная проблема с ALSA - это печально, если вы хотите, чтобы сразу несколько игр. Приложения могут случайно заблокировать его от других.

Тогда PulseAudio стал популярным.

Внезапно каждый рабочий стол имел эту вещь под названием PulseAudio. Это был еще один слой Последнее обновление: приложения и ALSA, позволяющие многим приложениям сразу создавать шум и добавлять такие функции, как звуковая сеть.

Но Wine все еще только знала, как чтобы поговорить с ALSA, и теперь эта вещь PulseAudio была запущена с самого начала. Звук вина должен был проходить через уровень совместимости ALSA в PulseAudio, а затем обратно в ALSA. Стек показывает, насколько это ужасно выглядит:

Hardware → ALSA → PulseAudio → ALSA emulator → Wine/Win32 → Windows app

Кроме того, уровень эмуляции ALSA (предоставленный PulseAudio) был невелик. Он поддерживал бы несколько каналов и несколько вариантов записи, но нигде не было рядом с ALSA, что сама PulseAudio сидела на вершине.

Воспринимаемая проблема всегда была «ошибкой других парней» [!d14 ]

Audio in Wine не работает. Оглядываясь назад, легко увидеть, где проблема на самом деле, но в то время было три мнения, которые сделали Wine настоящей битвой:

Пользователи кричали разработчикам Wine добавить собственный драйвер PulseAudio. Разработчики вина не понимали, почему они должны проводить еще один возраст (и мы говорим о месяцах и месяцах разработки), взаимодействуя с еще одним звуковым слоем, когда они рассматривали его как проблему PulseAudio для не обеспечения рабочего интерфейса ALSA. В их глазах люди могли просто использовать pasuspender, чтобы заставить PA освободить ALSA более низкого уровня для непосредственной манипуляции. Разработчики PulseAudio также предположили, что Wine должен вытащить свой коллективный палец и просто добавить драйвер PA. Десятки других приложений были, так почему бы и нет? И каждый раз, когда я спрашивал, уровень ALSA PulseAudio был прекрасен, без ошибок, и это были просто ошибки разработчиков Wine, которые были проблемой. Пользователь написал взломанный драйвер PulseAudio, который напрямую разговаривал с Pulseaudio и сам преобразовал звук в растровое изображение. Другим пользователям это нравилось, потому что, несмотря на его хаки, он часто «просто работал», но разработчики Wine ненавидели его, потому что это была еще одна большая ветвь кода для поддержки, и это был взлом.

И тогда все стало лучше.

Все немного дали.

Пользователи потребовали, чтобы разработчики Wine добавили собственный драйвер PulseAudio. [!d18 ]

Пользователи заявили, что разработчики Wine добавят собственный драйвер PulseAudio.

Разработчики вин не поняли, почему они должны проводить другой возраст (и мы говорим о месяцах и месяцах времени разработчиков), взаимодействуя с еще один звуковой уровень, когда они рассматривали его как проблему PulseAudio для не обеспечения рабочего интерфейса ALSA. В их глазах люди могли просто использовать pasuspender, чтобы заставить PA освободить ALSA более низкого уровня для непосредственной манипуляции.

Разработчики вина не понимали, почему они должны проводить другой возраст (и мы говорим месяцы и месяцы времени разработки), взаимодействуя с еще одним звуковым слоем, когда они рассматривали его как проблему PulseAudio для не обеспечения рабочего интерфейса ALSA. В их глазах люди могли просто использовать pasuspender, чтобы заставить PA освободить ALSA более низкого уровня для непосредственной манипуляции.

Wine реорганизован для использования подходов Windows Vista и Windows 7 к звуку. Они называют этот MMDevAPI. Здесь вы можете прочитать все о MMDevAPI. Это удаляет тонну звукового кода и упрощает настройки.

Но потом, спустя годы, Wine 1.7.55 добавила поддержку mainline PulseAudio ...

Разработка WinePulse прекратилась, когда MMDevAPI начал показывать, что он работает. [ ! d43]

И хотя это может показаться, я сомневаюсь, что это не конец этой истории. Существуют коммерчески поддерживаемые проекты, такие как OpenAL и GStreamer, которые могли бы действительно упростить звуковой стек Wine, а также предоставить дополнительные функции.

Я пишу этот пост в течение многих лет, и это, пожалуй, самое странное. После падения разработки драйвера PA кто-то, похоже, вернулся к этому и превратил его в нечто реальное.

Hardware → ALSA → PulseAudio → Wine/Win32-api → Windows app

Более того, он прочитал все о MMDevAPI здесь .

В установленном префиксе просто запустите wine regedit и измените HKCU\Software\Wine\Drivers\Audio с alsa на pulse. Все, включая объемный звук, - - . Вот теперь стек:

13
ответ дан 25 May 2018 в 15:34
  • 1
    Отличная обратная связь. Я действительно отлично. Это полный ответ на мои сомнения, и я ценю это. – Luis Alvarado♦ 31 December 2011 в 03:59

Другие вопросы по тегам:

Похожие вопросы: