2

我是 Objective-C 和 iOS 的新手,我需要你的帮助。我想获取我的麦克风音频输入并将其直接重定向到扬声器输出中(不通过文件)。

我在这里:使用 AVCaptureSession 获取我的麦克风输入和 AudioQueue 尝试播放输出缓冲区。但是我在互联网上找不到任何东西,似乎没有人需要这样做。我是不是误会了什么?我只想知道如何将我的 CMsampleBufferRef 转换为我的 AudioQueue 可以用来播放的良好 pcmbuffer(以及在我的 AudioQueue 中修改什么以将其与我的 AVCaptureSession 链接)。这是好方法吗?我发现有很多东西可以将输出缓冲区写入文件,但是对于即时执行某些操作,什么都没有,或者只有我还不能使用的简短解释。

请您用示例代码给我非常详细的解释,因为我是新手。现在我可以让我的 AVCaptureSession 工作(CMSampleBufferRef 中有一些东西),我可以用我的 AudioQueue 播放一个文件,但是当我想链接这两个文件时,我不知道该怎么做。

提前致谢

4

1 回答 1

0

请参阅下面我编写的代码(使用我在网上找到的参考资料)。我还没有彻底测试过。

-(void)captureOutput:(AVCaptureOutput *)captureOutput didOutputSampleBuffer:(CMSampleBufferRef)sampleBuffer fromConnection:(AVCaptureConnection *)connection
{
    AudioBufferList bufList;
    CMBlockBufferRef blockBuffer;
    CMSampleBufferGetAudioBufferListWithRetainedBlockBuffer(sampleBuffer, NULL, &bufList, sizeof(bufList), NULL, NULL, kCMSampleBufferFlag_AudioBufferList_Assure16ByteAlignment, &blockBuffer);


    NSMutableData *currentSample = nil;
    for(int i = 0; i < bufList.mNumberBuffers; i++)
    {
        if(i == 0)
        {
            currentSample = [NSMutableData dataWithBytes:bufList.mBuffers[i].mData length:bufList.mBuffers[i].mDataByteSize];
        }else
        {
            [currentSample appendBytes:bufList.mBuffers[i].mData length:bufList.mBuffers[i].mDataByteSize];
        }
    }
}
于 2013-03-12T02:24:29.070 回答