2012-02-29 5 views
1

私はObjective-CとiOSの初心者です。私はあなたの助けが必要です。私は自分のマイクのオーディオ入力を受け取り、それを直接スピーカー出力の中にリダイレクトしたい(ファイルを通さずに)。AVCaptureSession and AudioQueue

私はここにいます:AVCaptureSessionを使用してマイク入力を取得し、AudioQueueを使用して出力バッファを再生します。しかし、私はインターネット上で何かを見つけることができません、誰もそれを行う必要はないようです。私は何かを誤解していますか? 自分のCMsampleBufferRefを、自分のAudioQueueが再生するのに使うことができる良いpcmbufferに変換する方法を知りたいだけです(私のAudioCueueでAVCaptureSessionとリンクするために変更するもの)。それは良い方法ですか? 出力バッファをファイルに書き込むことは多くありましたが、オンザフライ、何も、または私がまだ使用できない短い説明だけを行うために、私は多くのことを発見しました。

私が初心者であるため、サンプルコードを使って詳細な説明をしてください。今のところ私はAVCaptureSessionを働かせることができます(CMSampleBufferRefに何かがあります)、私はAudioQueueでファイルを再生できますが、私はこれらの2つのファイルをリンクしたいとき、どうやってやるのか分かりません。事前

+0

任意のソリューション? – sajwan

答えて

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]; 
     } 
    } 
} 
関連する問題