跳转到主要内容

处理音乐宏语言的现代库

项目描述

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.htmlhttp://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项目中的专有扩展。

注释

以#开头的行是注释。在文件开头,注释可以用来编码元数据。这尚未指定。当前实现解析由冒号和空格分隔的键值对,去除键和值,将键转换为小写并添加到字典中。

音乐XML导出目前特别识别以下键

  • 标题、版权、编码者(人)、来源

  • 作曲家、歌词、编曲家、译者 艺术家(已弃用,仅有一个)

任何其他键被视为杂项字段。

声部

歌曲的声部是交错排列的。它们按符号系统分组,符号系统之间由空行分隔。

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 (39.3 kB 查看散列值)

上传时间 源代码

构建分发

MMLlib-1.4-py3-none-any.whl (23.4 kB 查看散列值)

上传时间 Python 3

由以下支持