MIDI Normalizerとは?仕組み・実装・活用法を徹底解説
MIDI Normalizer とは何か
MIDI Normalizer(以下、ノーマライザ)は、MIDIデータのダイナミクスやコントローラ値、ノート長、タイミングなどを一定の基準へ自動的に整形・統一するための処理やツール群を指します。オーディオにおける「ノーマライズ」が波形の振幅を最大限に引き上げる操作を指すのに対し、MIDIのノーマライズは値域のスケーリング、レンジ揃え、曲間やトラック間での表現の整合、あるいは演奏表現の補正を目的とします。具体的には、ベロシティ(0〜127)、コントロールチェンジ(CC)のレンジ、ピッチベンドの分解能、ノートの長さやタイミングの揃えなどが対象になります。
なぜ MIDI をノーマライズするのか
制作ワークフローにおいて、異なる録音ソースや打ち込み段階で得られたMIDIトラックは、ダイナミクスやコントローラのレンジがバラバラになりがちです。これを放置すると、同じシンセや音源に当てても楽曲全体で音量や表現が不均一になり、ミックスやアレンジ作業が煩雑になります。ノーマライザは以下のような問題解決に役立ちます。
- 複数トラック間での音の均一化(例:あるトラックだけベロシティが低い)
- シンセやサンプラー側の期待値に合わせた入力レンジの整備
- ライブMIDI入力のノイズや外れ値の除去
- 旧データの再利用やライブラリ化の前処理
技術的な対象と操作の種類
ノーマライザが操作する主要なMIDI要素は次の通りです。
- ベロシティ(note_on の velocity): 一般的に0〜127。note_on の velocity=0 は多くの実装で note_off と同等に扱われる点に注意する必要があります。
- ノート番号(ピッチ): トランスポーズやスケール制限。音域を超えるノートの処理(オクターブ調整や削除)など。
- ノート長/オフイベント: ノートオンとオフの時刻調整、重複ノートの削除。
- コントロールチェンジ(CC): モジュレーション、フィルターカットオフ、エクスプレッション等。0〜127の範囲を持つため、レンジ圧縮や伸張が可能。
- ピッチベンド: 分解能やセンターの補正。ピッチベンドのレンジ設定に合わせたスケーリング。
- Aftertouch/Polyphonic Aftertouch: 表現情報として正規化やスムージングの対象。
アルゴリズムと手法
ノーマライズには幾つかの代表的手法があります。用途に応じて使い分けることが重要です。
- 線形スケーリング(min-max): 現在の最小値と最大値を検出し、目標レンジへ線形変換する。シンプルで解釈しやすいが、外れ値に弱い。
- パーセンタイルスケーリング: 下位/上位のパーセンタイルを基準にして外れ値の影響を抑えつつスケーリングする。たとえば1パーセンタイルと99パーセンタイルを使用。
- 統計的正規化(z-score 等): 平均と標準偏差に基づき中心化とスケーリングを行う。データ分布が正規分布に近い場合に有効。
- ダイナミクス圧縮(コンプレッション): MIDIレベルで“圧縮”を行い、ダイナミックレンジを縮める。音量的な圧縮と同じ概念で、表現を制御できる。
- カーブマッピング(指数・対数・ガンマ補正): 人間の耳は対数的に音圧を感じるため、ベロシティ→音量変換の非線形性を補正するのに有効。例えば v' = 127*(v/127)^gamma のように変換する。
- 適応的ノーマライズ: 楽曲のセクションやテンポ、音色に応じて動的に補正を行う。機械学習を用いたアプローチも研究されています。
実装方法とツール選び
ノーマライザは実装環境によって手法が変わります。主に次の3つのカテゴリが考えられます。
- DAW内のMIDIエフェクト: 例として Ableton Live の Velocity デバイスや Logic の MIDI FX など。リアルタイム処理で簡単に適用できる反面、細かい統計処理やファイル一括処理は苦手な場合があります。
- スタンドアロン/バッチスクリプト: Python の mido や pretty_midi、miditoolkit などを使ってSMF(Standard MIDI File)を読み書きし、一括で正規化する方法。再現性が高く自動化に向きます。
- プラグイン/MIDI FX プログラミング: Max for Live、JSFX、他のスクリプト環境でカスタム処理を作る。ライブ演奏でのリアルタイム変換や複雑なルール実装が可能です。
簡単な実装例(概念的な擬似コード)
以下はベロシティを線形スケーリングする単純な処理の概念です。実際は使用ライブラリのAPIに合わせて書きます。
1) MIDIファイルを読み込み、すべての note_on メッセージの velocity を収集する。2) 最小値と最大値を計算する。3) 各ベロシティ v を目標レンジ [tmin, tmax] に線形写像する。4) ファイルを保存する。
ポイントは、velocity=0(note_off とみなされる場合)やパーカッション(General MIDIではチャンネル10)を除外するなどの前処理を入れることです。また、CCやピッチベンドも別処理が必要です。
実務でのベストプラクティス
現場でノーマライズを活用する際の注意点と推奨事項をまとめます。
- 目的を明確にする: ミックス用の音量揃えか、楽曲の表現補正か、ライブラリの統一化かで処理方針が変わります。
- 楽曲の文脈を尊重する: 完全にフラットなベロシティにしてしまうと人間味が失われるため、相対的なダイナミクスは残すべきです。
- 外れ値の処理: センサーやMIDI鍵盤の異常値は手動で確認するかパーセンタイルで除外する。
- 楽器の応答を理解する: 同じベロシティでもシンセやサンプラーによって音量感が大きく異なるため、目的の音源に合わせたカーブを選択する。
- バージョン管理とメタ情報: 元データは必ずバックアップし、ノーマライズ後にその旨をメタデータとして残す。
よくある誤解と落とし穴
ノーマライザを使う上で陥りやすい誤解を整理します。
- 「ベロシティ=音量」ではない: 多くの音源ではベロシティがフィルター、アタック、サンプルレイヤ選択など複数のパラメータに作用します。単純に音量だけを変えたい場合は、MIDIエクスプレッションやサウンド側のボリュームを調整した方が良いことがあります。
- リアルタイムとオフラインの差: ライブ入力で適用する処理はレイテンシや追従性を考慮する必要があり、オフライン処理のような大がかりな統計解析は難しいです。
- MIDI 2.0 の対応: 将来的には解像度や表現パラメータが増えるため、従来の127段階前提のアルゴリズムは改良が必要になる可能性があります。
MIDI 2.0 とノーマライザの未来
MIDI 2.0 は高解像度の表現やプロファイル機能を導入しており、ベロシティやコントローラの分解能が上がることで、ノーマライザのアプローチも変化します。より細かなスケーリングや補正が可能になる一方で、扱うデータ量や演算の複雑さが増します。将来的には、楽器毎のプロファイルに合わせて最適化されたノーマライズや、機械学習を使った楽曲文脈理解による自動調整が普及することが見込まれます。
具体的な応用例・ケーススタディ
いくつかの具体例を示します。
- ライブラリ化: 各MIDIループを共通のダイナミクス基準に揃えておくことで、異なるループを組み合わせた際の音量差を解消する。
- 古いデータのリミックス: 古いMIDIファイルをモダンな音源で再生する前にレンジ補正することで、想定外の激しいピークや極端な弱音を防ぐ。
- ライブパフォーマンス: ライブ入力のベロシティをリアルタイムで圧縮し、PAや会場の音響に合わせて安定した出力を得る。
まとめと実践的アドバイス
MIDI Normalizer は単なる数値変換以上の意味を持ち、楽曲表現、音源の特性、制作目的を考慮して設計する必要があります。実務ではまずデータの可視化(ベロシティ分布やCCのレンジ)を行い、外れ値処理→スケーリング→微調整のステップを踏むのが安全です。また、変更前後の比較を必ず聴覚的にチェックし、機械的な最適化が音楽的な意味合いを損なっていないかを確認してください。
エバープレイの中古レコード通販ショップ
エバープレイでは中古レコードのオンライン販売を行っております。
是非一度ご覧ください。

また、レコードの宅配買取も行っております。
ダンボールにレコードを詰めて宅配業者を待つだけで簡単にレコードが売れちゃいます。
是非ご利用ください。
https://everplay.jp/delivery
参考文献
- MIDI Association(公式サイト)
- MIDI Specifications(仕様ページ)
- mido — Pythonライブラリ ドキュメント
- pretty_midi — GitHub リポジトリ
- Ableton Live: Velocity デバイスの説明
- Sweetwater: What is MIDI Velocity?


