如何在不使MediaPlayer静音的情况下静音SpeechRecognizer的哔声

时间:2017-07-23 15:34:06

标签: android speech-recognition

是否可以在不使MediaPlayer播放的音乐静音的情况下将SpeechRecognizer的哔声静音?

这里代码:

speech = SpeechRecognizer.createSpeechRecognizer(this);
speech.setRecognitionListener(this);
recognizerIntent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);
recognizerIntent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_PREFERENCE, "en");
recognizerIntent.putExtra(RecognizerIntent.EXTRA_CALLING_PACKAGE, this.getPackageName());
recognizerIntent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL, RecognizerIntent.LANGUAGE_MODEL_WEB_SEARCH);
recognizerIntent.putExtra(RecognizerIntent.EXTRA_MAX_RESULTS, 1);

timer =  new Timer();
timer.schedule(new UpdateTimeTask(),500,2000);

MediaPlayer mp = new MediaPlayer(); 
AssetFileDescriptor afd = getResources().openRawResourceFd(R.raw.breathe);
mp.reset();
mp.setAudioStreamType(AudioManager.STREAM_MUSIC);
AudioManager myAudioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
myAudioManager.setStreamVolume(AudioManager.STREAM_ALARM, 0, 0);
try {
    mp.setDataSource(afd.getFileDescriptor(), afd.getStartOffset(), afd.getDeclaredLength());
    mp.prepare();
}
catch (IOException e) {
    e.printStackTrace();
}

mp.start();


class UpdateTimeTask extends TimerTask {
public void run() {

    mActivity.runOnUiThread(new Runnable() {

        @Override
        public void run() {
            speech.stopListening();
            speech.startListening(recognizerIntent);
        }
    });
}

音频焦点无法解决问题,音乐正在播放,我可以听到哔哔声

我无法将STREAM_MUSIC(或整个STREAM_SYSTEM)静音,因为我将其用于MediaPlayer

静音STREAM_ALARM不适用于SpeechRecognizer

所以当MediaPlayer播放音乐时如何静音嘟嘟声

更新

boolean gotFocus = requestAudioFocusForMyApp(MainActivity.this);
        if (gotFocus) {
            MediaPlayer mp = new MediaPlayer();
            AssetFileDescriptor afd = getResources().openRawResourceFd(R.raw.breathe);
            mp.reset();
            mp.setAudioStreamType(AudioManager.STREAM_MUSIC);
            AudioManager myAudioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
            myAudioManager.setStreamVolume(AudioManager.STREAM_ALARM, 0, 0);
            try {
                mp.setDataSource(afd.getFileDescriptor(), afd.getStartOffset(), afd.getDeclaredLength());
                mp.prepare();
            } catch (IOException e) {
                e.printStackTrace();
            }
            mp.start();
        }
反多数代码反代码大部分代码反多为代码反代码大部分代码反代码大多数代码反代码大多数代码反代码大部分代码反代码大多数代码反多数代码反代码大部分代码反代码多为代码反代码大部分代码

1 个答案:

答案 0 :(得分:1)

我更新了我的回答。这应该工作。检查一下!

boolean gotFocus = requestAudioFocusForMyApp(this); /* bind with your context. */
/* You should pass your context of your service, because you are playing music via service. this parameter represents the context of your service */
                if(gotFocus) {
                   MediaPlayer mp = new MediaPlayer();
        AssetFileDescriptor afd = getResources().openRawResourceFd(R.raw.breathe);
        mp.reset();
        mp.setAudioStreamType(AudioManager.STREAM_MUSIC);
        AudioManager myAudioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
        myAudioManager.setStreamVolume(AudioManager.STREAM_ALARM, 0, 0);
        try {
            mp.setDataSource(afd.getFileDescriptor(), afd.getStartOffset(), afd.getDeclaredLength());
            mp.prepare();
        } catch (IOException e) {
            e.printStackTrace();
        }
        mp.start();
                }


private boolean requestAudioFocusForMyApp(final Context context) {
        AudioManager am = (AudioManager)context.getSystemService(Context.AUDIO_SERVICE);

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

        if (result == AudioManager.AUDIOFOCUS_REQUEST_GRANTED) {
            Log.d("AudioFocus", "Audio focus received");
            return true;
        } else {
            Log.d("AudioFocus", "Audio focus NOT received");
            return false;
        }
    }

https://developer.android.com/reference/android/media/AudioFocusRequest.html