introduce delay and trigger shift capability
This commit is contained in:
parent
63f5851721
commit
349e03a43f
3 changed files with 28 additions and 10 deletions
|
@ -171,6 +171,8 @@ public class VoiceRouter {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private double btScoDelayDistance = 0;
|
||||||
|
|
||||||
public boolean isDistanceLess(float currentSpeed, double dist, double etalon, float defSpeed){
|
public boolean isDistanceLess(float currentSpeed, double dist, double etalon, float defSpeed){
|
||||||
if(defSpeed <= 0) {
|
if(defSpeed <= 0) {
|
||||||
defSpeed = DEFAULT_SPEED;
|
defSpeed = DEFAULT_SPEED;
|
||||||
|
@ -178,7 +180,13 @@ public class VoiceRouter {
|
||||||
if(currentSpeed <= 0) {
|
if(currentSpeed <= 0) {
|
||||||
currentSpeed = DEFAULT_SPEED;
|
currentSpeed = DEFAULT_SPEED;
|
||||||
}
|
}
|
||||||
if(dist < etalon || ((dist / currentSpeed) < (etalon / defSpeed))){
|
|
||||||
|
// Trigger close prompts earlier to allow for BT SCO connection delay
|
||||||
|
if (settings.AUDIO_STREAM_GUIDANCE.get() == 0) {
|
||||||
|
btScoDelayDistance = currentSpeed * (double) AbstractPrologCommandPlayer.BT_SCO_DELAY / 1000;
|
||||||
|
}
|
||||||
|
|
||||||
|
if((dist < etalon + btScoDelayDistance) || ((dist / currentSpeed) < ((etalon + btScoDelayDistance) / defSpeed))){
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
|
@ -480,9 +488,9 @@ public class VoiceRouter {
|
||||||
if (repeat || dist >= TURN_IN_DISTANCE_END) {
|
if (repeat || dist >= TURN_IN_DISTANCE_END) {
|
||||||
if ((isDistanceLess(speed, nextNextInfo.distanceTo, TURN_DISTANCE, 0f) || nextNextInfo.distanceTo < TURN_IN_DISTANCE_END) &&
|
if ((isDistanceLess(speed, nextNextInfo.distanceTo, TURN_DISTANCE, 0f) || nextNextInfo.distanceTo < TURN_IN_DISTANCE_END) &&
|
||||||
nextNextInfo != null) {
|
nextNextInfo != null) {
|
||||||
playMakeTurnIn(currentSegment, next, dist, nextNextInfo.directionInfo);
|
playMakeTurnIn(currentSegment, next, dist - (int) btScoDelayDistance, nextNextInfo.directionInfo);
|
||||||
} else {
|
} else {
|
||||||
playMakeTurnIn(currentSegment, next, dist, null);
|
playMakeTurnIn(currentSegment, next, dist - (int) btScoDelayDistance, null);
|
||||||
}
|
}
|
||||||
playAndArriveAtDestination(repeat, nextInfo, currentSegment);
|
playAndArriveAtDestination(repeat, nextInfo, currentSegment);
|
||||||
}
|
}
|
||||||
|
|
|
@ -283,7 +283,7 @@ public abstract class AbstractPrologCommandPlayer implements CommandPlayer, Stat
|
||||||
}
|
}
|
||||||
// If AudioManager.STREAM_VOICE_CALL try using BT SCO:
|
// If AudioManager.STREAM_VOICE_CALL try using BT SCO:
|
||||||
if (ctx.getSettings().AUDIO_STREAM_GUIDANCE.get() == 0) {
|
if (ctx.getSettings().AUDIO_STREAM_GUIDANCE.get() == 0) {
|
||||||
startBtSco();
|
startBtSco(ctx);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -299,7 +299,7 @@ public abstract class AbstractPrologCommandPlayer implements CommandPlayer, Stat
|
||||||
protected void abandonAudioFocus() {
|
protected void abandonAudioFocus() {
|
||||||
log.debug("abandonAudioFocus");
|
log.debug("abandonAudioFocus");
|
||||||
if ((ctx.getSettings().AUDIO_STREAM_GUIDANCE.get() == 0) || (btScoStatus == true)) {
|
if ((ctx.getSettings().AUDIO_STREAM_GUIDANCE.get() == 0) || (btScoStatus == true)) {
|
||||||
stopBtSco();
|
stopBtSco(ctx);
|
||||||
}
|
}
|
||||||
if (mAudioFocusHelper != null) {
|
if (mAudioFocusHelper != null) {
|
||||||
mAudioFocusHelper.abandonFocus(ctx, streamType);
|
mAudioFocusHelper.abandonFocus(ctx, streamType);
|
||||||
|
@ -311,11 +311,11 @@ public abstract class AbstractPrologCommandPlayer implements CommandPlayer, Stat
|
||||||
|
|
||||||
public static final int BT_SCO_DELAY = 1500;
|
public static final int BT_SCO_DELAY = 1500;
|
||||||
|
|
||||||
private boolean startBtSco() {
|
private boolean startBtSco(Context context) {
|
||||||
// Establish a low quality Synchronous Connection-Oriented link to BT to e.g. interrupt a car stereo
|
// Establish a low quality Synchronous Connection-Oriented link to BT to e.g. interrupt a car stereo
|
||||||
// http://stackoverflow.com/questions/2144694/routing-audio-to-bluetooth-headset-non-a2dp-on-android
|
// http://stackoverflow.com/questions/2144694/routing-audio-to-bluetooth-headset-non-a2dp-on-android
|
||||||
try {
|
try {
|
||||||
AudioManager mAudioManager = (AudioManager) ctx.getSystemService(Context.AUDIO_SERVICE);
|
AudioManager mAudioManager = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE);
|
||||||
//if (mAudioManager == null || !mAudioManager.isBluetoothScoAvailableOffCall()) {
|
//if (mAudioManager == null || !mAudioManager.isBluetoothScoAvailableOffCall()) {
|
||||||
if (mAudioManager == null) {
|
if (mAudioManager == null) {
|
||||||
return false;
|
return false;
|
||||||
|
@ -333,9 +333,9 @@ public abstract class AbstractPrologCommandPlayer implements CommandPlayer, Stat
|
||||||
return btScoStatus;
|
return btScoStatus;
|
||||||
}
|
}
|
||||||
|
|
||||||
private boolean stopBtSco() {
|
private boolean stopBtSco(Context context) {
|
||||||
btScoStatus = false;
|
btScoStatus = false;
|
||||||
AudioManager mAudioManager = (AudioManager) ctx.getSystemService(Context.AUDIO_SERVICE);
|
AudioManager mAudioManager = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE);
|
||||||
if (mAudioManager == null) {
|
if (mAudioManager == null) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
|
@ -108,6 +108,16 @@ public class TTSCommandPlayerImpl extends AbstractPrologCommandPlayer {
|
||||||
if (ttsRequests++ == 0)
|
if (ttsRequests++ == 0)
|
||||||
requestAudioFocus();
|
requestAudioFocus();
|
||||||
log.debug("ttsRequests="+ttsRequests);
|
log.debug("ttsRequests="+ttsRequests);
|
||||||
|
// Delay prompts to allow BT SCO connection being established
|
||||||
|
if (ctx.getSettings().AUDIO_STREAM_GUIDANCE.get() == 0) {
|
||||||
|
ttsRequests++;
|
||||||
|
if (android.os.Build.VERSION.SDK_INT <= 21) {
|
||||||
|
params.put(TextToSpeech.Engine.KEY_PARAM_UTTERANCE_ID,""+System.currentTimeMillis());
|
||||||
|
mTts.playSilence(BT_SCO_DELAY, TextToSpeech.QUEUE_ADD, params);
|
||||||
|
} else {
|
||||||
|
mTts.playSilentUtterance(BT_SCO_DELAY, TextToSpeech.QUEUE_ADD, ""+System.currentTimeMillis());
|
||||||
|
}
|
||||||
|
}
|
||||||
params.put(TextToSpeech.Engine.KEY_PARAM_UTTERANCE_ID,""+System.currentTimeMillis());
|
params.put(TextToSpeech.Engine.KEY_PARAM_UTTERANCE_ID,""+System.currentTimeMillis());
|
||||||
mTts.speak(bld.toString(), TextToSpeech.QUEUE_ADD, params);
|
mTts.speak(bld.toString(), TextToSpeech.QUEUE_ADD, params);
|
||||||
// Audio focus will be released when onUtteranceCompleted() completed is called by the TTS engine.
|
// Audio focus will be released when onUtteranceCompleted() completed is called by the TTS engine.
|
||||||
|
|
Loading…
Reference in a new issue