GLES アプリ (Unity3d) でマイク パワー メーター モジュールを作成しようとしています。UIKit アプリケーションでは問題なく動作します。しかし、unity3d プロジェクトに統合すると、AudioQueue はプロパティを開始できません。AudioQueueStart を呼び出す結果コードは常に -50 ですが、-50 とはどういう意味ですか? iOS Developer Library でリファレンスが見つかりません。
この問題について調べたところ、cocos2d アプリケーションで同じ問題を抱えている人がいることを知っています。たぶん、これにはいくつかの関連性があります。
Start Audio Queue のコードは次のとおりです。
UInt32 ioDataSize = sizeof(sampleRate);
AudioSessionGetProperty(kAudioSessionProperty_CurrentHardwareSampleRate, &ioDataSize, &sampleRate); //returns noErr
format.mSampleRate = sampleRate;
format.mFormatID = kAudioFormatLinearPCM;
format.mFormatFlags = kAudioFormatFlagIsSignedInteger | kAudioFormatFlagIsPacked;
format.mFramesPerPacket = format.mChannelsPerFrame = 1;
format.mBitsPerChannel = 16;
format.mBytesPerPacket = format.mBytesPerFrame = 2;
AudioQueueNewInput(&format, listeningCallback, self, NULL, NULL, 0, &queue); //returns noErr
AudioQueueBufferRef buffers[3];
for (NSInteger i = 0; i < 3; ++i) {
AudioQueueAllocateBuffer(queue, 735, &buffers[i]); //returns noErr
AudioQueueEnqueueBuffer(queue, buffers[i], 0, NULL); //returns noErr
}
levels = (AudioQueueLevelMeterState *)calloc(sizeof(AudioQueueLevelMeterState), format.mChannelsPerFrame);
UInt32 trueValue = true;
AudioQueueSetProperty(queue, kAudioQueueProperty_EnableLevelMetering, &trueValue, sizeof(UInt32)); //returns noErr
AudioQueueStart(queue, NULL); //returns -50