Giter Site home page Giter Site logo

Comments (13)

AndrewCapon avatar AndrewCapon commented on August 18, 2024 1

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.

john-k-walton avatar john-k-walton commented on August 18, 2024

accurate note on/off is required for correct envelope control. please fix.

from logue-sdk.

dukesrg avatar dukesrg commented on August 18, 2024

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.

AndrewCapon avatar AndrewCapon commented on August 18, 2024

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.

dukesrg avatar dukesrg commented on August 18, 2024

@AndrewCapon
Option 1 - monophonic

  1. keep NoteOn note value
  2. respect only NoteOff with the note number from the p.1
    Option 2 - poly/paraphonic
  3. perform voice allocation on NoteOn based on note value with persisting note numbers
  4. 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.

AndrewCapon avatar AndrewCapon commented on August 18, 2024

_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.

AndrewCapon avatar AndrewCapon commented on August 18, 2024

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.

dukesrg avatar dukesrg commented on August 18, 2024

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.

AndrewCapon avatar AndrewCapon commented on August 18, 2024

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.

dukesrg avatar dukesrg commented on August 18, 2024

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.

AndrewCapon avatar AndrewCapon commented on August 18, 2024

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.

dukesrg avatar dukesrg commented on August 18, 2024

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.

AndrewCapon avatar AndrewCapon commented on August 18, 2024

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)

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.