gpt4 book ai didi

c++ - C++如何调用Objective-C的方法?

转载 作者:行者123 更新时间:2023-11-28 02:43:14 26 4
gpt4 key购买 nike

我正在使用 AudioQueue 来分析音频。我看到了 Apple 的 SpeakHere 示例。

我知道使用回调函数获取inbuffer->mAudioData中的音频数据。问题是当我获得音频数据时,我想更新 UI 上的频谱。 UI 是使用 Objective-C 的代码,SpeakHere 代码使用 C++。不知道如何在回调函数中调用UI方法,传递mAudioData。

这里是回调函数:

// AudioQueue callback function, called when an input buffers has been filled.

void AQRecorder::MyInputBufferHandler( void * inUserData,
AudioQueueRef inAQ,
AudioQueueBufferRef inBuffer,
const AudioTimeStamp * inStartTime,
UInt32 inNumPackets,
const AudioStreamPacketDescription* inPacketDesc)
{
AQRecorder *aqr = (AQRecorder *)inUserData;
aqr->currentQueueBufferRef = inBuffer;

try {
if (inNumPackets > 0) {
// write packets to file
XThrowIfError(AudioFileWritePackets(aqr->mRecordFile, FALSE, inBuffer->mAudioDataByteSize,
inPacketDesc, aqr->mRecordPacket, &inNumPackets, inBuffer->mAudioData),
"AudioFileWritePackets failed");

***//Here I want to call Objective c Method and pass the value.***

}

// if we're not stopping, re-enqueue the buffe so that it gets filled again
if (aqr->IsRunning())
XThrowIfError(AudioQueueEnqueueBuffer(inAQ, inBuffer, 0, NULL), "AudioQueueEnqueueBuffer failed");
} catch (CAXException e) {
char buf[256];
fprintf(stderr, "Error: %s (%s)\n", e.mOperation, e.FormatError(buf));
}
}

最佳答案

如果你想在同一个文件中同时使用C++Objective-C,请确保文件的扩展名是.mm 而不是 .m.cpp。这样,编译器就知道它是 Objective-C++,并且编译没有问题。

有人在这篇博文中详细解释了它:Mixing Objective-C, C++ and Objective-C++

关于c++ - C++如何调用Objective-C的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25235961/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com