前提
趣味でシーケンサー風味のアプリを作っています。
wavetoneのようにストレージの音楽ファイルを、スペクトラム表示させたいです。
まず、.wav→float[]の処理を書き、完成させました。
独自の読み込み処理と、こちらの記事の「AudioClipを生成する」の処理を利用しています。
特定のチャンネルを、forで回して[count * 対象のチャンネル]で取り出し、unity公式を参考に以下の式で変換するところまで書けてます。
//BlackmanHarris for(int count = 0;count < data.Length;++count) data[count] *= 0.35875 - (0.48829 * Math.Cos(1.0 * (【n/N】))) + (0.14128 * Math.Cos(2.0 * (【n/N】))) - (0.01168 * Math.Cos(3.0 * (【n/N】)));
発生している問題
ここまで書けたので、AudioSourceにAudioClipとして読ませて、再生位置に合わせて表示させてみました。
GetSpectrumDataの各線でテストします。
音階を示しているようなので、緑線を特に注視します。
- 「n/N」=「(2.0 * Math.PI / (double)data.Length) * count」
参考にした処理そのままです。
明らかに音階を反映していません。
まったく揃っておらず、ぶれぶれ。
縦位置は後半に進むにつれて高くなっています。
横位置は、完全にぶれぶれです。
- 「n/N」=「count/Sampling周波数」
明らかに音階を反映していません。
きれいに揃っています。
縦位置は曲に合わせて動いています。
しかし横位置は、大きくは動いてません。
わからないこと
音階は上の計算式を直せば、それも恐らくn/Nを直せば表示できるような気がします。
しかしどんな式を入れればAudioSource.GetSpectrumDataと同じ表示になるのかが全くわかりません。
実現したいこと
-
サンプルデータをfloat[]を取得 - フーリエ変換の処理を完成させ、音階をDebug.DrawLineで表示させる
-
画像化? -
wavetoneのように音階を表示
試したこと
補足情報(FW/ツールのバージョンなど)
Unity 2021.1.16f1 Personal
主にAndroid、Editorで使用
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。