1. 文档中心
  2. 比卜创造 Micro:bit
  3. API 参考
  4. 音频

音频

audio 模块用于在 micro:bit 上播放声音。

默认音频输出为边缘连接器 pin0 与内置扬声器。可将有线耳机或外接扬声器接到 pin0 与 GND 收听。

可 import audio,或通过 bibo.audio 访问。

audio.play() 支持三类音源:

  1. 内置音效,如 audio.play(Sound.HAPPY)
  2. SoundEffect 自定义音效
  3. AudioFrame 序列(列表或生成器),每帧 32 个 0–255 采样

函数

play(source, wait=True, pin=pin0, return_pin=None)

播放音源直至结束。

参数

  • source:音源,可为以下类型之一:
    • Sound:bibo 模块中的内置音效,如 audio.play(Sound.TWINKLE)
    • SoundEffect:单个或多个音效实例
    • AudioFrame:可迭代的 AudioFrame 序列
  • wait:为 True 时阻塞直到播放完成。
  • pin:输出引脚,默认 pin0;设为 pin=None 可不输出到引脚。
  • return_pin:差分输出时的另一边缘连接器引脚(相对 GND),用于外接扬声器。

is_playing()

返回值:正在播放时为 True,否则为 False。

stop()

停止所有音频播放。

内置音效

使用 audio.play(Sound.NAME) 播放:

  • Sound.GIGGLE
  • Sound.HAPPY
  • Sound.HELLO
  • Sound.MYSTERIOUS
  • Sound.SAD
  • Sound.SLIDE
  • Sound.SOARING
  • Sound.SPRING
  • Sound.TWINKLE
  • Sound.YAWN

示例

from bibo import *

while True:
    if button_a.is_pressed() and button_b.is_pressed():
        audio.play(Sound.HELLO, pin=pin0)
    elif button_a.is_pressed():
        audio.play(Sound.HAPPY)
        display.show(Image.HAPPY)
    elif button_b.is_pressed():
        audio.play(Sound.TWINKLE, wait=False)
        display.show(Image.BUTTERFLY)

    sleep(500)
    display.clear()

SoundEffect

SoundEffect(freq_start=500, freq_end=2500, duration=500, vol_start=255, vol_end=0, waveform=WAVEFORM_SQUARE, fx=FX_NONE, shape=SHAPE_LOG)

SoundEffect 实例表示一段可配置参数的音效。构造参数均可选,默认值见上,也可通过同名属性修改。

构造参数

  • freq_start:起始频率(Hz),默认 500
  • freq_end:结束频率(Hz),默认 2500
  • duration:时长(毫秒),默认 500
  • vol_start:起始音量 0–255,默认 255
  • vol_end:结束音量 0–255,默认 0
  • waveform:WAVEFORM_SINE、WAVEFORM_SAWTOOTH、WAVEFORM_TRIANGLE、WAVEFORM_SQUARE、WAVEFORM_NOISE,默认 WAVEFORM_SQUARE
  • fx:FX_TREMOLO、FX_VIBRATO、FX_WARBLE、FX_NONE,默认 FX_NONE
  • shape:频率插值曲线 SHAPE_LINEAR、SHAPE_CURVE、SHAPE_LOG,默认 SHAPE_LOG

copy()

返回值:该 SoundEffect 的副本。

属性

  • freq_start、freq_end:0–9999 Hz
  • duration:0–9999 毫秒
  • vol_start、vol_end:0–255
  • waveform、fx、shape:同上枚举值

可用 print() 或 str() 查看人类可读描述;repr() 可得到可 eval() 的紧凑表示,便于保存或通过无线电传输。

示例

from bibo import *
import audio

sweep = audio.SoundEffect(freq_start=400, freq_end=2500, duration=500)
audio.play(sweep)

while not button_a.was_pressed():
    sleep(50)

audio.play(audio.SoundEffect(waveform=WAVEFORM_SINE, duration=800))

AudioFrame

AudioFrame 包含 32 个采样,每个为 0–255 的无符号字节。播放一帧约需 4 ms 多。

copyfrom(other)

用另一个 AudioFrame 的数据覆盖本帧。

参数

  • other:源 AudioFrame 实例。

技术说明

audio 模块消费 AudioFrame 可迭代序列(7812.5 Hz,每帧 32 采样),经线性插值输出 32.5 kHz 的 PWM,音质可接受。

play() 会在读取每帧时完整复制数据再取下一帧,因此同一 AudioFrame 可重复使用。

模块内部有 64 采样缓冲区;可靠运行时应能在约 2 ms 内准备好下一帧。

示例

方波一帧:

from bibo import *
import audio

square_wave = audio.AudioFrame()
for i in range(16):
    square_wave[i] = 0
    square_wave[i + 16] = 255

audio.play([square_wave] * 64)

可在比卜创造 Python 编辑器中试听效果。