I have a little piezo speaker hooked up to a Pico. I'd like to generate some simple 8-bit game-type sounds for it.
What I'd really like to be able to do is export sounds created on http://www.beepbox.co (they have JSON export) and add them to Espruino projects.
The sound would need to play in the background so I think this would need to be implemented as some kind of task, but beyond that am not sure where to start.
Any ideas appreciated!
I'd never come across beepbox - that's really cool!
Looking at the JSON it looks like you'll want to scan over it and change its form a bit first - basically go over all of patterns.notes.points and write them into times[patterns.notes.points.tick]=patterns.notes.pitches.
Then it'd just be a matter of using setInterval to scan over the times array one item at a time and do a beep if one was required.
Of course you could use Waveform too, but I'd start out simple :)
I'll give it a go. I don't know how they do the 'trill' type sound when two notes are to be played together. I assume they alternate between the two notes very fast and setInterval may not be fast enough. Maybe this isn't how it's done but it doesn't sound like a proper chord. My music knowledge very limited!
In hardware there's a good hack for two notes at the same time - which is just to attach the piezo to two signal pins and use PWM on both (= two channels).
However if you use Waveform then that automatically does polyphonic sounds - so you just need multiple Waveform classes and you can set them all playing on the same pin at once (although you have to keep the sample rate low - 4kHz or so - to make sure there's enough CPU time).
That's a good tip to use two output pins -- will try it!
Don't worry about formatting, just type in the text and we'll take care of making sense of it. We will auto-convert links, and if you put asterisks around words we will make them bold.
For a full reference visit the Markdown syntax.
© Espruino, powered by microcosm.
Report a problem