android音频杂音问题_Android 音视频去回声、降噪(Android音频采集及回音消除)(转)...

好久没写文章了,其实是想记录一下自己在Android开发的成长历程。谈到音视频这块,对于新手来说刚接触到这一块,那是非常非常的恶心~我自己弄这一块也是从头开始,在 网上也翻阅了无数的资料、浏览了无数的博客,尝试了多种方法,网上大致方法是采用第三方的,如webRtc、speex等。甚至花钱买积分去下demo,也发现了好多demo就是    骗积分的,呵呵~好气~ 不谈了。成长的过程也是比较艰辛的,最后也还是自己解决了这个问题~~也希望这篇文章能帮助处在当时的我的一样的情况下

1.Android声音录制

1. Android中使用AudioRecord录制声音,在Android中录制声音需要相应的权限,注意动态申请权限的问题(6.0以上)。

//处理权限申请回调

@Override

public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {

Log.v(TAG, "处理权限申请回调");

PermissionUtils.requestPermissionsResult(ActivityCameraLiveView.this, requestCode, permissions, grantResults, mPermissionGrant);

}

private PermissionUtils.PermissionGrant mPermissionGrant = new PermissionUtils.PermissionGrant() {

@Override

public void onPermissionGranted(int requestCode) {

switch (requestCode) {

case PermissionUtils.CODE_RECORD_AUDIO:

Log.v(TAG, "PermissionGrant: CODE_RECORD_AUDIO audio = true");

audio = true;

break;

case PermissionUtils.CODE_READ_EXTERNAL_STORAGE:

WRITE_EXTERNAL_STORAGE_PERMISSION = true;

Log.v(TAG, "PermissionGrant: WRITE_EXTERNAL_STORAGE_PERMISSION = true");

break;

case PermissionUtils.CODE_STOP_CAMERA:

Log.v(TAG, "PermissionUtils.CODE_STOP_CAMERA");

break;

case PermissionUtils.CODE_WRITE_EXTERNAL_STORAGE:

break;

case PermissionUtils.CODE_ACCESS_COARSE_LOCATION:

break;

}

}

};

2.对AudioRecord进行录音前需要对采样率进行设置

nMinBufSize = AudioRecord.getMinBufferSize(8000,

AudioFormat.CHANNEL_IN_MONO,

AudioFormat.ENCODING_PCM_16BIT);

2.Android回声消除

网上回音消除方式大概有两种 :1.通过安卓自带的 VOICE_COMMUNICATION模式进行录音,自动消除回音。2.使用第三方库进行消除(webRtc、Speex..),消除回音。

用第三方的话,比较麻烦,而且不好实现,用起来效果不是很明显,试了一下Speex的,感觉手机端与手机端语音还可以,但是如果是手机端(APP)和硬件语音的话,就要考虑到码流格式的问题,因为我们公司采用的是G711格式的音频流,所以就必须要先转pcm格式然后再转speex格式,最后转711格式的。实在不行,还有一种就是在录音的时候强制关闭扬声器,在录音的时候就只录到手机的声音隔断了扬声器的声音,不过效果不是很明显,还是会有滋滋的噪声。

关闭扬声器

audioManager = (AudioManager) mcontext.getSystemService(Context.AUDIO_SERVICE);

audioManager.setSpeakerphoneOn(false);

audioManager.setStreamVolume(AudioManager.STREAM_VOICE_CALL, 0,

AudioManager.STREAM_VOICE_CALL);

audioManager.setMode(AudioManager.MODE_IN_CALL);

这里我推荐第一种方法,不仅考虑到了手机机型的适配,还比较简单就改变一个参数:

audioRecord = new AudioRecord(MediaRecorder.AudioSource.VOICE_COMMUNICATION, 8000,

AudioFormat.CHANNEL_IN_MONO, AudioFormat.ENCODING_PCM_16BIT, nMinBufSize);

audioRecord.startRecording();

写到这里基本上回声和噪声就没有了~

http://blog.csdn.net/wl532882877/article/details/78296662?locationNum=5&fps=1

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/409273.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

CImage类 from http://www.cnblogs.com/afarmer/archive/2012/03/31/2427273.html

CImage类 Visual C的CBitmap类的功能是比较弱的,它只能显示出在资源中的图标、位图、光标以及图元文件的内容,而不像VB中的Image控件可以显示出绝大多数的外部图像文件(BMP、GIF、JPEG等)。如果想要在对话框或其他窗口中显示外部图像文件则只能借助于第三方提供的控…

新华计算机学校环境好吗,新华电脑校园环境好不好?(二)

随着学校规模的不断扩大和办学层次的逐步提高,新华的办学理念已发生了根本性的变化。在新华全国院校中,校园环境的美化和建设对大学生文化素质的教育有着不可替代的推动作用。在校园总体现划上,特别注重建筑布局和美化布局的相互映衬&#xf…

实现深拷贝的几种方法

1.我们怎么去实现深拷贝呢,这里可以递归递归去复制所有层级属性。 这么我们封装一个深拷贝的函数(PS:只是一个基本实现的展示,并非最佳实践) 复制代码 function deepClone(obj){let objClone Array.isArray(obj)?[]:{};if(obj &&…

投资合伙人股份分配_合伙人股权分配,你必须知道的三大要点!

原标题:合伙人股权分配,你必须知道的三大要点!随着社会的发展,越来越多的年轻人选择创业,也有很多人选择合伙创办企业,但是很多也是因为股权和钱如何分的问题最后不欢而散,合伙创办企业好处很多…

前端-给定一个字符串str,如何实现每个单词首字母都大写,其余部分小写。

确保字符串的每个单词首字母都大写&#xff0c;其余部分小写。 function f(str){ var arr str.toLowerCase().split(" “); //转小写&#xff0c;分割成字符串数组 for(var i0; i<arr.length; i){ arr[i] arr[i].charAt(0).toUpperCase()arr[i].slice(1); //重新组合…

计算机无法同步时间,为什么在Win7中无法同步计算机时间?

[文章摘要]在win7中&#xff0c;为什么不能同步计算机时间&#xff1f;有什么解决办法吗&#xff1f;接下来&#xff0c;我将向您介绍为什么无法在win7中同步计算机时间的主要症状&#xff0c;可能的原因和解决方法.在win7中&#xff0c;为什么不能同步计算机时间&#xff1f;有…

中国移动集中化BI探索:数据仓库与Hadoop混搭

随着移动互联网、物联网/传感器等技术的发展&#xff0c;全球数据生产速度正在高速增长&#xff0c;信息已成为企业的战略资产。而运营商作为网络时代的数据交换中心&#xff0c;其网络管道、业务平台、支撑系统中每天都在产生大量有价值的数据&#xff0c;基于这些数据的商业智…

计算机管理器win8.1,没事折腾?Win8.1文件管理器设置几招

有人说玩系统的高端表现就是在保证运行的前提下上没事折腾&#xff0c;今天就支几招Win8.1文件管理器的设置技巧给大家。可能有些人对捣鼓系统感到不解&#xff0c;在他们看来这种举动就像是折腾&#xff0c;明明拿来就能用的东西非要动手改造一下。其实对于中高级用户来说&…

Linux下如何创建loop device

在Linux中&#xff0c;有一种特殊的块设备叫loop device,这种loop device设备是通过影射操作系统上的正常的文件而形成的虚拟块设备 。因为这种设备的存在&#xff0c;就为我们提供了一种创建一个存在于其他文件中的虚拟文件系统的机制.下面是一个示例: 第一步&#xff1a;用dd…

在职研究生和全日制研究生的区别_“在职研究生”与“全日制研究生”有什么区别?...

“硕士研究生”是介于本科与博士之间的一个学位&#xff0c;与本科教育相比&#xff0c;研究生教育更加注重培养学生研究问题和分析问题的能力。在我国&#xff0c; 研究生可以分为两种形式&#xff1a;在职研究生、全日制研究生。其中&#xff0c;报考“在职研究生”是社会工作…

计算机多媒体设计徽章,酷毙了:Hackaday将会议徽章设计成一台可编程的电脑

Hackaday徽章可以直接挂在你的脖子上&#xff0c;但看起来更像一台小型的掌机&#xff0c;这是Hackaday Superconference的徽章。参加会议的每个人都获得这种徽章&#xff0c;它具有320 x 240彩色显示屏&#xff0c;完整的qwerty键盘和无限的可编程潜力&#xff01;内置的固件运…

后来的我们王俊凯王源机器人_王俊凯杨紫到底是什么关系

先说结论——中餐厅里的梳头姐弟之所以动人&#xff0c;是因为纯粹、纯净、真挚。 既和深厚等词不搭边&#xff0c;也不是cp。下面来分析。一先说最关注的&#xff0c;两人到底有没有情愫&#xff0c;是不是cp。如果有情愫的话&#xff0c;王俊凯对待杨紫会比对其他人优待。对比…

进程间通信管道进阶篇:linux下dup/dup2函数的用法

由于利用管道实现进程间通信&#xff0c;是通过创建两个文件描述符&#xff0c;但是描述符的初始化是通过随机的&#xff0c;就是从可用的文件描述符中取出&#xff0c;并将可用的文件描述符与file对象相关联&#xff0c;如果我们需要将管道的两头与其他的流相关时&#xff0c;…

浙江大学计算机博士申请考核,考博经验|2020年浙江大学博士申请考核经验分享...

原标题&#xff1a;考博经验&#xff5c;2020年浙江大学博士申请考核经验分享本文系"研海拾珠"公众号原创&#xff0c;获取更多考博资料考博经验请移步公众号平台。作者 |Domin &#xff0c;浙江大学博士朝着目标坚定不移自我上学起&#xff0c;我爸妈就告诉我好好学…

python模拟购物车购物过程_Python 模拟购物车的实例讲解

1.功能简介此程序模拟用户登陆商城后购买商品操作。可实现用户登陆、商品购买、历史消费记查询、余额和消费信息更新等功能。首次登陆输入初始账户资金&#xff0c;后续登陆则从文件获取上次消费后的余额&#xff0c;每次购买商品后会扣除相应金额并更新余额信息&#xff0c;退…

西北大学计算机排行,世界排名领先,西北大学到底有多厉害?

原标题&#xff1a;世界排名领先&#xff0c;西北大学到底有多厉害&#xff1f;西北大学作为综排TOP9的美国名校&#xff0c;是许多留学生选择名校得最佳选择之一。那么作为世界排名领先的西北大学到底有多厉害&#xff1f;接下来立思辰留学云小编为你详细介绍。西北大学专业排…