スタンダードMIDIファイルの読込

はじめに

ここではスタンダードMIDIファイル(.smf)のフォーマットの説明と簡単な読込サンプルについて解説しています。
スタンダードMIDIファイルについては、「smfフォーマット」などで検索するとすでに他のサイトでも解説されていますので、簡単に説明します。

このサイトでは「わいやぎのwebページ」に記載されている内容をもとに作成しています。

スタンダードMIDIファイルのフォーマット

スタンダードMIDIファイルはRIFFファイル形式に似た形式をとっています。

RIFFファイル形式は、そのファイルに必要なデータをチャンクと呼ばれるブロックに分けて保存し、チャンクにFourCCと呼ばれる4Byteの識別子(ID)を付けて管理するファイル形式です。
RIFFファイルについては下記に簡単に記載しております。スタンダードMIDIファイルは上記のRIFFファイル形式に似た形式のファイルのため、必要に応じてご参照ください。

今回作成するスタンダードMIDIファイルの読み込み関数のサンプルはこちらからダウンロードできます。 → riffsample_20231210
※スタンダードMIDIファイル以外にもwavファイルやSoundfontファイル読込サンプルなども同梱されています。

スタンダードMIDIファイルのチャンク

スタンダードMIDIファイルのチャンクと階層構造は下記となっています。各チャンクの詳細は後述します。
2つの必須チャンクがあります。

なお、スタンダードMIDIファイルはRIFFチャンクから始まっていないため、厳密にはRIFF形式のファイルではありません。

もっと見る

自作VSTプラグインTempo Sync Filterと.WAV Playerの更新終了について

自作VSTプラグインの「Tempo Sync Filter」および「.WAV Player」について、更新を終了します。

VSTプラグインのダウンロード自体は引き続き可能ですが、不具合や要望への対応は基本的に実施しません。
ご理解のほどよろしくお願いいたします。

※更新を終了するVSTプラグイン
 .wavファイル プレイヤー – .WAV Player
 テンポ同期フィルターエフェクター – Tempo Sync Filter

VST3プラグイン作りの情報はこちらにもございます → はじめてのVST3プラグイン作り

ご指摘やご質問などがございましたら、コメント欄か掲示板Twitterでご連絡いただければと思います。

図形・波形描画ビューの実装

図形・波形描画ビューの実装

VST GUIにおいて音声波形などを描画するビューための方法を説明します。
波形描画とも記載しましたが、基本的には図形を描くための方法となります。

なお、VST GUIの基本的な作成方法として下記をご理解いただいている前提で進めさせていただきます。
(下記のVST GUIクラスをベースに説明を進めさせていただきます。)

また、波形描画ビューの定期更新については、「VST GUIにおけるコントロールの定期更新」も参考にしてください。

もっと見る

VST SDK 3.7.5が公開されました。

VST SDK 3.7.5が公開されました。

2022年5月16日に、VST SDK 3.7.5が公開されています。

参考→sdk.steinberg.net

フォーラムではなく、公式の変更履歴は「VST3 Developer Portal 変更履歴」にあります。

VST SDK 3.7.4からの変更点は下記のようです。
(公式サイトからの翻訳ですが英語は自信がないです。また、一部 補足などを入れております。)

  • インターフェイス・フラグ等の修正
    • プラグイン情報(モジュール情報)を記載したmoduleinfo.jsonファイルが利用できるように変更。
      • 作成したプラグインのフォルダに「/Contents/moduleinfo.json」のようにに配置することで、ホストアプリケーションが.vst3ファイルを読み込むことなく、情報を取得できるようになった。
      • プラグインの情報には、ファクトリ((PFactoryInfo)情報・クラス(PClassInfo)情報・スナップショット・互換性の一覧を記載することができる。
      • moduleinfo.jsonはVST 3 SDKを使ったビルドを行う際に自動で作成される。
      • VST 3 Developer Portal – Moduleinfo
    • 新しいインターフェイス「IPluginCompatibility」(pluginterfaces/base/iplugincompatibility.h)を追加。(moduleinfo.jsonファイルが利用できないときに互換性情報を取得するためのインターフェイス。)
    • Visual Studio 2022で「Error E0020 identifier “atomic_fetch_add” and “atomic_int_least32_t” is undefined」が発生しビルドできない不具合(Issue #90)を修正。
    • Windows ARM64ECをターゲットとした場合の警告を修正。
    • SMTG_CONSTEXPR 利用時のconstexprの問題を修正。

  • フラグ・列挙型等の追加
    • speaker arrangementに下記の3D用のスピーカー構成が追加。
      • k50_5_3 → L R C Ls Rs Tfl Tfc Tfr Trl Trr Bfl Bfc Bfr
      • k51_5_3 → L R C LFE Ls Rs Tfl Tfc Tfr Trl Trr Bfl Bfc Bfr
      • ITU 4+5+1 Sound System E用構成
        • k50_4_1 → L R C Ls Rs Tfl Tfr Trl Trr Bfc
        • k51_4_1 → L R C LFE Ls Rs Tfl Tfr Trl Trr Bfc
      • ITU 3+7+0 Sound System F用構成
        • k70_3 → L R C Ls Rs Sl Sr Tsl Tsr Trc
        • k72_3 → L R C LFE Ls Rs Sl Sr Tsl Tsr Trc LFE2

  • ヘルパークラスの追加・修正
    • モジュール情報(moduleinfo.json)のサポートに伴い、「public.sdk/samples/vst-utilities」を追加。このツール(サンプル)を用いてjsonファイルの生成などができる。
    • モジュール情報(moduleinfo.json)の生成とパースのために「public.sdk/source/vst/moduleinfo」を追加。
    • _HAS_CXX17マクロが置き換えられていない問題を修正。(Issue #37)

  • VSTGUI 4.11
    • CLayeredViewContainerのサポートにより、WindowsでDirectCompositionを使用するよう変更。
    • 32bit Carbon(MAC)のサポートを終了。
    • イベント処理の再作成とその他 いくつかの問題修正を実施。

  • ドキュメントの追加・変更
  • CMAKEの修正
    • CMAKEの最低バージョンを3.19に変更
    • smtg_target_setup_as_vst3_example関数を追加
    • MACにおけるsmtg_target_set_bundle関数を修正
    • moduleinfo.jsonを作成するためのオプション「SMTG_CREATE_MODULE_INFO」を追加。(デフォルトでON)
    • project()関数内のVERSIONとDESCRIPTIONを使用してCMAKEバージョンファイルを自動生成するよう変更。
    • WindosでSMTG_PLUGIN_TARGET_USER_PROGRAM_FILES_COMMONをデフォルトでONにするよう変更。
    • GithubのREADME.mdにあるCMAKEの引数について更新。(etheory氏のPull Request #91より)

  • プラグインラッパー
    • AUv3ラッパー
      • AUv3 検証の問題を修正。(Issue #39)

  • サンプルの追加・修正
    • マルチプログラムチェンジパラメータのサンプルとしてmultiple_programchangesを追加。「public.sdk/samples/vst/multiple_programchanges」にある。
    • CPU負荷シミュレーションパラメータをHostCheckerサンプルに追加。
    • バージョン管理とsmtg_target_setup_as_vst3_example関数の追加に伴いサンプル用CMAKEのリファクタリングを実施。

  • Validatorの修正(v3.2.20)
    • IPluginCompatibilityインターフェイスのテストを追加。

  • VST3PluginTestHostの修正(v3.3.0)
    • 32bitバージョンのサポートを終了。

  • VST 3 Project Generatorの修正(v2022.05)
    • VST3 InspectorをCompatibility JSONに対応。

VST3についての情報は下記にもあります。

また、質問やご指摘はコメント欄や掲示板Twitterでいただけばとおもいます。

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

VST SDK 3.7.4が公開されました。

VST SDK 3.7.4が公開されました。

2021年12月14日に、VST SDK 3.7.4が公開されています。

参考→sdk.steinberg.net

変更履歴は「VST3 Developer Portal 変更履歴」にあります。

VST SDK 3.7.3からの変更点は下記のようです。(公式サイトからの翻訳ですが英語は自信がないです。)

  • インターフェイス・フラグ等の修正
    • Windowsにおいて「_M_ARM64EC」のフラグをサポート
    • WindowsでVST3プラグインのフォルダとして「%LOCALAPPDATA%/Programs/Common/VST3/」を追加
    • 新しい定義(SMTG_CPU_ARM_64EC、SMTG_CPP14、SMTG_CPP17)を追加
    • 新しい定義「SMTG_CONSTEXPR」を必要に応じて利用するよう変更

  • ヘルパークラスの追加・修正
    • FUnknownを操作するためのクラスが記載された「pluginterfaces/base/funknownimpl.h」を追加(C++11が必要)
    • VST3ホストのヘルパークラス用にユニットテストファイルを追加。(「public.sdk/source/vst/hosting/testh」配下)
    • C++17においてpluginfactory内でconst_expを使用する例として「public.sdk/source/main/pluginfactory_constexpr.h」を追加。
    • MPE(MIDI Polyphonic Expression)処理に関するユーティリティクラス mpeprocessorクラス(vst3sdk/public.sdk/source\vst/utility/mpeprocessor.h)にコメントを追加。

  • VSTGUI 4.10.3
    • いくつかの修正を実施

  • ライセンスの変更
    • ライセンスがバージョン2.2.2に変更。(すでに2.0に署名している場合は再度署名する必要はない。)

  • CMAKEの修正
    • リファクタリングを実施。いくつかの関数・マクロの名前を変更(smtg_run_vst_validator => smtg_target_run_vst_validatorなど)
    • smtg_add_vst3_resourceをsmtg_target_add_plugin_resourcesに変更。
    • smtg_add_vst3_snapshotをsmtg_target_add_plugin_snapshotsに変更。
    • MACにおいてXcode12の場合にユニバーサル バイナリをデフォルトでオンに変更
    • Windows用に新しいオプション「SMTPG_PLUGIN_TARGET_USER_PROGRAM_FILES_COMMON」を追加。これによりVST3プラグインのフォルダとして「「%LOCALAPPDATA%/Programs/Common/VST3/」が利用可能となる。
    • XCodeにおけるいくつかのコード署名の不具合を修正

  • プラグインラッパー
    • VST2ラッパー
      • _DeinitModule()関数内でデータ破棄が必要なオブジェクトの終了処理を修正
    • AUラッパー
      • 外部利用しているAU SDKをバージョン1.1に更新
      • オフラインレンダリングの情報を修正

  • サンプルの追加・修正
    • validatorセルフテストを追加
    • validatorにaddErrorWarningTextToOutput()関数を追加

  • VST3PluginTestHostの修正(v3.2.20)
    • WindowsでVST3プラグインのフォルダとして追加された「%LOCALAPPDATA%/Programs/Common/VST3/」に対応
    • Windowsでの32bitプラグインのサポートをこのバージョン(v3.3.20)のVSTPluginTestHostまでとする。(次回アップデートより64bitプラグインのみとする)

  • VST 3 Project Generatorの修正(v2021.12)
    • Windowsでのプラットフォームアーキテクチャ設定をCMAKEに追加。

VST3についての情報は下記にもあります。

また、質問やご指摘はコメント欄や掲示板Twitterでいただけばとおもいます。

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

VST SDK 3.7.3が公開されました

VST SDK 3.7.3が公開されました。

少し前になりますが、VST SDK 3.7.3が公開されたようです。

参考→sdk.steinberg.net

変更点は下記のようです。(公式サイトからの翻訳ですが英語は自信がないです。)

  • フォルダ名の変更
    • ZIP内のVST SDKのフォルダ名を変更。例:VST3_SDK => vst3sdk
  • インターフェイス・フラグ等の修正
    • IPlugViewContentScaleSupportのドキュメントを更新。
    • IComponentHandler::restartComponent用に新しいフラグ「kKeyswitchChanged」を追加
      キースイッチの変更をホスト側に通知します。
    • Steinberg::Vst::FunctionNameTypeに新しい定義を「kPanPosCenterX」などを追加。
  • VST GUIの変更
    • バージョンを4.10.1に変更。
    • いくつかの修正を実施。
  • ライセンスの変更
    • ライセンスがバージョン2.2.1に変更。(すでに2.0に署名している場合は再度署名する必要はない。)
  • CMAKEの修正
    • Windows ARM64において間違いのあったリンクパスを修正。
    • MacでもWindowsやLinuxと同じエラーように取得するため「-Werror=return-type」を追加
    • fetchcontentをVST SDKで使用する場合、変数vst3sdk_SOURCE_DIRが未定義となる問題を修正。
    • プロジェクトジェネレータを利用してプロジェクトを作成したとき、シンボルの可視属性が誤っていた問題を修正
  • チュートリアル
    • 新たに高度な機能に関するチュートリアルを追加
  • プラグインラッパー
    • AAXラッパー
      • initModule()とDeInitModule()のリファクタリングを実施
      • 読み取り専用パラメーターが使用されている場合のGetParameterIndex()のインデックスが正しくない不具合を修正
    • VST2ラッパー
      • initModule()とDeInitModule()のリファクタリングを実施
      • initModule()とDeInitModule()を何度も呼び出す不具合を修正
    • AUv3ラッパー
      • macOS11でAUv3をサポート。
      • AUv3Wrapperコードの簡素化を実施。
      • macOS11でLogicとGarageBandがエディターを表示しない問題を修正
  • サンプルの追加・修正
    • 下記の新しいVST3プラグインサンプルを追加。
      • AGainSampleAccurate…サンプル単位で正確なパラメータ変更処理を行うサンプル。
    • HostCheckerプラグインでチェックできる項目を追加。
      • 同じIDを持つ複数キューのIParameterChangesのチェックを追加
      • 同じ位置にある複数ポイントのIParameterChangesのチェックを追加
      • restartComponent(kKeyswitchChanged)・restartComponent(kNoteExpressionChanged)・restartComponent(kParamValuesChanged)のチェックを追加
    • Pannerサンプルにivstparameterfunctionnameの機能を追加
    • 引数なしでeditorHostを起動したときの問題を修正。
    • 利用可能なVST3プラグインがない場合、VST3Inspectorがクラッシュする問題を修正。
    • mdaプラグインの警告を修正。
    • gcc11でのビルドを修正。
  • ヘルパークラスの修正
    • 下記のユーティリティファイルを追加
      • audiobuffers.h
      • processdataslicer.h
      • rttransfer.h
      • sampleaccurate.h
      • tests.cpp、tests.h

VST3についての情報は下記にもございます。

また、質問やご指摘はコメント欄や掲示板Twitterでいただけばとおもいます。

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