我在 Linux 上使用ProjectM音频可视化器。我正在运行 Ubuntu 和 Pulseaudio,所以我使用的是 projectm-pulseaudio 二进制文件。可悲的是,ProjectM 的开发似乎已经停止,而且我找不到其他类似的可用于 Linux 的东西。
我正在考虑破解源代码来解决我遇到的几个问题,但我想先了解一下我想做的事情是否可行,因为我的 C++ 非常生疏,而且我对 Pulseaudio 和 qt 的了解是接近于零。
ProjectM 听取用户选择的 Pulseaudio 输出设备监视器之一。有一个 GUI 可供您选择,我可以从 Pulseaudio 音量控制 GUI 中做出相同的选择。就我而言,我可以选择我的视频卡的 HDMI 音频输出、我的主板的模拟音频输出或我的主板的数字音频输出。我正在使用最后一个,因为那是我的扬声器插入的地方。
这是主要问题:它正在收听从计算机输出的混音音频流。我只希望它听音乐流;也就是说,进入 Pulseaudio 的特定音频流。这将提供几个优点:
- 系统声音和来自其他程序的声音不是可视化的一部分。
- 接收器音量在链中较晚,因此不会影响 ProjectM 输入信号的幅度,因此更改我的系统音量(我这样做而不是直接调整扬声器的音量)不会影响可视化。
似乎音乐播放器的音量(与我可以从 Pulseaudio 音量控制 GUI 访问的音乐播放器流上设置的音量相同)也会影响可视化,这是不可取的,但我希望这是只是一种连续效应,因为调低音乐播放器的音量显然会使振幅在到达接收器时降低,这正是 ProjectM 正在听的。我真正想要的是 ProjectM 在被任何音量控制缩小之前获得全音量音频信号。
最后,我使用重放增益还有一个障碍,它会缩小每首歌曲的音量,以便每张专辑都有相同的感知音量。默认情况下,重放增益目标为 89dB,所以我认为一旦进入 ProjectM,只需将每个样本放大适当的数量就足够了。这可能是我能做的最好的事情,因为 Pulse 不知道重放增益,但我欢迎其他建议。
所以一般的问题是这一切听起来是否可能。尤其是:
- 是否可以让应用程序(在这种情况下为 ProjectM 的修改版本)直接监视特定的其他应用程序的 Pulseaudio 播放流,而不是监听输出设备的监视器?
- 是否可以在通过任何音量控制缩放之前获取音频流?(除了音乐播放器应用程序为重放目的所做的任何缩放。)
- 如果它被销毁并重新创建,是否有可能重新连接到该流 - 例如,我不知道它是否每次都会有一些可识别的标识符。(每次暂停和恢复播放或重新启动音乐播放器时都必须选择流,这很烦人。)
最后,我们将不胜感激任何要查看的提示或资源。或者,如果你有能力做到这一点并且有兴趣解决它,我可以提供赏金。