
编程语言音频CLI【免费下载链接】aldaA music programming language for musicians. :notes:项目地址https://gitcode.com/gh_mirrors/al/alda点击查看免费下载Alda 是一款面向音乐家的音乐编程语言其核心乐谱语法允许你用纯文本描述声部与音符。本文聚焦 Alda 内置的乐器Instrument系统目前 Alda 完全基于General MIDIGM音色集提供 128 种音色乐器与一套完整打击乐映射所有乐器名称与别名均可在乐谱中直接使用。读完本文你将掌握 Alda 中乐器的书写规范、midi-前缀的含义、全部 16 组 128 种乐器的标准名称与别名以及乐器在解析器与播放引擎如 MIDI 通道分配层面的实现原理。一、概览Alda 当前只支持 General MIDI 乐器官方文档 doc/list-of-instruments.md 明确说明目前 Alda 只支持General MIDIGM乐器。项目计划在未来加入波形合成能力届时你将可以使用正弦波、方波、三角波、锯齿波以及由这些波形构建的复杂合成器。但在当前版本中乐谱可用的乐器就是下文列出的 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 cAlda 处理乐谱时是顺序扫描的它会为每个乐器独立跟踪音量、速度、时值、偏移量offset与八度等状态。当你切换到别的乐器再切回来时不需要手动把参数改回去——Alda 会自动记住每个声部上一次的状态。这也是乐器部件可以分段书写、交错书写的基础详见 doc/scores-and-parts.md。三、乐器名称与别名是如何解析的源码级原理在 Go 源码中每种乐器被建模为一个MidiInstrument核心字段包括NameImpl乐器的规范名称即midi-开头的名称PatchNumberGM 音色程序号Program Change 值IsPercussion是否为打击乐通道乐器。定义见 client/model/instruments.go。程序初始化时init()会把每一个规范名称和它的全部别名统一注册到stockInstruments这个 map 中名称与别名都指向同一个MidiInstrument实例client/model/instruments.go。因此在乐谱里写piano:与写midi-acoustic-grand-piano:效果完全相同。当解析器遇到乐器声明时会调用stockInstrument(identifier)做名称/别名反查未识别的名称会报错unrecognized instrument: nameclient/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–8midi-acoustic-grand-piano (midi-piano, piano)midi-bright-acoustic-pianomidi-electric-grand-pianomidi-honky-tonk-pianomidi-electric-piano-1midi-electric-piano-2midi-harpsichord (harpsichord)midi-clavi (midi-clavinet, clavinet)4.2 Chromatic Percussion有音调打击乐Patch 9–16midi-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–24midi-drawbar-organmidi-percussive-organmidi-rock-organmidi-church-organ (organ)midi-reed-organmidi-accordion (accordion)midi-harmonica (harmonica)midi-tango-accordion4.4 Guitar吉他Patch 25–32midi-acoustic-guitar-nylon (midi-acoustic-guitar, acoustic-guitar, guitar)midi-acoustic-guitar-steelmidi-electric-guitar-jazzmidi-electric-guitar-clean (electric-guitar-clean)midi-electric-guitar-palm-mutedmidi-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–40midi-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-slapmidi-bass-popmidi-synth-bass-1midi-synth-bass-24.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-stringsmidi-pizzicato-stringsmidi-orchestral-harp (harp, orchestral-harp, midi-harp)midi-timpani (timpani)4.7 Ensemble合奏Patch 49–56midi-string-ensemble-1midi-string-ensemble-2midi-synth-strings-1midi-synth-strings-2midi-choir-aahsmidi-voice-oohsmidi-synth-voicemidi-orchestra-hit4.8 Brass铜管Patch 57–64midi-trumpet (trumpet)midi-trombone (trombone)midi-tuba (tuba)midi-muted-trumpetmidi-french-horn (french-horn)midi-brass-sectionmidi-synth-brass-1midi-synth-brass-24.9 Reed簧片Patch 65–72midi-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–80midi-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–88midi-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-voxmidi-fifths (midi-sawtooth-fifths)midi-bass-and-lead (midi-basslead)4.12 Synth Pad合成器音色垫Patch 89–96midi-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–104midi-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–112midi-sitar (sitar)midi-banjo (banjo)midi-shamisen (shamisen)midi-koto (koto)midi-kalimba (kalimba)midi-bagpipes (bagpipes)midi-fiddlemidi-shehnai (shehnai, shahnai, shenai, shanai, midi-shahnai, midi-shenai, midi-shanai)4.15 Percussive打击乐器Patch 113–120midi-tinkle-bell (midi-tinker-bell)midi-agogomidi-steel-drums (midi-steel-drum, steel-drums, steel-drum)midi-woodblockmidi-taiko-drummidi-melodic-tommidi-synth-drummidi-reverse-cymbal4.16 Sound Effects音效Patch 121–128midi-guitar-fret-noisemidi-breath-noisemidi-seashoremidi-bird-tweetmidi-telephone-ringmidi-helicoptermidi-applausemidi-gunshot (midi-gun-shot)五、特殊乐器midi-percussion打击乐/鼓组除了上面 128 种音色Alda 还有一个特殊的midi-percussion乐器别名percussion。它提供多种打击乐音色每种音色映射到不同的音符每个音符对应一个独立的打击乐器但声音的音高与音符本身无关——也就是说你在鼓组里写c8表示底鼓这一打击乐音色而不是C 音。在源码中midi-percussion被单独建模其IsPercussion字段为true且不携带 PatchNumberclient/model/instruments.go、client/model/instruments.go。播放时打击乐声部会被固定分配到MIDI 通道 9General 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 f8 f r o3 c8~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 Snareo3c / d / f / g / gCrash Cymbal 1 / Ride Cymbal 1 / Ride Bell / Splash Cymbal / Cowbello4c / c / d / e / f / f / g / gHi Bongo / Low Bongo / Mute Hi Conga / Low Conga / High Timbale / Low Timbale / High Agogo / Low Agogoo5c / c / d / d / e / f / f / g / gLong Whistle / Short Guiro / Long Guiro / Claves / Hi Wood Block / Low Wood Block / Mute Cuica / Open Cuicao6c … 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 thats 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【免费下载链接】aldaA music programming language for musicians. :notes:项目地址https://gitcode.com/gh_mirrors/al/alda点击查看免费下载相关推荐3步找回加密压缩包密码免费开源工具的终极指南3步找回加密压缩包密码免费开源工具的终极指南 你是否曾经面对一个重要的加密压缩包明明记得密码就在某个地方却怎么也想不起来那种无助感相信很多人都经历过。编程语言音频CLIAlda乐器大全128种MIDI音色完整指南与使用技巧Alda乐器大全128种MIDI音色完整指南与使用技巧 Alda是一种创新的音乐编程语言专为音乐家和程序员设计。作为音乐编程的终极工具Alda提供了完整的编程语言音频CLIFFmpeg-Kit 跨平台多媒体处理完整指南8 种预构建包怎么选、6 个平台怎么接FFmpeg Kit 跨平台多媒体处理完整指南8 种预构建包怎么选、6 个平台怎么接 30 秒速览FFmpeg Kit 是什么现在该不该用 FFmpeg编程语言音频CLI上一篇大气层1.7.1整合包Nintendo Switch破解的终极解决方案下一篇大气层系统如何用最安全的方式解锁你的Nintendo Switch全部潜能创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考