diff --git a/app/build.gradle b/app/build.gradle index 024db50..4bfd829 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -1,12 +1,14 @@ apply plugin: 'com.android.application' +apply plugin: 'com.github.dcendents.android-maven' +group='com.github.josco007' android { - compileSdkVersion 24 + compileSdkVersion 28 buildToolsVersion "24.0.2" defaultConfig { applicationId "cafe.adriel.androidaudiorecorder.example" minSdkVersion 15 - targetSdkVersion 24 + targetSdkVersion 28 versionCode 1 versionName "1.0" } @@ -19,8 +21,8 @@ android { } dependencies { - compile 'com.android.support:appcompat-v7:24.2.1' - compile project(':lib') + implementation 'com.android.support:appcompat-v7:28.0.0' + implementation project(':lib') // compile 'com.github.adrielcafe:AndroidAudioRecorder:0.1.0' } diff --git a/app/src/main/java/cafe/adriel/androidaudiorecorder/example/MainActivity.java b/app/src/main/java/cafe/adriel/androidaudiorecorder/example/MainActivity.java index 177baa1..d2f1dc3 100644 --- a/app/src/main/java/cafe/adriel/androidaudiorecorder/example/MainActivity.java +++ b/app/src/main/java/cafe/adriel/androidaudiorecorder/example/MainActivity.java @@ -11,6 +11,7 @@ import android.widget.Toast; import cafe.adriel.androidaudiorecorder.AndroidAudioRecorder; +import cafe.adriel.androidaudiorecorder.PlayerManager; import cafe.adriel.androidaudiorecorder.model.AudioChannel; import cafe.adriel.androidaudiorecorder.model.AudioSampleRate; import cafe.adriel.androidaudiorecorder.model.AudioSource; @@ -32,6 +33,7 @@ protected void onCreate(Bundle savedInstanceState) { Util.requestPermission(this, Manifest.permission.RECORD_AUDIO); Util.requestPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE); + } @Override @@ -62,6 +64,7 @@ public void recordAudio(View v) { // Start recording .record(); + } } \ No newline at end of file diff --git a/build.gradle b/build.gradle index ccb76fa..51ae9b5 100644 --- a/build.gradle +++ b/build.gradle @@ -1,15 +1,18 @@ buildscript { repositories { jcenter() + google() } dependencies { - classpath 'com.android.tools.build:gradle:2.2.0' + classpath 'com.android.tools.build:gradle:3.5.3' + classpath 'com.github.dcendents:android-maven-gradle-plugin:1.4.1' } } allprojects { repositories { jcenter() + google() } } diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 2fac210..098e224 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ -#Thu Aug 25 11:20:16 BRT 2016 +#Fri Jul 03 20:42:09 MDT 2020 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-2.14.1-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-5.4.1-all.zip diff --git a/lib/build.gradle b/lib/build.gradle index 2a9c22c..6bddbf2 100644 --- a/lib/build.gradle +++ b/lib/build.gradle @@ -1,12 +1,12 @@ apply plugin: 'com.android.library' android { - compileSdkVersion 24 + compileSdkVersion 28 buildToolsVersion "24.0.2" defaultConfig { minSdkVersion 15 - targetSdkVersion 24 + targetSdkVersion 28 versionCode 1 versionName "1.0" } @@ -19,7 +19,7 @@ android { } dependencies { - compile 'com.android.support:appcompat-v7:24.2.1' - compile 'com.kailashdabhi:om-recorder:1.1.0' - compile 'com.cleveroad:audiovisualization:1.0.0' + implementation 'com.android.support:appcompat-v7:28.0.0' + implementation 'com.kailashdabhi:om-recorder:1.1.0' + implementation 'com.cleveroad:audiovisualization:1.0.0' } \ No newline at end of file diff --git a/lib/src/main/java/cafe/adriel/androidaudiorecorder/AudioRecorderActivity.java b/lib/src/main/java/cafe/adriel/androidaudiorecorder/AudioRecorderActivity.java index e5a7d9a..b54cbdb 100644 --- a/lib/src/main/java/cafe/adriel/androidaudiorecorder/AudioRecorderActivity.java +++ b/lib/src/main/java/cafe/adriel/androidaudiorecorder/AudioRecorderActivity.java @@ -3,10 +3,17 @@ import android.graphics.Color; import android.graphics.PorterDuff; import android.graphics.drawable.ColorDrawable; +import android.media.AudioFormat; +import android.media.AudioManager; +import android.media.AudioTrack; import android.media.MediaPlayer; +import android.net.Uri; import android.os.Bundle; +import android.os.Handler; +import android.os.Looper; import android.support.v4.content.ContextCompat; import android.support.v7.app.AppCompatActivity; +import android.util.Log; import android.view.Menu; import android.view.MenuItem; import android.view.View; @@ -19,6 +26,8 @@ import com.cleveroad.audiovisualization.GLAudioVisualizationView; import java.io.File; +import java.io.FileInputStream; +import java.io.IOException; import java.util.Timer; import java.util.TimerTask; @@ -41,7 +50,6 @@ public class AudioRecorderActivity extends AppCompatActivity private boolean autoStart; private boolean keepDisplayOn; - private MediaPlayer player; private Recorder recorder; private VisualizerHandler visualizerHandler; @@ -328,10 +336,45 @@ private void stopRecording(){ } private void startPlaying(){ - try { + + stopRecording(); + PlayerManager.getInstance().play(filePath, new PlayerManager.PlayerManagerPlayCallBack() { + @Override + public void onPlayFinished() { + stopPlaying(); + } + }); + + + + /*visualizerView.linkTo(DbmHandler.Factory.newVisualizerHandler(this, player)); + visualizerView.post(new Runnable() { + @Override + public void run() { + //player.setOnCompletionListener(AudioRecorderActivity.this); + + } + }); + * + */ + + timerView.setText("00:00:00"); + statusView.setText(R.string.aar_playing); + statusView.setVisibility(View.VISIBLE); + playView.setImageResource(R.drawable.aar_ic_stop); + + playerSecondsElapsed = 0; + startTimer(); + + /*try { stopRecording(); player = new MediaPlayer(); - player.setDataSource(filePath); + new File(filePath).setReadable(true, false); + + //Uri uri = Uri.parse("android.resource://"+getPackageName()+"/" + R.raw.my_movie); + player.setDataSource(this, Uri.parse(new File(filePath).toURI().toString())); + player.setAudioStreamType(AudioManager.STREAM_MUSIC); + //player.setDataSource(filePath); player.prepare(); player.start(); @@ -353,6 +396,8 @@ public void run() { } catch (Exception e){ e.printStackTrace(); } + + */ } private void stopPlaying(){ @@ -365,22 +410,17 @@ private void stopPlaying(){ visualizerHandler.stop(); } - if(player != null){ - try { - player.stop(); - player.reset(); - } catch (Exception e){ } - } + PlayerManager.getInstance().stop(); + stopTimer(); } private boolean isPlaying(){ - try { - return player != null && player.isPlaying() && !isRecording; - } catch (Exception e){ - return false; + if (PlayerManager.getInstance().isPlaying() && !isRecording) { + return true; } + return false; } private void startTimer(){ @@ -406,6 +446,7 @@ private void updateTimer() { runOnUiThread(new Runnable() { @Override public void run() { + Log.i("","is pala"+ isPlaying()); if(isRecording) { recorderSecondsElapsed++; timerView.setText(Util.formatSeconds(recorderSecondsElapsed)); diff --git a/lib/src/main/java/cafe/adriel/androidaudiorecorder/PlayerManager.java b/lib/src/main/java/cafe/adriel/androidaudiorecorder/PlayerManager.java new file mode 100644 index 0000000..8d3603e --- /dev/null +++ b/lib/src/main/java/cafe/adriel/androidaudiorecorder/PlayerManager.java @@ -0,0 +1,90 @@ +package cafe.adriel.androidaudiorecorder; + +import android.media.AudioFormat; +import android.media.AudioManager; +import android.media.AudioTrack; +import android.os.Handler; +import android.os.Looper; + +import java.io.File; +import java.io.FileInputStream; +import java.io.IOException; + +public class PlayerManager { + + public interface PlayerManagerPlayCallBack{ + void onPlayFinished(); + } + + private boolean isPlaying = false; + private AudioTrack at = null; + + private static final PlayerManager ourInstance = new PlayerManager(); + + public static PlayerManager getInstance() { + return ourInstance; + } + + private PlayerManager() { + } + + public void play(final String filePath, final PlayerManagerPlayCallBack playerManagerPlayCallBack){ + new Thread(new Runnable() { + @Override + public void run() { + try { + isPlaying = true; + // just put here your wav file + File yourWavFile = new File(filePath); + FileInputStream fis = new FileInputStream(yourWavFile); + int minBufferSize = AudioTrack.getMinBufferSize(48000, + AudioFormat.CHANNEL_OUT_STEREO, AudioFormat.ENCODING_PCM_16BIT); + at = new AudioTrack(AudioManager.STREAM_MUSIC, 48000, + AudioFormat.CHANNEL_OUT_STEREO, AudioFormat.ENCODING_PCM_16BIT, + minBufferSize, AudioTrack.MODE_STREAM); + + int i = 0; + byte[] music = null; + try { + + music = new byte[512]; + at.play(); + + while ((i = fis.read(music)) != -1 && isPlaying){ + at.write(music, 0, i); + } + + + } catch (IOException e) { + e.printStackTrace(); + } + + at.stop(); + at.release(); + isPlaying = false; + new Handler(Looper.getMainLooper()).post(new Runnable() { + @Override + public void run() { + playerManagerPlayCallBack.onPlayFinished(); + } + }); + + } catch (IOException ex) { + ex.printStackTrace(); + } + } + }).start(); + } + + public void stop(){ + if (at == null){ + return; + } + isPlaying = false; + + } + + public boolean isPlaying() { + return isPlaying; + } +}