概要
自作の音楽ライブコーディングが可能な環境・ソフトウェアを作成しました。
SESSION2024でライブコーディング環境を動作した映像を提出、ありがたいことにMusicCompo 2ndPrizeいただけました。
本当にありがとうございます。
この記事では、自作のソフトの案内およびどんな機能を持っているか概要レベルで記載して、おまけとしてSESSIONS2024で準備した環境の紹介をしたいと思います。
よかったらソフトウェア使ってみてください。
あとなんか気になることがあったら報告ください。
X(Twitter)/misskey.io/:@MachiaWorx
bluesky:@machiaworx.bsky.social
ソフトウェア
以下のページからダウンロード可能にしております。
https://machiaworx.net/?p=914
サポートページも作りました。
https://machiaworx.net/recode/doku.php?id=start
他にboothやitch.ioからもダウンロードできるようにしたいと思います。
映像はこんなの。
リアルタイムでソースコードを書き込み、音楽を演奏しています。
どんなことができるか
- 平易なプログラミング言語記述で音楽演奏の譜面を作成可能
- サンプル再生/シンセサイザーの再生/MIDIノートの再生が可能(現行のバージョンでは主にMIDIノートに関する機能が多いです)
- リアルタイムに更新が可能、楽器のように演奏することが可能
メリット
1.楽器演奏ができなくてもリアルタイム演奏が可能
その場でソースコードを書き換えて再コンパイルすることで、演奏を止めないでフレーズの差し替えが可能です。
上記によって、打ち込みでライブを行うのが容易に可能。
また、楽曲作成において演奏しながらデータを書き込んで比較する等、楽曲のメモを作成するのが容易になります。
2.保存・バックアップが容易に可能(テキストファイルなので)
楽曲のデータについては、ソースコードとして保存されます。すなわち、テキストファイルとして保存されます。
テキストファイルであれば容量もそれほど大きくならないためバックアップは容易、かつバイナリではないため、一部データ破損によって読み込みができなくなるリスクを低下させます。
3.必要なソフトウェアは少なくなる(はず)
Re:codeは単体で音楽再生を行うことができます。現時点では単音や少ない音ですが、サンプル再生に対応しており、将来的にはシンセサイザー実装を予定しております。
録音機能は備えてないため、他にDAW等を用意いただく形になります。
ソフトウェアについて
このソフトからソースコードを読み込みコンパイルし、音楽再生を行います。
また、ショートカットキーにも対応しており、現行はF10でコンパイル+再生、F9で停止になります。
特徴的なのは「最前面に表示されており、OS上のキー入力からショートカット命令を実行可能」なことです。
すなわち、VSCodeでソースコードを変更して、フォーカスを変えずにF10を押すとすぐフレーズの更新ができます。
記述言語について
Re:codeはデータ作成・再生にMiniScriptの文法・機能を使っています。
MiniScriptとは
https://miniscript.org/
また譜面の整形については、独自に定義したMMLという簡単なマクロ言語が利用可能です。
適当にMIDI演奏を鳴らすなら以下の記述だけでOKです。
記述例:(ドレミファソラシ*2回をオクターブ変えて演奏)
rc_midi0( sq_mml("o4 cdefgab>cdefgab") )
この他に繰り返し命令や条件分岐、変数を使ったフレーズ分割・結合等整形が可能となっております。
今後の拡張予定
- UI周りの修正・機能追加
- キーハック(OS上で受け取ったショートカット入力を他のソフトに通さなくする)
- シンセサイザー実装(テキストで制御しやすいシンセってなんだろ・・・と悩んでいる最中です)
- サンプルのピッチ変更・サンプルスライス等の実装
- 譜面機能の拡張
おまけ
SESSIONS2024で提出した動画の構成解説を行います。
https://www.youtube.com/watch?v=g52rHtOzGnI
Re:code側の設定
まず再生についてはMIDIデータ限定にしています。
演奏を出力して音源は別のところで鳴らす形式ですね。
一応MIDI出力と音声を同期するための機能(MIDIレイテンシー調整)は付いてるのですが、レイテンシー機能が動いてるかわかりにくいのと調整に時間がかかること、用意する音源の種類を考慮し、MIDI出力オンリーで構築してます。
出力は後述の「仮想MIDIデバイス」に行います。
ソースコードは動画内で書いた通りです。
映像で記述したソースコードについて、実行ファイル一式にも封入しましたので、参考にしていただければ幸いです。
ルーティング・音源構成
仮想MIDIデバイスを動作させてます。
これはloopMIDIを利用してます。
https://www.tobias-erichsen.de/software/loopmidi.html
仮想MIDIデバイスからの出力をAbletonLiveで受け取り、Liveから各音源に出力を分配します。
今回は以下の音源を利用しています。
- DeeAcid
https://www.dotec-audio.com/deeacid_jp.html - Operator(AbletonLiveの組み込み音源)
- AbletonLiveプリセットのドラム音を改造
- Roland Integra-7
映像
VisualSynthesizerから映像を作ってます。
https://www.dotec-audio.com/deeacid_jp.html
VSTiとして起動できるため本当はMIDI制御も可能なのですが、時間がなかったのとソースコードが見づらくなるリスクがあったので、音声に合わせ書き出しし、最終的な出力を合成しております。
最低限の準備でオーディオリアクティブができるのはありがたいです。
また、このソフトウェアはGLSLのフラグメントシェーダで映像を生成しているらしく、最悪自分でソースコードを書けば拡張できるじゃん!という結論に至ったのも導入理由のひとつです。
(音楽作ってはいるものの、元々GLSL書いてましたので)