PulseAudio 和 Wine 有什么问题

Lui*_*ado 4 wine pulseaudio 11.10

我已经阅读了很长一段时间关于 Ubuntu 中的 wine 和 pulseaudio 的几个问题,但从来没有清楚地理解它。有什么问题或似乎是与 wine 相关的问题,以及在通过 wine 执行的游戏中默认使用pulseaudio来处理声音的问题。这会影响使用 Ubuntu 但仍希望能够玩特定 Windows 游戏的所有用户。

Oli*_*Oli 12

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

这些天都没有太大的问题。

你描述的是几年前的。

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

曾几何时...

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

Hardware ? ALSA ? Wine/Win32-api ? Windows app
Run Code Online (Sandbox Code Playgroud)

ALSA 的主要问题是,如果您想要同时播放不止一件东西,它是出了名的挑剔。应用程序可能会意外地将其锁定以防止他人使用。

然后PulseAudio流行起来。

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

但是 Wine 仍然只知道如何与 ALSA 交谈,而且现在这个 PulseAudio 东西从启动就占据了它。Wine 的音频必须通过ALSA 兼容层传输到 PulseAudio,然后再返回到 ALSA。堆栈显示这看起来有多可怕:

Hardware ? ALSA ? PulseAudio ? ALSA emulator ? Wine/Win32 ? Windows app
Run Code Online (Sandbox Code Playgroud)

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

察觉问题总是“其他人的错”

Wine 中的音频不起作用。事后看来很容易看出问题究竟出在哪里,但当时有三种意见使 Wine 成为真正的战场:

  • 用户呼吁 Wine 开发人员添加本机 PulseAudio 驱动程序。

  • Wine 开发人员不明白为什么他们应该花另一个年龄(我们说的是开发人员的时间是几个月又几个月)来与另一个音频层接口,因为他们认为这是 PulseAudio 没有提供有效的 ALSA 接口的问题。在他们看来,人们可以只用pasuspender让 PA 释放较低级别的 ALSA 进行直接操作。

  • PulseAudio 开发人员还建议 Wine 应该抽出他们的集体手指,添加一个 PA 驱动程序。数十个其他应用程序具有,为什么它们不能呢?每次我询问时,PulseAudio ALSA 层都很好,没有错误,只是 Wine 开发人员自己的错误才是问题所在。

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

然后事情变得更好了。

每个人都给了一点。

  • 用户不再抱怨。

  • Wine 重构为使用 Windows Vista 和 Windows 7 的声音方法。他们称之为 MMDevAPI。您可以在此处阅读有关 MMDevAPI 的所有信息。这去除了大量的声音代码并简化了设置。不过它仍然使用 ALSA。

  • PulseAudio 修复了错误以使 Wine 更好地工作。

  • 当 MMDevAPI 开始显示它可以工作时,WinePulse 的开发就停止了。

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

但几年后,Wine 1.7.55 添加了主线 PulseAudio 支持......

我多年来一直在写这篇文章,这可能是迄今为止最奇怪的事情。在放弃 PA 驱动程序开发之后,似乎有人回到了这一点并将其变成了真实的东西。

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

在一个既定的前缀,只需运行wine regedit和变化HKCU\Software\Wine\Drivers\Audio,从alsapulse。一切——包括环绕声——似乎都有效。现在是堆栈:

Hardware ? ALSA ? PulseAudio ? Wine/Win32-api ? Windows app
Run Code Online (Sandbox Code Playgroud)

它比 ALSA 兼容层更好吗?我仍然不确定。我已经尝试了我认为是一些错误的游戏,但它们仍然略有跳过。

虽然它可以工作,这是主要的事情......但最终 ALSA 包装器也是如此。