代码之家  ›  专栏  ›  技术社区  ›  P i

核心音频:使用渲染回调传递的奇怪问题

  •  0
  • P i  · 技术社区  · 15 年前

    我正在使用RemoteIO音频单元通过将呈现回调附加到输出总线(即扬声器)的输入范围来实现音频传递。

    一切顺利。。。

    OSStatus RenderTone(
                        void *                      inRefCon, 
                        AudioUnitRenderActionFlags  * ioActionFlags, 
                        const AudioTimeStamp        * inTimeStamp, 
                        UInt32                      inBusNumber, 
                        UInt32                      inNumberFrames, 
                        AudioBufferList             * ioData)
    
    {   
        SoundEngine * soundEngine = (SoundEngine *) inRefCon;
    
        // grab data from the MIC (ie fill up ioData)
        AudioUnit thisUnit = soundEngine->remoteIOUnit->audioUnit;
        OSStatus err = AudioUnitRender(thisUnit, 
                                       ioActionFlags, 
                                       inTimeStamp, 
                                       1, 
                                       inNumberFrames, 
                                       ioData);
        if (result)
        {
            printf("Error pulling mic data");
        }
    
        assert(ioData->mNumberBuffers > 0);
    
        // only need the first buffer
        const int channel = 0;
        Float32 * buff = (Float32 *) ioData->mBuffers[channel].mData;
    }
    

    直到我加上最后一行。

        Float32 * buff = (Float32 *) ioData->mBuffers[channel].mData;
    

    有了这条线,没有错误,只是沉默。如果没有它,我可以在麦克风前用手指点击,然后在耳机里听到声音。

    编辑:

    怎么回事?

    1 回复  |  直到 15 年前
        1
  •  0
  •   P i    15 年前

    问题是第一次启动回调时,来自麦克风的数据请求失败。

    我应该做的是检查返回值,如果不成功就返回(即退出回调)

    可能是因为我访问了无效的数据