# AudioSystem.write() wirft IllegalArgumentException, obwohl dies eig. nicht passieren dürfte



## 4596 (23. Okt 2014)

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.

```
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);
    }
```
Dass das Fragen des Users innerhalb der Methode eine schlechte Idee ist, ist mir bekannt, mein Problem ist die IllegalArgumentException, die AudioSystem.write wirft.

```
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)
```
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?


----------



## Tucan (24. Okt 2014)

Deine Datei schreibt das AudioFormat als .wav. Deshalb liegt der Fehler wahrscheinlich daran, dass du irgendein Argument übergeben hast, dass mit .wav nicht kompatibel ist. Versuche es mal mit .au. :-D


----------



## 4596 (24. Okt 2014)

Tucan hat gesagt.:


> Deine Datei schreibt das AudioFormat als .wav. Deshalb liegt der Fehler wahrscheinlich daran, dass du irgendein Argument übergeben hast, dass mit .wav nicht kompatibel ist. Versuche es mal mit .au. :-D





4596 hat gesagt.:


> Das exakt Gleiche passiert auch bei allen anderen Auswahlmöglichkeiten des JOptionPane Dialogs.


Auch AU ist eine Auswahlmöglichkeit, allerdings passiert das Gleiche.

Das Einzige woran es liegen könnte wäre das Format des Rohdatenstroms, aber das gleiche AudioFormat wird von mehreren .wav Dateien genutzt.


----------

