申し訳ありませんが、これは簡単な質問のようですが、プログラミングでサウンドを試すのは初めてです。TargetDataLineデータをOgg Vorbisファイルにエンコードする
私がここで達成しようとしているのは、TargetDataLineオブジェクトで取得したデータを.oggファイルにエンコードすることです。私の出発点は、公式のJava Documentation https://docs.oracle.com/javase/tutorial/sound/capturing.htmlでした。
私はJavaZoomのVorbis API http://www.javazoom.net/vorbisspi/vorbisspi.htmlを使用しています。
private static void recordAudio(int id) {
Map<String, Object> myMap = new HashMap<String, Object>();
myMap.put("duration", 0);
myMap.put("title", "title_test");
myMap.put("author", "author_test");
myMap.put("album", "album_test");
myMap.put("date", "date_test");
myMap.put("copyright", "copyright_test");
myMap.put("comment", "comment_test");
VorbisAudioFormat format = new VorbisAudioFormat(VorbisEncoding.VORBISENC, 48000.F, 16, 2, 4, 48000.F, true, myMap);
Mixer mixer = AudioSystem.getMixer(AudioSystem.getMixerInfo()[id]);
TargetDataLine line;
DataLine.Info info = new DataLine.Info(TargetDataLine.class, format);
if (!AudioSystem.isLineSupported(info)) {
System.out.println("Line is not supported.");
}
try {
line = (TargetDataLine) mixer.getLine(info);
line.open(format);
line.start();
AudioInputStream ais = new AudioInputStream(line);
File auFile = new File("path/stream_test.ogg");
AudioFileFormat.Type fileType = VorbisFileFormatType.OGG;
AudioSystem.write(ais, fileType, auFile);
} catch (LineUnavailableException ex) {
System.out.println("Line is unavailable.");
ex.printStackTrace();
} catch (FileNotFoundException e) {
System.out.println("File not found.");
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
このコードでは、コンソールで次の出力が表示されます。
Line is not supported.
Exception in thread "main" java.lang.IllegalArgumentException: Line unsupported: interface TargetDataLine supporting format VORBISENC 48000.0 Hz, 16 bit, stereo, 4 bytes/frame,
at com.sun.media.sound.DirectAudioDevice.getLine(Unknown Source)
at test_mixer.Main.recordAudio(Main.java:60)
at test_mixer.Main.main(Main.java:35)
私はVorbisEncoding.PCM_SIGNED
にencondingを変更しようとしたが、その後、コンソールには、次のようなエラーがスローされます。
Exception in thread "main" java.lang.IllegalArgumentException: could not write audio file: file type not supported: OGG
at javax.sound.sampled.AudioSystem.write(Unknown Source)
at test_mixer.Main.recordAudio(Main.java:66)
at test_mixer.Main.main(Main.java:35)
AudioSystem.htmlをご覧ください。 AudioFileFormat.Type.htmlを見てください。あなたはどこでもサポートされているようにvorbisを見ますか? – gpasch
@gpasch OPはVorbisのサポートをJava Soundに追加するVorbis SPIコードを使用しようとしています。 –
代替パスは可能ですか?たとえば、wavに書き込んでから、audacity.comのようなものを使ってwavからoggに変換しますか?もしそうなら、私はwavの部分に書くことを手伝うことができると確信しています。直接oggに書き込むためのライブラリがある場合はIDK、利用可能です。おそらくLWJGL 3には、OpenALライブラリを使用していて、oggを読み込んでいて、おそらくそれを書き込んでいる可能性があります。 –