Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/369.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java MIDI Sequencer的播放速度不正常_Java_Javasound_Javax.sound.midi - Fatal编程技术网

Java MIDI Sequencer的播放速度不正常

Java MIDI Sequencer的播放速度不正常,java,javasound,javax.sound.midi,Java,Javasound,Javax.sound.midi,这里我有一段简单的代码,用一个定制的音箱以固定的间隔播放10个音符,但结果不是以固定的节奏播放,或者是引入了明显的延迟。我做错什么了吗?有“热身”时间吗 我在使用OpenJDK 8的Ubuntu上 谢谢:) 导入java.io.File; 导入java.io.IOException; 导入javax.sound.midi.*; 公共类MIDI测试 { 静态公共void main(字符串[]args)引发MidiUnavailableException、InvalidMidiDataExcepti

这里我有一段简单的代码,用一个定制的音箱以固定的间隔播放10个音符,但结果不是以固定的节奏播放,或者是引入了明显的延迟。我做错什么了吗?有“热身”时间吗

我在使用OpenJDK 8的Ubuntu上

谢谢:)

导入java.io.File;
导入java.io.IOException;
导入javax.sound.midi.*;
公共类MIDI测试
{
静态公共void main(字符串[]args)引发MidiUnavailableException、InvalidMidiDataException、IOException
{
序列=新序列(Sequence.PPQ,1000);
Track Track=sequence.createTrack();
对于(int i=0;i<10;i++)
{
ShortMessage noteOn=新的短消息(ShortMessage.NOTE_ON,0,50,100);
ShortMessage noteOff=新的短消息(ShortMessage.NOTE_OFF,0,50,100);
int noteOnTime=1000*i;
int noteOffTime=1000*(i+1);
添加(新的MidiEvent(noteOn,noteOnTime));
添加(新的MidiEvent(noteOff,noteoftime));
}
Soundbank Soundbank=MidiSystem.getSoundbank(新文件(“titanic.sf2”);
Synthesizer synth=MidiSystem.getSynthesizer();
synth.open();
合成负载仪器(声库);
synth.getChannels()[0]。程序更改(1);
Sequencer Sequencer=MidiSystem.getSequencer(false);
sequencer.open();
序列器。设置序列(序列);
sequencer.setTempoInBPM(120);
sequencer.addMetaEventListener(新的MetaEventListener(){
公共无效元(元消息消息消息)
{
if(msg.getType()==47){
//序列结束
系统出口(0);
}
}
});
sequencer.getTransmiter().setReceiver(synth.getReceiver());
sequencer.start();
}
}

首先加载仪器,然后打开合成器:

  synth.loadAllInstruments(soundbank);
  synth.open();

首先加载仪器,然后打开合成器:

  synth.loadAllInstruments(soundbank);
  synth.open();

相关:相关:我刚刚试过,但是synth使用的是默认的声音库,而不是我的。可能是你的声音字体有问题。你试过另一种soundfont吗?我刚试过,但是synth使用的是默认的声音库,而不是我的。可能是你的soundfont有问题。你试过另一种声音字体吗?