サブタイトルはNorns(Sheld) / Fates / Orac / Sidekick / NuiLiteあたりの違いや関連性を探る です。(長い。。
独自のオーディオプラットフォーム(puredataをベース)をrpi3B+とBusterLiteで作るのがこの記事のメインになっています。(実は、raspberry pi 2 Bで同じような物は作ってはいます。が再度新しいバージョンで、次いでにエコシステムに乗っかりたい)、デジタルのモジュラーシンセ的に。
書けば、いろいろ思惑はありますが、まずは
ハードウェアのざっくりした違い
Norns (Sheld)
-ハードウェア : Raspberry Piコンビューターボード
-OS : Raspbian Buster Lite
-オーディオコーデック : CS4270
-OLED : NHD-2.7-12864WDW3
-ボタン : 3
-エンコーダー : 3
Fates
-ハードウェア : Raspberry Pi 3B+, 4
-OS : Raspbian Buster Lite
-オーディオコーデック : WM8731
-OLED : NHD-2.7-12864WDW3
-ボタン : 3
-エンコーダー : 4
実はraspberry piを仕様したハードウェアは、これら以外にもたくさんあります。
pisound
terminal_tedium
Nebulae (Q-bit)
Organelle (Critter & Guitari)
ただ!これらに気安く触れると大きく横道にそれる感じがしたのと、norns/Fatesを理解するとこれらを理解するのも簡単(なはず)
ふれる必要があるときにまた触れます。
ソフトウェアのこと
Nornsは、基本は、supercollider とLua
Fatesは、Nornsと上記ハードウェアの違いがあるが同等のことができる
Oracは、Puredataをベースにしたモジュラーシンセ
SidekickはOracとNornsのアプリケーションをスイッチするためのユーティリティー
NuiLiteはPuredata+Fatesの構成で、ボタンやロータリエンコーダ+OLEDを使用するためのPdオブジェクト群(Fates以外もできる?)
ここをみるとbuster liteにPuredataをインストールしているのが参考になる stretchのbackportsを参照している
#add stretch-backport source echo 'deb http://httpredir.debian.org/debian stretch-backports main contrib non-free' | sudo tee -a /etc/apt/sources.list.d/debian-backports.list
sudo apt-get -t stretch-backports install -y puredata
stretchだったら、マニュアルでpuredataをインストールするようだ。え、じゃあ、buster liteにはデフォでpdが入っているのか?(FatesのOSイメージはbuster liteなので)
調べてみる
https://news.mynavi.jp/techplus/article/20190222-775519/
で最近インストールしたパッケージは以下で、pdは最近インストールしてない模様。
$ grep "install" /var/log/apt/history.log Commandline: apt install -y orac mec sidekick Commandline: apt-get install realvnc-vnc-server jwm Commandline: apt-get install tightvncserver
じゃあ、インストールされているパッケージ全部みせだ!
$ apt list --installed puredata-core/rpi,now 0.50.2-3 armhf [installed,automatic] puredata-dev/rpi,now 0.50.2-3 all [installed,automatic] puredata-doc/rpi,now 0.50.2-3 all [installed,automatic] puredata-extra/rpi,now 0.50.2-3 armhf [installed,automatic] puredata-gui-l10n/rpi,now 0.50.2-3 all [installed,automatic] puredata-gui/rpi,now 0.50.2-3 all [installed,automatic] puredata-utils/rpi,now 0.50.2-3 armhf [installed,automatic] puredata/rpi,now 0.50.2-3 all [installed,automatic]
入っている~
Oracを入れたから入ったのかと思っていた次第です。。。(一応buster liteのイメージをsdに書いて確認してみよう)
buster liteにはデフォルトでは入っていなそう。じゃあ、Fatesのデフォルトイメージに入っている?
入っていない。。
つmりOracを入れるとPdも入るのね。
一応busterのbackportsにはあった
https://packages.debian.org/search?suite=buster-backports§ion=all&arch=any&searchon=names&keywords=puredata
あと、NuiLiteにあるNuiPdがPuredataのオブジェクトで、ボタンやエンコーダ、OLEDの処理をしている
つまりPuredata上のNuiPdは、ボタン/エンコーダ/OLEDのデバイスドライバーとアクセスしている
それぞれのデバイスドライバーはすでに入っているのか?など疑問はいっぱいだが、とりあえず進めたくなったので、raspberry piのデフォのOSイメージのbuster liteから色々構築していく(きゅうだな
buster liteをインストールしてもろもろ設定する
標準のbuster liteのイメージをSDカードにFlashしてからスタートです。
最初は
#sudo raspi-config
でwifiを繋いでおく
sshで簡単にログインできるように
#sudo raspi-config Network
Hostnameを変更しておく。
#ssh pi@hostname.local
で入れる
sshでアクセルするにはboot領域(/boot)にssh (空のファイル)を作る必要があるので、
sdカードをmacに接続して、 以下を実行
#cd /Volume/boot #touch ssh
rasberry pi側にSDカードを入れて起動、起動して、sshでログインしたら、以下を行う
# sudo apt update -y # sudo apt-get dist-upgrade -y # sudo apt-get install puredata
puredata(ver0.49)インストールできちゃった。ただDesktop GUIがないので、エラーになる(liteだからね)
とりあえず遠隔pcから画面共有でアクセスしたいので、tightvncserverをインストールする
# sudo apt-get install tightvncserver
次にjwmをインストールする
# sudo apt-get install jwm
軽量なDesktop GUIでこれをtightvncserverの後に入れないとだめ。後再起動も必要 あと日本語だと文字化けするので、デフォルトのままが良さそう
pd-extendedのインストールをトライしたが、ダメ
wifi接続は/bootにとりあえず追加する(macでもできる) /boot/wpa_supplicant.confを新規で作って以下を追加する
country=JP update_config=1 ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev network={ #scan_ssid=1 #For Stealth ssid="Name of your router" psk="Your key" key_mgmt=WPA-PSK priority=1 }
再起動するとwifiに繋がるが、wpa_supplicantが/etc/wpa_supplicant/wpa_supplicant.confに移動している(最終的には以下のように追加)
オーディオコーデックを有効にして、オーディオ入出力を実装する(puredata上)
ちなみにここが勉強になるhttps://qiita.com/air-gh/items/8cc51564313f7badc0be
デバイスツリーとデバイスドライバーの種類はここ参考になる。 https://qiita.com/cello_piano_violin/items/90e417123e7e026b190e
/boot/config.txtに以下を追加とコメントアウト
#dtparam=audio=on (コメントアウトしてオンボードのオーディオをオフに) dtoverlay=rpi-proto
amixerの設定を変更して保存
#amixer controls amixer cset numid=1 123 #Master Playback Volume #amixer cset numid=3 29 #Capture Volume #amixer cset numid=4 on #Line Capture Switch #amixer cset numid=7 0 #Sidetone Playback Volume #amixer cset numid=13 on #Output Mixer HiFi #sudo alsactl store
途中からwindowsでやりだしたので、ターミナルの文字が汚い泣
puredataで音がなった。音声入力もできた。
ttymidiとmidi-uart0を使用してレガシーハードウェア(DIN 5pin) midi out/inを実装する
基本はここのとおりhttps://gist.github.com/CarloCattano/8c01a6dea6ecbb459acd0b6bcd752ea6
基本的には同じですが、ttymidiのインストールで以下を忘れないようにする
$ sudo apt-get install libasound2-dev
以下のWarningがでたけど無視
gcc src/ttymidi.c -o ttymidi -lasound -lpthread src/ttymidi.c:477:1: warning: return type defaults to ‘int’ [-Wimplicit-int] main(int argc, char** argv)
以下を実行して接続する (out inの順番でないとエラーになるので注意)
#aconnect ttymidi:0 "Pure Data:0" #aconnect "Pure Data:1" ttymidi:1
midi outの波形のみ確認(画面右側のピンクで、ピンはGPIO14(UART_TXD0)
そういえば、pdの設定をここで保存しておこう。
<Pure Dataの設定>
$ nano .pdsettings
WM8731は48KHzで動くので、rate : 48000
midiindev1 とmidioutdev1をそれぞれ1にしました。
後々blocksizeも小さくできる範囲で小さくするかも。(とりあえずこれで様子見)
まずは、以上。 サウンドを入力/出力がWM8731でできること、レガシー5pinのMIDI IN/OUTを実装
この記事はここまで。
次回は、
-OLED周り https://github.com/okyeron/norns-linux-bits
-SPIでつながるICを拡張する方法 wiringPi ? それともデバイスドライバ?
-pd のvinylcontrol~ オブジェクト
あたりで行きたいと思います。 どこかでつまずきそうな予感。。でも頑張ります!