先生が教えてくれた概念を理解するのに苦労しており、クラスメートの間でかなり一貫性のない答えが得られます. 誰かがこのアイデアやコンセプトを明確にするのを手伝ってくれるかどうか疑問に思っていましたか?
これは、オーディオ処理における num チャンキングとして知られています。WAVファイルのみを扱う必要があります。したがって、音声データは圧縮されていないと仮定します。
numChunking は、オーディオ正弦波のフーリエ変換に関係しています。
numChunks の数を決定するには、次のようにします。
方法 1:
int numChunks = totalNumOfSamples/chunkSize
しかし、私が話した他のほとんどの人も言っていました
方法 2:
int numChunks = totalNumOfSamples/binSize
違いは、chunkSizeが 1024 や 2000 などで指定またはハードコードされた数値にすぎないことです。一方、 binSizeは、サンプルにフーリエ変換を適用した後に描画する周波数の数です。通常、描画するビン (パネル上のバー/頻度バー) の数は、画面に表示するのに約 50 ~ 100 であり、それには永遠に時間がかかります。
方法 1 では、たとえば 47988 サンプル / 2000 = 23 numChunks のような数の numchunks を取得します。次に、これらのチャンクを for ループに送り、サウンド データの各サンプルを各チャンクに追加します。したがって、23 個の numChunks をすべてまとめると、対応できないために精度がいくらか失われますが、ほぼすべてのサウンド データが得られます。分割からのすべてのサンプル。次に、それらを配列または ArrayList に追加して、後で離散フーリエ変換 (フォワード フーリエ関数) に送信し、結果を取得してビンに配置し、結果をバーとしてプロット/描画します。
よくわからない最後の詳細は、フーリエ変換がサウンド全体の TOTAL サンプルで除算するのか、numChunk 内のサンプルの TOTAL # だけで除算するのかということです。
方法 2 では、numChunks = 合計サンプル数 / binSize が機能します。たとえば、同じ例を使用します。47988/30bins = 1599 numChunks. この考えでは、クラスメートが numChunks は多数の subArray であると説明してくれました。そこで、2D 配列を作成しました。各配列は、binSize の長さを持つ 1599 配列です。したがって、各 subArray を順方向フーリエ変換で処理すると、結果の振幅値または周波数が得られます。次に、値を TOTAL サンプルで除算する順方向フーリエを通して各 subArray を実行します。音全体の大きさ。
両方のアイデアの結果は不規則に異なります。方法 1 では最初の値が約 37.5 になり、方法 2 では値として 3689 が得られます。次の値はすべて一般的に正しいように見えるため、どの方法が正しいか、または正しい方法があるかどうかはわかりません。
これはJavaでコーディングされています
この質問は非常に紛らわしいです。私自身が非常に困惑していることがわかります。誰かが正しいか間違っているかを明確にするか、概念を説明するのを手伝ってくれることを願っています.