2011-02-10 5 views
0

整数の配列をサウンド表現に変換しようとしています。現在、私は個々の短いトーンとして各値をプレイしてるけど、私はそうのように、情報から単一サンプリング波を作成し、それを再生したいと思います:サンプリングされたサウンドを合成する

image

データポイントを表す各赤い点を。理想的には、私はplaySound(int[] array);のような簡単な方法で終了したいと思います。私はjavax.sound.sampledパッケージを見てきましたが、どこから始めるべきかわかりません。

答えて

0

まず、サンプルの配列は音を再生するのに十分な情報ではありません。

  • また、サンプルレートを指定する必要があります。 (例えば、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

ありがとうございました!いくつかの質問に答えるために、値は0〜99であり、配列の長さは5〜500です。私はサンプルの全長が約100〜300ミリ秒であることを望んでいますが、サンプルレートは私にとって本当に問題ではありません。 – EscapeNT

+0

0〜99の値は<7ビットの忠実度に相当します。あなたがしようとしていることに応じて、これは恐ろしいかもしれません。生の音を探していない限り、値の範囲を拡大することを真剣に検討したいかもしれません。 –

関連する問題