#!/usr/bin/env perl
my
$input_names
=
shift
||
'keyboard,pad,joystick'
;
my
$output_name
=
shift
||
'usb'
;
my
%filters
= (
1
=> {
port
=>
'pad'
,
type
=>
'breathe'
,
time_step
=> 0.25,
},
22
=> {
port
=>
'joystick'
,
type
=>
'ramp'
,
time_step
=> 0.5,
range_bottom
=> 0,
range_top
=> 40,
},
);
my
$inputs
= [
split
/,/,
$input_names
];
my
$control
= MIDI::RtController->new(
input
=>
$inputs
->[0],
output
=>
$output_name
,
verbose
=> 1,
);
my
%controllers
;
$controllers
{
$inputs
->[0] } =
$control
;
for
my
$name
(
@$inputs
[1 ..
$#$inputs
]) {
$controllers
{
$name
} = MIDI::RtController->new(
input
=>
$name
,
loop
=>
$control
->loop,
midi_out
=>
$control
->midi_out,
verbose
=> 1,
);
}
for
my
$cc
(
keys
%filters
) {
my
%params
=
$filters
{
$cc
}->%*;
my
$port
=
delete
$params
{port};
my
$type
=
delete
$params
{type};
my
$filter
= MIDI::RtController::Filter::CC->new(
rtc
=>
$controllers
{
$port
});
$filter
->control(
$cc
);
for
my
$param
(
keys
%params
) {
$filter
->
$param
(
$params
{
$param
});
}
my
$method
=
"curry::$type"
;
$controllers
{
$port
}->add_filter(
$type
, [
'all'
],
$filter
->
$method
);
}
$control
->run;