ひとまず、インターフェイス系を攻めよう。
ということでポケットミクことNSX-39をRaspberry Piに接続していじってみます。
Raspberry PiのUSBやオーディオノイズは音関係いじる上で深刻なレベルなので、あくまでプロトタイピングをスムーズにするための手段としてのRaspberry Piという立ち位置で見て行きます。
とりあえず動かしてみる、という程度。
簡単に。
USBにNSX-39を繋いでPythonスクリプトを動かしたら即動くというのが理想なのですが、デバイスの番号だとかいろいろ面倒くさいのでALSA midiとして扱うことにします。
まずはRaspberry PiからNSX-39にmidi出力して様子を伺ってみます。
Raspberry PiにNSX-39を接続。
メニューから サウンドとビデオ>QjackCtl を選び起動します。
QjackCtlの画面の左下の「接続」をクリックすると出てくるウィンドウの「ALSA」タブを選択、
出力のMidi Through と 入力のNSX-39を画像のように接続します。
以上でALSA midi経由でNSX-39に接続出来ます。QjackCtlは特に開始する必要ありません。
ただし、終了してしまうと接続も切れてしまうので起動したままにしておきます。
import pygame import pygame.midi as m pygame.init() m.init() count = m.get_count() for i in range(count): print( m.get_device_info(i) )
さてデバイス一覧をゲットです。
上記を実行すると
('ALSA', 'Midi Through Port-0', 0, 1, 0)
('ALSA', 'Midi Through Port-0', 1, 0, 0)
こんな感じで結果が出てきます。直接繋いでるわけではないのでここにNSX-39とは出てきませんが。
データの並び順は(interf, name, input, output, opened)となっています。
pygameがどこにデータを出力しようとするかとか、入力をどこからしようとするか見てみます。
>>> m.get_default_output_id()
0
>>> m.get_default_input_id()
1
特になにかいじる必要もなく、すでにデバイスリストに出てきたものに割り振られているようですネ。
じゃあまあ、音出してみましょう。
NSX-39はch0がボーカロイド、1~15はいわゆるGM/XG音源になってます。
せっかく歌えるのだからまずはボーカロイド部分を。
import pygame import pygame.midi as m pygame.init() m.init() p = m.Output(0) sysexs = '\xF0\x43\x79\x09\x11' sysexe = '\xF7' sysmode = '\x0A' #lyric set mode sysslot = '\x01' #slot 1 #yoru ni hana hiraku lyric = '\x6E\x71\x40\x47\x3F\x48\x6F\x07' p.write_sys_ex(0,sysexs+sysmode+sysslot+lyric+sysexe) for i in range(10): p.note_on(60,100,0) pygame.time.wait(500) p.note_off(60,100,0) pygame.time.wait(1) p.close() pygame.quit()
リアルタイムに歌詞を送りながら、とも思ったのですけれど毎度歌詞の為に数バイト送らないといけなくなるしパフォーマンス的に疑問があったので普通にsysexで歌詞を送り込んでmidiノートのオンオフをしています。
で、まあ、歌詞を送り込むとか、エフェクトを設定する為のツールを作るとかはありだなーって思いました。
シーケンスとかはシーケンサー使った方が幸せになれそうな。
何か意味があるのか、よくわかりませんが。何かにつながるかもしれないのでためしましょう。
とりあえず後日。