如何在不保存的情况下在android应用程序live中显示声音振幅
这是两个活动。在主要活动中,我为Soundmeter类创建了一个对象,并使用它从Soundmeter类检索最大振幅值。我已将检索到的值分配到文本框中 主要活动类别:如何在不保存的情况下在android应用程序live中显示声音振幅,android,Android,这是两个活动。在主要活动中,我为Soundmeter类创建了一个对象,并使用它从Soundmeter类检索最大振幅值。我已将检索到的值分配到文本框中 主要活动类别: import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.Menu; import android.view.MenuItem; import android.view.View; import and
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import java.io.IOException;
public class MainActivity extends AppCompatActivity {
private SoundMeter mSensor;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button button = (Button) findViewById(R.id.button);
final TextView t1 = (TextView) findViewById(R.id.pt);
button.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
try {
mSensor.start();
} catch (IOException e) {
e.printStackTrace();
}
// t1.setText((int) mSensor.getAmplitude());
// t1.setText("Hello");
}
});
Button button1 = (Button) findViewById(R.id.button2);
button1.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
mSensor.stop();
t1.setText((int) mSensor.getAmplitude());
}
});
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.menu_main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
//noinspection SimplifiableIfStatement
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
}
SoundMeter活动,我从google代码上的project复制的,但它似乎不起作用。我不知道为什么,从main活动调用此类的方法是否有问题
import android.media.MediaRecorder;
import java.io.IOException;
public class SoundMeter {
static final private double EMA_FILTER = 0.6;
private MediaRecorder mRecorder = null;
private double mEMA = 0.0;
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();
mEMA = 0.0;
}
}
public void stop() {
if (mRecorder != null) {
mRecorder.stop();
mRecorder.release();
mRecorder = null;
}
}
public double getAmplitude() {
if (mRecorder != null)
return (mRecorder.getMaxAmplitude()/2700.0);
else
return 0;
}
public double getAmplitudeEMA() {
double amp = getAmplitude();
mEMA = EMA_FILTER * amp + (1.0 - EMA_FILTER) * mEMA;
return mEMA;
}
}
你需要一个定时器来更新振幅间隔,比如200ms。谢谢,但是你可以更具体一点,我是这里的初学者。我如何在这里实现一个计时器,我应该在哪里添加它?你需要一个更新振幅间隔的计时器,比如200ms。谢谢,但是你可以更具体一点,我是这里的初学者。我如何在这里实现计时器,我应该在哪里添加它?