AudioQueue 不输出任何声音

Posted

技术标签:

【中文标题】AudioQueue 不输出任何声音【英文标题】:AudioQueue does not output any sound 【发布时间】:2010-08-01 23:29:40 【问题描述】:

我在 iPhone 实验中无法获得声音输出,而且我没有想法。

这是我填充音频队列缓冲区的回调

void AudioOutputCallback(void *user, AudioQueueRef refQueue, AudioQueueBufferRef inBuffer)

     NSLog(@"callback called");
     inBuffer->mAudioDataByteSize = 1024;

     gme_play((Music_Emu*)user, 1024, (short *)inBuffer->mAudioData);

     AudioQueueEnqueueBuffer(refQueue, inBuffer, 0, NULL);

我使用以下 sn-p 设置音频队列

    // Create stream description
    AudiostreamBasicDescription streamDescription;
    streamDescription.mSampleRate = 44100;
    streamDescription.mFormatID = kAudioFormatLinearPCM;
    streamDescription.mFormatFlags = kLinearPCMFormatFlagIsSignedInteger | kLinearPCMFormatFlagIsPacked;
    streamDescription.mBytesPerPacket = 1024;
    streamDescription.mFramesPerPacket = 1024 / 4;
    streamDescription.mBytesPerFrame = 2 * sizeof(short);
    streamDescription.mChannelsPerFrame = 2;
    streamDescription.mBitsPerChannel = 16;

    AudioQueueNewOutput(&streamDescription, AudioOutputCallback, theEmu, NULL, NULL, 0, &theAudioQueue);

    OSStatus errorCode = AudioQueueAllocateBuffer(theAudioQueue, 1024, &someBuffer);

    if( errorCode )
    
        NSLog(@"Cannot allocate buffer");
    

    AudioOutputCallback(theEmu, theAudioQueue, someBuffer);

    AudioQueueSetParameter(theAudioQueue, kAudioQueueParam_Volume, 1.0);

    AudioQueueStart(theAudioQueue, NULL);

我正在使用的库正在输出线性 PCM 16bit 44hz。

【问题讨论】:

【参考方案1】:

我通常使用 3 个缓冲区。您至少需要 2 个,因为当一个被播放时,另一个被您的代码填充。如果您只有一个,则没有足够的时间来填充相同的缓冲区并将其重新排入队列并无缝播放。所以它可能只是停止你的队列,因为它用完了缓冲区。

【讨论】:

以上是关于AudioQueue 不输出任何声音的主要内容,如果未能解决你的问题,请参考以下文章

AudioQueue 读取输入音量

入队数据包延迟时,IOS AudioQueue 不播放

在 AudioQueue 录制时播放警报声音(振动)

使用 AudioQueue 和 Monotouch 静态声音录制

AVCaptureSession 和 AudioQueue

如何降低 iphone 的 sdk Audioqueue 的声音?