Fixed gate logic.
This commit is contained in:
		
							parent
							
								
									532b0d3843
								
							
						
					
					
						commit
						7980d5f881
					
				|  | @ -18,12 +18,12 @@ MidiNoteList<sMaxNumNotes> midiNotes; | |||
| 
 | ||||
| // -----------------------------------------------------------------------------
 | ||||
| 
 | ||||
| void handleGateChanged(bool inGateActive) | ||||
| inline void handleGateChanged(bool inGateActive) | ||||
| { | ||||
|     digitalWrite(sGatePin, inGateActive ? HIGH : LOW); | ||||
| } | ||||
| 
 | ||||
| void pulseGate() | ||||
| inline void pulseGate() | ||||
| { | ||||
|     handleGateChanged(false); | ||||
|     delay(1); | ||||
|  | @ -32,15 +32,11 @@ void pulseGate() | |||
| 
 | ||||
| // -----------------------------------------------------------------------------
 | ||||
| 
 | ||||
| void handleNotesChanged() | ||||
| { | ||||
|     if (midiNotes.empty()) | ||||
|     { | ||||
|         handleGateChanged(false); | ||||
|         noTone(sAudioOutPin); | ||||
|     } | ||||
|     else | ||||
| void handleNoteOn(byte inChannel, byte inNote, byte inVelocity) | ||||
| { | ||||
|     const bool firstNote = midiNotes.empty(); | ||||
|     midiNotes.add(MidiNote(inNote, inVelocity)); | ||||
|      | ||||
|     // Possible playing modes:
 | ||||
|     // Mono Low:  use midiNotes.getLow
 | ||||
|     // Mono High: use midiNotes.getHigh
 | ||||
|  | @ -50,23 +46,26 @@ void handleNotesChanged() | |||
|     if (midiNotes.getLast(currentNote)) | ||||
|     { | ||||
|         tone(sAudioOutPin, sNotePitches[currentNote]); | ||||
|          | ||||
|         if (firstNote) | ||||
|         { | ||||
|             handleGateChanged(true); | ||||
|         } | ||||
|         else | ||||
|         { | ||||
|             pulseGate(); // Retrigger envelopes. Remove for legato effect.
 | ||||
|         } | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| // -----------------------------------------------------------------------------
 | ||||
| 
 | ||||
| void handleNoteOn(byte inChannel, byte inNote, byte inVelocity) | ||||
| { | ||||
|     midiNotes.add(MidiNote(inNote, inVelocity)); | ||||
|     handleNotesChanged(); | ||||
| } | ||||
| 
 | ||||
| void handleNoteOff(byte inChannel, byte inNote, byte inVelocity) | ||||
| { | ||||
|     midiNotes.remove(inNote); | ||||
|     handleNotesChanged(); | ||||
|     if (midiNotes.empty()) | ||||
|     { | ||||
|         handleGateChanged(false); | ||||
|         noTone(sAudioOutPin); | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| // -----------------------------------------------------------------------------
 | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue
	
	 Francois Best
						Francois Best