7

У меня есть тестовое приложение, которое использует голос Google в непрерывном режиме и воспроизводит звуковой сигнал при каждом вызове службы распознавания Google. Я пытаюсь избавиться от звукового сигнала. Я прочитал темы об отключении музыкального потока, но это не сработало бы для меня.Отключение звука звукового оповещения Google о голосе

Я пытаюсь найти расположение файла звукового сигнала, чтобы я мог просто пойти и удалить его из системы. Я последовал за this потоком, но я не вижу файл в системном файле 5.0.

+0

Возможный дубликат [Как отключить звуковой сигнал для SpeechRecognizer?] (Http://stackoverflow.com/questions/25538752/how-to-mute-the-beep-sound-for-speechrecognizer) –

+0

Эй, я проверил те ранее и, как я упомянул в вопросе о том, что подавление музыкального потока не является для меня решением:/ –

+0

Хм, хорошо, я помню, как читал один раз, что приглушение голосовой активации было рассмотрено по юридическим причинам, потому что может быть вторжением в конфиденциальность, если устройство всегда прослушивается без одобрения или уведомления пользователя. Я вижу много дубликатов по этому вопросу, но если они не сработают, я не уверен, что вам сказать. –

ответ

4

Предполагая, что вы не хотите отключать все потоки, потому что вы заинтересованы в воспроизведении собственного звука, это может быть для вас решением: используйте 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); 

Я не проверял, является ли примкнет Google App (который играет звуковой сигнал) на этот запрос, но, как правило, он должен работать, и его стоит давать его попробуйте.

Другим вариантом является немедленное отключение всех звуков из приложения Google (в том числе звуковой сигнал распознавания голоса Google). Преимущество этого метода заключается в том, что нет никаких помех для любого другого потокового аудио. Ниже приведена ссылка для дальнейших подробностей. Однако обратите внимание, что для этого требуется доступ root: https://android.stackexchange.com/questions/128588/how-do-i-disable-the-google-voice-typing-voice-search-ding-sound.

+0

Благодарим вас за ответ. я читал об этом api раньше, и его хорошая мысль, но «мне нужно конкретно избавиться от звукового файла!» так что мне не нужно иметь дело с этими вещами, потому что, даже если то, что вы предлагаете, работает, оно будет мешать другим вещам, таким как навигационное считывание во время воспроизведения музыки, что вы говорите. –

+0

Ну, я не верю, что можно удалить звуковой файл без корневого устройства. Поэтому вам придется найти способ обойти это. Я не вижу никакого способа решить это программно. Думаю, вы уже видели эту тему: http://android.stackexchange.com/questions/128588/how-do-i-disable-the-google-voice-typing-voice-search-ding-sound. – REG1

+0

Я в порядке с укоренением. Мне нужно будет увидеть, что ссылка –

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); 

Я надеюсь, что это поможет вам на что-то

+0

благодарит за ответ, но я знаю это решение, и я не ищу этого. Я не хочу переключаться в режим отключения звука и восстанавливать уровень громкости. просто звуковой сигнал должен быть удален и все остальные потоки нормального объема. –

+0

@ con_9 Я знаю, но единственным решением, которое я нашел, было это. Это решение - только вы отключите звук музыки, другие имеют свой уровень. Если вы найдете решение отключить только звуковой сигнал распознавателя речи, скажите, пожалуйста, –

+0

какие-либо новости о подавлении только звукового сигнала без отключения музыкального потока? – user25

2

Вы можете использовать аудио менеджер для управления звуками

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

перед началом распознавания позвонить

audioManager.setStreamMute(AudioManager.STREAM_MUSIC, true); 

и после признания завершения вызова

audioManager.setStreamMute(AudioManager.STREAM_MUSIC, false); 
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();