Управление громкостью MIDI Java без синтезатора

У меня есть код ниже, который должен теоретически отключить звук (просто проверить, работает ли регулятор громкости), но он воспроизводит звук на полном объеме, как будто петля на дорожках там отсутствует.

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();
}
1 ответ

Почему бы ничего изменить, если вы просто добавляете команды в трек? Бьюсь об заклад, они добавляются в конце треков; поэтому изменение управления ничего не делает. Попробуйте установить параметр tick на 0, по крайней мере.

Также треки могут уже содержать изменения управления самостоятельно; изменяя объем по мере необходимости. Этот подход заключается не в том, как вы контролируете объем музыки. Его способ управления выбранными дорожками относительно друг друга.

licensed under cc by-sa 3.0 with attribution.