Hello everyone, I would like some feedback regarding a project I'm planning. I'm currently setting goals and posible features I can include on the project and setting up design boundries, but I doubt about my ideas, so I would like to hear anyones opinion regarding this.
What I want to build? A 16 step MIDI sequencer that outputs MIDI notes over standard 5-pin MIDI connectors, but not just that. I'm aiming to make the interface of this device like those old synth sequencers with similar features.
There are a few designs I thought of for this which I'll describe in a moment. The device would feature 16 sections to control step parameters, such as note value, velocity value, modulation value, a skip/on/off switch and a manual trigger switch, plus a led to display the step is active or not. I was thinking to include note duration too for each step, but I dropped that for now since I would include that in a global section. Global section would have start/stop/reset buttons, tempo knob, sync midi button and channel selector. Also, in the global section I would put 4 or 8 general purpose knobs to send CC values for custom purposes on the software/synth being used. MIDI in/out to hook up other instrumets with it and memory banks to store 4 or 8 sequences and switch between them on the fly.
Those are the features I would like to have, maybe a few more but lets seattle there for now.
I have been researching the past 2 days about MIDI projects with Arduino and the posible problems I would have. There are a lot of resources regardin MIDI and related stuff, but I'm in the blanks about other design features. To start with, most of the knobs would be rotary encoders, simply because given the memory recall feature, if I use potentiomenters, as soon as I move one, it would jump to where the potentiomenter is, instead of adding/substracting per units. Rotary encoders don't have position so I think it's best for this purpose. Problem is that it seems complicated to handle a lot of them. I was thinking to include a small LCD panel to provide feedback of the setting being changed, so if I move a knob, the panel would display information about what values are being set.
So, first design I thought of was with 1 Arduino (probably the Mega, but started thinking about the Uno), then get shift registers of 16 bit to hook up each step's parameters, then loop on the registers to get the information of changes on a step and construct the MIDI command. In between any change to user defined knobs should go along (with interrupts maybe? Haven't read a lot about that yet). Problem with this is that it seems complicated, and I might be pushing the microcontroller too far for this application.
Second design would be similar, but using potentiomenters and dropping the memory feature. I've seen miltiplexers for analog signals and seems more simple to implement. Would be a pitty to drop the memory banks, that would be a key feature on any sequencer.
Third design would be quite complex, using more than 1 Arduino. In fact 18, 16 for step paramters, 1 for global parameters and display and 1 for the main MIDI handling. This way each step can have more independent and responsive controlls, and the main controller just pulls information from them, without needing to pull information from each knob. In this setup, memory banks are smaller, and can be stored in the steps themselves and recalled any time. Finally, for this I would use smaller Arduinos (like the nano or even smaller) and a Uno or Mega for the main controller. Pretty much a modular setup, that can be easily extended with more steps if needed. This setup also lets me push logic and be more flexible on each step, allowing me to posibly include more parameters or feedback elements like a 7-segment displays to show values.
I'm kind of liking the last approach, it would be expensive, but a lot simpler in terms of code and extensible, since I'm delegating responsabilities. Figuring out how a single step module would be constructed allows me to replicate that and build it progressively. The cost of it would be similar to a standard piano-like MIDI controller, but the value would be much greater since it has what I want.
Is it crazy that last approach? What do you think? Some sort of interfacing would be needed between internal modules, but I'm confident I can work around that.
I would prefer to avoid potentiomenters, mainly for the memory recall problem but it might also require much more power to sustain operation, leading to develop a specific power suply for the potentiomenters.
I've been reading about shift registers, and I think I get how it works, although I need to figure out how to scale the design, but I think the first approach should also work. If I got it right, I should be looping between 16 bits x 16 steps to get changes on parameters and store that internally. I fear that would produce delays in other processings thus rendering the whole project as useless. There's not much information on how to handle many rotary inputs like that, some people ended up using potentiomenters, which could get the job done, but to me, rotary encoders are better given the fact that position is not needed here.
So, I guess that's what I have on mind right now. I should note, I'm a decent developer, though not so decent at low level languages, but I'll get the hang of it, and as for electronics, I know the basics only. Much of that will come while actually working and researching about that.
Any comment will be appreciated. And if I manage to get started on this, I might post progress and share findings.
Thanks