#pygame #alsa #slave #libasound
#pygame #alsa #Подчинение #libasound
Вопрос:
Я получал эту ошибку, когда пытался запустить свой 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]
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()
выдает ошибку подчиненного устройства.
Я использую Ubuntu 20.04 и Python 3.8 в PyCharm.
Редактировать: выполнение приведенного выше кода непосредственно на Python с терминала не приводит к появлению ошибки подчиненного pygame.init()
устройства, но иногда выдает (snd_pcm_recover) underrun occurred
ошибку.
Комментарии:
1. Сообщение «Неизвестный SEQ по умолчанию» означает, что ALSA и / или PulseAudio установлены неправильно или что файлы конфигурации ALSA были изменены ненадлежащим образом.
Ответ №1:
У меня была такая же проблема с использованием PyGame в Blender, «взлом» выше, копирование файлов, чтобы /usr/lib/alsa-lib
избавиться от ошибки для меня и заставить sounds и PyGame работать должным образом. У меня была эта проблема только на Ubuntu, а не на моем Mac. Я никогда не получал ошибку «slave».
FTR, я использую PyGame для ввода MIDI-команд live с клавиатуры или контроллера для анимации в Blender.