前回の記事ではPure Dataのインストールと設定を行いました。
今回はdoitnowlabsさんが作ったこちらのプロジェクトを拝借してラズパイ上で動かします。
作業は以下の通りになっています。
1.プロジェクトのダウンロード
2.スクリプトの書き換え
3.ラズパイ起動時にラズパイエフェクタが自動で実行されるよう設定する
プロジェクトのダウンロード
今回はプロジェクトをデスクトップ上に配置して作業を進めました。これに習ってcdコマンドでデスクトップに移動してください。
		
次に以下のコマンドを打ってプロジェクトのリポジトリをコピーします。
		
		
			
			
			
			
				
					
				|  | git clone https://github.com/doitnowlabs/rpieffectbox | 
				
			 
		 
※コマンドを打ってもgitなんてコマンド知らないよと返されたらsudo apt-get install gitでgitをインストールしてください。
スクリプトの書き換え
ダウンロードしたディレクトリに移動。
cd rpieffectbox
まずははPureDataパッチのserver.pdに記載されているパスを変更します。
		
を打つとPure Dataが立ち上がるのでパスが記載されているオブジェクトをクリックし
/home/ben/Desktop/rpieffectbox
を
/home/pi/Desktop/rpieffectbox
に書き換えてください。
今度はmain.pyスクリプトをテキストエディタで開き、パスの部分を修正します。
		
13行目の
name_file = open ("/ben/Desktop/rpieffectbox/names.txt")
を
name_file = open ("/home/pi/Desktop/rpieffectbox/names.txt")
に修正。同様に16行目を
function_file = open ("/ben/Desktop/rpieffectbox/functions.txt")
から
function_file = open ("/home/pi/Desktop/rpieffectbox/functions.txt")
へ書き換えます。
35行目の
subprocess.call("pd -nogui server.pd &", shell=True)
を絶対パスに。
subprocess.call("pd -nogui /home/pi/Desktop/rpieffectbox/server.pd &", shell=True)
パスの修正が終わったら37行目のwhile True:の直前に以下の二行を追加しておいてください。
sleep(1)
os.system("echo '0 "+ str(preset) +";' | pdsend 5000 localhost")
スクリプトをそのまま実行するとDSPの起動が上手くいかず、ボタン操作でパッチの切り替えを行わないとDSPをオンにできないという現象がありましたので上記のコードを追加しました。
書き換えたらCtrl + X を押した後にY、Enterを押し、上書き保存してファイルを閉じます。
パーツの接続
次にRaspberry Piと各パーツを接続します。
今回使用したパーツは以下のとおりです。
- ブレッドボード
- ジャンパワイヤ(オス-オス)
- ジャンパワイヤ(オス-メス)
- 抵抗(10kΩ)
- タクトスイッチ(3つ)
- ADコンバータ MCP3008
- 小型ボリューム 10kΩ(4個)
- 小型ボリューム用ツマミ(4個)
- リード線
- 熱収縮チューブ
- はんだごてセット
必要なものを購入し接続します。小型ボリューム(可変抵抗)はリード線をはんだ付けしないと使えないので注意です。はんだ付けの方法は過去記事を参考にしてください。
配線はプロジェクトフォルダ中にある配線図Rpieffectbox.pngを参考にしました。いまいち読み方がわからなかったので一部自分がやりやすいように手を加えています。
実際の写真。ごちゃごちゃ

図示したもの。スッキリ。

上の図に従って配線を進めてください。
図ではツールの都合上幅の広いブレッドボードを用いていますが、実際に配線する際にはパーツ同士の間隔を詰めれば小さなブレッドボードでも配線可能です。
スクリプトの動作確認
最後にちょちょいとRaspberry Piの設定の変更をしてスクリプトを動かします。
まずはSPIを使用できるようにします。
GUI上で Menu > Preferences > Raspberry Pi Configuration を開く。
Interfaceタブに切り替え SPI の Enabled のラジオボタンを選択してOKをクリック。
次に以下のコマンドを打ってディスプレイ表示に使用するコンソールのパーミッションを変更します。
※今回はディスプレイは使用していないのですが、パーミッションの変更を行わないとスクリプトがエラーを吐くためこの工程が必要となります。
		
		
			
			
			
			
				
					
				|  | sudo chmod 777 /dev/ttyAMA0 | 
				
			 
		 
これで準備が整いました。スクリプトを実行してみましょう。
		
問題なく動作していればギターやマイクから入力した音がスピーカーに出力されるはずです。
ラズパイ起動時にエフェクタを自動実行
LinuxベースのOSでは起動時に指定したスクリプトを自動実行する仕組みがあります。
これを使ってラズパイの電源を入れたらmain.pyを起動させ、マウス、キーボード、ディスプレイ無しでもエフェクターとして機能するよう手を加えていきます。
以下コマンドで設定ファイルを開き、
		
		
			
			
			
			
				
					
				|  | sudo nano /home/pi/.profile | 
				
			 
		 
末尾に以下の行を追加。
python /home/pi/Desktop/rpieffectbox/main.py &
これで端末起動時にmain.pyが実行されます。
ちなみに最後の&はバックグラウンドで実行させるためのオプションらしいです。
使い方
左のボタン:ひとつ前のエフェクトに切り替える
真ん中のボタン:パラメータ入力 これを押すことでつまみによるパラメータ調整が可能になる。
右のボタン:ひとつ次のエフェクトに切り替える
四つのつまみ:ひねるとエフェクトのパラメータが変化する。どのつまみが何のパラメータに対応するかはエフェクトによって異なるため、プロジェクト内のfunctions.txtを参考にしてください。
エフェクトの種類
今回利用させていただいたプロジェクトには15種類のエフェクトが用意されています(クリーンを含めると16種)。
エフェクト名および各パラメータとつまみの対応はプロジェクト内のテキストファイルに書かれていますが、いちいち参照するのも面倒だと思うのでここに記載します。
| 番号 | エフェクト名 | パラメータ | 
| 1 | Clean | Non Editable | 
| 2 | Chorus | Fdbk,Depth,Speed | 
| 3 | Warble Chorus | Fdbk,Depth,Speed | 
| 4 | Tremolo | Spd,Shape,Depth | 
| 5 | Vibrato | Depth,Speed | 
| 6 | Wah | MaxF,MinF,Speed | 
| 7 | Ring Modulator | Pitch | 
| 8 | Low Fuzz Wah | MaxF,MinF,Speed | 
| 9 | Med Fuzz Wah | MaxF,MinF,Speed | 
| 10 | Hi Fuzz Wah | MaxF,MinF,Speed | 
| 11 | Ring Mod Fuzz | Pitch,Boost | 
| 12 | Fuzz | Boost,Tone | 
| 13 | Subtractive OD | Gain,Tone | 
| 14 | Tube Screamer | Gain | 
| 15 | Digital Delay | DlyTime, Repeats | 
| 16 | Tape Echo | DlyTime, Repeats | 
 
おわりに
これにてラズパイエフェクタの制作方法の紹介はおしまいです。
用意されているエフェクトは15種類ですが、パッチを用意すれば好きなだけ自分好みのエフェクトを拡張できちゃうのがこのエフェクターの魅力ですね。
パッチを探すor作る熱意がある人はマルチエフェクターなんて買わずともこれ一台であらゆるエフェクトをかけれられちゃう。超コスパいい!
ただ、市販のエフェクターを使ったことすらないズブの素人なので音質とか機能性とかはちゃんと評価できてません。ごめんね。
信頼性についてはあまり期待しないほうがいいです。はんだ付けが甘いとパーツが外れますし、スクリプトがフリーズすることもまぁまぁありました。無論ライブには使えません。
とはいえお遊びの範囲内でならとても楽しいおもちゃになりますので是非作ってみてはいかがでしょうか。