Java 如果帧大小 > 1,AudioInputStream IOException 无法读取单个字节
Java AudioInputStream IOException cannot read a single byte if frame size > 1
所以我正在制作一个 Java 游戏程序,我现在正在向其中添加音乐。但是,当我使用 AudioInputStream 时,它在我的程序中不起作用。
public static void playMusic(String filepath) {
InputStream music;
try {
music = new AudioStream(new FileInputStream(filepath));
AudioStream audios = new AudioStream(music);
AudioPlayer.player.start(audios);
} catch (IOException e) {
JOptionPane.showMessageDialog(null, "Error:" + e.toString());
}
}
结果是错误:java.io.IOException:如果帧大小 > 1,则无法读取单个字节。然后我打开了一个新程序,它工作得很好。
public class PlayMusic {
/**
* @param args the command line arguments
*/
public static void main(String args[]){
playMusic("Mars.wav");
}
public static void playMusic(String filepath) {
InputStream music;
try{
music = new FileInputStream(new File(filepath));
AudioStream audios = new AudioStream(music);
AudioPlayer.player.start(audios);
} catch(IOException e){
JOptionPane.showMessageDialog(null,"Error");
}
}
}
我看了其他一些地方,但他们没有关于我的案例的信息。我有多个 classes 都连接到我的 Main class。当我 运行 项目时,它 运行 来自 main.
编辑:
我只是将代码移到了 main 方法的底部,现在它可以工作了。但是,我仍然很好奇为什么会修复它。
我正在写答案来解决您的问题,而不是指向问题,但是,不久前我读到那是 AudioStream
中的一个错误。
如果是假声,不用太费力,利用JavaFx和Java8.
static {
JFXPanel fxPanel = new JFXPanel();
}
private static void playSound(String sound){
// cl is the ClassLoader for the current class, ie. CurrentClass.class.getClassLoader();
URL file = cl.getResource(sound);
final Media media = new Media(file.toString());
final MediaPlayer mediaPlayer = new MediaPlayer(media);
mediaPlayer.play();
}
所以我正在制作一个 Java 游戏程序,我现在正在向其中添加音乐。但是,当我使用 AudioInputStream 时,它在我的程序中不起作用。
public static void playMusic(String filepath) {
InputStream music;
try {
music = new AudioStream(new FileInputStream(filepath));
AudioStream audios = new AudioStream(music);
AudioPlayer.player.start(audios);
} catch (IOException e) {
JOptionPane.showMessageDialog(null, "Error:" + e.toString());
}
}
结果是错误:java.io.IOException:如果帧大小 > 1,则无法读取单个字节。然后我打开了一个新程序,它工作得很好。
public class PlayMusic {
/**
* @param args the command line arguments
*/
public static void main(String args[]){
playMusic("Mars.wav");
}
public static void playMusic(String filepath) {
InputStream music;
try{
music = new FileInputStream(new File(filepath));
AudioStream audios = new AudioStream(music);
AudioPlayer.player.start(audios);
} catch(IOException e){
JOptionPane.showMessageDialog(null,"Error");
}
}
}
我看了其他一些地方,但他们没有关于我的案例的信息。我有多个 classes 都连接到我的 Main class。当我 运行 项目时,它 运行 来自 main.
编辑: 我只是将代码移到了 main 方法的底部,现在它可以工作了。但是,我仍然很好奇为什么会修复它。
我正在写答案来解决您的问题,而不是指向问题,但是,不久前我读到那是 AudioStream
中的一个错误。
如果是假声,不用太费力,利用JavaFx和Java8.
static {
JFXPanel fxPanel = new JFXPanel();
}
private static void playSound(String sound){
// cl is the ClassLoader for the current class, ie. CurrentClass.class.getClassLoader();
URL file = cl.getResource(sound);
final Media media = new Media(file.toString());
final MediaPlayer mediaPlayer = new MediaPlayer(media);
mediaPlayer.play();
}