# Sehr kleine wav Dateien, bis zu 20KB,werden nicht abgespielt



## Klausi (5. Apr 2005)

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: 


```
/*
 * 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();
    }
    
}
```


----------



## Klausi (5. Apr 2005)

Natürlich sollte die Überschrift heißen abgespielt, also bitte keine dummen Scherze darüber, ich habe mich nur vertippt  
Illuvatar: Habs geändert


----------



## Klausi (5. Apr 2005)

Naja, jetzt hat sich das für mich erledigt. Es scheint ein bekannter Bug zu sein, aber wer hätte an so etwas gedacht??

Vielleicht hilft es jemand, der das gleiche Problem zu haben scheint, da es dort einen Workaround gibt:
http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=5070730


----------



## Illuvatar (5. Apr 2005)

http://www.java-forum.org/de/viewtopic.php?t=9195


----------

