解释来自 Superpowered CrossExample for Android 的 C++ 代码
Posted
技术标签:
【中文标题】解释来自 Superpowered CrossExample for Android 的 C++ 代码【英文标题】:Explain C++ code from Superpowered CrossExample for Android 【发布时间】:2016-12-16 01:22:36 【问题描述】:此代码出现在来自superpowered.com 的CrossExample 中:
static void playerEventCallbackA(void *clientData, SuperpoweredAdvancedAudioPlayerEvent event, void * __unused value)
if (event == SuperpoweredAdvancedAudioPlayerEvent_LoadSuccess)
SuperpoweredAdvancedAudioPlayer *playerA = *((SuperpoweredAdvancedAudioPlayer **)clientData);
playerA->setBpm(126.0f);
playerA->setFirstBeatMs(353);
playerA->setPosition(playerA->firstBeatMs, false, false);
;
playerA = new SuperpoweredAdvancedAudioPlayer(&playerA , playerEventCallbackA, samplerate, 0);
playerA->open(path, fileAoffset, fileAlength);
谁能帮我理解if
语句中的第一行?特别是,我如何解释作业的右侧?
*((SuperpoweredAdvancedAudioPlayer **)clientData)
【问题讨论】:
【参考方案1】:clientData
作为void pointer
传递。后来,它被转换为SuperpoweredAdvancedAudioPlayer
类型的pointer to pointer
。我想clientData
在将其传递给函数之前就是该类型,这就是需要强制转换的原因。我不知道为什么使用这个void*
而不是SuperpoweredAdvancedAudioPlayer**
。不好,但并不罕见。
名为playerA
的变量是指向SuperpoweredAdvancedAudioPlayer
类型对象的指针。取消对指向指针的指针的引用,您将获得一个指向SuperpoweredAdvancedAudioPlayer
对象的指针,与playerA
的类型相同。
请注意,playerA
仅在 if 块内声明,它的生命在那里结束。块外还有另一个playerA
,必须在将其分配给任何东西之前声明。
【讨论】:
以上是关于解释来自 Superpowered CrossExample for Android 的 C++ 代码的主要内容,如果未能解决你的问题,请参考以下文章
当 Superpowered Reverb 与 Audio Graph 一起使用时,处理的音频非常嘈杂
通过 BPM 将音轨分割成片段,并使用 Superpowered iOS 分析每个片段