解析 PTTTL/RTTTL 乐谱文件
项目描述
和弦音调传输语言
ptttl是一个命令行实用程序,用于将 PTTTL 和 RTTTL文件转换为 .wav 音频文件。ptttl还提供了一个 API 用于解析 PTTTL 和 RTTTL文件,以将它们转换为可用的音乐数据。
和弦音调文本传输语言 (PTTTL) 是一种描述和弦旋律的方式,是诺基亚 RTTTL格式的超集,将其扩展为启用和弦和颤音。
API 文档
API 文档可以在这里找到
安装
从 pip 安装
pip install -r ptttl
用法
从命令行将 PTTTL/RTTTL 文件转换为 .wav 文件
python -m ptttl input.ptttl -f output.wav
运行python -m ptttl -h以查看可用选项。
在 python 脚本中解析 PTTTL/RTTTL 文件
>>> from ptttl.parser import PTTTLParser
>>> with open('input.pttl', 'r') as fh:
... ptttl_source = fh.read()
...
>>> parser = PTTTLParser()
>>> ptttl_data = parser.parse(ptttl_source)
>>> ptttl_data
PTTTLData([PTTTLNote(pitch=195.9977, duration=0.5625), PTTTLNote(pitch=195.9977, duration=0.2812), ...], ...)
在 python 脚本中将 PTTTL/RTTTL 文件转换为 .wav
>>> from ptttl.audio import ptttl_to_wav
>>> with open('input.pttl', 'r') as fh:
... ptttl_source = fh.read()
...
>>> ptttl_to_wav(ptttl_source, 'output.wav')
为什么?
我需要一种很好的方法来为某些项目存储简单的音调和旋律。RTTTL 看起来不错,但仅适用于单声道旋律。我需要复调。
PTTTL 格式
有效的 RTTTL 字符串也是有效的 PTTTL 字符串。正确处理 PTTTL 的解析器也可以处理 RTTTL。
一个 PTTTL 字符串由三个冒号分隔的部分组成;名称部分、 默认值部分和数据部分。
空白字符、空行和以“#”字符开头的行将被忽略。
最初的“名称”部分旨在包含原始 RTTTL 格式的铃声名称。PTTTL 要求此字段存在,以保持与 RTTTL 的向后兼容性,但对其内容没有限制。
默认值部分
第一个语句是默认值部分,与 RTTTL 格式中的同名部分相同。
b=123, d=8, o=4, f=7, v=10
b - 节拍,节奏:BPM 中的节奏(每分钟节拍)
d - 持续时间:如果没有指定音符的默认持续时间
o - 八度:如果没有指定音符的默认八度
f - 频率:如果未指定,则默认颤音频率,以 Hz 为单位
v - 方差:如果未指定,则与主音高的默认颤音方差,以 Hz 为单位
数据部分
PTTTL 数据部分就像 RTTTL 数据部分一样,旋律由多个逗号分隔的音符组成,按顺序播放。与 RTTTL 不同,PTTTL 允许定义多个旋律,由竖线字符|分隔。,所有这些都将齐声播放。
注释的格式与 RTTTL 格式所描述的相同。每个音符依次包括;持续时间说明符,标准音符,a、b、c、d、e、f 或 g(可选地后跟“#”或“b”表示升号和降号)和八度说明符。如果不存在持续时间或八度指定符,则应用默认值。
持续时间
音符持续时间的有效值:
1 - 整个音符
2 - 半音符
4 - 四分音符
8 - 八分音符
16 - 十六分音符
32 - 三十秒音符
可以通过添加句号“.”来形成虚线节奏模式。或者在音符字母之后(例如c#.或c#.5),或者在八度数之后(例如c#5.)
笔记
音符音高的有效值(不区分大小写):
P - 休息或暂停
一个
A# / Bb
乙/乙
C
C# /数据库
D
D# / Eb
电子/脸书
F / E#
F# / Gb
G
G# /抗体
八度
音符八度的有效值介于0和8之间。
颤音
可选地,可以为单个音符启用和配置颤音。这是通过在音符末尾添加v以及可选的由-字符分隔的频率和方差值来完成的。例如:
4c#v指的是启用了颤音的 C# 四分音符,使用默认设置
- 4c#v10是指启用了颤音的 C# 四分音符,使用的颤音频率为 10Hz,
和颤音方差的默认值
4c#v10-15是指启用了颤音的 C# 四分音符,颤音频率为 10Hz,与主音高的最大颤音变化为 15Hz。
例子
考虑以下 PTTTL 字符串:
# 123 beats-per-minute, default quarter note, default 4th octave Test Melody: b=123, d=4, o=4: 16c, 8p, 16c | 16e, 8p, 16e | 16g5, 8p, 16g5
这将同时演奏 3 个十六分音符(C,八度 4;E,八度 4;G,八度 5),然后是八分音符休止符,然后是相同的三个十六分音符
请注意,如果我们将每个旋律放在一个新的行上并在列中对齐音符,上面的示例会更容易阅读。这是编写 PTTTL 的推荐方式:
# Nicely aligned Test Melody: b=123, d=4, o=4: 16c, 8p, 16c | 16e, 8p, 16e | 16g5, 8p, 16g5
为了使具有多个并发轨道的大型 PTTTL 文件保持可读性,分号字符; 可用于进一步将旋律分解成更实用的块。就像竖管字符| 在单个旋律中 分隔并发轨道,分号字符在单个数据部分中分隔多个连续旋律。用分号分隔的旋律将在最终输出中一个接一个地缝合在一起。
分号不影响生成音调的任何时间或音高;它只是使 PTTTL 源更具可读性。看看这个更大的 PTTTL 文件,它有 4 个同步旋律,这是一个很好的例子,说明为什么分号很有用:
All Star but it's a Bach chorale: d=4,o=5,b=40: #some bo - dy once told me the world was go - 16g3., 32g3., 32g3., 16g3., 32f#., 32g., 32g., 16a3., 32g#., 32g#. | 16g., 32g., 32g., 16d., 32a3., 32b3., 32b3., 16a., 32b., 32b. | 16g4., 32d.6, 32b., 16g., 32a., 32d., 32d., 16e., 32b3., 32b3. | 16g4., 32b.4, 32d., 16b., 32d., 32d., 32d., 16c6., 32d., 32d. ; #-na roll me, I aint the sharp - est tool in 32a., 32a., 16g., 32g., 32g., 32g., 32g., 32f#., 32d#4., 32g. | 32c4., 32c4., 16e., 32c., 32d6., 32b., 32d4., 32d4., 32f#., 32e4. | 32e., 32e., 16e4., 32c4., 32b3., 32c4., 32b., 32c., 32a., 32b.4 | 32e., 32e., 16c., 32e., 32d., 32d., 32d., 32a., 32c., 32e. ; #the she - ed, she was loo - king kind of 32g., 16c4., 32a3., 8p., 32g., 32g., 32g3., 32g3., 32g3., 32f#. | 32d4., 16e., 32d., 8p., 32g4., 32g4., 32g., 32g., 32g., 32a3. | 32b.4, 16c., 32f#4., 8p., 32b3., 32a3., 32b4., 32b., 32b., 32a. | 32e., 16g4., 32a4., 8p., 32d., 32d., 32d6., 32d., 32d., 32d. ; #dumb with her fing - er and her thumb in the 32g., 32g., 32g., 16a4., 32b., 32b., 32a., 32a3., 32g., 32g. | 32a., 32b3., 32e4., 16e., 32g#4., 32g#4., 32c., 32c., 32b4., 32c. | 32b3., 32d., 32b4., 16c6., 32e., 32e., 32e., 32a., 32c4., 32c4. | 32d., 32d., 32e., 16c6., 32d., 32d., 32a4., 32e., 32e., 32e. ; #shape of an L on her for - head 16g., 32g., 32g., 16a., 32g., 32g., 16a., 32a4. | 16d., 32b., 32d4., 16f#., 32e4., 32e4., 16a4., 32d. | 16d6., 32c4., 32b., 16c., 32b4., 32b4., 16f#., 32e. | 16b3., 32d., 32d., 16d#4., 32e., 32e., 16c., 32e.
用法
从 pip 安装
pip install -r ptttl
将 PTTTL 文件转换为 .wav 文件中的可听音:
python -m ptttl input.ptttl -f output.wav
API 文档可以在这里找到