Giter VIP home page Giter VIP logo

meeblip-triode's Introduction

---------------------------------------------------------------------------------------------------
                     _     _ _         _        _           _      
                    | |   | (_)       | |      (_)         | |     
 _ __ ___   ___  ___| |__ | |_ _ __   | |_ _ __ _  ___   __| | ___ 
| '_ ` _ \ / _ \/ _ \ '_ \| | | '_ \  | __| '__| |/ _ \ / _` |/ _ \
| | | | | |  __/  __/ |_) | | | |_) | | |_| |  | | (_) | (_| |  __/
|_| |_| |_|\___|\___|_.__/|_|_| .__/   \__|_|  |_|\___/ \__,_|\___|
                              | |                                  
                              |_|                                                                                   
---------------------------------------------------------------------------------------------------

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

meeblip-triode's People

Contributors

jgrahame avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

meeblip-triode's Issues

Midi channels above 4 are not restored

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.

Publish a BOM

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.

The Triode should better filter unknown MIDI messages

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

3-way switch via midi isn't working

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?

Midi CC for Sustain level

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.

panic button for hung notes

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.

Virtual notch for oscillator detune knob

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.

Midi CC for Sub-Oscillator level (volume)

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

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.