JSlider + Lautstärke

Status
Nicht offen für weitere Antworten.
G

Guest

Gast
Wenn man einen JSlider mit der Lautstärke eines Musik-Abspielers verbinden will, ist man dann auf "getGainControl()"
angewiesen ? Soweit ich weis gehört das doch zu Java Media Framework. Und das wollt ich nicht verwenden.
 

anfänger15

Bekanntes Mitglied
Mit welchen Klassen spielst du die Musik ab?

Um die Lautstärke zu ändern musst einfach die Methode der jeweiligen Klasse verwenden. Bei JMF also getGainControl().setLevel(float f).
 

Ralph-Uwe

Bekanntes Mitglied
Hallo Gast,

für die Lautstärkeregelung wird JMF nicht benötigt.

Im Javabuch ( http://www.javabuch.de/ ) ist die Lautstärkeregelung beschrieben.
Im Kapitel 48.2 Gesampelter Sound findest Du alle nötigen Informationen.

Es gibt für Java auch ein mp3plugin, damit lassen sich sogar mp3's abspielen.
http://www.java-forum.org/de/userfiles/user10646/mp3plugin.jar
Ich arbeite mit Eclipse, da habe ich die Bibliothek einfach in das Projekt eingebunden.
 

Ralph-Uwe

Bekanntes Mitglied
Eine Dokumentation habe ich auch nicht.

Es reicht aber, wenn das Plugin in das Projekt mit eingebunden ist.
Man braucht auf keine Funktion zuzugreifen.
Betrachte das ganze wie einem Codec, der dem dem Programm zugänglich macht.

Leider habe ich den Link nicht mehr, wo man das Plugin findet.
Ich weiß aber, dass man sich bei Sun anmelden muss um es runterladen zu können.
 

The_S

Top Contributor
ok, ich binde das also in mein Projekt ein und kann dann ganz normal (z. B. über AudioClip) eine mp3-Datei abspielen!?
 

Ralph-Uwe

Bekanntes Mitglied
ob es mit Audio-Cilp geht habe ich nicht probiert.

Folgender Code läuft bei mir :D

Code:
import java.io.File;
import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URL;
import javax.sound.sampled.AudioFormat;
import javax.sound.sampled.AudioInputStream;
import javax.sound.sampled.AudioSystem;
import javax.sound.sampled.DataLine;
import javax.sound.sampled.FloatControl;
import javax.sound.sampled.LineUnavailableException;
import javax.sound.sampled.SourceDataLine;
import javax.sound.sampled.UnsupportedAudioFileException;


public class Sound implements Runnable
{
	private URL soundToPlay; //aktueller Musik Titel
	private Thread runner = new Thread(this); //AbspielThread
	private static final int BUFFER_SIZE = 3000; // Anzahl der Daten, die aufeinmal an die Soundkarte geschickt werden.
    private byte[]  buffer = new byte[BUFFER_SIZE];
    private int gainPercent = 70;  //gibt die Lautstärke in Prozent an.  (0% = -80dB und 100% = 6dB) 
	private Boolean stop = false;

	/**
	 * damit mp3-Dateien abgespielt werden können, muss das mp3plugin von Sun im Classpath stehen oder
	 * (zB. unter Eclipse) als Bibliothek eingetragen sein.  
	 * Das gleiche gilt für flac-Dateien.
	 * 
	 * Die Lautstärke "gainLevel" ist logarhytmisch von -80dB bis ca. 6dB. Daher ist die 
	 * prozentuale Lautstärkeregelung nicht ganz korrekt. 
	 */
	
	
	/**
	 * übergibt den Musiktitel
	 * @param titel
	 * @throws MalformedURLException 
	 */
	public void setSoundToPlay(URL titel) {
		soundToPlay = titel;
	}

	/**
	 * stoppt die Wiedergabe
	 *
	 */
	public void stop()
	{
		stop=true;
	}
	
	/**
	 * starten der Wiedergabe
	 *
	 */
	public void play()
	{
			stop=false;
			if (!runner.isAlive())
			{
				runner = new Thread(this);
				runner.start();
			}
	}
	
	/**
	 * der WiedergabeThread
	 */
	public void run() 
	{
		try {
			AudioInputStream in = AudioSystem.getAudioInputStream(AudioFormat.Encoding.PCM_SIGNED, AudioSystem.getAudioInputStream(soundToPlay));
			AudioFormat audioFormat = in.getFormat();
			SourceDataLine line = (SourceDataLine) AudioSystem.getLine(new DataLine.Info(SourceDataLine.class, audioFormat));
		    line.open(audioFormat);
		    FloatControl gainControl = (FloatControl)line.getControl(FloatControl.Type.MASTER_GAIN);
		    line.start();
		    while ((true)&&(!stop)){
		    	int gainLevel= (int) ((int)gainControl.getMinimum()+((gainControl.getMaximum()-gainControl.getMinimum())/100*gainPercent));
		    	gainControl.setValue(gainLevel);
		    	int n = in.read(buffer, 0, buffer.length);
		    	if ((n < 0)||(stop)) {
		        	break;
		        }
		        line.write(buffer, 0, n);
		      }
		      line.drain();
		      line.close();
		      in.close();
			} catch (UnsupportedAudioFileException e) {
			    System.out.println("nicht unterstütztes Format");
			} catch (IOException e) {
				System.out.println("Datei nicht gefunden");
			} catch (LineUnavailableException e) {
				System.out.println("Soundkartenfehler");
			}
		}

	public static void main(String[] args) {
		File file = new File("d:\\meinlied.mp3");
		Sound musik = new Sound();
		try {
			musik.setSoundToPlay(file.toURL());// Musikdatei zuweisen
			musik.gainPercent=60;              // Lautstärke auf 60% setzen 
			musik.play();                      // Musik starten
			Thread.sleep(10000);               //10 sec warten
			musik.gainPercent=80;              // Lautstärke auf 80% setzen
			Thread.sleep(10000);               //10 sec warten
			musik.gainPercent=100;              // Lautstärke auf 100% setzen
			Thread.sleep(10000);               //10 sec warten
			musik.stop();                      // Musik stoppen
		} catch (MalformedURLException e) {
			e.printStackTrace();
		} catch (InterruptedException e) {
			e.printStackTrace();
		}
	}
}
 

The_S

Top Contributor
ich werd in nächster Zeit nicht dazu kommen das zu testen. Hab momentan auch keine Verwendung dafür ;) . Evtl. irgendwann mal, aber hier wird häufig nach mp3 gefragt und bisjetzt wurde immer auf das JMF oder javazoom verwiesen.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
S JSlider und ChangeListener Java Basics - Anfänger-Themen 1
S OOP Zwei JSlider in einer Klasse Java Basics - Anfänger-Themen 2
Z JSlider - Text wird nich angezeigt Java Basics - Anfänger-Themen 0
S JSlider Schritt Größe Java Basics - Anfänger-Themen 5
F JSlider korrekt implementieren Java Basics - Anfänger-Themen 19
C Aktueller Wert von einem JSlider auf ein Label Java Basics - Anfänger-Themen 2
C JSlider und JRadioButton auf Label anzeigen? Java Basics - Anfänger-Themen 10
I Rückgabewert von JSlider Java Basics - Anfänger-Themen 15
R Zeitachse mit JSlider Java Basics - Anfänger-Themen 13
V JSlider wird nicht angezeigt Java Basics - Anfänger-Themen 12
H Swing: JSlider wird nicht angezeigt Java Basics - Anfänger-Themen 5
S Graphic im Panel änder durch JSlider Java Basics - Anfänger-Themen 2
S Schieberegler (JSlider) funktioniert nicht Java Basics - Anfänger-Themen 5
K Farbenspiel mit dem jSlider Java Basics - Anfänger-Themen 5
? JSlider Java Basics - Anfänger-Themen 9
G JSlider Wert auslesen Java Basics - Anfänger-Themen 1
M ChangeListener Problem bei JSlider Java Basics - Anfänger-Themen 3
S undo auf JSlider Java Basics - Anfänger-Themen 9
M Ton abspielen in einer gewissen Frequenz und lautstärke... Java Basics - Anfänger-Themen 3
S Lautstärke des Audioclips Java Basics - Anfänger-Themen 2

Ähnliche Java Themen

Neue Themen


Oben