【问题标题】:AudioBufferList in SwiftSwift 中的 AudioBufferList
【发布时间】:2014-11-09 06:03:16
【问题描述】:

我正在尝试将以下代码转换为 Swift:

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 列表。有人回答吗?

【问题讨论】:

    标签: ios objective-c xcode swift audiobufferlist


    【解决方案1】:

    Swift-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))
    }
    

    【讨论】:

      猜你喜欢
      • 2014-09-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多