Skip to main content

解析 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# /抗体

八度

音符八度的有效值介于08之间。

颤音

可选地,可以为单个音符启用和配置颤音。这是通过在音符末尾添加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 文档可以在这里找到

项目详情


下载文件

下载适用于您平台的文件。如果您不确定要选择哪个,请了解有关安装包的更多信息。

内置分布

ptttl-1.2.0-py3-none-any.whl (14.1 kB 查看哈希

已上传 py3