get/set Android 中的媒体音量 (spotify) 和 TTS 如何?
How do you get/set media volume (spotify) and TTS in Android?
同时降低流音量和提高 TTS 音量
我有这个 Android 应用程序,它每次都使用 TTS 通话并使用流媒体音乐 (spotify)。所以,我需要降低音量并提高 TTS
我使用此代码,但这也会降低 tts。
AudioManager audioManager = (AudioManager)getSystemService(Context.AUDIO_SERVICE);
audioManager.setStreamVolume(AudioManager.STREAM_MUSIC,[int value],[if desired a flag]);
有什么方法可以像流音乐一样只减少 spotify 。
在 Java/android.
你想做的是 'audio ducking'
下面是一些示例代码:
/**
* Our {@link AudioManager.OnAudioFocusChangeListener}
*/
private static AudioManager.OnAudioFocusChangeListener audioFocus = new AudioManager.OnAudioFocusChangeListener() {
@Override
public void onAudioFocusChange(final int focusChange) {
if (DEBUG) {
MyLog.i(CLS_NAME, "AudioManager focusChange: " + focusChange);
}
switch (focusChange) {
case AudioManager.AUDIOFOCUS_GAIN:
if (DEBUG) {
MyLog.i(CLS_NAME, "AudioManager focusChange: AUDIOFOCUS_GAIN");
}
break;
case AudioManager.AUDIOFOCUS_LOSS:
if (DEBUG) {
MyLog.i(CLS_NAME, "AudioManager focusChange: AUDIOFOCUS_LOSS");
}
break;
case AudioManager.AUDIOFOCUS_LOSS_TRANSIENT:
if (DEBUG) {
MyLog.i(CLS_NAME, "AudioManager focusChange: AUDIOFOCUS_LOSS_TRANSIENT");
}
break;
case AudioManager.AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK:
if (DEBUG) {
MyLog.i(CLS_NAME, "AudioManager focusChange: AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK");
}
break;
default:
if (DEBUG) {
MyLog.i(CLS_NAME, "AudioManager focusChange: AUDIOFOCUS default");
}
break;
}
}
};
/**
* Duck the audio
*
* @param ctx the application context
*/
public static void duckAudioMedia(final Context ctx) {
if (DEBUG) {
MyLog.i(CLS_NAME, "duckAudioMedia");
}
try {
final AudioManager audioManager = (AudioManager) ctx.getSystemService(Context.AUDIO_SERVICE);
switch (audioManager.requestAudioFocus(audioFocus, AudioManager.STREAM_MUSIC,
AudioManager.AUDIOFOCUS_GAIN_TRANSIENT_MAY_DUCK)) {
case AudioManager.AUDIOFOCUS_REQUEST_FAILED:
if (DEBUG) {
MyLog.w(CLS_NAME, "AudioManager duckAudioMedia AUDIOFOCUS_REQUEST_FAILED");
}
break;
case AudioManager.AUDIOFOCUS_REQUEST_GRANTED:
if (DEBUG) {
MyLog.i(CLS_NAME, "AudioManager duckAudioMedia AUDIOFOCUS_REQUEST_GRANTED");
}
break;
default:
if (DEBUG) {
MyLog.i(CLS_NAME, "AudioManager duckAudioMedia AUDIOFOCUS default");
}
break;
}
} catch (final NullPointerException e) {
if (DEBUG) {
MyLog.w(CLS_NAME, "duckAudioMedia: NullPointerException");
e.printStackTrace();
}
} catch (final Exception e) {
if (DEBUG) {
MyLog.w(CLS_NAME, "duckAudioMedia: Exception");
e.printStackTrace();
}
}
}
/**
* Notify the System that any previous condition requiring to duck or pause audio is now complete.
*
* @param ctx the application context
*/
public static void abandonAudioMedia(final Context ctx) {
if (DEBUG) {
MyLog.i(CLS_NAME, "abandonAudioMedia");
}
try {
final AudioManager audioManager = (AudioManager) ctx.getSystemService(Context.AUDIO_SERVICE);
switch (audioManager.abandonAudioFocus(audioFocus)) {
case AudioManager.AUDIOFOCUS_REQUEST_FAILED:
if (DEBUG) {
MyLog.w(CLS_NAME, "AudioManager abandonAudioMedia AUDIOFOCUS_REQUEST_FAILED");
}
break;
case AudioManager.AUDIOFOCUS_REQUEST_GRANTED:
if (DEBUG) {
MyLog.i(CLS_NAME, "AudioManager abandonAudioMedia AUDIOFOCUS_REQUEST_GRANTED");
}
break;
default:
if (DEBUG) {
MyLog.i(CLS_NAME, "AudioManager abandonAudioMedia AUDIOFOCUS default");
}
break;
}
} catch (final NullPointerException e) {
if (DEBUG) {
MyLog.w(CLS_NAME, "abandonAudioMedia: NullPointerException");
e.printStackTrace();
}
} catch (final Exception e) {
if (DEBUG) {
MyLog.w(CLS_NAME, "abandonAudioMedia: Exception");
e.printStackTrace();
}
}
}
您必须删除我的自定义日志记录。
在 TTS 开始时调用 duckAudioMedia
,在语音完成时调用 abandonAudioMedia
。
同时降低流音量和提高 TTS 音量
我有这个 Android 应用程序,它每次都使用 TTS 通话并使用流媒体音乐 (spotify)。所以,我需要降低音量并提高 TTS
我使用此代码,但这也会降低 tts。
AudioManager audioManager = (AudioManager)getSystemService(Context.AUDIO_SERVICE);
audioManager.setStreamVolume(AudioManager.STREAM_MUSIC,[int value],[if desired a flag]);
有什么方法可以像流音乐一样只减少 spotify 。
在 Java/android.
你想做的是 'audio ducking'
下面是一些示例代码:
/**
* Our {@link AudioManager.OnAudioFocusChangeListener}
*/
private static AudioManager.OnAudioFocusChangeListener audioFocus = new AudioManager.OnAudioFocusChangeListener() {
@Override
public void onAudioFocusChange(final int focusChange) {
if (DEBUG) {
MyLog.i(CLS_NAME, "AudioManager focusChange: " + focusChange);
}
switch (focusChange) {
case AudioManager.AUDIOFOCUS_GAIN:
if (DEBUG) {
MyLog.i(CLS_NAME, "AudioManager focusChange: AUDIOFOCUS_GAIN");
}
break;
case AudioManager.AUDIOFOCUS_LOSS:
if (DEBUG) {
MyLog.i(CLS_NAME, "AudioManager focusChange: AUDIOFOCUS_LOSS");
}
break;
case AudioManager.AUDIOFOCUS_LOSS_TRANSIENT:
if (DEBUG) {
MyLog.i(CLS_NAME, "AudioManager focusChange: AUDIOFOCUS_LOSS_TRANSIENT");
}
break;
case AudioManager.AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK:
if (DEBUG) {
MyLog.i(CLS_NAME, "AudioManager focusChange: AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK");
}
break;
default:
if (DEBUG) {
MyLog.i(CLS_NAME, "AudioManager focusChange: AUDIOFOCUS default");
}
break;
}
}
};
/**
* Duck the audio
*
* @param ctx the application context
*/
public static void duckAudioMedia(final Context ctx) {
if (DEBUG) {
MyLog.i(CLS_NAME, "duckAudioMedia");
}
try {
final AudioManager audioManager = (AudioManager) ctx.getSystemService(Context.AUDIO_SERVICE);
switch (audioManager.requestAudioFocus(audioFocus, AudioManager.STREAM_MUSIC,
AudioManager.AUDIOFOCUS_GAIN_TRANSIENT_MAY_DUCK)) {
case AudioManager.AUDIOFOCUS_REQUEST_FAILED:
if (DEBUG) {
MyLog.w(CLS_NAME, "AudioManager duckAudioMedia AUDIOFOCUS_REQUEST_FAILED");
}
break;
case AudioManager.AUDIOFOCUS_REQUEST_GRANTED:
if (DEBUG) {
MyLog.i(CLS_NAME, "AudioManager duckAudioMedia AUDIOFOCUS_REQUEST_GRANTED");
}
break;
default:
if (DEBUG) {
MyLog.i(CLS_NAME, "AudioManager duckAudioMedia AUDIOFOCUS default");
}
break;
}
} catch (final NullPointerException e) {
if (DEBUG) {
MyLog.w(CLS_NAME, "duckAudioMedia: NullPointerException");
e.printStackTrace();
}
} catch (final Exception e) {
if (DEBUG) {
MyLog.w(CLS_NAME, "duckAudioMedia: Exception");
e.printStackTrace();
}
}
}
/**
* Notify the System that any previous condition requiring to duck or pause audio is now complete.
*
* @param ctx the application context
*/
public static void abandonAudioMedia(final Context ctx) {
if (DEBUG) {
MyLog.i(CLS_NAME, "abandonAudioMedia");
}
try {
final AudioManager audioManager = (AudioManager) ctx.getSystemService(Context.AUDIO_SERVICE);
switch (audioManager.abandonAudioFocus(audioFocus)) {
case AudioManager.AUDIOFOCUS_REQUEST_FAILED:
if (DEBUG) {
MyLog.w(CLS_NAME, "AudioManager abandonAudioMedia AUDIOFOCUS_REQUEST_FAILED");
}
break;
case AudioManager.AUDIOFOCUS_REQUEST_GRANTED:
if (DEBUG) {
MyLog.i(CLS_NAME, "AudioManager abandonAudioMedia AUDIOFOCUS_REQUEST_GRANTED");
}
break;
default:
if (DEBUG) {
MyLog.i(CLS_NAME, "AudioManager abandonAudioMedia AUDIOFOCUS default");
}
break;
}
} catch (final NullPointerException e) {
if (DEBUG) {
MyLog.w(CLS_NAME, "abandonAudioMedia: NullPointerException");
e.printStackTrace();
}
} catch (final Exception e) {
if (DEBUG) {
MyLog.w(CLS_NAME, "abandonAudioMedia: Exception");
e.printStackTrace();
}
}
}
您必须删除我的自定义日志记录。
在 TTS 开始时调用 duckAudioMedia
,在语音完成时调用 abandonAudioMedia
。