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 对象。
- 参数
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¶ 播放暂停时为真。(只读)
-
__exit__
(self) → None¶ 退出上下文时自动取消初始化硬件。有关更多信息,请参阅 Lifetime 和 ContextManagers
-
play
(self, sample: _typing.AudioSample, *, loop: bool = False) → None¶ 当 loop=False 时播放一次样本,当 loop=True 时连续播放。不阻塞。使用
playing
以块。样品必须是
audiocore.WaveFile
,audiocore.RawSample
,audiomixer.Mixer
或audiomp3.MP3Decoder
。样本本身应由 8 位或 16 位样本组成。
-
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_rate
x决定,总采样率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¶ 录音的实际采样率。由于内部时钟限制,这可能与构建的采样率不匹配。
-
record
(self, destination: _typing.WriteableBuffer, destination_length: int) → None¶ 将样本的 destination_length 字节记录到目标。这是阻塞。
当目的地太慢而无法以给定的速率录制音频时,可能会引发 IOError。对于内部闪存,建议在记录前将全 1 写入文件以加快写入速度。
- 返回
记录的样本数。如果该值小于
destination_length
,则由于处理时间而遗漏了一些样本。