You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何知晓Java Sequencer中乐器编号对应的具体乐器?

MIDI PROGRAM_CHANGE 乐器编号映射表

官方通用标准:General MIDI (GM) 规范

几乎所有MIDI设备、软件(包括Java Sequencer)都遵循General MIDI (GM) 标准,该规范明确定义了0-127号乐器编号对应的具体乐器/音效,分为16组(每组8个编号):

  • 0-7:钢琴类(0=大钢琴,1=明亮钢琴,2=电钢琴1,3=电钢琴2,4=颤音琴,5=立式钢琴,6=电钢琴3,7=古钢琴)
  • 8-15:色彩打击乐(8=钟琴,9=木琴,10=钢片琴,11=马林巴,12=颤音琴,13=管钟,14=扬琴,15=桑巴铃)
  • 16-23:风琴类(16=拉杆风琴,17=打击风琴,18=摇滚风琴,19=教堂风琴,20=簧风琴,21=口琴,22=手风琴,23=探戈手风琴)
  • 24-31:吉他类(24=尼龙弦吉他,25=钢弦吉他,26=爵士电吉他,27=清音电吉他,28=闷音电吉他,29=失真电吉他,30=吉他泛音,31=原声贝斯)
    后续组还包含贝斯、弦乐、铜管、木管、合成器、音效等类别,完整的128个编号对应关系可通过GM规范定义或Java API直接获取。

用Java API直接获取官方名称

你可以通过javax.sound.midi提供的API直接获取每个编号对应的官方标准乐器名称,无需手动查表:

import javax.sound.midi.*;

public class MidiInstrumentLookup {
    public static void main(String[] args) {
        try {
            Synthesizer synthesizer = MidiSystem.getSynthesizer();
            synthesizer.open();
            
            Instrument[] instruments = synthesizer.getAvailableInstruments();
            for (Instrument instr : instruments) {
                Patch patch = instr.getPatch();
                // PROGRAM_CHANGE的instrument参数对应patch的program值(0-127)
                int programNumber = patch.getProgram();
                String officialName = instr.getName();
                System.out.printf("乐器编号 %d: %s%n", programNumber, officialName);
            }
            
            synthesizer.close();
        } catch (MidiUnavailableException e) {
            e.printStackTrace();
        }
    }
}

扩展规范(可选)

如果需要更丰富的音效,部分设备支持Roland GS或Yamaha XG扩展规范,这些是GM的超集,包含更多乐器和音效编号,但基础开发场景下GM规范已足够覆盖绝大多数需求。

内容的提问来源于stack exchange,提问作者Sergey Zolotarev

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 17:00:56