板情報 | コンピュータ ]

1  C++でVST作りの指摘・質問  (書き込み数 : 152)

1管理人   :2010/12/10(金) 18:06:52  
「C++でVST作り」内の誤記やサンプルコードのバグ、指摘・質問等がございましたらこちらへお願いいたします。

C++でVST作り→http://www39.atwiki.jp/vst_prog/
146管理人★   :2017/11/15(水) 22:25:03  
らいかさん
無事解決してよかったです。
147霧林   :2017/12/05(火) 02:51:52  
初めまして。VST プラグインの制作を試みている学生です。
VST 開発について詳細に解説しているサイトは少ないので、
「C++でVST作り」は大変参考になっています。貴重なサイトをありがとうございます。
プログラミング及び VST 初心者なのでわけのわからないことを書いてしまうかもしれませんが、質問をしてもよろしいでしょうか。

簡単なエフェクターを作成してみる - http://vstcpp.wpblog.jp/?page_id=314
こちらの記事を始まりとした、VST2.4 で実装しているトレモロエフェクトについての質問です。
このトレモロエフェクトに、「入力信号にトレモロ効果がかかるまでの時間(ディレイ)」
というパラメータを実装したい場合、どのようにすればよろしいでしょうか?

管理人様が実装イメージとして書かれているプログラムでは、
for(int i = 0; i < wavelength; i++)
この for 文内で入力信号の長さ分、信号処理を行っていることがわかります。
なので、例えばサンプリング周波数 44100Hz の入力信号に対して、
トレモロ効果がかかるまで1秒間あけたい場合は、単純に考えると
(省略されました・・全てを読むにはここを押してください)
148管理人★   :2017/12/05(火) 20:30:31  
霧林さん

書き込みありがとうございます。ST2.4でも全然問題ありません。

簡単に言うとsampleFramesは「入力信号の一部の長さ」になります。

ホストアプリ(DAWなど)は入力信号を数ミリ秒ずつ順番にVSTに渡していきます。
音声処理をリアルタイムに行うためにこのような方法がとられます。

1回に渡す入力信号は数ミリ秒ですので、sampleFramesはだいたい50~200ぐらいになります。
1秒分の長さを処理するためにホストアプリ(DAWなど)はprosessReplacing関数を200~1000回ぐらい呼び出します。
(sampleFramesや何回呼び出されるかは環境によって異なります。)

いただいた例の「VSTを読み込んでから1秒後にトレモロがかかるようにする」で、
ずっとトレモロがかからなかったのは、「 if(i <= 44099) 」の条件に合致していたからだと思います。
(省略されました・・全てを読むにはここを押してください)
149霧林   :2017/12/06(水) 03:41:54  
管理人様

迅速なご回答ありがとうございます。わかりやすい解説で助かります!
無事トレモロ効果がかかるまでの時間を設定することができました。
いくつか気になる点があるので、また質問させていただきます。
(ちなみにホストアプリは VSTHost (http://www.hermannseib.com/vsthost.htm) を使用しています。
その他の環境は Windows 7 (64bit), Visual Studio 2015 Community です)


ご教示いただいた実装例でそのまま実装してみたところ、
「信号が入力されてから1秒後」ではなく、「VST を読み込んでから1秒後」になるようですね。
VSTHost でビルドした VST を読み込んだところ、
読み込み1秒後からは入力信号に常時トレモロがかかる状態になりました(普通のトレモロエフェクトと同じ状態)。
信号の入出力を全くしなくても、設定した時間が経過次第この状態になるので、
processReplacing 関数は信号の入力がない状態でも呼び出され続けているのでしょうか?
(省略されました・・全てを読むにはここを押してください)
150管理人★   :2017/12/06(水) 22:19:18  
霧林さん

いつ入力信号があるか分からないので、processReplacing関数は
信号の入力がない状態でも呼び出され続けます。


「毎回、エフェクトに信号が入力されてからn秒後」とするにはなかなか難しいです。

信号が入力されたという状態をどう考えるか?や
エフェクターをかける対象をどんなものにするか?で変わってくると思います。

記載いただいているサンプルだとおそらくノイズが少しでも乗ると
「信号が入力された」という状態になってしまいます。

信号が入力されたかどうかを判断する方法の一つに音圧をもとにするものがあります。
(省略されました・・全てを読むにはここを押してください)
151霧林   :2017/12/12(火) 01:46:15  
管理人様

返信が遅くなってしまい申し訳ございません。ご回答ありがとうございます。
processReplacing 関数、信号の入力がない状態でも呼び出されているのですね。

なるほど、信号が入力される度に…となると難しいのですね。
私がエフェクトをかける対象として考えているのは、今のところソフト音源(VSTi)のみなので、
MIDI ノートオンメッセージを条件にしてみる方法で挑戦してみます。

今回、エフェクト効果がかかるまでの時間の実装方法について質問をした理由を一応説明しておくと、
時間機能を付けたビブラートの VST エフェクトを作りたいなと思っているからです。
イメージとしては、MIDI のビブラート系の CC にある
Vibrato Rate, Depth, Delay のうちの”Delay”の実装ですね。

また何かわからないことがあれば質問するかもしれませんが、
(省略されました・・全てを読むにはここを押してください)
152管理人★   :2017/12/12(火) 20:45:12  
霧林さん

とりあえずは解決してよかったです。
また何かあればよろしくお願いします。
名前
E-mail(省略OK)
内容

2  こんにしょわ  (書き込み数 : 3)

1めるり   :2014/09/25(木) 06:43:08  
どうも
某所で過労死しかけてたのを病気だと思ってさらに死にかけてた者です><
時々お邪魔しますー
というかあれもう落としてます><
レジストリのいじりすぎとシステムドライブの中身がカオスになったので環境入れるところからですけどねー

ではではー
2管理人★   :2014/09/25(木) 22:33:33  
めるりさん

書き込みありがとうございます。

某所がもっと活発になればと思い作ってみました。
不明点などがございましたら質問いただければと思います。

これからもよろしくお願いします。
無理をなさらないようお体にお気を付けください。
3名無しさん   :2016/07/27(水) 01:43:04  
こんにょしょわ。今更やろうと思ってます
素敵な掲示板とwikiですね。今からじっくり見てみようと思います
名前
E-mail(省略OK)
内容

3  はじめまして。  (書き込み数 : 25)

1shun   :2011/05/01(日) 15:46:24  
はじめまして。
個人的にVSTプラグインの開発に挑戦しています、shunと申します。

VST開発の情報を探していたところ、このページを見つけました。
とても有益な情報をありがとうございます。

今後こちらの掲示板の方に質問などを書き込ませていただくことがあるかもしれません。
もし、お時間がありましたらお答えいただけたらと思います。

作成中のコンテンツの完成を楽しみにしています!
19管理人   :2012/01/26(木) 11:29:53  
willさん
返信が遅れました

resource.rcは作成しておりますでしょうか?
作成している場合、プロジェクトへ追加しておりますでしょうか?
20sam   :2012/05/22(火) 16:06:26  
こんにちは
今、自力で VST Plug-in 作成にチャレンジしています。
プロジェクトの作成方法などだいたい同じやり方でやっております。
もっと早くココを知っていれば、もっと楽に早くできたのに。。。。。

一つだけ質問です。

VC++ プロジェクトの準備
No.4 VSTを作成するに当たって必要なコンパイラ、リンカ設定を追加する
http://www39.atwiki.jp/vst_prog/pages/61.html
において、
プロジェクトプロパティ→「構成プロパティ」→「C/C++」→「コード生成」
→「ランタイムライブラリ」を「マルチスレッド(/MT)」に設定されておりますが、
その理由というか必然性を教えていただきたいと思います。

(省略されました・・全てを読むにはここを押してください)
21管理人   :2012/05/23(水) 00:14:18  
samさん書き込みありがとうございます。

プロジェクトの設定を/MTにしないとエラーがでてビルドできなかった気がします。

現在パソコン修理中ですぐに確認することができませんが、
わかり次第連絡させていただきます。(今週末あたりになりそうです。)
22管理人   :2012/05/29(火) 21:41:28  
samさん

「ランタイムライブラリ」の設定ですが、
「マルチスレッド(/MT)」でなくてもビルドはできます。
ただし、自分のパソコン以外で実行するとエラーとなり、
実行できない可能性があります。

なお、確認の際に、「ランタイムライブラリ」を
空白にしようとしましたができませんでした。
プロジェクトのプロパティダイアログで左上の「構成」が
「すべての構成」になっていないでしょうか?
23SKY   :2013/02/02(土) 20:51:53  
VSTの仕様が知りたかったので
わかりやすく書いてあってとても参考になりました。
ありがとうございました。
24管理人   :2013/02/03(日) 15:22:28  
SKYさん

訪問いただきありがとうございます。

わかりにくい部分や作成中の部分がありますが、
わかる範囲でお答えさせていただきますので
これからもよろしくお願いいたします。
25<削除>   :<削除>  
<削除>
名前
E-mail(省略OK)
内容