问题标签 [pulseaudio]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
767 浏览

c++ - ProjectM-pulseaudio 流和音频增益

我在 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 不知道重放增益,但我欢迎其他建议。

所以一般的问题是这一切听起来是否可能。尤其是:

  1. 是否可以让应用程序(在这种情况下为 ProjectM 的修改版本)直接监视特定的其他应用程序的 Pulseaudio 播放流,而不是监听输出设备的监视器?
  2. 是否可以在通过任何音量控制缩放之前获取音频流?(除了音乐播放器应用程序为重放目的所做的任何缩放。)
  3. 如果它被销毁并重新创建,是否有可能重新连接到该流 - 例如,我不知道它是否每次都会有一些可识别的标识符。(每次暂停和恢复播放或重新启动音乐播放器时都必须选择流,这很烦人。)

最后,我们将不胜感激任何要查看的提示或资源。或者,如果你有能力做到这一点并且有兴趣解决它,我可以提供赏金。

0 投票
0 回答
955 浏览

python - 如何使用 Cython 为“不透明”结构声明指定类型?(PulseAudio 中的空结构 `pa_threaded_mainloop`)

首先,高级问题(尽管问题是,我认为是一般的cython问题):

我正在使用树莓派通过 I2C 总线控制一些 LED。我想通过监听音频和做有趣的信号处理来控制这些,似乎最可靠的方法是使用 PulseAudio(例如,注册回调是我不能用 ALSA AFAICT 做的事情) . PulseAudio 的可用 python 绑定不适用于正确的版本,并且由于我打算使用一些相对繁重的信号处理库(可以与 numpy 数组一起使用),所以我不妨使用 cython。

我不确定它是否相关,但 Raspbian wheezy 附带 PulseAudio 2.0。如果您使用同步系统与 PulseAudio 交互,文档建议使用线程主循环。特别是,/usr/include/pulse/pulse/thread-mainloop.h包括这些声明:

这似乎是一个合理的起点。特别是,我的理解是 cython 不需要 .pyx 文件中指定的完整类型信息 - 我没有计划深入研究该结构的内容,并简单地让 pulseaudio 函数对其进行操作。所以,这是我的pulse.pyx文件:

就这么多实际上会编译。(我我应该在cdef这里使用 a ,但我得到与 a 相同的错误ctypedef。)如果我在末尾添加一行只调用该函数pulse.pyx

这样可行。但是,如果我尝试对返回值做任何事情,例如:

或指定一个cdefed 变量(或在不同的行上执行 cdef):

我在编译时收到错误:

我得到一个稍微不同的错误cdef pa_threaded_mainloop mainloop

那么,我该如何正确地让 cython 了解 PulseAudio 2.0 库?请注意,我已经直接安装了 cython 0.21,而且更平淡无奇的东西,比如调用标准 C 库也可以正常工作。

0 投票
1 回答
3398 浏览

audio - pulseaudio 没有 module-dbus-protocol

我想使用 DBus 操作 PulseAudio。在几条说明中,我读到了有关使用模块“module-dbus-protocol”的信息。但它不存在。

我用自动完成、'pacmd list-modules',甚至在内置的 git 源中寻找它。

我的 PulseAudio 配置正确吗?还是我有版本问题?

目前我使用pulseaudio 5.0

编辑:

找到,在我的 /usr/lib/pulse/ 文件夹中。

0 投票
2 回答
3670 浏览

ffmpeg - 在 docker 容器中录制本地音频

如何使用 ffmpeg 在 docker 容器中录制 Firefox 等应用程序的音频?我找到了如何将 pulseaudio 转发到主机的示例 - netflixskype

当我尝试使用 pactl 时:

或者

我收到一个错误:

这也失败了

0 投票
1 回答
63 浏览

c - 从应用程序中注册虚拟声音设备

我希望能够在我自己的应用程序中处理应用程序(VLC、Rhythmbox、...)的音频输出。此外,应该能够选择我的应用程序作为声音的接收器(例如,在 VLC 或 pavucontrol 中,我的应用程序应该显示为输出设备)。

这怎么可能?可以用 ALSA、Pulseaudio 等来完成吗?目前我正在寻找最简单的解决方案,而后来的高性能解决方案可能会变得更可取。如果大部分配置都可以通过 API 调用完成,那就太好了。

谢谢您的支持!

0 投票
1 回答
2246 浏览

skype - Archlinux Skype 内置麦克风的问题

所以。我的下一个问题:我使用 pulseaudio 作为声音服务器。我通过记录检查我的麦克风设置。一切正常,但在 Skype 麦克风中不起作用。只有沉默。但是当我使用 Skype 服务对其进行测试并查看 pavucontrol 时,我发现麦克风工作正常。请帮忙!

0 投票
1 回答
536 浏览

qt - 如何防止 QAudioInput 自动将主音量提高到 100%?

我正在尝试使用 Qt5 Multimedia 通过 QAudioInput 录制音频。然而,我注意到,当我QAudioInput启动时,它会将我的声音设备的主音量提高到 100%。

如何防止 QAudioInput 更改主音量?

我目前的开发平台是带有 PulseAudio 的 Linux(禁用了纯音频)。

这就是我的使用方式QAudioInput

0 投票
1 回答
240 浏览

java - 直接linux机器音频到java程序

我需要编写一些 java 代码来收听其他进程产生的音频。我环顾四周,似乎我应该使用 PulseAudio。如果我没记错的话,我需要定义一个接收器作为我的 java 进程,并告诉源(alsa?)去那里。我没有找到有关如何执行此操作的任何详细信息。

而且 - 我应该在 java 端使用什么?这给了我 0 个混音器:

0 投票
1 回答
2108 浏览

bash - Ubuntu 14.04 - 如何使用脚本在关机时播放 ogg 文件?

所以,我试图让一个脚本在关机/重启时播放一个简短的 ogg 文件,但我似乎在让它工作时遇到了一些麻烦。现在,我在 init.d 中有脚本,在 rc0.d 和 rc6.d 中有符号链接,在手动执行时似乎都可以工作。脚本和链接都以“K99”开头,因为系统应该按字母顺序遍历列表,K99 应该让它在正确的时间执行。(我尝试过其他的东西,比如 K00、K50 和“S”变体,因为我看到了一些其他的脚本;但它们似乎没有改变任何东西。)

我认为脚本很简单。ogg 文件和脚本都具有 755 权限。该文件只有大约 3 秒长,所以我认为这也不是问题。最初,脚本似乎根本不起作用,所以我添加了 sleep 命令。现在关闭似乎需要大约三秒钟的时间,所以我认为脚本正在运行,但我感觉 Ubuntu 可能会在脚本关闭之前杀死音频守护程序(如果有的话?),但我我不确定。我花了几天时间试图弄清楚这个看似简单的事情。有任何想法吗?

抱歉,如果这最终变得微不足道,我对 Ubuntu 系统的东西有点新手。(虽然我可以通过简单的修复来解决问题!:))

更新 它现在可以正常工作了!在搜索了为什么声音可能会多次播放,尤其是在启动时,我对新贵系统有了更多的了解。它查看 etc/init/ 目录并在启动时运行其中的脚本。我记得我曾尝试在声音还没有播放的时候放一个 upstart 脚本。显然我忘了删除它,它在所有运行级别上执行,从而导致双重关闭和启动实例。现在它已经消失了,一切都应该如此。(虽然现在我已经修复了它,但我有点厌倦了听到声音,可能不得不找到一个新的,哈哈。)谢谢大家的帮助。

TL;DR:在 init.d 中放置一个脚本并以符号方式链接到 etc/rc0.d(如果您也希望它在重新启动时也可以链接到 etc/rc6.d)。如果它播放多次,您可能在不应该出现的地方出现重复。

0 投票
1 回答
1917 浏览

qt - Raspberry Pi 上的 Qt5.4 QAudioOutput 与 3.5 毫米音频插孔上的 PulseAudio 不起作用,但 Qt 5.3 可以

Qt5.3 看到默认的 Raspberry Pi also_output.0.analog-mono 设备(3.5 毫米耳机插孔)和 5.3 的 QAudioOutput 成功地将音频写入该设备,我可以用耳机听到音频。这一切都适用于默认的 Raspbian,来自 apt-get 的 PulseAudio 2.0,无需额外配置。PulseAudio 作为会话进程运行,而不是在系统守护程序模式下运行。Qt 5.4 看不到具有完全相同源代码和 Raspbian 的设备(除了与 Qt 5.4.0 而不是 Qt 5.3.2 交叉编译),也无法向其写入数据。

它给了我这个错误(请注意,我手动分配了 sys default:CARD=ALSA 和 'default' 但它们都返回相同的 'snd_pcm_hw_params' 错误):

Pactl 看到它:

我试图在底部修改 /etc/pulse/default.pa 以强制输出设备:

这是我的设置代码,它给出了错误:

世界上到底发生了什么?为什么相同的配置适用于 5.3.2 而不是 5.4.1。分配默认音频设备不起作用...我可以在此处做什么以及如何使其工作?谢谢!