Midi Learn: Relative - with M-audio Axiom
Hi,
I'm just learning to change the mode of the rotary encoders on my m-audio axiom 61 to increment/decrement mode.
I can't get them to work though, it seems Usine can't understand the inc/dec messages correctly.
Here's the link to the manual (this part is covered on page 19 of the PDF):
http://www.m-audio.com/images/global/ma ... G_EN01.pdf
I guess I could make a subpatch to correct this but am I missing something?
Any insights?
antwan
I'm just learning to change the mode of the rotary encoders on my m-audio axiom 61 to increment/decrement mode.
I can't get them to work though, it seems Usine can't understand the inc/dec messages correctly.
Here's the link to the manual (this part is covered on page 19 of the PDF):
http://www.m-audio.com/images/global/ma ... G_EN01.pdf
I guess I could make a subpatch to correct this but am I missing something?
Any insights?
antwan
Did you select relative in the Mode remote setup of Usine ?
(see P45 of the Usine Manuel)
(see P45 of the Usine Manuel)
Yes, the midi learn for the fader in question was on relative. What was happening (depending on the inc/dec setup on axiom) was that:
1) the fader was increasing when rotating the encoder either way
or
2) the fader was increasing when the encoder was rotating one way and nothing happened when it was rotated the other way.
antwan
1) the fader was increasing when rotating the encoder either way
or
2) the fader was increasing when the encoder was rotating one way and nothing happened when it was rotated the other way.
antwan
Strange, because I have also an AXIOM 61 and it works fine with Usine.
I'll take a look.
I'll take a look.
Olivier Sens
www.brainmodular.com
www.brainmodular.com
ok, now I remember.
If you assign a rotary controller as endless control (for example n°150) the axiom sends CC96 when it goes up and CC95 when down!!!!
Can you believe it? It's so stupid !
In usine it's impossible to assign an increase value to a CC and a decrease to another.
So use 'normal' control with CC values from 0 to 127.
PS:
personal opinion:
The axiom is the worst keyboard I've never had.
- totally non-ergonomic.
- the doc is a 'collector', in the category 'why make simple if can make it complex?'
- very limited compare to the behringer BCF2000 or Roland PCR serie
If you assign a rotary controller as endless control (for example n°150) the axiom sends CC96 when it goes up and CC95 when down!!!!
Can you believe it? It's so stupid !
In usine it's impossible to assign an increase value to a CC and a decrease to another.
So use 'normal' control with CC values from 0 to 127.
PS:
personal opinion:
The axiom is the worst keyboard I've never had.
- totally non-ergonomic.
- the doc is a 'collector', in the category 'why make simple if can make it complex?'
- very limited compare to the behringer BCF2000 or Roland PCR serie
Olivier Sens
www.brainmodular.com
www.brainmodular.com
Hi,
returning to this question. I made a script for myself which (together with some fancy "pass if has changed" -patching) works nicely with the endless rotary knobs of the axiom, controlling VSTs.
The only problem is that suddenly sometimes the script starts giving a continuous never-ending error message:
"Script Error: Out of Record Fields Range in 0"
I think it might be initiated by some other controllers on the axiom unrelated to the script.
It doesn't really stop the script from working but i am nontheless interested as to what this error message is about.
Here's the script:
For your information i have an endless rotary setup in Axiom that gives out a controller 96 for an increase and 97 for a decrease.
Thanks for any insights.
antwan
returning to this question. I made a script for myself which (together with some fancy "pass if has changed" -patching) works nicely with the endless rotary knobs of the axiom, controlling VSTs.
The only problem is that suddenly sometimes the script starts giving a continuous never-ending error message:
"Script Error: Out of Record Fields Range in 0"
I think it might be initiated by some other controllers on the axiom unrelated to the script.
It doesn't really stop the script from working but i am nontheless interested as to what this error message is about.
Here's the script:
For your information i have an endless rotary setup in Axiom that gives out a controller 96 for an increase and 97 for a decrease.
Code: Select all
//////////////////////////
// Receives endless rotary encoder data and turns it into a fader
// Also takes into account mouse-operated changes if fader is routed back into input
// Note: Change constants fad_min and fad_max for fader range
/////////////////////////
// parameters declaration
var input : Tparameter;
var fader : Array of Tparameter;
var first : integer;
var i : integer;
const num_ch = 8;
const fad_min = 0;
const fad_max = 1;
// initialisation : create parameters
procedure init;
begin
input := CreateParam('In',ptMidi);
first := CreateParam('First CC', ptdataFader);
SetArrayLength(fader, num_ch);
SetIsOutPut(Input,false);
SetIsOutPut(first,false);
SetMax(first, 127);
for i := 0 to (num_ch - 1) do begin
fader[i] := CreateParam('fader'+IntToStr(i+1), ptdataFader);
SetMin(fader[i], fad_min);
SetMax(fader[i], fad_max);
end;
end;
// Global variables
var j,
nbOfMidi,
active,
cc_first : integer;
var ReceivedMidi : TMidi;
var fader_val : Array of Single;
//////////////////////////////
// main proc
//////////////////////////////
begin
SetArrayLength(fader_val, num_ch);
nbOfMidi := GetLength(input); // get the number of incoming midi codes
if nbOfMidi > 0
then begin
for j := 0 to nbOfMidi-1
do begin
cc_first := trunc(GetValue(first));
GetMidiArrayValue(input, j, ReceivedMidi);
if (ReceivedMidi.msg = 176) and (ReceivedMidi.data2 >= cc_first) and (ReceivedMidi.data2 <= (cc_first + num_ch)) then begin
active := ReceivedMidi.data2 - cc_first;
if (ReceivedMidi.data1 = 96) and (GetValue(fader[active]) <> fad_max) then begin
fader_val[active] := (GetValue(fader[active]) + 0.01);
SetValue(fader[active], fader_val[active]);
end;
if (ReceivedMidi.data1 = 97) and (GetValue(fader[active]) <> fad_min) then begin
fader_val[active] := (GetValue(fader[active]) - 0.01);
SetValue(fader[active], fader_val[active]);
end;
end;
end;
end;
end.antwan
cool,
The add-on section is a good place for your script ??!!!
The add-on section is a good place for your script ??!!!
Olivier Sens
www.brainmodular.com
www.brainmodular.com
Nice script, and I agree that it belongs in the add-ons!
Can't say I understand why you get the error message, but I have a suggestion for a (small!) improvement CPU-wise: Put "cc_first := trunc(GetValue(first));" outside of the loop, or drop the first parameter alltogether and use a constant instead.
Can't say I understand why you get the error message, but I have a suggestion for a (small!) improvement CPU-wise: Put "cc_first := trunc(GetValue(first));" outside of the loop, or drop the first parameter alltogether and use a constant instead.
Bjørn S
Hi,
thanks for the suggestions - makes sense!
I'll make those improvements and prepare it for upload to the add-ons section.
The error message is really annoying though because it basically makes it impossible to use the trace window for anything else. I'll try and have another look today if I can give a specific moment when the error starts.
antwan
thanks for the suggestions - makes sense!
I'll make those improvements and prepare it for upload to the add-ons section.
The error message is really annoying though because it basically makes it impossible to use the trace window for anything else. I'll try and have another look today if I can give a specific moment when the error starts.
antwan
the error comes from the 'active' vaule
you have
and after
in that case you have to verify that active is >= 0 and <= 7.
add a test line like
you have
Code: Select all
active := ReceivedMidi.data2 - cc_first;Code: Select all
GetValue(fader[active])add a test line like
Code: Select all
active := ReceivedMidi.data2 - cc_first;
if (active>=0)
and (active<=7)
then begin
if (ReceivedMidi.data1 = 96)
and (GetValue(fader[active]) <> fad_max)
then begin
fader_val[active] := (GetValue(fader[active]) + 0.01);
SetValue(fader[active], fader_val[active]);
end;
if (ReceivedMidi.data1 = 97)
and (GetValue(fader[active]) <> fad_min)
then begin
fader_val[active] := (GetValue(fader[active]) - 0.01);
SetValue(fader[active], fader_val[active]);
end;
end
else writeln('error ACTIVE out of range');Olivier Sens
www.brainmodular.com
www.brainmodular.com
hi,
cheers! i'll give it a try in a couple of hours. thanks.
antony
cheers! i'll give it a try in a couple of hours. thanks.
antony
Hi,
I have now uploaded this package to the add-ons. Give it a try if you have endless encoders...
antwan
I have now uploaded this package to the add-ons. Give it a try if you have endless encoders...
antwan
Perfect!
By default, midi learn of Usine works fine with endless controllers, if you choose the learn mode "relative".
There is only a problem with the Axiom keyboard.
By default, midi learn of Usine works fine with endless controllers, if you choose the learn mode "relative".
There is only a problem with the Axiom keyboard.
Olivier Sens
www.brainmodular.com
www.brainmodular.com
Who is online
Users browsing this forum: No registered users and 16 guests
