2011-06-26 9 views
0

私は、ミスワトソンの簡単な代替手段を開発することによってC++に飛び込むことにしたPHPプログラマです。 MIDIファイルをVST経由で出力します。ミディライブラリを使用してイベントを解析し、Vector C++に格納

私はSteinberg VST SDKを使い始めました。私はこのMIDIライブラリを使っています:https://ccrma.stanford.edu/software/stk/index.html

私はベクター、特にMIDIイベントを格納するベクターに固執しています。ここではクリーンアップするためのコードの最後のビットが(私はC++への総noobのだと、おそらく、この間違ったのほとんどをやっているに注意してください)です。

std::string midiPath = "C:\\creative\\midi\\m1.mid"; 

if (argc > 1) { 
    midiPath = argv[1]; 
} 

//MidiFileIn::MidiFileIn(midiPath); 
stk::MidiFileIn::MidiFileIn(midiPath); 

//std::vector<_Ty> * midiEvents; 
std::vector<_Ty> midiEvents(200); 

stk::MidiFileIn::getNextEvent(midiEvents, 0); 
//char* midiEvents[200]; 
//VstEvents* midiEvents; 
//processMidi(effect, VstEvents*); 

const char* wavPath = argv[2]; 
//processAudio(effect, 0, x, x); 

、ここではエラーです:

1>c:\users\andrew\downloads\vst_sdk2_4_rev2\vstsdk2.4\public.sdk\samples\vst2.x\minihost\source\score.cpp(370): error C2065: '_Ty' : undeclared identifier 
1>c:\users\andrew\downloads\vst_sdk2_4_rev2\vstsdk2.4\public.sdk\samples\vst2.x\minihost\source\score.cpp(370): error C2514: 'std::vector' : class has no constructors 
1>   c:\program files (x86)\microsoft visual studio 10.0\vc\include\vector(480) : see declaration of 'std::vector' 
1>c:\users\andrew\downloads\vst_sdk2_4_rev2\vstsdk2.4\public.sdk\samples\vst2.x\minihost\source\score.cpp(372): error C2664: 'stk::MidiFileIn::getNextEvent' : cannot convert parameter 1 from 'std::vector' to 'std::vector<_Ty> *' 
1>   with 
1>   [ 
1>    _Ty=unsigned char 
1>   ] 
1>   No user-defined-conversion operator available that can perform this conversion, or the operator cannot be called 
1> 

したがって、_Tyコンストラクタはどのように使用しますか?正しい軌道に乗っているのか、ちょうど狂っていますか?

+0

「_Ty」はどこに定義されていますか? – jonsca

+0

それは...私はそれが何をすべきか分からない。私が間違っているが、ベクトルが動的にサイズ変更できる配列のようになっていると私を訂正しますか? – grandcameo

+0

そこにはいくつかの追加の機械がありますが、本質的にはそうです。私は '_Ty'作品についてはわかりません(Googleableですが、私が見つけた状況は適用されていません)。あなたの 'getNextEvent'メソッドは'ベクトル<_Ty> * 'を期待していますので、' midiEvents * 'をインスタンス化する必要があります(コメント行が足りないように宣言する必要があります)。 – jonsca

答えて

1

@the_mandrillは正しいですが、私はちょうどあなたがVstEventsVstEvent*タイプを使用していないされなければならないことに注意したいです。 VstEvents構造体にはVstEventというオブジェクトのリストが含まれており、おそらくそれらをベクターに分解したいと考えています。だから、あなたのためにいくつかの擬似コード:

// Initialization 
std::vector<VstEvent *> midiEvents(); 

// Somewhere inside of stk::MidiFileIn::getNextEvent() 
while(youReadTheMidiEvents) { 
    VstEvents *inEvents = yourReadMidiEventsFunction(); 
    for(int i = 0; i < inEvents->numEvents; i++) { 
    midiEvents.push_back(inEvents->events[i]); 
    } 
} 

// Somewhere much later in your destructor 
for(int i = 0; i < midiEvents.size(); i++) { 
    free(midiEvents.at(i)); 
} 
midiEvents.clear(); 

私はあなたが実際にファイル(したがってyour*もの)からMIDIイベントを読んでいるかわかりませんが、上記のコードは、単にあなたが何とかVstEvents配列を取り戻すしていることを想定しています。それで、あなたのベクトルにポインタをどのように格納しなければならないかについての簡潔な概要だけを考えてみましょう。

2

_Tyは、テンプレートパラメータの単なるプレースホルダです。あなたはテンプレート化されたクラスであるstd::vector<_Ty>を持っていますが、それに使うクラスを定義する必要があります。この場合、それはあなたのMIDIイベントのクラスが何であれだろう - おそらくVstEvents

関連する問題