Android语音识别音频源切换问题及USB音频路由禁用需求
问题描述
我们使用遵循UAC协议的HDMI采集设备渲染音视频时,该设备会被注册为输入音频设备并成为语音引擎的默认输入源。需要将语音引擎的输入音频源切换为内置底部麦克风或后置CAMCORDER麦克风。
尝试过的方案
参考相关代码实现自定义音频源输入,但仅使语音引擎静音,未达到切换输入源的需求,代码如下:
val SAMPLE_RATE = 44100 val CHANNEL_CONFIG = AudioFormat.CHANNEL_IN_MONO val AUDIO_FORMAT = AudioFormat.ENCODING_PCM_16BIT // val bufferSize = AudioRecord.getMinBufferSize(SAMPLE_RATE, CHANNEL_CONFIG, AUDIO_FORMAT) val audioRecord = AudioRecord.Builder() .setAudioSource(MediaRecorder.AudioSource.CAMCORDER) .setAudioFormat(AudioFormat.Builder() .setEncoding(AUDIO_FORMAT) .setSampleRate(SAMPLE_RATE) .setChannelMask(CHANNEL_CONFIG) .build()) // .setBufferSizeInBytes(bufferSize) .build() val fileDescriptors = ParcelFileDescriptor.createReliablePipe() val clientRead = fileDescriptors[0] audioRecord.startRecording() Thread { try { val audioSink = fileDescriptors[1] ParcelFileDescriptor.AutoCloseOutputStream(audioSink).use { fos -> val buffer = ByteArray(audioRecord.bufferSizeInFrames) while (isListening) { val bytesRead = audioRecord.read(buffer, 0, buffer.size, AudioRecord.READ_BLOCKING) if (bytesRead > 0) { fos.write(buffer) } } } } catch (e: Exception) { e.printStackTrace() } audioRecord.stop() audioRecord.release() }.start() speechIntent.putExtra("android.speech.extra.AUDIO_SOURCE", clientRead) speechIntent.putExtra("android.speech.extra.AUDIO_SOURCE_ENCODING", AUDIO_FORMAT) speechIntent.putExtra("android.speech.extra.AUDIO_SOURCE_SAMPLING_RATE", SAMPLE_RATE) speechIntent.putExtra("android.speech.extra.AUDIO_SOURCE_CHANNEL_COUNT", CHANNEL_CONFIG) speechRecognizer.startListening(speechIntent)
设备环境
- Android 13
- Google Speech Recognition v20230807
待解决的疑问
- 如何正确实现将语音引擎的输入源切换为指定的内置麦克风(底部或CAMCORDER)?
- 是否存在程序化禁用USB音频外设自动路由的可行方案?
内容的提问来源于stack exchange,提问作者Qamar
相关产品推荐
相关产品推荐

