audioio – 支持音频输出

audioio 模块包含提供对音频 IO 的访问的类。

如果程序在使用后继续,所有类都会更改硬件状态,并且在不再需要它们时应取消初始化。为此,请调用deinit() 或使用上下文管理器。有关更多信息,请参阅 Lifetime 和 ContextManagers

自 CircuitPython 5 起, RawSampleWaveFile 移至audiocore, 并Mixer 移至 audiomixer

为了与 CircuitPython 4.x 兼容,某些版本允许 audiocoreaudioio. 在未来的 CircuitPython 版本中,所有电路板都将删除此选项。

在这些板上可用
  • Adafruit BLM Badge
  • Adafruit Circuit Playground Express 4-H
  • Adafruit CircuitPlayground Express
  • Adafruit CircuitPlayground Express with Crickit libraries
  • Adafruit CircuitPlayground Express with displayio
  • Adafruit EdgeBadge
  • Adafruit Feather M0 Express
  • Adafruit Feather M0 Express with Crickit libraries
  • Adafruit Feather M4 CAN
  • Adafruit Feather M4 Express
  • Adafruit Grand Central M4 Express
  • Adafruit Hallowing M4 Express
  • Adafruit ItsyBitsy M0 Express
  • Adafruit ItsyBitsy M4 Express
  • Adafruit Matrix Portal M4
  • Adafruit Metro M0 Express
  • Adafruit Metro M4 Airlift Lite
  • Adafruit Metro M4 Express
  • Adafruit Monster M4SK
  • Adafruit PyGamer
  • Adafruit PyPortal
  • Adafruit PyPortal Pynt
  • Adafruit PyPortal Titano
  • Adafruit Pybadge
  • Adafruit QT Py M0 Haxpress
  • Adafruit Trellis M4 Express
  • AloriumTech Evo M51
  • BDMICRO VINA-D21
  • BDMICRO VINA-D51
  • CP32-M4
  • Capable Robot Programmable USB Hub
  • Cedar Grove StringCar M0 Express
  • Circuit Playground Express Digi-Key PyCon 2019
  • CircuitBrains Basic
  • CircuitBrains Deluxe
  • DynOSSAT-EDU-EPS
  • DynOSSAT-EDU-OBC
  • Electronic Cats Hunter Cat NFC
  • Hacked Feather M0 Express with 8Mbyte SPI flash
  • HalloWing M0 Express
  • Mini SAM M4
  • PewPew M4
  • PyCubedv04
  • PyCubedv04-MRAM
  • PyCubedv05
  • PyCubedv05-MRAM
  • Robo HAT MM1 M4
  • SAM E54 Xplained Pro
  • SAM32v26
  • Seeeduino Wio Terminal
  • Serpente
  • Silicognition LLC M4-Shim
  • SparkFun MicroMod SAMD51 Processor
  • SparkFun RedBoard Turbo
  • SparkFun Thing Plus - SAMD51
  • Sprite_v2b
  • StackRduino M0 PRO
  • TG-Boards' Datalore IP M4
  • The Open Book Feather
  • Trinket M0 Haxpress
  • UARTLogger II
  • Winterbloom Big Honking Button
  • keithp.com snekboard
  • uGame10

class audioio.AudioOut(left_channel: microcontroller.Pin, *, right_channel: Optional[microcontroller.Pin] = None, quiescent_value: int = 32768)

输出模拟音频信号

创建与给定引脚关联的 AudioOut 对象。这允许您在给定的引脚上播放音频信号。

参数
  • left_channel (Pin) – 输出左声道的引脚

  • right_channel (Pin) – 输出右声道的引脚

  • quiescent_value (int) – 不存在信号时的输出值。样本应以此值开始和结束,以防止出现爆音。

简单的 8ksps 440 Hz 正弦波:

import audiocore
import audioio
import board
import array
import time
import math

# Generate one period of sine wav.
length = 8000 // 440
sine_wave = array.array("H", [0] * length)
for i in range(length):
    sine_wave[i] = int(math.sin(math.pi * 2 * i / length) * (2 ** 15) + 2 ** 15)

dac = audioio.AudioOut(board.SPEAKER)
sine_wave = audiocore.RawSample(sine_wave, sample_rate=8000)
dac.play(sine_wave, loop=True)
time.sleep(1)
dac.stop()

从闪存播放波形文件:

import board
import audioio
import digitalio

# Required for CircuitPlayground Express
speaker_enable = digitalio.DigitalInOut(board.SPEAKER_ENABLE)
speaker_enable.switch_to_output(value=True)

data = open("cplay-5.1-16bit-16khz.wav", "rb")
wav = audiocore.WaveFile(data)
a = audioio.AudioOut(board.A0)

print("playing")
a.play(wav)
while a.playing:
  pass
print("stopped")
playing :bool

输出音频样本时为真,即使paused.(只读)

paused :bool

播放暂停时为真。(只读)

deinit(self)None

取消初始化 AudioOut 并释放任何硬件资源以供重用。

__enter__(self)AudioOut

上下文管理器使用的无操作。

__exit__(self)None

退出上下文时自动取消初始化硬件。有关更多信息,请参阅 Lifetime 和 ContextManagers

play(self, sample: _typing.AudioSample, *, loop: bool = False)None

当 loop=False 时播放一次样本,当 loop=True 时连续播放。不阻塞。使用playing 以块。

样品必须是audiocore.WaveFile, audiocore.RawSample, audiomixer.Mixeraudiomp3.MP3Decoder

样本本身应由 16 位样本组成。具有较低输出分辨率的微控制器将使用最高位进行输出。例如,SAMD21 有一个 10 位 DAC,它在播放 16 位样本时会忽略最低的 6 位。

stop(self)None

停止播放并重置到样本的开头。

pause(self)None

在记住位置的同时暂时停止播放。使用resume 恢复播放。

resume(self)None

后恢复样本播放pause()