Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >Android:录制和收听音频

Android:录制和收听音频
EN

Stack Overflow用户
提问于 2014-07-14 21:12:29
回答 1查看 587关注 0票数 0

我尝试实现一个记录,并从不同的post收听音频,但我有一个40毫秒的延迟。

这是我的代码。

代码语言:javascript
运行
AI代码解释
复制
public class record {
    private AudioRecord recorder = null;
    private boolean isRecording = false;
    private int SAMPLERATE = 8000;
    private int CHANNELS = AudioFormat.CHANNEL_CONFIGURATION_MONO;
    private int AUDIO_FORMAT = AudioFormat.ENCODING_PCM_16BIT;
    private int bufferSize = AudioRecord.getMinBufferSize(SAMPLERATE, CHANNELS,
                    AUDIO_FORMAT);
    private Thread recordingThread = null;

    public void startRecording() {
            recorder = new AudioRecord(MediaRecorder.AudioSource.MIC, SAMPLERATE,
                            CHANNELS, AUDIO_FORMAT, bufferSize);

            recorder.startRecording();
            isRecording = true;

            recordingThread = new Thread(new Runnable()

            {
                    public void run() {
                            writeAudioData();
                    }

            });
            recordingThread.start();

    }

    public void stopRecording() {
            isRecording = false;
            recorder.stop();
            recorder.release();
            recorder = null;
            recordingThread = null;
    }

    private void writeAudioData() {

            byte data[] = new byte[bufferSize];

            int buff = 8000;
            int minBufferSize = AudioTrack.getMinBufferSize(buff,
                            AudioFormat.CHANNEL_CONFIGURATION_MONO,
                            AudioFormat.ENCODING_PCM_16BIT);

            Log.i("AUDIO", "BufferSize:" + minBufferSize);

            AudioTrack at = new AudioTrack(AudioManager.STREAM_MUSIC, buff,
                            AudioFormat.CHANNEL_CONFIGURATION_MONO,
                            AudioFormat.ENCODING_PCM_16BIT, minBufferSize,
                            AudioTrack.MODE_STREAM);

            at.play();

            while (isRecording) {
                    recorder.read(data, 0, bufferSize);
                    at.write(data, 0, bufferSize);
            }
            at.stop();
            at.release();
    }

}

我怎样才能减少延误呢?我尝试减少缓冲区,但问题仍然存在。

EN

回答 1

Stack Overflow用户

发布于 2014-07-15 00:27:43

根据测量对象和方法的不同,Android音频系统中可能存在数十毫秒的延迟或数百毫秒的延迟。

如果测量播放和录制之间的延迟,40ms的延迟是一个正常值,实际上我在Android 4.4.3上的this测试中看到了30~50ms的延迟值:

https://github.com/garyyu/AudioTracker-Test

此外,如果你检查你打印的"minBufferSize“值,你会发现这个最小的缓冲区大小是40ms (在我的Nexus7 2013上)。当你玩的时候会有帧延迟,我们不能期望在调用"at.write()“时立即播放,我猜在内部有另一个缓冲区来存储你的”写“数据。在记录方面也是如此。因此,如果测量从播放开始函数调用到实际声音输出,则会有比40ms更多的延迟。

如果需要更多建议,您需要描述如何测量您的延迟的细节。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24746061

复制
相关文章
api安全授权调用--OAuth协议详解!
OAuth是一个关于授权(authorization)的开放网络标准,在全世界得到广泛应用,目前的版本是2.0版。
后端技术探索
2018/08/09
8200
OAuth 详解<2> 什么是 OAuth 2.0 授权码授权类型?
demo007x/oauth2-client: Oauth2 Client package for Golang (github.com) 欢迎star
用户1418987
2023/04/11
2.1K0
OAuth 详解<2> 什么是 OAuth 2.0 授权码授权类型?
OAUTH开放授权
OAUTH开放授权为用户资源的授权提供了一个安全的、开放而又简易的标准。OAUTH的授权不会使第三方触及到用户的帐号信息例如用户名与密码等,即第三方无需使用用户的用户名与密码就可以申请获得该用户资源的授权,因此OAUTH授权是安全的,目前OAUTH的版本为2.0。
WindRunnerMax
2020/08/27
1.2K0
Oauth授权流程
我们经常会使用第三方的账号来登录某个平台,比如使用QQ账号登录爱奇艺,使用微博登录自如APP。而登录的过程中,会提示自如想访问你的微博公开资料、好友信息,或者爱奇艺要访问您QQ头像、照片等资料。那么这个过程是有一个比较复杂的授权流程,在IoT云业务测试过程中,也会有这种场景的授权流程。下面我就通过图例结合业务场景和大家介绍下oauth授权流程。
CeshirenTester
2022/06/14
3690
8种至关重要OAuth API授权流与能力
在本文中,Curity的Daniel Lindau概述了重要的OAuth授权流程和能力。
yuanyi928
2018/12/07
1.7K0
OAuth2.0授权协议
通过用户授权,第三方服务访问用户存在其他服务上的资源,而不需用户将用户名密码直接传递的资源服务器的安全控制协议。
sucl
2019/09/05
6920
OAuth2.0授权协议
[认证授权] 1.OAuth2授权
1 OAuth2解决什么问题的? 举个栗子先。小明在QQ空间积攒了多年的照片,想挑选一些照片来打印出来。然后小明在找到一家提供在线打印并且包邮的网站(我们叫它PP吧(Print Photo缩写 ?))
blackheart
2018/01/19
1.8K0
[认证授权] 1.OAuth2授权
[腾讯社区开放平台]介绍开放授权协议-OAuth
OAuth (开放授权) 是一个开放标准,允许用户授权第三方网站访问他们存储在另外的服务提供者上的信息,而不需要将用户名和密码提供给第三方网站或分享他们数据的所有内容。OAuth是OpenID的一个补充,但是完全不同的服务。 OAuth,一个让人又爱又恨的验证协议,它让许多主流的社交网站(SNS)与网络服务打开了封闭已久的验证大门,它也是在网络上公开个人或私人信息 (private data) 前最主要的验证管道之一,重要的是,在这个协议下,所有公开给外界的私有数据会受到两个阶段的保护,OAuth 保障
张善友
2018/01/19
1.8K0
[腾讯社区开放平台]介绍开放授权协议-OAuth
OAuth 2.0 授权认证详解
点击上方“芋道源码”,选择“设为星标” 管她前浪,还是后浪? 能浪的浪,才是好浪! 每天 10:33 更新文章,每天掉亿点点头发... 源码精品专栏 原创 | Java 2021 超神之路,很肝~ 中文详细注释的开源项目 RPC 框架 Dubbo 源码解析 网络应用框架 Netty 源码解析 消息中间件 RocketMQ 源码解析 数据库中间件 Sharding-JDBC 和 MyCAT 源码解析 作业调度中间件 Elastic-Job 源码解析 分布式事务中间件 TCC-Transaction
芋道源码
2022/06/20
1.9K0
OAuth 2.0 授权认证详解
[PHP] Oauth授权和本地加密
1.Oauth(开放授权)是一个开放标准,允许用户让第三方应用访问该用户在某一网站上存储的私密资源(如照片,视频,联系人列表),而无需将用户名和密码提供给第三方
唯一Chat
2019/09/10
6080
OAuth 2.0授权框架详解
在现代的网站中,我们经常会遇到使用OAuth授权的情况,比如有一个比较小众的网站,需要用户登录,但是直接让用户注册就显得非常麻烦,用户可能因为这个原因而流失,那么该网站可以使用OAuth授权,借助于github或者其他的第三方网站的认证授权,来获取相关的用户信息,从而避免了用户注册的步骤。
程序那些事
2020/11/26
1.1K0
通过管理API管理OAuth2 认证授权服务器Keycloak
我们在Keycloak Admin Console中的所有操作都有特定的Restful API,被统称为Keycloak Admin REST API。而 Keycloak Admin Client正是对Keycloak Admin REST API的Java HTTP客户端封装。我们只需要引入下面的依赖就可以集成了:
码农小胖哥
2021/09/09
2.9K0
OAuth2.0授权码模式
本文链接:https://blog.csdn.net/u014427391/article/details/97504088
SmileNicky
2019/08/29
1.1K0
OAuth2.0授权码模式
OAuth授权 | 看这篇就够了
上一篇我们介绍了单点登录(SSO),它能够实现多个系统的统一认证。今天我们来谈一谈近几年来非常流行的,大名鼎鼎的OAuth。它也能完成统一认证,而且还能做更多的事情。至于OAuth与SSO的区别,将在文章最后总结。
小忽悠
2018/09/09
1.8K0
Spring Cloud Security使用OAuth2授权服务器来保护API
首先,我们需要配置OAuth2授权服务器。在本示例中,我们将使用Spring Boot和Spring Security来配置OAuth2授权服务器。
堕落飞鸟
2023/04/13
1.1K0
OAuth 详解<4> 什么是 OAuth 2.0 隐式授权类型?
隐式授权类型是单页 JavaScript 应用程序无需中间代码交换步骤即可获取访问令牌的一种方式。它最初是为 JavaScript 应用程序(无法安全存储机密)而创建的,但仅在特定情况下才推荐使用。
用户1418987
2023/10/16
3910
OAuth 详解<4> 什么是 OAuth 2.0 隐式授权类型?
从 OAuth2 服务器获取授权授权
搭建好了基于 OWIN 的 OAuth2 服务器之后, 接下来就是如何从服务器取得授权了, 下面就介绍如何实现 OAuth2 定义的四种授权方式。
beginor
2020/08/10
1.7K0
从 OAuth2 服务器获取授权授权
OAuth系列之OAuth2.0授权码模式学习笔记
最近在学习Oauth2.0,随便记录一下从优质博客http://www.ruanyifeng.com/blog/2014/05/oauth_2_0.html 学习到的知识
SmileNicky
2022/05/07
4260
OAuth系列之OAuth2.0授权码模式学习笔记
OAuth2.0认证和授权机制
(F)资源服务器确认令牌无误,同意向客户端开放资源。 这么一个过程 2. 看到上面的流程,我们大概都有一个疑问,就是用户同意授权后这个步骤是如何授权的?怎么就算授权成功,通过什么东西去向认证服务器申请令牌?
袁新栋-jeff.yuan
2020/08/26
8890
OAuth2.0认证和授权机制
使用OAuth2实现授权服务
OAuth 2发明之初是为了解决登录认证过程中的安全性问题,使用“委托”的形式使第三方应用获得数据权限及功能。OAuth 2.0协议中,使用访问令牌ACCESS_TOKEN代替传统的账号密码,提高了互联网环境下的安全性。
关忆北.
2022/09/28
1.4K0
使用OAuth2实现授权服务

相似问题

SSRS报表通过URL以PDF格式呈现报表

011

将SSRS 2005报表以XML格式导出到PDF

11

将SSRS报表导出到Excel问题

11

使用PowerBI令牌访问AzureAD报表

122

SSRS:从主报表将钻取报表导出到Excel

13
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文