2014-09-12 2 views
0

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

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

Смежные вопросы