25
25
package com.github.squti.androidwaverecordersample
26
26
27
27
import android.Manifest
28
+ import android.R
28
29
import android.content.ContentUris
29
30
import android.content.ContentValues
30
31
import android.content.Intent
@@ -38,6 +39,8 @@ import android.provider.MediaStore
38
39
import android.provider.Settings
39
40
import android.util.Log
40
41
import android.view.View
42
+ import android.widget.AdapterView
43
+ import android.widget.ArrayAdapter
41
44
import android.widget.Toast
42
45
import androidx.appcompat.app.AlertDialog
43
46
import androidx.appcompat.app.AppCompatActivity
@@ -59,12 +62,36 @@ class MainActivity : AppCompatActivity() {
59
62
private var isRecording = false
60
63
private var isPaused = false
61
64
private lateinit var binding: ActivityMainBinding
62
-
65
+ private var selectedEncoding = AudioFormat .ENCODING_PCM_FLOAT
66
+ private val encodingOptions = listOf (
67
+ " 8-bit" to AudioFormat .ENCODING_PCM_8BIT ,
68
+ " 16-bit" to AudioFormat .ENCODING_PCM_16BIT ,
69
+ " 32-bit" to AudioFormat .ENCODING_PCM_32BIT ,
70
+ " Float 32-bit" to AudioFormat .ENCODING_PCM_FLOAT
71
+ )
72
+ private var isSaveToExternalStorageFlag = false
63
73
override fun onCreate (savedInstanceState : Bundle ? ) {
64
74
super .onCreate(savedInstanceState)
65
75
binding = ActivityMainBinding .inflate(layoutInflater)
66
76
setContentView(binding.root)
77
+ val encodingSpinner = binding.encodingSpinner
78
+ val adapter = ArrayAdapter (
79
+ this ,
80
+ R .layout.simple_spinner_item,
81
+ encodingOptions.map { it.first } // Display names only
82
+ )
83
+ adapter.setDropDownViewResource(R .layout.simple_spinner_dropdown_item)
84
+
85
+ encodingSpinner.adapter = adapter
86
+ encodingSpinner.setSelection(encodingOptions.indexOfFirst { it.second == AudioFormat .ENCODING_PCM_FLOAT })
87
+ encodingSpinner.onItemSelectedListener = object : AdapterView .OnItemSelectedListener {
88
+ override fun onItemSelected (parent : AdapterView <* >? , view : View ? , position : Int , id : Long ) {
89
+ selectedEncoding = encodingOptions[position].second
90
+ initRecorder(isSaveToExternalStorageFlag)
91
+ }
67
92
93
+ override fun onNothingSelected (parent : AdapterView <* >? ) {}
94
+ }
68
95
initRecorder(isSaveToExternalStorage = false )
69
96
70
97
binding.saveToExternalStorageSwitch.setOnCheckedChangeListener { _, isChecked ->
@@ -185,6 +212,7 @@ class MainActivity : AppCompatActivity() {
185
212
}
186
213
187
214
private fun initRecorder (isSaveToExternalStorage : Boolean ) {
215
+ isSaveToExternalStorageFlag = isSaveToExternalStorage
188
216
if (isSaveToExternalStorage)
189
217
initWithExternalStorage(" audioFile" )
190
218
else
@@ -217,6 +245,7 @@ class MainActivity : AppCompatActivity() {
217
245
binding.pauseResumeRecordingButton.text = " PAUSE"
218
246
binding.pauseResumeRecordingButton.visibility = View .VISIBLE
219
247
binding.noiseSuppressorSwitch.isEnabled = false
248
+ binding.encodingSpinner.isEnabled = false
220
249
}
221
250
222
251
private fun skipRecording () {
@@ -229,6 +258,7 @@ class MainActivity : AppCompatActivity() {
229
258
binding.startStopRecordingButton.text = " STOP"
230
259
binding.pauseResumeRecordingButton.visibility = View .INVISIBLE
231
260
binding.noiseSuppressorSwitch.isEnabled = false
261
+ binding.encodingSpinner.isEnabled = false
232
262
}
233
263
234
264
private fun stopRecording () {
@@ -240,6 +270,7 @@ class MainActivity : AppCompatActivity() {
240
270
binding.pauseResumeRecordingButton.visibility = View .GONE
241
271
binding.startStopRecordingButton.text = " START"
242
272
binding.noiseSuppressorSwitch.isEnabled = true
273
+ binding.encodingSpinner.isEnabled = true
243
274
resetSwitches()
244
275
Toast .makeText(this , " File saved at : $filePath " , Toast .LENGTH_LONG ).show()
245
276
}
@@ -332,7 +363,7 @@ class MainActivity : AppCompatActivity() {
332
363
.configureWaveSettings {
333
364
sampleRate = 44100
334
365
channels = AudioFormat .CHANNEL_IN_MONO
335
- audioEncoding = AudioFormat . ENCODING_PCM_FLOAT
366
+ audioEncoding = selectedEncoding
336
367
}.configureSilenceDetection {
337
368
minAmplitudeThreshold = 2000
338
369
bufferDurationInMillis = 1500
@@ -353,7 +384,7 @@ class MainActivity : AppCompatActivity() {
353
384
.configureWaveSettings {
354
385
sampleRate = 44100
355
386
channels = AudioFormat .CHANNEL_IN_MONO
356
- audioEncoding = AudioFormat . ENCODING_PCM_FLOAT
387
+ audioEncoding = selectedEncoding
357
388
}.configureSilenceDetection {
358
389
minAmplitudeThreshold = 2000
359
390
bufferDurationInMillis = 1500
0 commit comments