小编Jos*_*ase的帖子

仅在 MacOS Sierra 上调用 AudioConverterFillComplexBuffer 会导致 CrashIfClientProvidedBogusAudioBufferList

我有一个音频程序,它使用以下代码调用 AudioConverterFillComplexBuffer:

OSStatus error = AudioConverterFillComplexBuffer(recorderObj->audioConverter,
                                                     MyAudioConverterCallback,
                                                     (__bridge void *)playerLocal,
                                                     &ioOutputDataPackets,
                                                     convertedData,
                                                     &streamDesc);
Run Code Online (Sandbox Code Playgroud)

当此代码在 10.6-10.11 上运行时,它工作正常。当代码在 10.12 上运行时,它会崩溃并显示以下消息

Crashed Thread:        16  com.apple.audio.IOThread.client

Exception Type:        EXC_BAD_INSTRUCTION (SIGILL)
Exception Codes:       0x0000000000000001, 0x0000000000000000
Exception Note:        EXC_CORPSE_NOTIFY

Termination Signal:    Illegal instruction: 4
Termination Reason:    Namespace SIGNAL, Code 0x4
Terminating Process:   exc handler [0]
Run Code Online (Sandbox Code Playgroud)

调用堆栈以 CrashIfClientProvidedBogusAudioBufferList 结束。

大多数文章、文档和邮件列表都会说我有一个糟糕的输出缓冲区,但在我的一生中,我不知道我会做错什么,但我的代码仍然可以在所有版本的 MacOS 上运行,但最新版本。这是我设置缓冲区的方式:

AudioBufferList *convertedData = (AudioBufferList*)malloc(sizeof(AudioBufferList) * 2);

convertedData->mNumberBuffers = 1;
convertedData->mBuffers[0].mNumberChannels =  2;
convertedData->mBuffers[0].mDataByteSize = 64 * 1024;
convertedData->mBuffers[0].mData = (UInt8 *)malloc(sizeof(UInt8) * 64 * 1024); …
Run Code Online (Sandbox Code Playgroud)

objective-c core-audio

5
推荐指数
1
解决办法
1176
查看次数

标签 统计

core-audio ×1

objective-c ×1