音频队列:AudioQueueStart 返回 -50

Posted

技术标签:

【中文标题】音频队列:AudioQueueStart 返回 -50【英文标题】:Audio Queue : AudioQueueStart returns -50 【发布时间】:2012-09-29 05:41:41 【问题描述】:

我正在尝试在 GLES 应用程序 (Unity3d) 中编写麦克风功率计模块。 它在 UIKit 应用程序中运行良好。但是当我集成到我的unity3d项目中时,AudioQueue无法启动属性。调用AudioQueueStart的结果代码总是-50,但是-50是什么意思呢?我在 ios 开发者库中找不到参考。

我已经搜索过这个问题,并且知道有人在 cocos2d 应用程序中遇到了同样的问题。也许这有一些相关性。

这是我的启动音频队列代码:

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

【问题讨论】:

错误-50表示:“(paramErr):用户参​​数列表错误”。为此,您可以使用命令行 macerror,或使用 NSError 参见 ***.com/questions/14699604/… 【参考方案1】:

以下对我有用:

添加这个:

AVAudioSession * session = [AVAudioSession sharedInstance];

    if (!session) printf("ERROR INITIALIZING AUDIO SESSION! \n");
    else


        [session setCategory:AVAudioSessionCategoryPlayAndRecord error:&nsError];

        if (nsError) printf("couldn't set audio category!");



        [session setActive:YES error:&nsError];
        if (nsError) printf("AudioSession setActive = YES failed");
    

AudioQueueStart(myQueue, NULL);之前

【讨论】:

我爱你!!!【参考方案2】:

您是否检查过 AudioSession 是处于 AVAudioSessionCategoryRecord 还是 AVAudioSessionCategoryPlayAndRecord 模式?

http://developer.apple.com/library/ios/#documentation/Audio/Conceptual/AudioSessionProgrammingGuide/AudioSessionCategories/AudioSessionCategories.html#//apple_ref/doc/uid/TP40007875-CH4-SW1

【讨论】:

以上是关于音频队列:AudioQueueStart 返回 -50的主要内容,如果未能解决你的问题,请参考以下文章

AudioQueueStart 返回 561015905 (AVAudioSessionErrorCodeCannotStartPlaying)

使用 AudioQueueStart() 时的延迟

iPad 上的 AudioQueueStart() 问题

AudioQueueStop 后音频队列无法重新启动

如何检查音频队列中的音乐是不是正在播放或暂停

iOS 通过Audio Queue播放音频数据