Android AudioRecord 初始化延迟

2023-12-10

这是我正在处理的相关代码的示例:

AudioRecord recorder = setupAudio();
recorder.startRecording();

设置音频方法:

public AudioRecord setupAudio() {

        AudioRecord recorder;

        minBufferSizeInBytes = AudioRecord.getMinBufferSize(
                RECORDER_SAMPLERATE, AudioFormat.CHANNEL_IN_MONO,
                AudioFormat.ENCODING_PCM_16BIT);

        Log.e("MoverAudio","BufferSize: " + minBufferSizeInBytes);

        recorder = new AudioRecord(MediaRecorder.AudioSource.CAMCORDER,
                RECORDER_SAMPLERATE, AudioFormat.CHANNEL_IN_MONO,
                AudioFormat.ENCODING_PCM_16BIT, minBufferSizeInBytes);

        return recorder;
    }

记录器采样= 8000;

我试图找出是否有任何方法可以缩短初始化所需的时间。

目前我用 3 台设备进行测试,结果如下:

银河S3

  • 设置音频:~200ms
  • 开始录音():~280ms

银河 S3 迷你

  • 设置音频:~10ms
  • 开始录音():~290ms

银河纽带

  • 设置音频:~10ms
  • 开始录音():~235ms

缓冲区大小:

  • 联系点:704
  • s3: 1024
  • s3迷你:640

然而,只有来自星系连接的数据可用。 出于我的应用程序的目的,我必须能够尽快获取音频数据。根据当前值,只有 Nexus 处于可接受的时间内。

S3 mini 可能看起来很快,因为它只比 Nexus 多一点,但是前 200 毫秒的样本被列为 0,因此它不可用。

根据我对收集到的数据进行分析后的理解,S3 和 S3 mini 上的音频似乎以某种方式被过滤,结果 FFT 更加干净,低频声音总是不那么明显。 以下是 S3mini 和 Galaxy Nexus 录制的音频的示例:

http://img41.imageshack.us/img41/4177/ox7h.png S3 Mini

http://img690.imageshack.us/img690/8717/iya6.png银河纽带


如果您请求长缓冲区,则必须等待操作系统以当前采样率填充它。如果您请求的采样率与硬件 ADC 运行的采样率不同,那么您还必须等待重采样器滤波器延迟。不同的 Android 设备和操作系统版本可能支持不同的最小缓冲区大小和本机硬件采样率。

隐藏延迟的一种技术是在应用程序生命周期的早期开始录制,并不断丢弃音频样本,直到应用程序需要它们为止。这样就没有启动开销了。

补充:在某些设备/操作系统版本上,数据可能确实以某些硬件采样率(例如 4096,44.1k 或 48kHz)捕获到更长的操作系统驱动程序缓冲区中,并且仅在填充了其中几个缓冲区后,才转换为另一个样本速率,并切成较短的请求缓冲区长度,并使用音频命令开始向应用程序发送数据。要绕过(如果可能的话),您可能需要修改操作系统并编写自己的 ADC 驱动程序。但请尝试使用更高的采样率(44.1k 或 48k)并首先请求更短的缓冲区。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Android AudioRecord 初始化延迟 的相关文章

  • 当活动被破坏时如何保存状态

    public class Talk extends Activity private ProgressDialog progDialog int typeBar TextView text1 EditText edit Button res
  • 在 Android 模拟器上运行完整的 Android 手机 ROM

    正如标题所说 是否可以在 Android 模拟器中运行完整的 Android 设备 ROM 是的 你可以 但让它 100 工作可能很困难 大多数 ROM 都包含其运行硬件的特定驱动程序 我并不是 100 全力以赴 但可以尝试以下步骤 创建
  • 由于现有相机用户,相机“0”的手电筒不可用

    我想创建一个应用程序 它有一个用于录制视频的按钮和另一个单独的切换按钮 用于在录制视频期间打开闪光灯 我已经使用camera2 API为最近的androids构建了相机应用程序 可以通过图像按钮访问 我将火炬模式设置为切换按钮 但这根本不起
  • 禁用 com.google.android.maps.MapView 中的平移/缩放

    如何禁用 MapView 的平移 缩放功能 不是缩放控件 我想要一个完全静态的地图 我还注意到触摸地图似乎不会触发 MapView onClickListener 有人可以详细说明为什么吗 对于 Android 版 Google Maps
  • Android 软键盘 - 禁用某些键

    我正在寻找一种使用内置软键盘并禁用某些键的方法 例如 如果用户不应该使用字母 f 因为在列表中该字母不存在 则该键应显示为灰色 想象一下 用户可以在文本框中键入文本以从列表中进行选择 该列表包含 ABC BCCD 床 如果用户输入 A 然后
  • 如何检查 Android 设备是否在线

    我的服务器不断检查我的 Android 应用程序是否在线 请问我可以在我的android应用程序上执行哪些操作 创建一个名为 isNetworkAvailable 的帮助器方法 该方法将根据网络是否可用返回 true 或 false 它看起
  • Android:将图像裁剪为特定尺寸

    我的目的是让用户从图库中选择一张图像 然后进行裁剪活动 但是 我需要将定义裁剪蒙版的矩形锁定到某个尺寸 然后用户只需重新定位它即可显示图像的一部分 关于如何做到这一点有什么想法吗 Thanks T Intent intent new Int
  • 通过模拟器控制台或 ADB 更改 Android 模拟器方向

    我正在尝试构建一个自动化测试框架 用于检查应用程序应该响应的基本内容 而不会崩溃 其中之一是检查应用程序是否正确响应配置更改 现在 由于它是自动化的 我必须以编程方式在横向和纵向之间切换模拟器的方向 并观察它是否崩溃 大写 因为有很多与 c
  • webview 中的 android 移动 Twitter 页面无法打开?

    我正在尝试打开以 https 开头的 Twitter 页面webview在安卓中 但它没有打开 并且持续加载时出现黑屏 屏幕截图如下 Edit 在主网络视图中我有 Twitter 页面的链接https twitter com mytwitt
  • FileObserver 不适用于 Android 6.0 Marshmallow (API 23) 中的外部存储

    我有一个应用程序可以观察外部存储上的公共目录FileObserver 它运行良好Lollipop设备 我想添加对Marshmallow 所以我用它设置了一台 Nexus 9 平板电脑 在 Marshmallow 设备上 它失败 在 Loll
  • 绘制平滑曲线

    我想创建更平滑的曲线 而不仅仅是线角 这是我现在画的图 这是我的代码 case FREEHAND float pts float ptk ptk new float 2 imageMatrix invert inv if mCurrentS
  • 作为 ViewPager 的一部分更新 ListFragment 中的数据

    我在 Android 中使用 v4 兼容性 ViewPager 我的 FragmentActivity 有一堆数据 这些数据将以不同的方式显示在我的 ViewPager 的不同页面上 到目前为止 我只有同一个 ListFragment 的
  • eglCodecCommon:setVertexArrayObject:设置vao调试消息

    我的 Android Emulator API 28 logcat 被这样的消息搞得晕头转向 D eglCodecCommon setVertexArrayObject set vao to 1 1 0 0 D eglCodecCommon
  • 如何告诉 OkHttpClient 忽略缓存并强制从服务器刷新?

    在我的 Android 应用程序中 我将 Retrofit 与 OkHttpClient 结合使用 并启用缓存来访问某些 API 我们的一些 API 有时会返回空数据 我们在应用程序中提供了一个 刷新 按钮 供客户端从特定 API 重新加载
  • 当类明显存在时,我收到 java.lang.NoClassDefFoundError

    当我尝试在运行时使用该库时 出现以下错误 java lang NoClassDefFoundError com google api client extensions android2 AndroidHttp 我已经将此库添加到我的项目中
  • 播放没有音频标签的音频

    是否可以在没有音频标签的情况下仅使用 javascript 播放音频 我通过 tinyMce 编辑器注入脚本 因为我无权访问网站的后端 并且它不支持客户端的音频标签 她只想要当您将鼠标悬停在图像上时发出简单的声音 我已经完成了所有设置 但是
  • 如何将AVFrame转换为glTexImage2D使用的纹理?

    如您所知 AVFrame 有 2 个属性 pFrame gt data pFrame gt linesize 当我从视频 sdcard test mp4 android平台 读取帧后 并将其转换为RGB AVFrame副 img conve
  • 通过 Google 帐户从 Google Play 安装的应用程序列表

    以下是我的问题 是否可以通过使用任何 api 以编程方式通过 Google Play 获取用户已安装的应用程序列表 请注意 我并不是询问设备中当前安装的应用程序列表 而是询问在某个时刻已安装的应用程序列表 我需要解决上述问题 因为我正在考虑
  • 如何在android中将文本放在单选按钮的左侧

    我想将单选按钮的文本放在左侧而不是右侧 我找到了这个解决方案
  • Recyclerview项目点击涟漪效果[重复]

    这个问题在这里已经有答案了 我正在尝试添加Ripple影响到RecyclerView的项目 我在网上查了一下 但找不到我需要的东西 我努力了android background归因于RecyclerView本身并将其设置为 android

随机推荐

  • Selenium:获取 chrome 时未正确关闭

    当我在 selenium 框架中重新打开 chrome 浏览器时 收到 chrome 未正确关闭的错误消息 在框架中 我使用以下代码在每个测试用例的开头打开浏览器实例 if browserType equalsIgnoreCase Chro
  • 为什么 git 认为整个文件已更改,而仅更改了其中的一部分

    我面临着一个奇怪的情况git 我刚刚编辑了一个长文件中的几行 但是当我去提交更改时 我看到 git 只是用红色突出显示了整个文件内容 怎么了 我正在使用 git 的 Windows GUI 编辑 我现在记得的一件事是我在上次提交中将 csp
  • Dart 空检查习惯用法或最佳实践是什么?

    我有以下形式的赋值和空检查 以避免在我的地图中进行双重查找 在 Dart 中是否有更好或更惯用的方法来做到这一点 bool isConnected a b List list return list outgoing a null list
  • 如何实现规则引擎?

    我有一个存储以下内容的数据库表 RuleID objectProperty ComparisonOperator TargetValue 1 age greater than 15 2 username equal some name 3
  • 如何在Python中没有文本的情况下通过文本单击链接

    我正在尝试从 vivino com 抓取 Wine 数据 并使用 selenium 使其自动化并抓取尽可能多的数据 我的代码如下所示 import time from selenium import webdriver browser we
  • RestSharp简单完整示例[关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 目前不接受答案 我一直在尝试创建一个简单的原型 Web 应用程序 使用 RestSharp 调用 Rest API 我一直找不到一个很好的例子 有人可以分享并指导我
  • TYPO3 在每个页面插入插件

    我有 TYPO3 版本 7 6 18 我想在每个页面中插入一些插件 我想这可能与打字稿有关 请帮帮我 该怎么办 如果您想在每个页面上插入特定的插件 您只需将其添加到您的页面中 如下所示 page PAGE page 10 FLUIDTEMP
  • 在 XCode 7.1.1 中运行 UI 测试时 iOS 应用程序失败

    我正在为我的 iOS 应用程序创建第一个 UI 测试 每次运行测试时我都会收到错误 UI Testing Failure App accessibility isn t loaded 请参阅附图 加上调试控制台中的错误消息 dyld Lib
  • 了解 Qt 视图模型架构:何时创建以及如何清理 QAbstractItemModel 实现中的索引?

    我目前正在将我的项目从QTreeWidget to QtreeView 并且有很多由于对Qt模型视图设计理解不佳而导致的问题 到目前为止 即使在 Qt 示例中我也找不到答案 我已经实现了我的QAbstractItemModel 我正在返回要
  • 使用 MS Graph 访问就地存档

    我需要能够使用 MS Graph API 对驻留在 Exchange Online Archive 也称为就地存档 中的文件夹执行邮件操作 我看到在类似的question一年前 那个杰弗里 陈来自 Microsoft 的回复称 旧版 Off
  • 如何调用派生类的方法?

    我有以下课程 class A def init self base constructor implementation pass def virt method self raise NotImplementedError def pub
  • 在Java中如何对带有整数的字符串进行排序?

    我有一个数组 我的数组中的每个空格都包含两个字符串 一个字符串仅包含字母 另一个字符串包含数字 我现在想做的是按字母顺序或数字顺序对数组进行排序 取决于选择数组中的哪个空间 为此 我使用了compareTo 方法 然而 我发现当我尝试根据数
  • 拉取所有 git 子模块的最新更改

    我们使用 git 子模块来管理几个大型项目 这些项目依赖于我们开发的许多其他库 每个库都是一个单独的存储库 作为子模块引入依赖项目中 在开发过程中 我们通常只想获取每个依赖子模块的最新版本 如何提取所有 git 子模块的最新更改 If it
  • 如何使用 JAVA 在 Selenium WebDriver 中打开 Chrome 开发者控制台

    我想问如何在 selenium 测试执行期间打开 Chrome 开发者控制台 目前 当测试正在执行时 我手动按 F12 打开控制台 测试会立即停止响应 并在一段时间后失败 谁能告诉我如何在打开的开发人员控制台的情况下启动测试 以便我可以捕获
  • 在跨平台 xamarin 项目中编写特定于平台的代码

    我尝试在跨平台 Xamarin 项目中使用 Xamarin Android 命名空间 当我现在构建 iOS 项目时 我收到通知 这个命名空间显然不存在于 iOS 中 我如何编写特定于平台的代码 在哪里使用特定于平台的库 我已经检查了 Mic
  • 使用循环算法从多个列表中选择数据的有效方法

    我需要通过使用循环算法选择数据 从多个列表中创建一个包含所有其他列表的值的结果列表 list1 val1 1 val1 2 list2 val2 1 val2 2 list3 val3 1 val3 2 rr choosing result
  • 如何对包含 12 小时 (AM/PM) 格式的值的 Pandas 时间序列进行排序

    我正在使用 pandas 处理 csv 文件中的一些数据 我需要对 DataFrame 中的数据进行排序df按列MEETING START TIME 只是对时间进行排序 日期由另一个字段处理 但我得到的结果是 MEETING START T
  • HikariCP 包装器(线程安全)

    我正在学习使用HikariCP 我是java新手 我找到了一个包装器 但我认为它不是线程安全的 单例的实例是线程安全的 但不是方法getConnection 班级是这样的 public class HikariCPWrapper priva
  • 为什么“模块”对象不可调用? [复制]

    这个问题在这里已经有答案了 可能的重复 类型错误 模块 对象不可调用 这是我第一次尝试 Python 只是想在沉寂 10 年之后重拾基本的编程知识 这对我来说是一种新语言 Python 基本思想是一个微型战斗引擎 它决定更好的打击 接下来是
  • Android AudioRecord 初始化延迟

    这是我正在处理的相关代码的示例 AudioRecord recorder setupAudio recorder startRecording 设置音频方法 public AudioRecord setupAudio AudioRecord