2

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

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

私は初心者なので、サンプルコードで非常に詳細な説明をお願いします。今のところ、AVCaptureSession を動作させることができます (CMSampleBufferRef に何かがあります)。AudioQueue でファイルを再生できますが、これら 2 つをリンクしたい場合、どうすればよいかわかりません。

前もって感謝します

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 に答える