InputStream
圧縮形式(MP3やOGGなど)のオーディオデータを含むcalledが与えられた場合、入力データのWAV変換を含む配列をin
作成したいと思います。byte
残念ながら、これを実行しようとすると、JavaSoundから次のエラーが発生します。
java.io.IOException: stream length not specified
以下に示すように、wavを一時ファイルに書き込んでから、読み戻すことで、なんとか機能させることができました。
AudioInputStream source = AudioSystem.getAudioInputStream(new BufferedInputStream(in, 1024));
AudioInputStream pcm = AudioSystem.getAudioInputStream(AudioFormat.Encoding.PCM_SIGNED, source);
AudioInputStream ulaw = AudioSystem.getAudioInputStream(AudioFormat.Encoding.ULAW, pcm);
File tempFile = File.createTempFile("wav", "tmp");
AudioSystem.write(ulaw, AudioFileFormat.Type.WAVE, tempFile);
// The fileToByteArray() method reads the file
// into a byte array; omitted for brevity
byte[] bytes = fileToByteArray(tempFile);
tempFile.delete();
return bytes;
これは明らかにあまり望ましくありません。もっと良い方法はありますか?