Once upon a time our band needed a device that can play pieces of music like background fills,
breaks etcetera, "because a musician only has one pair of hands".
The musician(s) should be able to play & record the extra parts in advance and have
another musician start the playback on the proper time (in our case this would usually be via the drum pads midi out).
So the starting requirement was a box that plays a sound file of any length completely and only once,
to be triggered via midi.
This could be achieved with some adaptations of the sampler box by Joseph Ernest.
As it happens, this was just the start ...
So what's it now in non-commercial terms:
- An embedded Raspberry PI receives midi signals from multiple midi controllers
(keyboard, drumpads, footswitches etc) and sends the corresponding sounds to the audiosystem.
The program change messages select a preset = collection of sounds/loops and playback instructions.
Within the preset you can have multiple sounds/instruments (voices) that can be switched to instantly,
plus an effects track for use in all voices.
The voices=sounds can also be combined giving "layered" voices.
- Midi/audio interfaces (pictured on the right) can be cheap/expensive USB devices,
but also direct connected usb midi devices and builtin cards like HiFiBerry can be used.
Midi (DIN) in/output is also possible via either a midi board
or DIY wiring on the serial interface on the GPIO pins.
- The sounds/loops are WAV files in samples/patches folders on a USB stick or the internal SD card.
There are various options to obtain or create WAV samples.
You can mimick commercial loop machines by adding the default loop markers (start-end) to every sample and using a loop-mode.
- Implemented keyboards helpers: arpeggiator and autochord
- Available effects: chorus, reverb, moog-lowpass, wah (auto+lfo+pedal), limit/compress, vibrato, tremolo, panning and rotate
- Support for playing SMF (StandardMidiFiles) - the usual *.mid files.
This uses the sounds above.
Next that there is experimental support for recording midi sequences.
- The box is configured to be able to power on/off by simply inserting and removing the power plug without damaging the file systems.
Also the USB stick can be removed without problem.
- The box's software configuration (adapt to hardware setup, WiFi accesspoint profile, mapping functions to your keyboard setup, (re)define chords and scales) can be done with
config files/sheets in a special folder, which is also accessible when inserting the SD card in a windows PC.
So no linux related knowledge required.
- The sampler's behaviour per sample/instrument set can be controlled via the
keywords in the configuration files
stored with the samples as well as with control buttons or
midi control messages
and last but least with a GUI usable on mobile, tablet or good old PC.
- An options menu and actual status of the player can also be shown hardwarewise via various types of displays, see build page.
Ofcourse the way the menu presents itself depends on the display's capabilities.
- So in normal operation there is no need for direct OS console access - just plug in and play, unplug when done.
- This is how I built my first trial box and subsequent 'live-stage' version,
you can freely use it to create yours.
To give you an idea, I've included the old shoppinglist of the trial:
On the right you find an indication of what I have used for the initial trial, adding up to about € 80,-.
This proved you can make a box with functions only available in expensive and complex equipment, but much cheaper than the cheapest sampler boxes on the market.
BUT: very inexpensive stuff is totally unguaranteed. Also some functions (like freeverb) require PI3.
Currently I use a PI3 and PI3B+ with more solid midi and audio interfaces, which doubled the price.
PI4 is not supported, on the wishlist.
|Raspberry PI 2|| 37 €|
|Case|| 8 €|
|Power adapter|| 3 €|
|Jumper wires|| 6 € (this was a pack)|
|USB Midi cable|| 5 €|
|USB Sound adapter || 3,5 €|
|2x16 display|| 4 €|
|Buttons|| 3 €|
|Trimmers|| 1 €|
|Shipping costs|| 7 €|
The project is based on the sampler box by Joseph Ernest, extended with
the 16x2 LCD interface by Rahul Kar,
accurate velocity control by Erik,
voices and several nice tricks by Alex MacRae,
randomizing samples and I2C-LCD by David Hilowitz,
freeverb by Jezar at Dreampoint,
D'Angelo Moog ladderfilter code via Dimitri Diakopoulos,
AutoWah by Daniel Zenco,
delayline coding by Gabriel Rivas,
Simple Compressor class by Citizen Chunk,
Midi file toolkit by vishnubob,
auto-hotspot logic by Roboberry,
several extras by GitHub contributors,
as well as various ideas and snippets I just bumped into.
Thank you guys.
Also thanks to Reza Yazdi for guiding me into the world of Persian music.
I've glued these things/ideas together and added lots of cool things in the process.
If you have extra ideas, please share them on or via GitHub pull.