皮皮网

【党建整站源码】【cuda npp库源码】【如何修改jquery源码】opensles源码

2024-12-25 15:04:46 来源:126源码网

1.Android音视频【十二】使用OpenSLES和AudioTrack进行播放PCM
2.Android-Native开发系列之利用AAudio播放音频

opensles源码

Android音视频【十二】使用OpenSLES和AudioTrack进行播放PCM

       Android中播放PCM数据的源码两种方法:AudioTrack和OpenSLES。AudioTrack适用于本地播放pcm文件或解码音频流,源码API简单,源码适用于场景较为固定;OpenSLES则常用于音频/视频播放器,源码利用c层直接调用API,源码减少java-jni反射开销,源码党建整站源码功能更强大,源码适合动态处理和复杂播放场景。源码

       AudioTrack的源码步骤包括:指定采样率(如Hz),声道数(单/双声道)和采样位数(/8位)创建AudioTrack。源码若数据参数变化,源码需销毁重建。源码write方法用于写入pcm数据,源码同步操作,源码需在播放前调用play()。源码播放进度管理需自行处理。

       OpenSLES则需先链接系统so库,创建引擎和混音器。配置音频信息后,创建播放器,设置状态,cuda npp库源码通过回调函数不断注入音频数据。音量和声道控制通过相应的接口实现,提供了更精细的控制选项。完整的源码可以在这里查看。

Android-Native开发系列之利用AAudio播放音频

       前言

       在Android C/C++层实现音频播放/录制功能,大家可能首先想到的是利用opensles。这是经过考验的实现方式,适配广泛。然而,若项目最低版本支持Android 及以上,如何修改jquery源码追求最小延迟与最高性能时,可考虑AAudio。

       博主之前使用opensles处理音频,后尝试oboe、aaudio实现,有感而发,特此记录,以供参考。

       什么是AAudio?

       AAudio是Android 8.0引入的一种新型C风格接口的底层音频库,旨在追求性能与低延迟。移动微社区源码它专注于原始数据的播放与录制,如播放PCM数据。与opensles不同,AAudio不包含编解码模块。

       oboe是对opensles与aaudio的封装,它根据设备判断选择使用aaudio或opensles。例如,在低于Android 8.0的设备上,它会使用opensles。

       配置AAudio开发环境与AAudioStream

       AAudioStream是.net抽奖系统源码关键概念,它是与AAudio交换音频数据的基础。我们首先创建AAudioStreamBuilder,然后通过它配置AAudioStream。

       创建AAudioStreamBuilder

       AAudioStream的创建采用builder模式,故需先创建对应的builder对象。

       配置AAudioStream

       通过builder的setXXX函数配置AAudioStream。简要概述这些函数,具体详情请参阅源码注释。

       注释的回调用于后续使用,暂不展开。

       创建AAudioStream

       调用openStream获取配置的AAudioStream对象。接下来,可利用AAudioStream处理音频数据,通过调用相关getXXX函数,验证配置是否满足预期。

       操作AAudioStream

       AAudioStream的状态转换流程图展示了状态变化的路径。涉及的函数包括请求状态变更的函数,这些函数为异步调用。

       AAudioStream处理音频数据有直接读写与回调两种方式,具体选择取决于项目需求。

       通过callback回调处理数据

       回调方式推荐,因其能提供更好的性能。直接读写数据到流方式在大多数情况下的延迟指标表现良好,具体取决于项目需求。

       使用callback方式处理数据需设置回调函数dataCallback与errorCallback,分别在AAudio需要数据时与出现错误时触发。

       注意

       回调函数内避免执行耗时任务。errorCallback触发时需在新线程中处理,可直接调用AAudioStream相关的getXXX函数。

       AAudio使用demo

       GitHub上已提供使用demo,欢迎查看并star。

       补充内容

       underrun & overrun

       underrun与overrun是音频数据生产和消费节奏不匹配导致的问题,分别指播放时未及时写入数据与录制时未及时读取数据。

       AAudio通过动态调整缓冲区大小来降低延迟,避免underrun。

       Thread safety

       AAudio接口并非完全线程安全,使用时需注意。

       结论

       AAudio接口简洁,与opensles相比代码量减少,功能略显不足,如解码与音量控制等。选择取决于实际需求。

       已提供GitHub链接,配合文章阅读更易理解。

       参考链接:developer.android.com/ndk/guides/...