909 drum machine using realtime dynamic sample selection?

Status
Not open for further replies.

graydetroit

Well-known member
Hi, I've been tinkering with using a Teensy 4.1 with the audio shield to try and emulate a TR-909 drum machine. See my post demoing an early prototype here.

I've been trying to use the Teensy audio synthesis components to model the analog drums, referencing the original circuit designs as laid out here.

However, I've noticed that I've been getting (understandably) lackluster results because of a some factors, including:

1. Linear envelopes (Teensy core envelopes aren't exponential)
2. Inability to configure a common noise source? (Or, I'm not sure how to do this, it may in fact be possible, seems like the noise "voice" gets stolen upon being routed through components)

Some may think I'm too focused on trying to replicate the sounds as accurately as possible, but it's something I'm trying to achieve without introducing analog components.

Even the TR-09 (Roland's boutique product, offering a digital version of the TR-909 using what they term "ACB" or "Analog Circuit Behavior") doesn't really quench my thirst for that authentic 909 experience because:

1. The form factor is tiny (I like the original form factor with the keys and bigger knobs)
2. The sound is obviously extremely close to the original unit, but there are minor things I notice that seem to ruin it for me a bit. Just my opinion.

So, my idea was instead to use a large set of samples of the real TR-909 unit, containing all/most permutations of knob control configurations, and then have an algorithm to select the samples nearest to the current knob configuration for each drum. Sort of a dynamic sample selection, which would happen in realtime.

The sample data would be obviously large, so I was thinking I could offload most samples to an SD card, and then dynamically pull a subset of samples into memory which are approximate to the current knob configuration. Since the subset would constantly be changing, there'd need to be a subroutine which handles this swapping in/out in realtime. I'm not sure if the wav2sketch functionality can be built in to execute during runtime, so that I wouldn't have to convert all of those samples to int arrays before-hand.

This way, one could ideally have the best of both worlds: An authentic sound and a modern unit.

Edit: for those interested, my (rough) code is here.
 
Last edited:
Status
Not open for further replies.
Back
Top