【Gemini】ローカル音源を波形で見たい!「Adobe Stock風」に閲覧するアプリを1時間で作った話
映像制作をしていると、BGMやSE(効果音)の選定で無限に時間が溶けていく。
Webのアセットサイト(Adobe Stockとか)は波形が見えてて最高に使いやすいのに、ローカルに落とした瞬間、FinderやExplorerでスペースキーを連打する苦行が始まる。。。
「ローカルでも、あの波形UIでサクサク探したい」
探しても丁度いいのがなかったので、Geminiとペアプロして自作した。
結論から言うと、ベースは5分、実用レベルへのブラッシュアップ含めても1時間で完成した。AI開発、恐るべし。
作ったもの:Local Audio Browser
- 指定フォルダ以下の音源を再帰的にリスト化
- Adobe Stock風の波形一覧表示
- 波形クリック&スクラブ再生
- Finderで表示ボタン
機能はこれだけ。だが、これが欲しかった。
開発ログ
1. 爆速のプロトタイプ(所要時間:5分)
要件をGeminiに投げる。
「ローカル音源を波形一覧表示して再生できるアプリ作って。UIはWebのアセットサイトでよくあるようなやつっぽく」
コードが吐き出される。コピペして実行。
動いた。すご!
ここまで5分。
ファイル検索、Librosaでの解析、GUI描画。これ全部自力で書いたら休日が終わるやつだが、カップ麺を作ってる間に終わってしまった。
2. 壁:読み込みが重い
プロトタイプは動いたが、ファイル数が多いとフリーズする。
音声解析の Librosa が高機能すぎて重いらしい。
- 対策: 標準ライブラリ
waveとのハイブリッド化。- WAVは爆速な標準ライブラリで読む。
- MP3などだけLibrosaに投げる。
- 描画用にデータをガッツリ間引く。
これで数百ファイルのフォルダでもサクサクになった。
3. 進化:神機能「スクラブ再生」
クリック再生だけだと、「曲のサビだけ聴きたい」みたいな時に不便。
「波形の上をマウスでなぞったら、そこを再生するようにしたい」と追加オーダー。
PyQtの mouseMoveEvent をフックして、座標から再生位置を即シークする処理が追加された。
これが入った瞬間、「ただの再生機」から「実用的な選定ツール」に化けた。
4. 配布用にダイエット
自分用に作ったが、便利なので配布することに。
PyInstaller でビルドしたら300MBを超えた。犯人はPyQt6が抱え込んだWebブラウザ機能。
不要なモジュールを exclude してダイエットさせ、最終的に50MB程度に着地。
まとめ
「欲しいツールがないなら作る」が、AIのおかげで「ランチタイムに作る」くらいの感覚になってきている。
ロジックの実装はAIに任せて、人間は「どんな体験(UI/UX)にしたいか」に集中できるのが最高に楽しい。
今後公開予定・・・
ソースコードとアプリは公開しているので、同じ悩みを持つ動画編集者やDTMerの方は使ってみてください。
GitHub:
https://github.com/dekapoppo/audio_browser(準備中)BOOTH:
WaveListPlayer ダウンロードページ(準備中)