Alda 音符语法完全指南:八度、时值、临时变音记号与调号实战
编程语言音频CLI【免费下载链接】aldaA music programming language for musicians. :notes:项目地址https://gitcode.com/gh_mirrors/al/alda点击查看免费下载本篇技术指南围绕 Alda 音乐编程语言的核心基础——音符Notes展开系统讲解音符的三大组成要素八度组、时值与音名/变音记号并深入介绍 Alda 独有的高级节奏能力非标准音符时值、十进制时值、毫秒/秒时长。读完本篇你将掌握用 Alda 编写可运行乐谱的基本功能够独立写出从单音符到带调号的完整音阶与旋律片段并理解其底层解析与事件生成原理。本文对应仓库中的官方文档 doc/doc_zh_cn/notes_zh_cn.md。音符语法总览Alda 的音符语法深受 MMLMusic Macro Language 启发。一个音符由以下部分组成从a到g的一个音名必选任意数量的临时变音记号可选一个音符时值标记可选。即音名 [变音记号] [时值标记]例如c表示默认八度、默认时值的 C 音c4表示升 C 的四分音符。在扫描器层面c会被识别为NoteLettertoken为Sharp-为Flat_为Natural数字时值则生成NoteLength/NoteLengthMs/NoteLengthSecondstoken具体实现见 client/parser/scanner.go。八度组Octave西方音乐理论将音高划分为每 12 个音一组十二平均律的重复八度组例如升序的c c# d d# e f f# g g# a a# b再往上是高八度的c c# d ...。音名如 C#与八度的组合决定了音符的频率Hz。八度组用数字表示通常在 1 到 7 之间对应科学音高记号也称国际音高记号。例如中央 C 与 A440 都位于第 4 个八度组——这也是 Alda 的默认八度组。与 MML 一样八度组与音符本身是分开设置的八度不是附加在音符上的而是每个音符在解析时查看当前的八度组来确定自己的音高。设置八度组有两种方式语法含义o5将八度组设置为 5任何整数都可以跟在o后面将当前八度组减少 1将当前八度组增加 1o指令、与在扫描器中分别对应OctaveSet、OctaveDown、OctaveUp三种 token见 client/parser/scanner.go并最终转化为模型层OctaveSet/OctaveUp/OctaveDown这类属性更新AttributeUpdate见 client/model/attributes.go。解析器的测试用例 client/parser/octaves_test.go 验证了包括连续上移三个八度、上移→下移→上移、以及c、c这类八度指令紧跟音符/音符紧跟八度指令在内的各种写法。音符时值Duration在 Alda 中音符时值通常以标准音乐符号中的音符长度表示采用数字形式4是四分音符2是二分音符1是全音符以此类推。附点Dots音符后面可以添加任意数量的点.其作用与标准音乐符号中的附点一致——将音符的时值延长到其原值的 1.5 倍即延长其一半的时值。后续每加一个点延长的时值都是上一个点所延长时值的一半写法含义拍数2二分音符2 拍2.附点二分音符3 拍2 × 1.52..复附点二分音符3.5 拍2 × 1.5 2 × 0.5 × 0.5模型层通过NoteLength{Denominator, Dots}表达这一概念拍数计算公式为(4 / Denominator) * (2 - 2^(-Dots))见 client/model/duration.go 与Beats()实现client/model/duration.go。单元测试 client/model/duration_test.go 验证了这些换算四分音符 1 拍、附点四分音符 1.5 拍、全音符 4 拍、附点全音符 6 拍、复附点全音符 7 拍。连音线Tie音符时值也可以用连音线语法~相加例如4~4表示两个四分音符连在一起总共 2 拍。在扫描器中~生成Tietoken见 client/parser/scanner.go在模型层Duration由若干DurationComponent相加得到Beats()与Ms()都会把所有组件求和见 client/model/duration.go。默认时值的粘性跟踪当音符在乐谱中按顺序解析时Alda 会持续跟踪当前八度组和当前默认音符时值。每当指定新的八度组或音符时值那些数据就成为新的默认值后续未显式写明时值的音符都会沿用这一默认时值。在每个乐器部分的开头默认八度组为4默认音符时值为4即四分音符1 拍。源码层面时值粘性由 client/model/note.go 中的effectiveDuration与updateDefaultDuration实现若音符未指定时值则使用该乐器部分当前默认的part.Duration若指定了时值则该时值同时被写回为部分的新默认值。这意味着你可以在乐谱中先写一个c4后面的d e f都会自动按四分音符演奏直到下一个显式时值出现。高级节奏Advanced RhythmsAlda 在节奏表达上有几个超越传统记谱的独特能力1. 非标准数字时值。你可以使用非 2 的幂的数字作为音符时值标记。例如6表示在 4/4 拍中持续 1/6 小节的音符。在标准记谱中没有六分音符这种东西这种时值通常会被记作四分音符三连音中的一个音符但在 Alda 中六分音符不一定是三连音的一部分这为创造更多有趣的节奏提供了可能性。2. 非整数十进制音符时值。扩展到上述概念Alda 允许小数音符时值例如c0.5西方古典记谱中的双全音符的时值是c1全音符的两倍。这些数字不必是 2 的幂例如c2.4同样是合法的。扫描器的parseNoteLength会先消费整数部分若遇到小数点后跟数字则继续消费小数部分最终把整个数值作为denominator解析见 client/parser/scanner.go。3. Cram 表达式。Alda 还提供了一种指定节奏的替代方法——cram 表达式用于在一段时间内塞入指定数量的音符。4. 毫秒与秒。音符时值还可以用毫秒ms和秒s表示并且可以随意与标准音符长度混搭c350ms # 持续350毫秒的C音符 d2s # 持续2秒的D音符 e2s~200ms # 持续2秒200毫秒的E音符 f300ms~4. # 持续300毫秒附点四分音符的F音符扫描器在数字后遇到s且其后是合法分隔符时生成NoteLengthSecondstoken遇到ms时生成NoteLengthMstoken见 client/parser/scanner.go。模型层对应NoteLengthMs与NoteLengthSeconds两种时值组件毫秒组件直接返回自身毫秒数秒组件乘以 1000 转换为毫秒见 client/model/duration.go。注意这两种组件无法直接换算为拍数Beats()会直接 panic见 client/model/duration.go但它们可以自由地与标准音符时值通过~组合成同一个Duration。音符格式与临时变音记号一个音符的完整格式为从a到g的一个字母 任意数量的临时变音记号可选 音符时值标记可选。降号和升号分别使音高降低/升高半音。在 Alda 中降号表示为-升号表示为。你可以使用多个升号或降号甚至把它们组合起来使用例如c 升 Cc 双升号 C Db- 降 B解析器测试 client/parser/notes_test.go 中包含了c升音、b-降音、c双升音、b--双降音等用例验证了任意数量变音记号的累积效果。在模型层LetterAndAccidentals保存音名与变音记号列表CalculateMidiNote会将每个升号 1、每个降号 -1 得到最终的 MIDI 音高见 client/model/pitch.go。用调号代替逐个升降号对于非 C 大调的乐曲如果每个不在调内的音都需要写升/降号重复书写会非常繁琐。此时更推荐使用调号为每个需要的音名预设升/降号以匹配调性乐谱会按定义的升降号自动演奏。下文示例中演示了具体用法。用临时变音记号覆盖调号要覆盖调号预设的降号/升号可以添加临时变音记号/-使音符临时升调/降调_代表还原号强制音符为自然音。例如c_是 C 自然音无论调号预设中给 C 音名设置了什么升降号。这对应扫描器中的Naturaltoken 与模型层Accidental枚举中的Natural见 client/model/pitch.go。完整示例B 大调音阶以下是 1 个八度的 B 大调音阶从第 4 个八度组开始先上行后下行o4 b4 c8 d e f g a b4 a8 g f e d c b2.第二个示例在开头处预设了 B 大调中被升高的那些音名f c g d a这样乐谱中就不必重复书写升降号音符会自动以预设的升降号演奏(key-signature f c g d a) o4 b4 c8 d e f g a b4 a8 g f e d c b2.仓库示例 examples/key_signature.alda 展示了更完整的调号实战先用字符串形式设置(key-signature f c g)再用c_、f_、g_还原号覆盖个别音随后切换到(g minor)小调调号最后使用列表形式(e (flat) b (flat))指定降号。调号相关属性的完整说明值类型、缩写key-sig、支持的调式等见 doc/doc_zh_cn/attributes_zh_cn.md。源码层面的实现原理扫描与解析从源码结构看Alda 的音符解析分为两个阶段扫描器 client/parser/scanner.go 先将源码文本切分为 tokenNoteLetter、Sharp、Flat、Natural、NoteLength、OctaveSet、OctaveUp、OctaveDown、Tie等再由语法解析器组合成 AST 更新见 client/parser/parser.go。isNoteLetter限定只有a到g是合法的音符字母client/parser/scanner.gofollowsNoteLetter决定一个字母后可以跟随什么字符数字、变音记号、~连音线、/八度移动等从而避免歧义client/parser/scanner.go。时值如何变成真实时长在模型层每个音符最终会被转换为带绝对时间信息的NoteEventMIDI 音符号、偏移、时长、可听时长、音量、声像等见 client/model/note.go。Note.UpdateScore会为每个当前乐器部分计算时长标准音符时值依据Beats()换算拍数再结合part.Tempo得到毫秒数60000 / tempo为每拍毫秒数见 client/model/duration.go未连音非 slur的音符还会乘以part.Quantization得到可听时长。这些换算关系可以在 client/model/duration_test.go 的测试用例中看到——例如附点音符、全音符到拍数/毫秒的转换都有一一对应的断言。变音记号与 MIDI 音高LetterAndAccidentals.CalculateMidiNote展示了完整求音高流程先按(octave 1) * 12 音名音程计算基准 MIDI 音符号若音符未显式给出变音记号则取调号keySignature[NoteLetter]中的默认升降号否则使用音符自带的变音记号列表逐项加减最后叠加乐器移调见 client/model/pitch.go。这也印证了文档中临时变音记号覆盖调号的行为只要音符自带/-/_调号即被忽略。至此你已经掌握了 Alda 音符语法的全部核心内容八度组o//、标准与附点/连音时值、高级节奏非标准数字、小数、ms/s、变音记号与调号的配合使用。建议结合仓库中的 examples/key_signature.alda、examples/dynamics.alda 等示例以及 cram 表达式、属性 文档继续深入配合alda play命令见 client/cmd/play.go实际聆听效果逐步构建完整的 Alda 作曲工作流。赞分享编程语言音频CLI【免费下载链接】aldaA music programming language for musicians. :notes:项目地址https://gitcode.com/gh_mirrors/al/alda点击查看免费下载相关推荐Alda 和弦Chords完全指南同时发声音符的语法、时值规则与实战应用Alda 和弦Chords完全指南同时发声音符的语法、时值规则与实战应用 导读 在和弦是音乐编程语言 Alda 中最基础也最常用的结构之一它允许你将多个编程语言音频CLI使用 AWS SDK for Rust 操作 AWS Elemental MediaPackageChannel 与 Origin Endpoint 的列举实战使用 AWS SDK for Rust 操作 AWS Elemental MediaPackageChannel 与 Origin Endpoint 的列举实编程语言音频CLIAlda 和弦Chord语法完全指南同时发声的音符组合与最短时值推进机制Alda 和弦Chord语法完全指南同时发声的音符组合与最短时值推进机制 和弦chord 是 Alda 音乐编程语言中表示多个音符在同一时刻开始发声的编程语言音频CLI上一篇QuantStats技术解构量化投资分析效率提升的四个实践维度下一篇FullCalendar 版本演进全解析从 v1 到 v7 的架构变革、破坏性变更与升级要点创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

Apache Beam ZetaSQL 字符串函数完全指南:CHAR_LENGTH 到 TRIM 的语法、语义与源码实现

Apache Beam ZetaSQL 字符串函数完全指南:CHAR_LENGTH 到 TRIM 的语法、语义与源码实现

大数据批处理流处理数据工程 【免费下载链接】beam Apache Beam is a unified programming model for Batch and Streaming data processing. 项目地址: https://gitcode.com/gh_mirrors/beam4/beam 点击查看 免费下载 本篇技术指南基于 string-functions.md 文档&…

2026/10/10 13:59:41 阅读更多 →
嵌入式温控方案:PJ85718DM与MKV46F256VLH16双芯片架构实战

嵌入式温控方案:PJ85718DM与MKV46F256VLH16双芯片架构实战

1. 从一颗温度传感器说起:为什么嵌入式温控方案值得认真对待做嵌入式这行十几年,我经手过不少温度采集项目,从简单的单点测温到多点组网监控都有。说实话,温度监测看起来是个特别"基础"的需求,但真正把它做稳…

2026/10/10 13:59:41 阅读更多 →
Agent 记忆机制 + 跨工具迁移:让 AI 配置跟着人走,TaoToken 统一 Key 通道实践

Agent 记忆机制 + 跨工具迁移:让 AI 配置跟着人走,TaoToken 统一 Key 通道实践

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/10 13:58:40 阅读更多 →

最新新闻

MCP 一年从「外网新词」变「平台标配」:交易平台集体下场的信号

MCP 一年从「外网新词」变「平台标配」:交易平台集体下场的信号

MCP 一年从「外网新词」变「平台标配」:交易平台集体下场的信号 【免费下载链接】tradingview-mcp AI-assisted TradingView chart analysis — connect Claude Code to your TradingView Desktop for personal workflow automation 项目地址: https://gitcode.co…

2026/10/10 14:47:51 阅读更多 →
学生公寓管理系统毕设实战:从数据库设计到权限控制完整实现

学生公寓管理系统毕设实战:从数据库设计到权限控制完整实现

每年三四月,都会有一批计算机专业的同学盯着“学生公寓管理系统”这个毕设题目发呆。我去年帮人把一套带源码的学生公寓管理系统从头到尾跑通,包括环境搭建、数据库设计、权限控制、页面逻辑,再到论文和答辩,踩过的坑可以写满两页…

2026/10/10 14:47:51 阅读更多 →
智谱GLM-5.3 vs Kimi K3:2026-10-08深度对比分析:中文Agent生态...

智谱GLM-5.3 vs Kimi K3:2026-10-08深度对比分析:中文Agent生态...

智谱GLM-5.3 vs Kimi K3:2026-10-08深度对比分析:中文Agent生态与超长上下文技术路线引言:选型困境在国产AI大模型生态中,智谱GLM系列与月之暗面Kimi系列分别代表了两种不同的技术路线。前者以均衡的中文理解、代码生成和逻辑推理…

2026/10/10 14:47:51 阅读更多 →
焊接缺陷检测数据集实战:6类2684张YOLO+VOC双格式训练与避坑指南

焊接缺陷检测数据集实战:6类2684张YOLO+VOC双格式训练与避坑指南

简介:这份资源面向从事工业质检、焊接工艺检测及计算机视觉方向的研究者与开发者,提供一套可直接用于目标检测模型训练的焊接缺陷数据集,帮助解决焊接缺陷样本稀缺、标注成本高的问题。压缩包共约2000个文件,以1999个xml标注文件和…

2026/10/10 14:47:51 阅读更多 →
2026年学生必备AI编程工具,强烈建议收藏:从Trae到TaoToken的实战配置清单

2026年学生必备AI编程工具,强烈建议收藏:从Trae到TaoToken的实战配置清单

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/10 14:47:51 阅读更多 →
微信小程序开发框架怎么选?从原生到uni-app、Taro的选型指南

微信小程序开发框架怎么选?从原生到uni-app、Taro的选型指南

这几年做小程序,后台代码写腻了,半夜还在帮朋友调包体积的,十个里面八个都在纠结同一件事:框架到底怎么选。我做过原生,用 uni-app 趟过混合开发,也帮人维护过 Taro 的老项目,三种风格都摸过一遍…

2026/10/10 14:46:50 阅读更多 →

日新闻

卫星轨道分类全解析:从LEO到GEO的选型逻辑与工程实践

卫星轨道分类全解析:从LEO到GEO的选型逻辑与工程实践

1. 从“卫星轨道分类”这个标题说起:为什么值得花时间搞懂第一次接触“卫星轨道分类”这个概念,很多人会觉得它离自己很远——不就是天上的星星怎么转吗?但如果你正在做航天任务规划、遥感数据接收、星座设计,甚至只是准备一场航天…

2026/10/10 0:00:39 阅读更多 →
Spring AOP 核心原理与实战:从概念到日志切面落地

Spring AOP 核心原理与实战:从概念到日志切面落地

1. 从一个真实痛点说起:为什么你的代码里到处都是重复逻辑刚入行那会儿,我写过一个用户管理模块,注册、登录、改密码、注销四个接口。每个接口里都塞了几乎一样的日志打印、参数校验、事务开启和提交。当时觉得没什么,能跑就行。直…

2026/10/10 0:00:40 阅读更多 →
Python招聘数据采集与分析可视化:从采集清洗到薪资技能城市可视化全链路

Python招聘数据采集与分析可视化:从采集清洗到薪资技能城市可视化全链路

简介:这是一套面向计算机相关专业学生与项目实战学习者的Python数据采集与分析可视化完整项目,以Boss直聘岗位数据为对象,适合用作毕业设计、课程设计或期末大作业。资源包共38个文件,约246KB,以13个py源码文件为核心&…

2026/10/10 0:00:40 阅读更多 →

周新闻

KT148A语音芯片外挂8002D功放的工程实践指南

KT148A语音芯片外挂8002D功放的工程实践指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/10 11:14:25 阅读更多 →
LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/10 1:36:08 阅读更多 →
ARM架构深度解析:从RISC设计理念到交叉编译实战

ARM架构深度解析:从RISC设计理念到交叉编译实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/10 11:14:58 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/10 5:23:50 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/9 21:32:20 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/10 10:38:42 阅读更多 →