ios - 仅使用 inNumberFrames 信息在 AudioBufferList 中分配缓冲区 iOS

标签 ios callback malloc audiounit audiobuffer

我有一个录音机回调 (kAudioOutputUnit_SetInputCallback),我需要在其中分配 AudioBufferList 中的缓冲区,其中只有一个回调返回的信息 inNUmberFrames。 我如何为此分配内存?如何仅使用帧数来确定有多少数据可用?

最佳答案

OSStatus AudioCapturer::recordingCallback(void *inRefCon, 
                              AudioUnitRenderActionFlags *ioActionFlags, 
                              const AudioTimeStamp *inTimeStamp, 
                              UInt32 inBusNumber, 
                              UInt32 inNumberFrames, 
                              AudioBufferList *ioData) {

AudioCapturer *capturer=(AudioCapturer * )inRefCon;

    AudioBuffer buffer;
    buffer.mNumberChannels = 1;
    buffer.mDataByteSize = inNumberFrames * 2;
    buffer.mData = malloc( inNumberFrames * 2 );

    // Put buffer in a AudioBufferList that is to be filled in the AudioUnitRender 
    AudioBufferList bufferList;
    bufferList.mNumberBuffers = 1;
    bufferList.mBuffers[0] = buffer;

    // Then:
    // Obtain recorded samples
    OSStatus status;
    status = AudioUnitRender(capturer->m_audioUnit, 
                             ioActionFlags, 
                             inTimeStamp, 
                             inBusNumber, 
                             inNumberFrames, 
                             &bufferList);
    capturer->checkStatus(status);


    //use the bufferlist data and free the allocated buffer
    free(bufferList.mBuffers[0].mData);

 return noErr;
}

关于ios - 仅使用 inNumberFrames 信息在 AudioBufferList 中分配缓冲区 iOS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10748609/

相关文章:

ios - MBProgressHUD 无法显示

ios - 如何让 Xcode 读取 UITextFields

javascript - 如何从内部函数返回值到外部函数

c - 尝试使用 malloc 创建多个小型多维数组

c - 如何在c中创建结构的新实例

ios - 即使我指定了 "Development Certificate"配置文件,xcodebuild 存档仍然尝试使用 "AdHoc Distribution"

ios - 我为 Real iOS 设备设置 Appium,无法启动 WebDriverAgent,因为 xcodebuild 失败,代码为 65

python - 将参数传递给 Python 中的回调函数

Swift 如何在退出函数之前等待回调完成?

c - 处理信号时分配内存的最佳方法是什么?