エンジニアの皆さんの中には、ターミナル上(CUI)で、音楽制作をしている方が相当数います。2020年に同じタイトルでQiita寄稿したのですが、2600以上の閲覧数がありました。(エンジニアの中の2600という数が妙にリアル)。その後、いろいろ調べたり、自分でSoundFontプレイヤーを組み込んだ、CUI版のテキスト音楽「サクラ」を開発したので、その紹介をしつつ、音楽環境をアップデートしてみましょう。
CUI音楽家に超オススメのピコサクラ(CUI版)
そもそも、本記事を書こうと思ったのは、CUIで演奏できる自作のSoundFontプレイヤー+MMLコンパイラを作ったからです!CUIなので画面が味気ないのは仕方ないとしても、以下のように「picosakura」コマンドに音楽データのMMLファイルを与えるだけで、MMLファイルをコンパイルし、指定のSoundFontを使って音楽演奏をしてくれます。
なお、コマンドラインではなく、ブラウザ上で試したいという方は、ピコサクラWeb版を試してみてください。ブラウザ上で、SoundFontを利用して演奏が可能です!
音楽制作自体はターミナルで行いたいという方も、ブラウザ上で動くサクラのチュートリアルがあります。良かったら、以下のチュートリアルでMMLの記述方法を確認してみてください。
サクラを使うと、MMLと呼ばれる音楽記法(ABC記法とも言う)を使って、音楽制作を行うためのツールです。そもそも、テキスト音楽「サクラ」とは「一体何だ!」と思っている方も、一度ご覧ください!
ピコサクラCUI版のインストール
ピコサクラCUI版(正式名称: picosakura-rust)は、Rustで開発したSoundFontプレイヤー+MMLコンパイラで、以下よりWindow/macOSのバイナリをダウンロードできます。
ちなみに、プログラマー諸氏であれば、既にRustをインストールしてありますよね?Rustがセットアップしてあるならば、以下のコマンドでコンパイルできます。Linuxメインの方は、こちらが便利でしょうか。
git clone https://github.com/kujirahand/picosakura-rust.git
cd picosakura-rust
cargo build --release
上記コマンドを実行するとpicosakura-rust/target/release/picosakura
にバイナリが生成されます。後は、適当に環境変数PATHにpicosakuraのバイナリを配置したパスを追加してください。
ピコサクラCUI版の使い方
基本的には以下のようにして再生を行います。
picosakura (演奏ファイル.mml)
細かいオプションは、picosakura --help
で表示できます。
最初につまづきそうな点ですが、picosakuraコマンドは、デフォルトで、(カレントディレクトリ)/fonts/TimGM6mb.sf2
のSoundFontを利用して演奏を行おうとします。もし、任意のSoundFontを使いたい場合には、下記のように、引数にサウンドフォントのパスを指定します。
picosakura --soundfont (SounfFontのパス) (演奏ファイル.mml)
オリジナル曲を作るとき
そのため、オリジナル曲を作成する際には、再生用に簡単なバッチファイルを作って、そのバッチファイルを実行すれば、演奏が始まるという状態にすると便利です。
hello.mmlとplay.shというファイルを作成します。
touch hello.mml
touch play.sh
簡単に演奏できるバッチを作成します。
#!/bin/bash
SF=/path/to/soundfont
picosakura --soundfont $SF hello.mml
そして、./play.sh
でMMLファイルの再生が可能です。
SoundFontを探そう!
picosakuraがデフォルトで用意しているサウンドフォントは、バランスが良い上に、ファイルサイズも、6MBほどしかない優秀な「TimGM6mb.sf2」です。これは、オープンソースのSoundFoutです。とは言え、もうちょっとファイルの大きなものの方が、楽器が揃っていて楽しいです。
以下からGS対応のものなど、いろいろダウンロードできます。
また、ネットをさまようと、他にもいろいろなSoundFontがあります。XG対応のものとか、検索で、SC-88とかいろいろ名機を入力すると、それっぽいものが集まります。
作成した曲をMP3に変換する
なお、せっかく曲を作ったら、MP3に変換して、YouTube動画にしてアップしたいですよね。
ピコサクラには、WAVファイルの書き出し機能も整っています。
以下のコマンドを実行すると「sakura2.mml」を「a.wav」という名前でWAVファイルにエクスポートします。
picosakura -w a.wav sakura2.mml
あとは、ffmpegを使ってWAVをMP3に変換しましょう。以下は「a.wav」を「a.mp3」に変換するコマンドです。
ffmpeg -i "a.wav" -vn -ac 2 -ar 44100 -ab 256k -acodec libmp3lame -f mp3 "a.mp3"
曲のソースコードやSoundFontの管理はGitで
CUI環境の良いところなんですが、曲のソースコードや、SoundFontの管理は全部Gitでバージョン管理できます。フレーズを書き換えたけど、前の方が良かったなぁなんて場合は、Gitで履歴をたどることもできて、良い感じに試行錯誤できます。
また、GitHubに曲制作のリポジトリを作っておくと、曲の公開からデータの管理まで、いろいろできて便利です。GitHubのIssuesをメモ代わりに使うこともできるので、「あのピアノのパターンを差し替えたい」とかメモを残しておけます。また、修正したらIssuesを閉じると、タスク管理ツールの代わりにも使えるので便利です。
スクリプト言語を交ぜて作曲しよう
MMLを使ったテキスト音楽の利点なんですが、ソースコードを複数のテキストファイルに分けておいて、コンパイル前にマージすることもできます。また、ランダムにフレーズを生成して気に入ったコードを採用するなんてこともできます。
サクラ自体にも、簡単な制御構文FUNCTIONやIF/WHILE/FORが備わっていますが、普段書き慣れているPython/なでしこ/Ruby/Perl/PHPを使って、MMLを動的生成するようにすれば、かなり、良い感じに曲を生成できます。
なお、先日、なでしこを使って、ベースラインのフレーズをランダムに作成する、TRndM5というツールを作ってみました。こうしたツールを手軽に作れるのも、MMLならではの良さと言えます!
ピコサクラCUI版だけで全部揃った?!
これまでは、timidity++だったり、FluidSynthだったり、いろいろなアプリをインストールして、音楽制作していたのですが、ピコサクラCUI版さえあれば、いろいろなタイプの曲を作れるようになりました。しかし、ピコサクラCUI版さあれば、本当に手軽に音楽制作ができます!
…とは言え、実は、ピコサクラの演奏エンジンは、rustysynthというライブラリをラップしただけなんです。そのため、機能はrustysynthに依存しています。作者のsinshu様ありがとうございます!リバーブなどエフェクトにも対応しており、素晴らしいライブラリです。
FluidSynthを使う場合
しかし、ピコサクラの演奏エンジンで、うまく鳴らないという場合があれば、FluidSynthを使うと良いでしょう。macOSであれば、下記のコマンド一発で、FluidSynthがインストールできます。
brew install fluidsynth
そして、FluidSynthでSoundFontを使ってMIDIを鳴らすには、下記のようにします。前述のように、再生用のバッチを用意するなら、サクラでMML→MIDIだけをやっておいて、再生は、FluidSynthにお任せできます。
# FluidSynthで演奏
fluidsynth -i /path/to/soundfont.sf2 hello.mid
サクラのコンパイラのみバージョン
サクラのMML→MIDI変換エンジンは、以下より入手できます。
同じように、Rustがインストールされていれば、以下のコマンドでコンパイルできます。
git clone https://github.com/kujirahand/sakuramml-rust.git
cargo build --release
すると、sakuramml-rust/target/release/sakuramml
という名前のバイナリが作成されます。
以下は、hello.mml
をhello.mid
という名前でコンパイルし、FluidSynthで演奏する例です。
#!/bin/bash
# サクラで演奏なしにMMLをMIDIに変換
sakuramml hello.mml
# FluidSynthで演奏
fluidsynth -i /path/to/soundfont.sf2 hello.mid
高機能なサクラv2が使いたい場合
ところで、今回紹介したのは、テキスト音楽「サクラ」のRust実装版を使ったものでした。2000年前半に作成した、サクラv2は、音楽家の方の意見を聞いて意見を取り入れて作ったツールです。とてもマニアックな機能が満載です。
サクラv2は、Delphiで作っていたため、Rustで作り直そうと一念発起して作ったのが、sakuramml-rustなんですが、なかなか、v2の全ての機能を網羅するに至っていません。sakuramml-rustでは、v2の書きにくいとこを改善しつつ、高速なRustで作り直したため、良いところもあります。
とは言え、v2が良いという方は、v2版をインストールして使うこともできます。最近のDelphiは、Unicode対応した際、ずいぶん変わってしまいましたので、最新のDelphiではコンパイルできません。Delphi7を使うか、オープンソースのFree Pascalを使ってコンパイルできます。
バイナリが必要の場合は、以下より、Windows/macOS/Raspberry Piバージョンをダウンロードできます。
その他のMMLコンパイラも使えるよ
サクラ以外にも、いろいろなMMLコンパイラがあります。既にあまりメンテナンスされていないものもありますが、一応リストアップしておきます。
上記は、数分で調べただけなので、上記に列挙されていなくて、自分は、このコンパイラ使っているというのがあれば、ぜひご紹介ください!
まとめ
以上、CUIの音楽制作環境の構築方法について紹介しました。仕事の息抜きの音楽制作は、素晴らしい気分転換になりますよね。
とは言え、筆者がサクラを作ろうと思ったのは、自分だけの特別なオリジナル曲が作りたい!と思ったからでした。MMLであれば、スクリプトと組み合わせて作曲できるので、あまり世に出ていない、特別な音楽を作成できる可能性があります。
エンジニアだからこそ作れる音楽で、世間を席巻しましょう!
参考