AudioQueue 不会产生任何声音。可能是啥问题? [复制]

Posted

技术标签:

【中文标题】AudioQueue 不会产生任何声音。可能是啥问题? [复制]【英文标题】:AudioQueue doesn't produce any sound. What the problem can be? [duplicate]AudioQueue 不会产生任何声音。可能是什么问题? [复制] 【发布时间】:2020-12-07 16:21:18 【问题描述】:

我编写了一个用于测试 AudioToolbox Queue 的小型 C++ 应用程序。我用一些随机数据填充缓冲区只是为了检查它是否有效。

static void HandleOutputBuffer(void* inUserData, AudioQueueRef queue, AudioQueueBufferRef inBuffer) 
    memset(inBuffer->mAudioData, rand() % 256, inBuffer->mAudioDataByteSize);
    throwExceptionIfError(AudioQueueEnqueueBuffer(queue, inBuffer, 0, NULL));


int main(int argc, const char * argv[]) 
    AudioQueueRef queue;
    AudiostreamBasicDescription format = 0;
    format.mBytesPerFrame = 4;
    format.mBitsPerChannel = 16;
    format.mChannelsPerFrame = 2;
    format.mFormatID = kAudioFormatLinearPCM;
    format.mFramesPerPacket = 1;
    format.mBytesPerPacket = format.mBytesPerFrame;
    format.mSampleRate = 44100;
    format.mReserved = 0;
    format.mFormatFlags =  kAudioFormatFlagIsSignedInteger |
            kAudioFormatFlagsNativeEndian |
            kLinearPCMFormatFlagIsPacked;
    throwExceptionIfError(AudioQueueNewOutput(&format, HandleOutputBuffer, NULL,
            NULL, // Use internal thread
            kCFRunLoopDefaultMode,
            0, // Reserved, must be 0
            &queue));

    AudioQueueBufferRef buffer;
    throwExceptionIfError(AudioQueueAllocateBuffer(queue, 1024, &buffer));
    buffer->mAudioDataByteSize = 1024;
    throwExceptionIfError(AudioQueueEnqueueBuffer(queue, buffer, 0, NULL));
    throwExceptionIfError(AudioQueueStart(queue, NULL));

    @autoreleasepool 
        // Setup code that might create autoreleased objects goes here.
    
    return NSApplicationMain(argc, argv);

HandleOutputBuffer 被连续调用,我检查了。但是我听不到任何声音。可能是什么问题?

【问题讨论】:

你尝试***.com/questions/3384152/…的解决方案了吗? 是的。它有助于。谢谢。我没有找到这个问题 【参考方案1】:

您的代码唯一的问题是它没有将足够的缓冲区加入队列。 AudioQueues 似乎喜欢至少有两个:

AudioQueueBufferRef buffer;
for (int i = 0; i < 2; i++) 
    throwExceptionIfError(AudioQueueAllocateBuffer(queue, 1024, &buffer));
    buffer->mAudioDataByteSize = 1024;
    throwExceptionIfError(AudioQueueEnqueueBuffer(queue, buffer, 0, NULL));

【讨论】:

以上是关于AudioQueue 不会产生任何声音。可能是啥问题? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

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

使用 AudioQueue 和 Monotouch 静态声音录制

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

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

AudioQueue 和 iOS4?

(编辑:iOS Simulator 5.x 错误)在 iOS 中使用 AudioQueue 进行声音播放时出现 EXC_BAD_ACCESS