a lo-fi rp2040-based music mangler. $62 / $89.
- a lo-fi music mangler based on the Raspberry Pi Pico (brother of the nyblcore).
- capable of holding 8 minutes of 8-bit 33 kHz monophonic samples.
- powered by a single AAA battery for up to 3 hours or by powered by USB-C.
- tempo-synced with a selectable BPM between 60 and 300, with samples mangled by beat-synced effects (stutter, retrig, gate, tunneling).
- loaded with real-time effects like a resonant filter, timestretching, volume, and wavefolding.
- sequenced with a 128-step sequencer with recording/playback
- saved and loaded via EEPROM for instant patch recall.
- able to load custom firmware, new samples, all through USB-C.
- sync-compatible with Pocket Operators.
- open-source, wonderfully hackable.
in addition to my store, you can buy assembled devices from Perfect Circuit: click here to go to Perfect Circuit. also, if you are in the UK, diy kits are available from Thonk: click here to go to Thonk.
sign up for the mailing list to get notified about updates and new things.
full instructions are available here: download pdf
Click here to view schematic.
Click here to view the full BOM.
|Pico w/ RGB||1|
|5V DC-DC step-up||1|
|Audio jack (PJ-320B straight)||3|
|AAA Battery holder (45 mm between pins)||1|
|1x3 male header||1|
|10k potentiometer (RV09, 12.5 mm)||4|
|1x20 female header||2|
|1x20 male header||2|
|0.1 uF capacitor||2|
|1 uF capacitor||1|
|10 kohm resistor||3|
|1 kohm ressitor||9|
|100 ohm resistor||3|
|2N3904 NPN transistor||1|
there are eight buttons and four knobs that can be used to manipulate the pikocore. there are two outputs and one input. make sure to plug in only stereo cables to any outputs or inputs.
the top left jack is for incoming trigger signal (e.g. from a pocket operator in SYN1 mode or a pikocore). the top right jack sends out audio. the bottom right jack sends out trigger signal and audio signal (for syncing to pocket operators using SYN4 mode).
The buttons on the device can be used to jump to samples and retrigger audio in real time.
jumping: Press any of the eight buttons to jump to that relative position in the sample.
retriggers: Press and hold a button and press another button to create a retrigger effect. The retrigger speed is based on the position of the second button press. Random effects add added to the retriggers, such as changes in speed, pitch, filter envelopes, or volume envelopes.
stop/play: press the two leftmost buttons and the two rightmost buttons simultaneously to stop/play.
Button mashing is encouraged.
The rightmost knob is a filter/volume knob that controls the output level. The leftmost knob is the selector knob, which can choose between eight different positions. Each position changes a different pair of parameters, which can be changed using the middle two knobs, knob A and knob B.
|selector pos||knob a||knob b|
|4||jump prob.||retrig prob.|
|5||tunnel prob.||reverse prob.|
|6||sequencer rec.||sequencer on|
- sample changes the sample being played (holds >100 samples totaling ~8 minutes).
- break modifies all probabilities simultaneously using varied easing functions.
- filter is a resonant low-pass filter that attenuates higher frequencies.
- stretch performs a lofi timestretch effect.
- gate controls the amount of gating on the sample.
- gate prob. controls the probability of gating.
- jump prob. controls the likelihood of jumping to a different step in the current sample.
- retrig prob. controls the likehood of retriggering.
- tunnel prob. controls the likelihood of jumping to a different sample.
- reverse prob. controls the probability of reversing direction.
- sequencer rec will record sequences, up to 128 steps (cw = record, ccw = erase).
- sequencer on turns on the sequencer (cw = on, ccw = off).
- save saves probabilities, sample, volume, and tempo (cw = save).
- load recalls the last save (cw = load).
- volume/fold changes the volume and adds a wavefolding effect.
- tempo controls the tempo in steps of 5 bpm (50-305), encoded in binary.
pikocore uses a audio click signal to sync and is fully compatible with sync signals coming from other devices, like the teenage engineering pocket operators. The pikocore syncing operates at 2 PPQN and has max input/output voltages of 3V.
The upper left audio jack takes in a PO sync signal (
SYN1 on Pocket Operator) and will automatically sync the pikocore. The output sync is separate from the main audio output jack, situated below the Pico mcu. When using a pocket operator, set the receiving device to
SYN5 if the chain continues.
Set the tempo by turning the selector knob fully CW to the eighth spot and then turning knob b. The BPM available is between 50 and 305, and the current value is displayed using binary encoding. Instead of memorizing the binary encoding, you can use tool below to visualize the tempo you want to match. Change the slider and then on the pikocore move knob b so that the lights match up to get this bpm. Because of the clock in the pikocore, BPMs are only accurate to 2%.
the pikocore is capable of listening to midi using a itty bitty midi device plugged into its clock input.
this behavior needs to be enabled at the firmware level, and the firmware tool below can be used to update the settings to listen to midi.
the pikocore automatically sets tempo and syncs to a midi clock. it also listens to midi start/stop/continue commmands to synchronize with sequencers. the firmware tool lets you change the midi clock division. you can also toggle a setting in the firmware to have the key presses of a midi keyboard work as buttons, so you can sequence your own button presses.
Updating the pikocore is easy. Simply press the “boot” button and plug in a USB-C cable, or press and hold “boot” while pressing “rst” when the USB-C cable is already plugged into your computer.
Then download the
.uf2 file (either from factory reset firmware, or customized firmware, see below) and drag-and-drop it to the drive that pops up in your computer (usually named
RPI-RP2). Visual instructions are available with this YouTube video that explains the process for uploading firmware.
download these to get the pikocore back to the “stock” image or upgrade it to a newer image.
- Dec 2nd, 2023: pikocore-73bf07d.uf2 (v1.1.0, midi enabled)
- Sept 6th, 2023: pikocore-ad319a8.uf2 (v1.0.1, no RGB led)
- July 4th, 2023: pikocore-1ca6156.uf2 (v1.0.1)
Use this tool to change the audio on the pikocore. This will automatically utilize the latest firmware of the pikocore.
Uploaded audio is automatically converted to the base sample rate (33 kHz) and to the base BPM (165 BPM). If you know the BPM of your sample, you can help the server detect it by including it in the filename somewhere as
bpmX. For example,
my_drum_bpm150.wav will automatically be registered as 150 BPM. You can also include the number of beats in the filename somewhere as
beatsY. For example,
my_drum_bpm150_beats4.wav will be registered as having 4 beats. If no information is included, the server will do its best to detect the BPM and then determine the number of beats to be used for beat syncing.
send me your remixes! they light up my day (literally!). there are some amazing ingenuity with creating enclosures for pikocore:
- arcade box! and button box by 2ononen
- arcade box by ground_grown_circuits
- printable case w/ 3D step files available (regular case, expanded case)
Here are some fixes for issues that may crop up when using pikocore.
The audio is really quiet. This happens if you plug in a mono cable to the audio output. Make sure to use only 3.5mm stereo cables and make sure they are pluggined in all the way.
There is a high pitched sound. This seems to happen sometimes while powered by the AAA battery and the potentiometers are in a certain position. Try turning the potentiometers CCW to eliminate the noise. If that doesn’t work, try rotating the battery in is holder. If it is still a problem, try powering from a USB powerbank.
There is no sound, or the sound is muffled sounding. This can happen if the filter gets set fully closed, or the timestretch is at 100%, or the volume if fully down. The best thing to do is to reset these three parameters. Move the selector knob to the second position and turn knob a fully CW and turn knob b fully CCW. This will reset the filter and the timestretch. Now move the selector knob to the eight and last position and try to turn knob a until you can hear something (the volume). This should fix it 90% of the time.
If you still have issues: Please feel free to send me an email at email@example.com.