したらばTOP ■掲示板に戻る■ 全部 1-100 最新50 | |

C++でVST作りの指摘・質問

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

C++でVST作り→http://www39.atwiki.jp/vst_prog/

2うさぎ:2010/12/25(土) 23:37:00
指摘でも質問ではないですが、wikiの情報を活用させていただいている者です。
ほぼ傍観者かもしれませんががんばってください。
精進したらスレ立てとかさせていただくかもです。

3管理人:2010/12/26(日) 02:17:47
うさぎさん書き込みありがとうございます。
応援いただけてうれしいです。

あまり人も来ないページ(分野?)なので極力要望にはこたえていこうと思ってます。
これからもよろしくお願いいたします。

4うさぎ:2010/12/26(日) 06:03:12
おはようございます。
早く起きたのはいいとして
http://www39.atwiki.jp/vst_prog/?plugin=ref&page=VST%20SDK04&file=20.PNG
の状態にVC++expressにインクルードしたのですが
>c:\vstsdk2.4\public.sdk\source\vst2.x\audioeffect.h(16) : fatal error C1083: include ファイルを開けません。'pluginterfaces/vst2.x/aeffect.h': No such file or directory
とのエラーが出ています。
どうやらaeffect.hがみにいけてないようなのですが前述び通り設定してありますし、アクセス権なども問題がないようです。
なにかアドバイスをいただけますでしょうか?
windows7 64bitです。
お時間のあるときお願いいたします。

5うさぎ:2010/12/26(日) 06:05:06
補足:練習教材にVSTエフェクター作成例のトレモロをビルドしてみようとしていました。

6うさぎ:2010/12/26(日) 12:18:02
自己解決しました
インクルードするディレクトリをsdkのルートに設定したらビルドできました。
お騒がせしました

7管理人:2010/12/26(日) 12:46:31
うさぎさん
指摘ありがとうございました。
確かに「C:\vstsdk2.4」もパス指定しなければいけないようです。
修正しておきました。

8ちあ.dat:2011/04/23(土) 07:41:12
管理人様、こんにちは。

作編曲に役立つツールを作りたくて、VSTやVSTホストの作り方を調べようとしたのですが、
まったく情報が無くて困っていたところ、このサイトを見つけました。

結論から言うと、すっごく参考になりました!
本当に困っていたので、是非お礼を言いたくて…。
ありがとうございます!

確かに、あまり人の来ない分野かもしれませんが、応援いたしております!

9ちあ.dat:2011/04/23(土) 12:03:40
こんにちは。
DLLを作成するときに使う、「vstplug.def ファイル」についての質問がございます。
よろしくお願いいたします。


このファイルの中身は、最初は、

EXPORTS
VSTPluginMain
main=VSTPluginMain

ってなってますよね。

そこで気になったのですが、
「最小構成のVST作成方法」→「AudioEffect* createEffectInstance()関数の作成」 の項目に記述されている、
AudioEffect* createEffectInstance()
を、VSTホストから使用するためには、自分で vstplug.defファイル の中身を

EXPORTS
VSTPluginMain
main=VSTPluginMain
createEffectInstance

と、書き換える必要があるのでしょうか。


それとも、VSTホストは、
最初からdefファイルに記述されている「VSTPluginMain」メソッド を利用することによって、
VSTプラグインを使用するのでしょうか?


ちなみに、
vstpluginmain.cppファイルにて、VSTPluginMainメソッド は、次のように定義されていました。

VST_EXPORT AEffect* VSTPluginMain (audioMasterCallback audioMaster)
{
// Get VST Version of the Host
if (!audioMaster (0, audioMasterVersion, 0, 0, 0, 0))
return 0; // old version

// Create the AudioEffect
AudioEffect* effect = createEffectInstance (audioMaster);
if (!effect)
return 0;

// Return the VST AEffect structur
return effect->getAeffect ();
}

これを見ると、VSTホストアプリケーションは、
AEffect構造体を利用するのだろうか?
とも思えます。
しかしその場合、new した AudioEffectインスタンスは、いつ解放されるの?
放っておいて、メモリーリークは起こらないの?
等と、心配事があります。


VSTホストアプリケーション(SonarとかCubase等)は、
どのようにして、VSTプラグインを使っているのでしょう。

今、色々試して、試行錯誤している最中です。

お時間がございます時で構いません。
管理人様が、ご存知のことがございましたらアドバイス頂けないでしょうか?

よろしくお願い致します。

10管理人:2011/04/23(土) 12:28:12
ちあ.datさんありがとうございます。

書き込みが少ないのでお礼や指摘は素直にうれしいです。

自分のページをよりよくしていきたいと思いますので
ご質問や指摘は大歓迎です。

これからもよろしくお願いいたします。

11管理人:2011/04/23(土) 12:29:51
書き込みに気づかず書き込んでしまった…

12管理人:2011/04/23(土) 12:41:19
私自身も詳しくはないですが、

> と、書き換える必要があるのでしょうか。
> 最初からdefファイルに記述されている「VSTPluginMain」メソッド を利用することによって、
> VSTプラグインを使用するのでしょうか?
vstplug.defは書き換える必要はないと思います。
ご認識のとおりだと思われます。

> これを見ると、VSTホストアプリケーションは、
> AEffect構造体を利用するのだろうか?
AEffectクラスを継承した自作のVSTクラスを利用することとなります。
C++のクラスの「継承」「オーバーライド」といった機能を調べていただけると
ご理解いただけるかと思います。

なおnewしたAudioEffectインスタンスの解放は
ホストアプリケーション側で行われていると思います。

13管理人:2011/04/23(土) 12:49:20
> C++のクラスの「継承」「オーバーライド」といった機能を調べていただけると
> ご理解いただけるかと思います。
「仮想関数」が抜けていました。

14ちあ.dat:2011/04/23(土) 13:13:40
管理人様、すばやいご回答ありがとうございます!

なるほど!
AEffectクラスを継承した自作クラスを作成することが基本方針なのですね!

このクラスの中身はまだわからないことが多いのですが、色々調べたり試したりして
がんばってみようと思います。

本日、こちらのサイトを発見してから、長い間の疑問が色々解決しました!
今後のサイトの更新を、楽しみにしております。

ありがとうございました!

15管理人:2011/04/23(土) 14:08:38
ちあ.datさん

無事解決してよかったです。

ここに書かれている以外のことでも可能な範囲で答えますので
よければまたご質問ください。

ありがとうございました。

16nobu:2011/08/15(月) 11:09:11
> AudioEffectインスタンスは、いつ解放されるの?

>なおnewしたAudioEffectインスタンスの解放は
> ホストアプリケーション側で行われていると思います。

本当にそうか気になったのでざっとSDKとサンプルのコードを見てみました。

VST hostが受け取れるのは AudioEffect の持っている AEffect 構造体。

AEffect::object は そのAEffect自身を持っている AudioEffect へのポインタ。

AudioEffect::dispatchEffectClass で effClose がきた時に引数として受け取った AEffect構造体のメンバ AEffect::object (= AudioEffectのインスタンス) に対して delete している。

AudioEffect::dispatchEffectClass は AudioEffect のコンストラクタで、AEffect の dispatcher に設定されている。

minihostのサンプルを見ると、VST hostは終了処理として
> effect->dispatcher (effect, effClose, 0, 0, 0, 0);
のように effClose を投げる

ということで、当初の予想通り、AudioEffectのインスタンスの解放はVST hostの責任で、VST pluginを作る人は気にする必要はありませんでした。
情報共有まで。

17管理人:2011/08/17(水) 01:32:42
nobuさん情報提供ありがとうございました。

有益な情報をいただけて助かりました。
これからもよろしくお願いいたします。

18<削除>:<削除>
<削除>

19<削除>:<削除>
<削除>

20ken:2012/01/27(金) 00:17:33
初めまして、kenと申します。
「C++でVST作り」と拝見させていただいております。

Microsoft Visual C++ (2008 Express Edition)とVST SDK 2.4をインストールし、
VC++ プロジェクトの準備のNo.1〜No.5を読みながら、まずビルドまでを挑戦しています。
手順どおりの操作を行ったつもりなのですが、以下のようなエラーが出てしまいます。

------ ビルド開始: プロジェクト: MyTremoloVST, 構成: Release Win32 ------
リンクしています...
ライブラリ C:\Documents and Settings\ken\デスクトップ\MyTremoloVST\Release\MyTremoloVST.lib とオブジェクト C:\Documents and Settings\ken\デスクトップ\MyTremoloVST\Release\MyTremoloVST.exp を作成中
vstplugmain.obj : error LNK2001: 外部シンボル ""class AudioEffect * __cdecl createEffectInstance(int (__cdecl*)(struct AEffect *,int,int,int,void *,float))" (?createEffectInstance@@YAPAVAudioEffect@@P6AHPAUAEffect@@HHHPAXM@Z@Z)" は未解決です。
C:\Documents and Settings\ken\デスクトップ\MyTremoloVST\Release\MyTremoloVST.dll : fatal error LNK1120: 外部参照 1 が未解決です。
ビルドログは "file://c:\Documents and Settings\ken\デスクトップ\MyTremoloVST\MyTremoloVST\Release\BuildLog.htm" に保存されました。
MyTremoloVST - エラー 2、警告 0
========== ビルド: 0 正常終了、1 失敗、0 更新不要、0 スキップ ==========


Microsoft Visual C++ (2010 Express Edition)でも試したのですが、同様のエラーが出てしまいます。
------ ビルド開始: プロジェクト: MyTremoloVST, 構成: Release Win32 ------
ライブラリ C:\Documents and Settings\ken\デスクトップ\MyTremoloVST\Release\MyTremoloVST.lib とオブジェクト C:\Documents and Settings\ken\デスクトップ\MyTremoloVST\Release\MyTremoloVST.exp を作成中
vstplugmain.obj : error LNK2001: 外部シンボル ""class AudioEffect * __cdecl createEffectInstance(int (__cdecl*)(struct AEffect *,int,int,int,void *,float))" (?createEffectInstance@@YAPAVAudioEffect@@P6AHPAUAEffect@@HHHPAXM@Z@Z)" は未解決です。
C:\Documents and Settings\ken\デスクトップ\MyTremoloVST\Release\MyTremoloVST.dll : fatal error LNK1120: 外部参照 1 が未解決です。
========== ビルド: 0 正常終了、1 失敗、0 更新不要、0 スキップ ==========


単純なミスなのかも知れませんが、このエラーから何か設定すべきこと等わかりましたら、教えていただければ幸いです。
よろしくお願いいたします。

21管理人:2012/01/28(土) 04:05:20
kenさんはじめまして

おそらくプロジェクトの準備だけしてすぐにビルドしたのでは無いでしょうか?

残念ながらプロジェクトの準備だけではビルドすることができません。
ビルドするには.cppファイルを作成し、最低限の関数とクラスを
定義する必要があります。

ビルドするための最低限必要な定義については
「最小構成のVST作成方法」に記載しております。

・最小構成のVST作成方法
  http://www39.atwiki.jp/vst_prog/pages/70.html

・最小構成のVST(ソースコード全体)
  http://www39.atwiki.jp/vst_prog/pages/73.html

22ken:2012/01/28(土) 12:28:53
早速のご教示ありがとうございました。
「簡単な音源(VSTi)の作成」ページのMySynthSampleVSTをビルドすることができました。
これからソースコードの内容を勉強させていただきたいと思います。

VST、VSTiに関してはこれから学ぶところですが、
私もまた違ったアプローチでバーチャルアナログ音源を作っています。
よろしければ見てみてください。

・What is Flageoboard?
  http://mbed.org/users/kentasaito/notebook/what-is-flageoboard/

・Me playing Flageoboard (YouTube)
  http://www.youtube.com/watch?v=chereNrys5Q

23管理人:2012/01/29(日) 11:20:45
kenさん

無事解決してよかったです。

すでにマイコンを使って作られたことがあるんですね.
VSTの規格自体はあまり難しく無いと思いますので
すぐに作成できると思います。

ほかに不明点がありましたらいつでもご質問ください。
また、書けていない内容(MIDI処理とかフィルタとか…)も
ありますのでそちらもわかる範囲で答えさせていただきます。

これからもよろしくお願いいたします。


新着レスの表示


名前: E-mail(省略可)

※書き込む際の注意事項はこちら

※画像アップローダーはこちら

(画像を表示できるのは「画像リンクのサムネイル表示」がオンの掲示板に限ります)

掲示板管理者へ連絡 無料レンタル掲示板