【发布时间】:2017-05-01 01:57:57
【问题描述】:
您好,我的问题是我无法让我的程序播放声音,虽然我不知道我做错了什么,但我遵循了几个视频的指南,到目前为止我不知道该怎么做。我什至将我的文件转换为 .wav 和 8 位或 16 位,所以我知道这不是文件,因为 java 支持它。
这里是代码和错误信息:
import java.io.File;
import java.util.ArrayList;
import java.util.concurrent.ThreadPoolExecutor;
import javax.sound.sampled.AudioFormat;
import javax.sound.sampled.AudioInputStream;
import javax.sound.sampled.AudioSystem;
import javax.sound.sampled.Clip;
import javax.sound.sampled.DataLine;
import javax.sound.sampled.FloatControl;
public class MusicPlayer implements Runnable {
private ArrayList<String> musicFiles;
private int currentSongIndex;
public MusicPlayer(String...files){
musicFiles = new ArrayList<String>();
for(String file : files){
musicFiles.add("./Music Player/src" + file + ".wav");
}
}
private void playSound(String fileName){
try{
File soundFile = new File(fileName);
AudioInputStream ais = AudioSystem.getAudioInputStream(soundFile);
AudioFormat format = ais.getFormat();
DataLine.Info info = new DataLine.Info(Clip.class, format);
Clip clip = (Clip) AudioSystem.getLine(info);
clip.open(ais);
FloatControl gainControl = (FloatControl) clip.getControl(FloatControl.Type.MASTER_GAIN);
gainControl.setValue(-10);
clip.start();
}catch(Exception e){
e.printStackTrace();
}
}
public static void main(String[] args) {
// ThreadPoolExecutor pool = new ThreadPoolExecutor(2);
MusicPlayer music = new MusicPlayer("Chillout");
music.playSound("./Music Player/src/Chillout.wav");
}
@Override
public void run() {
playSound(musicFiles.get(currentSongIndex));
}
}
错误信息:
java.io.FileNotFoundException: .\Music Player\src\Chillout.wav (The system cannot find the path specified)
at java.io.FileInputStream.open0(Native Method)
at java.io.FileInputStream.open(Unknown Source)
at java.io.FileInputStream.<init>(Unknown Source)
at com.sun.media.sound.WaveFloatFileReader.getAudioInputStream(Unknown Source)
at javax.sound.sampled.AudioSystem.getAudioInputStream(Unknown Source)
at MusicPlayer.playSound(MusicPlayer.java:39)
at MusicPlayer.main(MusicPlayer.java:65)
不明白,我用scr和项目文件夹中的文件试过了,还是找不到文件?
谢谢
【问题讨论】:
-
不要在你的代码中引用
src,一旦应用程序被构建/发布,它就不会存在。而是使用Class#getResource来加载嵌入式资源 - 另外,不要将嵌入式资源视为“文件”,它们不是,大多数 API 都支持URL或InputStream -
您的问题只是文件夹问题。把你的路径没有空格字符和主目录的基础。例如 /home/emir/Music/myfile.wav
-
不,这不是路径的问题,我尝试了 URL 方式并不起作用,我尝试了 inputStream 也不起作用。似乎所有关于这方面的教程都很糟糕,因为我一遍又一遍地遇到同样的问题,而且当它没有给我错误时,绝对没有声音播放!
-
“我尝试了URL方式,但不起作用”什么URL?你试过
music.playSound("c:\test\Chillout.wav");之类的吗? (显然要确保存在一个名为“test”的文件夹,其中包含 .wav 文件).... 也关于 “绝对没有声音播放!” 未经测试,但我想知道gainControl.setValue(-10);是否减少了太多(你听不到零音量)