7

サウンドファイルを再生するプログラムを書いてみましたが、今のところうまくいきません。コードの一部を理解できません:

InputStream is = new FileInputStream("sound file");
   AudioFormat af = new AudioFormat(float sampleRate, int sampleSizeInBits, int channels, boolean signed, boolean bigEndian); // I don't understand it's constructor
   long length ; // length in sample frames
   // how cani i know the length of frames ?
   AudioInputStream ais = new AudioInputStream( is , af , length );
   // open ( ais );
   // start playing by invoking start method
  • コンストラクターではAudioFormat、サンプルレート、ファイルサイズ、チャネル、および最終的に2つのブール変数を事前に知ることができますか?
  • サンプルフレームの値を取得するにはどうすればよいですかlength
  • また、startメソッドを呼び出すにはどうすればよいですか?どの行からでも、フォルダ(つまりクリップ)に保存されているファイルからのデータは必要ありません
4

2 に答える 2

3

エンコーディングに加えて、オーディオ形式には、データの正確な配置をさらに指定する他のプロパティが含まれています。これらには、チャネル数、サンプルレート、サンプルサイズ、バイトオーダー、フレームレート、およびフレームサイズが含まれます。サウンドのオーディオチャンネル数は異なる場合があります。1つはモノラル用、2つはステレオ用です。サンプルレートは、チャネルごとに1秒あたりに取得される音圧の「スナップショット」(サンプル)の数を測定します。(サウンドがモノラルではなくステレオの場合、実際には2つのサンプルが各瞬間に測定されます。1つは左チャネル用、もう1つは右チャネル用です。ただし、サンプルレートはチャネルごとの数を測定するため、レートは次のようになります。チャネル数に関係なく同じです。これはこの用語の標準的な使用法です。)サンプルサイズは、各スナップショットを保存するために使用されるビット数を示します。8と16は典型的な値です。16ビットサンプル(または1バイトより大きい他のサンプルサイズ)の場合、バイト順序が重要です。各サンプルのバイトは、「リトルエンディアン」または「ビッグエンディアン」のいずれかのスタイルで配置されます。PCMのようなエンコーディングの場合、フレームは特定の時点でのすべてのチャネルのサンプルのセットで構成されるため、フレームのサイズ(バイト単位)は常にサンプルのサイズ(バイト単位)に数値を掛けたものに等しくなります。チャネルの。ただし、他の種類のエンコーディングでは、フレームに一連のサンプル全体の圧縮データのバンドルと、追加の非サンプルデータを含めることができます。このようなエンコーディングの場合、サンプルレートとサンプルサイズは、PCMにデコードされた後のデータを参照します。

リンク

于 2011-07-28T17:53:22.513 に答える
1

おそらく、これにアプローチするためのより良い方法は、 Javaサウンド情報Clipに示されている「再生中」のソースコードに沿ったものです。ページ。これにより、ほとんどの質問が冗長になります(を使用するときに、詳細について心配する必要がないため)。 Clip

ソースを試した後でさらに質問がある場合は、私に知らせてください。

于 2011-07-28T19:17:19.703 に答える