MIDI入力
MIDIキーボードなどのデバイスからOscili()の周波数を変えてみましょう。
from sndobj import * import time MidiDeviceList() #利用可能なMIDIデバイスを表示します port = int(raw_input("Enter MIDI port:")) #入力待ち midi = SndMidiIn(port) note = MidiIn(midi) #SndMidiInからMIDIナンバー ntab = NoteTable() #MIDIナンバーを周波数に変換 convert = Lookup(ntab, 0, note) tab = HarmTable() osc = Oscili(tab, 440, 3000, convert) rtout = SndRTIO(1, SND_OUTPUT) rtout.SetOutput(1, osc) thread = SndThread() thread.AddObj(midi, SNDIO_IN) thread.AddObj(note) thread.AddObj(convert) thread.AddObj(osc) thread.AddObj(rtout, SNDIO_OUT) thread.ProcOn() time.sleep(60) thread.ProcOff()
1つ1つ解説します。まず利用可能なMIDIデバイスが一覧表示され、入力待ちになります。使用したいMIDIデバイスの番号を押してください。僕の場合、MIDIキーボード持ってないのでPyPortMidiからデータを送信する為にMIDI Yokeを選択。MIDIキーボードの動作確認ができていませんが多分オッケーでしょう。次にSndMidiInから受け取ったメッセージからMidiInがMIDI番号を取り出します。第2引数で他の情報を取り出すこともできます。これをLookupで周波数にしてOsciliの第4引数に繋げます。