AudioOut – Output an analog audio signal

AudioOut can be used to output an analog audio signal on a given pin.

class audioio.AudioOut(left_channel, right_channel=None)

Create a AudioOut object associated with the given pin(s). This allows you to play audio signals out on the given pin(s).

  • left_channel (Pin) – The pin to output the left channel to
  • right_channel (Pin) – The pin to output the right channel to

Simple 8ksps 440 Hz sin wave:

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 / 18) * (2 ** 15) + 2 ** 15)

dac = audioio.AudioOut(board.SPEAKER)
sine_wave = audioio.RawSample(sine_wave, mono=True, sample_rate=8000), loop=True)

Playing a wave file from flash:

import board
import audioio
import digitalio

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

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

while a.playing:

Deinitialises the AudioOut and releases any hardware resources for reuse.


No-op used by Context Managers.


Automatically deinitializes the hardware when exiting a context. See Lifetime and ContextManagers for more info.

play(sample, *, loop=False)

Plays the sample once when loop=False and continuously when loop=True. Does not block. Use playing to block.

Sample must be an audioio.WaveFile or audioio.RawSample.

The sample itself should consist of 16 bit samples. Microcontrollers with a lower output resolution will use the highest order bits to output. For example, the SAMD21 has a 10 bit DAC that ignores the lowest 6 bits when playing 16 bit samples.


Stops playback and resets to the start of the sample.


True when an audio sample is being output even if paused. (read-only)


Stops playback temporarily while remembering the position. Use resume to resume playback.


Resumes sample playback after pause().


True when playback is paused. (read-only)