Script giving stuck notes
-
woodslanding
- Member
- Posts: 1327
- Contact:
I'm using this script to do my midi input processing. It's working great (although I haven't tested all the features yet) but it's giving me stuck midi notes. It's missing both note0ns and noteoffs with a good bit of regularity.
Just wondering if one of the script gurus can look it over, and make sure I'm putting the appropriate parts of it in process() and callback() or if there are any other red flags that would cause concern.
Thanks in advance for any thoughts.
[c]/////////////////////////////////////////////////////////////////////////////
// TO DO:
// Disable transpose for drum channel, but send out midi CC4 instead
// We must account for two keyboards--the bass split should only affect
// a keyboard that is assigned to bass. How do we do that????
//
//
/////////////////////////////////////////////////////////////////////////////
VAR midiIN, clearIN, midiOUT, transposeIN, bassOn1IN,bassOn2IN,orgRechIN : tParameter;
var splitIN : Tparameter;
var rhBassIN: Tparameter;
var handsIN: Tparameter;
var isBassIN : Tparameter;
var isDrumIN: Tparameter;
VAR transpositions : ARRAY OF integer;
VAR noteONs : ARRAY OF boolean;
VAR midi : tMidi;
VAR midiCount, transpose, i , orgRech : integer;
VAR clearing, newTranspose: boolean;
var splitval: integer;
var rhBass,hands,isBass, bassOn1, bassOn2, isDrum: boolean;
PROCEDURE Init;
BEGIN
midiIN := CreateParam('midi in', ptMidi); SetIsOutput(midiIN, FALSE);
clearIN := CreateParam('clear notes', ptButton); SetIsOutput(clearIN, FALSE);
transposeIN := CreateParam('transpose', ptDataFader); SetIsOutput(transposeIN, FALSE);
splitIN := CreateParam('split',ptMidiNoteFader ); SetIsOutPut(splitIN,false);
handsIN := CreateParam('hands on',ptSwitch); SetIsOutput(handsIN, false);
isBassIN := CreateParam('is bass ch',ptSwitch); SetIsOutput(isBassIN, false);
bassOn1IN := CreateParam('key1 bass',ptSwitch); SetIsOutput(bassOn1IN, false);
bassOn2IN := CreateParam('key2 bass',ptSwitch); SetIsOutput(bassOn2IN, false);
isDrumIN := CreateParam('is drum ch',ptSwitch); SetIsOutput(isDrumIN, false);
orgRechIN := CreateParam('org rech',ptDataFader); SetIsOutput(orgRechIN, false);
rhBassIN := CreateParam('RH bass',ptSwitch); SetIsOutput(rhBassIN, false);
midiOUT := CreateParam('midi out', ptMidi); SetIsInput(midiOUT, FALSE);
SetFormat(splitIN,'%.0f'); SetMin(splitIN,2); SetMax(splitIN,126); SetDefaultValue(splitIN,62);
SetFormat(transposeIN, '%.0f'); SetMin(transposeIN, -24); SetMax(transposeIN, 24);
SetMin(orgRechIN, 0); SetMax(orgRechIN, 2);
SetArrayLength(transpositions, 128);
SetArrayLength(noteONs, 128);
for i := 0 to 127 DO BEGIN
transpositions := 0;
noteOns := FALSE;
END;
clearing := FALSE;
newTranspose := FALSE;
END; // Init
procedure makeHands;
var note : integer;
begin
if hands then begin
note := midi.data1;
if note > 60 then midi.data1 := note - 12
else midi.data1 := note + 12;
end;
end;
procedure callback(n: integer);
BEGIN
IF (n = clearIN) and (getValue(clearIN) > 0) THEN clearing := TRUE
ELSE IF (n = transposeIN) THEN newTranspose := TRUE
ELSE IF (n = handsIN) or (n = splitIN) or (n = isBassIN) or (n = bassOn1IN) or (n = bassOn2IN) or (n = isDrumIN) or (n = rhBassIN) THEN
// if any of the split settings change, best clear existing notes!
BEGIN
splitval := round(getValue(splitIN));
rhBass := getValue(rhBassIN) > 0;
hands := getValue(handsIN) > 0;
isBass := getValue(isBassIN) > 0;
bassOn1 := getValue(bassOn1IN) > 0;
bassOn2 := getValue(bassOn2IN) > 0;
isDrum := getValue(isDrumIN) > 0;
orgRech := round(getValue(orgRechIN));
clearing := TRUE;
END;
END;
// process
procedure process;
var outCount,note,chan: integer;
var ccTrans: integer;
var newMidi: tMidi;
BEGIN
midiCount := GetLength(midiIN);
outCount := 0;
IF clearing then BEGIN
for i := 0 to 127 DO BEGIN
// send note off s
if noteONs := TRUE THEN BEGIN
midi.channel := 1; midi.msg := 128; midi.data1 := i; midi.data2 := 0;
setMidiArrayValue(midiOUT, outCount, midi);
outCount := outCount + 1;
noteONs := FALSE;
END;
END;
// send sus pedal off!
midi.channel := 1; midi.msg := 176; midi.data1 := 64; midi.data2 := 0;
setMidiArrayValue(midiOUT, outCount, midi);
outCount := outCount + 1;
setLength(midiOUT, outCount);
clearing := FALSE;
END
ELSE IF newTranspose then BEGIN
if isDrum then begin
transpose := round(getValue(transposeIN));
// create midi cc4 out for drum tuning
ccTrans := (round((transpose * 1.76) + 64));
//strace('____________CC TRANS = ' + intToStr(ccTrans));
newMidi.msg := 176; newMidi.channel := 1; newMidi.data1 := 4; newMidi.data2 := round(ccTrans);
SetMidiArrayValue(midiOUT, outCount, newMidi);
outCount := 1;
setLength(midiOUT, outCount);
end;
newTranspose := FALSE;
END
ELSE IF (midiCount > 0) THEN BEGIN
IF isDrum then transpose := 0 else transpose := round(getValue(transposeIN));
FOR i := 0 TO (midiCount - 1) DO BEGIN
GetMidiArrayValue(midiIN, i, midi);
note := midi.data1;
chan := midi.channel;
IF ((chan = 1) and (not bassOn1)) OR ((chan = 2) and not (bassOn2)) OR //ALLOW NOTES ABOVE AND BELOW IF KEYB IS NOT SUBJECT TO BASS
(((note >= splitVal) AND ((not isBass) OR (isbass AND rhBass))) //ABOVE SPLIT OUT
OR ((note < splitVal)) AND ((not isBass) OR (isbass AND not rhBass))) THEN BEGIN //BELOW SPLIT OUT
if (orgRech > 0) then midi.channel := orgRech; //if it's 0 leave ch unchanged
IF ((midi.msg = 144) AND (midi.data2 > 0)) THEN BEGIN // NoteOn
if hands then makeHands;
transpositions[midi.data1] := transpose; // Store transpose value used for NoteOn
noteOns[midi.data1] := TRUE;
midi.data1 := midi.data1 + transpose;
END
ELSE IF ( (midi.msg = 128)
OR ((midi.msg = 144) AND (midi.data2 = 0))) THEN BEGIN // NoteOff
if hands then makeHands;
if (not isDrum) then begin
midi.data1 := midi.data1 + transpositions[midi.data1]; // Retrieve stored transpose and add to NoteOff
noteOns[midi.data1] := FALSE;
end;
END;
SetMidiArrayValue(midiOUT, outcount, midi);
outCount := outCount + 1;
END;
END;
setLength(midiOUT, outCount);
END
ELSE BEGIN
SetLength(midiOUT, 0);
END;
END;
[/c]
Just wondering if one of the script gurus can look it over, and make sure I'm putting the appropriate parts of it in process() and callback() or if there are any other red flags that would cause concern.
Thanks in advance for any thoughts.
[c]/////////////////////////////////////////////////////////////////////////////
// TO DO:
// Disable transpose for drum channel, but send out midi CC4 instead
// We must account for two keyboards--the bass split should only affect
// a keyboard that is assigned to bass. How do we do that????
//
//
/////////////////////////////////////////////////////////////////////////////
VAR midiIN, clearIN, midiOUT, transposeIN, bassOn1IN,bassOn2IN,orgRechIN : tParameter;
var splitIN : Tparameter;
var rhBassIN: Tparameter;
var handsIN: Tparameter;
var isBassIN : Tparameter;
var isDrumIN: Tparameter;
VAR transpositions : ARRAY OF integer;
VAR noteONs : ARRAY OF boolean;
VAR midi : tMidi;
VAR midiCount, transpose, i , orgRech : integer;
VAR clearing, newTranspose: boolean;
var splitval: integer;
var rhBass,hands,isBass, bassOn1, bassOn2, isDrum: boolean;
PROCEDURE Init;
BEGIN
midiIN := CreateParam('midi in', ptMidi); SetIsOutput(midiIN, FALSE);
clearIN := CreateParam('clear notes', ptButton); SetIsOutput(clearIN, FALSE);
transposeIN := CreateParam('transpose', ptDataFader); SetIsOutput(transposeIN, FALSE);
splitIN := CreateParam('split',ptMidiNoteFader ); SetIsOutPut(splitIN,false);
handsIN := CreateParam('hands on',ptSwitch); SetIsOutput(handsIN, false);
isBassIN := CreateParam('is bass ch',ptSwitch); SetIsOutput(isBassIN, false);
bassOn1IN := CreateParam('key1 bass',ptSwitch); SetIsOutput(bassOn1IN, false);
bassOn2IN := CreateParam('key2 bass',ptSwitch); SetIsOutput(bassOn2IN, false);
isDrumIN := CreateParam('is drum ch',ptSwitch); SetIsOutput(isDrumIN, false);
orgRechIN := CreateParam('org rech',ptDataFader); SetIsOutput(orgRechIN, false);
rhBassIN := CreateParam('RH bass',ptSwitch); SetIsOutput(rhBassIN, false);
midiOUT := CreateParam('midi out', ptMidi); SetIsInput(midiOUT, FALSE);
SetFormat(splitIN,'%.0f'); SetMin(splitIN,2); SetMax(splitIN,126); SetDefaultValue(splitIN,62);
SetFormat(transposeIN, '%.0f'); SetMin(transposeIN, -24); SetMax(transposeIN, 24);
SetMin(orgRechIN, 0); SetMax(orgRechIN, 2);
SetArrayLength(transpositions, 128);
SetArrayLength(noteONs, 128);
for i := 0 to 127 DO BEGIN
transpositions := 0;
noteOns := FALSE;
END;
clearing := FALSE;
newTranspose := FALSE;
END; // Init
procedure makeHands;
var note : integer;
begin
if hands then begin
note := midi.data1;
if note > 60 then midi.data1 := note - 12
else midi.data1 := note + 12;
end;
end;
procedure callback(n: integer);
BEGIN
IF (n = clearIN) and (getValue(clearIN) > 0) THEN clearing := TRUE
ELSE IF (n = transposeIN) THEN newTranspose := TRUE
ELSE IF (n = handsIN) or (n = splitIN) or (n = isBassIN) or (n = bassOn1IN) or (n = bassOn2IN) or (n = isDrumIN) or (n = rhBassIN) THEN
// if any of the split settings change, best clear existing notes!
BEGIN
splitval := round(getValue(splitIN));
rhBass := getValue(rhBassIN) > 0;
hands := getValue(handsIN) > 0;
isBass := getValue(isBassIN) > 0;
bassOn1 := getValue(bassOn1IN) > 0;
bassOn2 := getValue(bassOn2IN) > 0;
isDrum := getValue(isDrumIN) > 0;
orgRech := round(getValue(orgRechIN));
clearing := TRUE;
END;
END;
// process
procedure process;
var outCount,note,chan: integer;
var ccTrans: integer;
var newMidi: tMidi;
BEGIN
midiCount := GetLength(midiIN);
outCount := 0;
IF clearing then BEGIN
for i := 0 to 127 DO BEGIN
// send note off s
if noteONs := TRUE THEN BEGIN
midi.channel := 1; midi.msg := 128; midi.data1 := i; midi.data2 := 0;
setMidiArrayValue(midiOUT, outCount, midi);
outCount := outCount + 1;
noteONs := FALSE;
END;
END;
// send sus pedal off!
midi.channel := 1; midi.msg := 176; midi.data1 := 64; midi.data2 := 0;
setMidiArrayValue(midiOUT, outCount, midi);
outCount := outCount + 1;
setLength(midiOUT, outCount);
clearing := FALSE;
END
ELSE IF newTranspose then BEGIN
if isDrum then begin
transpose := round(getValue(transposeIN));
// create midi cc4 out for drum tuning
ccTrans := (round((transpose * 1.76) + 64));
//strace('____________CC TRANS = ' + intToStr(ccTrans));
newMidi.msg := 176; newMidi.channel := 1; newMidi.data1 := 4; newMidi.data2 := round(ccTrans);
SetMidiArrayValue(midiOUT, outCount, newMidi);
outCount := 1;
setLength(midiOUT, outCount);
end;
newTranspose := FALSE;
END
ELSE IF (midiCount > 0) THEN BEGIN
IF isDrum then transpose := 0 else transpose := round(getValue(transposeIN));
FOR i := 0 TO (midiCount - 1) DO BEGIN
GetMidiArrayValue(midiIN, i, midi);
note := midi.data1;
chan := midi.channel;
IF ((chan = 1) and (not bassOn1)) OR ((chan = 2) and not (bassOn2)) OR //ALLOW NOTES ABOVE AND BELOW IF KEYB IS NOT SUBJECT TO BASS
(((note >= splitVal) AND ((not isBass) OR (isbass AND rhBass))) //ABOVE SPLIT OUT
OR ((note < splitVal)) AND ((not isBass) OR (isbass AND not rhBass))) THEN BEGIN //BELOW SPLIT OUT
if (orgRech > 0) then midi.channel := orgRech; //if it's 0 leave ch unchanged
IF ((midi.msg = 144) AND (midi.data2 > 0)) THEN BEGIN // NoteOn
if hands then makeHands;
transpositions[midi.data1] := transpose; // Store transpose value used for NoteOn
noteOns[midi.data1] := TRUE;
midi.data1 := midi.data1 + transpose;
END
ELSE IF ( (midi.msg = 128)
OR ((midi.msg = 144) AND (midi.data2 = 0))) THEN BEGIN // NoteOff
if hands then makeHands;
if (not isDrum) then begin
midi.data1 := midi.data1 + transpositions[midi.data1]; // Retrieve stored transpose and add to NoteOff
noteOns[midi.data1] := FALSE;
end;
END;
SetMidiArrayValue(midiOUT, outcount, midi);
outCount := outCount + 1;
END;
END;
setLength(midiOUT, outCount);
END
ELSE BEGIN
SetLength(midiOUT, 0);
END;
END;
[/c]
Custom Ryzen 5900x MATX build, Win10, Fireface UFX, touchscreen
Custom 2 manual midi keyboard
Usine, Kontakt, Reaktor, Synthmaster, Byome, Arturia, Soundtoys, Unify
Custom 2 manual midi keyboard
Usine, Kontakt, Reaktor, Synthmaster, Byome, Arturia, Soundtoys, Unify
-
woodslanding
- Member
- Posts: 1327
- Contact:
I've done some more tests, and have discovered I seem to get stuck notes (only? much less frequently?) when I'm playing both keyboards (i.e. notes are coming in on channels 1 and 2)
I'm going to try to put 2 of these scripts in each channel, so they can both concentrate on one channel and see if that helps.
I also note that I am getting stuck notes on an older branch of my wkp which I have been using without issue for months and months. It just started giving me stuck notes under my new computer. I have been able to reduce latency from 256 to 64.... and now I'm getting stuck notes.
I guess the 64 blocksize puts greater demands on the system? So I'm a little concerned that there isn't a scripting solution?
I should also note that I am still using 1.1. I don't know if the script engine changed in 1.2, but obviously some things did, as I am having a lot of problems with my wkp. Also CPU has gone from 35% to 55%.
-e
I'm going to try to put 2 of these scripts in each channel, so they can both concentrate on one channel and see if that helps.
I also note that I am getting stuck notes on an older branch of my wkp which I have been using without issue for months and months. It just started giving me stuck notes under my new computer. I have been able to reduce latency from 256 to 64.... and now I'm getting stuck notes.
I guess the 64 blocksize puts greater demands on the system? So I'm a little concerned that there isn't a scripting solution?
I should also note that I am still using 1.1. I don't know if the script engine changed in 1.2, but obviously some things did, as I am having a lot of problems with my wkp. Also CPU has gone from 35% to 55%.
-e
Custom Ryzen 5900x MATX build, Win10, Fireface UFX, touchscreen
Custom 2 manual midi keyboard
Usine, Kontakt, Reaktor, Synthmaster, Byome, Arturia, Soundtoys, Unify
Custom 2 manual midi keyboard
Usine, Kontakt, Reaktor, Synthmaster, Byome, Arturia, Soundtoys, Unify
Yes, stuck notes are often a symptom of an overworked system. Look at blocksize. Also look to see if any midi devices are unnecessarily sending midi clock. Active sensing puts a lot of midi traffic on the bus, too.
Address the process rather than the outcome. Then, the outcome becomes more likely. - Fripp
A smaller blocksize gives your system less time to complete work. The CPU is thus working a much higher percentage of the time.
Increase blocksize gradually until you find a happy compromise between stability and performance.
Increase blocksize gradually until you find a happy compromise between stability and performance.
Address the process rather than the outcome. Then, the outcome becomes more likely. - Fripp
-
woodslanding
- Member
- Posts: 1327
- Contact:
Well, I'd be disappointed if audio could compute at 64, but midi can't! I'm running 5 instances of Kontakt and 5 of Reaktor without clicks in the audio.
MIDI is single bytes of information, Shouldn't it be like 1000th of the bandwidth of audio?
MIDI is single bytes of information, Shouldn't it be like 1000th of the bandwidth of audio?
Custom Ryzen 5900x MATX build, Win10, Fireface UFX, touchscreen
Custom 2 manual midi keyboard
Usine, Kontakt, Reaktor, Synthmaster, Byome, Arturia, Soundtoys, Unify
Custom 2 manual midi keyboard
Usine, Kontakt, Reaktor, Synthmaster, Byome, Arturia, Soundtoys, Unify
-
woodslanding
- Member
- Posts: 1327
- Contact:
Okay more tests:
I bypassed the script altogether and it still happens (oops!) So the whole subject of the post is a red herring.
I have midi coming in two separate interfaces. Babyface recieving on channel 1, and iConnect MIO on channel 2.
The stuck notes ONLY happen on channel 2.... BUT ONLY when I am playing channel 1 at the same time!!! I cannot get channel 2 notes to stick no matter how hard I try. I can bang the whole keyboard repeatedly with my forearm, and nothing sticks. But play a simple 8th note line on channel 2 along with a bass line on channel 1, and I get stuck notes every 5 seconds or so.
This is taking both channels directly into the vst from the input devices on the track with no processing. There is no CC data coming in whatsoever, just notes on two channels.
It would be sad if MIDI processing issues took away the latency gains I spent $1200 on a new computer specifically to get
I may try a different midi interface on ch2 and see if that helps.
I bypassed the script altogether and it still happens (oops!) So the whole subject of the post is a red herring.
I have midi coming in two separate interfaces. Babyface recieving on channel 1, and iConnect MIO on channel 2.
The stuck notes ONLY happen on channel 2.... BUT ONLY when I am playing channel 1 at the same time!!! I cannot get channel 2 notes to stick no matter how hard I try. I can bang the whole keyboard repeatedly with my forearm, and nothing sticks. But play a simple 8th note line on channel 2 along with a bass line on channel 1, and I get stuck notes every 5 seconds or so.
This is taking both channels directly into the vst from the input devices on the track with no processing. There is no CC data coming in whatsoever, just notes on two channels.
It would be sad if MIDI processing issues took away the latency gains I spent $1200 on a new computer specifically to get
I may try a different midi interface on ch2 and see if that helps.
Custom Ryzen 5900x MATX build, Win10, Fireface UFX, touchscreen
Custom 2 manual midi keyboard
Usine, Kontakt, Reaktor, Synthmaster, Byome, Arturia, Soundtoys, Unify
Custom 2 manual midi keyboard
Usine, Kontakt, Reaktor, Synthmaster, Byome, Arturia, Soundtoys, Unify
-
woodslanding
- Member
- Posts: 1327
- Contact:
I should note I am controlling one instance of Kontakt (there's a lot more in the wkp of course) running the Hammond B3 patch. I can run this kontakt patch all day standalone from these two interfaces without getting any stuck notes.
-e
-e
Custom Ryzen 5900x MATX build, Win10, Fireface UFX, touchscreen
Custom 2 manual midi keyboard
Usine, Kontakt, Reaktor, Synthmaster, Byome, Arturia, Soundtoys, Unify
Custom 2 manual midi keyboard
Usine, Kontakt, Reaktor, Synthmaster, Byome, Arturia, Soundtoys, Unify
maybe your interface?
"Every act of creation is first an act of destruction." -Picasso
One thing to try, and it may address both of your questions.
I am assuming both keyboards are visible as two different midi input devices/ports.
If you open the device panel, and double-click on one of your MIDI INPUT ports, you'll see a device patchlet that routes your input signal. You should see a "From MIDI Device" module connected to a "MIDI to Usine" module.
You can edit these device patchlets to suit your needs. Instead of sending the MIDI streams to "MIDI to Usine" you can create a MIDI bus for each keyboard. Downstream, use your newly created MIDI buses instead of your normal MIDI Inputs.
This way, your two keyboards have distinct paths & you can route the signals however you wish independently of each other. They are no longer mixed together.
*** If you bypass the "MIDI to Usine" module, HH's MIDI learn functions will not work. That is the tradeoff of this technique. *** Of course, MIDI learn functions within your VST will still work.
If performance improves & you get no more stuck notes, then create a bug report. There was a very old bug where the single merged Usine MIDI stream caused stuck notes. If using MIDI buses gets rid of your stuck notes, that old bug may have resurfaced.
I am assuming both keyboards are visible as two different midi input devices/ports.
If you open the device panel, and double-click on one of your MIDI INPUT ports, you'll see a device patchlet that routes your input signal. You should see a "From MIDI Device" module connected to a "MIDI to Usine" module.
You can edit these device patchlets to suit your needs. Instead of sending the MIDI streams to "MIDI to Usine" you can create a MIDI bus for each keyboard. Downstream, use your newly created MIDI buses instead of your normal MIDI Inputs.
This way, your two keyboards have distinct paths & you can route the signals however you wish independently of each other. They are no longer mixed together.
*** If you bypass the "MIDI to Usine" module, HH's MIDI learn functions will not work. That is the tradeoff of this technique. *** Of course, MIDI learn functions within your VST will still work.
If performance improves & you get no more stuck notes, then create a bug report. There was a very old bug where the single merged Usine MIDI stream caused stuck notes. If using MIDI buses gets rid of your stuck notes, that old bug may have resurfaced.
Address the process rather than the outcome. Then, the outcome becomes more likely. - Fripp
-
woodslanding
- Member
- Posts: 1327
- Contact:
Interesting, I will try that.
I hope it's not a bug, as I don't expect any bug fixes will be coming on the v1.1 tree. And since the midi busses introduce latency themselves it's not really viable as a workaround. But I'll try it.
Sadly, I cannot rebuild my wkp as fast as Olivier rebuilds usine.....
-e
I hope it's not a bug, as I don't expect any bug fixes will be coming on the v1.1 tree. And since the midi busses introduce latency themselves it's not really viable as a workaround. But I'll try it.
Sadly, I cannot rebuild my wkp as fast as Olivier rebuilds usine.....
-e
Custom Ryzen 5900x MATX build, Win10, Fireface UFX, touchscreen
Custom 2 manual midi keyboard
Usine, Kontakt, Reaktor, Synthmaster, Byome, Arturia, Soundtoys, Unify
Custom 2 manual midi keyboard
Usine, Kontakt, Reaktor, Synthmaster, Byome, Arturia, Soundtoys, Unify
I use MIDI buses all the time. The latency is not perceptible.
Latency is everywhere. It's a necessary evil.
Latency even exists in analog systems. IIRC, It takes sound ~3 ms to travel one meter. In most cases, the latency we're talking about is the equivalent of taking another step or two further away from your amp - pretty much imperceptible.
Don't be afraid to increase your blocksize. As Robert Fripp says: "Honor necessity."
Latency is everywhere. It's a necessary evil.
Latency even exists in analog systems. IIRC, It takes sound ~3 ms to travel one meter. In most cases, the latency we're talking about is the equivalent of taking another step or two further away from your amp - pretty much imperceptible.
Don't be afraid to increase your blocksize. As Robert Fripp says: "Honor necessity."
Address the process rather than the outcome. Then, the outcome becomes more likely. - Fripp
-
woodslanding
- Member
- Posts: 1327
- Contact:
Okay, that fixed it.
I guess I will just send keyboard 2 in on the buss. It pushes its latency up to 128, but that's better than stuck notes. And kbd1 can stay at 64.
I guess this was probably fixed in 1.2, but I'm not going to try to port to 1.2 with a looming 2.0 release.....
Thanks for the tip!!
-e
I guess I will just send keyboard 2 in on the buss. It pushes its latency up to 128, but that's better than stuck notes. And kbd1 can stay at 64.
I guess this was probably fixed in 1.2, but I'm not going to try to port to 1.2 with a looming 2.0 release.....
Thanks for the tip!!
-e
Custom Ryzen 5900x MATX build, Win10, Fireface UFX, touchscreen
Custom 2 manual midi keyboard
Usine, Kontakt, Reaktor, Synthmaster, Byome, Arturia, Soundtoys, Unify
Custom 2 manual midi keyboard
Usine, Kontakt, Reaktor, Synthmaster, Byome, Arturia, Soundtoys, Unify
-
woodslanding
- Member
- Posts: 1327
- Contact:
Oh, I guess I was getting 1.2 and 2.0 mixed up.
Mis-named my HH folders.
So yeah, 2.0 is not working well for me yet, but I'll go in and try to figure things out at some point.
Mis-named my HH folders.
So yeah, 2.0 is not working well for me yet, but I'll go in and try to figure things out at some point.
Custom Ryzen 5900x MATX build, Win10, Fireface UFX, touchscreen
Custom 2 manual midi keyboard
Usine, Kontakt, Reaktor, Synthmaster, Byome, Arturia, Soundtoys, Unify
Custom 2 manual midi keyboard
Usine, Kontakt, Reaktor, Synthmaster, Byome, Arturia, Soundtoys, Unify
Who is online
Users browsing this forum: No registered users and 10 guests
