Skip to content

Commit fbcebc2

Browse files
committed
Implement encoding selection in MainActivity
1 parent 061e1fa commit fbcebc2

File tree

2 files changed

+56
-4
lines changed

2 files changed

+56
-4
lines changed

sample/src/main/java/com/github/squti/androidwaverecordersample/MainActivity.kt

Lines changed: 34 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
package com.github.squti.androidwaverecordersample
2626

2727
import android.Manifest
28+
import android.R
2829
import android.content.ContentUris
2930
import android.content.ContentValues
3031
import android.content.Intent
@@ -38,6 +39,8 @@ import android.provider.MediaStore
3839
import android.provider.Settings
3940
import android.util.Log
4041
import android.view.View
42+
import android.widget.AdapterView
43+
import android.widget.ArrayAdapter
4144
import android.widget.Toast
4245
import androidx.appcompat.app.AlertDialog
4346
import androidx.appcompat.app.AppCompatActivity
@@ -59,12 +62,36 @@ class MainActivity : AppCompatActivity() {
5962
private var isRecording = false
6063
private var isPaused = false
6164
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
6373
override fun onCreate(savedInstanceState: Bundle?) {
6474
super.onCreate(savedInstanceState)
6575
binding = ActivityMainBinding.inflate(layoutInflater)
6676
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+
}
6792

93+
override fun onNothingSelected(parent: AdapterView<*>?) {}
94+
}
6895
initRecorder(isSaveToExternalStorage = false)
6996

7097
binding.saveToExternalStorageSwitch.setOnCheckedChangeListener { _, isChecked ->
@@ -185,6 +212,7 @@ class MainActivity : AppCompatActivity() {
185212
}
186213

187214
private fun initRecorder(isSaveToExternalStorage: Boolean) {
215+
isSaveToExternalStorageFlag = isSaveToExternalStorage
188216
if (isSaveToExternalStorage)
189217
initWithExternalStorage("audioFile")
190218
else
@@ -217,6 +245,7 @@ class MainActivity : AppCompatActivity() {
217245
binding.pauseResumeRecordingButton.text = "PAUSE"
218246
binding.pauseResumeRecordingButton.visibility = View.VISIBLE
219247
binding.noiseSuppressorSwitch.isEnabled = false
248+
binding.encodingSpinner.isEnabled = false
220249
}
221250

222251
private fun skipRecording() {
@@ -229,6 +258,7 @@ class MainActivity : AppCompatActivity() {
229258
binding.startStopRecordingButton.text = "STOP"
230259
binding.pauseResumeRecordingButton.visibility = View.INVISIBLE
231260
binding.noiseSuppressorSwitch.isEnabled = false
261+
binding.encodingSpinner.isEnabled = false
232262
}
233263

234264
private fun stopRecording() {
@@ -240,6 +270,7 @@ class MainActivity : AppCompatActivity() {
240270
binding.pauseResumeRecordingButton.visibility = View.GONE
241271
binding.startStopRecordingButton.text = "START"
242272
binding.noiseSuppressorSwitch.isEnabled = true
273+
binding.encodingSpinner.isEnabled = true
243274
resetSwitches()
244275
Toast.makeText(this, "File saved at : $filePath", Toast.LENGTH_LONG).show()
245276
}
@@ -332,7 +363,7 @@ class MainActivity : AppCompatActivity() {
332363
.configureWaveSettings {
333364
sampleRate = 44100
334365
channels = AudioFormat.CHANNEL_IN_MONO
335-
audioEncoding = AudioFormat.ENCODING_PCM_FLOAT
366+
audioEncoding = selectedEncoding
336367
}.configureSilenceDetection {
337368
minAmplitudeThreshold = 2000
338369
bufferDurationInMillis = 1500
@@ -353,7 +384,7 @@ class MainActivity : AppCompatActivity() {
353384
.configureWaveSettings {
354385
sampleRate = 44100
355386
channels = AudioFormat.CHANNEL_IN_MONO
356-
audioEncoding = AudioFormat.ENCODING_PCM_FLOAT
387+
audioEncoding = selectedEncoding
357388
}.configureSilenceDetection {
358389
minAmplitudeThreshold = 2000
359390
bufferDurationInMillis = 1500

sample/src/main/res/layout/activity_main.xml

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -163,8 +163,29 @@
163163
android:id="@+id/amplitudeTextView"
164164
android:layout_width="wrap_content"
165165
android:layout_height="wrap_content"
166+
android:layout_marginTop="24dp"
166167
android:textSize="20sp"
167168
app:layout_constraintStart_toStartOf="@+id/showAmplitudeSwitch"
168-
app:layout_constraintTop_toBottomOf="@+id/silenceDetectionSwitch"
169+
app:layout_constraintTop_toBottomOf="@+id/encodingLabelTextView"
169170
tools:text="Amplitude : " />
171+
172+
<Spinner
173+
android:id="@+id/encodingSpinner"
174+
android:layout_width="wrap_content"
175+
android:layout_height="wrap_content"
176+
app:layout_constraintBottom_toBottomOf="@+id/encodingLabelTextView"
177+
app:layout_constraintStart_toEndOf="@+id/encodingLabelTextView"
178+
app:layout_constraintTop_toTopOf="@+id/encodingLabelTextView"
179+
/>
180+
181+
<TextView
182+
android:id="@+id/encodingLabelTextView"
183+
android:layout_width="wrap_content"
184+
android:layout_height="wrap_content"
185+
android:layout_marginStart="16dp"
186+
android:layout_marginLeft="16dp"
187+
android:layout_marginTop="8dp"
188+
android:text="Audio Encoding"
189+
app:layout_constraintStart_toStartOf="parent"
190+
app:layout_constraintTop_toBottomOf="@+id/silenceDetectionSwitch" />
170191
</androidx.constraintlayout.widget.ConstraintLayout>

0 commit comments

Comments
 (0)