处理音乐宏语言的现代库
项目描述
MMLlib - 处理音乐宏语言的现代库
关于
MMLlib是Microsoft® GW-BASIC®和兼容设备上实现的与音乐宏语言相关的功能纯Python实现,这是最常见的形式,也由Linux和BSD中的PC扬声器驱动程序实现,包含一系列扩展和更改
|表示小节线,由Linux/BSD驱动程序忽略
支持多个(并行)乐器音轨
每个文件带有包含工作元数据的首部(可选)
以#开始的行是注释
别名~(它本身是BSD扩展)不受支持
该库目前包含以下功能:
将(扩展)MML文件解析为元数据和单独的音轨
返回不使用扩展的标准化MML形式,应在原始BASIC解释器上播放
将持续时间估计和音轨数量添加到元数据中
返回一个包含(频率,持续时间)元组的列表,用于播放(在多线程解释器,如Floppi-Music中)
小节线单独表示为整数1
返回一个表示所有音轨的度量/小节的面向事件的列表;每个度量有一个持续时间和一个时间固定的音调开关事件列表;便于在非线程解释器中播放,可能还有MIDI导出
将(扩展)MML导出到MusicXML
可以被例如 MuseScore 导入以...
在视觉表示中双检查MML乐谱的错误
播放、编排等音乐
美化乐谱以打印成乐谱
导出为其他格式或在他们的网站上共享
将MML(目前仅限于第一条轨道)导出到NXC程序
检查轨道同步错误
缺少轨道,即0拍
缺少拍子(当然只能在结尾检测到)
在拍子内缺少音符,相对于其他轨道
使用MicroPython(实验性;可能对高音无效)上的PWM在ESP板上的GPIO引脚播放播放列表(解析MML)
示例
一些扩展MML示例文件包含在examples/目录中,作为对扩展格式的更好文档,除了MML格式文档。
使用MMLlib的项目
- Floppi-Music:
Floppi-Music 以MML作为Raspberry Pi上的软盘驱动器音乐的输入格式,并使用MMLlib进行处理。Floppi-Music也是MMLlib的起源,在其成为独立项目之前。
(扩展)音乐宏语言的描述
基于http://www.antonis.de/qbebooks/gwbasman/play.html和http://www.mirbsd.org/man4/spkr,这两个链接又模仿了IBM BASICA的“PLAY”命令。
MML的符号
- A-G[#,+,-][长度]:
A-G是音符。音符后的#或+产生升音;-产生降音。
- L(n):
设置每个音符的长度。L4是四分音符,L1是全音符,依此类推。n可能从1到64。长度也可以跟在音符后面,仅为此音符改变长度。A16相当于L16A。默认是L4。
- ML:
音乐连音。每个音符都播放由L设置的完整周期。虽然未明确指定,但大多数实现将相同的音高序列中的所有音符(除了最后一个)风格为连音。否则,或如果音高不同,则音符以滑音的方式播放。
- MN:
音乐正常。每个音符播放由L(长度)确定的七分之八的时间。这是默认设置。
- MS:
音乐断音。每个音符播放由L确定的四分之三的时间。
- N(n):
播放音符n。n的范围从0到84。在7个可能的八度中,有84个音符。n设置为0(或省略)表示休止符。
- O(n):
八度0设置当前八度。有7个八度(0到6)。默认是4。中音C在第二八度的开始处。特殊的值L和N控制八度跟踪。L启用八度跟踪,N禁用八度跟踪;启用八度跟踪时,音符之间的跳跃限制为6个半音,否则,八度相应地增加或减少。默认情况下禁用八度跟踪。在八度改变后,包括在轨道开始时设置默认八度,只应用于字母音符,八度跟踪暂停一个音符。
- P(n):
暂停。n的范围从1到64;如果省略,则使用当前的L值。
- T(n):
速度。T设置每分钟L4的数量。n的范围从32到255。默认是120。
- .(句号):
音符后面的句点会根据音符长度L(音符时长)和速度T,将音符演奏时间增加L乘以T再乘以3/2倍。音符后可以跟多个句点,演奏时间相应缩放。例如,A.会将音符A的演奏时间增加L乘以T再乘以1.5倍;在A后放置两个句点(A..),则音符演奏时间为其规定值的9/4倍;有三个句点(A…)的A演奏时间为27/8倍等。句点也可以出现在P(暂停)之后,并按照上述方式增加暂停长度。
- >:
大于号会使当前音高增加一个八度。
- <:
小于号会使当前音高降低一个八度。
- |:
可选地用作多轨音乐的同步标记。这是Floppi-Music项目中的专有扩展。
声部
歌曲的声部是交错排列的。它们按符号系统分组,符号系统之间由空行分隔。
MMLlib的变更日志
1.4
将主版本号提升以启用语义版本控制
添加音高跟踪功能。
添加对MicroPython/ESP PWM的基本支持。
现在“mmllint”命令可以输出“规范化”的MML,即不需要扩展(如音高跟踪或允许省略默认参数值)即可在GW-BASIC上播放的MML。
没有数字的“N”现在被正确解析(作为休止符)。
更新关于性能预期的文档,详细说明。
./run.py(在树内)现在默认使用python3作为解释器。
没有数字的“O”现在设置默认八度(扩展),这在文档和一致性中已经暗示。
0.3
启用Python 3兼容性。
添加新的mmllint脚本。
包含示例MML歌曲。
添加测试套件的第一部分。
一些错误修复。
0.2
添加mml2musicxml脚本。
0.1
从Floppi-Music中分离出来。
项目详情
下载文件
下载适用于您平台的应用程序。如果您不确定选择哪个,请了解更多关于安装软件包的信息。
源代码分发
构建分发
MMLlib-1.4.tar.gz的散列值
算法 | 散列摘要 | |
---|---|---|
SHA256 | c2bffd2357b8ff087b02cc1d902973eed385340667ed4c000588ad5d85111964 |
|
MD5 | 27eb867bed2aa590754f57a3c4fe52b9 |
|
BLAKE2b-256 | 1a4d2b6337bc76dbca4f1f74e30b818315e6c9eca06b8e9d22ca21fcd5120b4b |
注释
以#开头的行是注释。在文件开头,注释可以用来编码元数据。这尚未指定。当前实现解析由冒号和空格分隔的键值对,去除键和值,将键转换为小写并添加到字典中。
音乐XML导出目前特别识别以下键
标题、版权、编码者(人)、来源
作曲家、歌词、编曲家、译者 或 艺术家(已弃用,仅有一个)
任何其他键被视为杂项字段。