This uses the Prop-Maker Feather's I2S audio amplifier to generate a sound effect, in this case a Gallifreyan Staser sound effect.
For testing purposes, the sound is triggered by the use of the Boot button on the board (the Boot button on the Prop-Maker Feather is connected to GPIO7 and named board.Button in CircuitPython)
For use as a prop, the trigger would be wired to the Button terminal and the Ground terminal shared with the NeoPixel.
Getting your sound effect.
The Prop-Maker Feather requires a PCM 16-bit Mono WAV files at a sample rate of 22KHz. This can be created using Audicity by following the Adafruit instructions.
Code
# Staser sound effect
import board
import digitalio
import time
import neopixel
import random
import audiocore
import audiobusio
import audiomixer
import pwmio
import keypad
keys = keypad.Keys((board.BUTTON,), value_when_pressed=False, pull=True)
# One of the features of the prop-maker is that the Neopixel
# (and the amplifier and the speaker) can be switched on and off
external_power = digitalio.DigitalInOut(board.EXTERNAL_POWER)
external_power.direction = digitalio.Direction.OUTPUT
external_power.value = True
audio = audiobusio.I2SOut(board.I2S_BIT_CLOCK, board.I2S_WORD_SELECT, board.I2S_DATA)
def play(filename, audio):
# i2s playback
wave_file = open(filename, "rb")
wave = audiocore.WaveFile(wave_file)
mixer = audiomixer.Mixer(voice_count=1, sample_rate=22050, channel_count=1,
bits_per_sample=16, samples_signed=True)
audio.play(mixer)
mixer.voice[0].play(wave, loop=False)
mixer.voice[0].level = 0.5
print("Fire")
wave_file
while True:
event = keys.events.get()
# event will be None if nothing has happened.
if event:
if event.pressed:
play("staser.wav",audio)
print("Done")
References
https://learn.adafruit.com/adafruit-rp2040-prop-maker-feather/overview
https://learn.adafruit.com/key-pad-matrix-scanning-in-circuitpython/keys-one-key-per-pin
https://learn.adafruit.com/microcontroller-compatible-audio-file-conversion
https://learn.adafruit.com/lightsaber-rp2040/code-the-lightsaber