# Sound in Frames einbinden



## Rodabujean (27. März 2006)

Hallo,

ich habe ein Problem, und zwar hab ich unter Vcafe ein Empty Project erstellt, und möchte nun Sound einfügen ...
Über die getCodebase Methode klappt es nicht ... und das was man in den java Büchern dazu findet ist auch sehr dürftig .. könnt ihr mir weiterhelfen?


----------



## flashray (27. März 2006)

Hallo Rodabujean,

wenn du nur so ein Beep geräusch meinst. Schau mal hier nach:

http://www.galileocomputing.de/open...sel14_001.htm#Rxx747java14001040004C81F04F100

Möchtest du einfach nur eine Sounddatei abspielen, hast du dir ein simples Beispiel

http://javaalmanac.com/egs/java.applet/LoadAudioApp.html

Für weitere Info:
Onlinebuch: Java ist auch eine Insel:
http://www.galileocomputing.de/open...sel19_007.htm#Rxx747java19007040007DB1F048100
Sun Java Tutorial:
http://java.sun.com/docs/books/tutorial/sound/index.html
Codebeispiele: Java Almanac
http://javaalmanac.com/egs/javax.sound.midi/pkg.html
http://javaalmanac.com/egs/javax.sound.sampled/pkg.html

Für komplexere Sachen: Java Media FrameWork
http://java.sun.com/products/java-media/jmf/
http://java.sun.com/products/java-media/jmf/2.1.1/guide/JMFTOC.html



			
				Rodabujean hat gesagt.:
			
		

> das was man in den java Büchern dazu findet ist auch sehr dürftig


Das Javaangebot im Web ist alles andere als dürftig, man muss nur wissen wo man zu suchen hat  .

Vg Erdal


----------



## Rodabujean (27. März 2006)

dank dir ... aber sag ma kann ich anstatt ner URL auch nen directory angeben?
z.B C:/sound.au ?
kann es zuhause grade leider nich testen, hab das projekt aufm anderen rechner


----------



## flashray (27. März 2006)

Ja, das geht natürlich auch.

Schau mal hier:
http://www.galileocomputing.de/open...sel19_007.htm#Rxx747java19007040007DB1F048100

Hinweis: Eine URL ist nicht zwingend eine Webadresse.

Vg Erdal


----------



## Rodabujean (28. März 2006)

mhh ... ehrlich gesagt bekomm ichs nicht hin ... hab nun verschiedene Varianten ausprobiert ... ein Freund meinte mit getClass() is das ganz einfach ...  aber nicht, weil der compiler dann meckert.

Mit den Links bzw den Informationen von da komm ich ehrlich gesagt auch nicht weiter ... hat jemand vllt. ein konkretes Bsp.?  also in einem quellcode die soundeinbindung?


----------



## flashray (28. März 2006)

Hallo,

hier mal ein MiniPlayer:


```
import java.applet.Applet;
import java.applet.AudioClip;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.net.URL;

import javax.swing.JButton;
import javax.swing.JFrame;

public class SoundExample extends JFrame implements ActionListener {

	JButton b1 = new JButton("Play");

	JButton b2 = new JButton("Stop");

	private AudioClip clip;

	public void play() {
		try {
			URL u = new URL("file:/C:/Sound.wav");

			clip = Applet.newAudioClip(u);
			clip.play();
		} catch (Exception e) {
			System.out.println(e.getMessage());
		}
	}

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

	public SoundExample() {
		b1.addActionListener(this);
		b2.addActionListener(this);

		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		this.setAlwaysOnTop(true);
		this.setLayout(new FlowLayout());
		this.add(b1);
		this.add(b2);

		this.pack();

		this.setVisible(true);
	}

	public static void main(String[] args) {
		new SoundExample();
	}

	public void actionPerformed(ActionEvent e) {
		if (e.getActionCommand().equals("Play"))
			play();
		else
			stop();

	}
}
```

Vg Erdal


----------



## Rodabujean (28. März 2006)

werd ich morgen ma testen... schade das das so viel komplizierter als bei nem Applet sein muss :|


----------



## flashray (28. März 2006)

Hallö Rodabujean,

nein natürlich ist nicht komplizierter. Ich hatte einfach nur einwenig das Beispiel ausgebaut. Hier öffnet sich nun ein Frame. Im Hintergrund wird ein beliebiger Sound abgespielt und fortwährend wiederholt. Mit play() wird der Sund nur einmal abgespielt, mit loop() wird immer wiederholt.


```
import java.applet.Applet;
import java.applet.AudioClip;
import java.net.URL;

import javax.swing.JFrame;

public class FramewithSound {

	public static void main(String[] args) {
		JFrame frame = new JFrame();
		frame.setSize(200, 300);
		try {
			URL u = new URL("file:/C:/Sound.wav");

			AudioClip clip = Applet.newAudioClip(u);
			// clip.play(); // Einmal abspielen
			clip.loop(); // Endlosschleife
		} catch (Exception e) {
		}
		frame.setVisible(true);
	}
}
```

Vg Erdal


----------



## Rodabujean (29. März 2006)

Also ehrlich gesagt, haut das immernoch nicht hin ...
kannst du mir mal sagen, wo genau ich was wo einfügen muss?

hier der quellcode :

```
import java.awt.*;
import java.io.*;
import java.applet.Applet;
import java.net.*;
import sun.audio.*; 
import symantec.itools.awt.Label3D;
import javax.swing.JOptionPane;
import java.text.*;
import java.applet.AudioClip;
import java.net.URL;
import java.net.MalformedURLException;

public class Frame1 extends Frame
{
   BufferedReader in = null;
   PrintWriter out = null;
   BufferedReader eingabe = null;
   Socket client = null;
   //Thread writeThread;
   
   writeThread write = null;
   String text = null;
   int port = 0;
   String host = null;
   String nick = null;
   

	public Frame1()
	{
		// This code is automatically generated by Visual Cafe when you add
		// components to the visual environment. It instantiates and initializes
		// the components. To modify the code, only use code syntax that matches
		// what Visual Cafe can generate, or Visual Cafe may be unable to back
		// parse your Java file into its visual environment.
		//{{INIT_CONTROLS
		
		
        setLayout(null);
		setBackground(java.awt.Color.black);
		setSize(451,362);
		setVisible(false);
		add(tf1);
		tf1.setBackground(java.awt.Color.white);
		tf1.setForeground(java.awt.Color.darkGray);
		tf1.setBounds(12,84,132,24);
		add(tf2);
		tf2.setBackground(java.awt.Color.white);
		tf2.setBounds(12,120,132,24);
		add(tf3);
		tf3.setBackground(java.awt.Color.white);
		tf3.setBounds(12,156,132,24);
		add(Tausgabe);
		Tausgabe.setBackground(java.awt.Color.white);
		Tausgabe.setBounds(12,228,228,120);
		button1.setLabel("Verbinden");
		add(button1);
		button1.setBackground(java.awt.Color.lightGray);
		button1.setBounds(324,120,98,25);
		button2.setLabel("Senden");
		add(button2);
		button2.setBackground(java.awt.Color.lightGray);
		button2.setBounds(324,192,98,25);
		panel3.setLayout(null);
		add(panel3);
		panel3.setBackground(java.awt.Color.orange);
		panel3.setForeground(java.awt.Color.orange);
		panel3.setBounds(108,12,12,37);
		button3.setLabel("Beenden");
		add(button3);
		button3.setBackground(java.awt.Color.lightGray);
		button3.setBounds(324,156,98,25);
		add(text1);
		text1.setBackground(java.awt.Color.white);
		text1.setBounds(12,192,132,24);
		label1.setText("IP-Nummer");
		add(label1);
		label1.setForeground(java.awt.Color.orange);
		label1.setBounds(156,84,75,26);
		label2.setText("Port");
		add(label2);
		label2.setForeground(java.awt.Color.orange);
		label2.setBounds(156,120,48,24);
		label3.setText("Nickname");
		add(label3);
		label3.setForeground(java.awt.Color.orange);
		label3.setBounds(156,156,60,24);
		label4.setText("Nachricht eingeben");
		add(label4);
		label4.setForeground(java.awt.Color.orange);
		label4.setBounds(156,192,108,24);
		panel1.setLayout(null);
		add(panel1);
		panel1.setBackground(java.awt.Color.orange);
		panel1.setBounds(0,48,447,12);
		panel2.setLayout(null);
		add(panel2);
		panel2.setBackground(java.awt.Color.orange);
		panel2.setBounds(0,0,447,12);
		label5.setText("Chat");
		label5.setAlignment(java.awt.Label.CENTER);
		add(label5);
		label5.setForeground(java.awt.Color.white);
		label5.setFont(new Font("Dialog", Font.PLAIN, 40));
		label5.setBounds(168,12,96,36);
		panel4.setLayout(null);
		add(panel4);
		panel4.setBackground(java.awt.Color.orange);
		panel4.setForeground(java.awt.Color.orange);
		panel4.setBounds(312,12,12,37);
		panel5.setLayout(null);
		add(panel5);
		panel5.setBackground(java.awt.Color.orange);
		panel5.setForeground(java.awt.Color.orange);
		panel5.setBounds(48,12,12,37);
		panel6.setLayout(null);
		add(panel6);
		panel6.setBackground(java.awt.Color.orange);
		panel6.setForeground(java.awt.Color.orange);
		panel6.setBounds(372,12,12,37);
		button5.setLabel("?");
		add(button5);
		button5.setBackground(java.awt.Color.lightGray);
		button5.setBounds(240,84,12,24);
		button6.setLabel("?");
		add(button6);
		button6.setBackground(java.awt.Color.lightGray);
		button6.setBounds(204,120,12,24);
		button7.setLabel("?");
		add(button7);
		button7.setBackground(java.awt.Color.lightGray);
		button7.setBounds(228,156,12,24);
		button4.setLabel("?");
		add(button4);
		button4.setBackground(java.awt.Color.lightGray);
		button4.setBounds(276,192,12,24);
		button8.setLabel("Anleitung");
		add(button8);
		button8.setBackground(java.awt.Color.lightGray);
		button8.setBounds(324,228,98,25);
		label6.setText("©PhantomFreak");
		add(label6);
		label6.setBackground(java.awt.Color.white);
		label6.setBounds(348,348,93,12);
		setTitle("A Simple Frame");
		//}}

		//{{INIT_MENUS
		//}}

		//{{REGISTER_LISTENERS
		SymWindow aSymWindow = new SymWindow();
		this.addWindowListener(aSymWindow);
		SymAction lSymAction = new SymAction();
		button1.addActionListener(lSymAction);
		button2.addActionListener(lSymAction);
		button3.addActionListener(lSymAction);
		button5.addActionListener(lSymAction);
		button6.addActionListener(lSymAction);
		button7.addActionListener(lSymAction);
		button4.addActionListener(lSymAction);
		button8.addActionListener(lSymAction);
		//}}
	}
	
	public Frame1(String title)
	{
		this();
		setTitle(title);
	}

    /**
     * Shows or hides the component depending on the boolean flag b.
     * @param b  if true, show the component; otherwise, hide the component.
     * @see java.awt.Component#isVisible
     */
    public void setVisible(boolean b)
	{
		if(b)
		{
			setLocation(50, 50);
		}
		super.setVisible(b);
	}

	static public void main(String args[])
	{
		(new Frame1()).setVisible(true);
	}
	
	public void addNotify()
	{
	    // Record the size of the window prior to calling parents addNotify.
	    Dimension d = getSize();
	    
		super.addNotify();

		if (fComponentsAdjusted)
			return;

		// Adjust components according to the insets
		Insets insets = getInsets();
		setSize(insets.left + insets.right + d.width, insets.top + insets.bottom + d.height);
		Component components[] = getComponents();
		for (int i = 0; i < components.length; i++)
		{
			Point p = components[i].getLocation();
			p.translate(insets.left, insets.top);
			components[i].setLocation(p);
		}
		fComponentsAdjusted = true;
	}
	

    // Used for addNotify check.
	boolean fComponentsAdjusted = false;

	//{{DECLARE_CONTROLS
	java.awt.TextField tf1 = new java.awt.TextField();
	java.awt.TextField tf2 = new java.awt.TextField();
	java.awt.TextField tf3 = new java.awt.TextField();
	java.awt.TextArea Tausgabe = new java.awt.TextArea();
	java.awt.Button button1 = new java.awt.Button();
	java.awt.Button button2 = new java.awt.Button();
	java.awt.Panel panel3 = new java.awt.Panel();
	java.awt.Button button3 = new java.awt.Button();
	java.awt.TextField text1 = new java.awt.TextField();
	java.awt.Label label1 = new java.awt.Label();
	java.awt.Label label2 = new java.awt.Label();
	java.awt.Label label3 = new java.awt.Label();
	java.awt.Label label4 = new java.awt.Label();
	java.awt.Panel panel1 = new java.awt.Panel();
	java.awt.Panel panel2 = new java.awt.Panel();
	java.awt.Label label5 = new java.awt.Label();
	java.awt.Panel panel4 = new java.awt.Panel();
	java.awt.Panel panel5 = new java.awt.Panel();
	java.awt.Panel panel6 = new java.awt.Panel();
	java.awt.Button button5 = new java.awt.Button();
	java.awt.Button button6 = new java.awt.Button();
	java.awt.Button button7 = new java.awt.Button();
	java.awt.Button button4 = new java.awt.Button();
	java.awt.Button button8 = new java.awt.Button();
	java.awt.Label label6 = new java.awt.Label();
	//}}

	//{{DECLARE_MENUS
	//}}

	class SymWindow extends java.awt.event.WindowAdapter
	{
		public void windowClosing(java.awt.event.WindowEvent event)
		{
			Object object = event.getSource();
			if (object == Frame1.this)
				Frame1_WindowClosing(event);
		}
	}
	
	void Frame1_WindowClosing(java.awt.event.WindowEvent event)
	{
		setVisible(false);		 // hide the Frame
	}

	class SymAction implements java.awt.event.ActionListener
	{
		public void actionPerformed(java.awt.event.ActionEvent event)
		{
			Object object = event.getSource();
			if (object == button1)
				button1_ActionPerformed(event);
			else if (object == button2)
				button2_ActionPerformed(event);
			else if (object == button3)
				button3_ActionPerformed(event);
			if (object == button5)
				button5_ActionPerformed(event);
			else if (object == button6)
				button6_ActionPerformed(event);
			else if (object == button7)
				button7_ActionPerformed(event);
			else if (object == button4)
				button4_ActionPerformed(event);
			else if (object == button8)
				button8_ActionPerformed(event);
			
		}
	}

	void button1_ActionPerformed(java.awt.event.ActionEvent event)
	{
		// to do: code goes here.
		try

       {
           
           eingabe = new BufferedReader(new InputStreamReader(System.in));
           host = (tf1.getText());//"192.168.110.106";//"wst.no-ip.com";
           port = Integer.parseInt(tf2.getText());//8765;//6000
           nick = (tf3.getText())  ; //Den eigenen Namen einfügen
           client = new Socket(host, port);
           System.out.println("\nVerbindung mit " + host + " auf Port " + port + " hergestellt ...");
           //Tausgabe.setText("\nVerbindung mit " + host + " auf Port " + port + "   hergestellt ...");
           in = new BufferedReader(new InputStreamReader(client.getInputStream()));
           out = new PrintWriter(client.getOutputStream(), true);
           write = new writeThread(in);
           write.start();
       }
       catch (IOException e)
       {
           // nichts
       }
			 
	}

	void button2_ActionPerformed(java.awt.event.ActionEvent event)
	{
		// to do: code goes here.
		try

       {
           text=text1.getText();
           //connect.play();
           //System.out.println(nick+": "+text);
           Tausgabe.append(nick+": "+text+"\n");
           //connect.play();
       }
       catch (Exception e)
       {
           // nichts
       }
			 
	}

	void button3_ActionPerformed(java.awt.event.ActionEvent event)
	{
		// to do: code goes here.
		try

       {
           client.close();
           eingabe.close();
           out.close();
       }
       catch (IOException e)
       {
           // nichts
       }
} class writeThread extends Thread

   {
       BufferedReader in = null;

   
       public writeThread(BufferedReader in)
       {
           this.in = in;
       }
   
       public void run()
       {
           try
           {
               while ((text = in.readLine())!=null)
               {
                   Tausgabe.append(text+"\n");
               }
           }catch (IOException e)
           {
               // nichts
           }
       }
  }

class chat
{
}
```

danke schonma im vorraus


----------



## flashray (29. März 2006)

Hallihallo,

einfach den folgenden Code ganz oben in den Konstruktor der Klasse hinzufügen. Bei mir funktioniert es ohne Probleme. Auf meinem PC liegt eine wav Datei auf C namens Sound.wav. Natürlich musst du das bei dir ändern, und den richtigen Pfad anlegen. Auch unterstützt java nicht jede wav Datei. Auch unterstützt java beispielsweise kein wma oder mp3. Für mp3 gibt es aber kostenlose libraries, so dass java dann auch mp3 abspielen kann. Ich hatte eine Menge Links genannt, wenn du dort nachliest, wirst du genau sehen welche Formate Java unterstüzt, für welche es extra Plugins gibt.


```
try {
	URL u = new URL("file:/C:/Sound.wav");
	AudioClip clip = Applet.newAudioClip(u);
	// clip.play(); // Einmal abspielen
	clip.loop(); // Endlosschleife
} catch (Exception e) {
}
```

Mögliche Fehler:
- Der Pfad zur Sounddatei ist falsch
- Format wird von Java nicht unterstützt, extra library oder plugin fehlt
- du tust den code an falscher Stelle einfügen
- Bei wav musst du aufpassen, da nur eine Sorte von wav funktioniert


Ratschlag: So wie das aus deinem Code sehen konnte, benutzt du ein GUI-Tool. Das ist für Anfänger gerade zu schlecht. Weil sie dann die Logik, die Systematik, die Funktionen von Java und allgemein das Programmieren nie richtig lernen. Du wirst in Zukunft noch zigmal sagen warum funktioniert dies nicht das nicht. Hast du aber erst einmal schon einwenig Erfahrung, kannst du immer noch mit einem GUI-Tool arbeiten. Dann wirst du auch sofort sehen was wo fehlt. Meine Empfehlung finger Weg von Visuellen GUI Buildern, bist du die Grundlagen von Java verstanden hast. Das hält dich mehr auf, als das es eine Vereinfachung ist. Ein erfahrener Programmierer könnte natürlich auch von GUI-Tools profitieren.

Vg Erdal


----------



## Rodabujean (31. März 2006)

danke, nun  es ...
für die GUI kann ich nichts, kann mir leider nich aussuchen was ich da benutze, wir hatten bestimmte vorgaben, und an die musst ich mich halten !

mfg ty roda


----------



## flashray (31. März 2006)

Funktioniert es nun mit dem Sound?


----------

