それで、Arduino用のGinSingライブラリを使用していますが、問題が発生しました。変数名 (またはオブジェクト? または何か?) から値を抽出するコードのチャンクがあります。ここで変数名に値を持つことについて読んだことがあります (スタック オーバーフロー)。
私は彼らのコードを変更できるほど優れたプログラマーではありませんが、それでも使用したいと思っています (GinSing シールドはかなりクールです)。の使用例を次に示しますs->setEnvelope
。
s->setEnvelope (OSC_1, AT_100MS, 1.0f, DR_100MS, 1.0f, DR_100MS, 0.0f);
これらの値をランダムに変更したいので、これを作成しました:
String adsrMake(String type, int attack){
return type + attack + "MS";
}
そして、私はこれを行います:
s->setEnvelope (OSC_1, adsrMake("AT_",time/2), etc..
しかし、それは好きではありません。文字列ではなく、名前 (?) か何かが必要です。私が得るエラーは、それが欲しいと言います:
void GinSingSynth::setEnvelope(GSSynthOsc, GSAttackDur, float, GSDecRelDur, float, GSDecRelDur, float)
.cpp
ファイルを開いたところ、反対側でこれを行っていると表示されています。
void GinSingSynth::setEnvelope (GSSynthOsc oscIdx ,
GSAttackDur attackDur , float attackAmp,
GSDecRelDur decayDur , float decayAmp ,
GSDecRelDur releaseDur, float releaseAmp )
{
ubyte voiceIdx = OscIdxToVoiceIdx(oscIdx);
// Construct ADR bytes ( high four bits amplitude, low four bits duration )
ubyte atkByte = ( (ubyte) ( 0x0f * attackAmp ) << 4 ) + attackDur;
ubyte dcyByte = ( (ubyte) ( 0x0f * decayAmp ) << 4 ) + decayDur;
ubyte rlsByte = ( (ubyte) ( 0x0f * releaseAmp ) << 4 ) + releaseDur;