From 0e847659f97cff6c94f1d12e13bedaa6b09aff49 Mon Sep 17 00:00:00 2001
From: mezysinc
Date: Fri, 6 Aug 2021 13:36:53 +0000
Subject: [PATCH 01/18] ptbr update
---
app/src/main/res/raw-pt-rBR/about.html | 23 +++++++++++
app/src/main/res/values-pt-rBR/strings.xml | 48 +++++++++++-----------
2 files changed, 47 insertions(+), 24 deletions(-)
create mode 100644 app/src/main/res/raw-pt-rBR/about.html
diff --git a/app/src/main/res/raw-pt-rBR/about.html b/app/src/main/res/raw-pt-rBR/about.html
new file mode 100644
index 0000000..77f223b
--- /dev/null
+++ b/app/src/main/res/raw-pt-rBR/about.html
@@ -0,0 +1,23 @@
+
+
+
+
+
+
+Sobre
+
+ Compatível com Android!
+
+
+Gravador de áudio com pasta de gravação personalizada, controle na tela de bloqueio, indicador de volume e notificação de gravação.
+
+
+ - Licença:
+ - GPLv3
+ - Código fonte:
+ - https://gitlab.com/axet/android-audio-recorder
+
+
+
diff --git a/app/src/main/res/values-pt-rBR/strings.xml b/app/src/main/res/values-pt-rBR/strings.xml
index 2e3d367..4dfc80c 100644
--- a/app/src/main/res/values-pt-rBR/strings.xml
+++ b/app/src/main/res/values-pt-rBR/strings.xml
@@ -1,5 +1,5 @@
- Audio Recorder
+ Gravador de áudio
- 48 kHz
@@ -8,7 +8,7 @@
- 22 kHz
- 16 kHz (padrão)
- 11 kHz
- - 8 kHz (ligação de tel.)
+ - 8 kHz (tipo ligação)
@@ -18,8 +18,8 @@
- - Tema Claro
- - Tema Escuro
+ - Tema claro
+ - Tema escuro
@@ -27,52 +27,52 @@
- Estéreo
- Não foi encontrado nenhum aplicativo para explorar os arquivos
- pausado (chamada atendida)
+ Não foi encontrado nenhum app para abrir os arquivos
+ pausado (ligação atendida)
gravando
codificando
pausado
editando
- Deseja cancelar
+ Quer cancelar
Codificando...
Pausado...
Gravando
- Abrir pasta das gravações
- A lista das gravações está vazia\n\nToque no ícone do microfone para começar a gravar
+ Abrir pasta de gravações
+ A lista de gravações está vazia\n\nToque no ícone do microfone para começar a gravar
Gravar
Cortar
Parar
Cancelar
Pausar
- Pasta das gravações
+ Pasta de gravações
Taxa de amostragem
Codificação
- Formato de saída do arquivo (.wav, .mp3, etc.)
+ Tipo de arquivo de áudio (.wav, .mp3, etc.)
Canais de áudio
Canais de gravação
- Formato do nome de arquivo
- Pausar durante a chamada
- e voltar a gravar quando a chamada for desligada
+ Formato de nome de arquivo
+ Pausar durante a ligação
+ e voltar a gravar quando a ligação for concluída
Modo silencioso
Ativar o \'modo silencioso\' durante a gravação
- Controle da tela bloqueada
- Mostrar os controles quando a tela estiver bloqueada
+ Controle na tela de bloqueio
+ Mostrar menu de controle quando a tela for bloqueada
Tema do App
Definir o tema (claro ou escuro)
Aplicativo
Gravações
Codificação em tempo real
- Ativando codificação em tempo real desabilitará a edição e recuperação após a falha
+ Ao permitir codificação em tempo real você desabilitará a edição e recuperação após uma falha
pausado (bluetooth desconectado)
Pesquisar
- Salvar como WAV
- Auto-fechar em (%1$d)
+ Salvar como .wav
+ Fechar autom. em (%1$d)
Mic silenciado
- Android 9 (Pie) e mais recente impedem que os Apps em segundo plano utilizem o microfone. Solução: ou desabilitar o SeLinux ou usar a versão anterior do Android!
- Microfone foi pausado pelo Android, o tempo de gravação é menor do que o conteúdo gravado. Verifique se seu dispositivo suporta gravação em segundo plano ou se é o suficiente rápido para utilizar as configurações selecionadas
- Iniciar Gravação
- Parar a Gravação
- Codificação em segundo plano foi pausada devido a configuração do Android de otimização da bateria, por favor permita que o App funcione em segundo plano
+ Android 9 (Pie) e mais recentes impedem que os apps usem o microfone em segundo plano. Solução: desabilite o SeLinux ou use uma versão mais antiga do Android
+ O microfone foi pausado pelo Android, o tempo de gravação é menor do que o conteúdo gravado. Verifique se seu dispositivo suporta gravação em segundo plano ou se é o suficientemente rápido para usar as configurações selecionadas
+ Iniciar uma gravação
+ Parar a gravação
+ A codificação em segundo plano foi pausada pela configuração de otimização da bateria do Android, por favor permita que o App funcione em segundo plano
/s
From 24e2556e80e5db913e55ab46409d6983224b0734 Mon Sep 17 00:00:00 2001
From: Alexey Kuznetsov
Date: Fri, 6 Aug 2021 17:05:21 +0300
Subject: [PATCH 02/18] update pl by @rehork
---
app/src/main/res/raw-pl/about.html | 2 +-
app/src/main/res/values-pl/strings.xml | 50 +++++++++++++-------------
2 files changed, 26 insertions(+), 26 deletions(-)
diff --git a/app/src/main/res/raw-pl/about.html b/app/src/main/res/raw-pl/about.html
index acd95e2..52ec077 100644
--- a/app/src/main/res/raw-pl/about.html
+++ b/app/src/main/res/raw-pl/about.html
@@ -12,7 +12,7 @@
Przyjazny dla systemu Android!
-Audio Recorder with custom recording folder, nice recording volume indicator, recording notification, recording lock screen activity.
+Rejestrator dźwięku z własnym folderem nagrywania, ładnym wskaźnikiem głośności nagrywania, powiadomieniem o nagrywaniu oraz sterowaniem nagrywania z poziomu blokady ekranu.
- Licencja:
diff --git a/app/src/main/res/values-pl/strings.xml b/app/src/main/res/values-pl/strings.xml
index c6899c4..d7e519b 100644
--- a/app/src/main/res/values-pl/strings.xml
+++ b/app/src/main/res/values-pl/strings.xml
@@ -13,7 +13,7 @@
- Mikrofon
- - Unprocessed
+ - Nieprzetworzone
- Bluetooth
@@ -27,52 +27,52 @@
- Stereo
- No folder view application installed
+ Brak zainstalowanej aplikacji do przeglądania folderów
pauza (wstrzymane przez połączenie)
nagrywanie
- enkodowanie
+ kodowanie
pauza
edytuj
Potwierdź anulowanie
- Enkodowanie...
+ Kodowanie...
Pauza...
Nagrywanie
- Otwórz Folder Nagrywania
- Lista nagrań jest pusta\n\nKliknij Nagraj, aby rozpocząć nagrywanie
+ Otwórz folder z nagraniami
+ Lista nagrań jest pusta\n\nDotknij ikonki "mikrofonu", aby rozpocząć nagrywanie
Nagrywaj
Wytnij
- Stop
+ Zatrzymaj
Anuluj
Pauza
- Ścieżka Przechowywania
+ Folder nagrań
Tempo Próbkowania
- Enkodowanie
+ Kodowanie
Wyjściowy format pliku (.wav, .m4a, ...)
- Tryb
- Recording channels
- Format Nazwy
+ Kanały audio
+ Kanały nagrywania
+ Format pliku
Wstrzymaj podczas połączeń
- Zatrzymaj nagrywanie po odebraniu i kontynuuj podcas rozłączania
- Tryb Wyciszenia
- Przełącz telefon w \'tryb ciszy\' podczas nagrywania
+ Zatrzymaj nagrywanie po odebraniu i kontynuuj po rozłączeniu
+ Tryb cichy
+ Załącz \'tryb cichy\' podczas nagrywania
Sterowanie z ekranu blokady
Pokaż elementy sterujące, gdy telefon jest zablokowany
Motyw Aplikacji
- Ustaw motyw aplikacji (ciemny / jasny)
+ Ustaw motyw aplikacji (ciemny/jasny)
Aplikacja
Nagrania
- Enkodowanie w Locie
- Włączając enkodowanie w locie, wyłącza edytowanie i odzyskiwanie po awarii
+ Kodowanie "w locie"
+ Włączając kodowanie "w locie", wyłącza edytowanie i odzyskiwanie po awarii
pauza (bluetooth rozłaczony)
Szukaj
Zapisz jako WAV
- Auto close in (%1$d)
- Mic muted
- Android Pie and above prevent idle background apps from using microphone. Please disable selinux or install previous android version!
- Mic paused by OS, recording time is less then data recorded, check if you device supports background recording or it is fast enougth for selected settings
- Start Recording
- Stop Recording
- Background encoding paused due to android Battery Optimization settings, please allow this application work in background
+ Zamknij automatycznie za (%1$d)
+ Mikrofon wyciszony
+ Android 9 (Pie) i nowsze wersje uniemożliwiają bezczynnym aplikacjom działającym w tle korzystanie z mikrofonu. Prosimy o wyłączenie SeLinux lub aktualizację do wcześniejszej wersji Androida!
+ Mikrofon został wstrzymany przez system Android, czas nagrywania jest krótszy niż zapisane dane, sprawdź czy urządzenie obsługuje nagrywanie w tle lub czy jest wystarczająco szybkie dla wybranych ustawień
+ Rozpocznij nagrywanie
+ Zakończ nagrywanie
+ Kodowanie w tle zostało wstrzymane przez system Android w celu oszczędzania energii, proszę pozwolić tej aplikacji pracować w tle (ustawienia systemu: optymalizacja baterii)
/s
From 1da8329831e56d5828b89a4ae2c11fe5b42cd363 Mon Sep 17 00:00:00 2001
From: Alexey Kuznetsov
Date: Fri, 17 Dec 2021 22:08:10 +0300
Subject: [PATCH 03/18] add gradle prop
---
gradle/wrapper/gradle-wrapper.properties | 5 +++++
1 file changed, 5 insertions(+)
create mode 100644 gradle/wrapper/gradle-wrapper.properties
diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties
new file mode 100644
index 0000000..622ab64
--- /dev/null
+++ b/gradle/wrapper/gradle-wrapper.properties
@@ -0,0 +1,5 @@
+distributionBase=GRADLE_USER_HOME
+distributionPath=wrapper/dists
+distributionUrl=https\://services.gradle.org/distributions/gradle-6.5-bin.zip
+zipStoreBase=GRADLE_USER_HOME
+zipStorePath=wrapper/dists
From 5b58fbbf65917f35766b0c11174a91a14a25931b Mon Sep 17 00:00:00 2001
From: Alexey Kuznetsov
Date: Wed, 22 Dec 2021 21:44:06 +0300
Subject: [PATCH 04/18] add rawsamples info
---
app/build.gradle | 8 ++++----
.../activities/RecordingActivity.java | 14 +++++++-------
.../axet/audiorecorder/app/EncodingStorage.java | 6 +++---
.../audiorecorder/app/RecordingStorage.java | 17 +++++++++++++----
4 files changed, 27 insertions(+), 18 deletions(-)
diff --git a/app/build.gradle b/app/build.gradle
index 741d6a9..5cc8441 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -3,14 +3,14 @@ apply plugin: 'com.github.axet.dxplugin'
android {
compileSdkVersion 29
- buildToolsVersion '28.0.3'
+ ndkVersion "16.1.4479499" // strip debug symbols
defaultConfig {
applicationId "com.github.axet.audiorecorder"
minSdkVersion 9
targetSdkVersion 29
- versionCode 355
- versionName "3.4.5"
+ versionCode 355
+ versionName "3.4.5"
}
signingConfigs {
release {
@@ -53,8 +53,8 @@ android {
dependencies {
testImplementation 'junit:junit:4.12'
- implementation 'com.github.axet:android-library:1.33.6'
implementation ('com.github.axet:android-audio-library:1.0.180') { exclude module: 'android-library' } // implementation project(':android-audio-library')
+ implementation 'com.github.axet:android-library:1.34.12'
implementation ('com.github.axet:wget:1.7.0') { exclude group: 'org.json', module: 'json' }
assets('com.google.android.exoplayer:exoplayer:2.7.3') { exclude group: 'com.android.support' }
}
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 c717f02..5d02a21 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
@@ -556,8 +556,8 @@ public class RecordingActivity extends AppCompatThemeActivity {
return;
}
- RawSamples rs = new RawSamples(f);
- recording.samplesTime = rs.getSamples() / Sound.getChannels(this);
+ RawSamples rs = new RawSamples(f, recording.getInfo());
+ recording.samplesTime = rs.getSamples() / rs.info.channels;
DisplayMetrics metrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(metrics);
@@ -780,8 +780,8 @@ public class RecordingActivity extends AppCompatThemeActivity {
int playUpdate = PitchView.UPDATE_SPEED * recording.sampleRate / 1000;
- RawSamples rs = new RawSamples(recording.storage.getTempRecording());
- int len = (int) (rs.getSamples() - editSample * Sound.getChannels(this)); // in samples
+ RawSamples rs = new RawSamples(recording.storage.getTempRecording(), recording.getInfo());
+ int len = (int) (rs.getSamples() - editSample * rs.info.channels); // in samples
final AudioTrack.OnPlaybackPositionUpdateListener listener = new AudioTrack.OnPlaybackPositionUpdateListener() {
@Override
@@ -800,7 +800,7 @@ public class RecordingActivity extends AppCompatThemeActivity {
};
AudioTrack.AudioBuffer buf = new AudioTrack.AudioBuffer(recording.sampleRate, Sound.getOutMode(this), Sound.DEFAULT_AUDIOFORMAT, len);
- rs.open(editSample * Sound.getChannels(this), buf.len); // len in samples
+ rs.open(editSample * rs.info.channels, buf.len); // len in samples
int r = rs.read(buf.buffer); // r in samples
if (r != buf.len)
throw new RuntimeException("unable to read data");
@@ -827,8 +827,8 @@ public class RecordingActivity extends AppCompatThemeActivity {
if (editSample == -1)
return;
- RawSamples rs = new RawSamples(recording.storage.getTempRecording());
- rs.trunk((editSample + recording.samplesUpdate) * Sound.getChannels(this));
+ RawSamples rs = new RawSamples(recording.storage.getTempRecording(), recording.getInfo());
+ rs.trunk((editSample + recording.samplesUpdate) * rs.info.channels);
rs.close();
edit(false, true);
diff --git a/app/src/main/java/com/github/axet/audiorecorder/app/EncodingStorage.java b/app/src/main/java/com/github/axet/audiorecorder/app/EncodingStorage.java
index 82f760e..1cf7ac9 100644
--- a/app/src/main/java/com/github/axet/audiorecorder/app/EncodingStorage.java
+++ b/app/src/main/java/com/github/axet/audiorecorder/app/EncodingStorage.java
@@ -140,7 +140,7 @@ public class EncodingStorage extends HashMap {
for (File in : keySet()) {
EncodingStorage.Info info = get(in);
final OnFlyEncoding fly = new OnFlyEncoding(this.storage, info.targetUri, info.info);
- encoder = new FileEncoder(storage.getContext(), in, fly);
+ encoder = new FileEncoder(storage.getContext(), in, info.info, fly);
filters(encoder, info.info);
encoding(encoder, fly, info.info, new Runnable() {
@Override
@@ -208,7 +208,7 @@ public class EncodingStorage extends HashMap {
public void encoding(File in, Uri targetUri, RawSamples.Info info) {
OnFlyEncoding fly = new OnFlyEncoding(storage, targetUri, info);
- encoder = new FileEncoder(storage.getContext(), in, fly);
+ encoder = new FileEncoder(storage.getContext(), in, info, fly);
filters(encoder, info);
encoding(encoder, fly, info, new Runnable() {
@Override
@@ -220,7 +220,7 @@ public class EncodingStorage extends HashMap {
public void saveAsWAV(File in, File out, RawSamples.Info info) {
OnFlyEncoding fly = new OnFlyEncoding(storage, out, info);
- encoder = new FileEncoder(storage.getContext(), in, fly);
+ encoder = new FileEncoder(storage.getContext(), in, info, fly);
encoding(encoder, fly, info, new Runnable() {
@Override
public void run() {
diff --git a/app/src/main/java/com/github/axet/audiorecorder/app/RecordingStorage.java b/app/src/main/java/com/github/axet/audiorecorder/app/RecordingStorage.java
index 693affa..9b8cf4b 100644
--- a/app/src/main/java/com/github/axet/audiorecorder/app/RecordingStorage.java
+++ b/app/src/main/java/com/github/axet/audiorecorder/app/RecordingStorage.java
@@ -16,8 +16,17 @@ import com.github.axet.audiolibrary.encoders.OnFlyEncoding;
import com.github.axet.audiorecorder.BuildConfig;
import com.github.axet.audiorecorder.R;
+import org.apache.commons.io.FileUtils;
+import org.apache.commons.io.FilenameUtils;
+import org.json.JSONException;
+
+import java.io.File;
+import java.io.IOException;
import java.nio.ShortBuffer;
+import java.nio.charset.Charset;
+import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
+import java.util.Locale;
import java.util.concurrent.atomic.AtomicBoolean;
public class RecordingStorage {
@@ -35,7 +44,7 @@ public class RecordingStorage {
public Sound sound;
public Storage storage;
- public Encoder e;
+ public Encoder e; // recording encoder (onfly or raw data)
public AtomicBoolean interrupt = new AtomicBoolean(); // nio throws ClosedByInterruptException if thread interrupted
public Thread thread;
@@ -85,8 +94,8 @@ public class RecordingStorage {
};
if (shared.getBoolean(AudioApplication.PREFERENCE_FLY, false)) {
- final OnFlyEncoding fly = new OnFlyEncoding(storage, targetUri, getInfo());
if (e == null) { // do not recreate encoder if on-fly mode enabled
+ final OnFlyEncoding fly = new OnFlyEncoding(storage, targetUri, getInfo());
e = new Encoder() {
@Override
public void encode(short[] buf, int pos, int len) {
@@ -100,8 +109,8 @@ public class RecordingStorage {
};
}
} else {
- final RawSamples rs = new RawSamples(storage.getTempRecording());
- rs.open(samplesTime * Sound.getChannels(context));
+ final RawSamples rs = new RawSamples(storage.getTempRecording(), getInfo());
+ rs.open(samplesTime * rs.info.channels);
e = new Encoder() {
@Override
public void encode(short[] buf, int pos, int len) {
From 96f58f4a94f6bfaf289bc453859bf879c3a881b3 Mon Sep 17 00:00:00 2001
From: Alexey Kuznetsov
Date: Fri, 25 Feb 2022 17:51:23 +0300
Subject: [PATCH 05/18] add internal audio recording source support
---
.../activities/RecordingActivity.java | 37 ++++++++++++++++++-
.../audiorecorder/app/RecordingStorage.java | 20 +++-------
.../services/BluetoothReceiver.java | 3 +-
app/src/main/res/values/attrs.xml | 2 +
app/src/main/res/values/strings.xml | 1 +
5 files changed, 44 insertions(+), 19 deletions(-)
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 5d02a21..5b81065 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
@@ -9,6 +9,7 @@ import android.content.Intent;
import android.content.SharedPreferences;
import android.graphics.Rect;
import android.media.AudioFormat;
+import android.media.MediaRecorder;
import android.net.Uri;
import android.os.Build;
import android.os.Bundle;
@@ -63,6 +64,7 @@ public class RecordingActivity extends AppCompatThemeActivity {
public static final String TAG = RecordingActivity.class.getSimpleName();
public static final int RESULT_START = 1;
+ public static final int RESULT_INTERNAL = 2;
public static final String[] PERMISSIONS_AUDIO = new String[]{
Manifest.permission.RECORD_AUDIO
@@ -926,6 +928,26 @@ public class RecordingActivity extends AppCompatThemeActivity {
void startRecording() {
try {
+ final SharedPreferences shared = PreferenceManager.getDefaultSharedPreferences(this);
+ String source = shared.getString(AudioApplication.PREFERENCE_SOURCE, getString(R.string.source_mic));
+ int user;
+ if (source.equals(getString(R.string.source_raw))) {
+ if (Sound.isUnprocessedSupported(this))
+ user = MediaRecorder.AudioSource.UNPROCESSED;
+ else
+ user = MediaRecorder.AudioSource.VOICE_RECOGNITION;
+ } else if (source.equals(this.getString(R.string.source_internal))) {
+ user = Sound.SOURCE_INTERNAL_AUDIO;
+ } else {
+ user = MediaRecorder.AudioSource.MIC;
+ }
+ if (user == Sound.SOURCE_INTERNAL_AUDIO && !recording.sound.permitted()) {
+ Sound.showInternalAudio(this, RESULT_INTERNAL);
+ return;
+ }
+
+ recording.startRecording(user);
+
edit(false, true);
pitch.setOnTouchListener(null);
@@ -938,8 +960,6 @@ public class RecordingActivity extends AppCompatThemeActivity {
headset(true, true);
- recording.startRecording();
-
RecordingService.startService(this, Storage.getName(this, recording.targetUri), true, duration);
ControlsService.hideIcon(this);
} catch (RuntimeException e) {
@@ -970,6 +990,19 @@ public class RecordingActivity extends AppCompatThemeActivity {
Toast.makeText(this, R.string.not_permitted, Toast.LENGTH_SHORT).show();
finish();
}
+ break;
+ }
+ }
+
+ @Override
+ protected void onActivityResult(int requestCode, int resultCode, Intent data) {
+ super.onActivityResult(requestCode, resultCode, data);
+ switch (requestCode) {
+ case RESULT_INTERNAL:
+ recording.sound.onActivityResult(resultCode, data);
+ if (recording.sound.permitted())
+ startRecording();
+ break;
}
}
diff --git a/app/src/main/java/com/github/axet/audiorecorder/app/RecordingStorage.java b/app/src/main/java/com/github/axet/audiorecorder/app/RecordingStorage.java
index 9b8cf4b..0ddee7d 100644
--- a/app/src/main/java/com/github/axet/audiorecorder/app/RecordingStorage.java
+++ b/app/src/main/java/com/github/axet/audiorecorder/app/RecordingStorage.java
@@ -1,5 +1,6 @@
package com.github.axet.audiorecorder.app;
+import android.app.Activity;
import android.content.Context;
import android.content.SharedPreferences;
import android.media.AudioRecord;
@@ -71,24 +72,13 @@ public class RecordingStorage {
samplesUpdateStereo = samplesUpdate * Sound.getChannels(context);
}
- public void startRecording() {
- sound.silent();
-
+ public void startRecording(int source) {
final SharedPreferences shared = android.preference.PreferenceManager.getDefaultSharedPreferences(context);
- int user;
-
- if (shared.getString(AudioApplication.PREFERENCE_SOURCE, context.getString(R.string.source_mic)).equals(context.getString(R.string.source_raw))) {
- if (Sound.isUnprocessedSupported(context))
- user = MediaRecorder.AudioSource.UNPROCESSED;
- else
- user = MediaRecorder.AudioSource.VOICE_RECOGNITION;
- } else {
- user = MediaRecorder.AudioSource.MIC;
- }
+ sound.silent();
int[] ss = new int[]{
- user,
+ source,
MediaRecorder.AudioSource.MIC,
MediaRecorder.AudioSource.DEFAULT
};
@@ -124,7 +114,7 @@ public class RecordingStorage {
};
}
- final AudioRecord recorder = Sound.createAudioRecorder(context, sampleRate, ss, 0);
+ final AudioRecord recorder = sound.createAudioRecorder(sampleRate, ss, 0);
final Thread old = thread;
final AtomicBoolean oldb = interrupt;
diff --git a/app/src/main/java/com/github/axet/audiorecorder/services/BluetoothReceiver.java b/app/src/main/java/com/github/axet/audiorecorder/services/BluetoothReceiver.java
index 3a11598..ac4c380 100644
--- a/app/src/main/java/com/github/axet/audiorecorder/services/BluetoothReceiver.java
+++ b/app/src/main/java/com/github/axet/audiorecorder/services/BluetoothReceiver.java
@@ -86,9 +86,8 @@ public class BluetoothReceiver extends BroadcastReceiver {
String a = intent.getAction();
if (a == null)
return;
- if (bluetoothSource && a.equals(BluetoothDevice.ACTION_ACL_CONNECTED)) {
+ if (bluetoothSource && a.equals(BluetoothDevice.ACTION_ACL_CONNECTED))
handler.postDelayed(connected, CONNECT_DELAY);
- }
if (bluetoothSource && a.equals(AudioManager.ACTION_SCO_AUDIO_STATE_UPDATED)) {
int state = intent.getIntExtra(AudioManager.EXTRA_SCO_AUDIO_STATE, -1);
switch (state) {
diff --git a/app/src/main/res/values/attrs.xml b/app/src/main/res/values/attrs.xml
index 003ca07..18e8db7 100644
--- a/app/src/main/res/values/attrs.xml
+++ b/app/src/main/res/values/attrs.xml
@@ -7,6 +7,7 @@
default
raw
bluetooth
+ internal
- 48000
@@ -22,6 +23,7 @@
- @string/source_mic
- @string/source_raw
- @string/source_bluetooth
+ - @string/source_internal
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 73d78fd..f52d4bd 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -15,6 +15,7 @@
- Mic
- Unprocessed
- Bluetooth
+ - Internal Audio
From 22b5e519a9214e974b5df67e0982a66a44f0515c Mon Sep 17 00:00:00 2001
From: Alexey Kuznetsov
Date: Fri, 25 Feb 2022 21:01:42 +0300
Subject: [PATCH 06/18] fix foreground projection crash
---
app/src/main/AndroidManifest.xml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 60ca36d..d2c9784 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -23,7 +23,7 @@
android:roundIcon="@mipmap/ic_launcher"
android:supportsRtl="true"
android:theme="@style/Translucent">
-
+
Date: Fri, 25 Feb 2022 21:20:46 +0300
Subject: [PATCH 07/18] add untranslated Internal Audio to all langs
---
app/src/main/res/values-da/strings.xml | 6 ++++++
app/src/main/res/values-de/strings.xml | 1 +
app/src/main/res/values-el/strings.xml | 1 +
app/src/main/res/values-es/strings.xml | 1 +
app/src/main/res/values-eu/strings.xml | 1 +
app/src/main/res/values-fr/strings.xml | 1 +
app/src/main/res/values-in/strings.xml | 1 +
app/src/main/res/values-it/strings.xml | 1 +
app/src/main/res/values-ja/strings.xml | 1 +
app/src/main/res/values-pl/strings.xml | 1 +
app/src/main/res/values-pt-rBR/strings.xml | 1 +
app/src/main/res/values-ru/strings.xml | 1 +
app/src/main/res/values-sk/strings.xml | 1 +
app/src/main/res/values-tr/strings.xml | 1 +
app/src/main/res/values-zh-rCN/strings.xml | 1 +
app/src/main/res/values-zh-rTW/strings.xml | 1 +
16 files changed, 21 insertions(+)
diff --git a/app/src/main/res/values-da/strings.xml b/app/src/main/res/values-da/strings.xml
index e6aff55..2b598a0 100644
--- a/app/src/main/res/values-da/strings.xml
+++ b/app/src/main/res/values-da/strings.xml
@@ -1,5 +1,11 @@
+
+ - Mikrofon
+ - Unprocessed
+ - Bluetooth
+ - Internal Audio
+
Audio Optager
Auto luk om (%1$d)
Optagelseslisten er tom\n\nKlik Optag for at starte optagelse
diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml
index 741d234..6a38a48 100644
--- a/app/src/main/res/values-de/strings.xml
+++ b/app/src/main/res/values-de/strings.xml
@@ -15,6 +15,7 @@
- Mikrofon
- Unprocessed
- Bluetooth
+ - Internal Audio
diff --git a/app/src/main/res/values-el/strings.xml b/app/src/main/res/values-el/strings.xml
index e0c0786..5044801 100644
--- a/app/src/main/res/values-el/strings.xml
+++ b/app/src/main/res/values-el/strings.xml
@@ -13,6 +13,7 @@
- Μικρόφωνο
- Unprocessed
- Bluetooth
+ - Internal Audio
- Φωτεινό
diff --git a/app/src/main/res/values-es/strings.xml b/app/src/main/res/values-es/strings.xml
index f608f07..11ab498 100644
--- a/app/src/main/res/values-es/strings.xml
+++ b/app/src/main/res/values-es/strings.xml
@@ -15,6 +15,7 @@
- Mic
- Unprocessed
- Bluetooth
+ - Internal Audio
diff --git a/app/src/main/res/values-eu/strings.xml b/app/src/main/res/values-eu/strings.xml
index 5b4600a..adce86c 100644
--- a/app/src/main/res/values-eu/strings.xml
+++ b/app/src/main/res/values-eu/strings.xml
@@ -15,6 +15,7 @@
- Mikrofonoa
- Prozesatu gabea
- Bluetooth
+ - Internal Audio
diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml
index 362a604..85d62e4 100644
--- a/app/src/main/res/values-fr/strings.xml
+++ b/app/src/main/res/values-fr/strings.xml
@@ -15,6 +15,7 @@
- Mic
- Unprocessed
- Bluetooth
+ - Internal Audio
diff --git a/app/src/main/res/values-in/strings.xml b/app/src/main/res/values-in/strings.xml
index 8fa4e50..a0aeb3e 100644
--- a/app/src/main/res/values-in/strings.xml
+++ b/app/src/main/res/values-in/strings.xml
@@ -15,6 +15,7 @@
- Mik
- Tidak diproses
- Bluetooth
+ - Internal Audio
diff --git a/app/src/main/res/values-it/strings.xml b/app/src/main/res/values-it/strings.xml
index 75cc319..21dd6fb 100644
--- a/app/src/main/res/values-it/strings.xml
+++ b/app/src/main/res/values-it/strings.xml
@@ -15,6 +15,7 @@
- Mic
- Unprocessed
- Bluetooth
+ - Internal Audio
diff --git a/app/src/main/res/values-ja/strings.xml b/app/src/main/res/values-ja/strings.xml
index 1a19220..0818aff 100644
--- a/app/src/main/res/values-ja/strings.xml
+++ b/app/src/main/res/values-ja/strings.xml
@@ -15,6 +15,7 @@
- Mic
- Unprocessed
- Bluetooth
+ - Internal Audio
diff --git a/app/src/main/res/values-pl/strings.xml b/app/src/main/res/values-pl/strings.xml
index d7e519b..e09d887 100644
--- a/app/src/main/res/values-pl/strings.xml
+++ b/app/src/main/res/values-pl/strings.xml
@@ -15,6 +15,7 @@
- Mikrofon
- Nieprzetworzone
- Bluetooth
+ - Internal Audio
diff --git a/app/src/main/res/values-pt-rBR/strings.xml b/app/src/main/res/values-pt-rBR/strings.xml
index 4dfc80c..cb1b487 100644
--- a/app/src/main/res/values-pt-rBR/strings.xml
+++ b/app/src/main/res/values-pt-rBR/strings.xml
@@ -15,6 +15,7 @@
- Mic
- Não processado
- Bluetooth
+ - Internal Audio
diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml
index 437e954..cf590ef 100644
--- a/app/src/main/res/values-ru/strings.xml
+++ b/app/src/main/res/values-ru/strings.xml
@@ -20,6 +20,7 @@
- Микрофон
- Необработанный
- Bluetooth
+ - Internal Audio
diff --git a/app/src/main/res/values-sk/strings.xml b/app/src/main/res/values-sk/strings.xml
index 1de6978..8982d5d 100644
--- a/app/src/main/res/values-sk/strings.xml
+++ b/app/src/main/res/values-sk/strings.xml
@@ -15,6 +15,7 @@
- Mikrofón
- Bez spracovania (surové)
- Bluetooth
+ - Internal Audio
diff --git a/app/src/main/res/values-tr/strings.xml b/app/src/main/res/values-tr/strings.xml
index 11a0e36..bd58eb2 100644
--- a/app/src/main/res/values-tr/strings.xml
+++ b/app/src/main/res/values-tr/strings.xml
@@ -15,6 +15,7 @@
- Mikrofon
- İşlenmemiş
- Bluetooth
+ - Internal Audio
diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml
index 0c946de..156469e 100644
--- a/app/src/main/res/values-zh-rCN/strings.xml
+++ b/app/src/main/res/values-zh-rCN/strings.xml
@@ -15,6 +15,7 @@
- 话筒
- 未处理
- 蓝牙
+ - Internal Audio
diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml
index 16deea3..e7bb31a 100644
--- a/app/src/main/res/values-zh-rTW/strings.xml
+++ b/app/src/main/res/values-zh-rTW/strings.xml
@@ -15,6 +15,7 @@
- 麥克風
- 未處理
- 藍牙
+ - Internal Audio
From d1e15290d4686f824749eb55bfed7dac4438f97e Mon Sep 17 00:00:00 2001
From: Alexey Kuznetsov
Date: Fri, 25 Feb 2022 21:29:57 +0300
Subject: [PATCH 08/18] update sdk to 30
---
app/build.gradle | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/app/build.gradle b/app/build.gradle
index 5cc8441..d2842ec 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -2,13 +2,13 @@ apply plugin: 'com.android.application'
apply plugin: 'com.github.axet.dxplugin'
android {
- compileSdkVersion 29
+ compileSdkVersion 30
ndkVersion "16.1.4479499" // strip debug symbols
defaultConfig {
applicationId "com.github.axet.audiorecorder"
minSdkVersion 9
- targetSdkVersion 29
+ targetSdkVersion 30
versionCode 355
versionName "3.4.5"
}
From 80368d1ccca71f8f62cf0340aec689037df9ea1c Mon Sep 17 00:00:00 2001
From: Alexey Kuznetsov
Date: Sat, 26 Feb 2022 08:41:23 +0300
Subject: [PATCH 09/18] add Recording Source Prop
---
.../RecordingSourcePreferenceCompat.java | 77 +++++++++++++++++++
app/src/main/res/xml/pref_general.xml | 2 +-
2 files changed, 78 insertions(+), 1 deletion(-)
create mode 100644 app/src/main/java/com/github/axet/audiorecorder/widgets/RecordingSourcePreferenceCompat.java
diff --git a/app/src/main/java/com/github/axet/audiorecorder/widgets/RecordingSourcePreferenceCompat.java b/app/src/main/java/com/github/axet/audiorecorder/widgets/RecordingSourcePreferenceCompat.java
new file mode 100644
index 0000000..1a8388f
--- /dev/null
+++ b/app/src/main/java/com/github/axet/audiorecorder/widgets/RecordingSourcePreferenceCompat.java
@@ -0,0 +1,77 @@
+package com.github.axet.audiorecorder.widgets;
+
+import android.content.Context;
+import android.content.SharedPreferences;
+import android.content.res.TypedArray;
+import android.os.Build;
+import android.preference.PreferenceManager;
+import android.support.v7.preference.ListPreference;
+import android.util.AttributeSet;
+
+import com.github.axet.audiolibrary.app.Sound;
+import com.github.axet.audiorecorder.R;
+import com.github.axet.audiorecorder.app.AudioApplication;
+import com.github.axet.audiorecorder.app.Storage;
+
+import java.util.ArrayList;
+import java.util.Date;
+
+public class RecordingSourcePreferenceCompat extends ListPreference {
+ public RecordingSourcePreferenceCompat(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
+ super(context, attrs, defStyleAttr, defStyleRes);
+ }
+
+ public RecordingSourcePreferenceCompat(Context context, AttributeSet attrs, int defStyleAttr) {
+ super(context, attrs, defStyleAttr);
+ }
+
+ public RecordingSourcePreferenceCompat(Context context, AttributeSet attrs) {
+ super(context, attrs);
+ }
+
+ public RecordingSourcePreferenceCompat(Context context) {
+ super(context);
+ }
+
+ @Override
+ public boolean callChangeListener(Object newValue) {
+ update(newValue);
+ return super.callChangeListener(newValue);
+ }
+
+ @Override
+ protected Object onGetDefaultValue(TypedArray a, int index) {
+ Object def = super.onGetDefaultValue(a, index);
+ update(def);
+ return def;
+ }
+
+ @Override
+ protected void onSetInitialValue(boolean restoreValue, Object defaultValue) {
+ super.onSetInitialValue(restoreValue, defaultValue);
+ CharSequence[] text = getEntries();
+ CharSequence[] values = getEntryValues();
+ ArrayList tt = new ArrayList<>();
+ ArrayList vv = new ArrayList<>();
+ String raw = getContext().getString(R.string.source_raw);
+ String internal = getContext().getString(R.string.source_internal);
+ for (int i = 0; i < values.length; i++) {
+ String v = values[i].toString();
+ String t = text[i].toString();
+ if (v.equals(raw) && !Sound.isUnprocessedSupported(getContext()))
+ continue;
+ if (v.equals(internal) && Build.VERSION.SDK_INT < 29)
+ continue;
+ vv.add(v);
+ tt.add(t);
+ }
+ setEntryValues(vv.toArray(new CharSequence[0]));
+ setEntries(tt.toArray(new CharSequence[0]));
+ update(getValue()); // defaultValue null after defaults set
+ }
+
+ public void update(Object value) {
+ String v = (String) value;
+ setSummary(v);
+ }
+}
diff --git a/app/src/main/res/xml/pref_general.xml b/app/src/main/res/xml/pref_general.xml
index 7cf8dc3..2605104 100644
--- a/app/src/main/res/xml/pref_general.xml
+++ b/app/src/main/res/xml/pref_general.xml
@@ -7,7 +7,7 @@
android:summary="/sdcard/some/"
android:title="@string/pref_storage_title" />
-
Date: Sat, 26 Feb 2022 09:11:59 +0300
Subject: [PATCH 10/18] properly handle revoke of permissions
---
.../audiorecorder/activities/RecordingActivity.java | 13 +++++++++----
1 file changed, 9 insertions(+), 4 deletions(-)
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 5b81065..58ed51f 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
@@ -926,7 +926,7 @@ public class RecordingActivity extends AppCompatThemeActivity {
editor.commit();
}
- void startRecording() {
+ boolean startRecording() {
try {
final SharedPreferences shared = PreferenceManager.getDefaultSharedPreferences(this);
String source = shared.getString(AudioApplication.PREFERENCE_SOURCE, getString(R.string.source_mic));
@@ -943,7 +943,7 @@ public class RecordingActivity extends AppCompatThemeActivity {
}
if (user == Sound.SOURCE_INTERNAL_AUDIO && !recording.sound.permitted()) {
Sound.showInternalAudio(this, RESULT_INTERNAL);
- return;
+ return false;
}
recording.startRecording(user);
@@ -962,9 +962,11 @@ public class RecordingActivity extends AppCompatThemeActivity {
RecordingService.startService(this, Storage.getName(this, recording.targetUri), true, duration);
ControlsService.hideIcon(this);
+ return true;
} catch (RuntimeException e) {
Toast.Error(RecordingActivity.this, e);
finish();
+ return false;
}
}
@@ -999,9 +1001,12 @@ public class RecordingActivity extends AppCompatThemeActivity {
super.onActivityResult(requestCode, resultCode, data);
switch (requestCode) {
case RESULT_INTERNAL:
- recording.sound.onActivityResult(resultCode, data);
- if (recording.sound.permitted())
+ if (resultCode == RESULT_OK) {
+ recording.sound.onActivityResult(resultCode, data);
startRecording();
+ } else {
+ stopRecording(getString(R.string.recording_status_pause));
+ }
break;
}
}
From ffbea1b78377893566238e98fafbe235d2d18b82 Mon Sep 17 00:00:00 2001
From: Alexey Kuznetsov
Date: Sat, 26 Feb 2022 09:17:12 +0300
Subject: [PATCH 11/18] even better perms handlings
---
.../axet/audiorecorder/activities/RecordingActivity.java | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
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 58ed51f..058d836 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
@@ -1005,7 +1005,8 @@ public class RecordingActivity extends AppCompatThemeActivity {
recording.sound.onActivityResult(resultCode, data);
startRecording();
} else {
- stopRecording(getString(R.string.recording_status_pause));
+ Toast.makeText(this, R.string.not_permitted, Toast.LENGTH_SHORT).show();
+ finish();
}
break;
}
From 1869c42f89cc0157d799243a48310f0fe41e50d1 Mon Sep 17 00:00:00 2001
From: Alexey Kuznetsov
Date: Sat, 26 Feb 2022 09:45:42 +0300
Subject: [PATCH 12/18] new getBytes method
---
.../github/axet/audiorecorder/activities/RecordingActivity.java | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
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 058d836..35bfd6e 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
@@ -747,7 +747,7 @@ public class RecordingActivity extends AppCompatThemeActivity {
int rate = Integer.parseInt(shared.getString(AudioApplication.PREFERENCE_RATE, ""));
int m = Sound.getChannels(this);
- int c = Sound.DEFAULT_AUDIOFORMAT == AudioFormat.ENCODING_PCM_16BIT ? 2 : 1;
+ int c = RawSamples.getBytes(Sound.DEFAULT_AUDIOFORMAT);
long perSec;
From e493a0aac50c0c59fa76fc54ab22f98b34f3d6af Mon Sep 17 00:00:00 2001
From: Alexey Kuznetsov
Date: Sat, 26 Feb 2022 19:55:20 +0300
Subject: [PATCH 13/18] add PCM FLOAT support
---
.../activities/RecordingActivity.java | 10 ++--
.../audiorecorder/app/RecordingStorage.java | 47 ++++++++++++++-----
2 files changed, 39 insertions(+), 18 deletions(-)
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 35bfd6e..c62bd23 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
@@ -566,13 +566,13 @@ public class RecordingActivity extends AppCompatThemeActivity {
int count = pitch.getMaxPitchCount(metrics.widthPixels);
- short[] buf = new short[count * recording.samplesUpdateStereo];
- long cut = recording.samplesTime * Sound.getChannels(this) - buf.length;
+ AudioTrack.SamplesBuffer buf = new AudioTrack.SamplesBuffer(Sound.DEFAULT_AUDIOFORMAT, count * recording.samplesUpdateStereo);
+ long cut = recording.samplesTime * Sound.getChannels(this) - buf.count;
if (cut < 0)
cut = 0;
- rs.open(cut, buf.length);
+ rs.open(cut, buf.count);
int len = rs.read(buf);
rs.close();
@@ -586,7 +586,7 @@ public class RecordingActivity extends AppCompatThemeActivity {
int diff = len - lenUpdate;
if (diff > 0) {
- recording.dbBuffer = ShortBuffer.allocate(recording.samplesUpdateStereo);
+ recording.dbBuffer = new AudioTrack.SamplesBuffer(Sound.DEFAULT_AUDIOFORMAT, recording.samplesUpdateStereo);
recording.dbBuffer.put(buf, lenUpdate, diff);
}
}
@@ -1002,7 +1002,7 @@ public class RecordingActivity extends AppCompatThemeActivity {
switch (requestCode) {
case RESULT_INTERNAL:
if (resultCode == RESULT_OK) {
- recording.sound.onActivityResult(resultCode, data);
+ recording.sound.onActivityResult(data);
startRecording();
} else {
Toast.makeText(this, R.string.not_permitted, Toast.LENGTH_SHORT).show();
diff --git a/app/src/main/java/com/github/axet/audiorecorder/app/RecordingStorage.java b/app/src/main/java/com/github/axet/audiorecorder/app/RecordingStorage.java
index 0ddee7d..5e3689b 100644
--- a/app/src/main/java/com/github/axet/audiorecorder/app/RecordingStorage.java
+++ b/app/src/main/java/com/github/axet/audiorecorder/app/RecordingStorage.java
@@ -3,13 +3,16 @@ package com.github.axet.audiorecorder.app;
import android.app.Activity;
import android.content.Context;
import android.content.SharedPreferences;
+import android.media.AudioFormat;
import android.media.AudioRecord;
import android.media.MediaRecorder;
import android.net.Uri;
+import android.os.Build;
import android.os.Handler;
import android.os.PowerManager;
import android.os.Process;
+import com.github.axet.androidlibrary.sound.AudioTrack;
import com.github.axet.audiolibrary.app.RawSamples;
import com.github.axet.audiolibrary.app.Sound;
import com.github.axet.audiolibrary.encoders.Encoder;
@@ -23,6 +26,7 @@ import org.json.JSONException;
import java.io.File;
import java.io.IOException;
+import java.nio.ByteBuffer;
import java.nio.ShortBuffer;
import java.nio.charset.Charset;
import java.nio.charset.StandardCharsets;
@@ -57,7 +61,7 @@ public class RecordingStorage {
public Uri targetUri = null; // output target file 2016-01-01 01.01.01.wav
public long samplesTime; // how many samples passed for current recording, stereo = samplesTime * 2
- public ShortBuffer dbBuffer = null; // PinchView samples buffer
+ public AudioTrack.SamplesBuffer dbBuffer = null; // PinchView samples buffer
public int pitchTime; // screen width
@@ -88,7 +92,7 @@ public class RecordingStorage {
final OnFlyEncoding fly = new OnFlyEncoding(storage, targetUri, getInfo());
e = new Encoder() {
@Override
- public void encode(short[] buf, int pos, int len) {
+ public void encode(AudioTrack.SamplesBuffer buf, int pos, int len) {
fly.encode(buf, pos, len);
}
@@ -103,7 +107,7 @@ public class RecordingStorage {
rs.open(samplesTime * rs.info.channels);
e = new Encoder() {
@Override
- public void encode(short[] buf, int pos, int len) {
+ public void encode(AudioTrack.SamplesBuffer buf, int pos, int len) {
rs.write(buf, pos, len);
}
@@ -153,17 +157,34 @@ public class RecordingStorage {
int samplesTimeCount = 0;
final int samplesTimeUpdate = 1000 * sampleRate / 1000; // how many samples we need to update 'samples'. time clock. every 1000ms.
- short[] buffer = null;
+ AudioTrack.SamplesBuffer buffer = null;
boolean stableRefresh = false;
while (!interrupt.get()) {
synchronized (bufferSizeLock) {
- if (buffer == null || buffer.length != bufferSize)
- buffer = new short[bufferSize];
+ if (buffer == null || buffer.size() != bufferSize)
+ buffer = new AudioTrack.SamplesBuffer(Sound.DEFAULT_AUDIOFORMAT, bufferSize);
+ }
+
+ int readSize = -1;
+ switch (buffer.format) {
+ case AudioFormat.ENCODING_PCM_8BIT:
+ break;
+ case AudioFormat.ENCODING_PCM_16BIT:
+ readSize = recorder.read(buffer.shorts, 0, buffer.shorts.length);
+ case Sound.ENCODING_PCM_24BIT_PACKED:
+ break;
+ case Sound.ENCODING_PCM_32BIT:
+ break;
+ case AudioFormat.ENCODING_PCM_FLOAT:
+ if (Build.VERSION.SDK_INT >= 23)
+ readSize = recorder.read(buffer.floats, 0, buffer.floats.length, AudioRecord.READ_BLOCKING);
+ break;
+ default:
+ throw new RuntimeException("Unknown format");
}
- int readSize = recorder.read(buffer, 0, buffer.length);
if (readSize < 0)
return;
long now = System.currentTimeMillis();
@@ -177,18 +198,18 @@ public class RecordingStorage {
e.encode(buffer, 0, readSize);
- short[] dbBuf;
+ AudioTrack.SamplesBuffer dbBuf;
int dbSize;
int readSizeUpdate;
if (dbBuffer != null) {
- ShortBuffer bb = ShortBuffer.allocate(dbBuffer.position() + readSize);
+ AudioTrack.SamplesBuffer bb = new AudioTrack.SamplesBuffer(Sound.DEFAULT_AUDIOFORMAT, dbBuffer.position + readSize);
dbBuffer.flip();
bb.put(dbBuffer);
bb.put(buffer, 0, readSize);
- dbBuf = new short[bb.position()];
- dbSize = dbBuf.length;
+ dbBuf = new AudioTrack.SamplesBuffer(Sound.DEFAULT_AUDIOFORMAT, bb.position);
+ dbSize = dbBuf.count;
bb.flip();
- bb.get(dbBuf, 0, dbBuf.length);
+ bb.get(dbBuf, 0, dbBuf.count);
} else {
dbBuf = buffer;
dbSize = readSize;
@@ -203,7 +224,7 @@ public class RecordingStorage {
}
int readSizeLen = dbSize - readSizeUpdate;
if (readSizeLen > 0) {
- dbBuffer = ShortBuffer.allocate(readSizeLen);
+ dbBuffer = new AudioTrack.SamplesBuffer(Sound.DEFAULT_AUDIOFORMAT, readSizeLen);
dbBuffer.put(dbBuf, readSizeUpdate, readSizeLen);
} else {
dbBuffer = null;
From e25e7ddecbbaf0e35c1b159760153786be59c713 Mon Sep 17 00:00:00 2001
From: Alexey Kuznetsov
Date: Sun, 27 Feb 2022 10:48:25 +0300
Subject: [PATCH 14/18] migrating to Info.Format
---
.../activities/RecordingActivity.java | 18 ++++++++---------
.../audiorecorder/app/RecordingStorage.java | 20 +++++++++----------
2 files changed, 18 insertions(+), 20 deletions(-)
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 c62bd23..36fc274 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
@@ -359,7 +359,7 @@ public class RecordingActivity extends AppCompatThemeActivity {
public void onClick(DialogInterface dialog, int which) {
File to = new File(d.getCurrentPath(), Storage.getName(RecordingActivity.this, recording.targetUri));
recording.targetUri = Uri.fromFile(to);
- EncodingService.saveAsWAV(RecordingActivity.this, recording.storage.getTempRecording(), to, recording.getInfo());
+ EncodingService.saveAsWAV(RecordingActivity.this, recording.storage.getTempRecording(), to, recording.info);
}
});
d.show();
@@ -558,7 +558,7 @@ public class RecordingActivity extends AppCompatThemeActivity {
return;
}
- RawSamples rs = new RawSamples(f, recording.getInfo());
+ RawSamples rs = new RawSamples(f, recording.info);
recording.samplesTime = rs.getSamples() / rs.info.channels;
DisplayMetrics metrics = new DisplayMetrics();
@@ -566,7 +566,7 @@ public class RecordingActivity extends AppCompatThemeActivity {
int count = pitch.getMaxPitchCount(metrics.widthPixels);
- AudioTrack.SamplesBuffer buf = new AudioTrack.SamplesBuffer(Sound.DEFAULT_AUDIOFORMAT, count * recording.samplesUpdateStereo);
+ AudioTrack.SamplesBuffer buf = new AudioTrack.SamplesBuffer(rs.info.format, count * recording.samplesUpdateStereo);
long cut = recording.samplesTime * Sound.getChannels(this) - buf.count;
if (cut < 0)
@@ -586,7 +586,7 @@ public class RecordingActivity extends AppCompatThemeActivity {
int diff = len - lenUpdate;
if (diff > 0) {
- recording.dbBuffer = new AudioTrack.SamplesBuffer(Sound.DEFAULT_AUDIOFORMAT, recording.samplesUpdateStereo);
+ recording.dbBuffer = new AudioTrack.SamplesBuffer(rs.info.format, recording.samplesUpdateStereo);
recording.dbBuffer.put(buf, lenUpdate, diff);
}
}
@@ -747,7 +747,7 @@ public class RecordingActivity extends AppCompatThemeActivity {
int rate = Integer.parseInt(shared.getString(AudioApplication.PREFERENCE_RATE, ""));
int m = Sound.getChannels(this);
- int c = RawSamples.getBytes(Sound.DEFAULT_AUDIOFORMAT);
+ int c = RawSamples.getBytes(recording.info.format);
long perSec;
@@ -782,7 +782,7 @@ public class RecordingActivity extends AppCompatThemeActivity {
int playUpdate = PitchView.UPDATE_SPEED * recording.sampleRate / 1000;
- RawSamples rs = new RawSamples(recording.storage.getTempRecording(), recording.getInfo());
+ RawSamples rs = new RawSamples(recording.storage.getTempRecording(), recording.info);
int len = (int) (rs.getSamples() - editSample * rs.info.channels); // in samples
final AudioTrack.OnPlaybackPositionUpdateListener listener = new AudioTrack.OnPlaybackPositionUpdateListener() {
@@ -801,7 +801,7 @@ public class RecordingActivity extends AppCompatThemeActivity {
}
};
- AudioTrack.AudioBuffer buf = new AudioTrack.AudioBuffer(recording.sampleRate, Sound.getOutMode(this), Sound.DEFAULT_AUDIOFORMAT, len);
+ AudioTrack.AudioBuffer buf = new AudioTrack.AudioBuffer(recording.sampleRate, Sound.getOutMode(this), rs.info.format, len);
rs.open(editSample * rs.info.channels, buf.len); // len in samples
int r = rs.read(buf.buffer); // r in samples
if (r != buf.len)
@@ -829,7 +829,7 @@ public class RecordingActivity extends AppCompatThemeActivity {
if (editSample == -1)
return;
- RawSamples rs = new RawSamples(recording.storage.getTempRecording(), recording.getInfo());
+ RawSamples rs = new RawSamples(recording.storage.getTempRecording(), recording.info);
rs.trunk((editSample + recording.samplesUpdate) * rs.info.channels);
rs.close();
@@ -1081,7 +1081,7 @@ public class RecordingActivity extends AppCompatThemeActivity {
} else {
done.run();
}
- encoding = EncodingService.startEncoding(this, in, recording.targetUri, recording.getInfo());
+ encoding = EncodingService.startEncoding(this, in, recording.targetUri, recording.info);
}
@Override
diff --git a/app/src/main/java/com/github/axet/audiorecorder/app/RecordingStorage.java b/app/src/main/java/com/github/axet/audiorecorder/app/RecordingStorage.java
index 5e3689b..d918099 100644
--- a/app/src/main/java/com/github/axet/audiorecorder/app/RecordingStorage.java
+++ b/app/src/main/java/com/github/axet/audiorecorder/app/RecordingStorage.java
@@ -60,6 +60,7 @@ public class RecordingStorage {
public int samplesUpdateStereo; // samplesUpdate * number of channels
public Uri targetUri = null; // output target file 2016-01-01 01.01.01.wav
public long samplesTime; // how many samples passed for current recording, stereo = samplesTime * 2
+ public RawSamples.Info info;
public AudioTrack.SamplesBuffer dbBuffer = null; // PinchView samples buffer
@@ -74,6 +75,7 @@ public class RecordingStorage {
sampleRate = Sound.getSampleRate(context);
samplesUpdate = (int) (pitchTime * sampleRate / 1000f);
samplesUpdateStereo = samplesUpdate * Sound.getChannels(context);
+ info = new RawSamples.Info(sampleRate, Sound.getChannels(context));
}
public void startRecording(int source) {
@@ -89,7 +91,7 @@ public class RecordingStorage {
if (shared.getBoolean(AudioApplication.PREFERENCE_FLY, false)) {
if (e == null) { // do not recreate encoder if on-fly mode enabled
- final OnFlyEncoding fly = new OnFlyEncoding(storage, targetUri, getInfo());
+ final OnFlyEncoding fly = new OnFlyEncoding(storage, targetUri, info);
e = new Encoder() {
@Override
public void encode(AudioTrack.SamplesBuffer buf, int pos, int len) {
@@ -103,7 +105,7 @@ public class RecordingStorage {
};
}
} else {
- final RawSamples rs = new RawSamples(storage.getTempRecording(), getInfo());
+ final RawSamples rs = new RawSamples(storage.getTempRecording(), info);
rs.open(samplesTime * rs.info.channels);
e = new Encoder() {
@Override
@@ -118,7 +120,7 @@ public class RecordingStorage {
};
}
- final AudioRecord recorder = sound.createAudioRecorder(sampleRate, ss, 0);
+ final AudioRecord recorder = sound.createAudioRecorder(info.format, sampleRate, ss, 0);
final Thread old = thread;
final AtomicBoolean oldb = interrupt;
@@ -164,7 +166,7 @@ public class RecordingStorage {
while (!interrupt.get()) {
synchronized (bufferSizeLock) {
if (buffer == null || buffer.size() != bufferSize)
- buffer = new AudioTrack.SamplesBuffer(Sound.DEFAULT_AUDIOFORMAT, bufferSize);
+ buffer = new AudioTrack.SamplesBuffer(info.format, bufferSize);
}
int readSize = -1;
@@ -202,11 +204,11 @@ public class RecordingStorage {
int dbSize;
int readSizeUpdate;
if (dbBuffer != null) {
- AudioTrack.SamplesBuffer bb = new AudioTrack.SamplesBuffer(Sound.DEFAULT_AUDIOFORMAT, dbBuffer.position + readSize);
+ AudioTrack.SamplesBuffer bb = new AudioTrack.SamplesBuffer(info.format, dbBuffer.position + readSize);
dbBuffer.flip();
bb.put(dbBuffer);
bb.put(buffer, 0, readSize);
- dbBuf = new AudioTrack.SamplesBuffer(Sound.DEFAULT_AUDIOFORMAT, bb.position);
+ dbBuf = new AudioTrack.SamplesBuffer(info.format, bb.position);
dbSize = dbBuf.count;
bb.flip();
bb.get(dbBuf, 0, dbBuf.count);
@@ -224,7 +226,7 @@ public class RecordingStorage {
}
int readSizeLen = dbSize - readSizeUpdate;
if (readSizeLen > 0) {
- dbBuffer = new AudioTrack.SamplesBuffer(Sound.DEFAULT_AUDIOFORMAT, readSizeLen);
+ dbBuffer = new AudioTrack.SamplesBuffer(info.format, readSizeLen);
dbBuffer.put(dbBuf, readSizeUpdate, readSizeLen);
} else {
dbBuffer = null;
@@ -297,10 +299,6 @@ public class RecordingStorage {
sound.unsilent();
}
- public RawSamples.Info getInfo() {
- return new RawSamples.Info(sampleRate, Sound.getChannels(context));
- }
-
// calcuale buffer length dynamically, this way we can reduce thread cycles when activity in background
// or phone screen is off.
public void updateBufferSize(boolean pause) {
From b8a1268c2093d40424463527706e398868c8d132 Mon Sep 17 00:00:00 2001
From: Alexey Kuznetsov
Date: Sun, 27 Feb 2022 12:16:25 +0300
Subject: [PATCH 15/18] add audioformat pref
---
.../axet/audiorecorder/activities/MainActivity.java | 3 ++-
.../audiorecorder/activities/RecordingActivity.java | 4 ++--
.../audiorecorder/activities/SettingsActivity.java | 3 ++-
.../axet/audiorecorder/app/RecordingStorage.java | 4 ++--
.../axet/audiorecorder/services/ControlsService.java | 3 ++-
.../widgets/RecordingSourcePreferenceCompat.java | 2 ++
app/src/main/res/values/attrs.xml | 10 ++++++++++
app/src/main/res/xml/pref_general.xml | 10 ++++++++++
8 files changed, 32 insertions(+), 7 deletions(-)
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 c555f02..b85f0b5 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
@@ -40,6 +40,7 @@ import com.github.axet.androidlibrary.widgets.ErrorDialog;
import com.github.axet.androidlibrary.widgets.OpenFileDialog;
import com.github.axet.androidlibrary.widgets.SearchView;
import com.github.axet.audiolibrary.app.RawSamples;
+import com.github.axet.audiolibrary.app.Sound;
import com.github.axet.audiolibrary.encoders.FormatWAV;
import com.github.axet.audiorecorder.R;
import com.github.axet.audiorecorder.app.AudioApplication;
@@ -663,7 +664,7 @@ public class MainActivity extends AppCompatThemeActivity {
void updateHeader() {
Uri uri = storage.getStoragePath();
long free = Storage.getFree(this, uri);
- long sec = Storage.average(this, free);
+ long sec = Storage.average(this, Sound.getAudioFormat(this), free);
TextView text = (TextView) findViewById(R.id.space_left);
text.setText(AudioApplication.formatFree(this, free, sec));
}
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 36fc274..2e406a0 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
@@ -519,7 +519,7 @@ public class RecordingActivity extends AppCompatThemeActivity {
editor.commit();
}
Log.d(TAG, "create recording at: " + targetUri);
- app.recording = new RecordingStorage(this, pitch.getPitchTime(), targetUri);
+ app.recording = new RecordingStorage(this, Sound.getAudioFormat(this), pitch.getPitchTime(), targetUri);
}
recording = app.recording;
synchronized (recording.handlers) {
@@ -754,7 +754,7 @@ public class RecordingActivity extends AppCompatThemeActivity {
String ext = shared.getString(AudioApplication.PREFERENCE_ENCODING, "");
if (shared.getBoolean(AudioApplication.PREFERENCE_FLY, false)) {
- perSec = Factory.getEncoderRate(ext, recording.sampleRate);
+ perSec = Factory.getEncoderRate(Sound.getAudioFormat(this), ext, recording.sampleRate);
try {
free = Storage.getFree(this, recording.targetUri);
} catch (RuntimeException e) { // IllegalArgumentException
diff --git a/app/src/main/java/com/github/axet/audiorecorder/activities/SettingsActivity.java b/app/src/main/java/com/github/axet/audiorecorder/activities/SettingsActivity.java
index f3a0944..650d9f6 100644
--- a/app/src/main/java/com/github/axet/audiorecorder/activities/SettingsActivity.java
+++ b/app/src/main/java/com/github/axet/audiorecorder/activities/SettingsActivity.java
@@ -99,7 +99,7 @@ public class SettingsActivity extends AppCompatSettingsThemeActivity implements
storage.migrateLocalStorageDialog(this);
if (key.equals(AudioApplication.PREFERENCE_RATE)) {
int sampleRate = Integer.parseInt(sharedPreferences.getString(AudioApplication.PREFERENCE_RATE, ""));
- if (sampleRate != Sound.getValidRecordRate(Sound.getInMode(this), sampleRate))
+ if (sampleRate != Sound.getValidRecordRate(Sound.getAudioFormat(this), Sound.getInMode(this), sampleRate))
Toast.Text(this, "Not supported Hz");
}
}
@@ -163,6 +163,7 @@ public class SettingsActivity extends AppCompatSettingsThemeActivity implements
bindPreferenceSummaryToValue(pm.findPreference(AudioApplication.PREFERENCE_CHANNELS));
bindPreferenceSummaryToValue(pm.findPreference(AudioApplication.PREFERENCE_FORMAT));
bindPreferenceSummaryToValue(pm.findPreference(AudioApplication.PREFERENCE_VOLUME));
+ bindPreferenceSummaryToValue(pm.findPreference(AudioApplication.PREFERENCE_AUDIOFORMAT));
StoragePathPreferenceCompat s = (StoragePathPreferenceCompat) pm.findPreference(AudioApplication.PREFERENCE_STORAGE);
s.setStorage(new Storage(getContext()));
diff --git a/app/src/main/java/com/github/axet/audiorecorder/app/RecordingStorage.java b/app/src/main/java/com/github/axet/audiorecorder/app/RecordingStorage.java
index d918099..fd6e6ef 100644
--- a/app/src/main/java/com/github/axet/audiorecorder/app/RecordingStorage.java
+++ b/app/src/main/java/com/github/axet/audiorecorder/app/RecordingStorage.java
@@ -66,7 +66,7 @@ public class RecordingStorage {
public int pitchTime; // screen width
- public RecordingStorage(Context context, int pitchTime, Uri targetUri) {
+ public RecordingStorage(Context context, int format, int pitchTime, Uri targetUri) {
this.context = context;
this.pitchTime = pitchTime;
this.targetUri = targetUri;
@@ -75,7 +75,7 @@ public class RecordingStorage {
sampleRate = Sound.getSampleRate(context);
samplesUpdate = (int) (pitchTime * sampleRate / 1000f);
samplesUpdateStereo = samplesUpdate * Sound.getChannels(context);
- info = new RawSamples.Info(sampleRate, Sound.getChannels(context));
+ info = new RawSamples.Info(format, sampleRate, Sound.getChannels(context));
}
public void startRecording(int source) {
diff --git a/app/src/main/java/com/github/axet/audiorecorder/services/ControlsService.java b/app/src/main/java/com/github/axet/audiorecorder/services/ControlsService.java
index 2880a81..f7efdd7 100644
--- a/app/src/main/java/com/github/axet/audiorecorder/services/ControlsService.java
+++ b/app/src/main/java/com/github/axet/audiorecorder/services/ControlsService.java
@@ -27,6 +27,7 @@ import com.github.axet.androidlibrary.services.PersistentService;
import com.github.axet.androidlibrary.widgets.NotificationChannelCompat;
import com.github.axet.androidlibrary.widgets.RemoteNotificationCompat;
import com.github.axet.androidlibrary.widgets.RemoteViewsCompat;
+import com.github.axet.audiolibrary.app.Sound;
import com.github.axet.audiolibrary.app.Storage;
import com.github.axet.audiorecorder.R;
import com.github.axet.audiorecorder.activities.MainActivity;
@@ -128,7 +129,7 @@ public class ControlsService extends PersistentService {
title = getString(R.string.app_name);
Uri f = storage.getStoragePath();
long free = Storage.getFree(context, f);
- long sec = Storage.average(context, free);
+ long sec = Storage.average(context, Sound.getAudioFormat(context), free);
text = AudioApplication.formatFree(context, free, sec);
builder = new RemoteNotificationCompat.Low(context, R.layout.notifictaion);
builder.setViewVisibility(R.id.notification_record, View.VISIBLE);
diff --git a/app/src/main/java/com/github/axet/audiorecorder/widgets/RecordingSourcePreferenceCompat.java b/app/src/main/java/com/github/axet/audiorecorder/widgets/RecordingSourcePreferenceCompat.java
index 1a8388f..60c571c 100644
--- a/app/src/main/java/com/github/axet/audiorecorder/widgets/RecordingSourcePreferenceCompat.java
+++ b/app/src/main/java/com/github/axet/audiorecorder/widgets/RecordingSourcePreferenceCompat.java
@@ -6,6 +6,8 @@ import android.content.res.TypedArray;
import android.os.Build;
import android.preference.PreferenceManager;
import android.support.v7.preference.ListPreference;
+import android.support.v7.preference.ListPreferenceDialogFragmentCompat;
+import android.support.v7.preference.PreferenceViewHolder;
import android.util.AttributeSet;
import com.github.axet.audiolibrary.app.Sound;
diff --git a/app/src/main/res/values/attrs.xml b/app/src/main/res/values/attrs.xml
index 18e8db7..570c35f 100644
--- a/app/src/main/res/values/attrs.xml
+++ b/app/src/main/res/values/attrs.xml
@@ -26,6 +26,16 @@
- @string/source_internal
+
+ - 16-bit PCM
+ - 24-bit PCM (float)
+
+
+
+ - 16
+ - float
+
+
- @string/Theme_Light
- @string/Theme_Dark
diff --git a/app/src/main/res/xml/pref_general.xml b/app/src/main/res/xml/pref_general.xml
index 2605104..f620ee5 100644
--- a/app/src/main/res/xml/pref_general.xml
+++ b/app/src/main/res/xml/pref_general.xml
@@ -7,6 +7,16 @@
android:summary="/sdcard/some/"
android:title="@string/pref_storage_title" />
+
+
Date: Sun, 27 Feb 2022 17:29:14 +0300
Subject: [PATCH 16/18] update libs
---
app/build.gradle | 3 +--
.../axet/audiorecorder/activities/SettingsActivity.java | 4 ++++
app/src/main/res/xml/pref_general.xml | 2 +-
3 files changed, 6 insertions(+), 3 deletions(-)
diff --git a/app/build.gradle b/app/build.gradle
index d2842ec..91e8dc1 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -53,8 +53,7 @@ android {
dependencies {
testImplementation 'junit:junit:4.12'
- implementation ('com.github.axet:android-audio-library:1.0.180') { exclude module: 'android-library' } // implementation project(':android-audio-library')
- implementation 'com.github.axet:android-library:1.34.12'
+ implementation ('com.github.axet:android-audio-library:1.1.1') { exclude module: 'android-library' } // implementation project(':android-audio-library')
implementation ('com.github.axet:wget:1.7.0') { exclude group: 'org.json', module: 'json' }
assets('com.google.android.exoplayer:exoplayer:2.7.3') { exclude group: 'com.android.support' }
}
diff --git a/app/src/main/java/com/github/axet/audiorecorder/activities/SettingsActivity.java b/app/src/main/java/com/github/axet/audiorecorder/activities/SettingsActivity.java
index 650d9f6..4252431 100644
--- a/app/src/main/java/com/github/axet/audiorecorder/activities/SettingsActivity.java
+++ b/app/src/main/java/com/github/axet/audiorecorder/activities/SettingsActivity.java
@@ -190,6 +190,10 @@ public class SettingsActivity extends AppCompatSettingsThemeActivity implements
return true;
}
});
+
+ Preference af = pm.findPreference(AudioApplication.PREFERENCE_AUDIOFORMAT);
+ if (Build.VERSION.SDK_INT < 23 && af != null)
+ af.setVisible(false);
}
@Override
diff --git a/app/src/main/res/xml/pref_general.xml b/app/src/main/res/xml/pref_general.xml
index f620ee5..f1c7715 100644
--- a/app/src/main/res/xml/pref_general.xml
+++ b/app/src/main/res/xml/pref_general.xml
@@ -27,7 +27,7 @@
android:summary=""
android:title="@string/pref_source_title" />
-
Date: Sun, 27 Feb 2022 17:31:30 +0300
Subject: [PATCH 17/18] fix libs
---
app/build.gradle | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/app/build.gradle b/app/build.gradle
index 91e8dc1..8132424 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -53,7 +53,7 @@ android {
dependencies {
testImplementation 'junit:junit:4.12'
- implementation ('com.github.axet:android-audio-library:1.1.1') { exclude module: 'android-library' } // implementation project(':android-audio-library')
+ implementation ('com.github.axet:android-audio-library:1.1.1') // implementation project(':android-audio-library')
implementation ('com.github.axet:wget:1.7.0') { exclude group: 'org.json', module: 'json' }
assets('com.google.android.exoplayer:exoplayer:2.7.3') { exclude group: 'com.android.support' }
}
From bf756003b2b19f471056addd4bc288e7ceccd937 Mon Sep 17 00:00:00 2001
From: Alexey Kuznetsov
Date: Sun, 27 Feb 2022 17:32:58 +0300
Subject: [PATCH 18/18] Bump version audiorecorder-3.5.0
---
app/build.gradle | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/app/build.gradle b/app/build.gradle
index 8132424..a675ff8 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -9,8 +9,8 @@ android {
applicationId "com.github.axet.audiorecorder"
minSdkVersion 9
targetSdkVersion 30
- versionCode 355
- versionName "3.4.5"
+ versionCode 356
+ versionName "3.5.0"
}
signingConfigs {
release {