# Soundfiles in Java 1.5.0_01



## Zilchinger (23. März 2005)

Hi,
ich wollte in Java ein WAV-File abspielen lassen.
Dazu habe ich einige Posts hier im Forum gefunden, das funktioniert auch alles wunderbar mit der JRE 1.4.2_07.

Jetzt habe ich mal mein SDK 1.5.0_01 ausprobiert und dort funktioniert es nicht.

Das Einzige was geht, ist wenn ich mit newAudioClip(...) mir einen neuen Clip anlegen und denn dann mit der Methode loop() starte. Dann spielt er das File unendlich lang ab.
play() geht hier auch nicht.

Das Erstellen einens Clips über den AudioInputStream geht auch nicht mit Java 5. Es gibt zwar keine Fehler, aber der Sound ist nicht zu hören.

Weiß jemand woran das liegt?


----------



## Thomas Darimont (24. März 2005)

Hallo!

Schau mal hier:

```
/**
 * 
 */
package de.tutorials;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
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.FloatControl;
import javax.sound.sampled.LineUnavailableException;
import javax.sound.sampled.UnsupportedAudioFileException;
import javax.swing.JButton;
import javax.swing.JFrame;

/**
 * @author Administrator
 * 
 */
public class Player extends JFrame {

	private Clip clip;

	private JButton btn;

	private boolean running;

	public Player() {
		super("Player");
		setDefaultCloseOperation(EXIT_ON_CLOSE);

		initPlayer();
		btn = new JButton("Play");
		btn.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				if (!running) {
					running = true;
					clip.start();
				} else {
					running = false;
					clip.stop();
				}
			}
		});

		add(btn);

		pack();
		setVisible(true);
	}

	private void initPlayer() {
		try {
			AudioInputStream ais = AudioSystem.getAudioInputStream(new File(
					"C:\\WINNT\\media\\Der Microsoft Sound.wav"));
			AudioFormat format = ais.getFormat();
			DataLine.Info info = new DataLine.Info(Clip.class, format,
					((int) ais.getFrameLength() * format.getFrameSize()));
			clip = (Clip) AudioSystem.getLine(info);
			clip.open(ais);

			FloatControl gainControl = (FloatControl) clip
					.getControl(FloatControl.Type.MASTER_GAIN);
			gainControl.setValue(1.0F);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		new Player();
	}
}
```

Gruß Tom


----------



## Zilchinger (24. März 2005)

Hallo Thomas,
mit deinem Quelltext ist es das gleiche Problem, aber ich weiß jetzt woran das liegt.
Wav-File != Wav-File
Es gibt Wav-Files die sind irgendwie so codiert, das es nicht funktioniert. Aber es gibt auch keine Exception. Ich habe nämlich Files gefunden die funktionieren ohne Probleme.

Komisch...


----------



## MiRaMC (10. Mai 2005)

Es gibt

Microsoft ADPCM & DVI/IMA ADPCM


----------



## Haruka (10. Mai 2005)

MiRaMC hat gesagt.:
			
		

> Es gibt
> 
> Microsoft ADPCM & DVI/IMA ADPCM


 
Hm, dazu 3 kleine Fragen:
Und was von beidem kann nun Java nicht? 
Und wie finde ich heraus welches Format mein WAV hat?
(Ausser es mit Java abzuspielen und zu merken, dass es (nicht) geht)
Wie/mit was konvertiere ich ggf. um?


----------



## MiRaMC (11. Mai 2005)

Also, ich benütz zum umcodieren immer CoolEdit 2000.
Des von Microsoft müste gehn. 
Also bei Windows auf Rechtsklick | Eigenschaften zeigts des net so genau an, dann muss mans halt mit nem Programm machen (CoolEdit)


----------



## coolerouny (11. Mai 2005)

morgen!

also mit dem script vom tom kann ma aber keine langen waves abspielen, weil des sonst ruckelt (kann man das bei am sound sagen?)

und man kann kane mp3s abspielen

gibts da irgendwas damit das geht?

mfg
coolerouny


----------



## Haruka (11. Mai 2005)

coolerouny hat gesagt.:
			
		

> gibts da irgendwas damit das geht?


 
Jep *mal kurz aus der Insel zitier*



			
				Insel hat gesagt.:
			
		

> Die Sound-API im Paket javax.sound erlaubt Erweiterungen um eigene Audio-Spieler. So gibt es einen Winamp-ähnlichen MP3-Spieler mit dem Namen jlGui (_http://www.javazoom.net/jlgui/jlgui.html_), dem der Unterschied zu einem nativen Player nicht anzusehen ist.1  Er unterstützt Drag&Drop, Webstart, M3U, WinAmp Skins, OGG Vobis und vieles mehr. jlGui nutzt hierzu einen eigenen AudioLayer (_http://javalayer.sourceforge.net/_) zum Abspielen von MP3-Dateien. Die zusätzliche Bibliothek basiert auf der Möglichkeit, eigene SPIs einzuhängen.


 
Ob jlGui OpenSource ist, weiss ich nicht, hab ich grad beim Drübergucken nicht erkennen können. JavaLayer ist es auf jedenfall. Dürfte beides interessant sein, denk ich.

MiRaMC:
Okay!


----------



## fatmc (10. Juni 2005)

Hi Leute!
Ich Programmiere gerade ein kleines Spiel mit java Klassen (keine Applets) und suche nach einer Möglichkeit während des Spiels eine Musik in einer Endlosschleife laufen zu lassen.Habe bis jetzt nur Lösungen in Applet-Form gefunden und die Lösung von Thomas Darimont funktioniert nicht! (außerdem bracuhe ich nicht einen ganzen Player) 

Hoffe das ihr mir helfen könnt und auf baldige Antwort.

MFG fat


----------



## fatmc (10. Juni 2005)

HABE DAS PROBLEM GELÖST



war schneller als ihr


----------



## Thomas Darimont (10. Juni 2005)

Hallo!

Also ich weis nicht, was du hast ... funktioniert doch einwandfrei...

```
/**
 * 
 */
package de.tutorials;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;

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.FloatControl;
import javax.swing.JButton;
import javax.swing.JFrame;

/**
 * @author Administrator
 * 
 */
public class Player extends JFrame {

	private Clip clip;

	private JButton btn;

	private boolean running;

	public Player() {
		super("Player");
		setDefaultCloseOperation(EXIT_ON_CLOSE);

		initPlayer();
		btn = new JButton("Play");
		btn.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				if (!running) {
					running = true;
					clip.start();
					clip.loop(-1);
				} else {
					running = false;
					clip.stop();
				}
			}
		});

		add(btn);

		pack();
		setVisible(true);
	}

	private void initPlayer() {
		try {
			AudioInputStream ais = AudioSystem.getAudioInputStream(new File(
					"C:\\windows\\media\\Windows XP-Startvorgang.wav"));
			AudioFormat format = ais.getFormat();
			DataLine.Info info = new DataLine.Info(Clip.class, format,
					((int) ais.getFrameLength() * format.getFrameSize()));
			clip = (Clip) AudioSystem.getLine(info);
			clip.open(ais);
			

			FloatControl gainControl = (FloatControl) clip
					.getControl(FloatControl.Type.MASTER_GAIN);
			gainControl.setValue(1.0F);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		new Player();
	}
}
```

Die einzige Änderung die ich eingebaut habe war die Zeile mit clip.loop(-1); für eine Endlosschleife... 

Gruß Tom


----------



## Toastbrot666 (14. Juni 2005)

Wenn wir jetzt hier schonmal bei Java und Sounds sin.


Ich spiele zur Zeit auch damit rum und bin auf ein paar Probleme gestoßen. Das abspielen von Wave Files klappt nun nach diesem Thread. Wie schaut das ganze aber nun mit .mp3 Files aus? 

Ich habe mir hierzu mal das Beispiel hier angeschaut: 

http://java.sun.com/products/java-m...3/download.html
http://www.javazoom.net/mp3spi/documents.html

ich muss hier leider anführen, dass es nicht funktioniert, bzw. dass ich es nicht lauffähig hinbekommen habe. Muss man vielleicht noch mehrere Dinge beachten? Oder kann es sein, dass es auch hier eine gewisse Inkompatiblität zu Java 1.5.0 gibt? (Ich benutze mittlerweile das 03er Update)
Wäre nett, wenn jemand helfen könnte und vielleicht auch zeigen was er an dem obrigen Beispiel geändert hat, so dass er es zum laufen bekommen hat.

mfg
Toastbrot

------------------------------------------------- --- -- -

Ich muss mich hier selbst korrigieren. Es funktioniert. Man sollte es nur:

1. nicht nur Nachts probieren und
2. genau alle angegebnen .jar Files benutzen

Mein Fehler war, dass ich stellenweise aktueller Versionen verwendet habe. Jetzt kann ich wunderbar .mp3 Files in meinen Programmen abspielen


----------



## Schusta (27. Januar 2006)

Hi Leute!

Ich hab jetzt Thomas Code zum Öffnen eines Audiofiles für meinen Musik-Player verwendet. 

Gerade arbeite ich an einem Lautstärkeregler. 


```
ais = AudioSystem.getAudioInputStream(f);
            format = ais.getFormat();
            info = new DataLine.Info(Clip.class, format,((int) ais.getFrameLength() * format.getFrameSize()));
            sound = (Clip) AudioSystem.getLine(info);
            sound.open(ais);
            control=(FloatControl)sound.getControl(FloatControl.Type.VOLUME);
```

Dummerweise kommt immer die Fehlermeldung, dass VOLUME als Control.Type wohl irgendwie nicht funktioniert. 

Hat da eventuell jemand eine Idee?


----------

