diff --git a/app/build.gradle b/app/build.gradle index 1e7e80a..89fba5c 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -8,8 +8,8 @@ android { applicationId "com.github.axet.audiorecorder" minSdkVersion 9 targetSdkVersion 23 - versionCode 192 - versionName "3.0.27" + versionCode 193 + versionName "3.0.28" } signingConfigs { release { 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 97f6372..0096318 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 @@ -83,9 +83,10 @@ public class RecordingActivity extends AppCompatActivity { int sampleRate; // pitch size in samples. how many samples count need to update view. 4410 for 100ms update. int samplesUpdate; + int samplesUpdateStereo; // output target file 2016-01-01 01.01.01.wav Uri targetUri = null; - // how many samples passed for current recording + // how many samples passed for current recording, stereo = samplesTime * 2 long samplesTime; // current cut position in mono samples, stereo = editSample * 2 long editSample = -1; @@ -215,6 +216,7 @@ public class RecordingActivity extends AppCompatActivity { return; } samplesUpdate = (int) (pitch.getPitchTime() * sampleRate / 1000.0); + samplesUpdateStereo = samplesUpdate * MainApplication.getChannels(this); updateBufferSize(false); @@ -290,12 +292,14 @@ public class RecordingActivity extends AppCompatActivity { } void loadSamples() { - if (!storage.getTempRecording().exists()) { - updateSamples(0); + File f = storage.getTempRecording(); + if (!f.exists()) { + samplesTime = 0; + updateSamples(samplesTime); return; } - RawSamples rs = new RawSamples(storage.getTempRecording()); + RawSamples rs = new RawSamples(f); samplesTime = rs.getSamples() / MainApplication.getChannels(this); DisplayMetrics metrics = new DisplayMetrics(); @@ -303,8 +307,8 @@ public class RecordingActivity extends AppCompatActivity { int count = pitch.getMaxPitchCount(metrics.widthPixels); - short[] buf = new short[count * samplesUpdate]; - long cut = samplesTime - buf.length; + short[] buf = new short[count * samplesUpdateStereo]; + long cut = samplesTime * MainApplication.getChannels(this) - buf.length; if (cut < 0) cut = 0; @@ -313,7 +317,6 @@ public class RecordingActivity extends AppCompatActivity { int len = rs.read(buf); rs.close(); - int samplesUpdateStereo = samplesUpdate * MainApplication.getChannels(this); pitch.clear(cut / samplesUpdateStereo); int lenUpdate = len / samplesUpdateStereo * samplesUpdateStereo; // cut right overs (leftovers from right) for (int i = 0; i < lenUpdate; i += samplesUpdateStereo) { @@ -633,7 +636,7 @@ public class RecordingActivity extends AppCompatActivity { } final RawSamples rs = new RawSamples(storage.getTempRecording()); - rs.open(samplesTime); + rs.open(samplesTime * MainApplication.getChannels(this)); final AudioRecord recorder = rec; @@ -670,8 +673,6 @@ public class RecordingActivity extends AppCompatActivity { boolean stableRefresh = false; - int samplesUpdateStereo = samplesUpdate * MainApplication.getChannels(RecordingActivity.this); - while (!Thread.currentThread().isInterrupted()) { synchronized (bufferSizeLock) { if (buffer == null || buffer.length != bufferSize)