【问题标题】:Pyo server.boot() fails with pyolib._core.PyoServerStateException on Ubuntu 14.04Pyo server.boot() 在 Ubuntu 14.04 上因 pyolib._core.PyoServerStateException 而失败
【发布时间】:2015-12-03 09:43:40
【问题描述】:

我在没有 jack 的 Ubuntu 14.04 上安装了 pyo 并运行 Python 2.7。我遵循了 pyo wiki 中编写的 Debian-based installing instructions。 这是我使用的代码(在pyo introduction page):

from pyo import *
s = Server().boot()
s.start()
a = Sine(mul=0.01).out()

结果如下:

pyo version 0.6.8 (uses single precision)
ALSA lib pcm_dsnoop.c:618:(snd_pcm_dsnoop_open) unable to open slave
ALSA lib pcm_dmix.c:1022:(snd_pcm_dmix_open) unable to open slave
ALSA lib pcm.c:2239:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.rear
ALSA lib pcm.c:2239:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.center_lfe
ALSA lib pcm.c:2239:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.side
bt_audio_service_open: connect() failed: Connection refused (111)
bt_audio_service_open: connect() failed: Connection refused (111)
bt_audio_service_open: connect() failed: Connection refused (111)
bt_audio_service_open: connect() failed: Connection refused (111)
ALSA lib pcm_dmix.c:1022:(snd_pcm_dmix_open) unable to open slave
Cannot connect to server socket err = No such file or directory
Cannot connect to server request channel
jack server is not running or cannot be started
Expression 'parameters->channelCount <= maxChans' failed in 'src/hostapi/alsa/pa_linux_alsa.c', line: 1514
Expression 'ValidateParameters( inputParameters, hostApi, StreamDirection_In )' failed in 'src/hostapi/alsa/pa_linux_alsa.c', line: 2818
portaudio error in Pa_OpenStream: Invalid number of channels
Portaudio error: Invalid number of channels
Server not booted.
The Server must be booted!
Traceback (most recent call last):
  File "/host/Python/Synth/synther.py", line 4, in <module>
    a = Sine(mul=0.01).out()
  File "/usr/lib/python2.7/dist-packages/pyolib/generators.py", line 58, in __init__
    PyoObject.__init__(self, mul, add)
  File "/usr/lib/python2.7/dist-packages/pyolib/_core.py", line 376, in __init__
    PyoObjectBase.__init__(self)
  File "/usr/lib/python2.7/dist-packages/pyolib/_core.py", line 262, in __init__
    raise PyoServerStateException("The Server must be booted before creating any audio object.")
pyolib._core.PyoServerStateException: The Server must be booted before creating any audio object.

PS:对使用jack没兴趣,已经遇到问题了。

【问题讨论】:

  • 我刚刚遇到了同样的问题。我已尝试明确限制通道数 (s = Server(nchnls=2).boot()),但这会导致相同的错误。

标签: python python-2.7 ubuntu ubuntu-14.04 pyo


【解决方案1】:

可以在 Ubuntu 20.04 上运行

在尝试了几件事和很多挫折之后......以下工作:

sudo apt install python3-pyo

和测试:

#/usr/bin/env python3
from pyo import *
s = Server()
s.boot()
s.start()
a = Sine(freq=440, mul=0.5)
a.out()
time.sleep(2)
a.stop()
s.stop()

根据需要产生 2 秒 440Hz 的正弦波。可能需要重新启动。

如果程序在您启动测试时正在使用音频,例如Chromium 播放 YouTube 视频或 VLC 播放音乐,然后它会因该异常而失败,因此请确保暂停/关闭所有此类应用程序。

另一件值得做的事情是:

sudo apt install python3-wxgtk4.0

否则 pyo 每次都会对丢失的 wxWidgets 发出警告。但是,我认为它不会导致运行失败。

以上sudo apt install python3-pyo安装pyo 1.0.0,以及它需要工作的所有二进制依赖,依赖给定:

apt-cache depends python3-pyo

是:

python3-pyo
  Depends: libc6
 |Depends: libjack-jackd2-0
  Depends: <libjack-0.125>
    libjack-jackd2-0
    libjack0
  Depends: liblo7
  Depends: libportaudio2
  Depends: libportmidi0
  Depends: libsndfile1
  Depends: python3
  Depends: python3
  Depends: <python3:any>
    python3:i386
    python3
  Recommends: python3-tk
  Recommends: jackd2

现在,如果我尝试升级 pyo:

python -m pip instal --user pyo==1.0.X

优先于发行版提供的 1.0.0,我得到以下结果:

  • 1.0.0:有效

  • 1.0.1:有效

  • 1.0.2:报错:

    ALSA lib conf.c:3558:(snd_config_hooks_call) Cannot open shared library libasound_module_conf_pulse.so (/usr/lib/alsa-lib/libasound_module_conf_pulse.so: libasound_module_conf_pulse.so: cannot open shared object file: No such file or directory)
    

    但后来我在我的系统上locate libasound_module_conf_pulse.so,并解决了:

    sudo ln -s /usr/lib/x86_64-linux-gnu/alsa-lib /usr/lib/alsa-lib
    

    然后它就起作用了。

    我也在:https://github.com/belangeo/pyo/issues/200

  • 1.0.3:相同

另一件值得尝试的事情来自Playing sound in pyo and python

from pyo import *
print("Default input device: %i" % pa_get_default_input())
print("Default output device: %i" % pa_get_default_output())
print("Audio host APIS:")
pa_list_host_apis()
pa_list_devices()

然后尝试使用以下命令选择特定设备:

s = Server()
s.setOutputDevice(0)
s.boot()

但在安装python3-pyo 后,我不需要这样做来让它工作。

https://github.com/belangeo/pyo/issues/200#issuecomment-734958205 解释了如何与 Jack 一起工作。

【讨论】:

    猜你喜欢
    • 2018-09-22
    • 2023-03-31
    • 2015-06-08
    • 1970-01-01
    • 2015-09-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-29
    相关资源
    最近更新 更多