我有下面的代码,理论上应该将声音静音(只是为了测试音量控制是否有效)但它会以完整音量播放声音,好像通过音轨的循环不在那里。
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();
}
答案 0 :(得分:1)
如果只是将命令添加到曲目,为什么会发生任何变化?我敢打赌,它们会添加到曲目的 end ;所以控制变化什么也没做。尝试将tick参数设置为0,至少。
此外,曲目可能已包含控制变更;根据需要改变音量。这种方法不你如何控制音乐的音量。它是如何控制所选轨道相对于彼此的。