助眠app开发(一):native.js调用原生mediorecorder对象实现梦话监听功能

准备开发一个助眠app,途中要实现监听用户梦话这一功能,由于前台人员使用的h5+封装的audiorecorder对象不足以达到预期效果,所以决定采用native.js调用原生mediorecorder对象实现梦话监听功能。

代码主要逻辑是通过实时录音来检测声音分贝大小来分辨此段音频是否符合梦话的分贝大小,检测到有音频输入则保存文件到手机根目录,代码应该写在定时器中定时调用。

代码如下:

<script type="text/javascript">
    
    	//参数n为录音时间,单位毫秒
	    function sleep(n) {
	        var start = new Date().getTime();
	        //  console.log('休眠前:' + start);
	        while (true) {
	            if (new Date().getTime() - start > n) {
	                break;
	            }
	        }
	        // console.log('休眠后:' + new Date().getTime());
	    }
	    	
	    	var index = 0;//标识梦话文件,这个变量应该写在定时器之外,为了改变文件名,不然会造成文件覆盖
	    	document.addEventListener('plusready', function(){
   			//console.log("所有plus api都应该在此事件发生后调用,否则会出现plus is undefined。"
   			
   			var recorder = plus.ios.importClass("android.media.MediaRecorder");
   			var mrecorder = new recorder();
   			var File = plus.android.importClass("java.io.File");
   			var filePath = "/sdcard/dream"+ index++ +".mp3";
   			 // 设置麦克风为音频源
            mrecorder.setAudioSource(recorder.AudioSource.MIC);
            // 设置音频文件的编码
            mrecorder.setOutputFormat(recorder.OutputFormat.DEFAULT);
            // 设置输出文件的格式
            mrecorder.setAudioEncoder(recorder.AudioEncoder.DEFAULT);//可以设置成 MediaRecorder.AudioEncoder.AMR_NB
   			
   			mrecorder.setOutputFile(filePath);

            mrecorder.prepare();
            mrecorder.start();
            mrecorder.getMaxAmplitude();
            sleep(5000);
            
            if (mrecorder!=null) {
            	//mrecorder.stop();
            	//mrecorder.release();
            	
            }
           
            var radio = mrecorder.getMaxAmplitude();//得到最大振幅
            
            //获取最大音量
            if (radio>1) {
            	radio = 20 * Math.log10(radio);
            }
            //分贝大于30 能被人耳听到,所以保存该段录音
            if (radio>30&&mrecorder!=null) {
            	mrecorder.stop();
            	mrecorder.release();
            }
            if (radio<=30&&mrecorder!=null) {
            	console.log("reset");
            	mrecorder.stop();
            	mrecorder.release();
            	var file = new File(filePath);
            	if (file.exists()) {
            		file.delete();
            		console.log("分贝小,删除文件")
            	}
            }
   		});
   		
    </script>

以上代码块能实现梦话监听的基本功能,注释很详细,逻辑也很简单,如果要用在真机测试上一定要注意权限模块的添加。

有任何问题以及不对希望大神指出,感谢!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值