如何使 SpeechRecognizer 的哔声静音?

Posted

技术标签:

【中文标题】如何使 SpeechRecognizer 的哔声静音?【英文标题】:How to mute the beep sound for SpeechRecognizer? 【发布时间】:2014-08-27 23:58:42 【问题描述】:

以前有人问过这个问题,但似乎没有人有解决方案:Muting SpeechRecognizer's beep sound

尽管如此,我仍然想知道是否有人知道如何将 SpeechRecognizer 的哔哔声静音?

我创建 SpeechRecognizer 对象:private SpeechRecognizer sr = SpeechRecognizer.createSpeechRecognizer(this);

然后在我的课堂上我像这样实例化 SpeechRecognizer

sr.setRecognitionListener(new listener());
Intent i = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);
i.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL,
        RecognizerIntent.LANGUAGE_MODEL_FREE_FORM);             
i.putExtra(RecognizerIntent.EXTRA_CALLING_PACKAGE, getApplication()
        .getClass().getName());
i.putExtra(RecognizerIntent.EXTRA_MAX_RESULTS, 6);
i.putExtra(RecognizerIntent.EXTRA_PROMPT, "");
i.putExtra(RecognizerIntent.EXTRA_SPEECH_INPUT_MINIMUM_LENGTH_MILLIS, 7000);
sr.startListening(i);

有人有什么好主意吗?我研究我可以创建一个 AudioManager (AudioManager mAudioManager) 的对象,然后使用 setStreamSolo(),我可以静音。但我不确定如何实现这一点。我将它添加到我的 SpeechRecognizer 实例化代码中,但什么也没发生。这是我应该从我的主课上调用的东西吗?

mAudioManager.setStreamSolo(AudioManager.STREAM_VOICE_CALL, true);

提前谢谢你。

【问题讨论】:

我必须做我在以下链接上的操作:Muting the Google voice recognition beep sound 【参考方案1】:

哇,我会发表评论,但我没有代表。不过我愿意帮忙。

你见过吗:

Continues Speech Recognition beep sound after Google Search update

Is it possible to turn off the silent mode programmatically in android?

Mute the global sound in Android

在我看来,代码因 android 版本而异 - 如第一个链接中所述,Google 将“哔”的输出切换到媒体流

我猜其中一个问题会有解决方案。如果是这样,请发布您所做的事情,正如您所说的,很多人似乎都遇到了问题。

我的猜测是:

//mute audio

AudioManager amanager=(AudioManager)getSystemService(Context.AUDIO_SERVICE);
             amanager.setStreamMute(AudioManager.STREAM_NOTIFICATION, true);
             amanager.setStreamMute(AudioManager.STREAM_ALARM, true);
             amanager.setStreamMute(AudioManager.STREAM_MUSIC, true);
             amanager.setStreamMute(AudioManager.STREAM_RING, true);
             amanager.setStreamMute(AudioManager.STREAM_SYSTEM, true);


//unmute audio

AudioManager amanager=(AudioManager)getSystemService(Context.AUDIO_SERVICE);

             amanager.setStreamMute(AudioManager.STREAM_NOTIFICATION, false);
             amanager.setStreamMute(AudioManager.STREAM_ALARM, false);
             amanager.setStreamMute(AudioManager.STREAM_MUSIC, false);
             amanager.setStreamMute(AudioManager.STREAM_RING, false);
             amanager.setStreamMute(AudioManager.STREAM_SYSTEM, false);

我想 Witness 应用程序用户的这个答案会起作用。归功于:@WitnessApplications

这个范围也是在你开始Listening(i)之前;

【讨论】:

谢谢,我试试看。 我认为静音 STREAM_MUSIC 和 STREAM_SYSTEM 就足够了(从 API 级别 23 开始,您应该使用 AudioManager.setStreamVolume 通过保存其先前状态来使流静音,以便在以下情况下将其重置为其原始值你想取消静音) 马西莫,你是对的。我会补充一点,当你玩 setStreamMute 时要非常小心,它可能会将手机锁定在此模式下,请务必正确释放它。 由于setStreamMute 现已弃用,我们可以使用amanager.adjustStreamVolume(AudioManager.STREAM_NOTIFICATION, AudioManager.ADJUST_MUTE, 0);amanager.adjustStreamVolume(AudioManager.STREAM_NOTIFICATION, AudioManager.ADJUST_TOGGLE_MUTE, 0);【参考方案2】:

即使我也觉得这很烦人,尤其是当您的应用在后台运行时。

这是我在 JAVA 中的解决方法:

AudioManager audio = (AudioManager) getSystemService(Context.AUDIO_SERVICE);           
audio.adjustVolume(AudioManager.ADJUST_MUTE,AudioManager.FLAG_SHOW_UI);

现在这会使活动流静音,并且大多数时候(99/100)结果是音乐流。所以基本上它会静音然后哔声消失。

就我而言,我根据自己的心情添加了一个事件来执行此操作,因此我会不时在 ADJUST_UNMUTE 和 ADJUST_MUTE 之间切换。到目前为止,它对我有用。

但即使是我也在寻找一种更好的解决方案,它只使哔声而不是整个流静音。

希望这对某人有所帮助。

编辑:我发现了一个比这更好的方法,它总是使音乐流静音。

AudioManager audio = (AudioManager) activity.getSystemService(Context.AUDIO_SERVICE);
audio.setStreamVolume(AudioManager.STREAM_MUSIC, 0,  AudioManager.FLAG_SHOW_UI);

取消静音:

audio.setStreamVolume(AudioManager.STREAM_MUSIC, audio.getStreamMaxVolume(AudioManager.STREAM_MUSIC), AudioManager.FLAG_SHOW_UI);

【讨论】:

【参考方案3】:

使用上述 Mark 的解决方案,您将遇到以下描述的崩溃:

Failure delivering result ResultInfowho=@android:requestPermissions:, request=65736, result=-1, data=Intent  act=android.content.pm.action.REQUEST_PERMISSIONS (has extras)  to activity java.lang.SecurityException: Not allowed to change Do Not Disturb state

如果您只想静音语音识别器的哔声,您只需静音AudioManager.STREAM_MUSIC

在 Kotlin 中,对我来说是这样的:

object AudioUtils 

    @JvmStatic fun muteAudio(shouldMute: Boolean, context: Context)
    
        val audioManager: AudioManager = context.getSystemService(Context.AUDIO_SERVICE) as AudioManager
        val muteValue = if (shouldMute) AudioManager.ADJUST_MUTE else AudioManager.ADJUST_UNMUTE
        audioManager.setStreamVolume(AudioManager.STREAM_MUSIC, muteValue, 0)
    


【讨论】:

需要 API 级别 23

以上是关于如何使 SpeechRecognizer 的哔声静音?的主要内容,如果未能解决你的问题,请参考以下文章

如何通过 C++ 代码使主板发出哔哔声? [关闭]

以下代码如何使 PC 发出哔哔声?

Android科大讯飞——语音识别 解决"SpeechRecognizer.createRecognizer()获取的SpeechRecognizer对象为null"问题

面向 Android 11 时 SpeechRecognizer 不可用

SpeechRecognizer.isRecognitionAvailable() 在 Android 11 中始终为 false

带有 SpeechRecognizer 的 Android 自定义键盘