我想使用Clip来播放Java的wav文件,但三个Java文件均不起作用

问题描述 投票:1回答:1

最初,我尝试使用其他方式播放wav文件而不使用Clip。但是,当我使用它作为一个线程播放wav文件并将动画图形绘制为另一线程时,图形运行正常,但是wav文件听起来很毛刺。这就是为什么我要使用Clip播放wav文件的原因。但是,我仍然不知道结果如何。

//The first java file
import javax.sound.sampled.*;

public class AudioTest {

    public AudioTest() {

        ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
        System.out.println(classLoader.getResourceAsStream("C:\\audio1.wav"));//to see if the sound file is found

        try{
          Clip clip = AudioSystem.getClip();
              AudioInputStream inputStream = AudioSystem.getAudioInputStream(classLoader.getResourceAsStream("C:\\audio1.wav"));
              clip.open(inputStream);
              clip.start();
              while (!clip.isRunning())
                  Thread.sleep(10);
              while (clip.isRunning())
                  Thread.sleep(10);
              clip.close();
            } catch (Exception  e)
                {
                  System.out.println("something failed");
                }
        System.out.println("done"); //to see if the sound is finished playing
 } 
}//No sound was generated when I executed this file
/*--------------------------------------------------------------------*/


//The second java file
import javax.sound.sampled.AudioInputStream;
import javax.sound.sampled.AudioSystem;
import javax.sound.sampled.Clip;

public class AudioTest {

    public AudioTest() {

        ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
        System.out.println(classLoader.getResourceAsStream("C:\\audio1.wav"));//to see if the sound file is found

        try{
          Clip clip = AudioSystem.getClip();
              AudioInputStream inputStream = AudioSystem.getAudioInputStream(classLoader.getResourceAsStream("C:\\audio1.wav"));
              clip.open(inputStream);
              clip.start();
              clip.close();
            } catch (Exception  e)
                {
                  System.out.println("something failed");
                }
     } 
}//No sound was generated when I executed this file
/*--------------------------------------------------------------------*/

//The third java file
import java.io.*;     
import javax.sound.sampled.*;


public class Test13 {
    static String filename = "C:\\audio1.wav";
    public static void main(String[] args) {

        try
        {
            Clip clip = AudioSystem.getClip();
            clip.open(AudioSystem.getAudioInputStream(new File(filename)));
            clip.start();
        }
        catch (Exception exc)
        {
            exc.printStackTrace(System.out);
        }

    }
}//No sound was generated when I executed this file
multithreading animation audio graphics
1个回答
0
投票

使用URL获取音频资源时,我获得了最好的结果。

Clip clip;

void makeAudio1Cue()
{
    URL url = this.getClass().getResource("audio/" + filename);
    AudioInputStream ais = AudioSystem.getAudioInputStream(url);
    DataLine.Info info = new DataLine.Info(Clip.class, ais.getFormat());
    Clip clip = (Clip) AudioSystem.getLine(info);
    clip.open(ais);
}

void playAudio1Cue()
{
    clip.setFramePosition(0);
    clip.start();
}

在这种情况下,音频文件位于包含“ this”类的文件夹的子目录中,名为“ audio”。

如果发布任何收到的错误消息,将很有帮助。

© www.soinside.com 2019 - 2024. All rights reserved.