Edited at

Raspberry Piでアコギエフェクターを作ってみた

More than 1 year has passed since last update.

Raspberry Pi(B+)でアコギ用のエフェクターを作ってみました。

いずれ、SileShareできちんとスライドを作ります。とりあえず、メモ書きですみませんが…

機能としては下記の機能を備えています。


目的

もともと、デジタルエフェクターには興味はありました。「Raspberry Pi」で作ることにした経緯は以下の通りです。


  • Linuxが載っているボードで電子工作の実績が多いことである

  • エフェクトコントロールは物理的ノブでは無く、スマホ等の操作にしたかった

    (自分のエフェクターの使い方は、家で細かく音を作り外では絶対に触らない。
    物理ノブがあると、移動時にノブが回ってしまい、いちいちセッティングし直すのもいやだった)

  • 持ち歩くことを考え、消費電力の観点からPi2,Pi3ではなくB+を選択

    メモリ使用量を見てA+の選択も視野に入れる予定

  • Raspberry Pi Zeroがリソース的や取り回ししやすさから一番であるが、入手面を考えて今回は対象から外した


ソフトウェア構成

この投稿か別投稿で図示はするつもりですが、とりあえず箇条書きで。


  • ディストリビューション

    Raspberian(JESSIE)を使用。NOOBSではなくdebootstrapでイメージを作成

    参考:Raspbianをdebootstrapから作る

  • カーネル

    kernekl 4.4.28(PREEMPT_RTパッチは未使用。CONFIG_PREEMPT_VOLUNTARYでconfig作成)

  • サウンドサーバ

    JACK Audio Connection Kit

    ALSAドライバ使用

  • エフェクトプラグイン

    LV2インターフェースでC++で作成

  • OSCプロトコル制御、LV2プラグイン管理、Jackクライアント機能はC++で作成

  • Jack、プロトコル制御、プラグインは"-march=armv6 -mfloat-abi=hard -mfpu=vfp"オプションでコンパイル

PureDataでの事例はありましたが、


  • GUIレスで設定を含めて実現した

  • PureDataでOSCプロトコルでエフェクトコントロールができるか疑問だった

要は、新しくPureDataを覚えたくなかったため、全てC++で作成しました。


性能


  • JackはFrame/Period=256,Periods/Buffer=3,リアルタイムモードで実行

  • レイテンシーは5ms位で演奏での遅延は感じられない

  • 使用メモリは160~180MB位でA+でも行けそうな感じ

  • CPU利用率は70%弱。98KHzにはしたかったが、難しそう。もう一つくらいエフェクトは乗せられるか?


これから着手する機能


  • 電源断耐性向上

    /var以下をOverlayFSに持っていく予定

  • WIFI

    手持ちのWIFIトングルが標準でドライバがないため、標準でドライバがあるWIFIトングル入手中

  • 設定バックアップ

    バックアップが必要なファイルはbootパーティション(FAT)へ。ファイルコピーでバックアップできるようにする。

  • ハウジング

  • 使用方法を含めたドキュメンt(これが一番苦手…)