- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我一直致力于将 OpenSL 用于 Android 的低延迟音频应用。到目前为止,我在 Samsung Galaxy S5 上实现的最低延迟是 200 毫秒(触摸到声音,通过点击和记录点击声音,然后是应用声音来测量)。我想我可以通过改进一些内部应用程序逻辑将它降低到 160 毫秒。现在,应用程序接收触摸和获取该音频的回调之间最多有 40 毫秒的延迟。我认为这是因为当没有音频时,我一直在排队空缓冲区。这是不好的做法吗?但是,当我尝试仅在有音频时出于某种原因才排队的方法时,我得到了音频伪像。
无论如何,我的问题是,在任何最新的 Android 设备上使用 openSL 从触摸到音频输出可实现的最低延迟是多少? (我知道它因设备而异,但我想知道什么是低延迟的最佳设备,如果有的话,这个最低延迟的值(value)是多少?或者也许是最近设备的平均可获得的最小值?)。
Android: sound API (deterministic, low latency)
大约一年前的上述链接表明它在 180 毫秒范围内。这仍然是 OpenSL 的最低可能吗?推荐的答案是,Android 版音乐合成器获得了 30 毫秒以下的“总输出延迟”。但是当我在三星 Galaxy S5 上运行它时,它有 200 毫秒的触摸声音延迟。 “总输出延迟”指的是什么?我错过了什么吗?
如何进一步降低延迟?
感谢您能给我的任何帮助!
编辑:我正在做这里所说的一切Low-latency audio playback on Android除了 NEON 或 SSE 说明,但我的处理时间少于那里规定的 15%,所以这应该不是问题。我正在排队一个缓冲区,其中包含 2*PROPERTY_OUTPUT_FRAMES_PER_BUFFER 短裤用于立体声。是不是太高了?
最佳答案
看来我正在测试的设备 Galaxy S5 没有 android.hardware.audio.low-latency。这意味着 openSL 无法使用快速 channel ,并且会导致高延迟。这真的很令人惊讶,因为该设备非常新,所以它应该支持这样的新功能。但是,尽管在我的应用程序中做了所有需要的低延迟,但它在我正在测试的设备上会有高延迟。
来自 android ndk openSL 文档:“这些改进可通过 OpenSL ES 获得,适用于声称具有“android.hardware.audio.low_latency”功能的设备实现。如果设备未声明此功能但支持 API 级别 9(Android 平台版本 2.3)或更高版本,则您可以仍然使用 OpenSL ES API,但输出延迟可能更高。仅当应用程序请求缓冲区计数为 2 或更多,并且缓冲区大小和采样率与设备的 native 输出配置兼容时,才使用较低的输出延迟路径”
对于任何想知道您的应用是否有问题的人。请务必检查您正在测试的设备是否支持此功能。另请查看 (ndk)/docs/opensles/index.html 的性能部分和问题中的链接
关于Android:OpenSL 尽可能低的延迟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23799123/
我正在开发一个本地android项目,并尝试使用OpenSL播放一些音频效果。从VisualGDB提供的本地音频示例项目开始,我编写了以下代码。 在结尾附近,您可以看到我注释了一行,该行将名为hell
我一直在尝试为 Android 制作循环踏板。我有 1 条轨道运行良好。我想知道实现多个轨道需要什么样的资源/接口(interface)。我正在使用 OpenSL ES,并且我已经阅读了规范文档。 到
我正在编写一个 Android 应用程序,该应用程序需要能够以高精度查找大型 mp3 音频文件(约 90 分钟)中的特定点。 目前,我正在使用带有 URI 数据源的音频播放器对象的 OpenSL 方法
我一直致力于将 OpenSL 用于 Android 的低延迟音频应用。到目前为止,我在 Samsung Galaxy S5 上实现的最低延迟是 200 毫秒(触摸到声音,通过点击和记录点击声音,然后是
有没有办法让音频播放器输出到两个数据接收器? 更具体地说,我正在尝试使用将数据源设置为 uri 的音频播放器从网络流式传输 mp3 到缓冲区和输出混合。现在我将音频播放器的接收器设置为一个输出混合,所
我有一个布局,约有60个按钮,每一个,当按下,播放不同的音频文件。我的所有音频文件都作为MP3放在我的assets文件夹中,要播放它们,我基本上使用的代码与google ndk示例“native au
我正在尝试解决 Android OpenSLES 中的以下问题。 OpenSLES 规范说明如下: http://www.khronos.org/registry/sles/specs/OpenSL_
我们有一个使用低级 OpenSL ES 编写的带有移动音频客户端的应用程序,以实现麦克风的低延迟输入。比我们向服务器发送封装在 UDP 数据报中的 10ms 帧。 在服务器上,我们正在做一些后期处理,
当我在 Pixel 2(Oreo 8.0)上构建应用程序时,我得到PerformanceMode::LowLatency: 2019-06-30 15:04:15.560 8506-8506/? D/
我正在开发一个 Android 智能手机应用程序,它可以从麦克风输入语音并通过耳机输出语音。 但是,当我在麦克风中输入语音时,我被麦克风获取的语音音量从中间变得很小的现象所困扰。这是一种现象,如果您继
我需要一些有关 OpenSL ES 的帮助 - 我想改变 mp3 歌曲的音调。我使用的代码在这里:Android : How to change Playback Rate of music usin
我使用 NDK 创建了一个音频乐器,为了获得低延迟性能,我选择 OpenSL 来播放音乐文件。但我未能更改播放音乐的播放速率。这是快照代码: int OpenSLSoundPool::createOg
我对 NDK 和 OpenSL 很困惑我正在尝试将 OpenSL 添加到我的项目中。并且有一些问题。当我创建 ndk 项目时-我没有文件 Android.mk但我有 CMakeList 在教程中到处都
我是 opensl es 的新手。我目前正在试验 opensl es for android 的录制和播放功能。现在我有一个记录功能,可以将数据存储在缓冲区队列中。然后我可以播放缓冲区队列。谁能解释我
我试过 android NDK 中的 native 音频代码示例。当我尝试录制一些语音然后回放时效果很好。它使用主扬声器(扬声器)进行语音播放。我想修改代码,使语音在耳机而不是主扬声器中播放。有帮助吗
我开始用 C++ 实现我的游戏音频部分,我看到有 2 个可用的音频框架 AAudio ( https://developer.android.com/ndk/guides/audio/aaudio/a
我正在使用 MediaRecorder VOICE_CALL 音频源开发一个通话记录器应用程序,在一些棉花糖设备中它崩溃了,然后我将源更改为 MIC 这里传入的语音不是被记录下来。由于这个 java
自从我的 Galaxy S5 更新了 lolipop 后,我尝试在我的应用程序中修复通话录音。作为基础,我从这里使用谷歌示例项目:Sample . 这是代码的主要部分: AudioRecorder::
我在 android 8.1.0 中遇到了 opensl es 崩溃。 相关代码: TEResult SLESAudioEngine::release(TEMsg *pMsg) { TERes
我正在构建一个可以生成声音的应用程序(目前它主要是实验性的)并在 Android 手机上播放。 目前,我正在尝试播放简单的正弦波声音 (440 Hz),并首先尝试使用 Audiotrack,但遇到了一
我是一名优秀的程序员,十分优秀!