来自AudioUnitRender swift的paramErr -50 [英] paramErr -50 from AudioUnitRender swift
本文介绍了来自AudioUnitRender swift的paramErr -50的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我正在尝试使用AudioUnit Render进行脱机渲染,但是我看不到哪个参数是错误的.也许是缓冲的大小.
I'm trying to do offline rendering with the AudioUnit Render, but I don't see which parameter is wrong.. Maybe is the size of the buffering.
我正在使用快速音频和核心音频,这是从GenericOutput audioUnit中提取代码的部分代码.
I'm using swift and core audio for this problem, here's a little bit of my code when it pulls from the GenericOutput audioUnit.
谢谢
func pullGenericOutput(_ player: UnsafeMutablePointer<AUGraphPlayer>){
//var player = AUGraphPlayer()
do {
var flags = AudioUnitRenderActionFlags()
var inTimeStamp = AudioTimeStamp()
inTimeStamp.mFlags = .sampleTimeValid
var busNumber:UInt32 = 0
var numberFrames:UInt32 = 512
inTimeStamp.mSampleTime = 0
var channelCount = 2
print("Final numberFrames :\(numberFrames)")
var totFrms = MaxSampleTime
while totFrms > 0 {
if totFrms < numberFrames {
numberFrames = totFrms
print("Final numberFrames :\(numberFrames)")
print("stuck")
}
else {
totFrms -= numberFrames
}
var bufferList = AudioBufferList()
bufferList.mNumberBuffers = UInt32(channelCount)
for j in 0..<channelCount {
var buffer = AudioBuffer()
buffer.mNumberChannels = 1
buffer.mDataByteSize = numberFrames * UInt32(MemoryLayout.size(ofValue: UInt32.self))
buffer.mData = calloc(Int(numberFrames), MemoryLayout.size(ofValue: UInt32.self))
bufferList.mBuffers = buffer
}//for loop end
//var actionFlags = AudioUnitRenderActionFlags(rawValue: UInt32(flags))
// print(actionFlags)
Utility.check(AudioUnitRender(player.pointee.mGIO!, &flags, &inTimeStamp, busNumber, numberFrames, &bufferList), operation: "AudioUnitRender mGIO")
inTimeStamp.mSampleTime += inTimeStamp.mSampleTime
Utility.check(ExtAudioFileWrite( player.pointee.extAudioFile!, numberFrames, &bufferList), operation: ("extaudiofilewrite fail"))
}//while loop end
self.filesSavingCompleted(player)
}
}
推荐答案
尝试一下!
var flags: AudioUnitRenderActionFlags = AudioUnitRenderActionFlags(rawValue: 0)
var inTimeStamp = AudioTimeStamp()
memset(&inTimeStamp, 0, MemoryLayout.size(ofValue: inTimeStamp))
inTimeStamp.mFlags = .smpteTimeValid
let busNumber: UInt32 = 0
var numberFrames: UInt32 = 1024
inTimeStamp.mSampleTime = 0
let channelCount: Int = 2
var totFrms: Int = Int(maxSampleTime)
while totFrms > 0 {
if UInt32(totFrms) < numberFrames {
numberFrames = UInt32(totFrms)
} else {
totFrms -= Int(numberFrames)
}
let bufferList = AudioBufferList.allocate(maximumBuffers: Int(channelCount))
for i in 0...channelCount-1 {
var buffer = AudioBuffer()
buffer.mNumberChannels = 1
buffer.mDataByteSize = numberFrames * 4
buffer.mData = calloc(Int(numberFrames), 4)
bufferList[i] = buffer
var result: OSStatus = AudioUnitRender(mGIO!, &flags, &inTimeStamp, busNumber, numberFrames, bufferList.unsafeMutablePointer)
print(result)
if result == 0 {
result = ExtAudioFileWrite(extAudioFile!, numberFrames, bufferList.unsafeMutablePointer)
}
inTimeStamp.mSampleTime += Float64(numberFrames)
}
}
这篇关于来自AudioUnitRender swift的paramErr -50的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文