整数の配列をサウンド表現に変換しようとしています。現在、私は個々の短いトーンとして各値をプレイしてるけど、私はそうのように、情報から単一サンプリング波を作成し、それを再生したいと思います:サンプリングされたサウンドを合成する
データポイントを表す各赤い点を。理想的には、私はplaySound(int[] array);
のような簡単な方法で終了したいと思います。私はjavax.sound.sampledパッケージを見てきましたが、どこから始めるべきかわかりません。
整数の配列をサウンド表現に変換しようとしています。現在、私は個々の短いトーンとして各値をプレイしてるけど、私はそうのように、情報から単一サンプリング波を作成し、それを再生したいと思います:サンプリングされたサウンドを合成する
データポイントを表す各赤い点を。理想的には、私はplaySound(int[] array);
のような簡単な方法で終了したいと思います。私はjavax.sound.sampledパッケージを見てきましたが、どこから始めるべきかわかりません。
まず、サンプルの配列は音を再生するのに十分な情報ではありません。
また、サンプルレートを指定する必要があります。 (例えば、50サンプルが-1/+ 1などを繰り返す場合は、25サンプル/秒で記録すると50Hzの正弦波、50サンプル/秒で記録すると12.5Hzの波(私の数学はオフの可能性があります))。
サウンドがどのように格納されるかが必要です。 MAX_INTは最高音ですか、ピーク音量は255ですか?
エンコードを指定する必要もあります。 PCM_SIGNEDまたはPCM_UNSIGNED(ネガティブサンプルがあるかどうかによって異なります)または使用したい別のエンコーディングがあるかもしれません。
javax.sound.sampledパッケージは、この情報をAudioFormatクラスで表します。
オーディオがサンプルであった方法を反映するオーディオ形式を構築する必要があります。たとえば、あなたのサンプルは完全な整数の範囲を取り、あなたは整数で、各サンプルを代表して、毎秒22,000サンプルでサンプリングし、それがモノサウンドだった場合、あなたは以下のAudioFormatを構築するでしょう...
AudioFormat desiredFormat = new AudioFormat(AudioFormat.Encoding.PCM_SIGNED,22000,32,1,32,22000,true);
AudioFormatを取得したら、ラインを開いてオーディオをダンプすることができます。 This pageはそれを行う方法を示しています(彼らは、ファイルからAudioFormatを取得できるように、彼らは不正行為をして、オーディオファイルを再生しています)。
もちろん、すべての形式で行を開くことができない場合がありますので、変換する必要があります。これはすべて、Javaサウンド・ライブラリーがそこにある可能性があります。
ありがとうございました!いくつかの質問に答えるために、値は0〜99であり、配列の長さは5〜500です。私はサンプルの全長が約100〜300ミリ秒であることを望んでいますが、サンプルレートは私にとって本当に問題ではありません。 – EscapeNT
0〜99の値は<7ビットの忠実度に相当します。あなたがしようとしていることに応じて、これは恐ろしいかもしれません。生の音を探していない限り、値の範囲を拡大することを真剣に検討したいかもしれません。 –