android - 在播放音乐时通过 android 中的蓝牙耳机进行语音识别

标签 android audio bluetooth speech-recognition pocketsphinx-android

我目前正在使用 pocketsphinx 库识别热门词(如“ok google”)。
该应用程序运行良好,只是它始终只使用手机的麦克风来识别语音。
我的用例是这样的:

  • 我听一个热门词并使用 MediaPlayer 播放一些音乐。
  • 继续听下一个命令,同时保持播放音乐并做出相应的 react 。

  • 该应用程序运行良好,通过蓝牙耳机播放音乐,同时识别语音,但它始终使用手机的麦克风。即使蓝牙耳机已连接或未连接,它仍然使用手机的麦克风。

    我尝试使用:
    AudioManager mAudioManager = 
    (AudioManager)context.getSystemService(Context.AUDIO_SERVICE);
    mAudioManager.setMode(AudioManager.MODE_IN_CALL); 
    mAudioManager.startBluetoothSco();
    

    我尝试使用:
    AudioManager mAudioManager = 
    (AudioManager)context.getSystemService(Context.AUDIO_SERVICE);
    mAudioManager.setMode(AudioManager.MODE_IN_COMMUNICATION); 
    mAudioManager.startBluetoothSco();
    

    在这两种方法中,它都会切断音乐并用蓝牙麦克风收听。

    我需要一种方法,音乐播放器不会从蓝牙耳机中删除,但我仍然能够从蓝牙耳机进行语音识别。

    例如:
    我正在通过蓝牙耳机听音乐。
    我打开了录音应用(https://play.google.com/store/apps/details?id=com.andrwq.recorder)
    即使在听音乐时,我也可以通过蓝牙耳机录制音频。

    这让我觉得这是可能的,但我不知道如何。

    请帮帮我。提前致谢。

    最佳答案

    启动SCO模式是正确的,之后pocketsphinx会监听蓝牙耳机。

    要在 sco 模式下禁用电话麦克风,请使用 am.setMicrophoneMute(true);
    要通过 SCO 播放音频,您需要播放器通过 STREAM_VOICE_CALL 播放。 SCO切换后可能必须重新启动播放器。

    关于android - 在播放音乐时通过 android 中的蓝牙耳机进行语音识别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29658622/

    相关文章:

    android - 无法在模拟器中访问蓝牙

    ios - 蓝牙与 BLE 以及它们的正确使用

    android - 如何在android中的多选模式下设置 ListView 中选中项目的背景

    java - 由多个类加载器加载的同一个类 - Intellij 插件

    java - 使用 Xuggler 解码大型音频文件

    php - 在音频标签中显示文件夹中的所有.MP3文件

    linux - 使用 bluez 4.01 连接蓝牙 LE 设备

    android - 如何扩展按钮的样式?

    java - Android Final 与私有(private) TextView

    iphone - 如何在后台中断后恢复 AVAudioPlayer