Ich bin momentan dabei einen kleinen Synthesizer zu programmieren und bin auf ein sehr unerwartetes Problem gestoßen.
Beim Schreiben des generierten Sounds in eine Datei tritt ein Fehler auf, der eigentlich laut der Javadoc nicht auftreten sollte.
Dass das Fragen des Users innerhalb der Methode eine schlechte Idee ist, ist mir bekannt, mein Problem ist die IllegalArgumentException, die AudioSystem.write wirft.
Nach der Javadoc müsste es doch eigentlich so sein, dass jedes Element des AudioFileFormat.Type[], welchen AudioSystem.getAudioFileTypes(AudioInputStream) zurückgibt, auch von AudioSystem.write(AudioInputStream,AudioFileFormat.Type,File) unterstützt wird.(also nicht zu dieser IllegalArgumentException führt)
Das exakt Gleiche passiert auch bei allen anderen Auswahlmöglichkeiten des JOptionPane Dialogs.
Könnte mir bitte jemand helfen?
Beim Schreiben des generierten Sounds in eine Datei tritt ein Fehler auf, der eigentlich laut der Javadoc nicht auftreten sollte.
Java:
public static final AudioFormat RAW = new AudioFormat(44100, 16, 1, true, true);
public static void export(File target, InputStream rawdata) throws IOException {
if (target == null) {
throw new NullPointerException("target file is null");
}
AudioInputStream ai = new AudioInputStream(rawdata,RAW,rawdata.available()>>>2);
AudioFileFormat.Type[] t = AudioSystem.getAudioFileTypes(ai);
AudioFileFormat.Type selection = (AudioFileFormat.Type)JOptionPane.showInputDialog(null, "Choose an audio-file-format", "Format selection", JOptionPane.QUESTION_MESSAGE, null, t, t[0]);
if (selection == null) {
return;
}
AudioSystem.write(ai, selection, target);
}
Code:
Exception in thread "Thread-0" java.lang.IllegalArgumentException: could not write audio file: file type not supported: WAVE
at javax.sound.sampled.AudioSystem.write(AudioSystem.java:1363)
at synthesizer.IOController.export(IOControl.java:37)
Das exakt Gleiche passiert auch bei allen anderen Auswahlmöglichkeiten des JOptionPane Dialogs.
Könnte mir bitte jemand helfen?