Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package org.saintandreas.audiotest;
- import android.Manifest;
- import android.app.Activity;
- import android.content.pm.PackageManager;
- import android.media.MediaRecorder;
- import android.opengl.GLES32;
- import android.opengl.GLSurfaceView;
- import android.os.Bundle;
- import android.support.annotation.NonNull;
- import android.util.Log;
- import java.io.IOException;
- import java.util.Timer;
- import java.util.TimerTask;
- import javax.microedition.khronos.egl.EGLConfig;
- import javax.microedition.khronos.opengles.GL10;
- public class MainActivity extends Activity implements GLSurfaceView.Renderer {
- private final String TAG = MainActivity.class.getName();
- private boolean permissionToRecordAccepted = false;
- private String [] permissions = {Manifest.permission.RECORD_AUDIO};
- private static final int REQUEST_RECORD_AUDIO_PERMISSION = 200;
- private float maxAudio = 1.0f;
- private float lastAudio = 0.0f;
- private GLSurfaceView mGLView;
- private MediaRecorder mRecorder = null;
- //private native void nativeOnCreate();
- @Override
- public void onSurfaceCreated(GL10 unused, EGLConfig config) {
- }
- @Override
- public void onDrawFrame(GL10 unused) {
- float audioLevel = lastAudio / maxAudio;
- GLES32.glClearColor(audioLevel, audioLevel > 0.2f ? 1.0f :0.0f, 0.0f, 1.0f);
- GLES32.glClear(GLES32.GL_COLOR_BUFFER_BIT);
- }
- @Override
- public void onSurfaceChanged(GL10 unused, int width, int height) {
- GLES32.glViewport(0, 0, width, height);
- }
- @Override
- public void onCreate(Bundle savedInstanceState) {
- System.loadLibrary("audioTest");
- super.onCreate(savedInstanceState);
- requestPermissions(permissions, REQUEST_RECORD_AUDIO_PERMISSION);
- mGLView = new GLSurfaceView(this);
- mGLView.setEGLContextClientVersion(3);
- mGLView.setRenderer(MainActivity.this);
- setContentView(mGLView);
- //nativeOnCreate();
- }
- public void monitorAudio() {
- if (mRecorder != null) {
- lastAudio = mRecorder.getMaxAmplitude();
- maxAudio = Math.max(lastAudio, maxAudio);
- }
- }
- @Override
- public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
- super.onRequestPermissionsResult(requestCode, permissions, grantResults);
- switch (requestCode){
- case REQUEST_RECORD_AUDIO_PERMISSION:
- permissionToRecordAccepted = grantResults[0] == PackageManager.PERMISSION_GRANTED;
- break;
- }
- if (!permissionToRecordAccepted ) {
- finish();
- } else {
- new Timer().schedule(new TimerTask() { @Override public void run() { startRecording(); }}, 1000);
- }
- }
- Timer mMonitorTimer = null;
- private void startRecording() {
- mRecorder = new MediaRecorder();
- mRecorder.setAudioSource(MediaRecorder.AudioSource.VOICE_COMMUNICATION);
- mRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
- mRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
- mRecorder.setOutputFile("/dev/null");
- try {
- mRecorder.prepare();
- } catch (IOException e) {
- Log.e(TAG, "prepare() failed");
- }
- mRecorder.start();
- mMonitorTimer = new Timer();
- mMonitorTimer.scheduleAtFixedRate(new TimerTask() { @Override public void run(){ monitorAudio(); } }, 100, 100);
- }
- @Override
- public void onStop() {
- super.onStop();
- if (mRecorder != null) {
- mMonitorTimer.cancel();
- mMonitorTimer = null;
- mRecorder.release();
- mRecorder = null;
- }
- }
- }
Add Comment
Please, Sign In to add comment