Skip to content

Commit

Permalink
Update audio record
Browse files Browse the repository at this point in the history
  • Loading branch information
billthefarmer committed Nov 21, 2023
1 parent bf05ec6 commit b00a0a0
Showing 17 changed files with 41 additions and 208 deletions.
2 changes: 1 addition & 1 deletion build.gradle
Original file line number Diff line number Diff line change
@@ -28,7 +28,7 @@ android {

defaultConfig {
applicationId "org.billthefarmer.tuner"
minSdkVersion 21
minSdkVersion 23
targetSdkVersion 28
versionName "1.55"
versionCode 155
120 changes: 34 additions & 86 deletions src/main/java/org/billthefarmer/tuner/Tuner.java
Original file line number Diff line number Diff line change
@@ -783,18 +783,14 @@ protected void onResume()
if (status != null)
status.invalidate();

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M)
if (checkSelfPermission(Manifest.permission.RECORD_AUDIO)
!= PackageManager.PERMISSION_GRANTED)
{
if (checkSelfPermission(Manifest.permission.RECORD_AUDIO)
!= PackageManager.PERMISSION_GRANTED)
{
requestPermissions(new String[]
{Manifest.permission.RECORD_AUDIO,
Manifest.permission.READ_EXTERNAL_STORAGE},
REQUEST_PERMISSIONS);

return;
}
requestPermissions(new String[]
{Manifest.permission.RECORD_AUDIO,
Manifest.permission.READ_EXTERNAL_STORAGE},
REQUEST_PERMISSIONS);
return;
}

// Start the audio thread
@@ -1151,7 +1147,6 @@ protected class Audio implements Runnable

// Private data
private long timer;
private int divisor = 1;

private AudioRecord audioRecord;

@@ -1162,6 +1157,8 @@ protected class Audio implements Runnable
private static final int STEP = SAMPLES / OVERSAMPLE;
private static final int SIZE = 4096;

private static final int RATE = 11025;

private static final int OCTAVE = 12;
private static final int EQUAL = 8;
private static final int A_OFFSET = 9;
@@ -1275,84 +1272,35 @@ private void cleanUpAudioRecord()
// Process Audio
protected void processAudio()
{
// Sample rates to try
Resources resources = getResources();

int rates[] = resources.getIntArray(R.array.sample_rates);
int divisors[] = resources.getIntArray(R.array.divisors);

int size = 0;
int state = 0;
int index = 0;
for (int rate : rates)
// Create the AudioRecord object
try
{
// Check sample rate
size = AudioRecord
.getMinBufferSize(rate,
AudioFormat.CHANNEL_IN_MONO,
AudioFormat.ENCODING_PCM_16BIT);
// Loop if invalid sample rate
if (size == AudioRecord.ERROR_BAD_VALUE)
{
index++;
continue;
}

// Check valid input selected, or other error
if (size == AudioRecord.ERROR)
{
runOnUiThread(() -> showAlert(R.string.app_name,
R.string.error_buffer));
thread = null;
return;
}

// Set divisor
divisor = divisors[index];

// Create the AudioRecord object
try
{
audioRecord =
new AudioRecord(input, rate,
AudioFormat.CHANNEL_IN_MONO,
AudioFormat.ENCODING_PCM_16BIT,
Math.max(size, SIZE * divisor));
}

// Exception
catch (Exception e)
{
runOnUiThread(() -> showAlert(R.string.app_name,
R.string.error_init));
thread = null;
return;
}

// Check state
state = audioRecord.getState();
if (state != AudioRecord.STATE_INITIALIZED)
{
audioRecord.release();
index++;
continue;
}

// Must be a valid sample rate
sample = rate;
break;
audioRecord = new AudioRecord.Builder()
.setAudioSource(input)
.setAudioFormat
(new AudioFormat.Builder()
.setEncoding(AudioFormat.ENCODING_PCM_16BIT)
.setSampleRate(RATE)
.setChannelMask(AudioFormat.CHANNEL_IN_MONO)
.build())
.setBufferSizeInBytes(SIZE)
.build();
}

// Check valid sample rate
if (size == AudioRecord.ERROR_BAD_VALUE)
// Exception
catch (Exception e)
{
runOnUiThread(() -> showAlert(R.string.app_name,
R.string.error_buffer));
R.string.error_init));
thread = null;
return;
}

// Get sample rate
sample = audioRecord.getSampleRate();

// Check AudioRecord initialised
int state = audioRecord.getState();
if (state != AudioRecord.STATE_INITIALIZED)
{
runOnUiThread(() -> showAlert(R.string.app_name,
@@ -1364,12 +1312,12 @@ protected void processAudio()
}

// Calculate fps and expect
fps = ((double) sample / divisor) / SAMPLES;
fps = ((double) sample) / SAMPLES;
final double expect = 2.0 * Math.PI *
STEP / SAMPLES;

// Create buffer for input data
data = new short[STEP * divisor];
data = new short[STEP];

// Start recording
audioRecord.startRecording();
@@ -1384,7 +1332,7 @@ protected void processAudio()
// NOTE: audioRecord.read(short[], int, int) can block
// indefinitely, until audioRecord.stop() is called
// from another thread
size = audioRecord.read(data, 0, STEP * divisor);
int size = audioRecord.read(data, 0, STEP);

// Stop the thread if no data or error state
if (size <= 0)
@@ -1407,17 +1355,17 @@ protected void processAudio()
for (int i = 0; i < STEP; i++)
{
xv[0] = xv[1];
xv[1] = data[i * divisor] / G;
xv[1] = data[i] / G;

yv[0] = yv[1];
yv[1] = (xv[0] + xv[1]) + (K * yv[0]);

// Choose filtered/unfiltered data
buffer[(SAMPLES - STEP) + i] =
audio.filter ? yv[1] : data[i * divisor];
audio.filter ? yv[1] : data[i];

// Find root mean signal
double v = data[i * divisor] / 32768.0;
double v = data[i] / 32768.0;
rm += v * v;
}

3 changes: 0 additions & 3 deletions src/main/res/values-cs/strings.xml
Original file line number Diff line number Diff line change
@@ -22,9 +22,6 @@
href="https://www.gnu.org/licenses/gpl.txt">GNU GPLv3</a>
</string>

<string name="error_buffer">
Chyba při nahrávání zvuku! Nepodařilo se najít funkční vstupní vzorkovací frekvenci.
</string>
<string name="error_init">
Záznamník zvuku nebyl inicializován! Vybraný zdroj zvuku možná nemusí
být dostupný nebo nebyla nalezena funkční vstupní vzorkovací frekvenci.
2 changes: 0 additions & 2 deletions src/main/res/values-de/strings.xml
Original file line number Diff line number Diff line change
@@ -12,8 +12,6 @@
href="https://www.gnu.org/licenses/gpl.txt">GNU GPLv3</a>
</string>

<string name="error_buffer">Fehler in der Audioaufnahme! Kann keine funktionierende Eingabeabtastrate finden.</string>

<string name="filter_on">Audiofilter an</string>
<string name="filter_off">Audiofilter aus</string>

18 changes: 0 additions & 18 deletions src/main/res/values-es/arrays.xml
Original file line number Diff line number Diff line change
@@ -118,24 +118,6 @@
<item>8</item>
</string-array>

<integer-array name="sample_rates">
<item>11025</item>
<item>22050</item>
<item>8000</item>
<item>16000</item>
<item>44100</item>
<item>32000</item>
</integer-array>

<integer-array name="divisors">
<item>1</item>
<item>2</item>
<item>1</item>
<item>2</item>
<item>4</item>
<item>4</item>
</integer-array>

<integer-array name="foreground_colours">
<item>0xbf0000ff</item>
<item>0xbf6f6f00</item>
4 changes: 0 additions & 4 deletions src/main/res/values-es/strings.xml
Original file line number Diff line number Diff line change
@@ -11,10 +11,6 @@
</string>
<string name="licence">Licence: GNU GPLv3</string>

<string name="error_buffer">
¡Error de grabación de audio! No se puede encontrar una frecuencia
de muestreo de entrada funcional.
</string>
<string name="error_init">
¡Grabador de audio no inicializado! Tal vez la fuente de entrada
seleccionada no está disponible, o no se pudo encontrar una
1 change: 0 additions & 1 deletion src/main/res/values-fr/strings.xml
Original file line number Diff line number Diff line change
@@ -9,7 +9,6 @@
<string name="translation">Traduction francais de <a href="https://github.com/roptat">roptat</a></string>
<string name="licence">License <a href="https://www.gnu.org/licenses/gpl.txt">GNU GPLv3</a></string>

<string name="error_buffer">Erreur d\'enregistrement audio ! Impossible de trouver un taux d\'échantillonnage d\'entrée correct.</string>
<string name="error_init">Enregistrement audio non initialisé ! La source sélectionnée n\'est peut-être pas disponible ou un taux d\'échantillonnage d\'entrée correct n\'a pas été trouvé.</string>

<string name="filter_on">Filtre audio activé</string>
18 changes: 0 additions & 18 deletions src/main/res/values-hu/arrays.xml
Original file line number Diff line number Diff line change
@@ -116,24 +116,6 @@
<item>8</item>
</string-array>

<integer-array name="sample_rates">
<item>11025</item>
<item>22050</item>
<item>8000</item>
<item>16000</item>
<item>44100</item>
<item>32000</item>
</integer-array>

<integer-array name="divisors">
<item>1</item>
<item>2</item>
<item>1</item>
<item>2</item>
<item>4</item>
<item>4</item>
</integer-array>

<integer-array name="foreground_colours">
<item>0xbf0000ff</item>
<item>0xbf6f6f00</item>
4 changes: 0 additions & 4 deletions src/main/res/values-hu/strings.xml
Original file line number Diff line number Diff line change
@@ -12,10 +12,6 @@
<string name="licence">Licensz <a href="https://www.gnu.org/licenses/gpl.txt">GNU GPLv3</a>
</string>

<string name="error_buffer">
Hangfelvételi hiba! Nem található használható bemeneti
mintavételezési frekvencia.
</string>
<string name="error_init">
Hangfelvevő elindítása sikertelen! Lehet, hogy a kiválasztott
jelforrás nem elérhető, vagy nem használható a mintavételi
18 changes: 0 additions & 18 deletions src/main/res/values-ja/arrays.xml
Original file line number Diff line number Diff line change
@@ -115,24 +115,6 @@
<item>8</item>
</string-array>

<integer-array name="sample_rates">
<item>11025</item>
<item>22050</item>
<item>8000</item>
<item>16000</item>
<item>44100</item>
<item>32000</item>
</integer-array>

<integer-array name="divisors">
<item>1</item>
<item>2</item>
<item>1</item>
<item>2</item>
<item>4</item>
<item>4</item>
</integer-array>

<integer-array name="foreground_colours">
<item>0xbf0000ff</item>
<item>0xbf6f6f00</item>
3 changes: 0 additions & 3 deletions src/main/res/values-ja/strings.xml
Original file line number Diff line number Diff line change
@@ -12,9 +12,6 @@
<string name="licence">ライセンス <a href="https://www.gnu.org/licenses/gpl.txt">GNU GPLv3</a>
</string>

<string name="error_buffer">
音声録音からエラー! 動作中の入力サンプルレートが見つかりません。
</string>
<string name="error_init">
オーディオレコーダーが初期化されていません! 選択された入力音源が利
用できないか、動作中の入力サンプルレートが見つからない可能性があり
4 changes: 0 additions & 4 deletions src/main/res/values-pl/strings.xml
Original file line number Diff line number Diff line change
@@ -20,10 +20,6 @@
href="https://www.gnu.org/licenses/gpl.txt">GNU GPLv3</a>
</string>

<string name="error_buffer">
Błąd podczas nagrywania dźwięku! Nie można znaleźć działającej
wejściowej częstotliwości próbkowania.
</string>
<string name="error_init">
Rejestrator dźwięku nie został zainicjowany! Być może wybrane
źródło wejściowe nie jest dostępne lub nie można znaleźć
18 changes: 0 additions & 18 deletions src/main/res/values-pt-rBR/arrays.xml
Original file line number Diff line number Diff line change
@@ -117,24 +117,6 @@
<item>8</item>
</string-array>

<integer-array name="sample_rates">
<item>11025</item>
<item>22050</item>
<item>8000</item>
<item>16000</item>
<item>44100</item>
<item>32000</item>
</integer-array>

<integer-array name="divisors">
<item>1</item>
<item>2</item>
<item>1</item>
<item>2</item>
<item>4</item>
<item>4</item>
</integer-array>

<integer-array name="foreground_colours">
<item>0xbf0000ff</item>
<item>0xbf6f6f00</item>
4 changes: 0 additions & 4 deletions src/main/res/values-pt-rBR/strings.xml
Original file line number Diff line number Diff line change
@@ -12,10 +12,6 @@
<string name="licence">Licence <a href="https://www.gnu.org/licenses/gpl.txt">GNU GPLv3</a>
</string>

<string name="error_buffer">
Erro na gravação de áudio! Impossível encontrar um sample rate que
funciona.
</string>
<string name="error_init">
Gravador de áudio não inicializado! Talvez a fonte de entrada
selecionada não esteja disponível ou não foi possível encontrar
1 change: 0 additions & 1 deletion src/main/res/values-zh-rCN/strings.xml
Original file line number Diff line number Diff line change
@@ -7,7 +7,6 @@
<string name="copyright">"版权所有 \\u00A9 2014 <a href="https://github.com/billthefarmer">Bill Farmer</a> "</string>
<string name="translation">Spanish translation by <a href="https://github.com/susobaco">Suso Comesaña</a> Hungarian translation by <a href="https://github.com/lna91">András Lengyel-Nagy</a> Japanese translation by <a href="https://github.com/naofum">naofum</a> Portuguese translation by <a href="https://github.com/afmachado">Caio Roberto</a> French translation by <a href="https://github.com/roptat">roptat</a> German translation by <a href="https://github.com/niccokunzmann">Nicco Kunzmann</a> Polish translation by <a href="https://github.com/rehork">rehork</a> Chinese translation by <a href="https://github.com/WeiguangTWK">WeiguangTWK</a></string>
<string name="licence">"Licence <a href="https://www.gnu.org/licenses/gpl.txt">GNU GPLv3</a> "</string>
<string name="error_buffer">" 音频录制失败! 找不到可用的采样率 "</string>
<string name="error_init">音频录制无法初始化! 选定的音频输入源无法使用或者采样率均不可用</string>
<string name="filter_on">音频过滤 开</string>
<string name="filter_off">音频过滤 关</string>
Loading

0 comments on commit b00a0a0

Please sign in to comment.