jack - 在 jackclient-python 上运行 jack.Client() 的问题(可能在 ALSA 配置上)
问题描述
我正在尝试从Ubuntu 18.04 64 位上的MIDI 键盘读取 MIDI 输入。
我决定使用JACK Audio Connection Kit (JACK) Client for Python。安装后我想运行一个简单的程序来打印所有收到的 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
)
但是当我按下 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]
你能帮我指出问题出在哪里吗?
解决方案
重点是,我们需要给出正确的命令来使用正确的驱动程序、设备 ID 和可能的 MIDI 端口来启动jack 服务器。
使用以下命令在后台运行 jack server:
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“sequencer”客户端的 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
以下是 command 的部分输出aplay -l
,其中显示了关于卡 2的信息
card 2: PCH [HDA Intel PCH], device 0: ALC892 Analog [ALC892 Analog]
Subdevices: 1/1
Subdevice #0: subdevice #0
资料来源:
jackd 的手册页:https ://www.mankier.com/1/jackd
推荐阅读
- python - 我应该将我的自定义用户模型保留在共享应用程序中吗?
- php - 需要帮助使用 laravel 过滤阿拉伯语数据库记录
- php - 使用 COM 类处理准备好的语句
- java - 设置 AnyLogic 状态图以给定速率加 1
- android - Android:音频正在播放,但我听不到
- appcelerator - Appcelerator:Atom IDE 未显示已安装的模拟器列表
- python - Python BeautifulSoup 发现所有错误(对象没有属性)
- python - 熊猫使用上一时期填充值
- blockchain - Pancakeswap 错误 TRANSFER_FAILED。我该如何解决?
- python-3.x - GUI 中不同方法的输入