Rusty Musician
Sound processor for electric musical instruments
Author: Petru-Cristian NANIA
GitHub Project Link: repository
Description
The device can be connected between an electric musical instrument and an amplifier.
It can apply sound effects to the signal generated by the instrument.
It can also function as a looping station (it records sequences of sound and plays them back repeatedly).
Motivation
I have a passion for music and I've always wanted such a device.
I think it's more fun to make it myself than to buy one.
I also don't always have and entire musical band with me when I want to entertain my friends and a looping station would be awesome.
Architecture
Log
Week 5 - 11 May
Week 12 - 18 May
Week 19 - 25 May
Hardware
An electric guitar pickup is just a coil with magnets (the magnetized strings) vibrating around it. These vibrations induce in the coil an electrical current which is normally conducted though an audio cable to an amplifier.
In my project, the aim is to take that current, send it to Rusty Musician device, and do funky stuff with it before sending it to the amplifier.
First of all, the input is be preprocessed with a passive low-pass filter that has a threshold as high as the highest note on the guitar. This ensures the signal is as clean as possible before sending it to the ADC on the Raspberry Pi Pico 2 and processing it using software written in Rust for the RP2350 MCU.
Multiple buttons (with pull-up resistors) are used to select options from the menu (cycle between live effects or select the loop station function). The options are shown on an LCD screen.
For certain effects and for looping, storage space is needed. This is achieved by using an external microSD module and an external non-volatile memory.
The processed signal is sent to an external DAC module, filtered again, and ultimately sent to the amplifier.
Schematics
Bill of Materials
Device | Usage | Price |
---|---|---|
Raspberry Pi Pico 2W | The microcontroller | 39.66 RON |
A second Raspberry Pi Pico 2W | The debugger | 39.66 RON |
MCP4725 with I2C interface | DAC module for generating the output signal | 24.99 RON |
LCD 1602A | For the effects menu | 9.82 RON |
Three pin headers - 2.54mm with 40 pins | For the two dev boards and the LCD | 3 × 0.99 RON |
At least two MF1401 6.3mm jack sockets | Connecting the instrument and the amplifier tot the Rusty Musician device | 2 × 2.00 RON |
Audio cable | An extra one is needed to connect the Rusty Musician device and the amp | |
Buttons | To select options from the menu | 4 × 0.36 RON |
Potentiometer | Change LCD contrast | 1.49 RON |
Breadboard + Jump wires + Stabilized power source | Mounting, connecting and powering everything | 22.00 RON |
Micro USB cable | Powering the dev board and uploading the code | 3.99 RON |
W25Q32 module with SPI interface | Fast non-volatile memory for real-time effects | 5.48 RON |
MicroSD card module with SPI interface | Loop recording and playback | 4.39 RON |
Soundking AL 103 Footswitch | Starting and stopping loop recording/playback | 11.90 RON |
Total | - | 171.79 RON |
Software
Library | Description | Usage |
---|---|---|
embassy-rp | Rust + async ❤️ embedded | Next-generation framework for embedded applications |
lcd1602-rs | Driver for 1602 LCD via an embedded-hal implementation | Show menu on LCD screen |
micromath | Embedded-friendly math library | Fast floating-point math |
arrayvec | A vector with fixed capacity, backed by an array (it can be stored on the stack too) | Storing samples of the signal on the stack |
fixed | Fixed-point numbers | Faster arithmetic |
biquad | A library for digital second order IIR filtrers | Signal processing |