世界を動かす技術を、日本語で。

オーディオ反応型LEDストリップは非常に難しい

概要

  • 2016年から開発された音楽連動LEDストリッププロジェクトの進化
  • ボリューム反応から周波数解析、メルスケール導入への試行錯誤
  • LEDストリップならではの「ピクセル貧困」問題と人間の知覚モデルの重要性
  • GitHubでの人気、コミュニティ参加、実際の活用事例
  • 技術的工夫と学び、今後への課題意識

音楽連動LEDストリップ開発の軌跡

  • 2016年 にLEDストリップを購入し、 リアルタイムで音楽に反応 するシステム開発を開始
  • 数週間で完成すると思いきや、 10年に及ぶ試行錯誤 の連続
  • GitHubで2.8kスター、Hackaday掲載、人気プロジェクト へ成長
  • ナイトクラブ設置、Amazon Alexa連携、初めての電子工作事例としても利用
  • 現在も 満足できず、改良を続行中

ボリューム反応からの出発

  • 初期は 非アドレッサブルLEDストリップ でRGB各色の明るさのみ制御
  • 音声信号の ボリューム測定→LED輝度制御 という単純なタイムドメイン処理
  • 各色に異なる時定数を設定し、 色変化を演出
  • 簡単に実装可能だが、 音楽の特徴が失われ単調で飽きやすい
  • アダプティブゲイン制御 導入で環境音量への対応を強化
  • 表現力の限界を感じ、 WS2812アドレッサブルLED へ移行

FFTによる周波数解析への挑戦

  • 短時間の音声をFFT変換 し、周波数ビンをLEDにマッピング
  • 144ピクセル=144周波数ビン でスペクトラム表示を試みるも、ほとんどのLEDが暗いまま
  • FFTの限界 (「ピクセル貧困」)に直面
    • 画面用ビジュアライザは大量のピクセルで冗長な情報も表示可能
    • LEDストリップは 限られたピクセル数に「意味のある特徴」だけを凝縮表示 する必要

ピクセル貧困と知覚モデルの重要性

  • LEDストリップは ピクセル数が少なく、1ピクセルの価値が高い
  • 人間が音楽をどう知覚するか を理解し、 知覚モデルの導入 が必須
  • スクリーンビジュアライザとの根本的な違い

メルスケールの発見と導入

  • 音声認識分野の論文から メルスケール に着目
  • 人間の 音高知覚は線形ではなく、メルスケールで均等
  • メルフィルタバンク を用いて、知覚的に重要な周波数帯をLEDへ割り当て
  • 全LEDが意味のある動きをするようになり、大きなブレイクスルー

滑らかさと視覚効果の追求

  • メルスケール導入後も フリッカー(ちらつき)問題 が残る
  • 指数平滑化 によるフレーム間の滑らかな変化
  • 畳み込み演算 による空間的なスムージング
    • 狭いカーネルで隣接ピクセルの最大化、広いカーネルでガウシアンブラー
  • LEDストリップは 1次元配列 のため、畳み込みが直感的に応用可能

入出力両面の知覚モデル

  • 音入力側:メルスケール で人間の聴覚知覚をモデル化
  • 出力側:ガンマ補正 で人間の視覚知覚に合わせた輝度調整
  • 色理論(RGB, HSV, LAB, sRGB, 補色) も考慮し、音楽的な色彩感を追求

代表的な3つのエフェクト

  • Spectrum :メルスケール周波数帯域をLEDに割り当てて表示
  • Scroll :中心から外側へエネルギー波が流れる視覚効果、周波数を色にマッピング
  • Energy :音エネルギーが増加するごとに中心から外側へパルス
  • 3つのエフェクトが 相互補完的に機能

リアルタイム処理と遅延のトレードオフ

  • 長い音声チャンク は高精度だが遅延増加、 短いチャンク は応答性高いがノイズ増加
  • ロールウィンドウ+オーバーラップ でバランスを最適化

システム構成と実装

  • Raspberry Pi :音声処理とLED制御をGPIOで実行
  • ESP8266 :PCで音声処理、マイクロコントローラへピクセルデータをリアルタイム送信
  • オープンソース でGitHub公開(github.com/scottlawsonbc/audio-reactive-led-strip)

実際の活用事例とコミュニティ

  • 初期バージョンは UBC工学物理クラブハウス へ設置、パーティーで活用
  • 紙製ディフューザー でLEDの眩しさを軽減
  • プロジェクト公開後、世界中で利用・改良
  • Joey Babcock 氏をはじめとするコミュニティの貢献
  • Hackaday、Redditで話題、 2,800以上のスター、640フォーク

LEDストリップビジュアライザ開発の学びと今後

  • 音楽知覚・視覚知覚のモデル化 が鍵
  • ピクセル数の制約下で「意味ある情報」の抽出・表現 の難しさ
  • コミュニティとの協働 によるプロジェクトの発展
  • さらなる エフェクト追加や改善 への意欲継続

Hackerたちの意見

20年以上前に、LM567(周波数検出IC)とLM3914(バーグラフドライバ)を使って、音楽用のシンプルなヒストグラムを作ったことがあるんだ。ちょっと手間がかかったし、今の人には精度が足りないかもしれないけど、そんなに難しくはなかったよ。調整は面倒だったけど、その頃は抵抗やコンデンサの値をいじるのにもっと気軽だったな。

それは「ナイーブFFT」ってやつだね。「オーディオ反応型LEDストリップを試みるほとんどの人は、ここら辺でナイーブFFTの方法に行き着く。画面上ではうまくいくけど、何百万ものピクセルがあって、詳細をたっぷり表示できるからね。でも、144個のLEDでは制限が厳しい。LEDストリップでは、ピクセルを「無駄に」する余裕なんてないし、表示する特徴はもっと知覚的に意味のあるものでなきゃいけない。」

メルスペクトルは音声認識パイプラインの最初の部分なんだけど…もっとMLの音声/音響認識パイプラインを含めた方がいい結果が出るかもね。例えば、パイプラインがドラムビートとピアノの音を分けて、視覚化で違う風に表示できるとか? 知覚再構成損失を最小化するように訓練されたオートエンコーダネットワークは、ボトルネックで最も「面白い」情報を持ってると思うから、その層をLEDストリップに使いたいな。

最近これをいじってたんだけど、問題はほとんどのAI分析技術、例えばステム分離みたいなのがリアルタイムで動くようには作られてないことだね。

この分野で自分のソリューションを作ったことがあるよ(https://thundergroove.com)。リアルタイムのビート検出ニューラルネットワークを使って、似たような周波数スペクトル分析を組み合わせて、エフェクトが使える信号のセットを提供してる。エフェクト自体は埋め込みJavaScriptで書かれていて、Photoshopのようにレイヤーを重ねることができる。ただ、現在はnanoleafとwledの器具を駆動することしかサポートしてないけど、wledは幅広い選択肢を提供してくれる。エフェクト言語は完全に公開されているから、リアルタイムオーディオ信号に対して自分のエフェクトを書くのも簡単だよ。ただし、オープンソースではないし、より良いオンボーディングやチュートリアルが必要だね。現在は完全に無料だけど、収益化するかどうかはまだ決めてない。もしするなら、DMXやMIDIサポートのためか、ポータブルハードウェアのエコシステムのためかも。

MSGEQ7を使って、まあまあなオーディオビジュアライザーを作ったよ。7つの音声周波数範囲ごとにカウントを分けるんだ—Arduinoが毎ループでポーリングする感じ。残念ながら、MSGEQ7はもう標準パーツじゃないみたいだね。(それに、7つの周波数が線形に分布してるわけじゃないみたいで、メルスケールに近いかも。)ArduinoでFFTライブラリを直接使おうとしたけど、うまくいかなかった。MSGEQ7チップはいい感じだよ。

MSGEQ14とかそれに相当するものを見たことある? そんなにシンプルに使えるチップで7を超えるのは面白そうだけど、見たことがないな。

スコットの作品はすごいよね。似たような基盤を持つ別のプロジェクトもあるよ: https://github.com/ledfx/ledfx

わお、これがリリースされた頃に私の初めてのハードウェアプロジェクトだった! みんなで共用スペースにLEDストリップをたくさんホチキスで止めて、木箱に通気口とケーブル用の穴を開けて、Piと電源のケースを作ったのを覚えてる。そして、完璧に動くようになった頃には、もう二度と見なかったんだよね。これが伝統ってやつだね。

それを聞いて嬉しい!時には旅が目的になることもあるし、電子機器に取り組むには素晴らしいプロジェクトだよね。

この書き方は好きだけど、タイトルが内容をあまり伝えてない気がする…私には制約の中での創造性についての話に思える。著者は、多くの人がそうであるように、ナイーブなアプローチや初歩的なアプローチが特定の制約の中では失敗することに気づいて、より複雑な方法が必要だと感じている。彼は、私もそう思うけど、知覚的でスペクトル的なものに関しては、生のデータよりも知覚的・スペクトル的な領域で作業する方が良いと見つけている。彼が触れないのは(次のブログ投稿かもしれないけど、わからない)、色の使用における制約についてなんだ。すべてが「レインボータウン」にあると言ってるけど、そこで問題が出てくる。個人的には、社交空間での発光する緑色のLEDライトは好きじゃない。見た目がひどくて、人をひどく見せると思う。個人的なことだけど、こういうシステムで実践するのは難しいんだ。スペクトルの不連続性が生じて、より洗練された色のシステムを使う必要が出てくるからね。私はこれらのシステムにおいて最大限の抑制を求めてるんだ。派手なトリックがあったら、すごく稀にしかやらない方がいいと思うし、代わりに持続的な挙動や確率的な挙動で、たくさんの余裕を持たせて、じっくり見てもらえるようにしたい。これらのアイデアを、ボルダーのフードホール/ナイトクラブでの恒久的なオーディオ反応型LEDインスタレーションに実践したよ: https://hardwork.party/rosetta-hall-2019/

うん、「悪魔的」って言うほどでもないかな。そんなに悪い問題じゃないよ。https://en.wikipedia.org/wiki/Wicked_problem ちょっと面白いけど、夏の暑い日には自然光を補うために緑のLEDライトが好きなんだ。LEDライトの熱を肌で感じるし、人間の目は緑の光に一番敏感だから、LEDストリップを(0,255,0)に設定すると一番快適に感じるよ。

Hacker Newsで議論の続きを見る