Raspberry Pi ZeroでORCΛ環境の構築

ORCΛとは?

f:id:inajob:20190625172122p:plain
ORCAは前衛的なUIのライブプログラミング環境です。グリッド状のマップにアルファベットを並べてプログラムを記述します。主に音楽制作やVJなどで利用することを想定しているようで、OSCやMidiUDPを受信できるプログラムに対してメッセージを送ることができます。

ORCAでは一般的なプログラム言語と違い、処理が上から下へ進むのではなく、「Bang」と呼ばれるタイミング指示の信号により処理が進みます。

「Bang」を発生させるオペレータは複数用意することができるので、自然と並列処理を記述することになります。

 

プログラムは1文字単位のアルファベットで構成されているため、一見しても何かの暗号のようにしか見えません。(近いものとして、Roguelike RPGやBrainf*ckのような難解言語が挙げられます。)

ORCΛをRaspberry Pi Zeroで動かしたい!

ORCAは手軽なライブコーディング環境であるため、さっと持ち歩くことができると、思いついたときに作曲することができるのでは?と考えました。

そこで手元にあるRaspberry Pi ZeroでORCAを動かす方法を模索してみました。 

ORCΛのC言語版「Orca-c」

本家ORCAは「electron」を使って作られており、そこそこのマシンスペックを要求します。はじめはこれをそのままRaspberry Pi Zeroで動かそうとしていたのですが、そもそもelectronがARMのv6に対応しておらず、ビルドすることができませんでした。(またおそらくビルドできたとしても現実的な速度で動かすのは難しそうでした。)

 

そこでORCAの説明をもう一度読み返すと同一作者のC言語版のORCAであるOrca-cがあることに気づきました。

github.com

Orca-cはUIにelectronではなくncursesを利用しておりCUIのコンソールで動作するもので、説明書にもRaspberryでの実行方法が書かれているため、今回の用途にはぴったりだと感じました。

Orca-cのインストール

公式サイトに書いてある通りですが、、

sudo apt-get install git libncurses5-dev libncursesw5-dev libportmidi-dev
git clone https://github.com/hundredrabbits/Orca-c.git
cd Orca-c
./tool --portmidi build release orca             # Build

でビルドし、バイナリが生成されます

音源をどうするか?

ORCAは単なるシーケンサなので、音を鳴らすためには別のソフトウェアが必要です。

最も手軽に試せそうなのはORCA公式の音源であるPilot(https://github.com/hundredrabbits/pilot)ですが、これもORCA同様electronにより作られています(おそらくWebAudioを使っている)。そのためRaspberry Pi Zeroで動かすには厳しそうだと感じました。

 

Orcaが連携できるのはOSC,UDPMidiの3種類です。

Raspberry Pi Zeroでも利用できそうなものは、、と考えると以下の2つのソフトウェアが候補にあがりました。

 

一つ目は「Sonic Pi」です。 こちらもライブプログラミング環境で、ORCAとはライバルの位置づけですが、OSCを受信できるため、ORCAでシーケンスを作りSonic Piで鳴らすという使い方ができるようです。Sonic PiはRaspbianにも同梱されており、Raspberry Piでも動作しそうです。しかし、手元の環境では、どうもOpenGLのライブラリ周りのトラブルでうまく動かないため、別の選択肢を探しました。(しかしおそらくSonic Piも使えると思います。)

次に考えたのが「Timidity」です。これはソフトウェアMidi音源です。以前Raspberry Piで動作させたことがあったので、これを試してみることにしました。

Timidityのインストールと起動

sudo apt-get install timidity timidity-daemon freepats fluid-soundfont-gm fluid-soundfont-gs

でTimidityがインストールでき、デーモンが起動します。

ただ、手元の環境だとなぜかデーモンが起動に失敗していたので、普通にコマンドラインで起動するようにしました。

timidity -iA # これを実行して端末を放置する

 

 

Raspberry Pi Zeroにオーディオ端子をつける

Raspberry Pi ZeroはほかのRaspberry Pi 2や3とは違いオーディオ端子がありません。HDMI接続でスピーカ付きのディスプレイを使っている場合などは、それでも良いのでしょうが、今回はSPI接続のディプレイを利用しているため、それも使えません。

 

しかし、Raspberry Piの設定を変更することで、GPIOにオーディオ信号を流すことができます。

今回は液晶もGPIOで制御していたのですが、うまい具合に液晶の制御には使わないGPIOが開いていたのでそこをオーディオ信号を流すことにしました。

 

以下を/boot/config.txtに追記してリブートすることでGPIO18とGPIO13にオーディオ信号を流すことができました。(HDMI接続の場合はさらにraspi-configでオーディオ出力の設定が必要だと思います)

dtoverlay=pwm-2chan,pin=18,func=2,pin2=13,func2=4 

とりあえずジャンパケーブルを使って、雑にGPIO13とGNDを引き出して、イヤホンジャックにつなげました。本当はアンプとか通すべきなんでしょうが、まぁ音が鳴ったのでこれで良しとします。

f:id:inajob:20190625172251p:plain

構成図

今回の構成を図にするとこんな感じです。

f:id:inajob:20190625171604p:plain

f:id:inajob:20190625172645p:plain

TimitidyとORCAの連携

ORCA-cはMIDIの連携を前提に作られているようで、非常に簡単に連携することができました。

./build/release/orca --portmidi-list-devices     # Select Midi Device

 

を実行するとMIDIバイスの一覧が出てくるので、そこからTimidityのポートの番号を確認します。

その後、下記のように番号を指定するとORCAが起動します。(この場合は2)

./build/release/orca --portmidi-output-device 2  # Start

ORCAからMIDI信号を送る

ORCAの操作は初見では全く分からず苦労しました。

とりあえず、BANGを一定間隔で発生させ、それに合わせてMIDIのNoteを送信するとても簡単なプログラムを作って、動作を確認しました。

f:id:inajob:20190625183227p:plain

このプログラムの意味はこんな感じ。

f:id:inajob:20190625184301p:plain

デモ

演奏の様子です。といってもまだ全然わかっていないので乱数で曲のようなものを鳴らしているだけですが、、

 

まとめ

とりあえずRaspberry Pi ZeroにOrca-cをインストールしてTimidityを通して音を鳴らすことができました。

音色を切り替えたりパーカッションのようなものを鳴らす方法は実はまだよくわかっておらず、またOrca-cと本系ORCAの違いなどもあるようなので、まだまだ道のりは長そうです。

しかしRaspberry Pi ZeroでORCAを動かしてみて、なんともいえない「しっくりくる」感を感じました。ORCAのインターフェースは解像度が低くてもかなりの情報量を詰め込めるようになっていますし、フルキーボードが必要な操作体系は、スマートフォンでは再現できません。さらにORCAの独特の画面のかっこよさはRaspberry Piのような電子工作ガジェットとぴったりの相性です。

 

皆さんもRaspberry PiORCAを使ってポータブル作曲環境を作ってみませんか?

 

使ったもの一覧