Rhythm Fourier Web 1.0.2

音の強弱の変化を、周波数解析して観察するブラウザーアプリです。

音声の瞬間振幅を取り出し、その時間変化をフーリエ解析します。ここでの周波数は振幅の変化の速さです。2 Hzは1秒間に2回、BPM相当では120になります。音の重なりや干渉による振幅変動も解析に含まれます。

使い始める

  1. ウェブサイトを開くと、サンプル rhythms2.wav を読み込んで解析します。
  2. 再生を押します。音は自動再生しません。
  3. グラフ上の選択欄で表示対象・現在位置/音声全体を切り替えます。
  4. 設定タブの値を変えたら、解析・条件を適用を押します。

自分の音源は「音声を開く」から選びます。範囲指定で指定区間を切り出し、その音声を再生・解析します。元ファイルは変更しません。切り出し後の時間軸は0秒から始まり、元音声上の開始・終了時刻は上部とプロジェクト・数値書き出しに記録されます。

表示対象

対象表示
音声波形と瞬間振幅青:モノラル音声、白:瞬間振幅、灰:負側の補助線。
瞬間振幅の全周波数現在位置はSTFT、音声全体は全区間のFFT。点線は適用済みテンポの四分音符相当(BPM÷60 Hz)。
固定周波数表示指定した周波数を正確に評価します。時間波形は白の瞬間振幅(左軸)に橙の係数(右軸)を重ねます。位相は現在位置で円形、音声全体で時間推移を表示します。
基本周波数の指定 - ハーモニクス表示テンポ・拍子・基準音符で定めた基本周波数の整数倍。次数ごとの周期を音符で表示します。

複素係数は絶対値、絶対値(位相色)、実部、虚部で表示できます。位相色は偏角0で赤、正方向に色相が回ります。位相表示では、その周波数の最大振幅の0.1%以下、または1×10−15以下の係数の位相を無効とし、折り返しをまたぐ線は接続しません。

1・2・4画面ごとの表示選択を、画面数を切り替えても記憶します。最初は単体のハーモニクス表示、他の配置は選択なしです。周波数単位、表示幅、上下限、対数軸、縦軸追従はグラフごとに設定できます。周波数の上下限はHzで入力し、BPM相当は60倍で表示します。時間軸上をクリックするとシークします。

基本周波数/ハーモニクス

BPMは四分音符基準です。基準が1小節の場合、拍子を p/q として周期 T=(p/q)×240/BPM 秒です。全音符の長さを1として基準音符が b なら T=b×240/BPM 秒、n次の周波数は n/T Hzです。解析周波数上限を超える次数は表示しません。

テンポは自動推定していません。 音符は周期の長さを示すラベルで、実際にその音符が演奏されたことを意味しません。音符にマウスを置くと周波数・周期を確認できます。

フーリエ設定

設定初期値・意味
平滑化 σ0秒。瞬間振幅にガウス平滑化を適用します。
平均振幅で正規化オフ。瞬間振幅の平均を1にします。
STFT窓長・時間刻み4秒・0.05秒。長い窓は近い周波数を見分けやすく、時間方向は平均化されます。刻みを長くすると計算量が減ります。
窓関数Hann。Gaussianも選択できます。
ゼロ埋め倍率1。2・4を選ぶと周波数の標本点を増やします。窓長を伸ばしたときの分解能改善とは別です。
解析周波数上限40 Hz。最大200 Hz。
音声全体の窓Hann。矩形も選択できます。
窓内平均の除去・DC除去ともにオン。

基本周波数の初期値はBPM 110、4/4、1小節、上限32次。固定周波数の初期値は110 BPM相当です。サンプルを読み込んだときだけ、rhythms2は110、stoneは128にBPMを変更します。その後の手動変更は維持されます。

計算の定義

チャンネルを算術平均したモノラル音声 x(t) について、有限長のヒルベルトFIRで得た直交成分 H[x] から瞬間振幅を計算します。

A(t) = √(x(t)² + H[x](t)²)
Z(t₀, k) = Σⱼ (A(t₀ + uⱼ) − mean) wⱼ exp(−2πi k uⱼ) / Σⱼ wⱼ
F(k)     = Σⱼ (A(tⱼ) − mean) Wⱼ exp(−2πi k tⱼ) / Σⱼ Wⱼ

平均除去オフならmeanは0です。STFTの位相基準は窓中心、全体FFTは切り出し区間の先頭です。正周波数の複素係数を表示し、振幅を2倍する片側補正は行いません。固定周波数・ハーモニクスはFFTビンへ丸めず、指定周波数で直接計算します。

ヒルベルトFIRは約0.683秒の支持長、Kaiser窓β=12です。200 Hzまでを解析帯域としてローパスをかけて約1024 Hzへ間引きます。音声端とSTFT窓端は反射拡張を使います。端付近の結果にはこの仮定の影響があります。左右チャンネルが逆相の場合など、モノラル化で音が相殺されることがあります。

保存・書き出し

プロジェクト(.irhythm)は音声区間、瞬間振幅、解析結果、適用済み設定、表示配置を含みます。デスクトップ版 v0.5.3 と相互に読み込めます。未適用の設定変更は保存されません。プロジェクトから範囲を変更できるのは保存済み音声の内側です。外側へ広げたい場合は元音声を読み直してください。

CSV・NPZは選択した対象の実部・虚部・絶対値・有効な位相・実際の時間/周波数軸を保存します。設定と元音声範囲も含みます。NPZはNumPyで np.load(path, allow_pickle=False) により読み込めます。SVG・PNGは選択グラフを保存し、ハーモニクスは横スクロールの外側も含みます。

ブラウザー版の留意点

公開方法

README.mdにGitHub Pagesへの手動アップロード手順を記載しています。ビルドは不要です。index.html、assets/、samples/を同じ階層で保ってください。

Rhythm Fourier Web 1.0.2 · Rhythm Wave Lab 2 v0.5.3 の解析仕様を移植。fflate 0.8.2(MIT)はローカル同梱。ライブラリの表示。