gpt4 book ai didi

audio - 我想将输入节点的采样率从 44100 更改为 8000

转载 作者:行者123 更新时间:2023-12-01 22:17:32 26 4
gpt4 key购买 nike

我想将麦克风中的缓冲区读入数组,44.1khz 工作正常,但采样率为 8khz 时会出现错误

ERROR:    >avae> AVAudioIONodeImpl.mm:884: SetOutputFormat: required condition is false: format.sampleRate == hwFormat.sampleRate
2016-11-26 19:32:40.674 Atem[5800:1168274] *** Terminating app due to uncaught exception 'com.apple.coreaudio.avfaudio', reason: 'required condition is false: format.sampleRate == hwFormat.sampleRate'

使用我的以下代码:

 var engine = AVAudioEngine()
func setup() {

print("new")
let input = engine.inputNode!
let bus = 0

let mixer = AVAudioMixerNode()
engine.attach(mixer)

engine.connect(input, to: mixer, format: input.outputFormat(forBus: 0))
//pcmFormatFloat64 -- pcmFormatFloat32
print(engine.isRunning)
let fmt = AVAudioFormat(commonFormat: .pcmFormatFloat32, sampleRate: 12000, channels: 1, interleaved: true)

do {
try engine.start()


print(engine.isRunning)

mixer.installTap(onBus: bus, bufferSize: 1024, format: fmt) { (buffer, time) -> Void in
// 8kHz buffers!
print(buffer.format)
}
}catch {
//print("An error occurred \(error)")
return
}

}

有人可以帮忙吗?

最佳答案

更新了答案此答案用于尝试使用水龙头和混合器进行速率转换,但不起作用。

您可以使用 AVAudioConverterAVAudioEngine inputNode 上进行速率转换:

let engine = AVAudioEngine()

func setup() {
let input = engine.inputNode
let bus = 0
let inputFormat = input.outputFormat(forBus: 0)
let outputFormat = AVAudioFormat(commonFormat: .pcmFormatFloat32, sampleRate: 8000, channels: 1, interleaved: true)!

let converter = AVAudioConverter(from: inputFormat, to: outputFormat)!

input.installTap(onBus: bus, bufferSize: 512, format: inputFormat) { (buffer, time) -> Void in
var newBufferAvailable = true

let inputCallback: AVAudioConverterInputBlock = { inNumPackets, outStatus in
if newBufferAvailable {
outStatus.pointee = .haveData
newBufferAvailable = false
return buffer
} else {
outStatus.pointee = .noDataNow
return nil
}
}

let convertedBuffer = AVAudioPCMBuffer(pcmFormat: outputFormat, frameCapacity: AVAudioFrameCount(outputFormat.sampleRate) * buffer.frameLength / AVAudioFrameCount(buffer.format.sampleRate))!

var error: NSError?
let status = converter.convert(to: convertedBuffer, error: &error, withInputFrom: inputCallback)
assert(status != .error)

// 8kHz buffers!
print(convertedBuffer.format)
}

try! engine.start()
}

关于audio - 我想将输入节点的采样率从 44100 更改为 8000,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40821754/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com