2014-11-09 41 views
2

我想下面的代碼轉換爲斯威夫特:AudioBufferList在斯威夫特

CMSampleBufferRef sampleBuffer = [assetOutput copyNextSampleBuffer]; 

CMBlockBufferRef blockBuffer; 

AudioBufferList audioBufferList; 

CMSampleBufferGetAudioBufferListWithRetainedBlockBuffer(sampleBuffer, NULL, &audioBufferList, sizeof(AudioBufferList), NULL, NULL, kCMSampleBufferFlag_AudioBufferList_Assure16ByteAlignment, &blockBuffer); 

for (NSUInteger i = 0; i < audioBufferList.mNumberBuffers; i++) { 
    AudioBuffer audioBuffer = audioBufferList.mBuffers[i]; 
    [audioStream writeData:audioBuffer.mData maxLength:audioBuffer.mDataByteSize]; 
} 

CFRelease(blockBuffer); 
CFRelease(sampleBuffer); 

我似乎無法遍歷audioBuffer列表不管我怎麼努力。有人有答案嗎?

回答

0

守則斯威夫特 - 3

var sampleBuffer: CMSampleBuffer? = assetOutput.copyNextSampleBuffer() 
let audioStream = OutputStream() 
var blockBuffer: CMBlockBuffer? 
var audioBufferList = AudioBufferList() 

CMSampleBufferGetAudioBufferListWithRetainedBlockBuffer(sampleBuffer, nil, &audioBufferList, MemoryLayout<AudioBufferList>.size, nil, nil, kCMSampleBufferFlag_AudioBufferList_Assure16ByteAlignment, &blockBuffer) 

let buffers = UnsafeBufferPointer<AudioBuffer>(start: &audioBufferList.mBuffers, count: Int(audioBufferList.mNumberBuffers)) 

for audioBuffer in buffers { 
    let frame = audioBuffer.mData?.assumingMemoryBound(to: UInt8.self) 
    audioStream.write(frame!, maxLength: Int(audioBuffer.mDataByteSize)) 
} 
轉換