音频
audio 模块用于在 micro:bit 上播放声音。
默认音频输出为边缘连接器 pin0 与内置扬声器。可将有线耳机或外接扬声器接到 pin0 与 GND 收听。
可 import audio,或通过 bibo.audio 访问。
audio.play() 支持三类音源:
- 内置音效,如
audio.play(Sound.HAPPY) - SoundEffect 自定义音效
- 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.GIGGLESound.HAPPYSound.HELLOSound.MYSTERIOUSSound.SADSound.SLIDESound.SOARINGSound.SPRINGSound.TWINKLESound.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),默认500freq_end:结束频率(Hz),默认2500duration:时长(毫秒),默认500vol_start:起始音量 0–255,默认255vol_end:结束音量 0–255,默认0waveform:WAVEFORM_SINE、WAVEFORM_SAWTOOTH、WAVEFORM_TRIANGLE、WAVEFORM_SQUARE、WAVEFORM_NOISE,默认WAVEFORM_SQUAREfx:FX_TREMOLO、FX_VIBRATO、FX_WARBLE、FX_NONE,默认FX_NONEshape:频率插值曲线SHAPE_LINEAR、SHAPE_CURVE、SHAPE_LOG,默认SHAPE_LOG
copy()
返回值:该 SoundEffect 的副本。
属性
freq_start、freq_end:0–9999 Hzduration:0–9999 毫秒vol_start、vol_end:0–255waveform、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 编辑器中试听效果。