java获取分贝_android 声音强度、分贝 大小检测 源码下载(as版)

本文介绍了一个Android应用,用于实时获取设备的分贝值。通过`MyMediaRecorder`类实现声音监听,利用`getMaxAmplitude()`获取声压值,并转换为分贝显示在`SoundDiscView`上。在`onResume()`中启动监听,在`onPause()`和`onDestroy()`中停止并清理资源。
摘要由CSDN通过智能技术生成

【实例简介】

【实例截图】

7cd0383efee2e1c4a86c249e79d8db23.gif

【核心代码】

package me.daei.soundmeter;

import android.support.v7.app.AppCompatActivity;

import android.os.Bundle;

import android.util.Log;

import android.widget.Toast;

import java.io.File;

import me.daei.soundmeter.widget.SoundDiscView;

public class MainActivity extends AppCompatActivity {

private boolean bListener = true;

private boolean isThreadRun = true;

private Thread thread;

float volume = 10000;

private SoundDiscView soundDiscView;

private MyMediaRecorder mRecorder ;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

mRecorder = new MyMediaRecorder();

}

private void startListenAudio() {

thread = new Thread(new Runnable() {

@Override

public void run() {

while (isThreadRun) {

try {

if(bListener) {

volume = mRecorder.getMaxAmplitude(); //获取声压值

if(volume > 0 && volume < 1000000) {

World.setDbCount(20 * (float)(Math.log10(volume))); //将声压值转为分贝值

soundDiscView.refresh(); //刷新View [注]子线程

}

}

Thread.sleep(100);

} catch (InterruptedException e) {

e.printStackTrace();

bListener = false;

}

}

}

});

thread.start();

}

/**

* 开始记录

* @param fFile

*/

public void startRecord(File fFile){

try{

mRecorder.setMyRecAudioFile(fFile);

if (mRecorder.startRecorder()) {

startListenAudio();

}else{

Toast.makeText(this, "启动录音失败", Toast.LENGTH_SHORT).show();

}

}catch(Exception e){

Toast.makeText(this, "录音机已被占用或录音权限被禁止", Toast.LENGTH_SHORT).show();

e.printStackTrace();

}

}

@Override

protected void onResume() {

super.onResume();

soundDiscView = (SoundDiscView) findViewById(R.id.soundDiscView);

bListener = true;

File file = FileUtil.createFile("temp.amr");

if (file != null) {

Log.v("file", "file =" file.getAbsolutePath());

startRecord(file);

} else {

Toast.makeText(getApplicationContext(), "创建文件失败", Toast.LENGTH_LONG).show();

}

}

/**

* 停止记录

*/

@Override

protected void onPause() {

super.onPause();

bListener = false;

mRecorder.delete(); //停止记录并删除录音文件

thread = null;

}

@Override

protected void onDestroy() {

if (thread != null) {

isThreadRun = false;

thread = null;

}

mRecorder.delete();

super.onDestroy();

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值