在jackclient-python上运行jack.Client()时出现问题(可能在ALSA Config上)

时间:2019-02-13 15:22:43

标签: python-3.x midi alsa jack libalsa

我正在尝试从64位Ubuntu 18.04上的MIDI Keyboard读取MIDI输入。

我决定使用JACK Audio Connection Kit (JACK) Client for Python。安装后,我想运行a simple program以打印所有收到的MIDI事件。

但是运行后

client = jack.Client('MIDI-Monitor')

我收到了

ALSA: Cannot open PCM device alsa_pcm for playback. 
      Falling back to capture-only mode
Cannot connect to server socket err = No such file or directory
Cannot connect to server request channel

首先,我检查MIDI键盘是否正常工作。我使用了Kmidimon,并且在按下键时看到了事件。因此MIDI键盘有效。

然后,我在网上搜索并尝试了以下操作: 使用该命令并使其在后台jackd -R -d alsa -d hw:0,3中运行(以及所有可能的组合,0表示卡号,3表示设备号,另请参见命令aplay -l的响应)

来源: https://askubuntu.com/questions/320946/jackd-does-not-work-aplay-l-shows-two-instances-of-the-same-card-ubuntu-13-04

但是当我按下MIDI键盘上的按钮时,python程序没有响应我的事件。

这是命令aplay -l的响应的一部分

card 0: HDMI [HDA Intel HDMI], device 3: HDMI 0 [HDMI 0]
card 0: HDMI [HDA Intel HDMI], device 7: HDMI 1 [HDMI 1]
card 0: HDMI [HDA Intel HDMI], device 8: HDMI 2 [HDMI 2]
card 0: HDMI [HDA Intel HDMI], device 9: HDMI 3 [HDMI 3]
card 1: PCH [HDA Intel PCH], device 0: ALC892 Analog [ALC892 Analog]
card 1: PCH [HDA Intel PCH], device 1: ALC892 Digital [ALC892 Digital]

您能帮我指出问题出在哪里吗?

1 个答案:

答案 0 :(得分:0)

要点是,我们需要给出正确的命令以使用正确的驱动程序,设备ID以及可能的MIDI端口启动 jack服务器

使用以下命令在后台运行杰克服务器:

sudo jackd -d alsa -d hw:2,0 -X seq

“-d alsa”表示将使用ALSA驱动程序。

“-d hw:2,0 -X seq”是“ -d alsa”的后端选项

“-d hw:2,0”表示要使用的ALSA pcm设备,以及所有可能的组合,2表示卡号,0表示设备号,该信息可以在命令aplay -l的响应中找到(在此答案的底部)

“-X seq”意味着指定一组对应于每个ALSA“定序器”客户端的JACK MIDI端口(包括机器上的每个硬件MIDI端口)

该命令可能的工作响应如下:

   jackdmp 1.9.12
   Copyright 2001-2005 Paul Davis and others.
   Copyright 2004-2016 Grame.
   Copyright 2016-2017 Filipe Coelho.
   ... (some lines omitted)
   JACK server starting in realtime mode with priority 10
   self-connect-mode is "Don't restrict self connect requests"
   audio_reservation_init
   Acquire audio card Audio2
   creating alsa driver ... hw:2,0|hw:2,0|1024|2|48000|0|0|nomon|swmeter|-|32bit
   configuring for 48000Hz, period = 1024 frames (21.3 ms), buffer = 2 periods
   ALSA: final selected sample format for capture: 32bit integer little-endian
   ALSA: use 2 periods for capture
   ALSA: final selected sample format for playback: 32bit integer little-endian
   ALSA: use 2 periods for playback
   port created: Midi-Through:midi/playback_1
   port created: Midi-Through:midi/capture_1
   port created: CME-M-Key:midi/playback_1
   port created: CME-M-Key:midi/capture_1
   port created: KMidimon:midi/playback_1
   port created: KMidimon:midi/capture_1

这是命令aplay -l输出的一部分,该命令显示有关卡2的信息

   card 2: PCH [HDA Intel PCH], device 0: ALC892 Analog [ALC892 Analog]
   Subdevices: 1/1
   Subdevice #0: subdevice #0

来源:

杰克手册页:https://www.mankier.com/1/jackd

网络上的类似解决方案:https://askubuntu.com/questions/320946/jackd-does-not-work-aplay-l-shows-two-instances-of-the-same-card-ubuntu-13-04