Multithreading 我想用Clip在Java中播放wav文件,但这三个Java文件都不起作用

Multithreading 我想用Clip在Java中播放wav文件,但这三个Java文件都不起作用,multithreading,animation,audio,graphics,Multithreading,Animation,Audio,Graphics,第一个文件:没有生成声音 import javax.sound.sampled.*; public class AudioTest { public AudioTest() { ClassLoader classLoader = Thread.currentThread().getContextClassLoader(); System.out.println(classLoader.getResourceAsStream("C:\

第一个文件:没有生成声音

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
 } 
}
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");
                }
     } 
}
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);
        }
         
    }
}
第二个文件:未生成任何声音

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
 } 
}
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");
                }
     } 
}
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);
        }
         
    }
}
第三个文件:未生成任何声音

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
 } 
}
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");
                }
     } 
}
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);
        }
         
    }
}

问题是在执行上述三个文件中的任何一个时都没有生成声音。但现在我找到了解决这个问题的最佳方法,使用File SoundFile=new File(“src//audio1.wav”)

使用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”的子目录中


如果您发布您收到的任何错误消息,这将非常有用。

第一个java文件现在似乎正在工作

import java.io.IOException;
import javax.sound.sampled.*;

 class AudioTest {

    public void AudioPlay() {

        ClassLoader classLoader = 
Thread.currentThread().getContextClassLoader();

        try{
          Clip clip = AudioSystem.getClip();
          AudioInputStream inputStream = AudioSystem.getAudioInputStream(classLoader.getResourceAsStream("audio1.wav"));

          clip.open(inputStream);
          clip.start();
          while (!clip.isRunning())
              Thread.sleep(10);
          while (clip.isRunning())
              Thread.sleep(10);
          clip.close();
        } catch (Exception e)
            {
              e.printStackTrace(); 
              System.out.println(e); 
            }
        System.out.println("done"); //to see if the sound is finished playing
    } 
}
public class Test11 {

    public static void main(String[] args)  throws IOException
    {
    AudioTest au1 = new AudioTest();
    au1.AudioPlay();
    }
}

我发现以下代码是播放.wav文件的最佳方式:

import java.io.*;
import java.net.URL;
import javax.sound.sampled.*;
import javax.swing.*;
   
// To play sound using Clip, the process need to be alive.
// Hence, we use a Swing application.
public class T55 extends JFrame {

// Constructor
   public T55() {
      this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      this.setTitle("Test Sound Clip");
      this.setSize(300, 200);
      this.setVisible(true);
   
      try {
         // Open an audio input stream.
          File soundFile = new File("src//audio1.wav");
          AudioInputStream audioIn = AudioSystem.getAudioInputStream(soundFile);
          
         // Get a sound clip resource.
         Clip clip = AudioSystem.getClip();
         // Open audio clip and load samples from the audio input stream.
         clip.open(audioIn);
         clip.start();
      } catch (UnsupportedAudioFileException e) {
         e.printStackTrace();
      } catch (IOException e) {
         e.printStackTrace();
      } catch (LineUnavailableException e) {
         e.printStackTrace();
      }
   }
   
   public static void main(String[] args) {
       new T55();
   }
}

URL是指向万维网上“资源”的指针。我的音频文件位于我的计算机上。我想我不想使用URL。如果您不打算在其他任何人的计算机上运行此代码,那么使用文件可能会很好。过去常常会出现由于标记/重置错误导致文件失败的情况,但我已经很久没有看到这种情况出现了。但是,如果您希望将程序打包到jar文件中,或者使用自包含jvm(jlink构建)进行分发,则最常见的做法是使用“相对”文件位置和带有getResource方法的URL。URL可以看到jar中的内容。文件无法保存。URL用于本地和www文件。无论如何,你需要一个数据线。信息步骤。伟大的理想!我稍后会尝试。您能添加一些像“include”、main函数等的内容,使其成为一个完整的可执行java类文件吗?你知道我只是一个初学者。如果你使用IDE(强烈推荐),它将有助于填充所需的导入,如果这是你的意思的话。“包含”不更像是JavaScript吗?如果您需要更多指导,我可以建议您这样做:编写一个程序,当您按下按钮时在控制台上打印“hello world”。我将帮助您添加初始化声音所需的少量附加代码,以及在按下按钮时播放声音文件所需的少量代码(如果您自己没有首先弄清楚)。(我想你会的。)