☰
Alda 乐器使用指南:General MIDI 音色集全量乐器列表、别名体系与源码实现解析
2026/10/10 2:28:33 网站建设 项目流程
  • 编程语言
  • 音频
  • CLI

【免费下载链接】alda

A music programming language for musicians. :notes:

项目地址:https://gitcode.com/gh_mirrors/al/alda
点击查看免费下载

Alda 是一款面向音乐家的音乐编程语言,其核心乐谱语法允许你用纯文本描述声部与音符。本文聚焦 Alda 内置的乐器(Instrument)系统:目前 Alda 完全基于General MIDI(GM)音色集提供 128 种音色乐器与一套完整打击乐映射,所有乐器名称与别名均可在乐谱中直接使用。读完本文,你将掌握 Alda 中乐器的书写规范、midi-前缀的含义、全部 16 组 128 种乐器的标准名称与别名,以及乐器在解析器与播放引擎(如 MIDI 通道分配)层面的实现原理。

一、概览:Alda 当前只支持 General MIDI 乐器

官方文档 doc/list-of-instruments.md 明确说明:目前 Alda 只支持General MIDI(GM)乐器。项目计划在未来加入波形合成能力,届时你将可以使用正弦波、方波、三角波、锯齿波,以及由这些波形构建的复杂合成器。但在当前版本中,乐谱可用的乐器就是下文列出的 GM 音色。

注意:部分短别名(如piano、guitar)未来可能会被替换为非 MIDI 乐器(例如采样或波形乐器)。为了确保你的乐谱始终使用特定的 MIDI 乐器,请使用带midi-前缀的规范名称(如midi-acoustic-grand-piano)。

这一约定在源码中也有印证:所有规范名称都以midi-开头,别名则相对宽松。见 client/model/instruments.go 中midiNonPercussionInstruments与midiPercussionInstruments两个列表的定义。

二、在乐谱中使用乐器

任何一个乐器名称或其别名,都可以作为 Alda 乐谱中的**乐器部件(instrument part)**来使用。基本语法是在乐器名后加冒号,随后书写该乐器的音符事件:

midi-harpsichord: c8 d e f g a b > c

Alda 处理乐谱时是顺序扫描的,它会为每个乐器独立跟踪音量、速度、时值、偏移量(offset)与八度等状态。当你切换到别的乐器再切回来时,不需要手动把参数改回去——Alda 会自动记住每个声部上一次的状态。这也是乐器部件可以分段书写、交错书写的基础,详见 doc/scores-and-parts.md。

三、乐器名称与别名是如何解析的:源码级原理

在 Go 源码中,每种乐器被建模为一个MidiInstrument,核心字段包括:

  • NameImpl:乐器的规范名称(即midi-开头的名称);
  • PatchNumber:GM 音色程序号(Program Change 值);
  • IsPercussion:是否为打击乐通道乐器。

定义见 client/model/instruments.go。程序初始化时,init()会把每一个规范名称和它的全部别名统一注册到stockInstruments这个 map 中,名称与别名都指向同一个MidiInstrument实例(client/model/instruments.go)。因此,在乐谱里写piano:与写midi-acoustic-grand-piano:效果完全相同。

当解析器遇到乐器声明时,会调用stockInstrument(identifier)做名称/别名反查,未识别的名称会报错unrecognized instrument: <name>(client/model/instruments.go),随后通过score.NewPart(name)创建声部,并为该声部设置一组默认属性(初始八度4、默认速度120、默认音量mf、默认量化0.9等,见 client/model/part.go)。

命令行上,你可以随时用alda instruments命令查看全部可用乐器的规范名称列表,其实现就是直接遍历InstrumentsList()(client/cmd/instruments.go,数据源为 client/model/instruments.go)。

四、完整乐器列表(按 GM 音色组划分)

以下乐器直接对应General MIDI 音色集,按 MIDI 规范中的音色组(patch group)划分,共 16 组、128 种音色。括号内是该乐器的别名。其中各组对应的音色程序号范围(1–128,从源码注释与 GM 规范可以对应)已标注在组名中。

4.1 Piano(钢琴,Patch 1–8)

  • midi-acoustic-grand-piano (midi-piano, piano)
  • midi-bright-acoustic-piano
  • midi-electric-grand-piano
  • midi-honky-tonk-piano
  • midi-electric-piano-1
  • midi-electric-piano-2
  • midi-harpsichord (harpsichord)
  • midi-clavi (midi-clavinet, clavinet)

4.2 Chromatic Percussion(有音调打击乐,Patch 9–16)

  • midi-celesta (celesta, celeste, midi-celeste)
  • midi-glockenspiel (glockenspiel)
  • midi-music-box (music-box)
  • midi-vibraphone (vibraphone, vibes, midi-vibes)
  • midi-marimba (marimba)
  • midi-xylophone (xylophone)
  • midi-tubular-bells (tubular-bells)
  • midi-dulcimer (dulcimer)

4.3 Organ(风琴,Patch 17–24)

  • midi-drawbar-organ
  • midi-percussive-organ
  • midi-rock-organ
  • midi-church-organ (organ)
  • midi-reed-organ
  • midi-accordion (accordion)
  • midi-harmonica (harmonica)
  • midi-tango-accordion

4.4 Guitar(吉他,Patch 25–32)

  • midi-acoustic-guitar-nylon (midi-acoustic-guitar, acoustic-guitar, guitar)
  • midi-acoustic-guitar-steel
  • midi-electric-guitar-jazz
  • midi-electric-guitar-clean (electric-guitar-clean)
  • midi-electric-guitar-palm-muted
  • midi-electric-guitar-overdrive (electric-guitar-overdrive)
  • midi-electric-guitar-distorted (electric-guitar-distorted)
  • midi-electric-guitar-harmonics (electric-guitar-harmonics)

4.5 Bass(贝斯,Patch 33–40)

  • midi-acoustic-bass (acoustic-bass, upright-bass)
  • midi-electric-bass-finger (electric-bass-finger, electric-bass)
  • midi-electric-bass-pick (electric-bass-pick)
  • midi-fretless-bass (fretless-bass)
  • midi-bass-slap
  • midi-bass-pop
  • midi-synth-bass-1
  • midi-synth-bass-2

4.6 Strings(弦乐,Patch 41–48)

这一组在 GM 规范中还包括定音鼓(Timpani),源码注释也俏皮地标注了 "no idea why this is in strings, but ok!"(client/model/instruments.go)。

  • midi-violin (violin)
  • midi-viola (viola)
  • midi-cello (cello)
  • midi-contrabass (string-bass, arco-bass, double-bass, contrabass, midi-string-bass, midi-arco-bass, midi-double-bass)
  • midi-tremolo-strings
  • midi-pizzicato-strings
  • midi-orchestral-harp (harp, orchestral-harp, midi-harp)
  • midi-timpani (timpani)

4.7 Ensemble(合奏,Patch 49–56)

  • midi-string-ensemble-1
  • midi-string-ensemble-2
  • midi-synth-strings-1
  • midi-synth-strings-2
  • midi-choir-aahs
  • midi-voice-oohs
  • midi-synth-voice
  • midi-orchestra-hit

4.8 Brass(铜管,Patch 57–64)

  • midi-trumpet (trumpet)
  • midi-trombone (trombone)
  • midi-tuba (tuba)
  • midi-muted-trumpet
  • midi-french-horn (french-horn)
  • midi-brass-section
  • midi-synth-brass-1
  • midi-synth-brass-2

4.9 Reed(簧片,Patch 65–72)

  • midi-soprano-saxophone (midi-soprano-sax, soprano-saxophone, soprano-sax)
  • midi-alto-saxophone (midi-alto-sax, alto-saxophone, alto-sax)
  • midi-tenor-saxophone (midi-tenor-sax, tenor-saxophone, tenor-sax)
  • midi-baritone-saxophone (midi-baritone-sax, midi-bari-sax, baritone-saxophone, baritone-sax, bari-sax)
  • midi-oboe (oboe)
  • midi-english-horn (english-horn)
  • midi-bassoon (bassoon)
  • midi-clarinet (clarinet)

4.10 Pipe(吹管乐器,Patch 73–80)

  • midi-piccolo (piccolo)
  • midi-flute (flute)
  • midi-recorder (recorder)
  • midi-pan-flute (pan-flute)
  • midi-bottle (bottle)
  • midi-shakuhachi (shakuhachi)
  • midi-whistle (whistle)
  • midi-ocarina (ocarina)

4.11 Synth Lead(合成器主音,Patch 81–88)

  • midi-square-lead (square, square-wave, square-lead, midi-square, midi-square-wave)
  • midi-saw-wave (sawtooth, saw-wave, saw-lead, midi-sawtooth, midi-saw-lead)
  • midi-calliope-lead (calliope-lead, calliope, midi-calliope)
  • midi-chiffer-lead (chiffer-lead, chiffer, chiff, midi-chiffer, midi-chiff)
  • midi-charang (charang)
  • midi-solo-vox
  • midi-fifths (midi-sawtooth-fifths)
  • midi-bass-and-lead (midi-bass+lead)

4.12 Synth Pad(合成器音色垫,Patch 89–96)

  • midi-synth-pad-new-age (midi-pad-new-age, midi-new-age-pad)
  • midi-synth-pad-warm (midi-pad-warm, midi-warm-pad)
  • midi-synth-pad-polysynth (midi-pad-polysynth, midi-polysynth-pad)
  • midi-synth-pad-choir (midi-pad-choir, midi-choir-pad)
  • midi-synth-pad-bowed (midi-pad-bowed, midi-bowed-pad, midi-pad-bowed-glass, midi-bowed-glass-pad)
  • midi-synth-pad-metallic (midi-pad-metallic, midi-metallic-pad, midi-pad-metal, midi-metal-pad)
  • midi-synth-pad-halo (midi-pad-halo, midi-halo-pad)
  • midi-synth-pad-sweep (midi-pad-sweep, midi-sweep-pad)

4.13 Synth Effects(合成器效果,Patch 97–104)

  • midi-fx-rain (midi-fx-ice-rain, midi-rain, midi-ice-rain)
  • midi-fx-soundtrack (midi-soundtrack)
  • midi-fx-crystal (midi-crystal)
  • midi-fx-atmosphere (midi-atmosphere)
  • midi-fx-brightness (midi-brightness)
  • midi-fx-goblins (midi-fx-goblin, midi-goblins, midi-goblin)
  • midi-fx-echoes (midi-fx-echo-drops, midi-echoes, midi-echo-drops)
  • midi-fx-sci-fi (midi-sci-fi)

4.14 Ethnic(民族风乐器,Patch 105–112)

  • midi-sitar (sitar)
  • midi-banjo (banjo)
  • midi-shamisen (shamisen)
  • midi-koto (koto)
  • midi-kalimba (kalimba)
  • midi-bagpipes (bagpipes)
  • midi-fiddle
  • midi-shehnai (shehnai, shahnai, shenai, shanai, midi-shahnai, midi-shenai, midi-shanai)

4.15 Percussive(打击乐器,Patch 113–120)

  • midi-tinkle-bell (midi-tinker-bell)
  • midi-agogo
  • midi-steel-drums (midi-steel-drum, steel-drums, steel-drum)
  • midi-woodblock
  • midi-taiko-drum
  • midi-melodic-tom
  • midi-synth-drum
  • midi-reverse-cymbal

4.16 Sound Effects(音效,Patch 121–128)

  • midi-guitar-fret-noise
  • midi-breath-noise
  • midi-seashore
  • midi-bird-tweet
  • midi-telephone-ring
  • midi-helicopter
  • midi-applause
  • midi-gunshot (midi-gun-shot)

五、特殊乐器:midi-percussion(打击乐/鼓组)

除了上面 128 种音色,Alda 还有一个特殊的midi-percussion乐器(别名percussion)。它提供多种打击乐音色,每种音色映射到不同的音符:每个音符对应一个独立的打击乐器,但声音的音高与音符本身无关——也就是说,你在鼓组里写c8表示"底鼓"这一打击乐音色,而不是"C 音"。

在源码中,midi-percussion被单独建模,其IsPercussion字段为true,且不携带 PatchNumber(client/model/instruments.go、client/model/instruments.go)。播放时,打击乐声部会被固定分配到MIDI 通道 9(General MIDI 规范中的打击乐专用通道),见 client/model/midi.go 中determineMidiChannel的实现。

官方文档给出的鼓组示例:

(tempo! 150) midi-percussion: V1: # bass and snare o2 c4 e8 c r c e c V2: # cymbals (hi-hat, crash, ride bell, another crash) o2 f+8 f+ r o3 c+8~8 f16 f r8 a

其中o2 c4是底鼓(Bass Drum 1)、e是电军鼓(Electric Snare)、f+是闭镲(Closed Hi-Hat)、c+是吊镲(Crash Cymbal)、a是开镲(Open Hi-Hat)等。完整的音符到打击乐音色映射,可以参考仓库示例 examples/percussion.alda,其中按八度给出了每个半音对应的鼓件名称,例如:

八度音符打击乐音色
o1bAcoustic Bass Drum(原声底鼓)
o2c / c+ / d / d+ / eBass Drum 1 / Side Stick / Acoustic Snare / Hand Clap / Electric Snare
o3c+ / d+ / f / g / g+Crash Cymbal 1 / Ride Cymbal 1 / Ride Bell / Splash Cymbal / Cowbell
o4c / c+ / d / e / f / f+ / g / g+Hi Bongo / Low Bongo / Mute Hi Conga / Low Conga / High Timbale / Low Timbale / High Agogo / Low Agogo
o5c / c+ / d / d+ / e / f / f+ / g / g+Long Whistle / Short Guiro / Long Guiro / Claves / Hi Wood Block / Low Wood Block / Mute Cuica / Open Cuica
o6c … b更高八度的鼓组扩展音色

六、MIDI 通道分配:128 种乐器如何放进 16 个通道

从源码结构看,Alda 的音序引擎采用 MIDI 的16 个通道进行播放,其中通道 9 保留给打击乐。非打击乐乐器的通道分配逻辑在 client/model/midi.go 中实现:

  • simpleCheck:优先找一个完全空闲、或仅被本声部独占的通道;
  • complexCheck:当通道紧张时,检查其他声部的音符是否与当前音符在时间上重叠,若某通道上其他声部此时没有音符,就可以共享该通道;
  • availableMidiChannel:两种策略都失败时,返回错误并提示"乐谱中的乐器超过 16 个,且无法通过共享通道解决"。

这意味着 Alda 允许你在一个乐谱中使用超过 16 个乐器声部——只要它们在时间上不冲突,Alda 会自动把它们复用分配到同一通道。仓库示例 examples/all-instruments.alda 正是利用这一机制,用 128 种乐器依次演奏同一段旋律(The Lick™),并通过r1*N错开每个声部的起始时间,避免通道冲突。该示例注释也印证了这一点:

There are only 15 non-percussion channels available in the MIDI synthesizer, but Alda works around this limitation by intelligently assigning each note to a channel that's available at that point in time in the score.

七、实战技巧:乐器分组与别名

7.1 多乐器分组

你可以让多个乐器同时演奏同一段音符,使用斜杠/分组:

trumpet/trombone: c d e f g f e d c

但要注意,Alda 仍为每个乐器独立跟踪音量、速度、八度、偏移量等状态,若希望它们严格同步,需要由作曲者自行保证各声部从同一偏移量开始。更详细的说明见 doc/scores-and-parts.md。

7.2 别名的解析规则

从源码看,别名与规范名称在stockInstrumentsmap 中是等价的(client/model/instruments.go)。写乐谱时优先使用midi-前缀的规范名称以获得长期稳定;短别名(如piano、guitar、organ、violin)适合快速草稿,但官方明确提示这些别名未来可能被替换为非 MIDI 乐器实现。

7.3 快速验证

  • 运行alda instruments可打印全部 129 个可用名称(128 种音色 +midi-percussion);
  • 用alda play或 REPL 播放midi-harpsichord: c8 d e f g a b > c即可听到羽管键琴音色;
  • 完整试听 128 种乐器,可直接加载并播放 examples/all-instruments.alda。

八、中文资料

本主题另有官方中文翻译版本 doc/doc_zh_cn/list-of-instruments_zh_cn.md,其中乐器名称与别名保持英文原样,便于对照阅读。其余相关的乐谱语法(音符、和弦、声部、速度、标记等)可查阅 doc/index.md 下的对应文档。

  • 编程语言
  • 音频
  • CLI

【免费下载链接】alda

A music programming language for musicians. :notes:

项目地址:https://gitcode.com/gh_mirrors/al/alda
点击查看免费下载

相关推荐

上一篇:大气层1.7.1整合包:Nintendo Switch破解的终极解决方案
下一篇:大气层系统:如何用最安全的方式解锁你的Nintendo Switch全部潜能

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询