Comments (13)
The main issue with the unit_runtime_osc_context is you do not know if it is a new note, or caused by the LFO, or caused by pitchbend. Also the pitchbend is fixed at +/-2 which stops the unit being able to change the PB range.
Any unit that needs to do something on noteon (say reset or change phases) can not rely on the unit_runtime_osc_context data, you can put code in there to recognise a note change but this note change can be caused by PB or LFO, so if you use this change of note you are going to get audible glitches with PB or LFO.
If you want paraphonic oscillators you need NoteOn and NoteOff, having these only work in one of the legato modes to me is madness.
There should be a flag somewhere for legato mode so the unit can adjust itself.
In the Korg para_saw example we have:
/*
* File: para_saw.h
*
* Simple paraphonic saw oscillator.
* Please turn off Legato in the global settings.
*/
This should not be needed!
from logue-sdk.
accurate note on/off is required for correct envelope control. please fix.
from logue-sdk.
I suppose that pitch should always be taken from unit_runtime_osc_context, rather than from note of NoteOn event.
In Legato mode it is implied that only a single voice is audible with no EG control. So just up to us how to treat NoteOffs, e.g.
- activate OSC EG release routines with the first NoteOff or not?
- implement portamento to slide pitch to every next NoteOff?
I would say the simpliest compatible workaround would be to process just first NoteOff callback and ignore the next untill NoteOn is received. As there is no way to determine the current Legato mode from the user unit runtime, the only way is to filter NoteOn/NoteOff events invoked, it would be great to get only the last NoteOff it passed, thought it requires logging and aligning each NoteOn and NoteOff at the runtime level.
from logue-sdk.
Also I think now in 1.2 there is no way for the unit to know if no notes are being played.
So play and release three notes:
Depending on legato mode:
1 : Note on, Note off, Note off, Note off.
2 : Note on, note on, note on, note off, note off, note off.
So for the second case we can match note ons and offs, for the first case we have no idea.
For case 1, we can never tell.
With firmware 1.1 we could tell when no notes were held down.
from logue-sdk.
@AndrewCapon
Option 1 - monophonic
- keep NoteOn note value
- respect only NoteOff with the note number from the p.1
Option 2 - poly/paraphonic - perform voice allocation on NoteOn based on note value with persisting note numbers
- process NoteOff based on the note number and the respective kept in the p.1
For the option 2 the runtime pitch does not make much sense as indeed it is not possible to determine which note and how match it is affected. I'd say it is kept for the SDK1.0 conatibility/portability. So for the poly/para mode, the only reliable option to use unit_pitch_bend, such way pitch LFO wil lbe ignored, I suppose.
The same was pitchbend sensitivity is up to you how to treat 14-bit PB values as MIDI does not mandate the +/-2 OCT range. I hope PB is not affected by pitch LFO in this case?
from logue-sdk.
_Option 1 - monophonic
keep NoteOn note value
respect only NoteOff with the note number from the p.1_
So if a I play C1, C2, C3 then release C1 but still hold C2 and C3?
Option 2 - poly/paraphonic
perform voice allocation on NoteOn based on note value with persisting note numbers
process NoteOff based on the note number and the respective kept in the p.1
We only get one note on in legato mode 1
from logue-sdk.
Maybe I'm not explaining or understanding but as far as I can see:
In legato mode 0 with firmware 1.2 you can handle your pitch and voice from the NoteOn/NoteOff, you can also determine if any notes are currently being played.
In legato mode 1 you cannot handle your pitch using NoteOn, you have to use unit_runtime_osc_context. Also you cannot determine accurately if any notes are currently being played, or if all notes are released. You can determine if the first note played has been released but you do not have any info on any notes that were played (NoteOns) after the first note and whilst it was held.
Also we have no idea what legato mode is set by the user.
Also for the user to change Legato mode it is a bit of a pain requiring a power cycle, and the idea of certain units requiring a certain mode will I guess lead to confusion?
from logue-sdk.
In Legato mode ONLY ONE note at a time is possible. Treat it as a single string pluck instrument. You should not get two NoteOn events with no NoteOff between them, just ignore redundant NoteOffs after the first one.
With Legato = Off - it's normal poly mode, NoteOff per each NoteOn are expected.
from logue-sdk.
Maybe I'm thick.
I have some logic that I want to run when no notes are held. How in mode 1 can I do this? I want to run this logic when the notes are released, not on the next noteon.
How can I determine what legato mode I am in?
How can I write generic note on/ note off code that works in both legato modes?
How can I determine pitch/velocity via note ons in mode 1?
from logue-sdk.
Maybe I'm thick.
I have some logic that I want to run when no notes are held. How in mode 1 can I do this?
- save the note number from NoteOn. Single for mono or in the voice allocaton array for poly
- invalidate the note number on NoteOff event
- if note number is not set (does not exist in the voice allocation array) - no active notes
- additional logic might be required if the software EG release stage is activeted with noteoff
The tricky part is indeed with the pitch control - the one from the context is only meningful for mono/LegatoOn mode.
from logue-sdk.
In mode 1 we get a single note on and multiple note offs.
So lets say note on 63 and hold.
We save away 63.
User then plays two more notes 64 and 65 and hold.
We then get a note off 63.
You are now saying all notes are off?
from logue-sdk.
Correct, that is how both Legato and Portamrnto should work. Even if it is theoreticallly possible write down several parallel legato at on the stave, there is no way to implement it over MIDI. So for legato mode you just need to implement single note at a time, i.e. as soon as you tracking note on- note off parity.
from logue-sdk.
All notes are not off, every other synth would agree with me on this.
I really don't understand why you are arguing that you are correct here where quite obviously you are not!
from logue-sdk.
Related Issues (20)
- Option for NTS-1 to recall last used settings...
- Waves Makefile error HOT 4
- Cycling74 ~gen / RNBO example HOT 2
- Can't enable presets for delay units
- Drumlogue: The volume of the signal routed to pre/post master HOT 7
- Drumlogue: tempo information is unstable
- Drumlogue Audio in Freeze/Crackling sound
- math.h not found when trying to build using Web Assembly on Win 10
- Time out with logue-cli.exe and NTS-1 on Windows
- Drumlogue: Add tempo tick callback
- NTS-1 mkII: Cannot use additional parameters for modfx and revfx HOT 1
- NTS-1 mkII: sdram memory allocation must be up to 16 blocks?
- NTS-1 mkII: Send NoteOff event to OSC units whenever a key is off HOT 3
- Unable to connect `logue-cli` with NTS-1 digital kit `mkII` HOT 5
- NTS-1 mkII: The velocity value is always zero HOT 3
- NTS-1 mkII: unit_set_param_value() calls after unit_init() and before the first call of unit_render() destroy the parameter values HOT 12
- NTS-1 mkII: The LED shows a wrong string value after scrolling starts HOT 4
- NTS-1 mkII: String parameter value with a dot scrolling frame skip
- NTS-1 mkII: MIDI send/receive parameter values inconsistency
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
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.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from logue-sdk.