Какой самый простой способ перейти от MIDI к реальному звуку, выходящему из моих динамиков (синтез звука) в Python?

Я начинаю работу над приложением, которое должно создавать звук из множества предварительно загруженных файлов ".mid".

Я использую Python и Kivy для создания приложения, так как я создал приложение уже с этими инструментами, и они - единственный код, который я знаю. Другое приложение, которое я сделал, не использует звук вообще.

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

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

Я взял этот код, предложенный из другого ответа на аналогичный вопрос, используя FluidSynth и Mingus:

from mingus.midi import fluidsynth

fluidsynth.init('/usr/share/sounds/sf2/FluidR3_GM.sf2',"alsa")
fluidsynth.play_Note(64,0,100)

Но я ничего не слышу и получаю эту ошибку:

fluidsynth: warning: Failed to pin the sample data to RAM; swapping is possible.

Почему я получаю эту ошибку, как ее исправить, и это самый простой или правильный путь?

1 ответ

Я могу ошибаться, но я не думаю, что есть канал "0", который вы передаете в качестве второго аргумента.play_Note(). Попробуй это:

fluidsynth.play_Note(64,1,100)

или (из какой-то документации)

from mingus.containers.note import Note
n = Note("C", 4)
n.channel = 1
n.velocity = 50
fluidSynth.play_Note(n)

ОБНОВИТЬ:

В исходном коде этого метода есть ссылки только на каналы 1-16, для канала по умолчанию установлено значение 1:

def play_Note(self, note, channel = 1, velocity = 100):
        """Plays a Note object on a channel[1-16] with a \
velocity[0-127]. You can either specify the velocity and channel \
here as arguments or you can set the Note.velocity and Note.channel \
attributes, which will take presedence over the function arguments."""
        if hasattr(note, 'velocity'):
            velocity = note.velocity
        if hasattr(note, 'channel'):
            channel = note.channel
        self.fs.noteon(int(channel), int(note) + 12, int(velocity))
        return True
Другие вопросы по тегам