Sound abspielen nach Buttonklick in Applets

SheldoN

Mitglied
Tag Leute,

hat jemand ne Ahnung wie ich Sounds per Buttonklick in einem Applet starten kann? Der Button ist schon erstellt, nur weiß ich nicht den Befehl zum öffnen der .wav datei.
 
Hi Sheldon,


hab bei mir das mal so gelöst, allerings weiß ich nicht, ob es bei einem Applet funktioniert. (hab keine Ahnung von Applets).

Bekomme auch die Meldung (...deprecated) wie auch immer, hier der Code. Funktionieren tut er bei mir.

Musst natürlich entsprechend anpassen.

Java:
public void soundKlatschen(){
			  
			  try {
				  System.out.println("Sound abspielen wird aufgerufen");
			     
				AudioClip ac = Applet.newAudioClip (new File ("Sound/Applaus.wav").toURL()); 
			      ac.play();
			      
			} catch(Exception e) {
				e.printStackTrace();
			}
		  }
 
Hi Fab1,

den Quellcode den du geschrieben hast öffnet die .wav Datei nachdem ich das Applet gestartet habe. Ich möchte aber einen Button in dem Applet erstellen und durch Buttonklick die .wav datei starten.
Trotzdem danke^^

mfg
 
Das hängt davon ab, von wo du den Code aufrufst und hat nichts mit dem Code von Fab1 zu tun...du musst ihn natürlich auch richtig einbauen!
 
oh okay^^
muss evtl. noch dazu sagen das ich auch ziemlich neu in der Materie bin, aber ich werds mal probieren.
Vielen dank euch!
 
Dann lade die .wav-Datei halt in der Applet-Init-Routine in eine Membervariable des Applets und führe die Play-Methode innerhalb des ActionListeners des Buttons aus. Beachte aber L-ectron-Xs Worte sehr kritisch, dein Applet funktioniert sonst nur lokal auf deinem Rechner und dort möglicherweise auch nur in der Entwicklungsumgebung.
 
Hm, das is schlecht. Ich hatte vor ein Nippelboard zu coden (Sowas wo Stefan Raab ständig drauf kloppt) und ich wollte das evtl nen paar Kollegen weiter schicken.
Hat jemand evtl mal nen funktionierenden Beispielcode für mich?
Würd mich freuen,
mfg
 
Applet#newAudioClip(java.net.URL)

@Fab1: Hast du deinen Code getestet? Ich glaube die Verwendung von File in einem Applet wird eine AccessControlException provozieren, weil dabei auf der Client-Festplatte gesucht wird.
In einem Applet besser immer über die CodeBase die Resourcen laden.

Jap, funktionieren tut es, allerdings nur mit einer Warnung. Wusste allerdings zum damaligen Zeitpunkt (gut jetzt auch noch) keine bessere Lösung.
 
Also zum Laden der .wavs benötigst du eine URL - etwas anderes extrahiert Fab1 selber auch nicht aus File - und vllt noch ergänzend den relativen Serverpfad der Datei.
Java:
<Applet>.getAudioClip(getCodeBase(), "relPath/my.wav");
oder
Java:
<Applet>.getAudioClip(getDocumentBase(), "relPath/my.wav");
je nachdem, von wo aus der Pfad zur Datei per http erreichbar ist.
[ot]Obendrein ist "<File>.toURL()" inzwischen auch @Deprecated[/ot]
 
Genau, so weit hab ich es bis jetzt,
jetz möchte ich nur noch beim klicken des Buttons im Applet die .wav datei gestartet bekommen.
Im Moment sieht es so aus :
Java:
public void init(){
        button = new Button("Nippel1");
        add(button);
        try {
        	
          AudioClip sound1 = Applet.newAudioClip (new File ("/home/timo/workspace/Hallo2/Nippelboard/nippelsounds/nippelneu1_watt.wav").toURL()); 
            sound1.play();
            
      } catch(Exception e) {
          e.printStackTrace();
      }
 
Wie schon gesagt: verzichte auf File!

Folgende Dateien legst du für dieses Beispiel in ein gemeinsames Verzeichnis.

Ein Beispiel-Applet:
Java:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.net.*;
import java.applet.*;

public class SoundApplet extends JApplet implements ActionListener {
    private AudioClip clip;
    
    public void init() {
       setLayout(new GridBagLayout());       
       
       try {
          clip = newAudioClip(new URL(getCodeBase()+"clip.wav"));
       }
       catch(MalformedURLException e) {
          e.printStackTrace();
       }
       
       JButton playBtn = new JButton("Play");
       playBtn.addActionListener(this);
       
       add(playBtn);
    }
    
    public void actionPerformed(ActionEvent e) {
       clip.play();
    }    
}

Die HTML-Datei:
HTML:
<html>
 <title>SoundApplet</title>
 <body>
  <applet code="SoundApplet.class" width="400" height="300">
  </applet>
 </body>
</html>

Und zum Testen irgendeine Wav-Datei, die du vorher noch entpackst:
 
Ui... das aber wahnsinnig neu in der Materie... 😉
1. Eine Nippelklasse wäre nicht schlecht.
Java:
public class Nippel
extends Button
{
  private final AudioClip ac;

  public Button(String name, AudioClip ac)
  {
    super(name);
    if(null == ac) {
      throw new IllegalArgumentException("AudioClip may not be null");
    }
    this.ac = ac;
    addActionListener(new ActionListener()
    {
      public void actionPerformed(ActionEvent e)
      {
         if(this == e.getSource()) {
          ac.play();
        }
      }
    }
  }
}
2. Diese kann man in der Init-Methode des Applets wie folgt instanzieren.
Java:
Nippel n = new Nippel("Nippel1", getAudioClip(getCodeBase(), "relPath/my.wav"));
[ot]Okay... der anonyme ActionListener mag vllt. unfein sein aber gut...[/ot]
[edit]@L-ectron-X: Zeile 14 in deinem Code... was ist das????:L ... okay vergiss das 😉[/edit]
 
Zuletzt bearbeitet von einem Moderator:
Die Klasse Nippel erweitert Button. Sie kann nun im Applet als solcher verwendet bzw. hinzugefügt werden.
Java:
<Applet>.add(/*(Button)*/ nippel1);
[ot]Was des macht ist eigentlich schon klar, jedenfalls nachdem ich nachgeschaut habe.
Mir kam das nämlich spanisch vor, weil ich diese Methode in der Eclipse-CV zunächst gar nicht fand und sie schliesslich ganz unten doch zu finden war. Kein Wunder, sie ist statisch. "okay, vergiss das" hat plötzlich doch eine völlig neue Bedeutung, findest du nicht? Zumindest gibt's 'ne Warnung: "The static method newAudioClip(URL) from the type Applet should be accessed in a static way"[/ot]
 
Zuletzt bearbeitet von einem Moderator:
ahh ich habs nun endlich !
Nur habe statt
Java:
clip = newAudioClip(new URL(getCodeBase()+"clip.wav"));

so eingetippt:
Java:
clip = newAudioClip(new URL(getCodeBase(),"clip.wav"));

Was so kleine Zeichen ausmachen~~

Vielen dank nochmals!
 

Zurück
Oben