こんにちは。焦がしパン粉です。
今日はソフトシンセサイザーという音を作るソフトウェアを作っている事について記事にしました!
1からすべて書いてしまうとすごい量になってしまうので、参考になったサイトとかんたんな説明だけ載せようと思います!興味がある人はリンクを辿って見てください!
作りたいもの
- 作曲ソフトで読み込めるVSTという形式で作成
- VSTをつくるため、C++というプログラミング言語を使用しないといけない
- 色々なパーツをユーザーが組み合わせて音を作ることが出来る
準備
VSTという形式で作るためには色々とややこしい準備が必要でした。
SDKというものが必要だったり、プロジェクトの設定を弄ったり・・・。以下のサイトでわかりやすくまとめてくださっているため、詳しい方法を知りたい場合、こちらを参考にしてください。
ただし、Visual Studio Community(2015版)の場合、初期の状態ではC++が使えないため、使えるようにしてください。
Visual Studioを開き、メニューから「File|New|Project…」を選択します。
ウィンドウが出てくるので、「Install|Templates| Install Visual C++ 2015 Tools for Windows Desktop」を選択し、OKを押します。
C++の開発環境がダウンロードされます。
それ以外は上のサイトを参考にしたら設定できると思います。
シンセの作り方
さてさて、準備ができたからさあシンセを作り始めましょう。
となるわけですが、ここでしょっぱなから、C++の難所といわれるオブジェクト指向の概念が出てしまうため、下記サイトの簡単な音源(VSTi)の作成のサンプルコードを使って説明します。
まず、作曲ソフトからいつどんな音を鳴らせばいいかというデータが下の関数に投げられてきます。
VstInt32 MySynthSampleVST::processEvents (VstEvents* events)
ここに送られてきたデータを色々弄くりまくって、下の関数のoutputに出力の音を代入すれば、音が出てくる。と言った寸法です。
void MySynthSampleVST::processReplacing (float** inputs, float** outputs, VstInt32 sampleFrames)
音をいじるアルゴリズムとしては、こちらのサイトを参考にしました!
音の音量変化を表現するアルゴリズムの1つであるADSRエンベロープの実装方法や、音色をあつ程度変えることのできる各種フィルターの実装方法が書いていました。
GUIの実装
シンセサイザーは音を作る物です。しかし、これまでのものだと、ツマミとパラメータ名、パラメータしか表示出来ません。これでは、どのツマミを弄ったらどんなふうに音が変わるか非常にわかりづらいです。
配布されているVSTにはそれぞれ個別のGUIがあります。これをこちらのサイトを参考に作っていきましょう。
どうやら、frame->addView()という関数で、色々なGUIのパーツを追加していって作る。と言った方式のようですね。
GUIのパーツはどのようなものがあるかは、以下のサイトを御覧ください(英語ですけど・・・。)
VSTを開発している所のサイトです。(情報が少ないので、サンプルソースとかもっと増やしてほしかったなあ。)
CMovieBitmapというクラスを使えば、画像をそのまま
作っている感想
VSTを作ろう、とくにGUIまで個人で作ろう!と思い立つ人は、開発言語にC++を使うことも相まってなかなかに少ないらしく。英語圏のサイトを見てみても情報が見つからない。(特に、図やグラフの書き方が全く分からない!)ので、GUIについてこれからも調べていき、これから作る人のためにも、GUI関連のことについてまとめておきたいです!
次回の記事は「hackathon運営マンになって」です。お楽しみに!