Oboe是一个C ++库,可以轻松地在Android上构建高性能音频应用程序。内部有OpenSL ES和AAudio两大音频引擎,一行代码随意切换使用,我们可以用JNI在android应用上使用它们。
下面提供一下Oboe使用实例:
setupCommonStreamParameters(
oboe::AudioStreamBuilder *builder) {
builder->setAudioApi(mAudioApi)
->setSharingMode(oboe::SharingMode::Exclusive)
->setPerformanceMode(oboe::PerformanceMode::LowLatency);
return builder;
setupRecordingStreamParameters(
oboe::AudioStreamBuilder *builder ,bool isCallBack) {
builder->setCallback(this)
->setDirection(oboe::Direction::Input)
return setupCommonStreamParameters(builder);
oboe::AudioStream *mRecordingStream = nullptr;
oboe::AudioStreamBuilder builder;
setupRecordingStreamParameters(&builder);
oboe::Result result = builder.openStream(&mRecordingStream);
if (result == oboe::Result::OK && mRecordingStream) {
oboe::Result result = mRecordingStream->requestStart(); //开始录制。
setupCommonStreamParameters(
oboe::AudioStreamBuilder *builder) {
builder->setAudioApi(mAudioApi)
->setSharingMode(oboe::SharingMode::Exclusive)
->setPerformanceMode(oboe::PerformanceMode::LowLatency);
return builder;
setupPlayStreamParameters(
oboe::AudioStreamBuilder *builder ,bool isCallBack) {
builder->setCallback(this)
->setDirection(oboe::Direction::output)
return setupCommonStreamParameters(builder);
oboe::AudioStream *mPlayStream = nullptr;
oboe::AudioStreamBuilder builder;
setupPlayStreamParameters(&builder);
oboe::Result result = builder.openStream(&mPlayStream);
if (result == oboe::Result::OK && mPlayStream) {
oboe::Result result = mPlayStream->requestStart(); //开始播放。
oboe::DataCallbackResult LiveEffectEngine::onAudioReady(
oboe::AudioStream *oboeStream, void *audioData, int32_t numFrames) {
render(audioData,numFrames); //audioData放入数据即可播放。
return oboe::DataCallbackResult::Continue;
我们的项目在使用Oboe做录制和播放引擎后明显的优化了耳返延迟问题。之前120Ms的回路延迟设备,优化后延时在25Ms左右,对于用户来说已经感受不到了延迟回声感。
很遗憾在测试了很多设备后仍发现在vivo的部分手机上耳返优化并没有那么明显,还有延迟感;应该是这款设备在系统内部的音频模块上并没有遵循Google的设计规范。
耳返概述:耳返主要实现监听的功能,在低延时的情况下可以给主播一个比较真实音频的反馈,在演唱会等专业场景里比较常用。技术实现上来说就是要时时的把录制进的音频数据立刻播放出去,当然这个过程要低延迟。AudioRecord,AudioTrack在Android系统上做耳返,实现一个高性能的音频录制音频播放是一件很痛苦的事;因为我们并不能直接使用系统的AudioRecord,AudioTrack。...
A
Audio 是作为
OpenSL ES 库的轻量级原生
Android 替代项而开发。 与
OpenSL ES 相比,A
Audio API 不仅较小,而且容易使用。使用
Android系统底层的
OpenSL ES或者A
Audio都可以实现一个高性能的音频程序,尤其是A
Audio更是简单易用,性能上,功能上都更佳,但是A
Audio 是在
Android O 版本中才引入的全新
Android C API,在以前的系统版本中只能使用
OpenSL ES。
那么我们需要做的是在新版本系统中使用A
Audio
这里主要做一个引导,引导一些Google官方的一些关于Android的DEMO地址:人脸识别Vison APIhttps://github.com/googlesamples/android-vision权限申请when targeting Android M or higher
https://github.com/googlesamples/easypermissions自动化测试主要介绍一些
七、应用 build.gradle 构建脚本 、
八、工程 build.gradle 构建脚本 、
九、Gradle 配置脚本 gradle-wrapper.properti
es 、
十、配置总结