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

はじめまして。

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

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

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

作成中のコンテンツの完成を楽しみにしています!

2管理人:2011/05/05(木) 13:27:46
shunさん書き込みありがとうございます。

管理人のやる気にムラがあり更新がよくとまります…。
作成中のコンテンツで先に完成させたほうがよいものがあれば
教えてください。がんばってやってみます。

3shun:2011/05/14(土) 22:41:50
管理人さんお返事ありがとうございます。

『最小構成のVST作成方法』の項目の中で『コンストラクタ』の項目が準備中ということのようなので、
是非、更新していただけたらと思っています。少しでも情報がほしいと思っていまして・・・^^;

もちろん、無理はなさらないでください。
このホームページのユーザーの一人として、更新を楽しみにしています!

4管理人:2011/05/15(日) 11:25:12
shunさん書き込みありがとうございます。

最小構成のVSTのコンストラクタはここ(↓)に記載しているつもりですが…
http://www39.atwiki.jp/vst_prog/pages/71.html

確か「MIDIメッセージ処理2」と「簡単な音源の作成」以外で作成中はなかったような…
詳細をご教示いただけると幸いです。

5shun:2011/05/15(日) 14:59:04
早速のご返信ありがとうございます!

もうすでに書き上げていらしたんですね。
下記のURLに『コンストラクタ(準備中)』とあったので勘違いをしてしまいました・・・

http://www39.atwiki.jp/vst_prog/pages/72.html

申し訳ありませんでした・・・^^;

6管理人:2011/05/16(月) 01:51:20
shunさん

WIKIの編集次第ではそうなるようです…
確かに「コンストラクタ(準備中)」となっていました…

ちなみにご存知だと思いますが、ここ(↓)を見ていただけると全体が見れます。
http://www39.atwiki.jp/vst_prog/pages/52.html

たいしたことないページですがこれからもよろしくお願いいたします。

7shun:2011/05/20(金) 21:29:31


質問をさせてください。
お時間がある時で構いませんので、お答えいただけませんでしょうか。

8shun:2011/05/20(金) 21:50:47
*申し訳ありません。"7"を間違えて投稿してしまいました。

こんばんわ!

3点質問をさせてください。
お時間がある時で構いませんので、お答えいただけませんでしょうか。

1点目。

http://www39.atwiki.jp/vst_prog/pages/70.html

上記のページ内の『AudioEffect* createEffectInstance()関数の作成』の項目で、
"なぜこのような関数が必要かの詳細は説明できるほどの知識がないため省略する。"
とありますが、その後何か得た情報はありましたか。


2点目。

『MyMinimumVST』などの管理人様が作成したサンプルにはmain()が見当たりません。
VSTを作成するにあたってmain()は必要ないのでしょうか。
私が使っているC++の参考書には必ずmain()があるようで、疑問に思いました。

dllファイルが生成される仕組みを教えていただきたいです。

3点目。

http://www39.atwiki.jp/vst_prog/pages/70.html

上記のページ内の『AudioEffectXクラスを継承した自作VST用クラスの作成』の項目で、
『音声信号を処理するメンバー関数ProcessReplacing()』についての記述がありました。

この関数の仮引数部分のデータ型"float**"の"**"とは何を意味しているのでしょうか。
参考書等を使って調べてみたのですが、解説が見当たりませんでした。

私がVC2008とC++の初心者ということもあり、
初歩的な質問になってしまいましたが、よろしくお願いいたします。

9管理人:2011/05/21(土) 11:42:34
shunさん

ご質問ありがとうございます。簡単に回答させていただきます。

■1点目
 説明が面倒なので省略しておりましたが大体以下の内容です。

  DLLを利用する(呼び出す)側のプログラムでDLL内のクラスを利用するには、
  利用する側のプログラムでクラスを生成(new)しなければなりません。

  しかし、DLLファイルではクラスをエクスポートできない決まり(仕様)があります。
  つまり、利用する側のプログラムから直接、DLL内にあるクラスを生成(new)することが
  できないのです。

  そのため、苦肉の策としてDLL側にDLL内のクラスを生成する関数を用意しています。

  VSTではこのクラス生成のための関数がcreateEffectInstance()関数になります。

  【イメージ】
   NG:AudioEffect* vst = new MyMinimumVST(audioMaster);
     (↑呼び出す側で上記のようにnewで生成ができない。)

   OK:AudioEffect* vst = createEffectInstance();
     (↑苦肉の策としてDLLで用意された関数を利用してvstクラスを生成する。)

■2点目
 以下の理由でVSTではmain関数は必要ありません。

  main関数はC/C++ではエントリーポイントとして定義されています。

  エントリーポイントとは、「プログラムが始まるポイント(関数)」のことです。
  つまり、C/C++ではmain関数から始まるように決めて(定義して)います。

  エントリーポイントはコンパイラ(VC++)で変更することができます。

  DLLもプログラムなので、当然エントリーポイントがありますが、DLLの場合、
  DllMain関数になっています。
  (つまりDLLを作成するときはmain関数の代わりにDllMain関数をつかいます。)

  VSTもDLLの一種なのでDllMain関数から始まる必要があるのですが、
  すでにvstplugmain.cppファイルにDllMain関数の内容が記載されているため、
  自分でVSTを作成する際には記述する必要がありません。

■3点目
 データ型 float**ですが、「floatポインタへのポインタ」という意味です。
 「ポインタのポインタ」で調べていただくとわかりやすい説明があるかと
 思います。
 (ここでの説明はご勘弁ください。ポインタの説明だけでかなりのボリュームに
 なりますので…


上記1〜3の内容は、C/C++の知識に加え、Windowsプログラムについて
ご認識いただけると、より理解が深まるかと思います。

最後に有名なWebページですのでご存知かもしれませんが、
以下ページをご紹介させていただきます。

 猫でもわかるプログラミング
 http://homepage2.nifty.com/c_lang/

10shun:2011/05/25(水) 10:46:50
お礼が遅れてしまいました・・・

翌日にはすでに解答してくださったのですね。
長文の解説をありがとうございました!

とても参考になりました^^
また何かありましたら、よろしくお願いいたします。

11shun:2011/06/03(金) 17:36:39
こんにちは!また書き込ませていただきます。2点ほど質問させてください。

http://www39.atwiki.jp/vst_prog/pages/72.html

上記ページに記述されているprocessReplacing()関数の3つの引数についてです。

①なぜfloat** inputsとfloat** outputsはなぜ2次元配列で渡されるのか。
(ドキュメントを読んだところ以上のような記述がありましたが、仕組みが理解できませんでした)

②sampleFramesに代入されている数値はなにか。
(sampleframeは変数ですから何かしら数値が代入されていると思うのですが、何が代入されているか理解できませんでした)

お時間があるときで結構ですので、ご回答いただけたらと思います。
最後まで読んでいただき、ありがとうございました。

12管理人:2011/06/04(土) 14:24:41
shunさん

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

まず②から先に記載させていただきますが以下のような内容になります。

②sampleFramesは記載しているとおり、各チャンネルの入力音声信号、
 出力音声信号のバッファサイズになります。

①inputs,outputsの2次元配列の各要素は
 記載しているとおり、以下のような意味になっています。
  inputs[チャンネル数][音声バッファの長さ]
  outputs[チャンネル数][音声バッファの長さ]

 サンプルで扱っているのはステレオばかりですが、
 チャンネル数はVSTによって異なります。(モノラル、ステレオ、5.1ch等)

 また音声バッファの長さはホストアプリケーション側で決定されます。

 これらに対応するため、2次元配列である必要があります。

若干質問の意図がわからないので回答がずれているかもしれません。
質問の詳しい意図をいただけると幸いです。

13shun:2011/06/04(土) 21:37:45
今回も、早速の解答をありがとうございました^^
毎回とても助かっています。ありがとうございます。

①float** inputsとfloat** outputsが2次元配列で渡される仕組みを知りたい、ということです。
(この仕組みはポインタをしっかりと理解していなければ理解できないのではないか、と私なりに考えているのですが、いかがでしょうか?)


②つまり『バッファサイズはホストアプリケーション側で決定されるため、プログラム内でsampleFrameに具体的な定数を代入する必要はない』
という理解で間違いはありませんでしょうか。

宜しくお願い致します!

14管理人:2011/06/05(日) 12:56:03
shunさんのご認識のとおりです。

①ポインタと配列について理解できれば解決すると思われます。

②VST側でsampleFrameに具体的な定数を代入する必要はありません


新着レスの表示


名前: E-mail(省略可)

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

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

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

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