3

プリロードされた多数の「.mid」ファイルからサウンドを作成する必要があるアプリの作業を開始しています。

Python と Kivy を使用してアプリを作成しています。これらのツールを使用して既にアプリを作成しており、私が知っている唯一のコードです。私が作成した別のアプリは、サウンドをまったく使用しません。

当然のことながら、私が書いたコードがクロスプラットフォームで動作することを確認したいと思っています.

今は、MIDI ノートから実際のサウンドを作成できることを証明しようとしているだけです。

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.

このエラーが発生する理由、修正方法、およびこれが最も簡単な方法ですか、それとも正しい方法ですか?

4

1 に答える 1

2

私は間違っている可能性がありますが、.play_Note() の 2 番目の引数として渡す「0」チャネルはないと思います。これを試して:

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 に設定されているメソッドのソース コードには、チャンネル 1 ~ 16 のみへの参照があります。

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
于 2015-01-19T19:22:17.513 に答える