【问题标题】:Understanding AudioStreamBasicDescription了解 AudioStreamBasicDescription
【发布时间】:2019-10-01 22:01:03
【问题描述】:

我正在尝试了解 AudioStreamBasicDescription 结果。实际上,我能得到的东西对我来说毫无意义。例如:

AudioStreamBasicDescription(mSampleRate: 44100.0, mFormatID: 1819304813, mFormatFlags: 41, mBytesPerPacket: 4, mFramesPerPacket: 1, mBytesPerFrame: 4, mChannelsPerFrame: 2, mBitsPerChannel: 32, mReserved: 0)

我的期望: “每包字节数”和“每帧字节数”应该是 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)

【问题讨论】:

    标签: swift core-audio


    【解决方案1】:

    您的 ABSD 有 mFormatFlags == 41 。

    如果 (mFormatFlags & 32) != 0 ,表示格式包含 kAudioFormatFlagIsNonInterleaved 位。

    非交错格式每帧只返回一个数据通道,而不是 2 个。 相反,您会得到多个缓冲区,每个缓冲区每帧只有一个通道,或 4 个字节(对于 Float32 格式),而不是 8 个。

    【讨论】:

      猜你喜欢
      • 2012-08-28
      • 1970-01-01
      • 1970-01-01
      • 2015-04-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多