MATLAB ユーザーコミュニティー

MATLAB & Simulink ユーザーコミュニティー向け日本語ブログ

リアルタイム・オーディオ信号処理開発を加速 ~VST プラグインのプロトタイピングから検証までを MATLAB で ~

今回は MathWorks Japan で信号処理といえば!の竹本がお送りします。


はじめに

こんにちは。アプリケーションエンジニアの竹本です。信号処理関連のプロダクトを担当しています。趣味は音楽。仕事の息抜きに、MATLAB で平均律と純正律の音を聴き比べたり(Math and Music)、ビートルズの音源の周波数特性を眺めたり(beatles)しています。信号処理と音楽との親和性は高く、信号処理を専門とするエンジニアや研究者、それを志す学生さんには、音楽に一家言お持ちの方も少なくありません。

このブログにご登場の岩村様(X: leftbank)は、SNS 等で ”MATLAB とオーディオ”に関する発言や記事を積極的に発信されており(岩村様の記事)、その深く、時にマニアックな MATLAB の応用例を拝見するにつけ、かねてより一度お話をお聞きしたいと思っていたところ、今回はれてインタビューを行うことができました(ここでご紹介する内容は、この記事の内容をベースにしています)。

この記事のハイライト

  • MATLABなら、簡単に音響エフェクト機能を設計・検証し、さらにDAW で利用可能
  • MATLABがオーディオ信号処理に向いている理由
  • Simulinkは、思いついたアイデアをすぐ試せる、思考の止まらない開発環境

インタビュー

ご業務について教えてください。

2020年秋に AudiiSion Sound Lab.(オーディージョン・サウンド・ラボ)という会社を共同設立し、主にイヤホン・ヘッドフォン独特の狭い音場、「頭内定位」を解消して自然なリスニング体験を提供する独自の信号処理技術、“AudiiSion EP” の技術提供を行っています。私は、技術開発に関する全ての業務、デモ曲作り等を担当しています。

AudiiSion EP の開発に関しては、アルゴリズム開発、GUI アプリ・VST 開発、評価・テストまで、全ての過程で MATLAB/Simulink を活用しました。AudiiSion EP の詳細はこちらをご覧ください。最近、小型ステレオ・スピーカーひとつで広い音場を再現する AudiiSion SP もリリースしました。

現在、仕事の方は各プラットフォーム向けのインプリ・最適化等なのではほぼ C/C++ を使っており、趣味として MATLAB Home を使って note 記事を書いたりしています。プログラマーというわけではないので、C++ とかを使っていると、ハッキリ言ってストレスを感じることも多いです。MATLAB で遊ぶことによってストレスを発散している感じですかね。ほぼ毎日 MATLAB はさわっています。

 

VST というと、エレキギター専用のソフトウェアエフェクターのイメージがありますが、あらためてVST とはどの様なものかご説明いただけますか?

VST(Virtual Studio Technology)とは、スタインバーグ社(現ヤマハ傘下)が DAW(Digital Audio Workstation)用に開発したオーディオプラグイン規格です。MATLAB/Simulink は Audio Toolbox で VST プラグインの読み込み・生成に対応しています。VST インストゥルメント (VSTi) と VST エフェクトがあり、MATLAB で開発できるのは、狭義の VST であるエフェクトの方です。

共通規格ですので、各社 DAW や対応音楽プレイヤーなどに組み込んで、リアルタイムのエフェクターとして使うことができます。単体動作も可能です。以下の動画は、今流行の Lo-Fi 志向向け、「デジタル信号処理で音を壊す」系のエフェクターを MATLAB で作ってみたものです。仕事とは全く関係ない趣味ですね。

MATLAB ではこのように、リアルタイム動作する GUI 付きのオーディオ信号処理アプリでもある VST プラグインが簡単に作れます。ネイティブ・アプリですので、MATLAB 不要で高速動作します。プロライセンスにしかない ”MATLAB Compiler” “MATLAB Coder” が不要なので、Home ライセンスでも利用することができます

こちらも仕事とは関係なく作ったVSTですが、「ダッキング」処理と言われるもので、ナレーションに合わせて自動でBGM音量をスムーズに上げ下げします。以下の動画は、Simulinkに組み込んで動かしている例です。

BGM とナレーションをそれぞれステレオ2チャンネルで入力しています。

今のところ AudioTestBench は複数デバイス/ストリームには未対応です。しかしこのように Simulink に組み込めば、複数の音声ファイルをまとめてマルチチャネル入出力として動作検証が可能です。

実はこれ、信号処理部を私は一行も書いていません。Audio Toolbox にはあらかじめ、VST プラグイン生成対応の関数がいくつか含まれています。例えばコンプレッサー VST プラグインは、以下の 3 行で生成できます。

>> Comp = compressor;

>> createAudioPluginClass(Comp,’Comp_VST’);

>> generateAudioPlugin Comp_VST

 

ダッキング VST は、このコンプレッサー/リミッターをそのまま組み込んで使っています。サイドチェインという VST の機能を使うと、ナレーションと BGM を合わせて入力することによって、ナレーションでコンプレッサーのゲイン計算を行わせ、その結果を BGM の音量に反映させることができます。

単体の VST 生成もできますし、このように MATLAB/Simulink に組み込んで使うこともできます。この動画は、同じVSTを DAW に組み込んで動作させている例です(ちなみにこのナレーションは、某大河ドラマが始まる2年ほど前から使っています)。

詳しいご説明ありがとうございます。VST が、”リアルタイム動作する GUI 付きのオーディオ信号処理アプリ” であることをふまえると、音楽だけでなく、様々な音声・音響処理にも活用できそうですね。そもそも岩村様が MATLAB を知ったきっかけは何だったのでしょうか?

気がついたら使っていたので定かではないのですが・・、それまで大型コンピューター上に先輩達が FORTRAN で書いたフィルター設計ツールがありましたが、大型コンピューター自体が廃止になり、その代わりとして使い始めた(1995年頃?)ような気がします。なにかと余裕があった時代なので、使いたいツールとかは申請すればほぼ通りました。

本格的に使い始めたのは、C 原理主義の上司と戦いながら画像認識グループで Simulink を導入し始めた 2003 年辺りからだと思います。2005 年には、研究室全体で MATLAB/Simulink 勉強会を行いました。それまでは、IPL/IPP(インテル純正の高速ライブラリ)や OpenCV を使っていました。一部、S-function ブロックでそれらを呼び出して使ってもいました。当時の S-function ブロックは、使うのにちょっと苦労した覚えがあります。

 

C 原理主義の上司との戦いについては、また別の機会に詳細を是非お聞かせいただきたいところですが、次の質問にうつります(笑)。岩村様が、MATLAB を活用されている理由を教えてください。

MATLAB は圧縮フォーマットを含むマルチメディア・ファイルの入出力が標準で可能です。一部の機能をライブラリ化することで、処理速度を大幅に向上させることもできます。

また、MATLAB は長年にわたって使われ続けているだけでなく、年に 2 回のメジャーアップデートと適宜行われるマイナーアップデートによって常に最新の状態に保たれています。そのため、将来的にも信頼性が高いと感じています。論文等でも MATLAB スクリプトが載っていることが多いですね。インストールも非常に簡単で、OSS 系にありがちな、一部のアップデートで全体が動かなくなるといった問題もほとんどありません。

さらに、MATLAB は他の開発環境に比べて、日本語の公式ドキュメントやチュートリアルも大変充実しています。特に、原文を参照することなく意味の分かる日本語として読めるのは、他の開発環境ではなかなかないことだと思います。また、ユーザーコミュニティも非常に活発で、親切な人が多いのも魅力の一つです。そして、たとえばパンを変えるような簡単な処理であれば、慣れてくれば 30 分程度で VST プラグインを作成することも可能です。

最も単純な例として、音量を変えるだけのプラグインであれば、自分で書く必要があるのは数行です。

 

各プラグイン(VST2/3、AUv2/3、スタンドアローン)の生成は 1 行で行えます。プラットフォーム依存ですので、Mac では AUv2/3 生成になります。これほどの柔軟性と使いやすさを兼ね備えたツールは他にはないと思っています。

 

ありがとうございます。Simulink も併せて使われていらっしゃいますが、音響解析・設計に、Simulink を使用する利点は何でしょうか?

Simulink は機能ブロックをつなぐだけでシステムを構築できるため、思いついたアイデアをすぐに試すことができます。これにより、思考が止まらず、アイデアを膨らますことができます。この「思考が止まらない」というのは、特に新しいアルゴリズムなどを考える場合において大変重要だと思っています。

また、中程度の処理であればリアルタイム動作が可能です。簡単な GUI もコンポーネントを置くだけでできます。これにより、実際に音を確認しながら調整を行うことができます。さらに、Simulink ではブロックの入れ替えや並列化が瞬時に行えるため、異なる設定を比較して聞き比べることも簡単にできます。これも、他のプログラミング言語では簡単ではありません。

プログラミングが不要なグラフィカル・デバッグも Simulink の大きな魅力です。任意のポイントで、波形やスペクトルを確認しながら視覚的にデバッグができるため、問題の発見と解決がスムーズです。加えて、多少の制限はありますが Simulink ではステップ動作や逆転動作もサポートされており、細かい動作の確認が容易に行えます。

 

 

“アイデアをすぐ試す”, “思考が止まらない”という点、我々 MathWorks 社員も常々お客様にお伝えしている重要なポイントで、まさにそれを実感されているということで、すばらしいと思います。ブロックの入れ替え異なる設定による信号の差異を聴き比べるのが容易である点も、とても参考になります。それでは逆に、MATLAB の問題点、改善点等あれば教えてください。

VST に関する要望に絞ると・・

一番不便に感じるのは、グラフ描画ができないことです。VST で、波形やスペクトルを表示したいという要望は多いと思います。市販の VST と組み合わせればできないことはないですが、それだと利便性が損なわれてしまうので、ぜひ対応して欲しいところです。

それと、タイム関数や Web アクセス関数等のシステムコールが使用できないため、これらを使った使用期間制限やユーザー認証などの処理が行えません。それらを使いたい場合は、結局 JUCE 等他の開発環境を使うことになります。ファイルの読み込みができない点も不便ですし、GUI のカスタマイズにも制限があります。具体的には、背景画像など一部の画像は貼り付け可能ですが、描画自体はできないためカスタマイズの自由度が限られています。

プログラム内からGUIを操作することができないのも、GUIコンポーネント間の連携が取れず不便に感じます。MATLAB 動作では動くのですが、VST 動作では動きません。このように、MATLAB 動作と VST 動作ではいくつかの相違点があるため、デバッグに苦労する場合もあります。また、GUI コンポーネントの種類も限られています。テキストボックスくらいは欲しいですね。

さらに、MIDI によるパラメータ操作も未対応です。audioTestBench 上でのデバッグ時には可能ですが、VST 単体では対応していないため、外部MIDI コントローラーを繋いでのデモ等ができません。もちろん DAW に組み込んでのオートメーション等は可能ですが、個人的にはバーチャル I/O を使ってスタンドアローンで使う場合が多いので。

さらに付け加えるとすると、VSTi には対応していない点ですかね。コミュニティとかを見ていると「楽器を作ってみたい」というユーザーは多いように感じるので、対応されるとさらに良いとは思います。

あと、先ほど「日本語の公式ドキュメントが充実している」と言いましたが、ユーザー数の関係なのか、実はオーディオ関連はまだほとんど日本語化されていません。ぜひもっと多くの人に使っていただいて、ドキュメントに限らず要望を上げて欲しいですね。ユーザーが増えれば、機能アップの優先度も上がるのではないでしょうか。

 

非常に参考になるご意見・ご指摘ありがとうございます。機能改善要望については、開発チームへフィードバックしたいと思います。改善点でも挙げられていた、Audio Test Bench アプリ(オーディオアルゴリズムを検証するための GUI 環境)については、印象はいかがでしょうか?

入力はオーディオファイルやオーディオデバイスの他に各種 SG も用意されており詳細設定もできます。最近頻繁にアップデートされており、メニューも含めかなり使いやすくなった感はあります。ただ、タイムスコープやスペアナ表示も可能ですが動作が重いので、その場合は通常の Simulink を使った方が良いかとは思います。

AudioTestBench は MATLAB/Simulink 同様 MIDI も対応しているので、有線/無線での MIDI control も可能です。(AudioTestBench 上で、VST のフィルターパラメータをスマホからワイヤレス操作している例

 

GUI パラメータを 100~200 くらい使うこともあるのですが、それらをパラメータファイルから読み出して設定し、ファイルを一つ二つ処理するのにも便利です。AudioTest Bench 上でパラメータを適用するスクリプトを書く必要はありますが。

編集パラメータが多いと、PC のスライダーアイコンで一つずつちまちま設定するのは大変なのでそういう時は外付けの MIDI コントローラー便利ですよね。Simulink データインスペクターについても、記事の中で言及されていましたが、どの様な場面で有効ですか?

実行毎に自動でログが取られるので、パラメータを変えた場合と比較することなどができます。色やタイトルなどは、あとからこの画面で自由に編集できますし、あちこちにScopeブロックを置くのに比べて使いやすく、大変見やすくなっています。

油断すると、“あちこちにScopeブロックを置く” ということをいまだにやってしまう身としては、耳がいたい話です。さて、今回はプラグイン生成に関するお話がメインでしたが、その他の用途に関してはいかがでしょうか?

開発過程としては、Simulink → AppDesigner → VST → C/C++、とする場合が多いです。なにかちょっと確認するのに LiveEditor もよく使います。組み込み系など、VST プラグイン自体が目的でない場合もあり、実際はその方が多いです。その場合も、実際の音を聴いて効果・音質の評価を行ってアルゴリズムやパラメータを決定するのに VST は役立ちます。また、元を MATLAB で作っておけば融通が利きますし、アルゴリズム検証~インプリ~テストデータ作成・検証まで効率的に行えます。

AppDesigner であればグラフ描画等もできるので、それほど高速動作が必要なければ AppDesigner の方が機能が豊富で便利ではあります。この辺り、必要に応じてスムーズにツール間を行ったり来たりできるのも MATLAB の大きな利点ですね。別のことをやるのに別のプラットフォームが必要となると、特に初期の開発コストが負担になります。

あっ、さきほどの要望のところでひとつ言い忘れていました。MATLAB Online、下手に古い PC で実行するより速かったりもするのでもっと使っていきたいところなのですが、残念ながらオーディオ I/O とかが使えません。WebAudio とかに対応していただけると嬉しいですね。それと、最近、MATLAB Online / Mobile で、10 個の基本製品が無料で(* 毎月 20 時間まで。参照:MATLAB Online のバージョン)使えるようになりとても便利になりましたが、これらをライセンス保有している MathWorks アカウントでも同様に使えるようにしていただけると・・。

 

長丁場のインタビューとなりお疲れ様でした。質問としてはこれが最後になります岩村様は、他にも様々な記事をお書きになっていますが、おすすめのものがあれば教えてください。

一番アクセス数が多いのはこの記事です。

MATLABでHRTF~頭部伝達関数とは?~聴覚の仕組みは解明されていない~

みなさん、そんなに HRTF にご興味あるんですかね??聴覚に関してはまだまだ分かっていない部分も多いのですが、その辺り、前半はオーディオ技術者でなくても読めるように書いたつもりですので、ご興味のある方はご覧ください。

それと、最近アクセスが増えているのがこの記事です。

折り返し雑音とは?~なぜ車のホイールは逆回転するのか~デジタルはアナログの近似ではない

誰もが見たことがあるであろう現象を理論的に説明しています。デジタル信号処理を理解するには数学的知識が不可欠なためいつも説明に苦労するのですが、こちらも前半はライトに読めるよう書いたつもりですのでぜひ。

 

最後に何かひとことありますか?

MATLAB で VST プラグイン開発をする解説書を電子書籍で出しています。Kindle Unlimited であれば無料で読めますし、アップデート差分 PDFを無料配布しています。スクリプトはどなたでもダウンロード可能です。

2024 年版 Amazon Kindle 電子書籍「MATLAB で簡単オーディオ プラグイン開発 ~ 差分を pdf 配布

内容的には note 記事をベースにしていますが、一貫性とストーリー性を持たせ、原理的説明や記事では省略した部分など多くの加筆を行っています。基礎理論も知りたい方、通して読みたい方にはオススメです。VST 関連の日本語の情報は少ないと思いますので、その点でもお役に立てればと思います。

まとめ

岩村様、お忙しいところ、インタビューにお付き合いいただき、ありがとうございました。岩村様の、対する知見の広さと深さ、MATLAB というツールを通して、新たなアイデアを具現化していくたたずまいを目の当たりにし、信号処理プロダクトの担当者としても、いち音楽ファンとしても、身の引き締まる時間となりました本当は、音楽や楽器の話、ご趣味の写真のお話など、ご紹介したいトピックはまだまだたくさんあるのですが、それはまたの機会ということで。岩村様の note のページでは、音、VSTMATLAB、写真等に関する膨大な情報公開されていますので、是非そちらもご覧になってはいかがでしょうか?

|
  • print

Comments

To leave a comment, please click here to sign in to your MathWorks Account or create a new one.