Browse Source

修复安卓录音,通话翻译问题

weicu
fdp 1 year ago
parent
commit
32985b32d5
  1. 7
      local_plugins/azure_speech/android/src/main/kotlin/com/yunqiinnovation/azure_speech/AzureAsrHelper.kt
  2. 20
      local_plugins/azure_speech/android/src/main/kotlin/com/yunqiinnovation/azure_speech/tools/SimpleAudioReceiver.kt

7
local_plugins/azure_speech/android/src/main/kotlin/com/yunqiinnovation/azure_speech/AzureAsrHelper.kt

@ -504,10 +504,9 @@ class AzureAsrHelper(private val context: Context) {
} }
// 启动音频处理 // 启动音频处理
audioStream!!.startAudioRecord( when(audioSourceType) { audioStream!!.startAudioRecord(SimpleAudioReceiver.AudioSourceType.MICROPHONE
AudioSourceType.MICROPHONE -> SimpleAudioReceiver.AudioSourceType.MICROPHONE
AudioSourceType.EXTERNAL -> SimpleAudioReceiver.AudioSourceType.EXTERNAL ,audioDataCallback)
},audioDataCallback)
audioStream!!.recordfile!!.closeFile(true) audioStream!!.recordfile!!.closeFile(true)

20
local_plugins/azure_speech/android/src/main/kotlin/com/yunqiinnovation/azure_speech/tools/SimpleAudioReceiver.kt

@ -85,7 +85,8 @@ class SimpleAudioReceiver(private val context: Context) {
* 初始化音频录制 * 初始化音频录制
*/ */
fun initAudioRecord() { fun initAudioRecord() {
val format = getOptimalAudioFormat()
pushAudioStream = AudioInputStream.createPushStream(format)
isRunning.set(true) isRunning.set(true)
Log.d(TAG, "initAudioRecord: ${isRunning}") Log.d(TAG, "initAudioRecord: ${isRunning}")
startWriteThread() // 再启动数据读取线程 startWriteThread() // 再启动数据读取线程
@ -142,7 +143,7 @@ class SimpleAudioReceiver(private val context: Context) {
if(audioDataCallback!=null){ if(audioDataCallback!=null){
audioDataCallback?.onAudio(finalData) audioDataCallback?.onAudio(finalData)
} }
if(pushAudioStream!=null){ if(pushAudioStream!=null&&audioDataCallback==null){
pushAudioStream?.write(finalData) pushAudioStream?.write(finalData)
} }
if(recordfile!=null){ if(recordfile!=null){
@ -184,8 +185,6 @@ class SimpleAudioReceiver(private val context: Context) {
* @param callback 音频数据回调,可为空 * @param callback 音频数据回调,可为空
*/ */
fun startAudioRecord(audioSourceType: AudioSourceType, callback: AudioDataCallback?) { fun startAudioRecord(audioSourceType: AudioSourceType, callback: AudioDataCallback?) {
val format = getOptimalAudioFormat()
pushAudioStream = AudioInputStream.createPushStream(format)
this.audioSourceType = audioSourceType this.audioSourceType = audioSourceType
this.audioDataCallback = callback this.audioDataCallback = callback
writeQueue.clear() writeQueue.clear()
@ -240,8 +239,6 @@ class SimpleAudioReceiver(private val context: Context) {
try { try {
// 首先设置通话音频模式 // 首先设置通话音频模式
//setupCommunicationAudioMode() //setupCommunicationAudioMode()
val supportedSampleRates = intArrayOf(16000, 8000, 11025, 22050, 44100) val supportedSampleRates = intArrayOf(16000, 8000, 11025, 22050, 44100)
val sampleRate = supportedSampleRates.firstOrNull { rate -> val sampleRate = supportedSampleRates.firstOrNull { rate ->
val bufferSize = AudioRecord.getMinBufferSize(rate, channelConfig, audioFormat) val bufferSize = AudioRecord.getMinBufferSize(rate, channelConfig, audioFormat)
@ -278,7 +275,7 @@ class SimpleAudioReceiver(private val context: Context) {
} }
audioRecord?.startRecording() audioRecord?.startRecording()
Log.d("TAG", "通话模式录音开始,采样率: $sampleRate Hz") Log.d("TAG", "通话模式录音开始,采样率: $sampleRate Hz")
} catch (e: Exception) { } catch (e: Exception) {
@ -316,7 +313,8 @@ class SimpleAudioReceiver(private val context: Context) {
//setupCommunicationAudioMode() //setupCommunicationAudioMode()
// 停止录音 // 停止录音
audioRecord?.startRecording() audioRecord?.startRecording()
} catch (e: Exception) { } catch (e: Exception) {
Log.e(TAG, "继续录音失败: ${e.message}") Log.e(TAG, "继续录音失败: ${e.message}")
} }
@ -331,11 +329,7 @@ class SimpleAudioReceiver(private val context: Context) {
// 停止录音 // 停止录音
audioRecord?.stop() audioRecord?.stop()
if(pushAudioStream != null){
pushAudioStream?.close()
pushAudioStream = null
}
// 恢复音频模式 这里会导致关闭麦克风卡住待优化 // 恢复音频模式 这里会导致关闭麦克风卡住待优化
//restoreCommunicationAudioMode() //restoreCommunicationAudioMode()

Loading…
Cancel
Save