Pygame Midi libasound_module_conf_pulse.so错误+无法打开slave

问题描述 投票:0回答:2

当我尝试运行 pygame.midi 代码时遇到此错误:

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)
ALSA lib seq.c:935:(snd_seq_open_noupdate) Unknown SEQ default

我发现Python正在搜索的路径不存在。由于某种原因,

libasound_module_conf_pulse.so
位于
/usr/lib/x86_64-linux-gnu/alsa-lib
,所以我在
alsa-lib
中创建了
/usr/lib/
目录,并将
usr/lib/x86_64-linux-gnu/alsa-lib
的内容复制到其中。

修复了第一个错误。现在,我遇到了另一个错误,我认为这与我上面应用的真正阴暗的修复有关(为什么我将它们都包含在同一问题中)。运行时

pygame.init()
我收到此错误:

ALSA lib pcm_dmix.c:1089:(snd_pcm_dmix_open) unable to open slave

我在网上搜索过,只发现一个相关问题,但遗憾的是没有得到解答。我的理解是,使用 pygame.midi 中的方法可以工作,但使用 pygame 中的方法(例如 init)会引发错误。

所以,这段代码可以正常工作:

import pygame.midi
import pygame

def print_devices():
    for n in range(pygame.midi.get_count()):
        print (n,pygame.midi.get_device_info(n))

def number_to_note(number):
    notes = ['c', 'c#', 'd', 'd#', 'e', 'f', 'f#', 'g', 'g#', 'a', 'a#', 'b']
    return notes[number%12]

def readInput(input_device):
    clock = pygame.time.Clock()
    while True:
        if input_device.poll():
            event = input_device.read(1)[0]
            data = event[0]
            timestamp = event[1]
            note_number = data[1]
            velocity = data[2]
            if (velocity!=0):
                print (number_to_note(note_number), velocity)



if __name__ == '__main__':
    pygame.midi.init()
    my_input = pygame.midi.Input(3)
    readInput(my_input)
    my_output = pygame.midi.Output(2)
    my_output.note_on(90,120)
    my_output.note_off(90, 120)

但是添加

pygame.init()
会引发从属错误。

我在 PyCharm 中使用 Ubuntu 20.04 和 Python 3.8。

编辑:从终端直接在 Python 中运行上述代码不会在

pygame.init()
上给出从属错误,但有时会给出
(snd_pcm_recover) underrun occurred
错误。

pygame alsa slave libasound
2个回答
0
投票

我在 Blender 中使用 PyGame 时遇到了同样的问题,上面的“hack”,将文件复制到

/usr/lib/alsa-lib
消除了我的错误,并使声音和 PyGame 正常工作。我只在 Ubuntu 上遇到这个问题,在 Mac 上没有。我从来没有遇到过“从属”错误。

FTR,我正在使用 PyGame 从键盘或控制器输入实时 MIDI 命令,以便在 Blender 中制作动画。


0
投票

我在使用 mido 时遇到了同样的问题,我没有复制文件,而是创建了从

/usr/lib64/alsa-lib
/usr/lib/x86_64-linux-gnu/alsa-lib
的符号链接:

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

无需复制,效果就像魔术一样。享受吧!

© www.soinside.com 2019 - 2024. All rights reserved.