次のコードスニペットがあります。
File file = new File(sourceFile);
AudioInputStream in = AudioSystem.getAudioInputStream(file);
AudioInputStream din = null;
AudioFormat baseFormat = in.getFormat();
AudioFormat decodedFormat = new AudioFormat(
AudioFormat.Encoding.PCM_SIGNED, baseFormat.getSampleRate(),
16, baseFormat.getChannels(), baseFormat.getChannels() * 2,
baseFormat.getSampleRate(), false);
din = AudioSystem.getAudioInputStream(decodedFormat, in);
AudioSystem.write(din, AudioFileFormat.Type.WAVE, new File(targetFile));
このコードは、MP3およびOGGファイルからWAVファイルに変換するために作成しました。私が理解しているように、これらの形式はデフォルトでjavaでサポートされていないため、ここで説明するように、クラスパスに別のjarを追加する必要がありました。
http://www.javazoom.net/mp3spi/documents.html
http://www.javazoom.net/vorbisspi/documents.html
MP3ファイルを変換しているとき、コードは正常に実行されます。しかし、OGGファイルを変換しようとすると、次のエラーが発生します。
java.lang.IllegalArgumentException: Unsupported conversion: PCM_SIGNED 44100.0 Hz, 16 bit, stereo, 4 bytes/frame, little-endian from VORBISENC 44100.0 Hz, unknown bits per sample, stereo, 1 bytes/frame, 16000.0 frames/second
これは、デコードされた入力ストリーム自体を取得するときにのみスローされるようになりました。これは、oggファイルが正常に解析されたことを意味します。
AudioSystem.getTargetEncodings(sourceFormat)
上記のコードは、MP3ファイルもOGGファイルも処理しない場合、値を返しません。唯一の違いは、MP3が正常に動作することです。
最新バージョンのjogg-0.0.7.jarを除いて、ogg変換に必要な前のリンクで参照されているすべてのjarを追加しました。これは、見つからなかったためです。
JAVEのようなさまざまなソリューションを試しましたが、MACでも実行する必要があり、特別な実装がないとJAVEはMACで実行されません。
誰かが問題を引き起こす可能性のある提案がありますか?OGGファイルをWAVに変換するための回避策はありますか?
編集:
わあ、問題が何であるかを理解しました...マニュアルのすべてを読んだ後、2つの異なる種類のSPI(この場合はMP3とOGGなど)を使用すると問題が発生する可能性があることを学びました。MP3 spi mavenの依存関係を削除すると、エラーが消えました。結果のwavは基本的に空だと思いました。それについて何か提案はありますか?OGGからWAVへの変換を機能させることができれば幸いです。MP3を別の方法で変換できます。
私のpom依存関係は次のようになります:
<dependency>
<groupId>com.googlecode.soundlibs</groupId>
<artifactId>vorbisspi</artifactId>
<version>1.0.3-1</version>
</dependency>
このダウンロードでは、OGG変換を機能させるために必要なすべてのjarファイルを推測します。(そうではないようです。)