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”。我将帮助您添加初始化声音所需的少量附加代码,以及在按下按钮时播放声音文件所需的少量代码(如果您自己没有首先弄清楚)。(我想你会的。)