2012-02-29 64 views
1

我在Objective-C和iOS newbbie,我需要你的帮助。我想将我的麦克风音频输入并直接在扬声器输出内重定向(无需通过文件)。AVCaptureSession和AudioQueue

我在这里:使用AVCaptureSession让我的麦克风输入接口及AudioQueue试玩输出缓冲区。但我在互联网上找不到任何东西,似乎没有人需要这样做。我误解了什么吗? 我只是想知道如何我CMsampleBufferRef转换成良好pcmbuffer我AudioQueue可以用它来播放(因此,如何在我的AudioQueue修改它与我的AVCaptureSession链接)。这是一个好方法吗? 我发现很多东西在OutputBuffer中写入一个文件,但这样做对即时,什么都没有,或者只有很短的解释,我不是能够尚未使用的东西。

能不能请您给我的示例代码非常详细的解释,因为我是一个newbbie。现在我可以使用我的AVCaptureSession(CMSampleBufferRef中有东西),我可以用我的AudioQueue播放一个文件,但是当我想链接这两个文件时,我无法弄清楚该怎么做。

在此先感谢

+0

任何解决方案? – sajwan 2013-01-18 16:48:54

回答

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]; 
     } 
    } 
}