pyxelをシーケンサーにしたい💫
ふと、そんなことをふと思いつき、MIDIキーボードを使ってpyxelから音を出してみようと試みました。
Pyxel(ピクセル)は、 Python 向けのレトロゲームエンジンです。
使える色は 16 色のみ、同時に再生できる音は 4 音までなど、レトロゲーム機を意識したシンプルな仕様で、Python を使ってドット絵スタイルのゲームづくりが気軽に楽しめます。
mido ライブラリを使う
Mido は、MIDI 1.0 ポート、メッセージ、およびファイルを操作するための Python ライブラリです。
つまりはmidoとpyxelを連携させればMIDIキーボードを使って音を出すことが可能になります。
作ってみたけど思った通りの動作にならない
同時に鳴らせる音を3つにしたかったけど、pyxelの理解が乏しかったので方法がわからず。
またMIDIキーボードの鍵盤を離してから次の鍵盤を押さないと、次の鍵盤の音が途切れてしまう状態に。
pyxelのドキュメントや仕様とにらめっこ
pyxelの理解を深めて行くことで、4和音まで鳴らせるようになりました。
pyxelの仕様を超える高音域のB4以上の音程を出そうとするとバグってしまうので、B4以上の音程は無視するようにしつつ、和音演奏時に鍵盤を離しても他の音が切れないようにも修正。
これでやっと普通にMIDIキーボードで演奏できるようになりました。
さらにpyxelの仕組みを理解していく
pyxelでは4つの音色とエフェクトを利用することができます。
- 音色
- パルス波
- スクエア波
- 三角派
- ノイズ
- エフェクト
- フェードアウト
- バイブレーション(ビブラート)
これらの音色とエフェクトをリアルタイムで切り替えるために、中華ゲーム機のコントローラ or 普通のキーボードを使うことに。
これによって音色の表現が増えたので演奏の幅が広がるようになりました。
pyxel+MIDIキーボードのデモ
中華ゲーム機と組み合わせたミニマルなMIDIキーボードシステム
ファミコン ミネルバトンサーガの町のBGMを弾いてみた
ファミコン ハイドライドスペシャルのBGMを弾いてみた
DAWを使って1曲作ってみた
所管
MIDIキーボードの取り回しが良くなった
スピーカーが無いMIDIキーボードを使って音を出そうとする場合、PCやDAWなどを用意しなければなりません。
つまりは「MIDIキーボードの置く場所が限定される」ということになりますので、寝室やリビングなどで気軽に音を出すことはできないわけです。
しかし今回作成したpyxel_midi-keybordアプリと中華ゲーム機を組み合わせることで、MIDIキーボードをサッと利用可能になり、膝の上でも気軽に音を出すことができるようになりました。
(USBケーブルが1本あれば良い)
アプリ制作において感じたこと
実はMIDI鍵盤を叩いてから音が出るまでにラグがあるのですが、pyxelのfpsを上げればそのラグはどんどん短くなるのも面白い発見でした。
肝心のアプリについてはまだまだMIDIの機能を網羅できていませんし、ピッチベンド機能なども実装したいと思っていますが、pyxelの理解が乏しいので実現できていません。
でも工夫次第できっと実現できると思っていますので、時間があるときにまた挑戦したいと思っています!✨
Qiita記事のリンク
USB-MIDIキーボードでpyxelの音を鳴らしてみるテスト その1
https://qiita.com/moto_game_de_it/items/d99593379c317087e000
USB-MIDIキーボードでpyxelの音を鳴らしてみるテスト その2
https://qiita.com/moto_game_de_it/items/d89de2e234d227725f3c
USB-MIDIキーボードでpyxelの音を鳴らしてみるテスト その3
https://qiita.com/moto_game_de_it/items/95b41e7f8e037f65d483
以上