声级没有显示
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了声级没有显示相关的知识,希望对你有一定的参考价值。
What am i trying to do?
我正在尝试创建一个记录足球(足球)球反弹的应用程序。这是我第一次编写应用程序,第一次使用java。我的一个步骤是录制声音并显示声级的幅度。但是现在它仍然在我的屏幕上显示0.0。
Code to show the sound level
package com.example.user.sportsballbounceapp;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.TextView;
import java.io.IOException;
public class Football1Test extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_football1_test);
SoundMeter Sound=new SoundMeter();
double myValue = Sound.getAmplitude();
String message =
myValue == -1 ?
"The value is invalid." :
"The value is " + myValue;
TextView tv = (TextView) findViewById(R.id.textView2);
tv.setText(message);
}
}
Code to measure sound level
package com.example.user.sportsballbounceapp;
import android.media.MediaRecorder;
import java.io.IOException;
public class SoundMeter {
private MediaRecorder mRecorder = null;
public void start() throws IOException {
if (mRecorder == null) {
mRecorder = new MediaRecorder();
mRecorder.setAudiosource(MediaRecorder.AudioSource.MIC);
mRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
mRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
mRecorder.setOutputFile("/dev/null");
mRecorder.prepare();
mRecorder.start();
}
}
public void stop() {
if (mRecorder != null) {
mRecorder.stop();
mRecorder.release();
mRecorder = null;
}
}
public double getAmplitude() {
if (mRecorder != null)
return mRecorder.getMaxAmplitude();
else
return 0;
}
}
Result
在我的手机上进行测试时结果是相同的,因为它在模拟器中(图像来自模拟器)
图片
Update
我还在android清单中添加了权限
<uses-permission android:name="android.permission.RECORD_AUDIO" />
答案
您需要一个侦听器来检测录制器状态的更改。目前,您只在onCreate中设置TextView的值,但您没有观察到任何内容。
您可以做的是运行一个线程,每次让我们说,3秒钟测量自录音机录制以来注册的最大幅度。
这是一个例子:
final Handler handler = new Handler();
Runnable runnable = new Runnable() {
@Override
public void run() {
try{
myTexView.setText(mRecorder.getMaxAmplitude());
}
catch (Exception e) {
// TODO: handle exception
}
finally{
//also call the same runnable to call it at regular interval
handler.postDelayed(this, 3000); //every 3 seconds
}
}
};
handler.postDelayed(runnable, 3000);
以上是关于声级没有显示的主要内容,如果未能解决你的问题,请参考以下文章