- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个附加到 AVPlayerItem 的 AudioTapProcessor。
这将调用static void tap_ProcessCallback(MTAudioProcessingTapRef tap, CMItemCount numberFrames, MTAudioProcessingTapFlags flags, AudioBufferList *bufferListInOut, CMItemCount *numberFramesOut, MTAudioProcessingTapFlags *flagsOut)
处理时。
我需要转换 AudioBufferList
至 CMSampleBuffer
所以我可以使用 AVAssetWriterAudioInput.appendSampleBuffer
将其写入电影文件。
那么如何转换AudioBufferList
至 CMSampleBuffer
?我试过了,但得到 -12731 错误:错误 cCMSampleBufferSetDataBufferFromAudioBufferList :Optional("-12731")
func processAudioData(audioData: UnsafeMutablePointer<AudioBufferList>, framesNumber: UInt32) {
var sbuf : Unmanaged<CMSampleBuffer>?
var status : OSStatus?
var format: Unmanaged<CMFormatDescription>?
var formatId = UInt32(kAudioFormatLinearPCM)
var formatFlags = UInt32( kAudioFormatFlagIsSignedInteger | kAudioFormatFlagIsPacked )
var audioFormat = AudioStreamBasicDescription(mSampleRate: 44100.00, mFormatID:formatId, mFormatFlags:formatFlags , mBytesPerPacket: 1, mFramesPerPacket: 1, mBytesPerFrame: 16, mChannelsPerFrame: 2, mBitsPerChannel: 2, mReserved: 0)
status = CMAudioFormatDescriptionCreate(kCFAllocatorDefault, &audioFormat, 0, nil, 0, nil, nil, &format)
if status != noErr {
println("Error CMAudioFormatDescriptionCreater :\(status?.description)")
return
}
var timing = CMSampleTimingInfo(duration: CMTimeMake(1, 44100), presentationTimeStamp: kCMTimeZero, decodeTimeStamp: kCMTimeInvalid)
status = CMSampleBufferCreate(kCFAllocatorDefault,nil,Boolean(0),nil,nil,format?.takeRetainedValue(), CMItemCount(framesNumber), 1, &timing, 0, nil, &sbuf);
if status != noErr {
println("Error CMSampleBufferCreate :\(status?.description)")
return
}
status = CMSampleBufferSetDataBufferFromAudioBufferList(sbuf?.takeRetainedValue(), kCFAllocatorDefault , kCFAllocatorDefault, 0, audioData)
if status != noErr {
println("Error cCMSampleBufferSetDataBufferFromAudioBufferList :\(status?.description)")
return
}
var currentSampleTime = CMSampleBufferGetOutputPresentationTimeStamp(sbuf?.takeRetainedValue());
println(" audio buffer at time: \(CMTimeCopyDescription(kCFAllocatorDefault, currentSampleTime))")
if !assetWriterAudioInput!.readyForMoreMediaData {
return
}else if assetWriter.status == .Writing {
if !assetWriterAudioInput!.appendSampleBuffer(sbuf?.takeRetainedValue()) {
println("Problem appending audio buffer at time: \(CMTimeCopyDescription(kCFAllocatorDefault, currentSampleTime))")
}
}else{
println("assetWriterStatus:\(assetWriter.status.rawValue), Error: \(assetWriter.error.localizedDescription)")
println("Could not write a frame")
}
}
最佳答案
好的,我已经成功解决了这个问题。
问题是我不应该构造 AudioStreamBasicDescription
自己构造。但是使用 AudioProcessorTap
的准备回调提供的那个.static void tap_PrepareCallback(MTAudioProcessingTapRef tap, CMItemCount maxFrames, const AudioStreamBasicDescription *processingFormat)
//retain this one
关于avfoundation - 如何将 AudioBufferList 转换为 CMSampleBuffer?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29514701/
我在 C 中有以下代码,它分配了一个具有适当长度的 AudioBufferList。 UInt32 bufferSizeBytes = bufferSizeFrames * sizeof(Floa
初始化(分配内存)和释放(释放)具有 3 个 AudioBuffers 的 AudioBufferList 的正确方法是什么? (我知道可能有不止一种方法可以做到这一点。) 我想使用这 3 个缓冲区将
我一直在尝试在正弦波生成项目上添加释放(或衰减)时间,采用 this例如作为地面。我基本上想要的不是声音被如此彻底地切断,并在停止生成声音时在最后添加一些释放。 我怎样才能实现它? 最佳答案 在您想要
我正在尝试将以下代码转换为 Swift: CMSampleBufferRef sampleBuffer = [assetOutput copyNextSampleBuffer]; CMBlockBuf
我在项目中使用EZAudio从麦克风读取音频数据。 EZAudio有2种麦克风方法: - (void)microphone:(EZMicrophone *)microphone hasBufferLi
我有一个附加到 AVPlayerItem 的 AudioTapProcessor。 这将调用static void tap_ProcessCallback(MTAudioProcessingTapRe
在Apple提供的aurioTouch项目中,听说在performRender()函数下的AudioController文件中的AudioBufferList ioData携带了mic到音频播放器的音
引用Using AudioBufferList with Swift 我在 Stack Overflow 上找到了以下解决方案,用于使用音频单元播放一些声音。我的问题是我无法像正弦波数据那样将实际数据
致谢 我知道这篇文章很长,但我尽量将我的问题放在上下文中,因为我认为它非常独特(除了 this one 之外找不到任何相关问题。最后一个问题在最后帖子和 here's the complete cod
我正在为这个 API 和 Swift 中的语法苦苦挣扎 audioBufferList = AudioBufferList(mNumberBuffers: 2, mBuffers: (AudioBuf
如果我使用以下客户端数据格式打开具有扩展音频文件服务的音频文件... AudioStreamBasicDescription audioFormat; memset(&audioFormat, 0,
我在 Swift 中有一个桥接函数,它在 C 中的参数之一是 AudioBufferList * .在 Swift 中,这会生成一个 UnsafePointer。 .我设法通过调用 audioData
我有一个带有渲染回调的 RemoteIO 音频单元。我已经有一个渲染音频缓冲区,出于性能原因,我想避免使用 memcpy。 OSStatus FMixerPlatformAudioUnit::Audi
我正在尝试将从音频单元获取的 AudioBufferList 转换为可以传递给 AVAssetWriter 的 CMSampleBuffer保存来自麦克风的音频。此转换有效,因为我为执行转换所做的调用
我一直致力于使用 AVAssetReader 读取音频 Assets ,以便稍后可以使用带有 AudioUnit 回调的 AUGraph 播放音频。我有 AUGraph 和 AudioUnit 回调工
我正在尝试使用 AVAssetReader 读取视频文件并将音频传递给 CoreAudio 进行处理(添加效果和内容),然后再使用 AVAssetWriter 将其保存回磁盘。我想指出的是,如果我将输
我正在使用 AudioConverter转换未压缩 CMSampleBuffer通过 AVCaptureSession 被捕获至 AudioBufferList : let status: OSSta
使用 Xcode/Cocoa 和 ExtAudioFile API,我尝试存储 AudioBufferList* 对象以供以后使用,但我在重新访问数据时遇到了麻烦。这些对象来自重复的 ExtAudio
我有一个录音机回调 (kAudioOutputUnit_SetInputCallback),我需要在其中分配 AudioBufferList 中的缓冲区,其中只有一个回调返回的信息 inNUmberF
我正在尝试从呈现的 AudioBufferList 中提取 native [Float] 数组,其中音频单元的流设置为 32 位浮点。在 Swift 1 和 2 中,我这样做了: var mo
我是一名优秀的程序员,十分优秀!