如何控制 MIDI 通道的音量

Posted

技术标签:

【中文标题】如何控制 MIDI 通道的音量【英文标题】:How to control the MIDI channel's volume 【发布时间】:2011-12-21 22:31:06 【问题描述】:

我有这个代码:

Synthesizer synthesizer = MidiSystem.getSynthesizer();
synthesizer.open();
Instrument[] instrument = synthesizer.getDefaultSoundbank().getInstruments();
synthesizer.loadInstrument(instrument[29]);
MidiChannel[] channels = synthesizer.getChannels();
MidiChannel channel = channels[1];
channel.programChange(29);
channel.noteOn(noteNumber, 127);
Teszthang.sleep(2000);
channel.noteOff(noteNumber);

这是一个示例,以最大音量 (127) 播放声音 2 秒。但我想控制频道的音量,比如 2 秒后,音量会在 2 秒后淡出。我怎么能那样做?我知道这些方法:

channel.controlChange(controller, value);
channel.setPolyPressure(noteNumber, pressure);

但这些不会改变任何音量!我不知道如何使用这些方法。 noteOn() 播放后如何更改频道的音量?

【问题讨论】:

是的,我知道,但我不知道,controlChange 中的“7”是音量控制器 :) 【参考方案1】:

您可以使用 CC 7 设置频道音量。

channel.controlChange(7, value);

见:http://improv.sapp.org/doc/class/MidiOutput/controllers/controllers.html

【讨论】:

【参考方案2】:

有时您在 MIDI 文件中有一些音量事件,因此您无法更改通道音量。 得到序列后,去掉这些事件:

Track[] tracks = sequence.getTracks();
for (Track track : tracks)
for(int i = 0; i < track.size(); i++)
    if(!track.remove(track.get(i)))
        System.out.println("MIDI Event not removed");
    

【讨论】:

以上是关于如何控制 MIDI 通道的音量的主要内容,如果未能解决你的问题,请参考以下文章

Windows Vista/7 上的 SDL_Mixer MIDI 音量问题

如何从音量级别创建 MIDI Sysex Master Volume 消息?

请问水果做音乐FL STUDIO如何才能单独提高单轨道的音量???

如何使用Naudio分别控制耳机左右声道的音量

在objective-c中控制一个通道的音量

在java中改变midi音量