What's new

Kontakt Update 5.8.0

Yes, copy out somewhere else the 5.6.6 exe (standalone) and dll (plugin), do the update to 5.8, then rename the older version files and place them where latest versions are. In most DAWs this should work.
 
But won't that replace the 5.8 ?
I used the 5.6.6 installer, and Spotlight worked fine. NA simply put 5.8 as an "available update".
I don't remember the 5.6 installer giving me a choice of installation folder, it simply crushed the 5.8.
 
I think what ED's talking about is to copy the 5.6.6 dll and stand-a-lone to another folder for safe keeping. Then go ahead and update to the 5.8 and let it do what it wants.

Now I'm not sure how interchangeable the Stand-a-lone is, I've never monkeyed with that, but the dlls are easily changeable. I've got Kontakt 5.1, 5.2, 5.5, 5.7, and 5.8 dlls, all in different folders. All I have to do is select the one I want to use is by selecting the folder in "Preferences" in my DAW.
 
So I should reinstall 5.6.6, copy it elsewhere, then update it (again) in NA to use the newest libraries. But will 5.6.6 then work without registering it with NA?
 
Well, my 5.6 installer (an update from Komplete9 on a 32bit Windows 7) must have been 32bit, since it did not remove the 5.8 dll's from the 64bit vst folder, but put 5.6 dll's in a new 32bit folder alongside. The stand-alone .exe I saved in a new folder, relabelled it Kontakt 566.exe with a link on my desktop. Then I re-updated to 5.8 in NA. ( in about 5 minutes.)

I don't think it would have worked if the 5.6 installer had been for 64bit, since that installer gave me no options for modifying the installation path.

Thanks for the help, E.D!
 
NI installers have both 64- and 32-bit plugins in them. You gotta mind the VST paths when going through installer steps, don't just click "Next".
 
The 5.6 installer gave me no path option: it just told me what it was going to do..

Or maybe the 5.6 installer refused to crush the 5.8 64bit dll's and just installed its 32bit components? It crushed the standalone .exe o.k...
 
Last edited:
I don't recall having any path options either, except for the instruments and samples. I just learned long ago to save my dll files somewhere else before I update. I don't worry about the Stand-a-lone, I never use it.

I'm not sure what you mean by "crush", I think it just replaces the files.
 
Where can I find the KSP changelog? I updated just today (was busy) because some users have problems with one of my scripts particularly in 5.8
The 24 hours of debugging lead me to the thought that there is a new callback or something has been added, that reacts on my ui_callbacks entirely. But, or my KSP reference is unupdated, or just has not be written yet.

P.S. Ok, I have read the thread entirely and assumed, there is no new API. So I'm confused to double-time. Really can not catch the bug. I have huge lags in the interface, but I'm almost sure, it does not depend on my ui_control callbacks.
For example, I have glitches even in this code:

Code:
....

on ui_control($Layout__Unit1Knob1)
  pgs_set_key_val(Unit1Knob1,0,1)
end on

....

on pgs_changed
  select (pgs_get_key_val(FXRACK,0))
    case 1
      $i := 0
      while ($i<588)
        select ($i)
          case 0 to 255
            %master_preset[$i] := pgs_get_key_val(FXRACK_PRESET,$i)
          case 256 to 511
            %master_preset[$i] := pgs_get_key_val(FXRACK_PRESET1,$i-256)
          case 512 to 767
            %master_preset[$i] := pgs_get_key_val(FXRACK_PRESET2,$i-512)
        end select
        inc($i)
      end while
      call get_master_preset
      $KnobsPreserved := 1
      call AssignUnit1Plugin
      call AssignUnit2Plugin
      call AssignUnit3Plugin
      wait(10000)
      $KnobsPreserved := 0
      if (1=1)
        set_control_par($Layout__OverlaySliderID,$CONTROL_PAR_HIDE,$HIDE_WHOLE_CONTROL)
        $Layout__i := 0
        while ($Layout__i<374)
          if (%Layout__control__Page[$Layout__i]=$Layout__UnitsPage)
            set_control_par(%Layout__Page__IDs[$Layout__i],$CONTROL_PAR_HIDE,$HIDE_PART_NOTHING)
          end if
          if (%Layout__control__Page[$Layout__i] # $Layout__UnitsPage and (%Layout__control__Page[$Layout__i] # 0))
            set_control_par(%Layout__Page__IDs[$Layout__i],$CONTROL_PAR_HIDE,$HIDE_WHOLE_CONTROL)
          end if
          inc($Layout__i)
        end while
      end if
      call RenderInserts
      $Layout__lfoTweakButton := 0
      $Layout__seqTweakButton := 0
      pgs_set_key_val(FXRACK,0,0)
    case 2
      call set_master_preset
      $i := 0
      while ($i<588)
        select ($i)
          case 0 to 255
            pgs_set_key_val(FXRACK_PRESET,$i,%master_preset[$i])
          case 256 to 511
            pgs_set_key_val(FXRACK_PRESET1,$i-256,%master_preset[$i])
          case 512 to 767
            pgs_set_key_val(FXRACK_PRESET2,$i-512,%master_preset[$i])
        end select
        inc($i)
      end while
      pgs_set_key_val(FXRACK,0,-1)
  end select
  select (pgs_get_key_val(FXRACK_BYPASS,0))
    case 0
      select ($Unit1PluginOnProxy)
        case 0
          $Layout__Unit1PluginOn := 0
          call OnUnit1PluginOn
        case 1
          $Layout__Unit1PluginOn := 1
          call OnUnit1PluginOn
      end select
    case 1
      select ($Unit1PluginOnProxy)
        case 0
          $Layout__Unit1PluginOn := 1
          call OnUnit1PluginOn
        case 1
          $Layout__Unit1PluginOn := 0
          call OnUnit1PluginOn
      end select
  end select
  select (pgs_get_key_val(FXRACK_BYPASS,1))
    case 0
      select ($Unit2PluginOnProxy)
        case 0
          $Layout__Unit2PluginOn := 0
          call OnUnit2PluginOn
        case 1
          $Layout__Unit2PluginOn := 1
          call OnUnit2PluginOn
      end select
    case 1
      select ($Unit2PluginOnProxy)
        case 0
          $Layout__Unit2PluginOn := 1
          call OnUnit2PluginOn
        case 1
          $Layout__Unit2PluginOn := 0
          call OnUnit2PluginOn
      end select
  end select
  select (pgs_get_key_val(FXRACK_BYPASS,2))
    case 0
      select ($Unit3PluginOnProxy)
        case 0
          $Layout__Unit3PluginOn := 0
          call OnUnit3PluginOn
        case 1
          $Layout__Unit3PluginOn := 1
          call OnUnit3PluginOn
      end select
    case 1
      select ($Unit3PluginOnProxy)
        case 0
          $Layout__Unit3PluginOn := 1
          call OnUnit3PluginOn
        case 1
          $Layout__Unit3PluginOn := 0
          call OnUnit3PluginOn
      end select
  end select
  if (pgs_get_key_val(Unit1Knob1,0)=1)
    pgs_set_key_val(Unit1Knob1,0,0)
  end if
  if (pgs_get_key_val(Unit1Knob2,0)=1)
    pgs_set_key_val(Unit1Knob2,0,0)
  end if
  if (pgs_get_key_val(Unit1Knob3,0)=1)
    pgs_set_key_val(Unit1Knob3,0,0)
  end if
  if (pgs_get_key_val(Unit1Knob4,0)=1)
    pgs_set_key_val(Unit1Knob4,0,0)
  end if
  if (pgs_get_key_val(Unit1Knob5,0)=1)
    pgs_set_key_val(Unit1Knob5,0,0)
  end if
  if (pgs_get_key_val(Unit1Knob6,0)=1)
    pgs_set_key_val(Unit1Knob6,0,0)
  end if
  if (pgs_get_key_val(Unit1Knob7,0)=1)
    pgs_set_key_val(Unit1Knob7,0,0)
  end if
  if (pgs_get_key_val(Unit1Knob8,0)=1)
    pgs_set_key_val(Unit1Knob8,0,0)
  end if
  if (pgs_get_key_val(Unit1Knob9,0)=1)
    pgs_set_key_val(Unit1Knob9,0,0)
  end if
  if (pgs_get_key_val(Unit1Knob10,0)=1)
    pgs_set_key_val(Unit1Knob10,0,0)
  end if
  if (pgs_get_key_val(Unit1Knob11,0)=1)
    pgs_set_key_val(Unit1Knob11,0,0)
  end if
  if (pgs_get_key_val(Unit1Knob12,0)=1)
    pgs_set_key_val(Unit1Knob12,0,0)
  end if
  if (pgs_get_key_val(Unit2Knob1,0)=1)
    pgs_set_key_val(Unit2Knob1,0,0)
  end if
  if (pgs_get_key_val(Unit2Knob2,0)=1)
    pgs_set_key_val(Unit2Knob2,0,0)
  end if
  if (pgs_get_key_val(Unit2Knob3,0)=1)
    pgs_set_key_val(Unit2Knob3,0,0)
  end if
  if (pgs_get_key_val(Unit2Knob4,0)=1)
    pgs_set_key_val(Unit2Knob4,0,0)
  end if
  if (pgs_get_key_val(Unit2Knob5,0)=1)
    pgs_set_key_val(Unit2Knob5,0,0)
  end if
  if (pgs_get_key_val(Unit2Knob6,0)=1)
    pgs_set_key_val(Unit2Knob6,0,0)
  end if
  if (pgs_get_key_val(Unit2Knob7,0)=1)
    pgs_set_key_val(Unit2Knob7,0,0)
  end if
  if (pgs_get_key_val(Unit2Knob8,0)=1)
    pgs_set_key_val(Unit2Knob8,0,0)
  end if
  if (pgs_get_key_val(Unit2Knob9,0)=1)
    pgs_set_key_val(Unit2Knob9,0,0)
  end if
  if (pgs_get_key_val(Unit2Knob10,0)=1)
    pgs_set_key_val(Unit2Knob10,0,0)
  end if
  if (pgs_get_key_val(Unit2Knob11,0)=1)
    pgs_set_key_val(Unit2Knob11,0,0)
  end if
  if (pgs_get_key_val(Unit2Knob12,0)=1)
    pgs_set_key_val(Unit2Knob12,0,0)
  end if
  if (pgs_get_key_val(Unit3Knob1,0)=1)
    pgs_set_key_val(Unit3Knob1,0,0)
  end if
  if (pgs_get_key_val(Unit3Knob2,0)=1)
    pgs_set_key_val(Unit3Knob2,0,0)
  end if
  if (pgs_get_key_val(Unit3Knob3,0)=1)
    pgs_set_key_val(Unit3Knob3,0,0)
  end if
  if (pgs_get_key_val(Unit3Knob4,0)=1)
    pgs_set_key_val(Unit3Knob4,0,0)
  end if
  if (pgs_get_key_val(Unit3Knob5,0)=1)
    pgs_set_key_val(Unit3Knob5,0,0)
  end if
  if (pgs_get_key_val(Unit3Knob6,0)=1)
    pgs_set_key_val(Unit3Knob6,0,0)
  end if
  if (pgs_get_key_val(Unit3Knob7,0)=1)
    pgs_set_key_val(Unit3Knob7,0,0)
  end if
  if (pgs_get_key_val(Unit3Knob8,0)=1)
    pgs_set_key_val(Unit3Knob8,0,0)
  end if
  if (pgs_get_key_val(Unit3Knob9,0)=1)
    pgs_set_key_val(Unit3Knob9,0,0)
  end if
  if (pgs_get_key_val(Unit3Knob10,0)=1)
    pgs_set_key_val(Unit3Knob10,0,0)
  end if
  if (pgs_get_key_val(Unit3Knob11,0)=1)
    pgs_set_key_val(Unit3Knob11,0,0)
  end if
  if (pgs_get_key_val(Unit3Knob12,0)=1)
    pgs_set_key_val(Unit3Knob12,0,0)
  end if
end on

P.P.S. I know. it looks bad, but It is only for doing anything in the callback.
If remove lines in pgs, it works. The same with couple-line functions, like
Code:
function OnKnobs
    // NI_CALLBACK_ID etc
    ....
    // arg1 is id of value-label of ui-element
    arg1 -> hide := HIDE_PART_BG
    wait(1000)
    // if NI_CALLBACK_ID etc
    arg1 -> hide := HIDE_WHOLE_CONTROL
end function

P.P.P.S. More than, with profiling of ui_callbacks, they are executed just in 6-10 microseconds with all big code called. But ui is stacked.

P.P.P.P.S. :grin: I have also counted all controls of all types (though there is a problem) and not so scary:
Code:
slider amount: 85
button amount: 142
switch amount: 52
label amount: 94
menu amount: 2
table amount: 1
waveform amount: 0
knob amount: 0
file_selector amount: 0
level_meter amount: 0
text_edit amount: 1
value_edit amount: 1
xy amount: 2

P.P.P.P.P.S. Of course, I've blocked all listener and persistent_changed code at first. And have not ui_update callback at all.
 

Attachments

  • 2018-06-17_02-58-46.png
    2018-06-17_02-58-46.png
    10.9 KB · Views: 2
Last edited:
Why would you do what you're doing there in PGS? :/

That is some really nasty code right there. Too many branches that are ran EVERY time there's a PGS call (which, if you're setting a PGS key on ui_slider callback, is a LOT of calls). No wonder you get laggy GUI (and possibly CPU spikes too).

If you absolutely must do something like that via PGS, you need to have a message passing system - have a separate PGS key that will be used to designate when a message is sent (otherwise do nothing in PGS callback), and to which parameter it should apply, then select-case your way through all the parameters.

But this is really nasty.
 
Why would you do what you're doing there in PGS?
It's really, really the last example I took from the code. There is no pgs in the subject script. There is the function with set_engine_par and hide_part. Nothing really strange in it. Look at the second example. It stacked too, without any pgs code.
 
That's because the code you sent is useless for checking. Post a more useful piece of code that actually works and compiles in Kontakt so that we can easily see what's going on.
 
Update in version 5.8.1. via Native Access _ (cool)


  • IMPROVED Wet & Dry sliders on many effects (e.g., Reverbs and Delays) would cause loud artefacts when used; control signal smoothing is now a lot more robust with artefacts greatly reduced
  • IMPROVED KSP: "Array out of bounds" warnings now include additional info (name and size of the array and index of attempted access)
  • FIXED Some older Kontakt Player libraries (like East West RA) would stay in Demo mode even when properly authenticated
  • FIXED Group MIDI input channel settings are now recalled correctly after saving and reloading an NKI
  • FIXED Kontakt would crash when trying to set the Sample Subdirectory on the Save As dialog
  • FIXED In some cases (e.g. with Top Shelf Drums by 3 Sigma Audio), the instrument GUI would be corrupt when using multiple instances of the same NKI
  • FIXED Kontakt would crash when trying to multi-select groups with Shift+Click
  • FIXED Kontakt would crash when assigning automation to controls the name of which included special characters
  • OS REQUIREMENTS This version requires macOS 10.11 or higher or Windows 7 or higher
 
IMPROVED KSP: "Array out of bounds" warnings now include additional info (name and size of the array and index of attempted access)

This is great.
 
Just updated to 5.8.1.
Spotlight Solo Strings still crashes it. Grrr..
 
Last edited:
Top Bottom