教育用アナログミキサーシミュレータを作る~製作編~ | 音響・映像・電気設備が好き

音響・映像・電気設備が好き

「ヒゲドライバー」「suguruka」というピコピコ・ミュージシャンが好きです。

教育用アナログミキサーシミュレータを作る~取説編~と対を成す、製作編です。情報過多になるので製作記事を別にしました。
 

こちらが本編!

 

 

 

BOOTH 教育用アナログミキサーシミュレータ Max Mixer ver 1.0.2 

 

 

 

GUIに関しては独立した記事にしてあります。

 

 

 

本記事での趣旨は、Cycling'74 Max8で仮想アナログミキサを作る、です。
但し、あまりに長くなる為、アプリケーション部分は割愛し、ミキサのDSP機能に焦点を絞ります。

 

取説編でも述べていますが、DSP(計算機能を持った音響調整機器)の設定にはアナログミキサの理解が必要不可欠です。数年前から何とかして仮想的にアナログミキサを再現できないか?と考えていました。そんな中出会ったMaxは非常に簡易的にDSPを扱え、外部ハードウェアを必要としないまさに理想のソフトウェアでした。

 

 

QSCのCoreシリーズのDSP設定画面。アナログミキサを知らない人にこれをゼロから設定しろ、は無理がある

 

 

YAMAHAのMTXシリーズの設定画面。ゼロからの設定ではないものの、こちらはアナログミキサがベースになっており、やはり必要なのはアナログミキサの知識である

 

 

 

QSCでのGUI。白紙のDSPを設計した後はGUIへの落とし込み作業があるがこれもまた実機の知識を必要とする。オペ(音響操作)を行ったことが無い人が操作パネルを作れるはずがない

 

 

趣味ですので特に期日を設けず、日頃からこつこつと作っていった仮想アナログミキサですが、ある時点で「これは行けそうだ」と目途が立ちました。

 

 

初期イメージ。すべての機能が担保できそうだと先が見えた瞬間

 

 

ここから、適当に各モジュールの製作作業に入りました。Maxはサンドボックス的に使う事も可能なので、思いついたら派生してそこから検証して・・・を繰り返しました。デバッグ環境はもはや自分にしか分からない壮絶な状態です。このデバッグ環境から、各部が独立して動くようにパッチをまとめて行きました。

 

 

デバッグ環境。こちらは自分以外では触れないので公開していません

 

 

各部と合わせながら調整していく

 

 

 

パーツ単位で試験し、パッチとして独立させる作業を行う

 

 

 

段々完成に近づく。横に並べた際にどう見えるか?などを詰めていく。調整が可能なパーツはプリセットのリコール(スナップショット)を行う為に「パラメータモードを有効」にし、ユニークな名称を付ける作業を行う

 

 

1モジュールとマスター部分を分ける事に至った

 

 

先が見えた段階で、パッチを整理し、実機のチャンネルストリップを模倣する形に落ち着きました。これが一番効率が良い事が分かった為です。車輪の再発明であることは自明ですが、最初からやってみる・やれることを確認してみたかったのです。

 

 

チャンネルストリップの決定。縦に完結しているのでモジュールの増設はたやすい

 

 

上記のチャンネルストリップを踏まえて作成したブロックダイアグラム

 

 

ここから、各モジュールの解説をして行きます。

 

 

2bit_audio_pad_26db

バーチャルパッド

 

YAMAHAに合わせてー26dBで最終決定しました。こちらはdB指定の為、live.gain~を使用しています。

 

 

8bit_40db_gain

仮想ゲインコントロール

 

Maxは内部処理がfloatな為、限界を意識することなく増幅が可能です。(float処理の天井はあるがそこまで持ち上げるのは一苦労です)

その為、ここで+40dBしても最後にレベルを落とせばPCMとして音で聴くことが可能です。リニアPCMでADしてfloatで処理を行い最終的にリニアPCMでDAを行うフローをここまで意識した事はありませんでした。(筆者のHNがリニアPCMなのですが!!)

 

 

highpass

100Hz HPF

 

HPFはEQに最初持たせていましたが、実機と同じブロックダイアグラムを徹底する際に切り離しました。コンプに入る前にローカットする必要があったからです。マルチバンドコンプならば、もしかしたら「EQ前にHPF」は必ずしも良い選択では無いかもしれません。これは今後のDSP設計に生かせる知見でした。

 

 

omx_comp

プリセットコンプレッサ

 

COMPはMaxのomx.compのプリセット5つをそのまま組み込んでいます。

0: Guitar
1: Bass
2: Vocal
3: Drums
4: Program Material
※4、混合素材に対するコンプ

このプリセットから変更するGUIを盛り込むのは大変な労力なのでプリセットの選択のみにしました。教育用ですので極端なコンプレッションを実感してもらう方が良いだろう、とも思いました。

 

 

2bit_audio_polarity

極性反転スイッチ

 

極性の反転を行います。製作しているミキサにフェーズスコープを搭載しているのでこれは必須と考えました。このスイッチに何の意味があるのだろう?と疑問に持つことが理解につながる事でしょう。

 

 

3band_eq

3BAND EQ

 

こちらのベースは下記リンクのパッチを参考にしています。

 

 

 

YAMAHAのEQを模倣するために、実機(YAMAHA MG10XU)での確認、SmaartによるMaxのEQの検証を行いました。

 

 

Smaartでの測定。完璧な仕上がり

 

 

測定結果からエクセルで表を作成、その後Illustratorで見栄えを調整した

 

 

どうしてもノミナルの位置で変化が出てしまう為、バイパススイッチを設ける事で解決しました。ただ、教育用が前提なのでバイパススイッチは起動時にはオフにする設計です。

 

 

2bit_audio_selector

オーディオセレクタ

 

PFL・AFLの機能も考えなくてはならなかった為、「貫通するスイッチ」を設けています。この貫通スイッチは直列で繋ぎ、「どれかひとつでもONだったら」の条件として使用しています。

 

 

preamp_pad

+6dBプリアンプ&-6dBパッド

 

ソフトウェアなので簡単に増減が可能で、モノラルトラックのステレオ送り用の+6dB、ステレオサミングの際のー6dBをひとつのオブジェクトにまとめました。入力モジュールではシグナルインジケータにレベルメータを転用するため使用しています。

 

 

20seg_meter

20セグメントメータ

 

こちらは以前から作成していた物が転用できました。もう手慣れたもので、0.1dB単位で確実に動作します。シグナル&ピークインジケータもこのモジュールを使用してます。トータルの処理が重くなるようならメータを省こうとも思いましたが、デバックの際に目視確認ができた方が楽だった為、多用しています。

 

 

8bit_10db_fader

8bit諧調 10dBフェーダ

 

こちらもソフトウェアなのでこのフェーダ単体で10dBの「増幅」が可能になっています。Maxでlive.gain~を使うか、gain~を使うか迷うかと思いますが単体で+10dBまでの増幅を考えると、gain~しか選択肢はありません。

 

gain~・・・0-157での指定。dBスケールでは調整不可。-76.2~+10dBFSまで調整可能。

live.gain~・・・dBスケールで指定が可能。-70.6~+6dBFSまで調整可能。

 

 

フェーダカーブはlogを採用。0-145までのスケールを変換してlogにしている為、そこまで細かな調整は出来ない

 

expr sqrt($f1)

 

または

 

scale 0. 255. 0. 255. 1. @classic 0 0.5

 

どちらでもlogカーブの動作をします。

 

 

8bit_panning

パンポット

 

PANカーブはfixerさんの
ProTools パンポットのカーブ

 


および、Abelton Live9のPANカーブを参考にし、交点で0dB、振りきりで+3dB、立ち上がりはー50dBくらいを目安にカーブを設定しています。

 

 

他参考リンク:

Panpot by Goodhertz

 

 

 

パンポットのみ検証用パッチを作成した

 

 

デバッグ動作。カーブの算出が非常に難しかった。理論先行の数学的なアプローチは捨て、実際のカーブを見ながら決めていく方式を採用した。結果は良好で納得のいくカーブを得ることが出来た

※Maxはこのような測定ツールを内部で作成する事が出来るのも特徴です

 

 

どちらかに振り切るときに+3dBされる。電気信号の道理としては片側に電圧が寄るのだから+6dBしなければ結果的な等価にはならないが、最終的にスピーカから音が出る事を想定しているのがパンニングな為、+3dBが採用されているようだ

※機器内の電圧を扱う場合は20log10、スピーカから出る音量を扱う場合は10log10で、2倍は前者が6dB、後者が3dBとなる

 

 

8bit_10db_send

センドフェーダ

 

こちらもlogカーブを採用しました。加算された分の補正でー6dBしています。

 

 

8bit_10db_hp

ヘッドフォン専用ボリューム

 

こちらはステレオで行う必要があったため、ヘッドフォン出力だけは別パッチ化を行いました。

 

 

2ch_recorder

2chレコーダ

 

録音はsfrecorder~オブジェクトの機能を乗せており、各フォーマットでの録音が可能です。

FORMAT
int8: 8-bit integer
int16: 16-bit integer
int24: 24-bit integer
int32: 32-bit integer
float32: 32-bit floating-point
float64: 64-bit floating-point
mulaw: 8-bit "mu"-law encoding
alaw: 8-bit a-law encoding

 

ここでfloatが選択できるのが良いですね。手軽にfloat録音が体験できるかと思います。

マシンの時間でファイル名を生成するのは以前も作ったことがあるのでそれを転用しています。

 

 

チャンネルストリップのバス

 

 

これらをmc.オブジェクトで各チャンネルが単独で機能するようにまとめ、コピペで横に並べて行きます。正確に重なるようにガイドを設ける、ミキサへの入力信号はオブジェクトを大きくし簡単につなげられるようにする等の工夫をしています。元のパッチファイルも、.exe化したファイルも「esc」キーでプレゼンテーションモードから抜けられますので、興味がある方は是非内部を見てください。

 

以上は入力フェーダの話で、アプリケーションに関わる部分でも紹介したいことがあるのですが、冒頭の予告の通り、とりあえずここまでにします。

ウィンドウのフローの仕方や、ステムプレーヤのウィンドウサイズ変更、アイコンの作成の仕方、パッチの0座標指定、フェーダのチャンネルネームの変更と連動・・・など上げるとキリがありませんが、今回は取り上げません。(要望があれば製作編2で解説します)

 

 

アイコンの作成

 

 

ロゴの作成

 

 

宣伝イメージ

 

 

「Maxでこのくらいは作れる」それが伝わると嬉しいです。