Showing posts with label Sound. Show all posts
Showing posts with label Sound. Show all posts

Sunday, 24 November 2024

Adafruit RP2040 Prop-Maker Feather - Staser sound effect

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


Monday, 15 October 2018

Raspberry Pi sound not working on HDMI

By default the Raspberry Pi will channel sound through the HDMI connection to a suitable television/monitor.

Most of the time that will work automatically (if it thinks the television/monitor is not equipped with a speaker or speakers, it routes it through the headphone socket).

The key thing is the "sometime".

Some television/monitors do not appear to tell the Raspberry Pi they have a speaker. This may be due to the monitor, or due to the HDMI cable in use.

The easiest way of forcing the sound to be output via one of the channels is to right click on the loudspeaker icon. The drop down will show available audio output devices, the tick indicating the selected one. Make your choice there.

You can also use the command line:
amixer cset numid=3 2

The parameter 2 sets output to HDMI, 1 sets it to the headphone socket and 0 sets it to default.

It is also possible using the configuration screen and by editing the /boot/config.txt file. See the reference for details.

References:
https://www.raspberrypi.org/documentation/configuration/audio-config.md