gpt4 book ai didi

Java Midi Sequencer 录制后不播放

转载 作者:行者123 更新时间:2023-11-30 07:41:00 24 4
gpt4 key购买 nike

我写了一个小型 midi 录音机,它应该在之后播放轨道:

Sequencer seqr=MidiSystem.getSequencer();

//Transmitters and receivers here

seqr.startRecording();

//Some Stuff (basically waiting)

seqr.stopRecording();
seqr.setTickPosition(0);
seqr.setLoopStartPoint(0);
seqr.setLoopEndPoint(seqr.getTickLength());
seqr.setLoopCount(Sequencer.LOOP_CONTINUOUSLY);
seqr.start();

它没有,但是 - 这让我很困惑 - 如果我添加:

File midFile=new File("MyMidiFile.mid");
MidiSystem.write(seqr.getSequence(), 1, midFile);
seqr.setSequence(MidiSystem.getSequence(midFile));

在播放stopRecoding()之后,

这表明录音和播放工作正常。

//问题结束

编辑

根据要求我的整个 MIDI 代码

发射器和接收器

public static MidiDevice inputDevice;
public static MidiDevice outputDevice;
public static Transmitter usbTransmitter;
public static Receiver usbReciever;

public static Sequencer seqr;
public static Transmitter seqTransmitter;
public static Receiver seqReciever;

初始化:

try{
seqr = MidiSystem.getSequencer();

Info[] midiDeviceInfo = MidiSystem.getMidiDeviceInfo();

inputDevice = MidiSystem.getMidiDevice(midiDeviceInfo[1]);
outputDevice = MidiSystem.getMidiDevice(midiDeviceInfo[4]);
seqr = MidiSystem.getSequencer();
inputDevice.open();
outputDevice.open();
seqr.open();

seqReciever = seqr.getReceiver();
seqTransmitter = seqr.getTransmitters().get(0);

usbTransmitter = inputDevice.getTransmitter();
usbReciever = outputDevice.getReceiver();
usbTransmitter.setReceiver(seqReciever);
seqTransmitter.setReceiver(usbReciever);

Sequence seq = new Sequence(Sequence.PPQ, 24);

seqr.setSequence(seq);
seqr.setTickPosition(0);
} catch (MidiUnavailableException | InvalidMidiDataException e) {
e.printStackTrace();
}

录音:

Track track;
Sequencer seqr;
Sequence seq;

public TrackControler(Sequencer seqr) {
this.seqr = seqr;
this.seq = seqr.getSequence();
this.track = seq.createTrack();
}

private void startRecordNow() {
seqr.recordEnable(track, -1);
seqr.startRecording();
}

private void endRecordNow() {
seqr.stopRecording();

seqr.setTickPosition(0);
seqr.setLoopStartPoint(0);
seqr.setLoopEndPoint(seqr.getTickLength());
seqr.setLoopCount(Sequencer.LOOP_CONTINUOUSLY);
seqr.start();
}

最佳答案

如果没有看到你的 MIDI 录音或播放代码,我就不得不猜测 MidiSystem.write()Sequencer.setSequence()正在做一些您忽略的初始化。我的第二个猜测是Sequencer.stopRecording()没有让事情处于正确的播放状态。

在没有更多信息的情况下,这就是我能做的最好的事情。

更新(这样您就不必查看评论):

Java 似乎做了一些缓存,需要类似 seqr.setSequence(seqr.getSequence() 的东西。提交缓存。我一直在寻找更直接的方法来做到这一点,但没有找到任何东西。

关于Java Midi Sequencer 录制后不播放,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34699056/

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