Метод Stop не работает - PullRequest
       5

Метод Stop не работает

0 голосов
/ 19 апреля 2010

Может кто-нибудь сказать мне, почему следующий код не работает должным образом? Я хочу воспроизвести и остановить аудиофайл. Я могу выполнить воспроизведение, но всякий раз, когда я нажимаю кнопку остановки, ничего не происходит. Вот код: Спасибо.

..................

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

public class SoundClipTest extends JFrame {

    final JButton button1 = new JButton("Play");
    final JButton button2 = new JButton("Stop");
    int stopPlayback = 0;

    // Constructor
    public SoundClipTest() {

        button1.setEnabled(true);
        button2.setEnabled(false);

        // button play
        button1.addActionListener(
            new ActionListener() {

                public void actionPerformed(ActionEvent e) {

                    button1.setEnabled(false);
                    button2.setEnabled(true);

                    play();
                }// end actionPerformed
            }// end ActionListener
            );// end addActionListener()          

        // button stop
        button2.addActionListener(
            new ActionListener() {

                public void actionPerformed(
                    ActionEvent e) {
                    //Terminate playback before EOF

                    stopPlayback = 1;

                }//end actionPerformed
            }//end ActionListener
            );//end addActionListener()

        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        this.setTitle("Test Sound Clip");
        this.setSize(300, 200);
        JToolBar bar = new JToolBar();
        bar.add(button1);
        bar.add(button2);
        bar.setOrientation(JToolBar.VERTICAL);
        add("North", bar);
        add("West", bar);
        setVisible(true);
    }

    void play() {

        try {

            final File inputAudio = new File("first.wav");
            // First, we get the format of the input file
            final AudioFileFormat.Type fileType =
                AudioSystem.getAudioFileFormat(inputAudio).getType();
            // Then, we get a clip for playing the audio.
            final Clip c = AudioSystem.getClip();
            // We get a stream for playing the input file.
            AudioInputStream ais = AudioSystem.getAudioInputStream(inputAudio);
            // We use the clip to open (but not start) the input stream
            c.open(ais);
            // We get the format of the audio codec
            // (not the file format we got above)
            final AudioFormat audioFormat = ais.getFormat();

            c.start();
            if (stopPlayback == 1) {
                c.stop();
            }

        } catch (UnsupportedAudioFileException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } catch (LineUnavailableException e) {
            e.printStackTrace();
        }
    }// end play

    public static void main(String[] args) {
        //new SoundClipTest().play();
        new SoundClipTest();
    }
}

1 Ответ

1 голос
/ 19 апреля 2010

ваш if (stopPlayback == 1 ) будет запущен только один раз - вам придется заключить его в цикл while (true), чтобы убедиться, что он продолжает оцениваться, также добавьте паузу, иначе вы будете много сжигать ненужных циклов.

Обновление: я предполагал, что вы запустили второй поток для наблюдения за значением stopPlayback - теперь я вижу, что это не так. Почему бы вам просто не вызвать c.stop() из вашего ActionListener?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...