gpt4 book ai didi

用于播放 .mid 文件的 javax.sound.midi 库不起作用

转载 作者:行者123 更新时间:2023-12-02 09:34:28 29 4
gpt4 key购买 nike

我正在使用下面的代码从本地系统播放 .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();
}

}

如果您还可以分享一些java上用于播放.wma文件和.avi文件的api,那将会有很大的帮助。因为,我需要编写代码来播放所有这 3 种类型的媒体文件,即 .mid、.wma 和 .avi

最佳答案

我不知道你为什么听不到音乐。该程序适合我。确保它是有效的 MIDI 文件。至于“循环”……

启动 Sequencer 会创建一个新线程。在该线程完成之前,JVM 不会退出。

终止它的最简单方法是关闭 Sequencer:

sequencer.close();

但是,如果您立即执行此操作,程序将退出而不播放音乐文件,因为 sequencer.start() 立即返回,而音乐在后台线程上播放。

因此您需要等待音乐播放完成:

sequencer.start();

long length = sequencer.getMicrosecondLength();
Thread.sleep(length / 1000 + 1000);

sequencer.close();

sleep 时间故意是近似的。我忽略了小数秒,并添加了一整秒,以考虑播放开始可能出现的延迟。有多种方法可以比这更准确,但这可能是最简单的方法。

关于用于播放 .mid 文件的 javax.sound.midi 库不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57659347/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com