Welcome to WuJiGu Developer Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
1.0k views
in Technique[技术] by (71.8m points)

python - Pyo server.boot() fails with pyolib._core.PyoServerStateException on Ubuntu 14.04

I installed pyo on Ubuntu 14.04 without jack and running Python 2.7.I followed the Debian-based installing instructions written in pyo wiki. This was the code i used (it's in the pyo introduction page):

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

And got as result:

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: Not interested to using jack, already got problems with it.

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Answer

0 votes
by (71.8m points)

Got it working on Ubuntu 20.04

After trying several things and a lot of frustration... the following worked:

sudo apt install python3-pyo

and the test:

#/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()

produces a 2 second 440Hz sine sound as desired. Maybe a reboot was needed.

If program is using the audio when you launch the test, e.g. Chromium playing an YouTube video or VLC playing music, then it fails with that exception, so make sure to pausing/close all such applications.

Another thing worth doing is:

sudo apt install python3-wxgtk4.0

otherwise pyo keeps warning about the missing wxWidgets every single time. I don't think it makes the run fail however.

The above sudo apt install python3-pyo install pyo 1.0.0, and all the binary dependencies it needs to work, the dependency given by:

apt-cache depends python3-pyo

is:

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

Now, I if I try to upgrade pyo with:

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

which takes precedence over the distro provided 1.0.0, I get the following results:

  • 1.0.0: works

  • 1.0.1: works

  • 1.0.2: blows up with an error:

    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)
    

    But then I locate libasound_module_conf_pulse.so on my system, and work around with:

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

    and then it works.

    I also reported this at: https://github.com/belangeo/pyo/issues/200

  • 1.0.3: same

Another thing worth trying is from 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()

and then try to select a specific device with:

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

But I didn't need to do that to get it working after installing python3-pyo.

https://github.com/belangeo/pyo/issues/200#issuecomment-734958205 explains how to get it all working with Jack.


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome to WuJiGu Developer Q&A Community for programmer and developer-Open, Learning and Share
...