13
13

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

CUIで音楽製作環境の構築(2023年10月版)

Last updated at Posted at 2023-10-30

エンジニアの皆さんの中には、ターミナル上(CUI)で、音楽制作をしている方が相当数います。2020年に同じタイトルでQiita寄稿したのですが、2600以上の閲覧数がありました。(エンジニアの中の2600という数が妙にリアル)。その後、いろいろ調べたり、自分でSoundFontプレイヤーを組み込んだ、CUI版のテキスト音楽「サクラ」を開発したので、その紹介をしつつ、音楽環境をアップデートしてみましょう。

CUI音楽家に超オススメのピコサクラ(CUI版)

そもそも、本記事を書こうと思ったのは、CUIで演奏できる自作のSoundFontプレイヤー+MMLコンパイラを作ったからです!CUIなので画面が味気ないのは仕方ないとしても、以下のように「picosakura」コマンドに音楽データのMMLファイルを与えるだけで、MMLファイルをコンパイルし、指定のSoundFontを使って音楽演奏をしてくれます。

スクリーンショット 2023-10-30 11.03.13.png

なお、コマンドラインではなく、ブラウザ上で試したいという方は、ピコサクラWeb版を試してみてください。ブラウザ上で、SoundFontを利用して演奏が可能です!

スクリーンショット 2023-10-30 10.55.46.png

音楽制作自体はターミナルで行いたいという方も、ブラウザ上で動くサクラのチュートリアルがあります。良かったら、以下のチュートリアルで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

簡単に演奏できるバッチを作成します。

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ならではの良さと言えます!

スクリーンショット 2023-10-30 11.40.06.png

ピコサクラ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.mmlhello.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であれば、スクリプトと組み合わせて作曲できるので、あまり世に出ていない、特別な音楽を作成できる可能性があります。

エンジニアだからこそ作れる音楽で、世間を席巻しましょう!

参考

13
13
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
13
13

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?