OGG-Player

Status
Nicht offen für weitere Antworten.

DeeDee0815

Bekanntes Mitglied
Hi Leute,

ich habe mir folgende kleine SoundPlayer-Klasse geschrieben:

Code:
package tools;

import java.io.IOException;

import javax.sound.sampled.AudioFormat;
import javax.sound.sampled.AudioInputStream;
import javax.sound.sampled.AudioSystem;
import javax.sound.sampled.Clip;
import javax.sound.sampled.DataLine;
import javax.sound.sampled.LineUnavailableException;
import javax.sound.sampled.UnsupportedAudioFileException;

public class SoundPlayer extends Thread {
	private String filename;

	private boolean loop;

	private Clip clip;

	public SoundPlayer(String filename, boolean loop) {
		this.filename = filename;
		this.loop = loop;
	}

	public void run() {
		setName("SoundPlayer");
		try {
			AudioInputStream stream = AudioSystem.getAudioInputStream(ClassLoader.getSystemResource("resources/sounds/" + filename));
			AudioFormat format = stream.getFormat();
			if (format.getEncoding() != AudioFormat.Encoding.PCM_SIGNED) {
				format = new AudioFormat(AudioFormat.Encoding.PCM_SIGNED, format.getSampleRate(), format.getSampleSizeInBits() * 2, format.getChannels(), format.getFrameSize() * 2, format.getFrameRate(), true);
				stream = AudioSystem.getAudioInputStream(format, stream);
			}
			DataLine.Info info = new DataLine.Info(Clip.class, stream.getFormat(), ((int) stream.getFrameLength() * format.getFrameSize()));
			clip = (Clip) AudioSystem.getLine(info);
			clip.open(stream);
			if (loop) {
				clip.loop(Clip.LOOP_CONTINUOUSLY);
			}
			clip.start();
		} catch (UnsupportedAudioFileException exception) {
			exception.printStackTrace();
		} catch (IOException exception) {
			exception.printStackTrace();
		} catch (LineUnavailableException exception) {
			exception.printStackTrace();
		}
	}

	public void exit() {
		clip.stop();
		clip.close();
	}
}

Mithilfe von http://www.javazoom.net/vorbisspi/documents.html habe ich das ganze OGG-Vorbis fähig gemacht. Aber leider klappt das nicht so ganz.

Code:
Exception in thread "SoundPlayer" java.lang.IllegalArgumentException: Unsupported conversion: PCM_SIGNED 44100.0 Hz, -2 bit, stereo, 2 bytes/frame, 20000.0 frames/second,  from VORBISENC 44100.0 Hz, unknown bits per sample, stereo, 1 bytes/frame, 20000.0 frames/second, 
	at javax.sound.sampled.AudioSystem.getAudioInputStream(AudioSystem.java:955)
	at tools.SoundPlayer.run(SoundPlayer.java:32)

Ich habe auch schon versucht, das Ganze ala dem auf der Seite beschriebenen TestPlayer im bei VorbisSPI mitgelieferten srctest-Ordner zu machen: Vergeblich. Wo ist das Problem? (Die Klasse läuft mit WAV-Dateien!)

MfG
DeeDee0815
 
-2 bit sample rate sieht leicht falsch aus 😉

ich nehme an, dass format.getSampleSizeInBits() -1 liefert, was in der API doc sicherlich dokumentiert ist als spezieller rückgabetyp. was man dann machen muss, steht auch in der doc nehme ich an.
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Zurück
Oben