ルモーリン

DEQ2496をMIDIで制御したい

投稿:2023-04-12

相当昔からネットの動画を視聴しています。 動画の音量はバラバラで、一つ視聴する度に音量を調整するのが面倒です。 音量調整を全自動でやってくれる機器を探してDEQ2496に辿り着きました。 この中に音響の機能でコンプレッサーがあり、音量を正規化(平坦化?)するのに便利です。
BEHRINGER ( ベリンガー ) DEQ2496 送料無料 | サウンドハウス
一方で、商用の映像作品(映画など)は正確に音量調整されているから無調整で右から左に通して欲しい訳です。 DEQ2496には各種パラメタをメモリに保存しておき簡単操作で一括呼び出せます。 最近ではそれも億劫になりPC上のボタン1クリックで切替できるように挑戦しました。

DEQ2496にはMIDI入力がありチャンネル0にプログラムチェンジを送るとメモリを呼び出せます。 元々、手で操作できるよう、メモリ#1は正規化のパラメタ、メモリ#2はスルーのパラメタを保存してあります。 おまけでメモリ#0は初期値です。 PC~USB~MIDIインターフェース~MIDIケーブル~DEQ2496という風に接続しました。 あとはPCからシーケンスを送り込むだけです。 シーケンスはたった2バイト、0xC0 0x01で正規化、0xC0 0x02でスルーです。

【ご注意】 コードの中に「0x00c0」という表記があります。 Windows用なのでリトルエンディアンで記述してあり、MIDIインターフェースから0xc0 0x00の順で出力されます。

#!/usr/bin/env perl

use v5.26;
use utf8;
use warnings;
use strict;

use Encode::Argv;
use Encode::Locale;
use Getopt::Long;
use Win32API::MIDI;

use feature "say";
use open IO => ":utf8";

binmode STDOUT, ":encoding(console_out)";
binmode STDERR, ":encoding(console_out)";

$| = 1;

my %preset = (
	init => 0x00c0,	
	normalize => 0x01c0,	
	through => 0x02c0,	
);

my $preset;
GetOptions("preset=s" => \$preset);

die "プリセットを指定していない" if !defined $preset;
die "指定したプリセットがない" if !exists $preset{$preset};
say "プリセット $preset に切替";

my $midi = Win32API::MIDI->new();
my $midiOut = Win32API::MIDI::Out->new($midi->OutGetDevNum("UM-1"));
$midiOut->Open();
$midiOut->ShortMsg($preset{$preset});
$midiOut->Close();

起動する際にどちらのメモリを呼び出すか指定します。

perl deq2496.pl --preset normalize
(又は)
perl deq2496.pl --preset through

実行後に警告が表示されます。

perl deq2496.pl --preset normalize
プリセット normalize に切替
        (in cleanup) Goto undefined subroutine &AutoLoader::AUTOLOAD at C:/Perl64/perl/site/lib/Win32API/MIDI.pm line 117.