▍AI Dev Lab
SoundLoom

音のお絵かきを作る:実WAVから絵を測り直す設計

音のお絵かきの開発記録。描画を正弦波のPCMとWAVへ変換し、保存音声の周波数をGoertzel法で測って比較する仕組みを解説。音量・測定窓・量子化の限界と、編集・離脱時の古い結果を抑止する検証を整理します。

·decision改善·stage公開中

#音のお絵かきを作る:実WAVから絵を測り直す設計

SoundLoomは、線を描いて音を作り、その実音から周波数の絵を測って見比べるツールです。入力と出力を横に並べ、暗緑の音響パネル、麦色の周波数インク、朱の丸印、明朝の大きな見出しで、実験ノートのような画面にしました。

直接描画する音の創作には、Draw.AudioやPhosphorなどの既存例があります。無料・描画・保存だけを独自性とは呼びません。今回は日本語の小さな実験体験として、描く、聴く、保存する、その保存音声を測り直す、という往復を一続きにしています。競合の説明は確認しましたが、操作や音質を比較評価したわけではありません。

#1マスを時間と周波数にする

絵は48列×24行。列は左から右へ時間、行は下から上へ160〜2000Hzを80Hz間隔で表します。長さは3秒か6秒、筆の濃さは4段階です。ドレミに合わせた音階ではなく、24種類の正弦波を重ねる音の実験です。

各マスの濃さを振幅にして、該当する列の音声へ正弦波を足します。列の最初と最後は振幅を滑らかに0へ近づけ、急な切替えを抑えます。複数の行を描くと、その高さの音が同じ時間に重なります。1本の斜線は滑らかな周波数変化ではなく、固定24音の段階的な変化です。

#再生音量と保存音量を分ける

合成音は全体のピークを70%にそろえます。全セルを塗ってもサンプルが範囲外にならないことを検査し、空の絵は0のままにします。最大値に合わせるため、薄い絵だけを描いた場合も保存音が小さくなるとは限りません。

再生には初期8%・最大20%の別の音量を掛けます。これは保存WAVには掛けません。保存した音を別のプレーヤーで開くときにも音量を下げる必要があるため、画面とFAQでこの違いを説明します。音のピークや再生ゲインは、端末から出る音圧や安全な聴取を保証するものではありません。

WAVは24kHz・モノラル16bit PCM。ファイルのヘッダー、チャンネル数、サンプル数、先頭と末尾のフェードを検査し、実ブラウザ標準のデコーダーでも復号します。自分のエンコーダーとデコーダーだけが同じ間違いを共有する検査にしないためです。

#絵をコピーせず、WAVを測る

「測った絵」は入力マスの再表示ではありません。保存用WAVを作って復号し、列の中央80%のサンプルから、24種類の周波数の強さをGoertzel法で計算します。特定周波数の成分を求めるための再帰計算で、入力した描画データはこの測定へ渡しません。

固定周波数と測定窓は、両方の長さで整数個の周期を含むよう選んでいます。列の端のフェードを外して測ることで、見本の絵と音の関係を確かめやすくしています。これは任意の音声を扱う一般的なスペクトログラムではなく、この方式で作った音に合わせた測定です。

強度は音全体の最大値を1とする相対値で表示します。実測マス数は0.15を超えた数です。入力1152セルすべての相対強度と件数を検査し、独立した単音の相関計算とも照合します。16bitへの量子化や窓の選び方で小さな差は残るので、文字や写真を音へ完全保存できるとは説明しません。

#編集しても古い処理を混ぜない

音声の許可待ち、ファイルの読込み、PNG生成は遅れて終わることがあります。その間に絵を変えたりページを離れたりしたら、旧結果を再生・適用・保存しません。操作の世代とページの生存状態を照合してから結果を反映します。

ページ移動では音源を止め、AudioContextを閉じ、描画イベントや生成URLを片付けます。別のページから戻ったときに、同じ操作が二重に動いたり、過去の音が鳴ったりしないことも検査します。画面の非表示でも再生を止めます。

指で素早くなぞった線は、前回の位置から現在地まで補間します。取り消しはストローク単位で直近20操作だけ保持。編集用JSONは版・長さ・固定マス数・0〜4の整数・8KB上限を照合し、壊れたファイルで現在の絵を置き換えません。PNGは絵の保存用で、再編集にはJSONが必要です。

#実出力と限界を一緒に確かめる

単体検査は、両長さ・見本・無音・全面描画・不正WAV/JSON・独立単音相関を含みます。ブラウザ検査は実タップ/ドラッグ/キー、停止、WAV・PNG・JSONの実ファイル、測定数と描画数、失敗後の再試行、待機中の編集、ページ移動、スマホの表示を扱います。

24音の粗い格子、3秒・6秒の短い長さ、正弦波の組合せという範囲です。録音、写真取込、声の復元、AI作曲、楽器の再現はありません。聞こえ方の好み、利用者の興味、実機Safari、学習効果は、この機械的な検査からは結論できません。今後も絵と実音の対応を壊さず、使い道を育てていきます。

[ ./next_action ]

読んだら、 SoundLoom を実際に動かす。

この開発ログは SoundLoom をどう作ったかの記録です。 読み終わったらそのままサービス本体へ戻って、 実物で価値を確かめてください。

[ ./related_logs ]

関連する開発ログ

all logs →
ShadowTwin

立体パズルの別解を作る:同じ影と最少の積み木

ShadowTwinの開発記録。3方向の図から別々の最少配置を2つ探す仕組み、5問の独立全探索、スマホの横並び比較、保存・再編集と入力検査を解説します。実照明の計算や能力診断ではありません。

read log →
SlitCard

スリットアニメーションを作る:4コマの合成と透明原稿の設計

SlitCardの開発記録。4コマの帯を交互に合成し、すき間と黒帯で別のコマを見せる仕組みを解説。同縮尺の台紙・透明シートSVG、50mm確認線、手動プレビュー・初期非表示、再編集と実出力検査を整理します。

read log →
WindowLight

日当たりシミュレーションを作る:窓の光を床へ投影する幾何モデル

WindowLightの開発記録。太陽位置近似から窓の4隅を床へ投影し、凸多角形を部屋で切り取る設計を解説。国立天文台の16時刻との限定照合、大気差・低高度・実際の採光との違い、SVGと設定の再編集を整理します。

read log →
GridLights

電源構成の比較を作る:割合と実量を100個の電球で読み解く

電源構成比較GridLightsの開発記録。12か国の年次発電データを最大剰余法で100個の電球に変換し、割合とTWhを比較する設計を解説。欠損を0補完しない7分類、予想と実値、出典付きSVGと実データ検証を整理します。

read log →
MazeLoom

宝探し迷路を作る:寄り道まで含めた最短ルートの探索

宝探し迷路の開発記録。通路を木として生成し、現在地と3つの宝の取得状態を組み合わせて最短ルートを探す仕組みを解説。問題コードの版固定、画面と解答付きPDFの一致、手数と印刷の検証を整理します。

read log →
BoxNet

箱の型紙と折り図を同じ面から作る設計

小箱の型紙作成の開発記録。面・のりしろ・折り線を共有し、組立確認とA4実寸PDFを作る設計を解説。用紙外を縮小しない判定、校正線、紙厚を扱わない限界、出力検査を整理します。

read log →