什么样会缓冲含有当我用installTap(onBus使用多声道音频?
什么样会缓冲含有当我用installTap(onBus使用多声道音频?什么样会缓冲含有当我用installTap(onBus使用多声道音频?
如果通道计数> 1个,那么它将包含左麦克风?或它将包含的样本由左麦克风和右麦克风?
当我用iphone模拟器然后进行格式化= pcmFormatFloat32,信道计数= 2,采样率= 44100.0,不是隔行
我使用此代码
let bus = 0
inputNode.installTap(onBus: bus, bufferSize: myTapOnBusBufferSize, format: theAudioFormat) {
(buffer: AVAudioPCMBuffer!, time: AVAudioTime!) -> Void in
self.onNewBuffer(buffer)
}
func onNewBuffer(_ inputBuffer:AVAudioPCMBuffer!)
{
var samplesAsDoubles:[Double] = []
for i in 0 ..< Int(inputBuffer.frameLength)
{
let theSample = Double((inputBuffer.floatChannelData?.pointee[i])!)
samplesAsDoubles.append(theSample)
}
}
print("number of input busses = \(inputNode.numberOfInputs)")
其打印 号码输入总线= 1
用于从缓冲器在我samplesAsDoubles阵列中的每个样品,我有从它会是怎样的信道块的内?在什么时候记录这个样本?
从floatChannelData的头部注释:
返回的指针是到format.channelCount指针浮动。这些指针 中的每一个都是“frameLength”有效样本,它们被“步幅”样本隔开。
如果format.interleaved为false(与标准解交织浮点格式一样),那么指针将分隔大块的内存。 “stride”为1.
FloatChannelData为您提供了2D浮点数组。对于非交错式双通道缓存,你就可以访问单个样本是这样的:
let channelCount = Int(buffer.format.channelCount)
let frameCount = Int(buffer.frameLength)
if let channels = buffer.floatChannelData { //channels is 2D float array
for channelIndex in 0..<channelCount {
let channel = channels[channelIndex] //1D float array
print(channelIndex == 0 ? "left" : "right")
for frameIndex in 0..<frameCount {
let sample = channel[frameIndex]
print(" \(sample)")
}
}
}
戴夫嗨 谢谢回答什么是新。 真的很有帮助。 现在我明白我需要什么了。但是什么是内存的跨步,什么是二维浮点数组我不明白 – userForStackExchange
你应该搜索*来找到这些其他问题的答案。如果你在那里找不到答案,写下新的问题:) – dave234
关于阅读多通道缓冲看到讲座WWDC 2014 在核心音频输入=> 55分钟 – userForStackExchange