Wav-Sound nur unter Window

CToJava

Mitglied
Hallo liebe Java-Freaks und blutige Anfänger,

ich bin Java Anfänger und hab schon Erfahrung mit C und der "besten modernen prozenduralen Programmiersprache im Basic-Sektor" -PureBasic(teilweise schneller und kleinere Programme als C ,kein zusätzliches Framework).

Aber genug -ich will Java lernen und bin auch schon "ganz schön weit" ,habe mir das Buch Java von Kopf bis Fuß gekauft, mit dem ich jetzt auch fast duch bin.

Nun zu meiner Frage: Java kann ja sehr gut mit Midi umgehen, aber wie sieht es mit Mp3,Wav, etc. aus?
-> Ich schon (nach langer Suche) etwas zur Wav-Wiedergabe gefunden.
-> Habe das ganze dann zu einem GUI-Programm zusammen gebastelt.
-> Habe hinbekommen das es funktioniert. (Programm spielt *.wav unter Windows ab.)
-> Jetzt mein Problem: Java ist ja total Platformunabhängig und ich teste daher meine unter Windows programmierten Java-Programme auch unter Linux (Distr.: Ubuntu mit JDK 1.6).
------> Hatte damit bis jetzt auch noch keine Probleme, aber das Wav-Programm scheint nur unter Window zu funktionieren (trotz Java).

Wav-Programm:

Java:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;
import java.io.File;
import javax.sound.sampled.*;

/**
  *
  * Beschreibung
  *
  * @version 1.0 vom 01.01.2010
  * @author
  */

public class SoundTest extends JFrame {
  // Anfang Attribute
  private JButton jButton1 = new JButton();
  private JButton jButton2 = new JButton();
  File soundFile;
  AudioInputStream sound;
  DataLine.Info info;
  Clip clip;
  String Fili;
  
  private JFileChooser jfco = new JFileChooser();
  // Ende Attribute
  public void starten() {
    Fili=jfcoOpenFilename();
  
    try{
    soundFile = new File(Fili);
    sound = AudioSystem.getAudioInputStream(soundFile);
    info = new DataLine.Info(Clip.class, sound.getFormat());
    clip = (Clip) AudioSystem.getLine(info);
    clip.open(sound);

      } catch (Exception e) {
      System.out.println("So ein Mist!");
    }
  }

  public SoundTest(String title) {
    // Frame-Initialisierung
    super(title);
    setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
    int frameWidth = 193;
    int frameHeight = 88;
    setSize(frameWidth, frameHeight);
    Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
    int x = (d.width - getSize().width) / 2;
    int y = (d.height - getSize().height) / 2;
    setLocation(x, y);
    Container cp = getContentPane();
    cp.setLayout(null);
    cp.setBackground(Color.YELLOW);

    // Anfang Komponenten

    jButton1.setBounds(8, 16, 75, 25);
    jButton1.setText("Play");
    jButton1.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent evt) {
        jButton1_ActionPerformed(evt);
      }
    });
    cp.add(jButton1);
    jButton2.setBounds(96, 16, 75, 25);
    jButton2.setText("Stop");
    jButton2.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent evt) {
        jButton2_ActionPerformed(evt);
      }
    });
    cp.add(jButton2);
    // Ende Komponenten

    setResizable(false);
    setVisible(true);
    starten();
  }

  // Anfang Methoden
  public void jButton1_ActionPerformed(ActionEvent evt) {
    try {
       clip.start();
    } catch (Exception ex) {
      System.out.println("hohoho!!!");
    }
  }

  public void jButton2_ActionPerformed(ActionEvent evt) {
     try {
       clip.stop();
    } catch (Exception ex) {
      System.out.println("hohoho!!!");
    }
  }

  public String jfcoOpenFilename() {
    jfco.setDialogTitle("Öffne Datei");
    if (jfco.showOpenDialog(this) == JFileChooser.APPROVE_OPTION) {
      return jfco.getSelectedFile().getPath();
    } else {
      return null;
    }
  }

   // Ende Methoden

  public static void main(String[] args) {

    new SoundTest("SoundTest");
  }
}

Wie bringe ich das Wav-Programm nun unter Linux zum laufen?
 
S

Spacerat

Gast
Tja... gerade beim Sound ist die Platformunabhängigkeit nur relativ. Dafür kann man aber nicht wirklich nur die JVM verantwortlich machen. Unter Unix-/Linux-Derivaten z.B. hat man ein Device-Mapping beruhend auf einem Verzeichnis ([c]/dev[/c]). Dieses Mapping hat sich soweit ich das verfolgen kann in letzter Zeit des öfteren verändert. Anno dazumal bekam man mit [c]/dev/sound[/c] stets einen Link, mit welchem man das Default-Sound-Device ansprechen konnte. Heute scheinen immer mehr Unix-/Linux-Derivate dazu überzugehen, diesen bzw. und / oder auch [c]/dev/midi[/c] einfach wegzulassen. Die JVM aber scheint sie weiterhin zu benötigen, weil sie nur so an das Standartaudiodevice kommt. Natürlich kann die JVM auch nur auf die Soundhardware zugreifen, wenn dafür die Treiber des jeweiligen BS korrekt installiert wurden. Wurden diese installiert, schau also mal nach, ob ein Link [c]/dev/sound[/c] existiert und wenn er existiert ob er auf ein korrekt installiertes SoundDevice (also nicht unbedingt auf [c]/dev/null[/c]) zeigt.
 
Zuletzt bearbeitet von einem Moderator:

CToJava

Mitglied
Danke erstmal für deine Antwort Spacerat.

Also im /dev -Verzeichnis unter Linux scheint es bei mir keinen Ordner midi oder sound zugeben.
Es gibt aber einen Ordner /dev/snd/ .
Die Midiwiedergabe von einem Javaprogramm aus funktioniert aber auch unter Linux.

Das Wav-Programm wirft mir unter Linux aber folgenden Exception-StackTrace aus :

javax.sound.sampled.LineUnavailableException: Failed to allocate clip data: Requested Buffer too large.
at com.sun.media.sound.MixerClip.implOpen(MixerClip.java:561)
at com.sun.media.sound.MixerClip.open(MixerClip.java:165)
at com.sun.media.sound.MixerClip.open(MixerClip.java:256)
at SoundTest.starten(SoundTest.java:36)
at SoundTest.<init>(SoundTest.java:80)
at SoundTest.main(SoundTest.java:113)

... unter Windows kam es zu keiner Exception / Warum scheint der Buffer zu groß?

++++I need help++++++
 
Zuletzt bearbeitet:
S

Spacerat

Gast
Genau das meine ich mit geändert. [c]/dev/sound[/c] sollte kein ordner sondern der direkte Link zum Device sein. Die Exception ist allerdings auch für mich neu und ich müsste auch erst suchen, warum du sie bekommst.
 

CToJava

Mitglied
Halllöööööle ich bin's wieder.

Ich habe in den tiefen des Netz mit der Suchmaschine meines Vertrauens etwas besseres zur Lösung des Wav-Programms gefunden.

Soviel habe ich erfahren :

- Man muss einen externen Buffer angeben damit ein Unix basierendes Betriebssystem nicht aus den Fugen gerät.
(Warum das so ist? - Habe keine Ahnung! )

Das Wav-Programm habe ich jetzt wie folgt abgeändert:

Java:
import java.awt.*;

import java.awt.event.*;

import javax.swing.*;

import javax.swing.event.*;

import java.io.File;
import java.io.IOException;

import javax.sound.sampled.*;



/**

  *

  * Beschreibung

  *

  * @version 1.0 vom 01.01.2010

  * @author du nicht!!!

  */



public class SoundTest2 extends JFrame {

  // Anfang Attribute

  private JButton jButton1 = new JButton();

  private JButton jButton2 = new JButton();
  private static final int EXTERNAL_BUFFER_SIZE = 128000;

  File soundFile;

  AudioInputStream sound;
  AudioFormat audioFormat;
  SourceDataLine line;

  DataLine.Info info;

  String Fili;
  jetztRockts Rockt;
  Thread rock;
  int weiter = 0;

  

  private JFileChooser jfco = new JFileChooser();

  // Ende Attribute

  public void starten() {

    Fili=jfcoOpenFilename();

  

    try{

    soundFile = new File(Fili);

    sound = AudioSystem.getAudioInputStream(soundFile);
    audioFormat = sound.getFormat();
    line = null;

    info = new DataLine.Info(SourceDataLine.class,audioFormat);
    line = (SourceDataLine) AudioSystem.getLine(info);
    line.open(audioFormat);





      } catch (Exception e) {

      e.printStackTrace();

    }
   Rockt = new jetztRockts();
   rock = new Thread(Rockt);  

  }



  public SoundTest2(String title) {

    // Frame-Initialisierung

    super(title);

    setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);

    int frameWidth = 193;

    int frameHeight = 88;

    setSize(frameWidth, frameHeight);

    Dimension d = Toolkit.getDefaultToolkit().getScreenSize();

    int x = (d.width - getSize().width) / 2;

    int y = (d.height - getSize().height) / 2;

    setLocation(x, y);

    Container cp = getContentPane();

    cp.setLayout(null);

    cp.setBackground(Color.YELLOW);



    // Anfang Komponenten



    jButton1.setBounds(8, 16, 75, 25);

    jButton1.setText("Play");

    jButton1.addActionListener(new ActionListener() {

      public void actionPerformed(ActionEvent evt) {

        jButton1_ActionPerformed(evt);

      }

    });

    cp.add(jButton1);

    jButton2.setBounds(96, 16, 75, 25);

    jButton2.setText("Stop");

    jButton2.addActionListener(new ActionListener() {

      public void actionPerformed(ActionEvent evt) {

        jButton2_ActionPerformed(evt);

      }

    });

    cp.add(jButton2);

    // Ende Komponenten



    setResizable(false);

    setVisible(true);

    starten();

  }



  // Anfang Methoden
public class jetztRockts implements Runnable{
  public void run() {
    int	nBytesRead = 0;

		byte[]	abData = new byte[EXTERNAL_BUFFER_SIZE];

		while (nBytesRead != -1)

		{

			try

			{

				nBytesRead = sound.read(abData, 0, abData.length);

			}

			catch (IOException e)

			{

				e.printStackTrace();

			}

			if (nBytesRead >= 0)

			{

				int nBytesWritten = line.write(abData, 0, nBytesRead);

			}

		}

  }
}


  public void jButton1_ActionPerformed(ActionEvent evt) {
    try {
       if (weiter == 1) {
        starten();
       }
       line.start();
       rock.start();
       weiter = 0;      


    } catch (Exception ex) {

      System.out.println("hohoho!!!");

    }

  }



  public void jButton2_ActionPerformed(ActionEvent evt) {

     try {

       line.stop();
       weiter=1;

    } catch (Exception ex) {

      System.out.println("hohoho!!!");

    }

  }



  public String jfcoOpenFilename() {

    jfco.setDialogTitle("�ffne Datei");

    if (jfco.showOpenDialog(this) == JFileChooser.APPROVE_OPTION) {

      return jfco.getSelectedFile().getPath();

    } else {

      return null;

    }

  }



   // Ende Methoden



  public static void main(String[] args) {



    new SoundTest2("SoundTest");
    

  }

}

...ist sicher nicht die idealste Lösung, aber schon mal ein Anfang (Es läuft unter Linux - juhu!!!)
 
Zuletzt bearbeitet:
S

Spacerat

Gast
Juhu... Kultig... die Seite wird erstmal gebookmarked. Kann ja sein, das ich mal auf ein ähnliches Problem stosse.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
Pinhg Sound in Greenfoot Code einbinden Java Basics - Anfänger-Themen 2
SpigBin Sound einbinden bei Funktionsaufruf Java Basics - Anfänger-Themen 4
R MediaPlayer: Sound hat Verzögerung Java Basics - Anfänger-Themen 2
Dann07 Sound wird nicht abgespielt Java Basics - Anfänger-Themen 25
B Eclipse spielt Sound nicht ab Java Basics - Anfänger-Themen 12
CptK Erste Schritte Sound-Datei einbinden Java Basics - Anfänger-Themen 2
R Sound abspielen Java Basics - Anfänger-Themen 9
N kein Sound beim Öffnen der jar-Datei, in Eclipse schon Java Basics - Anfänger-Themen 1
S Sound stoppen und nach Pause wieder abspielen Java Basics - Anfänger-Themen 6
U Sound einfügen Java Basics - Anfänger-Themen 6
Anfänger2011 Input/Output Sound abspielen - ICH VERZWEIFLE!!!! Java Basics - Anfänger-Themen 24
K Sound speichern Java Basics - Anfänger-Themen 3
J Sound-Wiedergabe Java Basics - Anfänger-Themen 6
P Java Sound midi Java Basics - Anfänger-Themen 3
D Sound abspielen, wo muss die .wav liegen Java Basics - Anfänger-Themen 3
R Erste Schritte Exception bei erstellen von Java Sound Java Basics - Anfänger-Themen 23
2 Input/Output Sound aufnehmen/abspielen? Java Basics - Anfänger-Themen 2
SheldoN Sound abspielen nach Buttonklick in Applets Java Basics - Anfänger-Themen 17
J WAVE-file mit Java Sound erstellen Java Basics - Anfänger-Themen 9
V Sound wird nicht abgspielt Java Basics - Anfänger-Themen 8
F sound nur abspielen, wenn er nicht läuft Java Basics - Anfänger-Themen 6
B Sound-Wiedergabe Java Basics - Anfänger-Themen 4
F Spiel geht nicht mehr nach neuer Klasse Sound Java Basics - Anfänger-Themen 18
S kein sound? Java Basics - Anfänger-Themen 3
A Jlayer: Wie sound stoppen der in einem Thread läuft Java Basics - Anfänger-Themen 7
M Kein Sound in der .jar, davor schon Java Basics - Anfänger-Themen 6
M sound abspielen Java Basics - Anfänger-Themen 3
C Sound abspielen Java Basics - Anfänger-Themen 6
R Problem mit Sound Java Basics - Anfänger-Themen 5
R Sound Problem Java Basics - Anfänger-Themen 25
P Sound in Applikation (nicht Applet) Java Basics - Anfänger-Themen 5
Developer_X Java can't play mid sound? Java Basics - Anfänger-Themen 16
K kein Sound beim Öffnen der jar-Datei, in Eclipse schon Java Basics - Anfänger-Themen 2
X Benutzung von Mixer (Sound, nicht Küche!) Java Basics - Anfänger-Themen 2
V Serialisieren einer ShortMessage (javax.sound.midi) Java Basics - Anfänger-Themen 5
S Java Sound mit 24 bit/96 kHz Audio? Java Basics - Anfänger-Themen 12
0 Problem mit Bild und Sound im Applet Java Basics - Anfänger-Themen 12
D Sound in Frames möglich? EDIT Class Clip Java Basics - Anfänger-Themen 5
K Sound stoppt nicht Java Basics - Anfänger-Themen 3
M Sound Abspielen Java Basics - Anfänger-Themen 9
N Java Sound - Unsupported control type Java Basics - Anfänger-Themen 2
F Sound Interface Richtig implementieren Java Basics - Anfänger-Themen 4
G Sound/Endlosschleife/Abbruchproblem Java Basics - Anfänger-Themen 3
B Wo finde ich die Klasse javax.sound.sampled.AudioSystem Java Basics - Anfänger-Themen 7
R Sound wird im Applet nicht abgespielt Java Basics - Anfänger-Themen 13
G Sound bei buttonklick abspielen Java Basics - Anfänger-Themen 7
B Sound einbinden und abspielen Java Basics - Anfänger-Themen 9
D .wav Sound in einer simplen Applikation abspielen Java Basics - Anfänger-Themen 3
K Java Sound Application Java Basics - Anfänger-Themen 2
G Sound einbinden Java Basics - Anfänger-Themen 2
G sound in applikation Java Basics - Anfänger-Themen 7
G Sound Java Basics - Anfänger-Themen 13
megachucky wo gibts icons, images und sound dateien zum download? Java Basics - Anfänger-Themen 2
M Wo den Ordner javafx-sdk-21.0.2 unter Linux ablegen? Java Basics - Anfänger-Themen 5
E Audio Datei unter Bedingungen ausführen Java Basics - Anfänger-Themen 19
D Jar Datei startet unter Linux nicht Java Basics - Anfänger-Themen 3
U Beispiel Methode size() vom "Collection"-interface... Wie kann man sichtbar machen, was die Methode unter der Haube macht? Java Basics - Anfänger-Themen 8
nbergmann Umgebungsvariablen einstellen unter Windows 7 klappt nicht Java Basics - Anfänger-Themen 2
nbergmann Installation unter jdk.java.net: Keine ZIP-Datei zum entpacken Java Basics - Anfänger-Themen 2
thor_norsk Datentypen unter Java Java Basics - Anfänger-Themen 3
R Array mit Unter- und Obergrenze ganze Zahlen dazwischen erscheinen nicht Java Basics - Anfänger-Themen 1
U BestPractise für Deployment unter Windows gesucht Java Basics - Anfänger-Themen 12
W Random Zahl unter Berücksichtung eines Durchschnitts Java Basics - Anfänger-Themen 7
B Java Mail -> Mail senden, ist aber nich in IMAP unter "Gesendet" Java Basics - Anfänger-Themen 3
D Wert des Arrays unter Bedingungen ändern Java Basics - Anfänger-Themen 1
M Speichern unter. Java Basics - Anfänger-Themen 11
L Linux Befehle unter Windows in Eclipse ausführen Java Basics - Anfänger-Themen 3
J ImagaIO funktioniert nicht unter Ubuntu Java Basics - Anfänger-Themen 23
E Knoten eines Baumes unter Bedinung zählen Java Basics - Anfänger-Themen 2
J Punkt auf,über,unter oder zwischen 2 Geraden Java Basics - Anfänger-Themen 14
B Klassen Alle Unter-Objekte durchlaufen in der Hauptklasse Java Basics - Anfänger-Themen 10
F Console command unter Linux Java Basics - Anfänger-Themen 7
C GUI Programmierung unter Windows mit Java womit? Java Basics - Anfänger-Themen 11
D Einen Wert unter einen ActionListener weitergeben Java Basics - Anfänger-Themen 1
S Compiler-Fehler javac hat Probleme mit Paketen unter OSX Java Basics - Anfänger-Themen 2
N Eclipse - eigene Icons unter ClassPath Resource Java Basics - Anfänger-Themen 0
G Erste Schritte Unter Mac "Path" anpassen .bash_profile? Java Basics - Anfänger-Themen 5
C Java stellt unter Windows keine Umlaute dar Java Basics - Anfänger-Themen 9
J Ordner unter Windows Verstecken Java Basics - Anfänger-Themen 2
F Erste Schritte Unter Windows programmieren und dann auf Linux laufen lassen Java Basics - Anfänger-Themen 4
Z Gleiches Verzeichnis für class und java unter Windows Muss? Java Basics - Anfänger-Themen 11
Bluedaishi Dateien Lassen sich unter windows nicht löschen Java Basics - Anfänger-Themen 8
W Datei wird aus resources unter Windows nicht kopiert Java Basics - Anfänger-Themen 1
S Datei einlesen - Dateipfad unter Linux anpassen Java Basics - Anfänger-Themen 12
A Java IDE unter 400mb?? Java Basics - Anfänger-Themen 3
M JSF Projekt erstellen unter Eclipse Java Basics - Anfänger-Themen 7
A .jar unter Linux nutzen Java Basics - Anfänger-Themen 2
G Java unter Mac = schlecht | Windows = gut? Java Basics - Anfänger-Themen 14
M datei startet unter windows 7 nicht Java Basics - Anfänger-Themen 12
N .jar läuft nicht unter Windows 7 Starter Java Basics - Anfänger-Themen 4
F Exportieren als ausführbare Jar-Datei unter Ubuntu nicht möglich Java Basics - Anfänger-Themen 17
M in jTable schreiben unter Bedingung Java Basics - Anfänger-Themen 3
FrozeTee .java Dateien unter Windows 7 werden nicht angezeigt Java Basics - Anfänger-Themen 7
J Erste Schritte Speichern / Speichern unter / title Frame Java Basics - Anfänger-Themen 5
S Erste Schritte import für andere Klassenfiles verfügbar machen? (Java unter Eclipse) Java Basics - Anfänger-Themen 8
A Probleme mit JAR-Datei-Erstellung unter Eclipse Java Basics - Anfänger-Themen 23
S Umgebungsvariablen unter Windows XP Java Basics - Anfänger-Themen 6
S Classpath Libraries werden unter Linux nicht erkannt Java Basics - Anfänger-Themen 5
H speichern unter (JFileChooser) Java Basics - Anfänger-Themen 2
B Javadoc-Befehl unter Ubuntu Java Basics - Anfänger-Themen 2

Ähnliche Java Themen

Neue Themen


Oben