【问题标题】:Read AudioUnit property (kAudioUnitProperty_SupportedChannelLayoutTags) return error: kAudioUnitErr_InvalidElement读取 AudioUnit 属性 (kAudioUnitProperty_SupportedChannelLayoutTags) 返回错误:kAudioUnitErr_InvalidElement
【发布时间】:2022-09-23 01:40:59
【问题描述】:

我正在尝试从 AudioUnit 读取信息:

var value = AudioChannelLayoutTag()
var size = UInt32(MemoryLayout<AudioChannelLayoutTag>.size)
let status = AudioUnitGetProperty(audioUnit, kAudioUnitProperty_SupportedChannelLayoutTags, kAudioUnitScope_Global, 0, &value, &size)

它总是让我想起一个错误: kAudioUnitErr_InvalidElement(错误代码:-10877)

你能告诉我吗?

    标签: swift xcode tvos audiounit


    【解决方案1】:

    kAudioUnitProperty_SupportedChannelLayoutTags 使用kAudioUnitScope_InputkAudioUnitScope_Output 的范围。这就是错误的来源。

    如果kAudioUnitScope_Global 更改为kAudioUnitScope_InputkAudioUnitScope_Output,您的代码将按预期工作。但它只会返回音频单元支持的标签数组的第一个元素。

    kAudioUnitProperty_SupportedChannelLayoutTags 上执行AudioUnitGetProperty 时,它会将标签放入您指定大小的数组中。它还将您指定的大小修改为有效缓冲区的大小。

    不幸的是,在尝试访问之前无法知道标签的数量。所以我们只能逐步访问它。

    以下代码返回音频单元的输出支持的标签数量。它首先尝试访问 4 个元素,然后通过加倍扩展该数字,直到返回的元素大小小于指定的大小。

    func supportedOutputChannelLayoutTags() -> [AudioChannelLayoutTag] {
            let elementSize = MemoryLayout<AudioChannelLayoutTag>.size
            var elementCount = 4
            while true {
                var layoutTags = [AudioChannelLayoutTag](repeating: kAudioChannelLayoutTag_Unknown, count: elementCount)
                let ioSize = UInt32(elementSize * layoutTags.count)
                var returnedIoSize = ioSize
                
                AudioUnitGetProperty(self, kAudioUnitProperty_SupportedChannelLayoutTags, kAudioUnitScope_Output, 0, &layoutTags, &returnedIoSize)
                
                if returnedIoSize != ioSize {
                    layoutTags.removeLast(Int(ioSize - returnedIoSize) / elementSize)
                    return layoutTags
                }
                elementCount *= 2
            }
        }
    

    【讨论】:

      猜你喜欢
      • 2011-10-07
      • 2021-11-22
      • 2022-01-19
      • 2017-06-09
      • 1970-01-01
      • 2016-01-24
      • 1970-01-01
      • 2013-03-18
      • 1970-01-01
      相关资源
      最近更新 更多