C++でVST作り

C++でVST作り

本サイトではこのサイトではVST/VSTiプラグイン(エフェクター、ソフトシンセ)を作成するための情報をメモしております。

【主なコンテンツ】

自作アプリ 自作VSTプラグイン 自作VSTプラグインを公開しております。
プログラミング情報 VST3.6プラグインの作り VSTプラグインを作成するための手順を記載しています。(SDK 3.6.8版)
簡単なデジタルフィルタ 極力高度な数学(Z変換、伝達関数 等)を使わずに簡単にデジタルフィルタを設計・実装できる方法を紹介しております。
エフェクター実装例 ディストーションやコーラス等のエフェクターの実装例を紹介しております。
SoundFontファイルの読み込み SoundFontファイルの読み込みと組み立てについて説明しております。
現在作成中です。

【その他】
■各コンテンツや掲示板Twitterにコメントに要望やご意見、応援をいただけるとうれしいです。 →掲示板

■Twitterアカウント:@vstcpp   URL:https://twitter.com/vstcpp

■本サイトは旧サイト(http://www39.atwiki.jp/vst_prog/)の編集パスワード紛失により移転したサイトとなります。

SoundFontの取り扱い03 – SoundFontのジェネレータについて

はじめに

複数回にわたってSoundFontファイル(.sf2ファイル)を読み込んでシンセサイザーなどに使えるようにパラメーターを組み立てる方法を説明しています。
ここではSoundFontの音色情報を組み立てる際に重要となるジェネレータについて説明します。

各説明のリンクはこちらにまとめております → SoundFontの読み込みと組み立て

SoundFontの音色の構成について

ジェネレータを説明する前にSounfFontの音色構成について説明します。

SoundFontでは音色はプリセットとして扱われます。

プリセット(音色)は1つ以上のインストルメント(楽器)で構成されています。
インストルメント(楽器)のパラメータを調整してMIDIのキー(ノートNo.)とベロシティにマッピングすることで、単純な楽器の再現だけでなく演奏上の表現を広げることができるようにしています。
例として下記のようなインストルメント(楽器)の組み合わせがあります。

インストルメント(楽器)は1つ以上のサンプル(音声波形)で構成されます。
サンプル(音声波形)のパラメータを調整してMIDIのキー(ノートNo.)とベロシティにマッピングすることで、よりリアルな楽器の再現ができるようにしています。
もっと見る

SoundFontの取り扱い02 – SoundFontのフォーマット

はじめに

複数回にわたってSoundFontファイル(.sf2ファイル)を読み込んでシンセサイザーなどに使えるようにパラメーターを組み立てる方法を説明しています。
ここではSoundFontファイル(.sf2)のフォーマットについて説明します。

各説明のリンクはこちらにまとめております → SoundFontの読み込みと組み立て

SoundFontファイルのフォーマット

SoundFontファイルはRIFFファイル形式をとっています。
RIFFファイル形式では、そのファイルに必要なデータをチャンクと呼ばれるブロックに分けて保存し、チャンクにFourCCと呼ばれる4Byteの識別子(ID)を付けて管理するファイル形式です。

RIFFファイルについては下記に簡単に記載しております。必要に応じてご参照ください。

SoundFontファイルのチャンク

SoundFontファイルのチャンクと階層構造は下記となっています。各チャンクの詳細は後述します。
もっと見る

RIFFファイルについて – RIFFファイルの概要と読み込み

はじめに

ここではRIFFファイルとフォーマットの概要と読み込むためのクラスの実装について説明します。

今回の作成するクラスのソースファイルはこちらになります。 →  criffloader

RIFFファイル形式をもとにして作られたファイルの取り扱についても下記にまとめています。

RIFFファイルとは

RIFFファイルとは「Resource Interchange File Format」の略になります。
MicrosoftとIBMが提案したマルチメディア用のファイルフォーマットで、音声や動画などのデータ(=Resource)をアプリケーション間でやり取り(Interchange)するためのファイルフォーマットになります。

アプリケーション固有の情報をファイルに付与しても、他のアプリケーションでの読み込みに影響をなくすように設計されたファイルフォーマットです。
もっと見る

SoundFontの取り扱い01 – SoundFontの概要と前提知識について

はじめに

複数回にわたってSoundFontファイル(.sf2ファイル)を読み込んでシンセサイザーなどに使えるようにパラメーターを組み立てる方法を説明しています。
ここではSoundFontの概要と仕様書・参考資料について説明します。

各説明のリンクはこちらにまとめております → SoundFontの読み込みと組み立て

SoundFontとは

SoundFontとはE-MU Systems社のウェーブテーブル音源チップ EMU8000シリーズ用に開発された規格です。
音色ファイル(SoundFontファイル)をEMU8000シリーズに読み込ませることで、サンプラーのように音色を自由に追加・変更できる規格です。

SoundFont規格は内容が公開されており、さまざまなソフトウェアシンセサイザー(音源)やサンプラーで利用できるようになっています。

EMU8000シリーズは1990年代のCreative社製サウンドカード Sound Blasterシリーズに搭載されていました。
コンピューターの性能が貧弱でmp3やwav、ソフトウェア音源(MIDI音源)を十分に扱えなかった時代に、Sound Blasterだけで外部MIDI音源なしにいい音が扱え、さらにSoundFontで好みに合わせて自由に音色を追加・変更できるという画期的な製品でした。

しかし、Sound Blasterシリーズはゲームでの利用を想定していたためDTMなどのMIDI音源としてはあまり普及せず、現在(2018年6月頃)のSound BlasterシリーズにはEMU8000シリーズを含めMIDI音源機能は搭載されなくなっているようです。

対象としているEMU8000シリーズ自体はなくなりましたが、現在でも「規格内容が公開されている」「過去に作られたSoundFontファイルがそのまま使える」「ソフトウェア音源の性能が向上しDTMで使いやすくなった」などの点から、利用されている規格になります。

SoundFontを取り扱うための前提知識

SoundFontの規格ではウェーブテーブル音源やサンプラー、シンセサイザーなどのデジタル楽器・音源の知識が必要となります。
MIDIに関する簡単な知識(Note On/Off、ベロシティ、Control Change、ピッチベンド程度)やサンプルループや音量・フィルタ・エンベロープ(ADSR)・LFOなど音色を作成するための用語や仕組みについてはご理解していただいている前提となります。
もっと見る

SoundFontの取り扱い00 – SoundFontを読み込むサンプルコード

SoundFontを読み込むサンプルコード

SoundFontを読み込みのサンプルコードはこちらになります。

SoundFontの読み込みサンプルでは下記を内容が実行されます。

  1. 実行ファイルと同じフォルダ内にある「test.sf2」を読み込んで内容を表示
  2. 「test.sf2」読み込み後、指定したプリセットを組み立て、プリセット内のすべてのボイスのパラメータ情報を表示
  3. MIDIノートNoとベロシティを指定すると、発音すべきボイスのIDを表示

SoundFontファイル「test.sf2」は読み込みたいSoundFontファイルのファイル名を変更してご用意ください。
このファイルがない場合、エラーが発生します。

使用方法などはこちらのリンクはこちらにまとめております → SoundFontの読み込みと組み立て
もっと見る