Неустранимая ошибка Python: (парашют pygame) Ошибка сегментации при использовании pygame.midi - PullRequest
0 голосов
/ 09 января 2020

Я работал над воспроизведением миди-файлов в Pygame и продолжаю сталкиваться с этой ошибкой.

Неустранимая Python ошибка: (парашют пигамей) Ошибка сегментации

Python Состояние выполнения: инициализировано

Это мой код:

import pygame.midi
pygame.midi.init()
device = pygame.midi.get_default_output_id()
player = pygame.midi.Output(0)

ошибка выделена как проблема с последней строкой, но я не совсем уверен, что с ней не так.

Спасибо!

1 Ответ

0 голосов
/ 10 января 2020

Я думаю, что это ошибка в Pygame, но в трекере , похоже, ничего не найдено. Я могу повторить проблему с PyGame 1.9.4.post1.

Причиной проблемы является вызов pygame.midi.Output(), я поиграл с несколькими различными вызовами, указав разные параметры, которые вызывают разные ошибки - иногда в звоните, но в другое время при выключении.

Это обходной путь, а не решение - но вам действительно нужно вызывать эту функцию? Basi c Функциональность MIDI, кажется, работает без него. Приведенный ниже код воспроизводит файл MIDI, а затем завершает работу чисто.

import sys
import pygame
import pygame.midi

pygame.init()
pygame.midi.init()
pygame.mixer.init()

midi_file = "popcorn.mid"
pygame.mixer.music.load( midi_file )
pygame.mixer.music.play()
device = pygame.midi.get_default_output_id()
device_info = pygame.midi.get_device_info( device )
print( "MIDI Device: " + str( device ) )
print( "Device Info: " + str( device_info ) )
#player = pygame.midi.Output( device, buffer_size=4096 )

clock = pygame.time.Clock()
while pygame.mixer.music.get_busy():
    pygame.time.delay( 1500 )
    print("?", end='')
    sys.stdout.flush()   # just ensure the tick-mark is printed in-time

pygame.mixer.music.stop()
pygame.quit()

Может быть, более поздняя версия PyGame - возможно, даже (грядущая?) Версия SDL2.

...