建立一個 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
沒有留言:
張貼留言