我有下面的代码,该代码在理论上应该使声音静音(只是为了测试音量控制是否起作用),但它会以最大音量播放声音,就好像没有通过音轨的循环一样。
File music = new File(midi);
Sequencer sequencer;
Sequence sequence;
try {
sequence = MidiSystem.getSequence(music);
sequencer = MidiSystem.getSequencer();
sequencer.open();
for (Track track : sequence.getTracks())
{
for (int c = 0; c < 16; c++)
track.add(new MidiEvent(
new ShortMessage(ShortMessage.CONTROL_CHANGE, c, 7, 0),
track.ticks()));
}
sequencer.setSequence(sequence);
sequencer.start();
} catch (MidiUnavailableException | IOException | InvalidMidiDataException e) {
e.printStackTrace();
}
最佳答案
如果仅将命令添加到轨道,为什么会有什么变化?我敢打赌,它们会被添加到曲目的末尾;因此控件更改无济于事。尝试至少将tick参数设置为0。
而且,轨道可能已经包含了单独的控制更改。根据需要更改音量。这种方法不是您控制音乐音量的方法。它是如何控制彼此相对的选定轨道。
关于java - 无需合成器即可控制MIDI音量Java,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25808465/