PulseAudio 和 Wine 之间有什么问题

PulseAudio 和 Wine 之间有什么问题

我已经阅读了好久关于 Ubuntu 中的 wine 和 pulseaudio 的几个问题,但一直没搞清楚。问题是什么或似乎是与 wine 以及在通过 wine 执行的游戏中默认使用 pulseaudio 的声音有关的问题。这影响了使用 Ubuntu 但仍然希望能够玩特定 Windows 游戏的大量用户。

答案1

最新更新:Wine 1.7.55 增加了适当的 PulseAudio 支持。

这些天来没有什么大问题。

你所描述的是几年前的事了。

Wine 下的应用程序只知道如何与 Windows 声音堆栈对话,因此与大多数其他 Windows 子系统一样,Wine 也提供此功能。问题来自于我们的声音堆栈在过去十年中发生了重大变化。

曾几何时...

... 我们只有 OSS 和 ALSA。它们提供可预测的接口,但编码起来并不容易。Wine 花了很长时间才通过其 ALSA 支持达到“正常工作”的程度。堆栈图非常简单:

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

ALSA 的主要问题是,如果你想同时播放多个内容,它会非常挑剔。应用程序可能会意外地将其锁定,不让其他应用程序播放。

随后 PulseAudio 开始流行起来。

突然间,每个桌面都出现了一个叫 PulseAudio 的东西。这是另一层之间应用程序和 ALSA 允许许多应用程序同时发出噪音并添加网络声音等功能。

但 Wine 仍然只知道如何与 ALSA 对话,现在 PulseAudio 的东西从启动时就开始占据它。Wine 的音频必须通过管道传输通过ALSA 兼容层进入 PulseAudio,然后再返回到 ALSA。堆栈显示了这看起来有多糟糕:

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

此外,ALSA 仿真层(由 PulseAudio 提供)也不太好。它支持几个通道和几个录音选项,但远不及 PulseAudio 本身所依赖的 ALSA。

感知问题总是“其他人的错”

Wine 中的音频无法正常工作。事后看来,很容易看出问题所在,但当时有三种观点使 Wine 成为真正的战场:

  • 用户要求 Wine 开发人员添加原生 PulseAudio 驱动程序。

  • 葡萄酒开发商不明白为什么他们应该花钱其他他们认为这是 PulseAudio 的问题,因为它没有提供可用的 ALSA 接口。在他们看来,人们只需使用pasuspenderPA 即可释放较低级别的 ALSA 进行直接操作。

  • PulseAudio 开发人员还建议 Wine 应该集体行动起来,只是添加 PA 驱动程序。其他几十个应用程序都这样做了,为什么它们不能呢?每次我问的时候,PulseAudio ALSA 层都很好,没有错误,问题只是 Wine 开发人员自己的错误。

  • 用户编写了一个入侵的 PulseAudio 驱动程序它直接与 Pulseaudio 对话并自行进行位图音频转换。其他用户喜欢它,因为尽管它存在一些 hack 问题,但它确实经常“正常工作”,但 Wine 开发人员讨厌它,因为它需要维护另一个大型代码分支,而且它是一种 hack。

然后情况就好起来了。

每个人都捐了一点。

  • 用户不再抱怨了。

  • Wine 经过重构,可以使用 Windows Vista 和 Windows 7 方法来处理声音。他们称之为 MMDevAPI。您可以在这里阅读有关 MMDevAPI 的所有内容。这会删除大量声音代码并简化设置。但它仍然使用 ALSA。

  • PulseAudio 修复了一些错误以使 Wine 能够更好地运行。

  • 当 MMDevAPI 开始显示出其有效性时,WinePulse 的开发就停止了。

虽然看起来是这样,但我怀疑这不是故事的结局。有商业支持的项目,如 OpenAL 和 GStreamer,它们可以真正简化 Wine 的声音堆栈并提供额外的功能。

但几年后,Wine 1.7.55 增加了主线 PulseAudio 支持……

我已经写了这篇文章好几年了,这可能是迄今为止最奇怪的事情。在放弃 PA 驱动程序开发后,似乎有人又回到了这个问题并将其变成了现实。

不仅如此,它被引入 Wine 的主线版本

在已建立的前缀中,只需运行wine regeditHKCU\Software\Wine\Drivers\Audio从更改alsapulse。一切 — 包括环绕声 —似乎开始工作。现在的堆栈如下:

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

它比 ALSA 兼容层好吗?我仍然不确定。我尝试了一些我认为有缺陷的游戏,但它们仍然会跳转。

它确实起作用了,这是最重要的...但最终 ALSA 包装器也起作用了。

相关内容