MATLABでAudio Plugin開発～スーパーMATLABミュージシャンに俺はなる～

# はじめに
こんにちは！MATLAB AmbassadorのKMと申します！

先日開催されたMATLAB EXPOのLightning Talkにて発表をさせていただきました！タイトルは

**MATLABでAudio Plugin開発　～スーパーMATLABミュージシャンに俺はなる～**

でした．こんなにふざけちゃってよかったんでしょうか？（笑）

内容はMATLABのAudio Toolboxを用いたオーディオプラグイン開発事例の紹介です．この記事では，当日の話をところどころ補足しながら，発表の内容をまとめます．

# きっかけ
「スーパーMATLABミュージシャン」という名前は，大学の先生から頂きました．というのも，授業の質問ついでに「いつもTwitter見てます！」と連絡したら，こんな返信を頂いたんですよね．
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2612115/85449605-5c39-f450-6c68-f672e2ddf153.png)
「スーパーMATLABミュージシャンって何？🤔」と内心思いつつも，

**「俺がスーパーMATLABミュージシャンになってやる🔥」**

という気持ちがこみ上げてきました（嘘です）．
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2612115/9c614336-a6b6-ec45-7fc9-1687e567624c.png)

ちなみにですが，私は矢田部先生のこちらのツイートのおかげでMATLABに出会いました．なんとも感慨深いですね．
<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">「４月だけど大学始まらないし何か勉強したいけど何しよう」って思ってる理系の皆さん，MATLABをやるのはいかがでしょう？<br>学部１年必修のプログラミングや線形代数の勉強になるだけでなく，２年生以降の専門科目に関連した内容を最も手っ取り早く試せるツールなのでオススメです！</p>&mdash; 矢田部浩平 (@yatabe_) <a href="https://twitter.com/yatabe_/status/1245694640059080704?ref_src=twsrc%5Etfw">April 2, 2020</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

# MATLAB×ミュージシャン？
そんなこんなで，私は「スーパーMATLABミュージシャンになる」という使命を負ってしまったわけです．しかし，当然以下の疑問が生じます

**そもそもMATLABとミュージシャンって，何か関係あるの？**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2612115/76b638c4-ac3d-781d-c0d0-9265d979760c.png)

でも大丈夫！Audio Toolboxとオーディオプラグインが私の味方です．

# オーディオプラグイン とは
タイトルにもあるオーディオプラグインですが，もしかしたらあまり馴染みのない言葉かもしれません．

オーディオプラグインは**音楽制作などに用いられるプラグイン**です．DAW（音楽制作のためのソフトウェア）にプラグインを追加することで，さまざまな音源やエフェクタが利用可能になります．音源としては，シンセサイザやピアノ，オーケストラ音源などがあげられ，エフェクタとしては残響音を追加するリバーブや音を整えるイコライザ，コンプレッサ，リミッターなどがあげられます．

要するに，**オーディオプラグインは音の幅を広げてくれる**わけです．

# オーディオプラグイン開発
もしもオーディオプラグインを自分で作れたら，音作りの幅はさらに広がります．では，オーディオプラグインはどうやって作ればよいのでしょうか？

オーディオプラグインにはVSTと呼ばれる規格が存在しています．したがって，オーディオプラグインを作るには，VSTの仕様に合わせてC++でプログラムを書く必要があります．

# generateAudioPlugin

ではC++を書かねばならないのか？というと，そんなことはありません．実は，MATLABのAudio Toolboxには**generateAudioPlugin**という関数が存在します．

名前の通りの関数で，**MATLABで作成したオーディオプラグインのクラスファイルから，VSTプラグインを生成できる優れもの**です．

AudioToolbox，すごすぎる......
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2612115/6cb2d848-469e-6e46-655e-923e57ef3399.png)

# オーディオプラグイン作ってみた！
というわけで，私もオーディオプラグインを作ってみました！

今回作成したプラグインは**ケロケロエフェクタ**です．オートチューンと呼ばれることもありますね．

ケロケロエフェクタは，声の高さを音階にピッタリ合わせます．これにより，声の高さが階段状に変化するようになり，ロボットのような声が得られます．

例えばPerfume - ポリリズムはケロケロボイスが特徴的な楽曲の一つです．

<iframe width="560" height="315" src="https://www.youtube-nocookie.com/embed/KbiSxunJatM" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>

ほかにも，dodo ＆ tofubeats - nirvana とかもケロケロエフェクタが用いられていますね（めっちゃ好き）．
<iframe width="560" height="315" src="https://www.youtube-nocookie.com/embed/y-lQgqHD8Xs?start=21" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>

# 完成したプラグイン
完成したプラグインがこちらです．Autotuneのチェックボックスを有効にすると，声がロボットっぽくなるのがわかるかと思います．また，後半でHarmonic Shiftのつまみを動かしますが，これを活用すればハモリを作り出すこともできます．

<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">MATLAB EXPOで紹介したMATLAB製ケロケロエフェクタです．<br><br>発表だと伝わりづらかったかもしれませんが，実際はリアルタイムでパラメータを調整できます． <a href="https://t.co/7SlSLWIwK0">pic.twitter.com/7SlSLWIwK0</a></p>&mdash; K.M.@MATLAB Ambassador (@km_MATLAB_Amb) <a href="https://twitter.com/km_MATLAB_Amb/status/1531149505235542016?ref_src=twsrc%5Etfw">May 30, 2022</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

プラグインの効果はスペクトログラムをみるとよくわかります．まず，エフェクタをかけない状態がこちら．音高が滑らかに変化していますね．
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2612115/766541b3-6a72-2e9c-21ff-34fe39bcf0e8.png)
これに対し，ケロケロエフェクタを適用すると，音高が真っ平になりました！これがケロケロエフェクタの効果です．
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2612115/205af590-956c-ed16-ebe3-fbaaf8bfca6b.png)
また，ハモリをつくって元の声と重ねると，こんな感じになります．
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2612115/bf4c0fbe-324c-2c4e-c05b-de2ffd49691c.png)

# 完成した曲（！？）
さて，これまで技術的な話ばかりしてきましたが，せっかくなので**ミュージシャンっぽいこともしなければ！**

というわけで，曲を作ってきました！それでは聴いてください．スーパーMATLABミュージシャンで「線形代数できたらな」
<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">本日のMATLAB EXPO Lighting Talkで流した曲です．<br><br>声の加工（ケロケロボイス）にMATLABで実装したVSTプラグインを用いています😎 <a href="https://t.co/aVpPde8LxH">pic.twitter.com/aVpPde8LxH</a></p>&mdash; K.M.@MATLAB Ambassador (@km_MATLAB_Amb) <a href="https://twitter.com/km_MATLAB_Amb/status/1529337329378541569?ref_src=twsrc%5Etfw">May 25, 2022</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

切実な歌詞にうるっときますね．線形代数，できたらな......

# おわりに

当日は，久しぶりの対面でのプレゼンテーションでめちゃくちゃ緊張しましたが，MathWorksの方々と初めて対面でお話しできたり，多くの魅力的な展示を見ることができたりと，非常に充実した一日でした！来年も参加したいですね！

# ソースコード
完成したケロケロエフェクタのプログラムは以下からダウンロードできます！
https://jp.mathworks.com/matlabcentral/fileexchange/112420-autotune