2009-10-02 12 views
6

私は非常に巨大なWAVファイルを持っています。サイズは約100MBです。 Javaを使ってこのwavファイルを読み込み、2秒ごとに小さなチャンクに分割したいと思います。Javaを使用してwavファイルを小さなチャンクに分割する方法は?

Javaでこれを行うことはできますか?私はそれを達成するためのAPIを私に提案してもらえますか?事前に

おかげで、 Snehal

+0

こんにちは。私は.wavファイルを読んでおり、小さなチャンクに分割して渡したいので、各チャンクの頻度を調べることができます。私はJava Soundでかなり新しいので、これで私を助けてくれますか?私は次のコメントに自分のコードの一部を添付しています。前もってありがとうございます。 – Learner

+0

final float [] floatBuffer = DTMF.generateDTMFTone(文字); String read = "D:/RecordAudio31.wav"; InputStream in =新しいFileInputStream(読み取り); //入力ストリームからオーディオストリームを作成する AudioStream audioStream = new AudioStream(in); final AudioFormat format =新しいAudioFormat(44100、16、1、true、false); final AudioInputStream inputStream =新しいAudioInputStream(オーディオストリーム、形式、floatBuffer.length); final AudioDispatcherディスパッチャ= new AudioDispatcher(inputStream、stepSize、0); dispatcher.addAudioProcessor(goertzelAudioProcessor); 新しいスレッド(ディスパッチャ).start(); – Learner

+0

私はそれを理解しました。とにかく、ありがとう。 – Learner

答えて

4

あなたは(フォーマット、サンプルレート)を書くために何を知ってAudioInputStreamと(AudioFormatインスタンスを含む)そのAudioFileFormatメンバーを使用することができ、あなたはそれを書くためにAudioSystemを使用することができます。

フォーマットのサンプルレートに基づいて、オーディオのバイト数が2秒であることがわかり、AudioInputStreamからその多くのバイトを読み取って新しいファイルに書き込むループが続きます。

+0

AudioFileFormatからサンプルレートが8000であることがわかりました。サンプルレートとそれが占めるバイト数の関係は何ですか?私はオーディオ処理の初心者です。私の無知にごめんなさい – Snehal

+2

サンプルレート(f)に加えて、サンプル数(bps)とチャンネル数(n)もAudioFormatによって提供される必要があります。オーディオの1秒間は、bps * n * f/8バイトが必要です。 – eljenso

+0

ありがとう、Elijenso。 2秒間のオーディオに必要なバイト数を調べることができました。今、私は、AudioSystemの書き込みメソッドを使用して、読み取りバイトを書き込もうとしています。ただし、入力引数の1つはAudioInputStreamです。読み込みバイトに基づいてそのオブジェクトを作成できません。どんなポインタであれ、本当に役に立ちます。ありがとう! – Snehal

0

コードの長寿を気にしない場合は、Quicktime For Javaを使用することをおすすめします。それはWindowsとMac上で動作し、ほとんどすべてのオーディオ(およびビデオ)形式を読み書きします。欠点は、Appleが何年もそれをサポートしていないということです。それでも機能し続けるうちに、あなたは死ぬ技術に投資しています。

1

また、実際には基本的でシンプルなspecification for a wav fileを検索することもできます。 そしてバイナリをバイナリで読んで、小さなビットでもう一度保存します。

いつもライブラリに頼るのではなく、このようにする方が良い学習体験だと思います。

+1

また、大きなチャンクのフォーマットでは、小さなチャンクのヘッダーをフォーマットする方法も知っておく必要があります。 「単純な」作業ではありませんが、過度に難しい作業でもありません。しかし、間違いなくスペックを調べる必要があります。 –

関連する問題