mirror of
https://gitlab.com/xonotic/xonotic
synced 2025-03-04 18:37:34 +00:00
midichannels.pl: fix program or control change on more than one channel
The previous code emitted only a MIDI event for the first channel - but we need one for all.
This commit is contained in:
parent
2a99f526b5
commit
8bd4153e3a
@ -118,11 +118,11 @@ while(<STDIN>)
|
|||||||
{
|
{
|
||||||
my $tracks = $opus->tracks_r();
|
my $tracks = $opus->tracks_r();
|
||||||
my ($track, $channel, $program) = @arg;
|
my ($track, $channel, $program) = @arg;
|
||||||
for(($track eq '*') ? (0..@$tracks-1) : $track)
|
for my $t(($track eq '*') ? (0..@$tracks-1) : $track)
|
||||||
{
|
{
|
||||||
my @events = ();
|
my @events = ();
|
||||||
my $added = 0;
|
my %added = ();
|
||||||
for(abstime $tracks->[$_]->events())
|
for(abstime $tracks->[$t]->events())
|
||||||
{
|
{
|
||||||
my $p = $chanpos{$_->[0]};
|
my $p = $chanpos{$_->[0]};
|
||||||
if(defined $p)
|
if(defined $p)
|
||||||
@ -132,28 +132,28 @@ while(<STDIN>)
|
|||||||
{
|
{
|
||||||
next
|
next
|
||||||
if $_->[0] eq 'patch_change';
|
if $_->[0] eq 'patch_change';
|
||||||
if(!$added)
|
if(!$added{$t}{$c})
|
||||||
{
|
{
|
||||||
push @events, ['patch_change', $_->[1], $c-1, $program-1]
|
push @events, ['patch_change', $_->[1], $c-1, $program-1]
|
||||||
if $program;
|
if $program;
|
||||||
$added = 1;
|
$added{$t}{$c} = 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
push @events, $_;
|
push @events, $_;
|
||||||
}
|
}
|
||||||
$tracks->[$_]->events_r([reltime @events]);
|
$tracks->[$t]->events_r([reltime @events]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
elsif($cmd eq 'control')
|
elsif($cmd eq 'control')
|
||||||
{
|
{
|
||||||
my $tracks = $opus->tracks_r();
|
my $tracks = $opus->tracks_r();
|
||||||
my ($track, $channel, $control, $value) = @arg;
|
my ($track, $channel, $control, $value) = @arg;
|
||||||
for(($track eq '*') ? (0..@$tracks-1) : $track)
|
for my $t(($track eq '*') ? (0..@$tracks-1) : $track)
|
||||||
{
|
{
|
||||||
my @events = ();
|
my @events = ();
|
||||||
my $added = 0;
|
my %added = ();
|
||||||
for(abstime $tracks->[$_]->events())
|
for(abstime $tracks->[$t]->events())
|
||||||
{
|
{
|
||||||
my $p = $chanpos{$_->[0]};
|
my $p = $chanpos{$_->[0]};
|
||||||
if(defined $p)
|
if(defined $p)
|
||||||
@ -163,17 +163,17 @@ while(<STDIN>)
|
|||||||
{
|
{
|
||||||
next
|
next
|
||||||
if $_->[0] eq 'control_change' && $_->[3] == $control;
|
if $_->[0] eq 'control_change' && $_->[3] == $control;
|
||||||
if(!$added)
|
if(!$added{$t}{$c})
|
||||||
{
|
{
|
||||||
push @events, ['control_change', $_->[1], $c-1, $control, $value]
|
push @events, ['control_change', $_->[1], $c-1, $control, $value]
|
||||||
if $value ne '';
|
if $value ne '';
|
||||||
$added = 1;
|
$added{$t}{$c} = 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
push @events, $_;
|
push @events, $_;
|
||||||
}
|
}
|
||||||
$tracks->[$_]->events_r([reltime @events]);
|
$tracks->[$t]->events_r([reltime @events]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
elsif($cmd eq 'transpose')
|
elsif($cmd eq 'transpose')
|
||||||
|
Loading…
Reference in New Issue
Block a user