整数の配列をサウンド表現に変換しようとしています。現在、各値を個別のショート トーンとして再生していますが、次のように、情報から単一のサンプリングされた波形を作成して再生したいと考えています。
各赤い点はデータ ポイントを表します。理想的には、 のような単純な方法で終わりたいと思いplaySound(int[] array);
ます。javax.sound.sampled パッケージを調べましたが、どこから始めればよいかわかりません。
まず、サンプルの配列はサウンドを再生するのに十分な情報ではありません。
サンプルレートも指定する必要があります。(たとえば、-1、+1 などを繰り返す 50 サンプルは、25 サンプル/秒で記録された場合は 50 Hz の正弦波になり、50 サンプル/秒で記録された場合は 12.5 Hz の波形になります (私の数学はオフになる可能性があります))。
必要なもう 1 つのことは、サウンドの保存方法です。MAX_INT が最大音量ですか、それとも 255 が最大音量ですか?
エンコーディングも指定する必要があります。おそらく、PCM_SIGNED または PCM_UNSIGNED (負のサンプルがあるかどうかに応じて) のいずれかが必要になるか、使用したい別のエンコーディングが存在する可能性があります。
javax.sound.sampled パッケージは、AudioFormatクラスでこの情報を表します。
オーディオがサンプルされた方法を反映するオーディオ形式を構築する必要があります。たとえば、サンプルが整数範囲全体を占め、各サンプルを整数で表し、1 秒あたり 22,000 サンプルでサンプリングし、それがモノラル サウンドである場合、次の AudioFormat を構築します...
AudioFormat desiredFormat = new AudioFormat(AudioFormat.Encoding.PCM_SIGNED,22000,32,1,32,22000,true);
AudioFormat を取得したら、ラインを開いてオーディオをダンプできます。 このページでは、その方法を示します (彼らはチートをしてオーディオ ファイルを再生しているので、ファイルから AudioFormat を取得します)。
もちろん、すべての形式の行を開くことができない場合があるため、何らかの変換が必要になる場合があります。とはいえ、これをはるかに簡単にする Java サウンド ライブラリが存在する可能性があります。