了解 AudioStreamBasicDescription
Understanding AudioStreamBasicDescription
我正在尝试了解 AudioStreamBasicDescription 结果。实际上,我能得到的东西对我来说都没有意义。例如:
AudioStreamBasicDescription(mSampleRate:44100.0,mFormatID:1819304813,mFormatFlags:41,mBytesPerPacket:4,mFramesPerPacket:1,mBytesPerFrame:4,mChannelsPerFrame:2,mBitsPerChannel:32,m[Reserved1])
我期望的是:
"Bytes per packet" 和 "bytes per frame" 应该是 8 而不是 4:
4(32 位浮点数的大小)x 2(每帧两个通道)x 1(每个数据包 1 帧)= 8 字节
为什么是 4?
import CoreAudio
import AudioUnit
var inputUnitDescription = AudioComponentDescription(componentType: kAudioUnitType_Output,
componentSubType: kAudioUnitSubType_HALOutput,
componentManufacturer: kAudioUnitManufacturer_Apple,
componentFlags: 0,
componentFlagsMask: 0)
let defaultInput = AudioComponentFindNext(nil, &inputUnitDescription)
var inputUnit: AudioUnit?
AudioComponentInstanceNew(defaultInput!, &inputUnit)
var asbd = AudioStreamBasicDescription()
var propertySize = UInt32(MemoryLayout<AudioStreamBasicDescription>.size)
AudioUnitGetProperty(inputUnit!,
kAudioUnitProperty_StreamFormat,
kAudioUnitScope_Output,
1,
&asbd,
&propertySize)
dump(asbd)
您的 ABSD 有 mFormatFlags == 41 。
if (mFormatFlags & 32) != 0 ,这意味着格式包含 kAudioFormatFlagIsNonInterleaved 位。
只有一种非交错格式 returns 每帧一个数据通道,而不是 2 个。
相反,您会得到多个缓冲区,每个缓冲区每帧只有一个通道,或 4 个字节(对于 Float32 格式),而不是 8 个。
我正在尝试了解 AudioStreamBasicDescription 结果。实际上,我能得到的东西对我来说都没有意义。例如:
AudioStreamBasicDescription(mSampleRate:44100.0,mFormatID:1819304813,mFormatFlags:41,mBytesPerPacket:4,mFramesPerPacket:1,mBytesPerFrame:4,mChannelsPerFrame:2,mBitsPerChannel:32,m[Reserved1])
我期望的是: "Bytes per packet" 和 "bytes per frame" 应该是 8 而不是 4:
4(32 位浮点数的大小)x 2(每帧两个通道)x 1(每个数据包 1 帧)= 8 字节
为什么是 4?
import CoreAudio
import AudioUnit
var inputUnitDescription = AudioComponentDescription(componentType: kAudioUnitType_Output,
componentSubType: kAudioUnitSubType_HALOutput,
componentManufacturer: kAudioUnitManufacturer_Apple,
componentFlags: 0,
componentFlagsMask: 0)
let defaultInput = AudioComponentFindNext(nil, &inputUnitDescription)
var inputUnit: AudioUnit?
AudioComponentInstanceNew(defaultInput!, &inputUnit)
var asbd = AudioStreamBasicDescription()
var propertySize = UInt32(MemoryLayout<AudioStreamBasicDescription>.size)
AudioUnitGetProperty(inputUnit!,
kAudioUnitProperty_StreamFormat,
kAudioUnitScope_Output,
1,
&asbd,
&propertySize)
dump(asbd)
您的 ABSD 有 mFormatFlags == 41 。
if (mFormatFlags & 32) != 0 ,这意味着格式包含 kAudioFormatFlagIsNonInterleaved 位。
只有一种非交错格式 returns 每帧一个数据通道,而不是 2 个。 相反,您会得到多个缓冲区,每个缓冲区每帧只有一个通道,或 4 个字节(对于 Float32 格式),而不是 8 个。