所以,我正在使用 Arduino 的GinSing库,但遇到了问题。他们的代码中有一大块是从变量名(或对象?或其他东西?)中提取值。我已经阅读了关于变量名中有值的信息(堆栈溢出),我知道你不应该这样做,但我被困住了!
我不是一个足够好的程序员来修改他们的代码,但我仍然想使用它(GinSing shield 很酷)。以下是它们的用法示例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;