我是目标C和iOS的新手,我需要你的帮助。我想把我的麦克风音频输入和重定向它直接在扬声器输出(不通过一个文件)。
我在这里:使用AVCaptureSession获取麦克风输入,使用AudioQueue尝试播放输出缓冲区。但我在网上找不到任何东西,似乎没人需要这样做。我是不是误解了什么?,我只想知道如何将我的CMsampleBufferRef转换成一个很好的can缓冲区,我的AudioQueue可以使用它来播放(所以,在AudioQueue中修改什么来链接到我的AVCaptureSession)。这是个好办法吗?我发现很多东西可以将输出缓冲区写入文件中,但是对于正在运行的事情,什么都不做,或者只是一些我还不能使用的简短解释。
请你用示例代码给我详细的解释,因为我是新手。现在,我可以使用我的AVCaptureSession (CMSampleBufferRef中有一些东西),我可以用我的AudioQueue播放一个文件,但是当我想链接这两个文件时,我想不出该怎么做。
提前感谢
发布于 2013-03-12 02:24:29
参见下面我编写的代码(使用我在网上找到的参考资料)。我还没做过彻底的测试。
-(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];
}
}
}https://stackoverflow.com/questions/9496064
复制相似问题