diff --git a/lib/modules/settings/views/settings_view.dart b/lib/modules/settings/views/settings_view.dart index ef7c04602..5cce91556 100644 --- a/lib/modules/settings/views/settings_view.dart +++ b/lib/modules/settings/views/settings_view.dart @@ -548,49 +548,49 @@ class SettingsView extends GetView { // ? Colors.white.withOpacity(0.1) // : Colors.grey[200]), // 面对面翻译测试 - _buildSimpleNavigationSetting( - title: '面对面翻译测试', - subtitle: '测试面对面翻译', - icon: Icons.bluetooth_searching, - iconBgColor: isDarkMode - ? Colors.green[900]!.withOpacity(0.3) - : Colors.green[100]!, - iconColor: - isDarkMode ? Colors.green[300]! : Colors.green[600]!, - titleColor: isDarkMode ? Colors.white : null, - subtitleColor: isDarkMode ? Colors.white70 : null, - onTap: () { - Get.toNamed(Routes.ftftranslation); - }, - isDarkMode: isDarkMode, - ), - Divider( - height: 1, - color: isDarkMode - ? Colors.white.withOpacity(0.1) - : Colors.grey[200]), - // BLE测试 - _buildSimpleNavigationSetting( - title: 'opus解码测试', - subtitle: '测试opus解码', - icon: Icons.bluetooth_searching, - iconBgColor: isDarkMode - ? Colors.green[900]!.withOpacity(0.3) - : Colors.green[100]!, - iconColor: - isDarkMode ? Colors.green[300]! : Colors.green[600]!, - titleColor: isDarkMode ? Colors.white : null, - subtitleColor: isDarkMode ? Colors.white70 : null, - onTap: () { - Get.toNamed(Routes.opusTest); - }, - isDarkMode: isDarkMode, - ), - Divider( - height: 1, - color: isDarkMode - ? Colors.white.withOpacity(0.1) - : Colors.grey[200]), + // _buildSimpleNavigationSetting( + // title: '面对面翻译测试', + // subtitle: '测试面对面翻译', + // icon: Icons.bluetooth_searching, + // iconBgColor: isDarkMode + // ? Colors.green[900]!.withOpacity(0.3) + // : Colors.green[100]!, + // iconColor: + // isDarkMode ? Colors.green[300]! : Colors.green[600]!, + // titleColor: isDarkMode ? Colors.white : null, + // subtitleColor: isDarkMode ? Colors.white70 : null, + // onTap: () { + // Get.toNamed(Routes.ftftranslation); + // }, + // isDarkMode: isDarkMode, + // ), + // Divider( + // height: 1, + // color: isDarkMode + // ? Colors.white.withOpacity(0.1) + // : Colors.grey[200]), + // // BLE测试 + // _buildSimpleNavigationSetting( + // title: 'opus解码测试', + // subtitle: '测试opus解码', + // icon: Icons.bluetooth_searching, + // iconBgColor: isDarkMode + // ? Colors.green[900]!.withOpacity(0.3) + // : Colors.green[100]!, + // iconColor: + // isDarkMode ? Colors.green[300]! : Colors.green[600]!, + // titleColor: isDarkMode ? Colors.white : null, + // subtitleColor: isDarkMode ? Colors.white70 : null, + // onTap: () { + // Get.toNamed(Routes.opusTest); + // }, + // isDarkMode: isDarkMode, + // ), + // Divider( + // height: 1, + // color: isDarkMode + // ? Colors.white.withOpacity(0.1) + // : Colors.grey[200]), // BLE测试 // _buildSimpleNavigationSetting( diff --git a/local_plugins/azure_speech/android/src/main/kotlin/com/yunqiinnovation/azure_speech/AzureAsrHelper.kt b/local_plugins/azure_speech/android/src/main/kotlin/com/yunqiinnovation/azure_speech/AzureAsrHelper.kt index 46b8bfaba..40e9c1861 100644 --- a/local_plugins/azure_speech/android/src/main/kotlin/com/yunqiinnovation/azure_speech/AzureAsrHelper.kt +++ b/local_plugins/azure_speech/android/src/main/kotlin/com/yunqiinnovation/azure_speech/AzureAsrHelper.kt @@ -136,8 +136,6 @@ class AzureAsrHelper(private val context: Context) { audioManager = context.getSystemService(Context.AUDIO_SERVICE) as AudioManager originalAudioMode = audioManager?.mode ?: AudioManager.MODE_NORMAL - // 5. 初始化麦克风数据 - initAudioRecord() // 保存配置 this.subscriptionKey = subscriptionKey @@ -381,6 +379,8 @@ class AzureAsrHelper(private val context: Context) { } try { + // 5. 初始化麦克风 + initAudioRecord() // 设置各种事件监听 setupEventListeners(callback) @@ -508,7 +508,7 @@ class AzureAsrHelper(private val context: Context) { // 停止音频处理 stopAudioProcessing() - // 停止录音 + // 停止录音 stopMicrophoneCapture() // 尝试强制关闭识别器 try { @@ -734,18 +734,18 @@ class AzureAsrHelper(private val context: Context) { // 获取已确定的采样率 val format = getOptimalAudioFormat() val supportedSampleRates = intArrayOf(16000, 8000, 11025, 22050, 44100) - + val channelConfig = AudioFormat.CHANNEL_IN_MONO // 单声道输入 + val audioFormat = AudioFormat.ENCODING_PCM_16BIT // 16位PCM格式 // 查找设备支持的最佳采样率 val sampleRate = supportedSampleRates.firstOrNull { rate -> val bufferSize = AudioRecord.getMinBufferSize( rate, - AudioFormat.CHANNEL_IN_MONO, - AudioFormat.ENCODING_PCM_16BIT + channelConfig, + audioFormat ) bufferSize > 0 // 返回正值表示支持 } ?: 16000 // 默认回退值 - val channelConfig = AudioFormat.CHANNEL_IN_MONO // 单声道输入 - val audioFormat = AudioFormat.ENCODING_PCM_16BIT // 16位PCM格式 + // 计算最小缓冲区大小(避免出现音频欠载) val minBufferSize = AudioRecord.getMinBufferSize( @@ -808,16 +808,17 @@ class AzureAsrHelper(private val context: Context) { while (!Thread.interrupted() && audioRecord?.recordingState == AudioRecord.RECORDSTATE_RECORDING) { - // 读取音频 - val bytesRead = audioRecord?.read(buffer, 0, buffer.size) ?: 0 - - if (!isPaused && bytesRead > 0) { - // 写入Azure流 - audioStream?.write(buffer) + if (!isPaused) { + // 读取音频 + val bytesRead = audioRecord?.read(buffer, 0, buffer.size) ?: 0 + if (bytesRead > 0) { + // 写入Azure流 + audioStream?.write(buffer) - // 保存录音 - recordfile?.saveAudioDataToWav(buffer) + // 保存录音 + recordfile?.saveAudioDataToWav(buffer) + } } } }.apply { start() }