这个问题的灵感来自于您是否可以在docker容器中运行GUI应用程序?.
基本的想法是运行带有音频和ui的应用程序(vlc,firefox,skype,...)
我正在使用pulseaudio搜索docker容器,但我发现所有使用pulseaudio流在tcp上的容器.(应用程序的安全沙箱)
在我的情况下,我会优先从容器内的应用程序直接播放音频到我的主机pulseaudio.(没有ssh隧道和臃肿的docker图像)
Pulseaudio因为我的qt app正在使用它;)
这似乎根本不起作用:
cat /dev/urandom > /dev/dsp #from wikipedia.org
Run Code Online (Sandbox Code Playgroud)
是因为pulseaudio?或者我需要做一些设置?
每当PulseAudio中的接收器状态发生变化(例如变为非活动状态)时,我都会尝试调用D-Bus信号处理程序.不幸的是,它没有被调用,我坦率地不确定为什么.
import dbus
import dbus.mainloop.glib
from gi.repository import GObject
dbus.mainloop.glib.DBusGMainLoop(set_as_default=True)
bus = dbus.SessionBus()
def signal_handler(*args, **kwargs):
print('sig: ', args, kwargs)
def connect():
import os
if 'PULSE_DBUS_SERVER' in os.environ:
address = os.environ['PULSE_DBUS_SERVER']
else:
bus = dbus.SessionBus()
server_lookup = bus.get_object("org.PulseAudio1", "/org/pulseaudio/server_lookup1")
address = server_lookup.Get("org.PulseAudio.ServerLookup1", "Address", dbus_interface="org.freedesktop.DBus.Properties")
return dbus.connection.Connection(address)
conn = connect()
core = conn.get_object(object_path='/org/pulseaudio/core1')
core.connect_to_signal('StateUpdated', signal_handler)
core.ListenForSignal('org.PulseAudio.Core1.Device.StateUpdated', dbus.Array(signature='o'), dbus_interface='org.PulseAudio.Core1')
loop = GObject.MainLoop()
loop.run()
Run Code Online (Sandbox Code Playgroud) 我正在为Maemo/MeeGo开发移动应用程序,Maemo使用PulseAudio.我想播放一个mp3给来电者(并且在做这个时取消麦克风,而不是听来电者,一切都应该在后台完成),要做到这一点,我必须重定向一定的音频输出(如果不可能,全部)应用程序,将其伪造为输入并使手机应用程序使用它.
在我的Ubuntu PC上,我用pavucontrol做到了.我创建了一个NULL接收器,然后:
Audio Output (from Amarok) --> to NULL Output
Skype Input <-- NULL Output
Skype Output --> NULL
Run Code Online (Sandbox Code Playgroud)
它起作用了,Amarok播放了音乐,它正在播放到Skype,没有播放给我,我没有听到任何有关所有过程的信息.问题是; a)Maemo没有pavucontrol.b)即使它确实(或者我打包它)也没有任何好处,因为它是一个唯一的GUI应用程序,我必须在背景上完成所有这些东西,没有任何用户输入.(意思是:CLI或API)
在Freenode #pulseaudio上被问到这个问题时,一位乐于助人的人说"它可以通过pactl或pacmd完成,你想要的命令是move-sink-input和move-source-output,但你需要知道设备和流索引".所以看起来pavucontrol只是一个GUI,pactl和pacmd是真正的交易,最重要的是,它们是CLI应用程序.
我真的很感谢他,但我对"pactl","pacmd","move-sink-input"或"device/stream indices"一无所知,所以我需要一个非常简化的手册页,或者类似的应用程序,一个单行命令(两个?整个命令页?,只是给我们他们!^^)或有足够耐心的人向我解释这些东西.
我知道在Linux主机系统上使用脉冲音频是可能的但是paprefs
是为linux而不是mac构建的.
我有Ubuntu 16.04并且已经安装了BlueZ 5.37,PulseAudio 10.0和ofono 1.20(从github克隆).
我需要使用像调制解调器这样的电话将我的电话呼叫发送到电脑.我将我的电话与PC配对,使设备信任并连接(所有操作都成功).我认为ofono的问题,因为我可以播放音乐(使用A2DP),但如果我想使用免费或耳机配置文件 - 我在PC上没有声音.
在pacmd(PulseAudio控制台工具)列表卡中,我看到了我的蓝牙设备,但耳机音频网关HFP/HSP不可用.我也在不同的设备和计算机上测试过它.
谢谢你的建议.
我正在使用我的gentoo作为主机操作系统用于vv passthrough用于在Windows上播放,但我有声音问题,质量不好,我听到声音中的噼啪声.我在主机操作系统上使用pulseaudio(带--system模式),并尝试了不同的采样率,但没有帮助.我对vm的命令:
qemu-system-x86_64 \
-vga none \
-enable-kvm -m 10000 -cpu host -smp 8,cores=4,threads=2,sockets=1 \
-device ioh3420,bus=pci.0,addr=1c.0,multifunction=on,port=1,chassis=1,id=root.1 \
-device vfio-pci,host=01:00.0,bus=root.1,addr=00.0,multifunction=on,x-vga=on \
-net nic,macaddr=50:E5:49:57:74:E3 -net bridge,vlan=0 \
-soundhw hda \
-boot d \
-hda /dev/sdb \
-usb -usbdevice host:09da:000a
Run Code Online (Sandbox Code Playgroud)
我尝试设置PULSE_LATENCY_MSEC,QEMU_PA_SAMPLES,但没有帮助.我还检查了客户虚拟机上的live cd,以确定它是否不是Windows问题,但结果是一样的.我也试过设置-soundhw ac97,但是在Windows 10上没有官方支持ac97,我有一些声音延迟,但干扰较少.
我的音频是:
00:1f.3 Audio device [0403]: Intel Corporation Sunrise Point-H HD Audio [8086:a170] (rev 31) (snd_hda_intel on msi z170a m7),
Run Code Online (Sandbox Code Playgroud)
以及qemu和pulseaudio的版本:
QEMU emulator version 2.3.0, Copyright (c) 2003-2008 Fabrice Bellard
pulseaudio 5.0
Run Code Online (Sandbox Code Playgroud)
任何人都可以帮忙吗?
我试图使PulseAudio回声消除器工作.
我有两个应用程序 - 录音机和播放器,都使用PulseAudio.我像这样创建播放器和录像机:
// pulseAudio
pa_simple *paS=0;
pa_sample_spec ss;
void initPulseAudio()
{
ss.format = PA_SAMPLE_S16LE;
ss.channels = 1;
ss.rate = 8000;
paS = pa_simple_new(NULL, // Use the default server.
"bottomPlayer", // Our application's name.
PA_STREAM_PLAYBACK,
NULL, // Use the default device.
"playStream", // Description of our stream.
&ss, // Our sample format.
NULL, // Use default channel map
NULL, // Use default buffering attributes.
NULL // Ignore error code.
);
if(!paS)
{
fprintf(stderr,
"unable to create recorder\n");
myExit(1);
} …
Run Code Online (Sandbox Code Playgroud) 因此,蟒蛇的表现就像是从我的麦克风根本听不到任何东西.
这是问题所在.我有一个Python(2.7)脚本,假设使用Gstreamer访问我的麦克风并通过Pocketsphinx为我做语音识别.我正在使用Pulse Audio,而我的设备是Raspberry Pi.我的麦克风是Playstation 3 Eye.
现在,我已经获得了pocketphinx_continuous以正确运行并识别我在.dict和.lm文件中定义的单词.经过几次试运行后,准确度大约为85-90%.所以,我知道我的麦克风通常通过pocketsphinx +脉冲音频拾取声音.
仅供参考我执行以下操作:
pocketsphinx_continuous -lm /home/pi/dev/scarlettPi/config/speech/lm/scarlett.lm -dict /home/pi/dev/scarlettPi/config/speech/dict/scarlett.dic -hmm /home/pi/dev/scarlettPi/config/speech/model/hmm/en_US/hub4wsj_sc_8k -silprob 0.1 -wip 1e-4 -bestpath 0
Run Code Online (Sandbox Code Playgroud)
在我的python代码中,我试图做同样的事情,但我正在使用gstreamer访问python中的麦克风.(注意:我对Python有点新鲜)
这是我的代码(感谢Josip Lisec让我这么远):
import pi
from pi.becore import ScarlettConfig
from recorder import Recorder
from brain import Brain
import os
import json
import tempfile
#import sys
import pygtk
pygtk.require('2.0')
import gtk
import gobject
import pygst
pygst.require('0.10')
gobject.threads_init()
import gst
scarlett_config=ScarlettConfig()
class Listener:
def __init__(self, gobject, gst):
self.failed …
Run Code Online (Sandbox Code Playgroud) 我正在运行带有 gnome 的 Centos 7 桌面,尽管 Arch 和其他发行版经常出现类似的问题。
当我通过 top 检查我的 cpu 使用情况时,pulseaudio 使用了近 20% 的 cpu。
我四处寻找解决方案,但有很多不正确的解决方案,因此我在这里发布业力点以帮助其他人。