diff --git a/app/build.gradle b/app/build.gradle index 8de0f96..027b6d8 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -8,8 +8,8 @@ android { applicationId "com.github.axet.audiorecorder" minSdkVersion 16 targetSdkVersion 23 - versionCode 25 - versionName "1.1.4" + versionCode 26 + versionName "1.1.5" } signingConfigs { release { diff --git a/app/src/main/java/com/github/axet/audiorecorder/activities/MainActivity.java b/app/src/main/java/com/github/axet/audiorecorder/activities/MainActivity.java index 0a26f23..0ef0b5c 100644 --- a/app/src/main/java/com/github/axet/audiorecorder/activities/MainActivity.java +++ b/app/src/main/java/com/github/axet/audiorecorder/activities/MainActivity.java @@ -634,7 +634,7 @@ public class MainActivity extends AppCompatActivity implements AbsListView.OnScr // Otherwise, set the URL to null. Uri.parse("http://host/path"), // TODO: Make sure this auto-generated app deep link URI is correct. - Uri.parse("android-app://com.github.axet.mover/http/host/path") + Uri.parse("android-app://com.github.axet.android-audio-recorder/http/host/path") ); AppIndex.AppIndexApi.start(client, viewAction); } diff --git a/app/src/main/java/com/github/axet/audiorecorder/activities/RecordingActivity.java b/app/src/main/java/com/github/axet/audiorecorder/activities/RecordingActivity.java index 69c85c6..d13747e 100644 --- a/app/src/main/java/com/github/axet/audiorecorder/activities/RecordingActivity.java +++ b/app/src/main/java/com/github/axet/audiorecorder/activities/RecordingActivity.java @@ -14,11 +14,12 @@ import android.content.SharedPreferences; import android.content.pm.PackageManager; import android.graphics.Point; import android.media.AudioFormat; -import android.media.AudioManager; import android.media.AudioRecord; import android.media.AudioTrack; import android.media.MediaRecorder; -import android.os.*; +import android.os.Build; +import android.os.Bundle; +import android.os.Handler; import android.preference.PreferenceManager; import android.support.v4.app.ActivityCompat; import android.support.v4.app.NotificationCompat; @@ -40,6 +41,7 @@ import android.widget.Toast; import com.github.axet.audiorecorder.R; import com.github.axet.audiorecorder.app.MainApplication; import com.github.axet.audiorecorder.app.RawSamples; +import com.github.axet.audiorecorder.app.Sound; import com.github.axet.audiorecorder.app.Storage; import com.github.axet.audiorecorder.encoders.Encoder; import com.github.axet.audiorecorder.encoders.EncoderInfo; @@ -49,10 +51,7 @@ import com.github.axet.audiorecorder.encoders.FormatM4A; import com.github.axet.audiorecorder.encoders.FormatWAV; import com.github.axet.audiorecorder.widgets.PitchView; -import java.io.BufferedOutputStream; -import java.io.DataOutputStream; import java.io.File; -import java.io.IOException; public class RecordingActivity extends AppCompatActivity { public static int AUDIO_FORMAT = AudioFormat.ENCODING_PCM_16BIT; @@ -103,9 +102,8 @@ public class RecordingActivity extends AppCompatActivity { ImageButton pause; PitchView pitch; - int soundMode; - Storage storage; + Sound sound; public class RecordingReceiver extends BroadcastReceiver { @Override @@ -161,6 +159,7 @@ public class RecordingActivity extends AppCompatActivity { edit(false); storage = new Storage(this); + sound = new Sound(this); try { targetFile = storage.getNewFile(); @@ -363,7 +362,7 @@ public class RecordingActivity extends AppCompatActivity { thread = null; } pitch.pause(); - unsilent(); + sound.unsilent(); } void edit(boolean b) { @@ -453,7 +452,7 @@ public class RecordingActivity extends AppCompatActivity { short[] buf = new short[len]; rs.open(editSample, buf.length); int r = rs.read(buf); - play = generateTrack(buf, r); + play = sound.generateTrack(sampleRate, buf, r); play.play(); play.setPositionNotificationPeriod(playUpdate); play.setPlaybackPositionUpdateListener(listener, handler); @@ -530,7 +529,7 @@ public class RecordingActivity extends AppCompatActivity { state.setText("recording"); - silent(); + sound.silent(); pause.setImageResource(R.drawable.ic_pause_24dp); @@ -750,39 +749,6 @@ public class RecordingActivity extends AppCompatActivity { return true; } - void silent() { - SharedPreferences shared = PreferenceManager.getDefaultSharedPreferences(this); - if (shared.getBoolean(MainApplication.PREFERENCE_SILENT, false)) { - AudioManager am = (AudioManager) getBaseContext().getSystemService(Context.AUDIO_SERVICE); - soundMode = am.getRingerMode(); - - if (soundMode == AudioManager.RINGER_MODE_SILENT) { - // we already in SILENT mode. keep all unchanged. - soundMode = -1; - return; - } - - am.setStreamVolume(AudioManager.STREAM_RING, am.getStreamVolume(AudioManager.STREAM_RING), AudioManager.FLAG_SHOW_UI); - am.setRingerMode(AudioManager.RINGER_MODE_SILENT); - } - } - - void unsilent() { - // keep unchanged - if (soundMode == -1) - return; - - SharedPreferences shared = PreferenceManager.getDefaultSharedPreferences(this); - if (shared.getBoolean(MainApplication.PREFERENCE_SILENT, false)) { - AudioManager am = (AudioManager) getBaseContext().getSystemService(Context.AUDIO_SERVICE); - int soundMode = am.getRingerMode(); - if (soundMode == AudioManager.RINGER_MODE_SILENT) { - am.setRingerMode(this.soundMode); - am.setStreamVolume(AudioManager.STREAM_RING, am.getStreamVolume(AudioManager.STREAM_RING), AudioManager.FLAG_SHOW_UI); - } - } - } - EncoderInfo getInfo() { final int channels = CHANNEL_CONFIG == AudioFormat.CHANNEL_IN_STEREO ? 2 : 1; final int bps = AUDIO_FORMAT == AudioFormat.ENCODING_PCM_16BIT ? 16 : 8; @@ -846,28 +812,4 @@ public class RecordingActivity extends AppCompatActivity { } }); } - - private AudioTrack generateTrack(short[] buf, int len) { - int end = len; - - int c = 0; - - if (CHANNEL_CONFIG == AudioFormat.CHANNEL_IN_MONO) - c = AudioFormat.CHANNEL_OUT_MONO; - - if (CHANNEL_CONFIG == AudioFormat.CHANNEL_IN_STEREO) - c = AudioFormat.CHANNEL_OUT_STEREO; - - // old phones bug. - // http://stackoverflow.com/questions/27602492 - // - // with MODE_STATIC setNotificationMarkerPosition not called - AudioTrack track = new AudioTrack(AudioManager.STREAM_MUSIC, sampleRate, - c, AUDIO_FORMAT, - len * (Short.SIZE / 8), AudioTrack.MODE_STREAM); - track.write(buf, 0, len); - if (track.setNotificationMarkerPosition(end) != AudioTrack.SUCCESS) - throw new RuntimeException("unable to set marker"); - return track; - } } diff --git a/app/src/main/java/com/github/axet/audiorecorder/app/MainApplication.java b/app/src/main/java/com/github/axet/audiorecorder/app/MainApplication.java index 9226484..a3e38c5 100644 --- a/app/src/main/java/com/github/axet/audiorecorder/app/MainApplication.java +++ b/app/src/main/java/com/github/axet/audiorecorder/app/MainApplication.java @@ -53,4 +53,5 @@ public class MainApplication extends Application { return str; } + } diff --git a/app/src/main/java/com/github/axet/audiorecorder/app/Sound.java b/app/src/main/java/com/github/axet/audiorecorder/app/Sound.java new file mode 100644 index 0000000..563740b --- /dev/null +++ b/app/src/main/java/com/github/axet/audiorecorder/app/Sound.java @@ -0,0 +1,77 @@ +package com.github.axet.audiorecorder.app; + +import android.content.Context; +import android.content.SharedPreferences; +import android.media.AudioFormat; +import android.media.AudioManager; +import android.media.AudioTrack; +import android.preference.PreferenceManager; + +import com.github.axet.audiorecorder.activities.RecordingActivity; + +public class Sound { + Context context; + + int soundMode; + + public Sound(Context context) { + this.context = context; + } + + public void silent() { + SharedPreferences shared = PreferenceManager.getDefaultSharedPreferences(context); + if (shared.getBoolean(MainApplication.PREFERENCE_SILENT, false)) { + AudioManager am = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE); + soundMode = am.getRingerMode(); + + if (soundMode == AudioManager.RINGER_MODE_SILENT) { + // we already in SILENT mode. keep all unchanged. + soundMode = -1; + return; + } + + am.setStreamVolume(AudioManager.STREAM_RING, am.getStreamVolume(AudioManager.STREAM_RING), AudioManager.FLAG_SHOW_UI); + am.setRingerMode(AudioManager.RINGER_MODE_SILENT); + } + } + + public void unsilent() { + // keep unchanged + if (soundMode == -1) + return; + + SharedPreferences shared = PreferenceManager.getDefaultSharedPreferences(context); + if (shared.getBoolean(MainApplication.PREFERENCE_SILENT, false)) { + AudioManager am = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE); + int soundMode = am.getRingerMode(); + if (soundMode == AudioManager.RINGER_MODE_SILENT) { + am.setRingerMode(this.soundMode); + am.setStreamVolume(AudioManager.STREAM_RING, am.getStreamVolume(AudioManager.STREAM_RING), AudioManager.FLAG_SHOW_UI); + } + } + } + + public AudioTrack generateTrack(int sampleRate, short[] buf, int len) { + int end = len; + + int c = 0; + + if (RecordingActivity.CHANNEL_CONFIG == AudioFormat.CHANNEL_IN_MONO) + c = AudioFormat.CHANNEL_OUT_MONO; + + if (RecordingActivity.CHANNEL_CONFIG == AudioFormat.CHANNEL_IN_STEREO) + c = AudioFormat.CHANNEL_OUT_STEREO; + + // old phones bug. + // http://stackoverflow.com/questions/27602492 + // + // with MODE_STATIC setNotificationMarkerPosition not called + AudioTrack track = new AudioTrack(AudioManager.STREAM_MUSIC, sampleRate, + c, RecordingActivity.AUDIO_FORMAT, + len * (Short.SIZE / 8), AudioTrack.MODE_STREAM); + track.write(buf, 0, len); + if (track.setNotificationMarkerPosition(end) != AudioTrack.SUCCESS) + throw new RuntimeException("unable to set marker"); + return track; + } +}