audiodelays – Support for audio delay effects

The audiodelays module contains classes to provide access to audio delay effects.

Available on these boards
  • Adafruit Feather RP2350
  • Adafruit Metro RP2350
  • Challenger+ RP2350 BConnect
  • Challenger+ RP2350 WiFi6/BLE5
  • Cytron IRIV IO Controller
  • Cytron MOTION 2350 Pro
  • Datanoise PicoADK V2
  • Music Thing Modular Workshop Computer
  • Pimoroni PGA2350
  • Pimoroni Pico Plus 2
  • Pimoroni Pico Plus 2 W
  • Pimoroni Plasma 2350
  • Pimoroni Plasma 2350W
  • Pimoroni Tiny 2350
  • RP2350 Stamp
  • RP2350 Stamp XL
  • Raspberry Pi Pico 2
  • Raspberry Pi Pico 2 W
  • Seeeduino XIAO RP2350
  • SparkFun Pro Micro RP2350
  • SparkFun Thing Plus RP2350
  • W5100S-EVB-Pico2
  • Waveshare RP2350-GEEK
  • Waveshare RP2350-LCD-0.96
  • Waveshare RP2350-LCD-1.28
  • Waveshare RP2350-One
  • Waveshare RP2350-Plus
  • Waveshare RP2350-TOUCH-LCD-1.28
  • Waveshare RP2350-Tiny
  • Waveshare RP2350-Zero

class audiodelays.Echo(max_delay_ms: int = 500, delay_ms: synthio.BlockInput = 250.0, decay: synthio.BlockInput = 0.7, mix: synthio.BlockInput = 0.5, buffer_size: int = 512, sample_rate: int = 8000, bits_per_sample: int = 16, samples_signed: bool = True, channel_count: int = 1)

An Echo effect

Create a Echo effect where you hear the original sample play back, at a lesser volume after

a set number of millisecond delay. The delay timing of the echo can be changed at runtime with the delay_ms parameter but the delay can never exceed the max_delay_ms parameter. The maximum delay you can set is limited by available memory.

Each time the echo plays back the volume is reduced by the decay setting (echo * decay).

The mix parameter allows you to change how much of the unchanged sample passes through to the output to how much of the effect audio you hear as the output.

Parameters:
  • max_delay_ms (int) – The maximum time the echo can be in milliseconds

  • delay_ms (synthio.BlockInput) – The current time of the echo delay in milliseconds. Must be less the max_delay_ms

  • decay (synthio.BlockInput) – The rate the echo fades. 0.0 = instant; 1.0 = never.

  • mix (synthio.BlockInput) – The mix as a ratio of the sample (0.0) to the effect (1.0).

  • buffer_size (int) – The total size in bytes of each of the two playback buffers to use

  • sample_rate (int) – The sample rate to be used

  • channel_count (int) – The number of channels the source samples contain. 1 = mono; 2 = stereo.

  • bits_per_sample (int) – The bits per sample of the effect

  • samples_signed (bool) – Effect is signed (True) or unsigned (False)

  • freq_shift (bool) – Do echos change frequency as the echo delay changes

Playing adding an echo to a synth:

import time
import board
import audiobusio
import synthio
import audiodelays

audio = audiobusio.I2SOut(bit_clock=board.GP20, word_select=board.GP21, data=board.GP22)
synth = synthio.Synthesizer(channel_count=1, sample_rate=44100)
echo = audiodelays.Echo(max_delay_ms=1000, delay_ms=850, decay=0.65, buffer_size=1024, channel_count=1, sample_rate=44100, mix=0.7, freq_shift=False)
echo.play(synth)
audio.play(echo)

note = synthio.Note(261)
while True:
    synth.press(note)
    time.sleep(0.25)
    synth.release(note)
    time.sleep(5)
deinit() None

Deinitialises the Echo.

__enter__() Echo

No-op used by Context Managers.

__exit__() None

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

delay_ms: synthio.BlockInput

Delay of the echo in milliseconds. (read-only)

decay: synthio.BlockInput

The rate the echo decays between 0 and 1 where 1 is forever and 0 is no echo.

mix: synthio.BlockInput

The rate the echo mix between 0 and 1 where 0 is only sample and 1 is all effect.

freq_shift: bool

Does the echo change frequencies as the delay changes.

playing: bool

True when the effect is playing a sample. (read-only)

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

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

The sample must match the encoding settings given in the constructor.

stop() None

Stops playback of the sample. The echo continues playing.