Posts

Showing posts from May, 2022

#MIDISID Monday #2 - A physical UI and menu system take shape

Image
This week has been mostly about the user interface; physical knobs, buttons and screen. I've procrastinated with this because, frankly, I've found designing a menu system hard.  3 modes So the starting point is that MIDISID will have three modes. I've demonstrated two of these many times already. One is general MIDI input, another is MIDI controller input (eg keyboard) with polyphony (hit as many notes at a time as you like, up to a maximum of the number of SID voices). The third is monophonic, which is the same as polyphonic, but making more of the SID's features and using more of the SID voices together to make complex sounds, at the expense of the polyphony. I'd like MIDISID to just work when powered up and given input. So the Mode menu will be the first menu at power-on and General MIDI will be selected and operational. Here's my plan for the menu system. There will be a lot more, but it'll still start with the 3 modes. Mode > General MIDI > D

baby8 sequencer to actual drum sounds

Image
 I've been asked for more details about this project:  Needs more cowbell! Before I pack this “cv to midi” thing away for a while, here’s another little twiddle, with a rhumba rhythm. pic.twitter.com/LSxB7DzAQ0 — MIDI IN (@midi_in_out) May 20, 2022 When you build something you know the details of what you've done and just assume that everyone else does too.  In short, the baby8 is a sequencer. It's a great kit and a great introduction to sequencers. It has 'gate' and 'cv' (control voltage) outputs. I've connected these to the pico, which is reading those and sending MIDI out. There is no audio at that point. You use a computer or some other device to receive that MIDI and generate the audio. Output from the sequencer I'm new to the modular synthesiser world,  I didn't know what the cv output 'looks like' and what the voltage levels are. So my partner helped me to 'scope those and we discovered that the control voltage ranges from ~2

Theremin Thursday - origin story and progress to date

Image
 This project began sometime last year because I wanted a theremin to play around with (the instrument you play with gestures). I very nearly sprang for an Open Theremin kit, but thought I might be able to make myself something that worked well for much less.  Cheaper kits use light-sensing components, which work optically but not optimally and are affected by ambient light. I thought that there must be sensors that can read distance accurately - and there are. These lidar sensors are allegedly millimetre-accurate and aren't significantly affected by ambient light. I'm using ones with a 50cm sensing distance. And so the project was born. The first few challenges were fun. Although the sensors are very accurate, they are noisy and you have to smooth that. This isn't very difficult and is the same as smoothing out paddles on a commodore computer*. You have to find the sweet spot where you take out the noise without losing too much responsiveness.   I also had to learn about

MIDISID Monday: When the Pico's 30 GPIO aren't enough

Image
This is the first of a weekly roundup of progress and problems with this project.  (An introduction is here if you need it.)  Two decent steps forward this week are arpeggios and GPIOs .  More GPIOs!  Being short on Pico GPIO pins felt wrong but I have been struggling.  First of all, of the theoretical ~30 on the RP2040, 'only' 26 are easily available to the user.  This project already uses quite a few for SID addressing and data.  We want to be able to add more SIDs in future and each SID requires a chip select.  There just aren't enough available for the push-switch rotary encoders that I'd like for this project. Playing with so many settings using a single knob with push switch is fiddly and would spoil what could be a useful and usable module.  Ideally, I'd love four knobs - to play with A/D/S/R at the same time, or filter/PWM  etc.    Picos are cheap, and the idea of using another to manage the inputs and the display did cross my mind!  Perhaps the answer lie

Implementing MIDI pitch bend signals into MIDISID

Image
I've long thought of MIDI as being 'stepped', locked into the 127 notes in semitone intervals.  I've been aware of pitch bend wheels on MIDI devices, but that has seemed like some dark art to me and a look at the documentation doesn't help to allay that opinion. Before the gory details, here's a short video showing MIDISID with pitchbend successfully implemented, first with MIDI input from Logic Pro and then with keyboard input (the only keyboard I have with a pitch wheel) The MIDI message is Ex where x is the channel. There follows (usually) two bytes, each supplying 7 bits of a 14-bit number, the 7 least significant bits first. When you have your 14-bit number, that'll be hex 2000 if the wheel is in the centre, going down to 0000 and up to hex 4000. I believe that this usually represents a tone each way (though there are other messages that can set the 'sensitivity' of the wheel). I procrastinated with this feature because this seemed way too scary

More improvements to MIDISID and Music Box 2 rendered on dual SID

Image
This is my 'Music Box 2' tune again, this time with MIDISID doing its thing and receiving 6 channels of MIDI, rendering them using the 6 voices of 2 SIDs.  Recent improvements are that we now have pulse width modulation to improve some of the sound patches. The SID allows you to set the pulse width of a square wave, which changes the sound. But the real magic happens when you move that pulse width programmatically while the note is sounding. It's a part of the SID's very distinctive sound. And we've moved to a new version of the pcb. The pcb is still very early stages but here we get more components off the breadboard, notably the transistor output stage.

Getting kit drum sounds working on MIDISID

Image
This week I've been mostly working on the drum 'patches' within MIDISID.  This demo uses a single voice on a single SID. Some of that drum track is being lost because of the nature of general MIDI and MIDISID. Drums are usually on channel 10, MIDISID is designed to channel one MIDI channel to one voice, so we're limited to one note at a time. Mostly, this work has involved a lot of coding and debugging of wavetables and other types of table. This bug kept me busy for quite a while! But I've also spent some fun time designing the sound patches. Here is my tom sound in progress, playing the famous intro to Eastenders An important question has been whether I want to work hard to try to make the sounds as realistic as possible or to make a set of sounds that are in keeping with the distinctive SID chip's sound. I think the answer is that the SID is an analogue synthesizer and even if I try to make realistic sounds, it will definitely still have that character.  The

Getting polyphony working on MIDISID

Image
I have three modes in mind for MIDISID. One is the General MIDI mode I've been demonstrating, another is 'polyphonic', which uses the voices of the SIDs (in this case 2 sids for 6-note polyphony) to allow you to use the SID voices with any MIDI controller (such as a keyboard). Here I have my piano injecting MIDI into the MIDISID. It's very responsive, despite the fact that bluetooth and a USB-MIDI adaptor are involved. I am only messing around here to demonstrate the responsiveness (which is superb) and the 6-note polyphony. There are no amazing SID sound effects (yet). So far just some plain patches to simulate various keyboards.  I am able to change 'patch' using the controls on my piano, although those don't match up with the GM program numbers that I'm implementing in the MIDISID.

SID sound patches and vibrato

Image
Having established that I could turn voices on or off according to the MIDI information coming in, the next step is to shape those notes beyond just beeps. This isn't going to be a Roland SC55, but we can get quite a bit of the way there while retaining the characteristics of the SID chips. General MIDI specifies 128 sounds / sound effects and our MIDI input may instruct us to use any of those for a given channel.  Building some of those sounds will be fun - reverse cymbal, or synth drum for example. Some are going to sound very similar to each other. Automagic! Which sound is played for each channel will be automatic, at least in this 'MIDI' mode.   My program for C64 allows the user to map instrument to MIDI channel, but that's a pain to configure each time you use it, and a MIDI file usually contains the 'program' information. If you're using a DAW or scoring tool like Musescore, it's very easy to make sure that information is there. (the 'prog

MIDISID - the idea and first steps

Image
I've long wanted to be able to use the SID (or multiple SIDs) as a MIDI instrument. ie MIDI in and sound from a real SID chip out. This would allow a controller such as a keyboard to play notes on the SID. Either with polyphony, or monophonic with multiple voices combined to produce complex sounds.  I've achieved this some time ago using a MIDI cart in the back of a C64 and my own code: Note that I'm using the sustain pedal on the piano and that I'm changing sounds by changing sounds on the piano (which sends control messages to my program). I'd also like to be able to experiment with sounds by turning knob(s) to adjust parameters. Again I've done this using a real C64 and MIDI cart, with a joystick-controlled interface. I've recently discovered MIDISlave Manager which does pretty much the same thing.  Lastly, if you use MIDI player software, and you have enough SID voices to cover the MIDI channels, you could have a SID-based hardware General MIDI module.