使用Java声音API动态创建注释。如何处理多个注释?

使用Java声音API动态创建注释。如何处理多个注释?,java,midi,javasound,Java,Midi,Javasound,我正在使用JavaSoundAPI,我知道如何使用音序器来编辑和执行曲目。我现在的问题是如何在飞行中正确播放多个音符(不一定同时播放) 我使用了一个音轨,添加了MidiEvent NoteON和NoteOFF,然后启动seukiner来播放这个音符。在第二次运行时,我从曲目中删除以前的事件,并将合成器设置为位置0以重新开始。那很好 问题是,以前的便笺即使没有完全执行其便笺关闭事件,也会自然而然地被切断,因此便笺不会像我希望的那样持久 通过将便笺事件发送到不同的曲目是正确的方法还是有更好的方法?我

我正在使用JavaSoundAPI,我知道如何使用音序器来编辑和执行曲目。我现在的问题是如何在飞行中正确播放多个音符(不一定同时播放)

我使用了一个音轨,添加了MidiEvent NoteON和NoteOFF,然后启动seukiner来播放这个音符。在第二次运行时,我从曲目中删除以前的事件,并将合成器设置为位置0以重新开始。那很好

问题是,以前的便笺即使没有完全执行其便笺关闭事件,也会自然而然地被切断,因此便笺不会像我希望的那样持久

通过将便笺事件发送到不同的曲目是正确的方法还是有更好的方法?我遇到的问题是,从位置0启动音序器将导致再次播放以前的一些音符

public void playSingleNote(int note, int velocity) throws InvalidMidiDataException, MidiUnavailableException {
        long tick = 0;
        sequencer.setTickPosition(0);// Start at beginning.
        // Clean track
        for (int i = 0; i < track.size(); i++) {
            track.remove(track.get(i));
        }

        ShortMessage msg = new ShortMessage(ShortMessage.NOTE_ON, 0, note, velocity);
        MidiEvent evt = new MidiEvent(msg, tick);
        track.add(evt);

        msg = new ShortMessage(ShortMessage.NOTE_OFF, 0, note, velocity);
        evt = new MidiEvent(msg, tick + 28);
        track.add(evt);

        sequencer.start();
    }
public void playSingleNote(int note,int velocity)抛出InvalidMidiDataException,MidiUnavailableException{
长刻度=0;
sequencer.setTickPosition(0);//从开头开始。
//干净的轨道
对于(int i=0;i
您可以从教程开始:我认为sequencer并不适合即时消息。直接将这些便条发送给接收者可能是个更好的主意。@gpasch感谢您的这篇文章。尽管我阅读了所有关于Java声音的Java教程,每次大约读了10遍,但我还是忽略了这一部分,因为我没有真正理解时间戳和wire协议!伙计,我只是通过MIDI有线协议将信息直接发送到合成器,我终于达到了我的目标!非常感谢:DYou可以从教程开始:我认为sequencer并不适合即时消息。直接将这些便条发送给接收者可能是个更好的主意。@gpasch感谢您的这篇文章。尽管我阅读了所有关于Java声音的Java教程,每次大约读了10遍,但我还是忽略了这一部分,因为我没有真正理解时间戳和wire协议!伙计,我只是通过MIDI有线协议将信息直接发送到合成器,我终于达到了我的目标!非常感谢你:D