如何编码播放MP3?
How to code to play MP3?
我正在编写几行代码,每 0.5 秒交替打印出 "tick"s 和 "tock"s,并在 60 秒后打印出 "done!"。
import javax.sound.sampled.*;
public class Thread0001 {
public static void main(String args[]) {
for(int i=0; i<60; i++) {
try {
Thread.sleep(500);
if(i%2 == 0) {
System.out.print("tick ");
try {
AudioInputStream audioInputStream = AudioSystem.getAudioInputStream(Thread0001.class.getClass().getResource
("Users/Marshall/Documents/Sources/Elevator.mp3"));
Clip clip = AudioSystem.getClip();
clip.open(audioInputStream);
clip.start();
} catch(Exception e) {
}
}
else
System.out.print("tock ");
if(i == 59) { // when it reaches 60 seconds
System.out.println("done!");
}
} catch(Exception e) {
}
}
}
}
好吧,一切似乎都很好,但有一件事 - 我还设置了一个代码,每隔 "tick" 发出一次电梯铃声。这段代码似乎不起作用,有人可以帮我解决这个问题吗?
您需要加载一个库,例如 JavaZoom 提供的库,才能播放 mp3。如果您已经将 JavaFX 用于图形组件,则可以考虑将其用于播放,因为它的音频现在支持 mp3。
之后,下一个最有可能出现的错误是 "file not found" 或 "invalid format"。前者很可能是由于在获得正确的相对地址方面很棘手。后者很可能是由于编码的 wav 文件以大于 44100 fps 或 16 位编码的精度记录。但是,除非您按照建议添加 e.printStackTrace();.
,否则您不会知道可能发生的情况
您编写的代码应该是相当近似的,最坏的情况下可能在十几毫秒内。要改进代码,您可以在循环外预加载剪辑,然后重新定位到起始帧并调用播放。另一种选择是通过 SourceDataLine 播放,它启动非常快。就目前而言,每次迭代都将文件加载到 RAM 中,然后(仅在完成后)从 RAM 播放文件。
帧精度(1/44100 秒以内)是可能的,但我知道的方法需要使用 SourceDataLine 并计算连续播放中经过的帧数。可能矫枉过正了。
我正在编写几行代码,每 0.5 秒交替打印出 "tick"s 和 "tock"s,并在 60 秒后打印出 "done!"。
import javax.sound.sampled.*;
public class Thread0001 {
public static void main(String args[]) {
for(int i=0; i<60; i++) {
try {
Thread.sleep(500);
if(i%2 == 0) {
System.out.print("tick ");
try {
AudioInputStream audioInputStream = AudioSystem.getAudioInputStream(Thread0001.class.getClass().getResource
("Users/Marshall/Documents/Sources/Elevator.mp3"));
Clip clip = AudioSystem.getClip();
clip.open(audioInputStream);
clip.start();
} catch(Exception e) {
}
}
else
System.out.print("tock ");
if(i == 59) { // when it reaches 60 seconds
System.out.println("done!");
}
} catch(Exception e) {
}
}
}
}
好吧,一切似乎都很好,但有一件事 - 我还设置了一个代码,每隔 "tick" 发出一次电梯铃声。这段代码似乎不起作用,有人可以帮我解决这个问题吗?
您需要加载一个库,例如 JavaZoom 提供的库,才能播放 mp3。如果您已经将 JavaFX 用于图形组件,则可以考虑将其用于播放,因为它的音频现在支持 mp3。
之后,下一个最有可能出现的错误是 "file not found" 或 "invalid format"。前者很可能是由于在获得正确的相对地址方面很棘手。后者很可能是由于编码的 wav 文件以大于 44100 fps 或 16 位编码的精度记录。但是,除非您按照建议添加 e.printStackTrace();.
,否则您不会知道可能发生的情况您编写的代码应该是相当近似的,最坏的情况下可能在十几毫秒内。要改进代码,您可以在循环外预加载剪辑,然后重新定位到起始帧并调用播放。另一种选择是通过 SourceDataLine 播放,它启动非常快。就目前而言,每次迭代都将文件加载到 RAM 中,然后(仅在完成后)从 RAM 播放文件。
帧精度(1/44100 秒以内)是可能的,但我知道的方法需要使用 SourceDataLine 并计算连续播放中经过的帧数。可能矫枉过正了。