Sonic Pi とそのコマンドラインインターフェース

Sonic Pi

RaspberryPi で音符を打ち込んでスピーカーで曲を鳴らすためのソフトウェア(ライブラリ・アプリケーション)を探していたのだが、実はデフォルトで Sonic Pi というとても便利なアプリケーションが入っていることを発見した(汗

 

対象年齢は🔟歳以上らしい。大変わかりやすい、そして詳しい日本語のヘルプ・チュートリアルがついている。それを見ながらすぐに音を鳴らすことができた。play :E4 といった感じで音階を指定し、sleep 1.25 なで音の長さを指定する。ひたすらこれを繰り返すだけで、曲を鳴らすことができた。(嬉

シンセサイザー機能があり、ピアノやドラムの音を出すことができる。

コマンドラインインターフェース

これだけで十分楽しいのだが、今回はC/C++のアプリケーションから Sonic Pi の機能を利用したい。で、ググったところいくつか使えそうなものを発見した。

python 版は Rust 版をポーティングしたものらしい。個人的には Rust 版で良いのだが、一般的(人に薦めるなら)python 版かな、と思ってまずは python 版をインストールして試した。

実際に試してわかったことだが、 python 版だと使いにくいことがわかった。

Sonic Pi は、入力したスクリプトコードをファイルに保存出来るのだが、python版だとそのファイルをそのままでは利用できない。

 

 スクリプト:play :E4

 python版ツール:play( E4 )

 

と、カッコの有無が違う。では、Rust 版だとどうかと試してみたら、そちらは Sonic Pi で作成したファイルをそのまま利用することができた(嬉

 

と、ここまできてちょっとした疑問がでてきた。そもそも Sonic Pi は Ruby で書かれている。Ruby 版のコマンドラインツールもあるのでは?

 

あった。(笑

GitHub - Widdershin/sonic-pi-cli: A simple command line interface for Sonic Pi, written in Ruby

これはまだ試せていないが、Sonic Pi との相性は一番良いはず。

構造体の配列

play と sleep で一音ずつ指定するやり方はコーディングの効率が悪い。音の構造体を作り、その配列として曲データを指定したい。きっとそういうやり方があるはず。

 

ぐぐったところ、配列を利用した方法は見つかった。音階の配列と音の長さの配列。だがこのやり方だと配列のインデックスがズレるとおかしなことが起こる。

http://www-b.uec.tmu.ac.jp/shakuhachi/SonicPi/SonicPi_memo.pdf

 

ruby に構造体があることは確認できた。これを使って Sonic Pi の曲データを作れないか、これからやってみる。