Почему моя Java-программа не добавляет звук даже с WAV-файлом? - PullRequest
0 голосов
/ 06 июня 2018

Я делаю программу только для проверки звука.Чтобы сделать это, я следил за видео, ссылку на который можно найти здесь https://www.youtube.com/watch?v=VMSTTg5EEnY. Однако, когда я запускаю его, он создает кадр с кнопкой, но кнопка ничего не делает.В чем проблема?

   package RefrenceCode;
import sun.audio.AudioData;
import sun.audio.AudioPlayer;
import sun.audio.AudioStream;
import sun.audio.ContinuousAudioDataStream;
import java.awt.event.ActionEvent;
import java.io.*;
import javax.swing.*;
import java.awt.event.ActionListener;

public class Sound {
    public static void main(String[] args) {
        JFrame frame = new JFrame();
        frame.setSize(200,200);
        JButton button = new JButton("Click me");
        frame.add(button);
        button.addActionListener(new AL());
        frame.show(true);
    }
    public static class AL implements ActionListener{
        public final void actionPerformed(ActionEvent e) {
            music();
        }}
    public static void music(){
        AudioPlayer BGP = AudioPlayer.player;
        AudioStream BGM;
        AudioData MD;
        ContinuousAudioDataStream loop = null;
        try {
            //InputStream test = new FileInputStream("C:\\ wiiMusic.wav");
            //BGM = new AudioStream(test);
            BGM = new AudioStream(new FileInputStream("wiiMusic.wav"));
            MD = BGM.getData();
            loop = new ContinuousAudioDataStream(MD);
        }catch(IOException error) {}
        BGP.start(loop);
    }
}

1 Ответ

0 голосов
/ 06 июня 2018

Устаревшие учебники кажутся растущей проблемой!

Я интерпретирую комментарий OP как задание следующего вопроса: как адресовать и загружать аудиофайл, который является локальным, то есть упакован с помощью Java-программы,удаленный доступ невозможен.

Ссылка, предоставленная Эндрю Томпсоном в комментариях, полезна, но в ней нет примера обращения к автономному аудиофайлу.Я не знаю, как отредактировать его, чтобы включить пример.Oracle Sound Trail Tutorial по тем или иным причинам имеет недостатки.

Прежде всего, форма URL для создания AudioInputStream, как правило, лучше всего подходит:

AudioInputStream ais = AudioSystem.getAudioInputStream(url);

Почему?Потому что он имеет дополнительную возможность поиска ресурсов, которые упакованы в банку, а файловая система не может.

Я думаю, что наиболее обычная практика для доступа к автономному аудиоресурсу - использовать * 1013.* ClassLoader для класса, который, как вы уверены, будет частью вашего проекта.Адрес аудио-ресурса затем дается как относительный адрес к адресу этого класса.

Например, предположим, у вас есть класс "MySound" в вашем проекте.Если аудиофайлы находятся в одной папке или пакете, относительная схема адресации будет выглядеть следующим образом:

URL beepURL = MySound.class.getResource("beep.wav");

Если аудиофайл находится в подпапке или подпакете той, где находится MySound, напримерКоманда "/ audio" будет выглядеть следующим образом:

URL beepURL = MySound.class.getResource("audio/beep.wav");

Должны работать основные правила HTML для указания относительных адресов.Это включает в себя такие символы, как «..» для адресации родительской папки или пакета.

Например, если у вас есть пакет с именем res / audio, который находится рядом с пакетом, содержащим MySound

URL beepURL = MySound.class.getResource("../res/audio/beep.wav");

Структура файла для приведенного выше примера:

src/com.mydomainname.myproject/utils/MySound 
src/com.mydomainname.myproject/res/audio/beep.wav 

Существуют различные правила, которые применяются, если вы начинаете адрес URL с "/", как "/beep.wav".В документации это называется «абсолютной» формой.Я не использовал его в своем собственном кодировании, поэтому я не рискну объяснить его некорректным образом.

В примере JavaSound Info Page мы могли бы отредактировать эти строки следующим образом:

    URL url = LoopSound.class.getResource("leftright.wav");
    Clip clip = AudioSystem.getClip();
    AudioInputStream ais = AudioSystem.getAudioInputStream( url );
    clip.open(ais);

Предполагается, что leftright.wav находится в том же пакете, что и LoopSound.

...