meeblip / meeblip-triode Goto Github PK
View Code? Open in Web Editor NEWMeeBlip triode monophonic MIDI synthesizer
License: GNU General Public License v3.0
MeeBlip triode monophonic MIDI synthesizer
License: GNU General Public License v3.0
--------------------------------------------------------------------------------------------------- _ _ _ _ _ _ | | | (_) | | (_) | | _ __ ___ ___ ___| |__ | |_ _ __ | |_ _ __ _ ___ __| | ___ | '_ ` _ \ / _ \/ _ \ '_ \| | | '_ \ | __| '__| |/ _ \ / _` |/ _ \ | | | | | | __/ __/ |_) | | | |_) | | |_| | | | (_) | (_| | __/ |_| |_| |_|\___|\___|_.__/|_|_| .__/ \__|_| |_|\___/ \__,_|\___| | | |_| --------------------------------------------------------------------------------------------------- Change log V1.20 2017.02.27 - MIDI fix so that triode plays nicely with MIDI clock V1.11 2016.11.23 - Reverted filter decay envelope to use SUSTAIN switch, as in original release V1.10 2016.11.12 - Updated MIDI code to exit interrupt immediately if MIDI command is unrecognized - Increased front panel switch scanning rate (10X faster) - Reduced pitchbend to ± 3 semitones - Altered filter decay envelope to ignore SUSTAIN switch so that filter sweeps continue when key is released - Removed digital pre-filtering code (previously used on OSC A&B) - Removed digital enveloping of OSC A & B - Gate oscillators when amplitude envelope hits zero (prevents audio bleed through) - Changed filter cutoff curve (use table from MeeBlip SE) - Scale filter cutoff knob to cover 25%-100% of knob range - Scale filter resonance knob to cover 25%-100% of knob range - Added bandlimited square wave tables (pulse waves were previously generated with offset sawtooth ramps) - Raw calculated waveforms are now used in the lower 4 octaves, then switch to bandlimited wavetables. -Flipped waveforms to match phase and avoid a pop when crossing the cut-over point V1.01 2016.10.24 - Ensure MIDI channel settings are saved correctly when powered off for Channel 1-8 (implement MAXMIDI variable) - Allow MIDI CC control of GLIDE knob to select waves when in wavetable mode (CC 61 now controls GLIDE in wavetable mode) - Updated MIDI code to exit interrupt immediately if MIDI command is unrecognized - Increased front panel switch scanning rate (10X faster) V1.00 2016.10.19 - Initial release --------------------------------------------------------------------------------------------------- MeeBlip hardware is released under a Creative Commons Attribution-ShareAlike 4.0 International (CC-BY-SA 4.0) license. You are free to share and transform this work, even for commercial purposes, providing you: 1. Give appropriate credit, provide a link to the license, and indicate if changes were made. You can say something such as "This project is based upon the MeeBlip anode synthesizer. For more information, visit meeblip.com or download source code and design files at https://github.com/MeeBlip" 2. If you remix, transform, or build upon the material, you must distribute your contributions under the same license as the original. That means making source code, design files and PC board layout files available so someone can build and modify their own version of the project. 3. The MeeBlip name is our intellectual property. You are not allowed to release commercial devices based on our designs using the MeeBlip brand name. Here's are links to the Creative Commons license, for the design: http://creativecommons.org/licenses/by-sa/4.0/ http://creativecommons.org/licenses/by-sa/4.0/legalcode MeeBlip source code and documentation is released under a GPLv3 license. A copy is available in the MeeBlip repository at: https://github.com/MeeBlip/meeblip-anode/blob/master/LICENSE MeeBlip Contributors Jarek Ziembicki - Created the original AVRsynth, upon which this project is based. Laurie Biddulph - Worked with Jarek to translate his comments into English, ported to Atmega16 Daniel Kruszyna - Extended AVRsynth (several of his ideas are incorporated in MeeBlip) Julian Schmidt - Original Meeblip digital filter algorithm Axel Werner - Code optimization, bug fixes and new bandlimited waveforms James Grahame - Meeblip hardware and firmware development
When I set the midi channel to 8, the triode reverts to channel 0 / omni mode on power up.
The initialize code checks for midi channel < 5 but we can now pick values from 1-8 as valid midi channels?
initialize.inc line 223
cpi r16, 5
brlo LOAD_MIDI_CHANNEL ; If stored MIDI Channel is not Channel 1-4, set synth into MIDI OMNI mode.
ldi r16, 0
Seems that you should check for values less than 16 instead, and worry about how many channel the synth supports somewhere else.
In the future, you could check for a change in the state of a switch to toggle between midi 1-8 and 9-16 and support setting the synth to any channel. and not just the lower 8 channels.
In wavetable mode, the GLIDE knob selects wavetables. It should respond to MIDI CC (as should the WAVEFORM switch to allow switching between wavetable banks).
Since the MeeBlip is Open Hardware / Open Source, would you mind adding a Bill Of Materials to the repository? Also I'm guessing you don't have a bootstrap and program the ATMEGA chip directly?
I might play with an alternate build at some point, but I'll probably do it on a separate chip, and keep yours for the "official" build.
Great little bass synth BTW, it sounds really dirty but that's not a bad thing.
There is an issue reported by a user on Reddit that the Meeblip Triode has issues receiving MIDI note on messages when receiving a number of presumably unknown MIDI messages, probably either MIDI Song Position Pointer or MTC message.
Looking at mini_in.inc, as of commit c66a3ed, there is code between lines 23 and 29 which immediately removes the Triode from the interrupt caused by a MIDI message sent should it be a byte between F0 and FF. And, indeed, when my Triode gets a MIDI Beat Clock message from my Korg ER-1 along with note-on commands, the Triode is able to play the notes without problem, since MIDI Beat Clock only consists of the bytes F8, FA, FB, and FC.
However, the Triode stops being able to respond to MIDI messages when getting more complicated unknown MIDI messages. Looking at mini_in.inc, the issue appears to be that, when MIDIPHASE (the byte of a MIDI message we are looking at) is 0, and an unknown byte is received, instead of immediately exiting from the MIDI interrupt, mini_in.inc compares the incoming byte and MIDIPHASE to a number of possible values before finally exiting the interrupt.
To resolve this, I propose adding two instructions right after the INTRX_DATA jump point, on line 73 of the current version of midi_in.inc, like this:
INTRX_DATA:
lds r17, MIDIPHASE ; This is already here on line 73
cpi r17, 0 ; On the old 6502, this isn't needed
breq INTRX_ACPT_X ; Which will jump us to INTRX_EXIT
cpi r17, 0x80 ; This is in the current code; go on as the current code does
Thoughts? This fix should make the Triode more useful when slaved to devices which send complex MIDI data when sending out a clock signal over MIDI.
Edit: Looking at the code again, INTRX_ACPT_X is close enough to this that we can call that with BREQ
Hi, I have a triode and have only recently been playing with wavetable mode. I've also gotten a new sequencer recently and in programming in the various CCs for the meeblip, I noticed that the three-way switch only does positions one and three via MIDI, right at value 64, as you'd expect from a two-way switch. The hardware works fine. I think that I confirmed that you can't get PWM via MIDI either.
Also a feature request, albeit one that might not be possible: I'd love to be able to trigger wavetable mode via CC as well, as it'd go a long way towards being able to replicate patch memory in the sequencer.
Lastly a hardware question: is modding the triode to be actually mono as simple as snipping the ring legs on the socket, or will that not work?
Same as #4 it would be great if the Midi CC control of the sustain part of the envelope was the full range rather than just a switch.
I'm getting a lot of stuck notes and missed midi events from my MeeBlip when driving it from the Squarp Pyramid. It would be great to have the midi button stop all open notes when pressed ( or whatever scheme would allow me to have a quick "panic button" to use.
Alternativelly, supporting the "AllNotesOff" midi message would also be great.
I'm actually tempted to replace the pot for the detune parameters for one that has a hardware center detent. But for everyone else, having a virtual center implemented in software, where the values are shifted so it's easier to keep the oscillators in tune should you want too.
Looking at the code, (not an Assembly programmer, so it reads, very very slowly) it seems possible to support control of the sub-oscillator level from Midi CC (I guess a mult rather than a if somewhere?) . I would change the way the CC#64 works by using the full range 0-127 for volume, instead of on/off at >=64. You can still have full bypass of the sub calculation at level = 0
Also is the sub-oscillator 1 or 2 octaves down? This is orthogonal from the Midi CC question, but since your switches have 2 states, you could actually have the sub function as Off/-1/-2
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.