Skip to content

Commit ee661b2

Browse files
committed
Update AudioRecordManager.kt
1 parent 4042bfe commit ee661b2

1 file changed

Lines changed: 31 additions & 23 deletions

File tree

SignalBridge/src/main/java/org/operatorfoundation/signalbridge/internal/AudioRecordManager.kt

Lines changed: 31 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -122,6 +122,8 @@ internal class AudioRecordManager(private val context: Context)
122122
@SuppressLint("MissingPermission")
123123
fun tryInitializeWithSourceAndRate(audioSource: Int, sampleRate: Int): AudioRecordInitResult
124124
{
125+
var testAudioRecord: AudioRecord? = null
126+
125127
return try
126128
{
127129
// Check for RECORD_AUDIO permission first
@@ -132,6 +134,7 @@ internal class AudioRecordManager(private val context: Context)
132134

133135
if (permissionCheck != PackageManager.PERMISSION_GRANTED)
134136
{
137+
Timber.e("RECORD_AUDIO permission not granted!")
135138
return AudioRecordInitResult.SourceFailed(
136139
audioSource = audioSource,
137140
errorMessage = "RECORD_AUDIO permission not granted"
@@ -140,46 +143,42 @@ internal class AudioRecordManager(private val context: Context)
140143

141144
// Calculate buffer size for this configuration
142145
val minBufferSize = AudioRecord.getMinBufferSize(sampleRate, CHANNEL_CONFIG, AUDIO_FORMAT)
146+
Timber.d("getMinBufferSize for $sampleRate: $minBufferSize (ERROR=${ AudioRecord.ERROR}, ERROR_BAD_VALUE=${AudioRecord.ERROR_BAD_VALUE})")
143147

144148
if (minBufferSize == AudioRecord.ERROR_BAD_VALUE || minBufferSize == AudioRecord.ERROR)
145149
{
146150
return AudioRecordInitResult.SourceFailed(
147151
audioSource = audioSource,
148-
errorMessage = "Invalid audio configuration for source $audioSource at ${sampleRate}Hz"
152+
errorMessage = "Invalid audio configuration for source $audioSource at ${sampleRate}Hz, minBufferSize=$minBufferSize"
149153
)
150154
}
151155

152156
// Use optimal buffer size
153157
val calculatedBufferSize = calculateOptimalBufferSize(minBufferSize)
154-
155-
// Create AudioRecord instance - simple, no routing
156-
val testAudioRecord = try {
157-
AudioRecord(
158-
audioSource,
159-
sampleRate,
160-
CHANNEL_CONFIG,
161-
AUDIO_FORMAT,
162-
calculatedBufferSize
163-
)
164-
}
165-
catch (securityException: SecurityException)
166-
{
167-
return AudioRecordInitResult.SourceFailed(
168-
audioSource = audioSource,
169-
errorMessage = "SecurityException creating AudioRecord: ${securityException.message}",
170-
cause = securityException
171-
)
172-
}
158+
Timber.d("Creating AudioRecord: source=$audioSource, rate=$sampleRate, buffer=$calculatedBufferSize")
159+
160+
// Create AudioRecord instance
161+
testAudioRecord = AudioRecord(
162+
audioSource,
163+
sampleRate,
164+
CHANNEL_CONFIG,
165+
AUDIO_FORMAT,
166+
calculatedBufferSize
167+
)
173168

174169
// Check if initialization was successful
175-
if (testAudioRecord.state == AudioRecord.STATE_INITIALIZED)
170+
val state = testAudioRecord.state
171+
Timber.d("AudioRecord created: state=$state (STATE_INITIALIZED=${AudioRecord.STATE_INITIALIZED}, STATE_UNINITIALIZED=${AudioRecord.STATE_UNINITIALIZED})")
172+
173+
if (state == AudioRecord.STATE_INITIALIZED)
176174
{
177175
// Success - store the AudioRecord and buffer size
178176
audioRecord = testAudioRecord
179177
bufferSize = calculatedBufferSize
178+
testAudioRecord = null // Don't release this one
180179

181180
val recordInfo = AudioRecordInfo(
182-
state = testAudioRecord.state,
181+
state = audioRecord!!.state,
183182
audioSource = audioSource,
184183
sampleRate = sampleRate,
185184
channelConfig = CHANNEL_CONFIG,
@@ -188,6 +187,8 @@ internal class AudioRecordManager(private val context: Context)
188187
minBufferSize = minBufferSize
189188
)
190189

190+
Timber.i("✅ SUCCESS: AudioRecord initialized with source=$audioSource, rate=${sampleRate}Hz")
191+
191192
AudioRecordInitResult.Success(
192193
audioRecordInfo = recordInfo,
193194
workingAudioSource = audioSource
@@ -196,16 +197,23 @@ internal class AudioRecordManager(private val context: Context)
196197
else
197198
{
198199
// AudioRecord failed to initialize
200+
Timber.w("❌ FAILED: AudioRecord state=$state for source=$audioSource, rate=${sampleRate}Hz")
199201
testAudioRecord.release()
202+
testAudioRecord = null
203+
200204
AudioRecordInitResult.SourceFailed(
201205
audioSource = audioSource,
202-
errorMessage = "AudioRecord state: ${testAudioRecord.state} at ${sampleRate}Hz"
206+
errorMessage = "AudioRecord state: $state at ${sampleRate}Hz"
203207
)
204208
}
205209

206210
}
207211
catch (exception: Exception)
208212
{
213+
Timber.e(exception, "💥 EXCEPTION creating AudioRecord: source=$audioSource, rate=${sampleRate}Hz")
214+
215+
testAudioRecord?.release()
216+
209217
AudioRecordInitResult.SourceFailed(
210218
audioSource = audioSource,
211219
errorMessage = "Exception at ${sampleRate}Hz: ${exception.message}",

0 commit comments

Comments
 (0)