v1.1.2 update: added loop jump hotkeys (v1.1.1) and fixed a crash bug.
RP-8 is a synthesizer and groovebox inspired by Propellerhead Software's classic soft synth, ReBirth RB-338. It has everything you need to make entire tracks: two paraphonic synthesizers, a drum machine, a pile of effects to process your sound, and an integrated song mode sequencer to pull everything together. The audio is lo-fi, 8 bits at 5.5kHz, giving the output a distinctively crunchy sound.
If you're nostalgic for the early era of soft synths, a fan of minimalist computing, an acid squelch connoisseur, or just someone who likes to discover new sounds: I made RP-8 for you.
You can find this cart, including native builds, at https://luchak.itch.io/rp8, or try it out below. Note that this cart works much better natively than on the web - see the Web section under Compatibility Notes below for more info.
Usage
See the manual, which includes a step-by-step tutorial. RP-8 also has in-app tooltips (enable with T) and a hotkey reference / help screen (view with H).
Updates
- 2023 November 4( (1.1.2) - fix crash on clicking page switch button.
- 2023 October 10 (1.1.1) - loop jump hotkeys.
- 2023 September 13 (1.1) - pattern randomizer, copy pattern beginning/end, paste to drum track, bugfixes.
- 2023 March 4 (1.0) - much more versatile foldback distortion, new demo song, finished docs (now using mkdocs instead of pandoc), tons of sound adjustments and tuning.
- 2022 September 19 (beta 9) - antialiased oscillators, toned down filter harshness, file menu, "paste sound", tuning changes.
- 2022 September 11 (beta 8) - vastly improved synth filters, secondary drum sounds, help screen, more hotkeys, song naming, paste-to-control, overdrive bias -> overdrive shape, many tweaks and optimizations. (beta 8b) Updated user guide, next/previous bar hotkeys.
- 2022 August 6 (beta 7) - overdrive bias control, improved kick decay range, improved hat sound, performance optimizations. (beta 7a) Toasts and UI bugfixes. (beta 7b) Visual improvements, better FM ratio knob scaling, better save compatibility, more hotkeys.
- 2022 July 21 (beta 6) - lots of constant tweaking and sound adjustments. More filter overdrive, more low end, punchier kick, lots more.
- 2022 July 17 (beta 5) - removed synth attack knob since it's not being used, reduced low cut on the synth oscillators. (beta 5a) Tweaked overdrive gain compensation. (beta 5b) Fixed page button.
- 2022 July 15 (beta 4) - removed sample loading and playback, save song files to both desktop and clipboard, drop song file to load, improved synth knob graphics, variable pattern lengths (with awful UI), 2-op FM drum track (control ratio with tune knob, control pitch with chromatic drum sequencing), individual drum track FX bypass, chromatic drum sequencing, second synth oscillator with chromatic sequencing.
- 2022 April 25 (beta 3) - better handling of changing delay time, level compensation for filter resonance, drum sound tweaks, minor UI improvements, early draft of a manual!
- 2022 April 16 (beta 2) - fixes to overdrive, output saturation, and the synth filters. Filter resonance goes much higher now, overdrive kicks in more smoothly, and output saturation is gentler.
Features
- Two vaguely 303-inspired monosynths
- One vaguely 808-inspired drum machine
- 16 step pattern-based sequencer with slide and accent steps
- Pattern mode for real-time tweaking and song mode for recording your work
- Almost every control on the screen can be automated in song mode
- Per-synth overdrive insert effect
- Tempo-synced delay with 16th, triplet, and dotted-16th lengths
- Routable pattern-controlled lowpass/bandpass filter (like ReBirth's PCF)
- Master compressor to get the most out of your 8 bits of dynamic range
- Soft saturation on the output in case you try to get too much dynamic range
- Audio export
- Save/load functionality using the system clipboard (doubles as an easy checkpoint feature)
- Tooltips for most controls (can be turned on/off)
- Pico-8's PCM output filter is disabled so you can pretend that you have high frequencies
Known Issues
- Occasional sound dropouts on M1 and M2 Macs, especially when running in the background. This appears to be a PICO-8 issue.
- Rarely, when re-enabling sequencing on a synth, a slide may not trigger correctly or a non-slide note may be played as a slide.
Compatibility Notes
Web
Most features still work, but pointer lock does not (so large knob movements are difficult), audio recording time is limited, and some browser/platform combinations may have very glitchy audio. On some browsers PICO-8 may interpret pasted documents as keypresses instead of loading them into its clipboard buffer.
Future RP-8 Versions
Future versions may tweak the sound in various ways - if preserving your songs exactly is important to you, please keep your old RP-8 versions around. I'll try to avoid making major changes, though.
Thanks
... to the #music-sfx channel on the PICO-8 Discord, and @packbat in particular for testing, feedback, discussion, and encouragement. And to @thisismypassword for the essential-to-this-project shrinko8 minifier.
Okay, that's very cool. Haven't seen much audio playback around here. I wanna use it in one of my songs. (if I had motivation right now of course)
@aKidCalledAris Thank you! If you end up making anything with it let me know, I'd love to hear it.
I'm pretty happy with this little sketch. More oscillators = more possibilities! Hoping to have the version in this video out this weekend.
[tweet ]
Thanks! You should be able to grab source out of the carts - it's not the most readable code I've ever written unfortunately. I'll probably put up a Github repo or something at some point, especially since I'll have to start running the cart through a minifier soon, but for now just looking at the cart is probably the best thing.
Thanks! Unfortunately it’s pretty heavy on both token count and CPU, as you’ve probably noticed. I’ve considered trying to pull out the playback engine but even with significant sound quality sacrifices it’d probably be at least 3k tokens and 30ish percent CPU, which I’m not sure is worth the effort (the code factoring could be better).
I have no clue what I am doing but I have been playing this game for the entire night. 10/10
Really glad you're enjoying it, Xeonic!
One question for anyone who's used this (also asked on Twitter): the first percussion channel ("PC") is a swept sine, like the kick but higher, theoretically usable for tom-ish / rimshot-ish things. But I just don't use it that much. I'm wondering if I should replace it with something a little more interesting:
- Same thing, but with a square wave?
- A square wave with a lowpass gate instead of an exponential amplitude envelope?
- Ring modulation but where the tune knob controls the frequency of the modulator? Very low frequencies, low enough that you just get the falling part of the modulator, could still act tom-ish, though you'd have to control pitch via the pattern sequencer in this case...
Have others found that channel more useful than I have? Is there a controllable-with-two-knobs drum voice that you'd like to have instead of that channel?
I think I used the PC channel in the one piece I made as a bit of sound candy - listening back to it real quick, I remember that being prominent in the mix at one point near the end of the arrangement.
I don't have strong opinions about replacing it with something else if you think that would be more useful, though.
Good to know, thank you! As I play around with it a bit more I'm leaning towards keeping it - I think some of the non-user-accessible parameters may need a bit of tweaking, though. Something about the frequency sweep range or speed sounds wrong to me as I listen to it more.
It's not an up-front kind of sound, but not every sound should be!
Oh my god, I love this. Can I use this to make an entire EP/live set with? Like...I am ASTONISHED at how well the compressor works. Is it dirty? Absolutely. But so's the Alesis 3630. This is...a legitimately useful musical tool. Great job omg
@IMLXH Please use this for whatever you like! I've made whole tracks with it, so an EP seems possible. (Have I made good tracks with it? Let's not get ahead of ourselves...)
Do save the exact cart version for any tracks you're working on - I have a couple changes coming that might break the save format. Hopefully: global overdrive tone control, some more knob parameter range/behavior changes, and probably letting you switch the pattern for each drum track independently instead of lumping all drums into the same pattern? I'm desperately trying to get myself to stop making breaking changes and call this 1.0 but I'm not very good at that.
Also, I'm so happy you called out the compressor. That code is a borderline crime against music, it is 100% linear and has never heard of a decibel, but it does (mostly) work! An improved log-scale compressor might barely, barely be inside the CPU budget if I generate some tables on startup, but there is so little CPU left... Hm. Like I said, I'm not good at locking down the spec. :)
@luchak hey, I'm not gonna blame you for that. I made a crappy little "vaporwave generator" in Max/MSP once that I put on my itch.io, and once people started coming in with suggestions I was just like "dammit, I can't implement these without basically entirely revising the code", so I Get It. I've also played around a bit with the original version of ReBirth, and I know some parameters have a "legacy mode" so that older projects can sound the same as they did even after DSP revisions. Maybe that would be worth putting in for the compressor? Though I have no clue whether the EXTREMELY small space of P8 carts would allow that.
https://soundcloud.com/imlxh/rp-8-beta-6-1 By the way, here's a track I made with it yesterday. Mixing live with a mouse is...not ideal for someone who generally uses MIDI controllers, but honestly you made it work a LOT better than I'd have imagined. Like...you COULD play live with this, with some practice.
Also if you're taking suggestions, I'm...not the biggest fan of the sound of the hi-hat, but I also realize that Pico-8 can't really produce the highest frequencies. But that said, I'd kinda like some way to sequence the decay control so that I can do closed/open hat patterns tbh
@IMLXH Oh nice, that's a different track than the one you posted on Discord? Really love what you're doing with it!
The hihat sound is really hard to improve, between sample rate and CPU limitations. If you run hihat samples through Defy, most of them will basically disappear, so some creative liberties are basically necessary at this sample rate. I have one more idea (saturate/clip the noise) to make them a little fizzier and less tonal but it definitely won't be a total fix, if it works at all.
Legacy sound modes probably won't happen either due to token limits, sadly.
@luchak Hm. Has anyone made any sort of documentation about Pico-8's DAC? Because all I know about the sample rate is that it's sooomewhere under 8kHz, no clue about bit depth but I'd imagine it's Not Much.
@freds72 Thanks for pointing that out! I've updated both the current cart version and the save file so they should work together. The cart should hopefully also break the save format less going forward....
edit: whoops, had wrong permissions on new sharing link. Fixed!
Damn, what a great tool! Somebody should do a live show with it. Maybe output the clock via GPIO and use it as a master clock in a midi setup?
Great fun!
@taxicomics Thank you! Absolutely nothing would make me happier than hearing about someone doing a show with this. :)
I'd love to find a way to get this syncing to other software. Unfortunately I feel like the web experience isn't great - no pointer lock, flaky audio on some platforms, inconsistent copy/paste - and as far as I understand GPIO isn't surfaced for native builds other than Raspberry Pi and PocketCHIP.
I guess I could overwrite a file every frame? Seems hacky and I'm worried I'd hit a PICO-8 too-many-files limit... Maybe though?
Also, if I'm wrong about GPIO and it is available on the desktop somehow, I'd love to know!
edit: Or, as @merwok pointed out on Discord, I could just use serial output and/or printh
. Files and pipes!
This project is really impressive. Keep it up!
Feedback version 9B:
the newly added menu on web does not work properly, I must press start and then again to be able to move once up and down (and then I must repeat the process or I have no control over the synth anymore).
Suggestion:
Is it possible to add a button to "jam"? The ability to select the notes and press them to hear the sound without a loop or while the loop runs? Combining sequencer and live jamming would be mindblowing. Just a thought :). If I'm not mistaken you use 3 of the 4 max. channels for the synth?
How the project goes further is kinda a guess, but what you've done with it already is pure gold!
@Fumetsujo thanks for the feedback! I can't reproduce the menu problem you're seeing on the web version - pressing enter on "go back" works for me? Also, unfortunately, web compatibility is not great on a number of other fronts for reasons mostly out of my control, so if you have a copy of Pico-8 it might be better to download the cart and run it there.
The jam idea is great! I might be too low on tokens right now to make it work but I'll think about whether there might be a way.
> If I'm not mistaken you use 3 of the 4 max. channels for the synth?
This is all using the PCM output, none of the built-in audio machinery. Very close to the CPU and token limits now though.
How have I only just discovered this, and through Mastodon of all sites. Fantastic work.
I was a massive user of RB-338 back in the late 90s / early 2000s and once I worked out where everything was, I was straight back to jamming with 303s and and 808 just like 20 years ago.
I'm going to see if I can recreate some of my old Rebirth tracks.
@biovoid Awesome! I'm curious to hear how the Rebirth-recreation experiment goes.
Most of my sound synthesis followup work is aimed at making this a little more RB-338 recreation friendly - making BD/SD more distinctly 808ish (red) or 909ish (yellow), making the filter scoop more low end at high resonance while cutting out some squeakiness (sample rate limitations mean that you'll never get truly screamy 303 sounds). So if I can get my act together this might be easier in a few weeks. Big "if" there though. :)
Thank you! It feels very good to put this one in the "released" column. :)
RP-8 has been featured on Create Digital Music (CDM) -- a music tech site. Congratulations luchak!
https://cdm.link/2023/03/rp-8-demake-rebirth-rb-338/
bruh, this is more confusing than anything, that usualy means its a good program. so yeah.
edit; finaly figured it out, made this!
rp80{song_mode=false,name="new\20song",pat_store={b0={1={st="DBDADBDADBDADBDA",dt="@@@@@@@@@@@@@@@@",d=16,nt="$\13\07\13$\13\07\13$\13\07\13$\13\07\13",},},b1={1={st="@@@@A@@@@A@@@@A@",dt="@@@@@@@@@@@@@@@@",d=16,nt="\13\13\13\13\13\13\13\13\13\13\13\13\13\13\13\13",},},dr={1={pc={st="@@@@@@@@@@@@@@@@",dt="@@@@@@@@@@@@@@@@",d=16,},cy={st="@@@@@@@@@@@@@@@@",dt="@@@@@@@@@@@@@@@@",d=16,},fm={st="@@@@@@@@@@@@@@@@",dt="@@@@@@@@@@@@@@@@",d=16,},hh={st="@@@@@@@@@@@@@@@@",dt="@@@@@@@@@@@@@@@@",d=16,},sd={st="@@@@@@@@@@@@@@@@",dt="@@@@@@@@@@@@@@@@",d=16,},bd={st="ACCBADBACA@AAABC",dt="@@@@@@@@@@@@@@@@",d=16,},},},},pat_patch="@\00@\03@\80@\00\00\01\01\01@@@\00@@@@@@@\00\00\01\01\01@@@\00@@@@@@@\00\00\01\01@\7?@@@@@@@@@@@@@@@@@@\01\00\80@\00\00@\00",tl={loop_len=4,bars={},loop_start=1,loop=true,def_bar={t0="@\00@\03@\80@\00\00\01\01\01@@@\00@@@@@@@\00\00\01\01\01@@@\00@@@@@@@\00\00\01\01@\7?@@@@@@@@@@@@@@@@@@\01\00\80@\00\00@\00",ev={},},},}
Massive respect and thanks! I found your tool while browsing the Featured collection on my new PowKiddy RGB30 and instantly bought a copy on your itch.io page.
Question, please: Would you be able to add some sort of a "handheld mode" in which the user would move the cursor by joystick and use Z/X as the mouse buttons?
@AdamJ Awesome! I'm glad you found it.
Unfortunately, a handheld mode is probably not in the making - the cart has very little code space left, and a lot of UI code would need to change for a handheld mode to work well. Save/load also won't really work on handhelds since it uses the clipboard, and there's no way to copy/paste there - this I don't have any good solution for. Song files can easily be too big for cstore()
, especially since all the spritesheet space is in use.
If you bought this to use on a handheld, would like a refund, and for some reason need my help to get Itch to give it to you, let me know!
One other idea: if you're willing to settle for an earlier version of RP-8, check out https://www.lexaloffle.com/bbs/cart_info.php?cid=rp8-0 - that's an early beta version released before I decided that I would have to cut console support. d-pad changes selected control, and z/x move knobs up/down and trigger buttons. Not the best UI, but it's at least technically usable!
This is now 100% my favorite cart on Pico-8. This is a fully developed program that honestly rivals many VSTs plugins inside a DAW! It has an amazing workflow, and the simplicity and grit added by the Pico-8 limitations really make this thing shine! All the knobs you need for live performance are here. And, all the little details are thought through. We even have double click to reset the knobs! And, I really like the quick way to change the sequence lengths. And, it is all on one page! There are so many features here, and cool quality of life things, that I find myself wishing some of my favorite VSTs had them too. And, love the sound quality!
If you are new to this thing, really play with the Cut and Res knobs!
Now, I just wish someone made a VST plugin that can load Pico-8 cartridges, so I can use this in my DAW! (Note: the sound export is an awesome feature but if you use this website to play, it will fail to export or crash during longer jam sessions. I use my DAW to record the computer audio.)
[Please log in to post a comment]