PSA: Don't update to iOS 12.4 if you use apps in AB output slot or IAA apps that use the mic.
https://forum.audiob.us/discussion/34030/urgent-psa-hold-off-updating-to-ios-12-4-if-you-use-apps-in-output-slot-in-audiobus

Perforator -> CC#A CC#B output rate

Hi Guys / @brambos ,

I'm using the CC output from the most excellent Perforator to control parms on my Digitakt. Unfortunately the Digitakt becomes unresponsive as there are too many incoming CC's from Perforator for it to handle. I did some quick logging via mosaic and it seems there are 100's / 1,000s being sent every 1s.

Does anyone know if there an existing script in mosaic to reduce the rate/resolution of midi data? Or maybe this could be a setting in Perforator itself.

Any other ideas on how to reduce the number of CC's sent are welcome!

Cheers!
Andy.

Comments

  • 1000s per second, really? I need to check but off the top if my head it should only be a few dozen max... I’ll have a look :o

  • I just did a video to demo the issue, but can't upload it :(
    It should be straight forward to reproduce though.

  • @kryten42 said:
    I just did a video to demo the issue, but can't upload it :(
    It should be straight forward to reproduce though.

    One could write a program of just a few lines that would reduce the number of cc messages. You could specify minimum time between events. And only let events through when enough time has elapsed since the last one that passed out.

    Pseudocode:

    On midiccreceived:
    If timeSinceLastSent > minTime
    sendmidicc
    TimeSinceLastSent = 0
    Else
    -donothing

  • @espiegel123 said:

    @kryten42 said:
    I just did a video to demo the issue, but can't upload it :(
    It should be straight forward to reproduce though.

    One could write a program of just a few lines that would reduce the number of cc messages. You could specify minimum time between events. And only let events through when enough time has elapsed since the last one that passed out.

    Pseudocode:

    On midiccreceived:
    If timeSinceLastSent > minTime
    sendmidicc
    TimeSinceLastSent = 0
    Else
    -

    A better solution is to only send on cc change instead of flooding the midi bus with duplicate messages.

  • _ki_ki
    edited August 7

    @kryten42 I didn't try, but i assume that the Sample & Hold script for Mozaic can downsample the CCs to a different rate.

  • @MonkeyDrummer said:

    @espiegel123 said:

    @kryten42 said:
    I just did a video to demo the issue, but can't upload it :(
    It should be straight forward to reproduce though.

    One could write a program of just a few lines that would reduce the number of cc messages. You could specify minimum time between events. And only let events through when enough time has elapsed since the last one that passed out.

    Pseudocode:

    On midiccreceived:
    If timeSinceLastSent > minTime
    sendmidicc
    TimeSinceLastSent = 0
    Else
    -

    A better solution is to only send on cc change instead of flooding the midi bus with duplicate messages.

    +1

  • _ki_ki
    edited August 7

    @brambos and @kryten42
    In my tests its 102 CCs from Perforator per second, which is about one CC every 9.8 msec. The number also depends on the host bpm, with 240bpm its 120 CC, one every 8.4msec. Perforator sends 2 CCs at a time.

    As a comparison, Rozeta LFO sends 32 CC per second (one about every 3q.2msec) per enabled LFO, independend of Host BPM.

    @FredAntonCorvest
    FAC Evolver (only one of the 4 CCs enabled) sends 128 (every 7.7msec) with 120bpm and 257 (every 3.8msec) for 240 bpm - this could be problematic if feeding some synth, but allows for tight volume tracking. Maybe add a setting for the update rate.

    .

    In the times when i tested around scripting a Midi CC LFO with streambyter, sending faster than 15msec was problematic to receive for some synth (ie Zeeon) - they started to glitch when overrun with CCs.

  • Thanks for all the suggestions gents.
    i've implemented @MonkeyDrummer solution for now of only sending on cc change .

  • _ki_ki
    edited August 7

    Here my quick and dirty Mozaic measurement script:

    @OnLoad
      ShowLayout 0
      LabelPads {Quick & Dirty CC Rate Measure}
      FillArray ccCount,0, 128
      SetTimerInterval 1000
      StartTimer 
    @End
    
    @OnTimer
      ccReceived = 0
      ccMax   = 0
      ccMaxId = 0
      ccNum   = 0
      for c=0 to 127
        if ccCount[c] <> 0
          ccReceived = ccReceived + ccCount[c]
          Inc ccNum
          if ccMax < ccCount[c]
            ccMax = ccCount[c]
            ccMaxId = c        
          endif
        endif
      endfor
    
      ccRate = 0
      if ccMax > 0
        ccRate = 1000 / ccMax
      endif
    
      LabelKnobs {MAX: },ccMax,{ for CC-},ccMaxId,{  ≈ 1 per },ccRate,{ ms}
      LabelXY {Total }, ccReceived,{ CCs for },ccNum,{ IDs}
    
      FillArray ccCount,0, 128
    @End
    
    @OnMidiCC
      Inc ccCount[MIDIByte2]
    @End 
    

    The script handles multi CC-Ids output by the test-subject.

Sign In or Register to comment.