Teensy-based multichannel synth advice wanted (for haptic feedback system)


#1

Not sure if this is the best forum (or category for that matter) for this question, but I do know there’s lots of you that mess with this kind of thing a lot, so I wanted to ask for some advice.

The short version is that I want to make a 4-voice polyphonic and multichannel synth using a Teensy (or similar variant) that responds to USB-MIDI.

Simple enough I suppose, but given some of the constraints of the idea (only needs to produce square waves up to 300 Hz), I want to know if I can do it with a vanilla Teensy sans a multichannel output shield/etc…

The long(er) version is that this will be part of a revamping of a dynamic score system I worked on a few years back (dfscore) in that I want to build it around using haptic feedback instead of (primarily) screen-based interfacing.

I spent ages looking for a good wireless haptic feedback system that could multicast and kept coming up short. While I was in Berlin over the summer I managed to try out a Basslet and really dug it. Quite powerful and really fast response time since it’s not an eccentric motor that’s spinning up (ala ‘taptic engine’ type response speed). ‘Only’ goes up to 250Hz, but that’s plenty of room to create distinct gestures with.

So my plan is to use the Teensy has a hub/node for the system where each Basslet transmitter (each has its own little dongle) would be fed audio from one “voice” of the synth in the Teensy, while responding to MIDI notes on diff channels (or whatever). I’ll house all of that, with a tiny hub inside a small (likely 3D-printed) enclosure, so I can run the whole system off a single USB cable.

So I’ve looked up a few synth systems for Arduino/Teensy and have come across some interesting looking options:

All of them are overkill in terms of the audio side of what I want (since I literally only need square waves).

So I’m open to suggestions in terms of the software-side of things.

But where I’m most looking for input (along with having some questions) is on the hardware side.

Basically, since I’m only after squarewaves (control over velocity would be good, but I don’t think completely necessary actually), can I do that “natively” on a Teensy, or variant (via PWM out?)

Or would it have to have dedicated audio I/O interfacing?

If so, what’s a cheap option for having 4 channels of audio out where “quality” isn’t really important.

Any input appreciated!

(I also considered a Bela mini but it’s significantly more expensive, waaaaay overkill for what I need, and would require learning a whole other system (which I’m not opposed to, I’m just more comfortable with the Arduino-esque paradigm).


#2

Try a Cmd-F for “4 channel” in this page, and you’ll find instructions for stacking two Teensy audio boards to get 4 channels.
https://www.pjrc.com/store/teensy3_audio.html


#3

Ooh interesting.

Not massively expensive, but again seems like overkill with 44.1k/16bit + SD card I/O. That’s definitely an option though.

I had a quick google for some vids about purely filtering PWM into DAC, but nothing massively useful or definitive.

Also looks like standard Teensys have two 12-bit DACs already, which is more than enough resolution here too. So I guess theoretically it could be 2 onboard DACs + one shield.


#4

I started building a 4-channel setup with the Teensy 3.2 and 2 of those audio boards - I didn’t get it tested before i sent it to my friend to continue work on it.

That said - those little audio boards are a pretty nice and cheap solution for 4-channel audio.

The neat thing about the teensy audio setup is you can do this browser-based drag-and-drop software tool to create your program (or at least the audio portions). And there’s a number of built-in synth objects and even fx

There’s a sparkfun link on the teensy page which walks through the process: https://www.sparkfun.com/news/2055

USBmidi or regular midi is pretty easy and straightforward on the teensy as well. Let me know if you need help getting going with any of that.

EDIT - looks like I still have one of the teensy audio boards here so I could hack together a 2-channel proof of concept if you were curious.


#5

Man, that would be super helpful!

I saw that link, but it was late at night so didn’t delve into it, but the UI-based stuff looks amazing.

I’ve done USB-MIDI stuff in the past with a Teensy (which makes it quite easy I must say), though I am wondering if incorporating aftertouch (or something) would be useful in this use case to create ramping haptic “gestures” (like a fast swell to a little “ding”). (as well as perhaps pitch-bend info to be able to access specific Hz (in my testing notes I wrote down that 75 Hz was the Basslet’s most resonant frequency, which falls between MIDI notes 38 and 39))

In the long-term I will probably create some abstractions (in Max) that respond to higher level input, basically having pre-baked gestures that I would then get used to, and the abstraction would send the corresponding MIDI messages.

In looking at this thread on the Arduino forum Paul mentions using the two (12-bit) DAC pins on the Teensy directly as audio output.

So I’m wondering if one audio shield + the two onboard pins would suffice, though I guess it’s not too much hassle to go with two shields. Was just thinking of space/enclosure, but the size difference is nominal.