【问题标题】:AudioUnitSampleType deprecated on iOS8, my render callback is not working nowiOS8 上不推荐使用 AudioUnitSampleType,我的渲染回调现在不起作用
【发布时间】:2014-09-23 22:25:43
【问题描述】:

我有一个应用程序,它使用 AudioUnitSampleType 在渲染回调中抛出样本。它在 iOS 8 上已被弃用,并且声音现在无法正常工作。以前的 iOS 版本运行完美。我找不到任何关于如何替换 AudioUnitSampleType 的文档。

我得到的唯一信息是 xcode 警告......“规范格式的概念已被弃用”

请帮忙,有人可以说明如何解决它吗?

【问题讨论】:

    标签: callback ios8 core-audio


    【解决方案1】:

    我也有同样的问题。您可以将AudioUnitSampleType 替换为SInt32。我猜你也声明了AudioStreamBasicDescription,所以将你的声明从streamFormat.mFormatFlags = kAudioFormatFlagsAudioUnitCanonical; 替换为streamFormat.mFormatFlags = kAudioFormatFlagIsFloat | kAudioFormatFlagsNativeEndian | kAudioFormatFlagIsPacked | kAudioFormatFlagIsNonInterleaved;

    希望它会有所帮助。

    编辑:

    你也可以使用typealias来定义AudioUnitSampleType

    编辑:您也可以考虑切换到TheAmazingAudioEngine

    【讨论】:

    • 实际上这不起作用,或者至少是第一段中的部分。添加 kAudioFormatIsFloat 是不正确的,会给您带来噪音而不是音频。
    • 我担心这并不容易,因为它也可能是 Float32。在 CoreAudioTypes.h 中有一条评论:“这些类型已被弃用。执行信号处理的代码应使用具体类型(例如,float、Float32、SInt16、SInt32)。与格式无关的代码,而不是依赖于这些类型的大小,应该计算来自 AudioStreamBasicDescription 的 mBytesPerChannel、mChannelsPerFrame 和 (mFlags & kLinearPCMFormatFlagIsNonInterleaved) 的样本大小。对于交错格式,样本大小为 mBytesPerFrame / mChannelsPerFrame。对于非交错格式,它只是 mBytesPerFrame。"
    • 是的。我实际上更喜欢使用TheAmazingAudioEngine。我最近重构了我的应用程序并成功集成了 TAAE。
    • 所以,只要你选择一种具体类型(int 或 float)并坚持使用它(即,让你的渲染回调等意识到它)你应该没问题?
    • kAudioFormatFlagsAudioUnitCanonical 被定义为 kAudioFormatFlagIsSignedInteger | kAudioFormatFlagsNativeEndian | kAudioFormatFlagIsPacked | kAudioFormatFlagIsNonInterleaved | (kAudioUnitSampleFractionBits << kLinearPCMFormatFlagsSampleFractionShift); 使用这个仍然有效
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-14
    • 1970-01-01
    相关资源
    最近更新 更多