我使用下面的代码从我的本地系统播放一个.mid文件。此代码在无限循环中运行,并且不播放.mid文件。但是,不会返回任何错误。
我也试过设置断点,但是没有得到任何线索。
import javax.sound.midi.*;
import java.io.IOException;
import java.io.InputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
public class MidiPlayer {
public static void main(String[] args) {
try {
Sequencer sequencer = MidiSystem.getSequencer();
if (sequencer == null)
throw new MidiUnavailableException();
sequencer.open();
FileInputStream is = new FileInputStream("music.mid");
Sequence Seq = MidiSystem.getSequence(is);
sequencer.setSequence(Seq);
sequencer.start();
} catch (Exception e) {
e.printStackTrace();
}}
如果你也能分享一些用于播放.wma文件和.avi文件的java应用程序接口,那将是非常有帮助的。因为我需要编写代码来播放所有这3种类型的媒体文件,即.mid、.wma和.avi
发布于 2019-08-27 01:22:13
我不知道你为什么听不到音乐。这个程序对我很有效。确保它是有效的midi文件。至于“循环”…
启动Sequencer将创建一个新线程。在线程完成之前,JVM不会退出。
终止它的最简单方法是关闭Sequencer:
sequencer.close();但是,如果您立即执行此操作,程序将退出而不播放音乐文件,因为sequencer.start()会立即返回,而音乐将在后台线程上播放。
因此,您需要等待音乐播放完成:
sequencer.start();
long length = sequencer.getMicrosecondLength();
Thread.sleep(length / 1000 + 1000);
sequencer.close();睡眠时间是故意近似的。我忽略了小数秒,并添加了一整秒,以考虑到播放开始的可能延迟。有比这更准确的方法,但这可能是最简单的方法。
https://stackoverflow.com/questions/57659347
复制相似问题