I googled around and I find a million results to this subject. But none of the pages helps me. I think that I have a very common problem. I'm playing around with audio programming especially working with audio queues. The purpose of my program does not matter for explaining the problem. But in a nutshell: I get an error when I try to call an objective-c function from c++ code. So here is my code that contains the error: AudioRecorder.h:
#import <Foundation/Foundation.h> @interface AudioRecorder : NSObject { } -(void)setup; -(void)startRecording; -(void)endRecording; -(void)playAlarmSound; @end And this is the implementation: AudioRecorder.mm:
#import "AudioRecorder.h" #include <AudioToolbox/AudioToolbox.h> #include <iostream> using namespace std; @implementation AudioRecorder static const int kNumberBuffers = 3; ... static void HandleInputBuffer (void *aqData, AudioQueueRef inAQ, AudioQueueBufferRef inBuffer, const AudioTimeStamp *inStartTime, UInt32 inNumPackets, const AudioStreamPacketDescription *inPacketDesc ) { AQRecorderState *pAqData = (AQRecorderState *) aqData; if (inNumPackets == 0 && pAqData->mDataFormat.mBytesPerPacket != 0) inNumPackets = inBuffer->mAudioDataByteSize / pAqData->mDataFormat.mBytesPerPacket; UInt32 size; AudioQueueGetPropertySize ( inAQ, kAudioQueueProperty_CurrentLevelMeter, &size ); char* levelMeterData = new char[size]; AudioQueueGetProperty ( inAQ, kAudioQueueProperty_CurrentLevelMeter, levelMeterData, &size ); AudioQueueLevelMeterState* meterState = reinterpret_cast<AudioQueueLevelMeterState*>(levelMeterData); cout << "mAveragePower = " << meterState->mAveragePower << endl; cout << "mPeakPower = " << meterState->mPeakPower << endl; delete levelMeterData; [self playAlarmSound]; //<--- here I get the error: Use of undeclared identifier 'self' if (pAqData->mIsRunning == 0) return; AudioQueueEnqueueBuffer ( pAqData->mQueue, inBuffer, 0, NULL ); } ... -(void)playAlarmSound { NSLog(@"Alarmsound...."); } When I omit "[self playAlarmSound];" then everything works fine. So how do I call this Objective-C function from my C++ code?