audiopwmio – Audio output via digital PWM¶
The audiopwmio module contains classes to provide access to audio IO.
All classes change hardware state and should be deinitialized when they
are no longer needed if the program continues after use. To do so, either
call deinit() or use a context manager. See
Lifetime and ContextManagers for more info.
Since CircuitPython 5, Mixer, RawSample and WaveFile are moved
to audiocore.
Available on these boards
- class audiopwmio.PWMAudioOut(left_channel: microcontroller.Pin, *, right_channel: microcontroller.Pin | None = None, quiescent_value: int = 32768)¶
Output an analog audio signal by varying the PWM duty cycle.
Create a PWMAudioOut object associated with the given pin(s). This allows you to play audio signals out on the given pin(s). In contrast to mod:
audioio, the pin(s) specified are digital pins, and are driven with a device-dependent PWM signal.- Paramètres:
Simple 8ksps 440 Hz sin wave:
import audiocore import audiopwmio 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 = audiopwmio.PWMAudioOut(board.SPEAKER) sine_wave = audiocore.RawSample(sine_wave, sample_rate=8000) dac.play(sine_wave, loop=True) time.sleep(1) dac.stop()
Playing a wave file from flash:
import board import audiocore import audiopwmio 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 = audiopwmio.PWMAudioOut(board.SPEAKER) print("playing") a.play(wav) while a.playing: pass print("stopped")
- paused :bool¶
True when playback is paused. (read-only)
- __enter__() PWMAudioOut¶
No-op used by Context Managers.
- __exit__() None¶
Automatically deinitializes the hardware when exiting a context. See Lifetime and ContextManagers for more info.
- play(sample: _typing.AudioSample, *, loop: bool = False) None¶
Plays the sample once when loop=False and continuously when loop=True. Does not block. Use
playingto block.Sample must be an
audiocore.WaveFile,audiocore.RawSample,audiomixer.Mixeroraudiomp3.MP3Decoder.The sample itself should consist of 16 bit samples. Microcontrollers with a lower output resolution will use the highest order bits to output.