ios - AudioUnitRender Error -50 含义
问题描述
我在 AudioUnitRender 调用中收到错误 -50。我的音频单元只是一个从麦克风获取样本的 RemoteIO 单元。错误-50是什么意思?
let status = AudioUnitRender(controller.audioUnit!, ioActionFlags, inTimeStamp, inBusNumber, inNumberFrames, listPtr)
if noErr != status {
print("Error \(status)");
fatalError("Render status \(status)")
// return status;
}
解决方案
-50 ( kAudio_ParamError
) 表示您传递的参数之一是错误的。
一个常见的错误AudioUnitRender
是传递AudioBufferList
错误数量的an mNumberBuffers
(您可能正在录制非交错立体声),或者AudioBuffer
s 本身的大小可能错误或通道数量错误。
每当我忘记模拟器和设备远程音频单元具有不同的默认流格式并且没有通过显式设置它们时,我都会遇到这个问题
AudioUnitSetProperty(audioUnit, kAudioUnitProperty_StreamFormat, kAudioUnitScope_Output, 1, &streamFormatIActuallyWant, UInt32(MemoryLayout<AudioStreamBasicDescription>.size))
我认为模拟器默认为交错整数,设备默认为非交错浮点,尽管这可能只是我的配置。
从头AudioUnitRender
文件:
调用者必须提供与给定总线的当前音频格式的预期拓扑相匹配的有效 ioData AudioBufferList。缓冲区列表可以有两种变体:
(1) 如果 mData 指针不为空,则音频单元会将其输出渲染到这些缓冲区中。这些缓冲区应与 16 字节边界对齐(通常是 malloc 将返回的内容)。
(2) 如果 mData 指针为空,则音频单元可以提供指向它自己的缓冲区的指针。在这种情况下,音频单元需要在调用线程的 I/O 周期内保持这些缓冲区有效
通过传递 null mData
(第 (2) 点)可以为您节省不必要的副本,但您仍然需要知道“拓扑”的格式,它只是mNumberBuffers
(可能是 1 或 2)。
推荐阅读
- python - 如何使用特征工具为新数据(我们要对其进行预测)制作特征
- python - 无法导入 tensorflow-gpu dll 加载失败
- gmail - 当用户打开电子邮件时,如何自动启动我的 gmail 插件?
- c# - 此控制台应用程序代码运行一次,然后在我按 Enter 时关闭,但我需要它是连续的,我会改变什么?
- timeout - 等待存储时间长和网关超时 (504)
- parallel-processing - random_number() 如何并行工作?
- c# - 在调用 Wait 之前访问任务上的结果实际上是做什么的?
- redirect - 从 HTTPS 重定向到其他网站的 HTTPS
- shell - 从 shell 脚本调用 ant 命令
- google-drive-api - 使用 Marketplace SDK 集成 G Suite - 永久禁用“Drive UI Integration”