java - 无需合成器即可控制 Java MIDI 音量

标签 java midi

我有下面的代码,理论上应该使声音静音(只是为了测试音量控制是否工作),但它以最大音量播放声音,就好像音轨的循环不存在一样。

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。

此外,轨道本身可能已经包含控制更改;根据需要改变音量。这种方法不是控制音乐音量的方法。它是您控制所选轨道相对于彼此的方式。

关于java - 无需合成器即可控制 Java MIDI 音量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25808465/

相关文章:

javascript - MIDI.js 错误代码 :1, 无法请求MIDIAc​​cess

c++ - 将 RtMidi 对象传递给函数 (C++)

android - 如何使用 JUCE 使用 MIDI 文件和 soundfonts 文件生成 wav 文件?

java - 使用 javax.mail.authenticator 进行身份验证时的 swing 应用程序问题

java - 对对象集合进行排序的有效方法

java - @beforetest testng 由于某种原因被忽略

java - 覆盖动态创建的各个 JTable 单元格的单元格编辑器

java - 加载仪器

java - 在 Java 中从 Receiver 获取 midi 消息

java - 运行简单的 Maven 项目后出现此错误