11

我有一个测试应用程序,它以连续的方式使用谷歌语音,每次调用谷歌识别服务时都会播放哔声。我正在尝试摆脱哔哔声。我已经阅读了静音音乐流的线程,但这对我不起作用。

我正在尝试找到哔声文件的位置,以便我可以将其从系统中删除。我关注了这个线程,但我在 5.0 系统文件中看不到该文件。

4

4 回答 4

6

假设您不想静音所有流,因为您有兴趣播放自己的声音,这可能是您的解决方案:使用Audio Focus API

所以你会有这样的事情:

AudioManager am = mContext.getSystemService(Context.AUDIO_SERVICE);
...
// Request audio focus for playback
int result = am.requestAudioFocus(afChangeListener,
                             // Use the music stream.
                             AudioManager.STREAM_MUSIC,
                             // Request permanent focus.
                             AudioManager.AUDIOFOCUS_GAIN);

if (result == AudioManager.AUDIOFOCUS_REQUEST_GRANTED) {
am.registerMediaButtonEventReceiver(RemoteControlReceiver);
// Play your own sound (or play silence)
}
am.abandonAudioFocus(afChangeListener);

我没有测试过谷歌应用程序(播放哔声)是否符合这个要求,但通常它应该可以工作,值得一试。

另一种选择是直接静音来自谷歌应用程序的所有声音(包括谷歌语音识别哔声)。这种方法的优点是不会干扰任何其他流式音频。以下是更多详细信息的链接。但是请注意,这需要 root 访问权限: https ://android.stackexchange.com/questions/128588/how-do-i-disable-the-google-voice-typing-voice-search-ding-sound 。

于 2016-06-17T13:31:58.307 回答
5

我发现使哔声识别静音的唯一解决方案是:

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

在保存卷之前,例如:

AudioManager audioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
current_volume = audioManager.getStreamVolume(AudioManager.STREAM_MUSIC);

要返回恢复音量级别,例如绦虫:

audio = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
audio.setStreamVolume(AudioManager.STREAM_MUSIC, audio.getStreamMaxVolume(AudioManager.STREAM_MUSIC),
            AudioManager.FLAG_REMOVE_SOUND_AND_VIBRATE);

我希望它对你有所帮助

于 2016-06-14T10:43:28.267 回答
2

您可以使用音频管理器来控制声音

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

在您开始识别呼叫之前

 audioManager.setStreamMute(AudioManager.STREAM_MUSIC, true);

并在识别完成后调用

audioManager.setStreamMute(AudioManager.STREAM_MUSIC, false);
于 2016-06-18T12:41:56.680 回答
0

我发现另一个解决方案对我来说很好。我将媒体播放器的音频流设置为另一个流,因此我可以将音乐流静音。我希望这对其他人也有帮助。

afd = context.getResources().openRawResourceFd(R.raw.duduuudududu2);

mp.reset();
mp.setAudioStreamType(AudioManager.STREAM_ALARM);
myAudioManager.setStreamVolume(AudioManager.STREAM_MUSIC,0,0);

try 
{
   mp.setDataSource(afd.getFileDescriptor(), afd.getStartOffset(), afd.getDeclaredLength());
   mp.prepare();
} 
catch (IOException e) 
{
   e.printStackTrace();
}

mp.start();
于 2017-06-13T16:51:21.053 回答