WAV abspielen nach Button-Klick

hklaudia

Mitglied
Hallo!

Ich möchte meine aufgenommene WAV-Datei nach dem klicken auf einen PLAY - Button abspielen lassen. Hier mal mein Code:

Java:
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Container;
import java.awt.Graphics;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Observable;
import java.util.Observer;

import javax.imageio.ImageIO;
import javax.sound.sampled.AudioFileFormat;
import javax.sound.sampled.AudioFormat;
import javax.sound.sampled.AudioInputStream;
import javax.sound.sampled.AudioSystem;
import javax.sound.sampled.DataLine;
import javax.sound.sampled.LineUnavailableException;
import javax.sound.sampled.SourceDataLine;
import javax.sound.sampled.TargetDataLine;
import javax.sound.sampled.UnsupportedAudioFileException;
import javax.swing.DefaultComboBoxModel;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTabbedPane;
import javax.swing.JTextField;
import javax.swing.SwingConstants;

import model.GriffeModel;

@SuppressWarnings("serial")
public class Gitarrengriffe extends JFrame implements Observer {
	private GriffeModel model;
	
	private Container contentPane;
	private JTextField name, eSaite, BSaite, GSaite, DSaite, ASaite, ESaite;
	private JButton adden, record, stop, play;
	private JLabel hals, gg;
	private JComboBox<String> griffeCombo;
	private ArrayList<String> griff;
	private String[] saiten;
	private ImageIcon icon; 
    private BufferedImage image;
    private File file;

	public Gitarrengriffe(GriffeModel gm) {
		model = gm;
		this.model.addObserver(this);
		
		contentPane = getContentPane();
		
		JPanel griffePanel = new JPanel();
		
        
        play = new JButton("PLAY");
          
        griffePanel.add(play);

play.addActionListener(new ActionListener(){

			@Override
			public void actionPerformed(ActionEvent arg0) {			    
				String name = (String) griffeCombo.getSelectedItem();
				
				play(name);
			}
        	
        });
}

public void play(String n){
		String name = n + "_Sound";
		AudioInputStream ais=null;
		try{
			File file = new File("C:\\Klaudia\\Java\\Beispiele\\Gitarrengriffe\\"+name+".wav");
			ais = AudioSystem.getAudioInputStream(file);
	        AudioFormat format = ais.getFormat();
	        SourceDataLine line = null;
	        DataLine.Info info = new DataLine.Info(SourceDataLine.class, format);
	        line = (SourceDataLine) AudioSystem.getLine(info);
	        line.open(format);
	        line.start();
		} catch (LineUnavailableException e) {
			e.printStackTrace();
        } catch (UnsupportedAudioFileException e) {
        	e.printStackTrace();
        } catch (IOException e) {
        	e.printStackTrace();
        }
        finally
        {
            try
            {
                ais.close();
            }
            catch (IOException e)
            {
            	e.printStackTrace();
            }
        }
	}

nach dem drücken auf den button passiert nichts. also zumindest hört man nichts.
please help :)
 
J

JavaZ

Gast
Hm,sieht bisschen komisch aus.
So auf anhieb fällt mir aber nicht viel auf,
vielleicht dass du in der Methode
nochmal ein neues Objekt vom Typ file definierst?
Oder ein neuer String name?

Und wenn du's mal so probierst?
(So mach ichs jedenfalls):


Java:
	private File file;
	private boolean muted = false;
	private float volume = 100.0f; //Volume (von 0 - 100)
	private float pan = 0.0f; //Die balance der Kopfhörer -1 über 0(beide) bis 1
	private double seconds = 0.0d;//Die Sekunden die er wartet bevor er die Musik abspielt


...

            public void actionPerformed(ActionEvent arg0) {             
                String name = (String) griffeCombo.getSelectedItem();
                new Thread(play).start(name);
            }

	//Methode um die Musik abzuspielen
	final static Runnable play = new Runnable(String n)
	{
                name = n + "_Sound";
                file = new File("C:\\Klaudia\\Java\\Beispiele\\Gitarrengriffe\\"+name+".wav");

		public void run()
		{
			try
			{
				//Prüft ob das engegebene File ein wav ist
				if (file.getName().toLowerCase().contains(".wav"))
				{
					AudioInputStream stream = AudioSystem.getAudioInputStream(file);
					
					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);
					}
					
					SourceDataLine.Info info = new DataLine.Info(
							SourceDataLine.class,
							stream.getFormat(),
							(int) (stream.getFrameLength() * format.getFrameSize()));
					
					SourceDataLine line = (SourceDataLine) AudioSystem.getLine(info);
					line.open(stream.getFormat());
					line.start();
					
					// Setzt die Volume
					FloatControl volume_control = (FloatControl) line.getControl(FloatControl.Type.MASTER_GAIN);
					volume_control.setValue((float) (Math.log(volume / 100.0f) / Math.log(10.0f) * 20.0f));
					
					// Mute
					BooleanControl mute_control = (BooleanControl) line.getControl(BooleanControl.Type.MUTE);
					mute_control.setValue(muted);
					
					FloatControl pan_control = (FloatControl) line.getControl(FloatControl.Type.PAN);
					pan_control.setValue(pan);
					
					long last_update = System.currentTimeMillis();
					double since_last_update = (System.currentTimeMillis() - last_update) / 1000.0d;
					
					//Wartet die angegeben Sekunden,bevor er die Musik abspielt
					while (since_last_update < seconds)
					{
						since_last_update = (System.currentTimeMillis() - last_update) / 1000.0d;
					}
					
					System.out.println("Musik wird abgespielt!");
					
					int num_read = 0;
					byte[] buf = new byte[line.getBufferSize()];
					
					while ((num_read = stream.read(buf, 0, buf.length)) >= 0)
					{
						int offset = 0;
						
						while (offset < num_read)
						{
							offset += line.write(buf, offset, num_read - offset);
						}
					}
					
					line.drain();
					line.stop();
					
				}
			}
			catch (Exception ex) { ex.printStackTrace(); }
		}
	};
 

hklaudia

Mitglied
danke! ich habs jetzt so gemacht wie du, (nur nicht mit thread) und es funktioniert :) danke danke!!

nur eine frage, was genau passiert hier (denn wenn ichs ohne dem hab dann wird wieder nichts abgespielt):

Java:
int num_read = 0;
                    byte[] buf = new byte[line.getBufferSize()];
                    
                    while ((num_read = stream.read(buf, 0, buf.length)) >= 0)
                    {
                        int offset = 0;
                        
                        while (offset < num_read)
                        {
                            offset += line.write(buf, offset, num_read - offset);
                        }
                    }
 
Zuletzt bearbeitet:
Ähnliche Java Themen
  Titel Forum Antworten Datum
Dann07 MP3 Datei abspielen funktioniert nicht Allgemeine Java-Themen 6
J Zwei Wavdateien gleichzeitig mit SourceDataLine abspielen Allgemeine Java-Themen 0
J Sound mit Clip in Linux abspielen Allgemeine Java-Themen 3
J Sound mit Hall und Equalizer abspielen lassen Allgemeine Java-Themen 6
C Raspberry Musik abspielen Allgemeine Java-Themen 4
Cromewell Interpreter-Fehler MP3 abspielen Allgemeine Java-Themen 3
RalleYTN .wma in Java abspielen Allgemeine Java-Themen 3
Tacofan Sound abspielen Allgemeine Java-Themen 1
javampir Seltsame Lücken beim Abspielen von Sound Allgemeine Java-Themen 2
X Wav-Files abspielen Allgemeine Java-Themen 2
R Wav-Dateien wiederholt abspielen Allgemeine Java-Themen 2
I Sound abspielen aus einem Sample-Array Allgemeine Java-Themen 2
D Abspielen von Audiodateien Allgemeine Java-Themen 3
M AudioClip in Spiel mehrfach in kurzer Zeit abspielen Allgemeine Java-Themen 3
P Mehrere MP3s abspielen Allgemeine Java-Themen 3
B Datentypen wav Dateien abspielen mit JMF, Clip und Player klappt nicht. Lösung Codec? Allgemeine Java-Themen 13
M Wav Datei abspielen Allgemeine Java-Themen 16
E Videos abspielen etc. Allgemeine Java-Themen 42
C Video abspielen? Allgemeine Java-Themen 2
0 Stream/Datei an VLC übergeben und abspielen Allgemeine Java-Themen 10
P MP3-Player Library: MP3 abspielen und ID-Tags auslesen Allgemeine Java-Themen 12
J mp4 dateien mit dem Java Media Framework abspielen. Allgemeine Java-Themen 2
M wav in Applikation abspielen Allgemeine Java-Themen 2
T Abspielen von Wav ruckelt massiv Allgemeine Java-Themen 8
U Sounds abspielen Allgemeine Java-Themen 3
L Musik(Töne) abspielen Allgemeine Java-Themen 10
X Mit JAVA Videos aufnehmen und abspielen. Allgemeine Java-Themen 3
S mit AudioPlayer und jLayer mp3 abspielen Allgemeine Java-Themen 7
P Vob oder Quicktime abspielen Allgemeine Java-Themen 4
R Flash-Movie abspielen! Allgemeine Java-Themen 3
M Sound anhand von gegebener Frequenz abspielen Allgemeine Java-Themen 2
G Soundsamples schnell hintereinander abspielen Allgemeine Java-Themen 4
R Mp3's abspielen Allgemeine Java-Themen 2
M Bilder abspielen mit Übergängen Allgemeine Java-Themen 12
M Sound abspielen ohne Sounddatei Allgemeine Java-Themen 5
bernd Sound abspielen? Allgemeine Java-Themen 6
K Sound abspielen in Java 1.5 Allgemeine Java-Themen 6
Ernesto95 HTTP Mit JavaScript erzeugte dynamische Webseite auslesen und nach einem Schlüsselwort durchsuchen Allgemeine Java-Themen 6
D Image bewegt sich nicht nach Klicken auf Button Allgemeine Java-Themen 15
I 2D-Grafik Vektor-Grafik über die Zwischenablage nach Adobe Illustrator transferieren Allgemeine Java-Themen 8
M Suche nach String mit unbekannten characters Allgemeine Java-Themen 53
L 2 Dimensionale ListArray Abfrage nach einem Wert suchen Allgemeine Java-Themen 5
torresbig Url nach Webseiten-Login auslesen & Daten an Webseite senden Allgemeine Java-Themen 9
R Best Practice Erfahrungswerte für eine Migration von JSF nach Angular (oder anderes JS-Framework) Allgemeine Java-Themen 1
OnDemand Ram Freigabe erfolgt nicht nach Prozessende Allgemeine Java-Themen 18
G Geotools Probleme nach PC-Wechsel Allgemeine Java-Themen 6
K Verbesserung der Laufzeit beim Sortieren von Einwohnern nach ihrem Geburtsjahr Allgemeine Java-Themen 0
E Variablen Nach Übergabe einer Variable den Constructor aufrufen Allgemeine Java-Themen 16
I In Java geschriebene Software nach Mac OS portieren Allgemeine Java-Themen 7
M TicTacToe Sound nach jedem Zug Allgemeine Java-Themen 21
I HTML / XHTML Seite nach Excel exportieren. Suche Lib Allgemeine Java-Themen 12
J4n5chmiddi Methoden Website-URL im Browser öffnen nach erfolgreicher Basisauthentifizierung in Java Allgemeine Java-Themen 12
pkm Frage nach eventuellem syntaktischen Zucker bei der Konkatenation von ArrayLists Allgemeine Java-Themen 4
Monokuma String List nach Zahlen und Worten sortieren Allgemeine Java-Themen 9
H Collections Aktuellen Index generell und nach Sortierung ausgeben Allgemeine Java-Themen 6
Kirby.exe Filename nach bestimmtem Pattern durchsuchen Allgemeine Java-Themen 5
S Wörterliste nach Wörtern mit u durchsuchen und diese auf der Konsole ausgeben lassen Allgemeine Java-Themen 33
W Pdf verwerfen, weil Checkbox nach Unterschrift geaendert wurde Allgemeine Java-Themen 5
G File not found - nach dem Kompilieren Allgemeine Java-Themen 6
S Swing Speichern nach Button-Klick Allgemeine Java-Themen 5
Meeresgott Effizientester Weg um nach der Value einer verschachtelten Map aufzulösen Allgemeine Java-Themen 5
M Java 8 nach Java 6 konvertieren Allgemeine Java-Themen 7
N Neustarten des Codes nach der Fehlermeldung Allgemeine Java-Themen 17
L Nach dem Login // Java Desktop Software Allgemeine Java-Themen 7
N Programm nach Abschluss neustarten lassen Allgemeine Java-Themen 6
F Java Code ausführen direkt nach Anmelden in Windows Allgemeine Java-Themen 2
J Jasper Reports - Compilerproblem nach Umstellung von Groovy auf Java Allgemeine Java-Themen 7
looparda Liste filtern nach Prädikaten verschiedener Typen Allgemeine Java-Themen 3
S Apache POI Filtern nach bestimmten Kriterium Allgemeine Java-Themen 1
L Korrektur nach der Berechnung vornehmen, aber wie? Allgemeine Java-Themen 11
C Config nach bestimmten Wertdurchsuchen. Allgemeine Java-Themen 2
B Suche nach einem Testprogramm für meine BA Allgemeine Java-Themen 0
B Maven Keycloak library wirft exceptions nach maven package Allgemeine Java-Themen 1
D BufferedReader bricht nach 1248 Iterationen ab Allgemeine Java-Themen 14
G Eclipse Java findet MySQL Driver nach export nicht mehr Allgemeine Java-Themen 2
H IDEA IntelliJ Java Mail funktioniert nach Export nicht mehr! Allgemeine Java-Themen 1
F Zurnung nach Buchstaben und deren Prüfung Allgemeine Java-Themen 9
M Dateien nach kopieren vergleichen Allgemeine Java-Themen 9
MiMa Sortieren nach Stellenangaben Allgemeine Java-Themen 7
L Erste Schritte Liste von Datums filter nach Monate Allgemeine Java-Themen 4
GreenTeaYT Elemente eines 2Dim LinkedList von links nach rechts ausgeben? Allgemeine Java-Themen 0
J Ausgabe von Links nach Rechts ausgeben? Allgemeine Java-Themen 2
K JAR Datei Corrupt nach Kopieren Allgemeine Java-Themen 4
The Pi 2D-Grafik Tic Tac Toe nach Gewinn rot Allgemeine Java-Themen 1
G Programm, das nach abgearbeiteter main Methode weiterläuft Allgemeine Java-Themen 72
C PDFBox: Nach RegEx ganze Zeile Allgemeine Java-Themen 4
R javax.comm --> Programm funktioniert nach Export nicht mehr Allgemeine Java-Themen 0
L Suche nach CalDav Server API Allgemeine Java-Themen 0
K Java ruft Methoden nicht der Reihe nach auf Allgemeine Java-Themen 14
T Textarea nach nur 1 wort durchsuchen Allgemeine Java-Themen 3
D Methoden Buttons erscheinen doppelt nach Wiederholung in Schleife Allgemeine Java-Themen 1
I nach Image Load in ListView, kann Ordner nicht mehr gelöscht werden Allgemeine Java-Themen 1
K Auf einer Website nach einem String suchen Allgemeine Java-Themen 5
C Eclipse OutOfMemory nach dem exportieren Allgemeine Java-Themen 4
D Erste Schritte Array von einer forschleife nach ausserhalb trasferieren Allgemeine Java-Themen 3
VfL_Freak Große und seltsame Probleme nach Java-Update auf V1.8.0_91 Allgemeine Java-Themen 3
heyluigi Random Integer Array Ausgabe nach Größe sortieren Allgemeine Java-Themen 6
D Java Datei nach Eclipse Export funktioniert nicht Allgemeine Java-Themen 0
B Bild aus Jar kann nach Export nicht mehr gefunden werden Allgemeine Java-Themen 13
B Umgebungsvariable Anpassen der Umgebungsvariablen nach Java-Update ? Allgemeine Java-Themen 14

Ähnliche Java Themen

Neue Themen


Oben