audiobusio – 支持数字总线上的音频输入和输出

audiobusio模块包含通过数字总线提供对音频 IO 的访问的类。这些协议用于将音频传送到同一电路中的其他芯片。它不包括 S/PDIF 等音频互连协议。

所有库都会更改硬件状态,并且在不再需要它们时应取消初始化。为此,请调用deinit() 或使用上下文管理器。

在这些板上可用
  • ARAMCON Badge 2019
  • ARAMCON2 Badge
  • ATMegaZero ESP32-S2
  • Adafruit BLM Badge
  • Adafruit CLUE nRF52840 Express
  • Adafruit Circuit Playground Bluefruit
  • Adafruit Circuit Playground Express 4-H
  • Adafruit CircuitPlayground Express
  • Adafruit CircuitPlayground Express with Crickit libraries
  • Adafruit CircuitPlayground Express with displayio
  • Adafruit EdgeBadge
  • Adafruit Feather Bluefruit Sense
  • Adafruit Feather M0 Express
  • Adafruit Feather M0 Express with Crickit libraries
  • Adafruit Feather M4 CAN
  • Adafruit Feather M4 Express
  • Adafruit Feather RP2040
  • Adafruit Feather nRF52840 Express
  • Adafruit FunHouse
  • Adafruit Grand Central M4 Express
  • Adafruit Hallowing M4 Express
  • Adafruit ItsyBitsy M0 Express
  • Adafruit ItsyBitsy RP2040
  • Adafruit ItsyBitsy nRF52840 Express
  • Adafruit LED Glasses Driver nRF52840
  • Adafruit Macropad RP2040
  • Adafruit MagTag
  • Adafruit Matrix Portal M4
  • Adafruit Metro ESP32S2
  • Adafruit Metro M0 Express
  • Adafruit Metro M4 Airlift Lite
  • Adafruit Metro M4 Express
  • Adafruit Metro nRF52840 Express
  • Adafruit Monster M4SK
  • Adafruit PyGamer
  • Adafruit PyPortal
  • Adafruit PyPortal Pynt
  • Adafruit PyPortal Titano
  • Adafruit Pybadge
  • Adafruit QT Py M0 Haxpress
  • Adafruit QT Py RP2040
  • Adafruit QT2040 Trinkey
  • AloriumTech Evo M51
  • Arduino Nano 33 BLE
  • Arduino Nano RP2040 Connect
  • Artisense Reference Design RD00
  • AtelierDuMaker nRF52840 Breakout
  • BDMICRO VINA-D21
  • BDMICRO VINA-D51
  • BLE-SS dev board Multi Sensor
  • BastBLE
  • BastWiFi
  • BlueMicro840
  • Cedar Grove StringCar M0 Express
  • Challenger RP2040 WiFi
  • Circuit Playground Express Digi-Key PyCon 2019
  • CircuitBrains Basic
  • CircuitBrains Deluxe
  • CrumpS2
  • Cytron Maker Pi RP2040
  • DynOSSAT-EDU-EPS
  • DynOSSAT-EDU-OBC
  • ESP 12k NodeMCU
  • Electronic Cats Hunter Cat NFC
  • Electronut Labs Blip
  • Electronut Labs Papyr
  • EncoderPad RP2040
  • Feather ESP32S2 without PSRAM
  • FeatherS2
  • FeatherS2 Neo
  • FeatherS2 PreRelease
  • Franzininho WIFI w/Wroom
  • Franzininho WIFI w/Wrover
  • Gravitech Cucumber M
  • Gravitech Cucumber MS
  • Gravitech Cucumber R
  • Gravitech Cucumber RS
  • HMI-DevKit-1.1
  • Hacked Feather M0 Express with 8Mbyte SPI flash
  • HiiBot BlueFi
  • IkigaiSense Vita nRF52840
  • Kaluga 1
  • LILYGO TTGO T8 ESP32-S2 w/Display
  • MDBT50Q-DB-40
  • MDBT50Q-RX Dongle
  • MORPHEANS MorphESP-240
  • MakerDiary nRF52840 MDK
  • MakerDiary nRF52840 MDK USB Dongle
  • Makerdiary M60 Keyboard
  • Makerdiary Pitaya Go
  • Makerdiary nRF52840 M.2 Developer Kit
  • Melopero Shake RP2040
  • Oak Dev Tech BREAD2040
  • Oak Dev Tech PixelWing ESP32S2
  • Open Hardware Summit 2020 Badge
  • PCA10056 nRF52840-DK
  • PCA10059 nRF52840 Dongle
  • PCA10100 nRF52833 Dongle
  • Particle Argon
  • Particle Boron
  • Particle Xenon
  • Pimoroni Interstate 75
  • Pimoroni Keybow 2040
  • Pimoroni PGA2040
  • Pimoroni Pico LiPo (16MB)
  • Pimoroni Pico LiPo (4MB)
  • Pimoroni PicoSystem
  • Pimoroni Plasma 2040
  • Pimoroni Tiny 2040
  • PyKey60
  • Raspberry Pi Pico
  • S2Mini
  • SAM E54 Xplained Pro
  • SAM32v26
  • Saola 1 w/Wroom
  • Saola 1 w/Wrover
  • Seeeduino Wio Terminal
  • Serpente
  • Silicognition LLC M4-Shim
  • Simmel
  • SparkFun MicroMod RP2040 Processor
  • SparkFun MicroMod SAMD51 Processor
  • SparkFun MicroMod nRF52840 Processor
  • SparkFun Pro Micro RP2040
  • SparkFun Pro nRF52840 Mini
  • SparkFun RedBoard Turbo
  • SparkFun Thing Plus - RP2040
  • SparkFun Thing Plus - SAMD51
  • StackRduino M0 PRO
  • TG-Boards' Datalore IP M4
  • TG-Watch
  • Targett Module Clip w/Wroom
  • Targett Module Clip w/Wrover
  • Teknikio Bluebird
  • The Open Book Feather
  • TinkeringTech ScoutMakes Azul
  • TinyS2
  • Trinket M0 Haxpress
  • UARTLogger II
  • WarmBit BluePixel nRF52840
  • keithp.com snekboard
  • micro:bit v2
  • microS2
  • nanoESP32-S2 w/Wrover
  • nanoESP32-S2 w/Wroom
  • nice!nano

class audiobusio.I2SOut(bit_clock: microcontroller.Pin, word_select: microcontroller.Pin, data: microcontroller.Pin, *, left_justified: bool)

输出 I2S 音频信号

创建与给定引脚关联的 I2SOut 对象。

参数
  • bit_clock (Pin) – 位时钟(或串行时钟)引脚

  • word_select (Pin) – 字选择(或左/右时钟)引脚

  • data (Pin) – 数据引脚

  • left_justified (bool) – 当数据位与字选择时钟对齐时为真。当它们移动一个以匹配经典 I2S 协议时为 False。

Metro M0 Express上 使用 UDA1334 Breakout的简单 8ksps 440 Hz 正弦波:

import audiobusio
import audiocore
import board
import array
import time
import math

# Generate one period of sine wave.
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)

sine_wave = audiocore.RawSample(sine_wave, sample_rate=8000)
i2s = audiobusio.I2SOut(board.D1, board.D0, board.D9)
i2s.play(sine_wave, loop=True)
time.sleep(1)
i2s.stop()

从闪存播放波形文件:

import board
import audioio
import audiocore
import audiobusio
import digitalio


f = open("cplay-5.1-16bit-16khz.wav", "rb")
wav = audiocore.WaveFile(f)

a = audiobusio.I2SOut(board.D1, board.D0, board.D9)

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

输出音频样本时为真。(只读)

paused :bool

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

deinit(self)None

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

__enter__(self)I2SOut

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

__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

样本本身应由 8 位或 16 位样本组成。

stop(self)None

停止播放。

pause(self)None

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

resume(self)None

后恢复样本播放pause().

class audiobusio.PDMIn(clock_pin: microcontroller.Pin, data_pin: microcontroller.Pin, *, sample_rate: int = 16000, bit_depth: int = 8, mono: bool = True, oversample: int = 64, startup_delay: float = 0.11)

录制输入 PDM 音频流

创建与给定引脚关联的 PDMIn 对象。这允许您从给定的引脚记录音频信号。个别端口可能会进一步限制记录参数。总采样率由sample_ratex决定,总采样率 oversample必须为 1MHz 或更高,因此 sample_rate必须至少为 16000。

参数
  • clock_pin (Pin) – 将时钟输出到的引脚

  • data_pin (Pin) – 从中读取数据的引脚

  • sample_rate (int) – 结果样本的目标 sample_rate。检查 sample_rate 实际值。最小采样率约为 16000 Hz。

  • bit_depth (int) – 每个样本的最终位数。必须能被 8 整除

  • mono (bool) – 捕获单个音频通道时为真,否则捕获两个通道

  • oversample (int) – 要抽取为最终样本的单个位样本数。必须能被 8 整除

  • startup_delay (float) – 启动麦克风时钟后等待的秒数以允许麦克风打开。大多数只需要0.01s;有些需要0.1s。越久越安全。必须在 0.0-1.0 秒的范围内。

sample_rate :int

录音的实际采样率。由于内部时钟限制,这可能与构建的采样率不匹配。

deinit(self)None

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

__enter__(self)PDMIn

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

__exit__(self)None

退出上下文时自动取消初始化硬件。

record(self, destination: _typing.WriteableBuffer, destination_length: int)None

将样本的 destination_length 字节记录到目标。这是阻塞。

当目的地太慢而无法以给定的速率录制音频时,可能会引发 IOError。对于内部闪存,建议在记录前将全 1 写入文件以加快写入速度。

返回

记录的样本数。如果该值小于 destination_length,则由于处理时间而遗漏了一些样本。