
在Java音乐编程中,理解MIDI消息至关重要。本文将结合一个Beatbox的示例,深入探讨MIDI消息中控制变更(Control Change,值为176)和程序变更(Program Change,值为192)的作用。我们将学习如何使用ShortMessage类创建这些MIDI事件,并将它们添加到MIDI音轨中,从而控制音乐序列的播放和乐器选择。
MIDI(Musical Instrument Digital Interface,乐器数字接口)是一种用于电子乐器和计算机之间通信的标准协议。MIDI消息包含了音符、力度、乐器选择、控制变更等信息,允许计算机精确地控制合成器和其他MIDI设备。
在Java中,javax.sound.midi.ShortMessage类用于表示MIDI消息。通过该类,我们可以设置消息的命令(command)、通道(channel)以及数据(data)。
import javax.sound.midi.ShortMessage;
import javax.sound.midi.MidiEvent;
public class MidiUtil {
public static MidiEvent makeEvent(int comd, int chan, int one, int two, int tick) {
MidiEvent event = null;
try {
ShortMessage a = new ShortMessage();
a.setMessage(comd, chan, one, two);
event = new MidiEvent(a, tick);
} catch(Exception e) {
e.printStackTrace();
}
return event;
}
}这段代码展示了如何创建一个MidiEvent,其中包含一个ShortMessage。comd参数代表MIDI命令,chan代表通道,one和two代表数据,tick代表事件发生的节拍位置。
立即学习“Java免费学习笔记(深入)”;
控制变更消息用于控制MIDI设备的各种参数,如音量、声像、混响等。命令值为176(0xB0)。
makeEvent(176,1,126,0,16) 表示在第1通道(chan=1)的第16个节拍(tick=16)设置控制器126(one=126)的值为0(two=0)。控制器126通常用于设置通道为Mono模式。
// 设置通道1为Mono模式 track.add(MidiUtil.makeEvent(176, 1, 126, 0, 16));
不同的MIDI设备可能对控制变更消息的解释不同。因此,在使用控制变更消息时,需要查阅相关设备的MIDI实现文档。可以参考MIDI控制器列表来了解每个控制器编号的含义。
程序变更消息用于选择MIDI通道的乐器音色(patch)。命令值为192(0xC0)。
makeEvent(192,9,1,0,15) 表示在第9通道(chan=9)的第15个节拍(tick=15)选择音色编号为1(one=1)。在MIDI标准中,第9通道通常用于鼓组,音色编号1可能代表一种特定的鼓组音色。
// 在通道9选择鼓组音色1 track.add(MidiUtil.makeEvent(192, 9, 1, 0, 15));
程序变更消息的第二个数据字节(two)通常被忽略。程序变更消息通常在乐曲开始时发送,用于设置每个通道使用的乐器音色。
MIDI序列的长度取决于最后一个MIDI事件的节拍位置。如果没有添加任何音符事件(NoteON/OFF),程序变更消息可以用来保持序列的长度。
如果没有添加任何音符事件,只添加了makeEvent(192,9,1,0,15),那么序列的长度将是16个节拍。
如果使用Sequencer.setLoopStartPoint()和Sequencer.setLoopEndPoint(),可以自定义循环的起始和结束点。否则,Sequencer会循环整个序列。
理解MIDI消息的类型和参数对于音乐编程至关重要。通过控制变更和程序变更消息,我们可以精确地控制MIDI设备的各种参数和乐器音色。在Java中,ShortMessage类是创建和发送MIDI消息的关键。通过本文的学习,你应该能够更好地理解和应用MIDI消息,从而创作出更丰富的音乐作品。
以上就是理解MIDI消息中的176和192及其功能:Java Beatbox教程的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号