私は非常に巨大なWAVファイルを持っています。サイズは約100MBです。 Javaを使ってこのwavファイルを読み込み、2秒ごとに小さなチャンクに分割したいと思います。Javaを使用してwavファイルを小さなチャンクに分割する方法は?
Javaでこれを行うことはできますか?私はそれを達成するためのAPIを私に提案してもらえますか?事前に
おかげで、 Snehal
私は非常に巨大なWAVファイルを持っています。サイズは約100MBです。 Javaを使ってこのwavファイルを読み込み、2秒ごとに小さなチャンクに分割したいと思います。Javaを使用してwavファイルを小さなチャンクに分割する方法は?
Javaでこれを行うことはできますか?私はそれを達成するためのAPIを私に提案してもらえますか?事前に
おかげで、 Snehal
あなたは(フォーマット、サンプルレート)を書くために何を知ってAudioInputStreamと(AudioFormatインスタンスを含む)そのAudioFileFormatメンバーを使用することができ、あなたはそれを書くためにAudioSystemを使用することができます。
フォーマットのサンプルレートに基づいて、オーディオのバイト数が2秒であることがわかり、AudioInputStreamからその多くのバイトを読み取って新しいファイルに書き込むループが続きます。
AudioFileFormatからサンプルレートが8000であることがわかりました。サンプルレートとそれが占めるバイト数の関係は何ですか?私はオーディオ処理の初心者です。私の無知にごめんなさい – Snehal
サンプルレート(f)に加えて、サンプル数(bps)とチャンネル数(n)もAudioFormatによって提供される必要があります。オーディオの1秒間は、bps * n * f/8バイトが必要です。 – eljenso
ありがとう、Elijenso。 2秒間のオーディオに必要なバイト数を調べることができました。今、私は、AudioSystemの書き込みメソッドを使用して、読み取りバイトを書き込もうとしています。ただし、入力引数の1つはAudioInputStreamです。読み込みバイトに基づいてそのオブジェクトを作成できません。どんなポインタであれ、本当に役に立ちます。ありがとう! – Snehal
コードの長寿を気にしない場合は、Quicktime For Javaを使用することをおすすめします。それはWindowsとMac上で動作し、ほとんどすべてのオーディオ(およびビデオ)形式を読み書きします。欠点は、Appleが何年もそれをサポートしていないということです。それでも機能し続けるうちに、あなたは死ぬ技術に投資しています。
また、実際には基本的でシンプルなspecification for a wav fileを検索することもできます。 そしてバイナリをバイナリで読んで、小さなビットでもう一度保存します。
いつもライブラリに頼るのではなく、このようにする方が良い学習体験だと思います。
また、大きなチャンクのフォーマットでは、小さなチャンクのヘッダーをフォーマットする方法も知っておく必要があります。 「単純な」作業ではありませんが、過度に難しい作業でもありません。しかし、間違いなくスペックを調べる必要があります。 –
こんにちは。私は.wavファイルを読んでおり、小さなチャンクに分割して渡したいので、各チャンクの頻度を調べることができます。私はJava Soundでかなり新しいので、これで私を助けてくれますか?私は次のコメントに自分のコードの一部を添付しています。前もってありがとうございます。 – Learner
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
私はそれを理解しました。とにかく、ありがとう。 – Learner