AudioUnit框架详细解析(二十三) —— 故障排除提示(一)

版本记录

版本号 时间
V1.0 2018.07.05

前言

AudioUnit框架作为您的应用程序添加复杂的音频操作和处理功能。 创建在主机应用程序中生成或修改音频的音频单元扩展。接下来几篇我们就一起看一下这个框架,感兴趣的看上面几篇文章。
1. AudioUnit框架详细解析(一) —— 基本概览
2. AudioUnit框架详细解析(二) —— 关于Audio Unit Hosting之概览(一)
3. AudioUnit框架详细解析(三) —— 关于Audio Unit Hosting之如何使用本文档和参考资料(二)
4. AudioUnit框架详细解析(四) —— 音频单元提供快速的模块化音频处理之iOS中的Audio Units(一)
5. AudioUnit框架详细解析(五) —— 音频单元提供快速的模块化音频处理之在Concert中使用两个音频单元API(二)
6. AudioUnit框架详细解析(六) —— 音频单元提供快速的模块化音频处理之使用标识符来指定和获取音频单元(三)
7. AudioUnit框架详细解析(七) —— 音频单元提供快速的模块化音频处理之使用范围和元素来指定音频单元的部分(四)
8. AudioUnit框架详细解析(八) —— 音频单元提供快速的模块化音频处理之使用属性来配置音频单元(五)
9. AudioUnit框架详细解析(九) —— 音频单元提供快速的模块化音频处理之使用参数和UIKit为用户提供控制(六)
10. AudioUnit框架详细解析(十) —— 音频单元提供快速的模块化音频处理之I / O单元的基本特性(七)
11. AudioUnit框架详细解析(十一) —— 音频处理图管理音频单元之音频处理图具有一个I / O单元(一)
12. AudioUnit框架详细解析(十二) —— 音频处理图管理音频单元之音频处理图提供线程安全性(二)
13. AudioUnit框架详细解析(十三) —— 音频处理图管理音频单元之音频使用Pull通过图表(三)
14. AudioUnit框架详细解析(十四) —— 呈现回调函数将音频馈送到音频单元之了解音频单元呈现回调函数(一)
15. AudioUnit框架详细解析(十五) —— 音频流格式启用数据流之使用AudioStreamBasicDescription结构(一)
16. AudioUnit框架详细解析(十六) —— 音频流格式启用数据流之了解何处以及如何设置流格式(二)
17. AudioUnit框架详细解析(十七) —— 从选择设计模式开始之I / O传递(一)
18. AudioUnit框架详细解析(十八) —— 从选择设计模式开始之没有渲染回调函数的I / O(二)
19. AudioUnit框架详细解析(十九) —— 从选择设计模式开始之具有渲染回调函数的I / O(三)
20. AudioUnit框架详细解析(二十) —— 从选择设计模式开始之仅具有渲染回调函数的输出(四)
21. AudioUnit框架详细解析(二十一) —— 从选择设计模式开始之其他音频单元Hosting设计模式(五)
22. AudioUnit框架详细解析(二十二) —— 构建您的应用程序(一)

Troubleshooting Tips - 故障排除提示

每当Core Audio函数提供返回值时,捕获该值并检查成功或失败。失败时,请使用Xcode调试功能,如 Xcode Debugging Guide中所述。如果在应用程序中使用Objective-C方法(例如配置音频会话),请以相同方式利用error参数。

注意函数调用之间的依赖关系。例如,只有在成功初始化后才能启动音频处理图。检查AUGraphInitialize的返回值。如果函数成功返回,则可以启动图形。如果失败,确定出了什么问题。检查导致初始化的所有音频单元函数调用是否成功返回。有关如何执行此操作的示例,请查看示例代码项目Audio Mixer(MixerHost)中的-configureAndInitializeAudioProcessingGraph方法。

其次,如果图形初始化失败,请利用CAShow函数。此函数将图表graph的状态打印到Xcode控制台。示例代码项目Audio Mixer(MixerHost)也演示了这种技术。

确保将每个AudioStreamBasicDescription结构初始化为0,如下所示:

AudioStreamBasicDescription stereoStreamFormat = {0};

ASBD的字段初始化为0可确保没有字段包含垃圾数据。 (在外部存储中声明数据结构的情况下 - 例如,作为类声明中的实例变量 - 其字段会自动初始化为0,您无需自己初始化它们。)

要将AudioStreamBasicDescription结构的字段值打印到Xcode控制台,这在开发过程中非常有用,请使用如Listing 2-8所示的代码。

Listing 2-8 A utility method to print field values for an AudioStreamBasicDescription structure
 
- (void) printASBD: (AudioStreamBasicDescription) asbd {
    char formatIDString[5];
    UInt32 formatID = CFSwapInt32HostToBig (asbd.mFormatID);
    bcopy (&formatID, formatIDString, 4);
    formatIDString[4] = '\0';

    NSLog (@"  Sample Rate:  %10.0f", asbd.mSampleRate);
    NSLog (@"  Format ID: %10s", formatIDString);
    NSLog (@"  Format Flags: %10x", asbd.mFormatFlags);
    NSLog (@"  Bytes per Packet: %10d", asbd.mBytePerPacket);
    NSLog (@"  Frames per Packet:   %10d",    asbd.mFramesPerPacket);
    NSLog (@"  Bytes per Frame:     %10d",asbd.mBytesPerFrame);
    NSLog (@"  Channels per Frame:  %10d",asbd.mChannelsPerFrame);
    NSLog (@"  Bits per Channel:    %10d",asbd.mBitsPerChannel);
}

该实用方法可以快速显示ASBD中的问题。

为音频单元流格式定义ASBD时,请注意确保遵循 Using Specific Audio Units中的使用表中的Recommended stream format attributesStream format notes。不要偏离除非您有特定原因,否则请从这些建议中获取。

后记

本篇主要讲述了故障排除提示,感兴趣的给个赞或者关注~~~~

AudioUnit框架详细解析(二十三) —— 故障排除提示(一)_第1张图片

你可能感兴趣的:(AudioUnit框架详细解析(二十三) —— 故障排除提示(一))