AudioLens を作る:音声プレビューとスペクトログラム解析のための VS Code 拡張機能
raw PCM を含む複数の音声形式に対応
最近、VS Code の中で音声を読み込み、再生し、解析できる拡張機能を Vibe した。名前は AudioLens。
いくつかの音声アルゴリズム系のグループで共有してみたところ、反応はなかなか良かった。
きっかけ ¶
音声アルゴリズムのエンジニアは、普段おもに 2 つの作業画面を行き来している。
- コードエディタ: たとえば VS Code
- 音声解析ソフト: たとえば Audition や Audacity
そこで困ることはシンプルだ。
- コードを書くときは主にエディタで作業するが、音声を解析するときには別のソフトに切り替える必要がある。
- もしコードがリモートサーバー上で動いているなら、さらに面倒になる。音声をいったんダウンロードしてから聴かなければならないことが多い。
既存の解決策はないのか。実はある。VS Code Marketplace には audio-preview という拡張機能があり、ダウンロード数は 200K ほどある。私自身も何年も使っていた。
ただ、UI は粗く、機能は少なく、Bug も多い。最後の更新は 2024 年で、作者ももう保守していないように見える。
そこで、腹を立てた勢いで、自分で 1 つ Vibe することにした。ついでに Codex の能力も試せるし。
AudioLens の機能紹介 ¶
私は自分でも音声アルゴリズムの仕事をしているので、欲しい機能はかなりはっきりしていた。この拡張機能には、自分が必要だと思う機能をだいたい入れている。
- マルチチャンネル音声の再生: マルチチャンネル音声の読み込み、選択範囲再生、ソロ再生、指定チャンネルのミュートなど
- 複数の表示モード: 波形、スペクトログラム、そして両方のズームとパン
- 音声解析: 範囲を選択すると、RMS dB や周波数解析などの結果がすぐに表示される
- 複数形式のサポート:
wav、mp3、flac、ogg、opus、m4a、aacなどの一般的な音声形式に対応 - RAW サポート: PCM / RAW の生データに対応し、チャンネル数やサンプルレートなどの PCM 設定を記憶できるため、同種の音声を開きやすい
- スペクトログラム設定: FFT サイズ、窓関数、ゼロパディング倍率、周波数スケール、配色などを調整可能
- Remote SSH サポート: リモートマシン上の音声をローカルにダウンロードせず、そのまま開いて解析できる
- 多言語対応: 現在 17 言語に対応
宣伝文句はこのくらいにしておく。興味があれば GitHub で機能デモを見ることもできるし、VS Code Marketplace から直接インストールして試すこともできる。
Vibe Coding の過程 ¶
Vibe Coding の過程は、基本的には自分の要求を Codex に出し続けることだった。
大きな方針として、要求は 2 つあった。
- コード全体はシンプルでクリーン、かつモジュール化された状態を保ち、過度に抽象化しないこと
- FFT やスペクトログラム計算のような重いコア関数は、速度を確保するために Rust で実装すること
それ以外の作業は、ほとんど機能と細部の磨き込みだった。
- Codex がビルドしたオフライン VSIX をインストールしてテストする
- UI をどう変えるか、機能をどう変えるかを Codex に伝える
この 2 つを繰り返す。
その間、周囲の人たちからもかなり多くの要望を集めた。
全体としては断続的な作業だったが、実際に Codex に働いてもらった時間は、おそらく 1 日くらいだったと思う。
正直なところ、アーキテクト兼プロダクトマネージャーになり、Codex という頼れる助手を持つ感覚はかなり気持ちよかった。
後書き ¶
私はずっと、Vibe Coding の時代には人間の Taste がとても重要になると思っている。今回この拡張機能を作って、その考えはさらに強くなった。
なぜなら、大規模言語モデル(LLM)はとても強力だが、審美眼があるとは言いにくいからだ。
要求を速く、うまく実現することはできる。しかし、具体的にどんな画面なら良いのか、このボタンはどこに置くべきか、パネルの幅はどれくらいがよいのか、UI をどう設計すべきか、UX が自然かどうか。こうした問題については、実のところほとんど感知できていない(世界モデルがない)。
しかし、作ったものは結局、人間が使うものだ。
だから Taste は、人類にとって一時的な堀になるのかもしれない。