建立一個 class SoundMeter.java :
class SoundMeter {
private MediaRecorder mRecorder = null;
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();
}
}
void stop() {
if (mRecorder != null) {
mRecorder.stop();
mRecorder.release();
mRecorder = null;
}
}
double getAmplitude() {
if (mRecorder != null)
return mRecorder.getMaxAmplitude();
else
return 0;
}
}
MainActivity.java:
public class MainActivity extends AppCompatActivity{
private static Handler exHandler;
private static SoundMeter mSoundMeter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// set the getting amplitude handler
exHandler = new Handler();
// set up SoundMeter
mSoundMeter = new SoundMeter();
try {
mSoundMeter.start();
} catch (IOException e) {
e.printStackTrace();
}
}
@Override
protected void onResume(){
super.onResume();
exHandler.postDelayed(pollTask, 100);
}
@Override
protected void onPause(){
super.onPause();
exHandler.removeCallbacks(pollTask);
}
@Override
protected void onDestroy(){
super.onDestroy();
mSoundMeter.stop();
exHandler.removeCallbacks(pollTask);
}
private static Runnable pollTask = new Runnable() {
@Override
public void run() {
// get amplitude from microphone
double volume = mSoundMeter.getAmplitude();
Log.d("MainActivity", "Volume: " + volume);
// get handler per 0.1 second
exHandler.postDelayed(pollTask, 100);
}
};
}
在AndroidManifest.xml加入權限:
<uses-permission android:name="android.permission.RECORD_AUDIO" />
END
沒有留言:
張貼留言