跳到主要内容

API-音调

GPIO Zero 包含一个 Tone 类,旨在与 TonalBuzzer 一起使用。此类位于 GPIO Zero 的 tones 模块中,通常按如下方式导入:

from gpiozero.tones import Tone

Tone

class gpiozero.tones.Tone(value=None, *, frequency=None, midi=None, note=None)

以各种音乐记号表示声音的频率。

Tone 类可与 TonalBuzzer 类一起使用,以便轻松表示音乐音调。该类可以以多种方式构造。例如,作为以 Hz 为单位的直接频率(这是内部存储格式),作为整数 MIDI 音符,或作为音乐音符的字符串表示。

以下所有构造函数都是构造典型调音音符 concert A(440Hz,即 MIDI 音符 #69)的等效方式:

>>> from gpiozero.tones import Tone
>>> Tone(440.0)
>>> Tone(69)
>>> Tone('A4')

如果您不想让构造函数猜测您使用的格式(在低频率端,从 128Hz 往下,频率和 MIDI 音符之间存在一些歧义),您可以使用显式构造函数 from_frequency()from_midi()from_note(),或者在构造时指定关键字参数:

>>> Tone.from_frequency(440)
>>> Tone.from_midi(69)
>>> Tone.from_note('A4')
>>> Tone(frequency=440)
>>> Tone(midi=69)
>>> Tone(note='A4')

提供了几个属性以允许转换为任何支持的构造格式:frequencymidinote。提供了 up()down() 方法来步进到相邻的 MIDI 音符。

注意

目前 Tone 派生自 float,在大多数情况下(加法、减法等)可以用作浮点数。API 的这一部分尚未被视为"稳定";即我们可能会在未来版本中决定增强/更改此行为。

from_frequency(freq)

从以 Hz 指定的频率构造 Tone,该频率必须是 0 < freq <= 20000 范围内的正浮点值。

from_midi(midi_note)

从 MIDI 音符构造 Tone,该音符必须是 0 到 127 范围内的整数。作为参考,A4(concert A,通常用于调音)是 MIDI 音符 #69。

from_note(note)

从音乐音符构造 Tone,该音符必须由大写字母 A 到 G 组成,后跟可选的半音修饰符("b"表示降号,"#"表示升号,或它们的 Unicode 等效字符),然后是八度数(0 到 9)。

例如,concert A,典型的 440Hz 调音音符,将表示为"A4"。比它高一个半音的将是"A#4"或"Bb4"。也接受升号和降号的 Unicode 表示。

down(n=1)

返回比此频率低 n 个半音的 Tonen 默认为 1)。

up(n=1)

返回比此频率高 n 个半音的 Tonen 默认为 1)。

property frequency

返回音调的频率,以 Hz 为单位。

property midi

返回与音调频率最接近的 MIDI 音符。这将是 0 到 127 范围内的整数。如果频率超出 MIDI 音符表示的范围(大约 8Hz 到 12.5KHz),将引发 ValueError 异常。

property note

返回与音调频率最接近的音符。这将是 from_note() 接受的格式的字符串。如果频率超出此格式表示的范围("A0"大约是 27.5Hz,"G9"大约是 12.5KHz),将引发 ValueError 异常。


中文翻译版以英文版相同知识授权方式共享:BSD-3-Clause。交流 Q群:498908352