Обновление списка устройств ввода MIDI - PullRequest
0 голосов
/ 30 мая 2020

Я использую MIDI-модуль pygame для сбора списка доступных устройств ввода MIDI.

Я использую метод внутри специально созданного класса для создания этого списка, например:

def create_devices(self):
        pygame.midi.init()
        devices = []
        device_count = pygame.midi.get_count()
        for d in range(device_count):
            device = pygame.midi.get_device_info(d)
            device_name = device[1].decode()
            device_type = device[2]
            if device_type == 1:
                input_device = MidiDevice(d, device_name)
                devices.append(input_device)
        return devices

Я устанавливаю список, возвращаемый этим методом, на свойство в моем классе в конструкторе, а позже я визуализирую входные данные на экране как кнопки, предназначенные для выбора.

Я также есть кнопка refre sh, которая при нажатии выполняет эту функцию и устанавливает свойство в моем классе в список, возвращаемый снова.

Проблема, с которой я сталкиваюсь, заключается в том, что даже если я добавляю или удаляю MIDI-входы во время программа запущена, кнопка refre sh всегда возвращает то, что было изначально создано в конструкторе класса.

При перезапуске программы после изменения входных данных отображаются все доступные в настоящее время входы.

Я бы хотел, чтобы кнопка refre sh автоматически находила новые входы, но мне что-то не хватает.

Я новичок в py game и python в целом, поэтому мне не терпится узнать, почему это ведет себя не так, как я ожидал.

Любая помощь приветствуется!

1 Ответ

1 голос
/ 30 мая 2020

РЕШЕНО.

Оказывается, мне нужно было выйти из модуля pygame.midi, чтобы его можно было повторно инициализировать.

Вот небольшое изменение, которое устранило мою проблему:

    def create_devices(self):
        pygame.midi.init()
        devices = []
        device_count = pygame.midi.get_count()
        for d in range(device_count):
            device = pygame.midi.get_device_info(d)
            device_name = device[1].decode()
            device_type = device[2]
            if device_type == 1:
                input_device = MidiDevice(d, device_name)
                devices.append(input_device)
        pygame.midi.quit() # THIS LINE FIXED IT
        return devices
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...