2013-01-02 10 views
9

私は、バイト配列にたAudioInputStreamてwavファイルを読んでいますAudioInputStreamからデータを読み込むときにビッグエンディアンとリトルエンディアンを気にする必要がありますか?

AudioInputStream audiofile = AudioSystem.getAudioInputStream(f); 
    byte[] audio=new byte[numberofframes*framesize]; 
    int bytes=audiofile.read(audio); 

私は、データがリトルエンディアンに配置されているかのAudioInputStreamが、それは私のためにやるんことを考慮サンプルのバイトを配置する必要がありますか?

+0

読んでいますか? –

+0

はい私はJFilechooserを使っています。 ファイルf = chooser.getSelectedFile(); –

+0

'framesize'それは何の価値ですか? '1'の場合、エンディアンは関係ありません。 '4 'ならば、それはです。 –

答えて

1

データがチャネルの数にかかわらず、1バイト以上、たとえば16ビット以上のビットでエンコードされている場合は、ビッグエンディアンとリトルエンディアンが重要です。 JavaはPCMバイトをデフォルトの順序で自動的に配置しません。単に受け入れます。

以下は私見、Javaのオーディオチュートリアルの明確な、最高の書かれた単一のセクションで、形式とその変換に関連する問題について説明:あなたは、ファイルから

http://docs.oracle.com/javase/tutorial/sound/converters.html

+0

あなたは、バイト配列にフォーマット済みのオーディオデータがあると言います。つまり、リトルエンディアンでサンプルを読み取るために私自身で変換する必要がありますか? –

+0

出力ラインはビッグエンディアンでもリトルエンディアンでもかまいません。反対のタイプを入力すると、出力する前にバイトのスワップを90%確実に行う必要があります。しかし、これにはコンバーターがある可能性が高いので、必ずしもバイトレベルで手を汚す必要はありません。私が送ったリンクを見ましたか?私は、「フォーマットされたオーディオデータ」という用語がPCMデータのためにどれほど適切であるかわかりません。エンコーディングが16ビット以上の場合、バイトは関係なく、1つの順序または別の順序でなければなりません。私はAudioInputStreamが "気にする"とは思っていませんが、PCMの生のバイトを取り込むだけです。 –

関連する問題