K
Klausi
Gast
Hallo,
ich habe jetzt eine Weile herumprobiert und weiß nicht mehr weiter, auch weil der Fehler so komisch ist. Ich kann keine wav Dateien einmal abspielen mit play, aber mit loop geht es ???:L
Anleitung zu dem Problem:
Unter http://fivedots.coe.psu.ac.th/~ad/jg/ch05/ch5.zip sind die Audio-Dateien.
Wählt man nun zuerst dog.wav aus und drückt auf 'play', wird es nicht abgespielt. Spielt man aber zuerst mcdonald ab, dann geht danach auch dog.wav mit 'play'. Das wiederholte abspielen von dog.wav ('loop') geht immer :bahnhof:
Wie gesagt habe ich ein bisschen rumprobiert und bei einer ungefähr 30KB großen Datei ging es mit diesem Beispiel (auch zu finden unter obiger URL chicken.wav). Vielleicht weiß von euch jemand weiter? :shock:
ich habe jetzt eine Weile herumprobiert und weiß nicht mehr weiter, auch weil der Fehler so komisch ist. Ich kann keine wav Dateien einmal abspielen mit play, aber mit loop geht es ???:L
Anleitung zu dem Problem:
Unter http://fivedots.coe.psu.ac.th/~ad/jg/ch05/ch5.zip sind die Audio-Dateien.
Wählt man nun zuerst dog.wav aus und drückt auf 'play', wird es nicht abgespielt. Spielt man aber zuerst mcdonald ab, dann geht danach auch dog.wav mit 'play'. Das wiederholte abspielen von dog.wav ('loop') geht immer :bahnhof:
Wie gesagt habe ich ein bisschen rumprobiert und bei einer ungefähr 30KB großen Datei ging es mit diesem Beispiel (auch zu finden unter obiger URL chicken.wav). Vielleicht weiß von euch jemand weiter? :shock:
Code:
/*
* SoundPlayer.java
*
* Created on 30. März 2005, 11:07
*/
package killer_game_programming.chapter5;
import java.applet.AudioClip;
import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import java.util.HashMap;
import javax.swing.JApplet;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
/**
*
* @author Klausi
*/
public class SoundPlayer extends JFrame implements ActionListener {
private final static String SOUND_DIR = "Sounds/";
private final static String[] soundFNms = {
"spacemusic.au",
"tiger.aiff",
"mcdonald.mid",
"dog.wav"
};
private HashMap<String, AudioClip> soundsMap;
private ArrayList<AudioClip> playingClips;
private JComboBox playListJcb;
private JButton playButton, loopButton, stopButton;
private JLabel statusLabel;
/** Creates a new instance of SoundPlayer */
public SoundPlayer() {
super("Sound Application");
playingClips = new ArrayList();
initGUI();
loadSounds();
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setSize(new Dimension(400, 100));
setResizable(false); // fixed size display
show();
}
private void initGUI()
/* Create a combox listing the AudioClips, and the "Play",
"Loop", and "Stop" buttons. */
{
Container c = getContentPane();
c.setLayout(new BorderLayout());
playListJcb = new JComboBox(soundFNms);
playButton = new JButton("Play");
playButton.addActionListener(this);
loopButton = new JButton("Loop");
loopButton.addActionListener(this);
stopButton = new JButton("Stop");
stopButton.addActionListener(this);
statusLabel = new JLabel("Click Play or Loop to play the selected sound file.");
JPanel controlPanel = new JPanel();
controlPanel.add(playListJcb);
controlPanel.add(playButton);
controlPanel.add(loopButton);
controlPanel.add(stopButton);
JPanel statusPanel = new JPanel();
statusPanel.add(statusLabel);
c.add(controlPanel, BorderLayout.CENTER);
c.add(statusPanel, BorderLayout.SOUTH);
}
private void loadSounds() {
soundsMap = new HashMap();
for (int i = 0; i < soundFNms.length; i++) {
AudioClip clip = Applet.newAudioClip(getClass().getResource(SOUND_DIR + soundFNms[i]));
if (clip == null) {
System.out.println("Problem loading " + SOUND_DIR + soundFNms[i]);
} else {
soundsMap.put(soundFNms[i], clip);
}
}
}
private void playMusic(boolean toLoop) {
String chosenFile = (String) playListJcb.getSelectedItem();
//try to get the AudioClip
AudioClip audioClip = soundsMap.get(chosenFile);
if (audioClip == null) {
statusLabel.setText("Sound " + chosenFile + " not loaded");
return;
}
if (toLoop) {
audioClip.loop();
} else {
audioClip.play();
}
playingClips.add(audioClip);
String times = (toLoop) ? " repeatedly" : " once";
statusLabel.setText("Playing sound " + chosenFile + times);
}
private void stopMusic() {
if (playingClips.isEmpty()) {
statusLabel.setText("Nothing to stop");
} else {
AudioClip audioClip;
for (int i = 0; i < playingClips.size(); i++) {
audioClip = playingClips.get(i);
audioClip.stop();
}
playingClips.clear();
statusLabel.setText("Stopped all music");
}
}
public void actionPerformed(ActionEvent e) {
Object source = e.getSource();
if (source == playButton)
playMusic(false); // false means not looping
else if (source == loopButton)
playMusic(true); // start looping play
else if (source == stopButton)
stopMusic();
}
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
new SoundPlayer();
}
}