AAudio or OpenSL
AAudio or OpenSL
我正在开始在C 中实现我的游戏音频部分,我已经看到那里有2个音频框架可用Aaudio(https://developer..android.com/ndk/Guides/audio/aaudio/aaudio.html(和opensl(https://developer.android.com/ndk/guides/audio/audio/opensl/index.html(。
这两个之间有哪些区别?
opensl es
opensl由从Android 2.3(姜饼(开始的设备支持。但是,自Android 4.2(或4.3?(以来,可以使用OpenSL的快速混合器(高性能音频(,并且并非所有设备都在本地支持。
这是什么意思?根据我的观察结果,当不使用快速混合器时,Java Idiotrack的速度 较低(延迟(。
当使用快速混合器时,音频延迟实际上很好且低。为了实现它,您的设备必须支持快速混合器,并且配置参数应匹配。
要考虑的另一个问题是在GearVr上" crack",这可能是由于线程优先级的变化。
要使用OpenSL实现您的音频,您可能需要参考NDK样本,或者在这里更好的是https://github.com/over17/androidaudiofastpathsampame-已修复以实际使用快速路径。
aaudio
将在Android 8 Oreo上得到支持,这将在今年的某个时候发布。除非您不希望游戏仅与Android O兼容,否则您可能不想这样。
我还没有太多的经验。
opoe
双簧管是由Google开发的库,它使用Aaudio或OpenSL作为后端,具体取决于设备的支持,并且具有包装API的C 接口。使用它而不是直接使用Aaudio是有意义的。
动机
为什么您真的想要游戏的本地音频部分?如果它不是合成器,专业的音频应用程序或VR游戏,我真的不会为本机C 音频而烦恼,而是选择Javaaudiotrack。它可靠,与所有设备兼容,并且具有非Pro应用程序的可接受延迟。
如果您需要Android的本机音频接口,那么我们目前建议使用双簧管。双簧管在较新的设备上调用Aaudio,并在旧设备上打开ES。双簧管API是C aaudio接口到C 的直接映射。
双簧管在不同的Android平台上包括用于各种开放式问题的解决方法。
源可在github上获得,并正在积极开发。
https://github.com/google/oboe
- 瓦尔格林德:数学函数"Conditional jump or move depends on uninitialised value(s)"
- C++核心准则 C35 对于接口类"A base class destructor should be either public and virtual, or protected and nonv
- 使用模板进行堆栈实现; "name followed by :: must be a class or namespace"
- Android NDK clang 编译器错误在 Windows 上显示'No such file or directory'
- 模式"allocate memory or use existing data"
- N-API include an .so or dll
- 已解决 - C++ 的崇高文本中的"fatal error: opencv: no such file or directory"
- 将 OR 逻辑运算符从 C++ 转换为 Fortran
- CPP 中的瓦尔格林德和记忆泄漏:"Conditional jump or move depends on uninitialised values"
- 我如何将 OR 与 if 语句一起使用字符串
- 将 if 语句中的字符与 or 进行比较
- Google Or-Tools Glop:如何创建指向 const 对象的指针数组?
- 当初始值设定项是基类名时'initializer does not name a non-static data member or base class'错误
- "No such file or directory" C++标头问题
- 处理 std::enable_if<...中谓词的逻辑"OR">
- C++ 虽然语句不适用于字符串和"or"
- 我在 #include < bits/stdc++h.> 放置时出错"No such file or directory"
- Python Bitwise OR
- 逻辑'double free or corruption (fasttop)'错误
- AAudio or OpenSL