feat: TTS with audio ducking
Some checks failed
TrafficCue CI / check (push) Has been cancelled
TrafficCue CI / build (push) Has been cancelled

This commit is contained in:
2025-06-25 13:21:31 +02:00
parent a2a8255ebf
commit dc4679f072
12 changed files with 374 additions and 23 deletions

View File

@@ -9,7 +9,8 @@ android {
apply from: "../capacitor-cordova-android-plugins/cordova.variables.gradle"
dependencies {
implementation project(':capacitor-community-native-audio')
implementation project(':capacitor-community-text-to-speech')
}

View File

@@ -0,0 +1,55 @@
package de.trafficcue.trafficcue;
import android.content.Context;
import android.media.AudioFocusRequest;
import android.media.AudioManager;
import android.os.Build;
import androidx.annotation.RequiresApi;
import com.getcapacitor.JSObject;
import com.getcapacitor.Plugin;
import com.getcapacitor.PluginCall;
import com.getcapacitor.PluginMethod;
import com.getcapacitor.annotation.CapacitorPlugin;
@CapacitorPlugin(name = "Duck")
public class DuckPlugin extends Plugin {
private AudioFocusRequest focusRequest;
private AudioManager audioManager;
@Override
public void load() {
super.load();
audioManager = (AudioManager) getBridge().getActivity().getSystemService(Context.AUDIO_SERVICE);
}
@RequiresApi(api = Build.VERSION_CODES.P)
@PluginMethod()
public void duck(PluginCall call) {
// String value = call.getString("value");
//
// JSObject ret = new JSObject();
// ret.put("value", value);
// call.resolve(ret);
focusRequest = new AudioFocusRequest.Builder(AudioManager.AUDIOFOCUS_GAIN_TRANSIENT_MAY_DUCK)
.setAcceptsDelayedFocusGain(false)
.setWillPauseWhenDucked(false)
.setForceDucking(true)
.build();
audioManager.requestAudioFocus(focusRequest);
call.resolve();
}
@RequiresApi(api = Build.VERSION_CODES.O)
@PluginMethod()
public void unduck(PluginCall call) {
audioManager.abandonAudioFocusRequest(focusRequest);
call.resolve();
}
}

View File

@@ -1,5 +1,14 @@
package de.trafficcue.trafficcue;
import android.os.Bundle;
import com.getcapacitor.BridgeActivity;
public class MainActivity extends BridgeActivity {}
public class MainActivity extends BridgeActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
registerPlugin(DuckPlugin.class);
super.onCreate(savedInstanceState);
}
}