首页 > 作文

麦克风检测

更新时间: 阅读: 评论:0

婚育证明怎么开-木绣球

麦克风检测
2023年3月17日发(作者:仙都风景名胜区)

Android-使用mediarecorder类获取当前麦克风音量值

[原]Android-使用mediarecorder类获取当前麦克风音量值

2015-1-2阅读160评论0

获取当前麦克风音量

2014年12月22日

0:21

首先是界面:

检测麦克风当前音lenmon 量主要是用Android自己的类MediaRecorder

来实现的,很多函数都是可以直接使用的,所以实现检测麦克风音量

其实不是很难,只要注意一下使用的方法就可以了。

start:是开始监测

end:结束检测

大概思路就是用麦克风录音,用

Amplitude()函数来获取麦克风当前的音

量值

getMaxAmplitude()返回值就是从上一次调用

getMaxAmplitude()的时刻到这一次调用getMaxAmplitude()时

刻之间的音频振幅绝对值的最大值,如果控制两个getMaxAmplitude

()调用的间隔比较小的话,就可以实时得到当前的音频的振幅的绝

对值了。

值得一说的是,getMaxAmplitude()方法不能在android的主

线程循环调用,否则程序会闪退(哈,试过好几次了,都不知道是什

么原因,后来才发现是大概因为Android的主线程会使用比较多的资

源来调用这个方法,然后系统九崩溃了,就造成了闪退。解决的方法

就是把getMaxAmplitude()函数的调用放在一个线程里,通过控制

线程的启动时间间隔来减少使用的资源以保证程序稳定不会闪退)

以下是里的代码:(含注释)

;

;

ption;

;

ask;

BarActivity;

ssLint;

ecorder;

;

nment;

r;

e;

;

em;

;

ew;

;

@SuppressLint("ShowToas肌酐高的原因 t")

publicclassMainActivityextendsActionBarActivity{

privateMediaRecordermp;

privateTextViewtxt1;

privateintvalue=0;

privateTimerTasktask=null;

privateTimertimer=null;

privateintmaxx=0;

privateTextViewmaxtext;

FilesoundFile=null;

@Override

pro古代治水名人 tectedvoidonC电脑显示器分辨率 reate(BundlesavedInstanceState){

te(savedInstanceState);

tContentView(ty_main);

txt1=(TextView)findViewById();

maxtext=(TextView)findViewById(lue);

}

publicvoiddeal_with(Viewv){//这是按钮按下去

触发的函数,然后再执行对于的实现方法

switch(()){

t://开始按钮

startrec();

break;

://结束按钮

endrec();

break;

}

}

privatevoid

startrec(){//

开始监测,先准备好用麦克风录音,

if(mp==null){

Filedir=new

File(ernalStorageDirectory(),"sound");//指

定录音输出文件的文件夹(最后会删除录音文件的)

if(!()){

//文件夹路径不存在就创建一个

();

}

soundFile=newFile(dir,tTimeMillis()+".amr");

//创建输出文件

if(!()){

try{

NewFile();

}catch(IOExce脑缺氧 ptione){

//TODOAuto-generatedcatchblock

tackTrace();

}

}

mp=newMediaRecorder();

//程序中操作的MediaRecorder类

ioSource();

//MediaRecorder类的初始化(注意顺序不能反

putFormat(_W

B);

ioEncoder(_W

B);

putFile(olutePath());

//MediaRecorder和文件绑定,MediaRecorder录制的内容将自动保

存在soundFile文件中

try{

e();

();//

开始录音

}catch(IllegalStateExceptione){

//TODOAuto-generatedcatchblock

tackTrace();

}catch(IOExceptione){

//TODOAuto-generatedcatchblock

tackTrace();

}

xt(,"开始录音...",

_LONG).show();//标签提示一下

starttorec();

//调用线程来实现获取当前音频振幅(starttorecord)

}

}

privateHandlermHandler=newHandler(){

publicvoidhandleMessage(Messagemsg){

t(""+1);//

把Handle中获得的信息在主线程使用,更新txt1的显示内容

if(maxx<1){//

(注意在tText()中要加"",否正月剪头发有什么说法 则又会跪(使用是跪了几次才发现

==)

maxx=1;//

显示最大值

t(""+maxx);

}

starttorec();//

重新调用检测的线程

}

};

publicvo杂菜煲 idstarttorec(){

timer=newTimer();

task=new

TimerTask(){//

设置线程抽象类中的run(),这里更新value的值

@Override

//把value的值放到用于线程之间交流数据的Handler的message里

publicvoidrun(){

value=Amplitude();

Messagemessage=Message();

1=value;

ssage(message);

//Handler类发出信息

}

};

le(task,100);

//timer,设置为100毫秒后执行task线程(会自动调用task的start

()函数)

//timer是计时器,作用就是在设定时间后启动规定的线程。这用

来限制

//getMaxAmplitude()的调用频率,减少资源的使用(时间调

太短,也会闪退)//

}

privatevoidendrec(){

if(mp!=null){

xt(,"录音结束...",

_SHORT).show();//提示

();;

//取消计时器(线程将不会被启动)

();

//停止录音

e();

//释放资源(mp不再绑定soundFile文件)

();

//删除刚才录下的文件节约空间(也可以不删拿出来听一听~)

mp=null;

//习惯性赋空值

}

}

}

文件就是这样,在中声

明写入sd卡,和打开麦克风的权限

还有的是同时刻,同场合不同机器所测出来的音频最大振幅值相

差比较大,应该是硬件个体性差异的缘故。

本文发布于:2023-03-17 06:59:09,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/zuowen/a9d47e2403fef5d65d0d51e885f7f474.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

本文word下载地址:麦克风检测.doc

本文 PDF 下载地址:麦克风检测.pdf

下一篇:返回列表
标签:麦克风检测
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图