如何静音SpeechRecognizer的哔声?

时间:2014-08-27 23:58:42

标签: android audio voice-recognition

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

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

我创建了speechRecognizer对象:私有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);

提前谢谢。

3 个答案:

答案 0 :(得分:16)

Aww我会评论,但我没有代表。不过我想帮忙。

你见过这个:

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版本 - 如第一个链接中所述,谷歌切换了' beep'到媒体流

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

我的猜测是:

//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

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

答案 1 :(得分:1)

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

Failure delivering result ResultInfo{who=@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)
    }

}

答案 2 :(得分:1)

即使我发现它很烦人,尤其是当你的应用在后台运行时。

以下是我在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);