Compare commits
3 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 1a982c0d45 | |||
| dfba5ceb1f | |||
| 1a6f633836 |
@@ -510,10 +510,30 @@ Der Update-Flow:
|
|||||||
App (Mikrofon) → AAC/MP4 Aufnahme → Base64 → RVS → Bridge
|
App (Mikrofon) → AAC/MP4 Aufnahme → Base64 → RVS → Bridge
|
||||||
Bridge: FFmpeg (16kHz PCM) → Whisper STT → Text → aria-core
|
Bridge: FFmpeg (16kHz PCM) → Whisper STT → Text → aria-core
|
||||||
Bridge: STT-Ergebnis → RVS → App (Placeholder wird durch transkribierten Text ersetzt)
|
Bridge: STT-Ergebnis → RVS → App (Placeholder wird durch transkribierten Text ersetzt)
|
||||||
aria-core → Antwort → Bridge → XTTS (Gaming-PC) → PCM-Stream → RVS → App
|
aria-core → Antwort → Bridge → F5-TTS (Gaming-PC) → PCM-Stream → RVS → App
|
||||||
App: AudioTrack MODE_STREAM (nahtlos), Cache als WAV pro Message
|
App: AudioTrack MODE_STREAM (nahtlos), Cache als WAV pro Message
|
||||||
```
|
```
|
||||||
|
|
||||||
|
### Audio-Verhalten in der App
|
||||||
|
|
||||||
|
| Phase | Andere App (Spotify) | ARIA-Mikro |
|
||||||
|
|------------------------------|----------------------|-------------------------|
|
||||||
|
| Idle / Ohr aus | spielt frei | aus |
|
||||||
|
| Wake-Word lauscht (armed) | spielt frei | passiv (openWakeWord) |
|
||||||
|
| User-Aufnahme laeuft | pausiert (EXCLUSIVE) | Recording |
|
||||||
|
| Aufnahme zu Ende | resumed | aus |
|
||||||
|
| ARIA denkt/schreibt (~20s) | spielt frei | aus |
|
||||||
|
| TTS startet | pausiert (DUCK) | aus (oder barge) |
|
||||||
|
| TTS spielt (auch GPU-Pausen) | bleibt pausiert | barge wenn Wake-Word |
|
||||||
|
| TTS zu Ende | nach 800ms resumed | (Conversation-Window) |
|
||||||
|
| Eingehender Anruf (auch VoIP)| — | Mikro pausiert |
|
||||||
|
| Anruf vorbei | — | Mikro wieder armed |
|
||||||
|
|
||||||
|
Mechanismen: Underrun-Schutz im PcmStreamPlayer (Stille-Fill in Render-
|
||||||
|
Pausen), Conversation-Focus bei Wake-Word, Foreground-Service mit
|
||||||
|
mediaPlayback|microphone, Anruf-Erkennung ueber TelephonyManager +
|
||||||
|
AudioFocus-Loss-Listener mit Polling-Fallback (VoIP).
|
||||||
|
|
||||||
### Datei-Pipeline (Bilder & Anhaenge)
|
### Datei-Pipeline (Bilder & Anhaenge)
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|||||||
@@ -79,8 +79,8 @@ android {
|
|||||||
applicationId "com.ariacockpit"
|
applicationId "com.ariacockpit"
|
||||||
minSdkVersion rootProject.ext.minSdkVersion
|
minSdkVersion rootProject.ext.minSdkVersion
|
||||||
targetSdkVersion rootProject.ext.targetSdkVersion
|
targetSdkVersion rootProject.ext.targetSdkVersion
|
||||||
versionCode 804
|
versionCode 805
|
||||||
versionName "0.0.8.4"
|
versionName "0.0.8.5"
|
||||||
// Fallback fuer Libraries mit Product Flavors
|
// Fallback fuer Libraries mit Product Flavors
|
||||||
missingDimensionStrategy 'react-native-camera', 'general'
|
missingDimensionStrategy 'react-native-camera', 'general'
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "aria-cockpit",
|
"name": "aria-cockpit",
|
||||||
"version": "0.0.8.4",
|
"version": "0.0.8.5",
|
||||||
"private": true,
|
"private": true,
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"android": "react-native run-android",
|
"android": "react-native run-android",
|
||||||
|
|||||||
@@ -495,13 +495,8 @@ const ChatScreen: React.FC = () => {
|
|||||||
const activity = (message.payload.activity as string) || 'idle';
|
const activity = (message.payload.activity as string) || 'idle';
|
||||||
const tool = (message.payload.tool as string) || '';
|
const tool = (message.payload.tool as string) || '';
|
||||||
setAgentActivity({ activity, tool });
|
setAgentActivity({ activity, tool });
|
||||||
// Solange ARIA arbeitet (thinking/tool/responding) den Conversation-
|
// Spotify darf waehrend "ARIA denkt/schreibt" weiterspielen — pausiert
|
||||||
// Focus halten — sonst spielt Spotify in der ~20s-Verarbeitungspause
|
// nur wenn TTS startet (dann acquired _firePlaybackStarted den Focus).
|
||||||
// zwischen User-Aufnahme-Ende und TTS-Start wieder. Bei 'idle' wird
|
|
||||||
// der Focus nur dann released wenn auch kein TTS mehr aktiv ist.
|
|
||||||
if (activity !== 'idle') {
|
|
||||||
audioService.acquireConversationFocus();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Voice-Config aus Diagnostic — setzt die lokale App-Stimme auf den
|
// Voice-Config aus Diagnostic — setzt die lokale App-Stimme auf den
|
||||||
@@ -665,10 +660,6 @@ const ChatScreen: React.FC = () => {
|
|||||||
});
|
});
|
||||||
const unsubTtsEnd = audioService.onPlaybackFinished(() => {
|
const unsubTtsEnd = audioService.onPlaybackFinished(() => {
|
||||||
releaseBackgroundAudio('tts').catch(() => {});
|
releaseBackgroundAudio('tts').catch(() => {});
|
||||||
// ARIAs Antwort komplett vorgelesen → Conversation-Focus freigeben damit
|
|
||||||
// Spotify wieder darf. Vorher (waehrend agentActivity != idle) hat das
|
|
||||||
// acquireConversationFocus den Focus durchgehend gehalten.
|
|
||||||
audioService.releaseConversationFocus();
|
|
||||||
// Vor naechster Aufnahme: barge-listening aus damit der AudioRecorder
|
// Vor naechster Aufnahme: barge-listening aus damit der AudioRecorder
|
||||||
// das Mikro greifen kann.
|
// das Mikro greifen kann.
|
||||||
wakeWordService.stopBargeListening().catch(() => {});
|
wakeWordService.stopBargeListening().catch(() => {});
|
||||||
@@ -818,9 +809,6 @@ const ChatScreen: React.FC = () => {
|
|||||||
const cancelRequest = useCallback(() => {
|
const cancelRequest = useCallback(() => {
|
||||||
setAgentActivity({ activity: 'idle', tool: '' });
|
setAgentActivity({ activity: 'idle', tool: '' });
|
||||||
rvs.send('cancel_request' as any, {});
|
rvs.send('cancel_request' as any, {});
|
||||||
// Conversation-Focus freigeben — es kommt keine TTS-Antwort mehr,
|
|
||||||
// sonst bliebe Spotify ewig pausiert.
|
|
||||||
audioService.releaseConversationFocus();
|
|
||||||
}, []);
|
}, []);
|
||||||
|
|
||||||
// Barge-In: wenn der User waehrend ARIA arbeitet/spricht eine neue Sprach-
|
// Barge-In: wenn der User waehrend ARIA arbeitet/spricht eine neue Sprach-
|
||||||
|
|||||||
@@ -1,5 +1,38 @@
|
|||||||
# ARIA Issues & Features
|
# ARIA Issues & Features
|
||||||
|
|
||||||
|
## Audio-Verhalten in der App
|
||||||
|
|
||||||
|
So sollte die App in den verschiedenen Phasen mit fremden Audio-Apps
|
||||||
|
(Spotify, YouTube, Podcasts etc.) und dem eigenen Mikro umgehen.
|
||||||
|
Wenn was anders ist, ist's ein Bug.
|
||||||
|
|
||||||
|
| Phase | Andere App (Spotify) | ARIA-Mikro | Hintergrund-Service |
|
||||||
|
|------------------------------|----------------------|---------------------|---------------------|
|
||||||
|
| Idle / Ohr aus | spielt frei | aus | aus |
|
||||||
|
| Wake-Word lauscht (armed) | spielt frei | passiv (openWakeWord) | aktiv ('wake') |
|
||||||
|
| User-Aufnahme laeuft | pausiert (EXCLUSIVE) | Recording | aktiv ('rec') |
|
||||||
|
| Aufnahme zu Ende | resumed | aus | (rec released) |
|
||||||
|
| ARIA denkt/schreibt (~20s) | spielt frei | aus | (kein Slot) |
|
||||||
|
| TTS startet | pausiert (DUCK) | aus (oder barge) | aktiv ('tts') |
|
||||||
|
| TTS spielt (auch GPU-Pausen) | bleibt pausiert | barge wenn Wake-Word| aktiv |
|
||||||
|
| TTS zu Ende | nach 800ms resumed | (Conversation-Window)| (tts released) |
|
||||||
|
| Eingehender Anruf (auch VoIP)| — | Mikro pausiert | aus |
|
||||||
|
| Anruf vorbei | — | Mikro wieder armed | aktiv ('wake') |
|
||||||
|
|
||||||
|
Wichtige Mechanismen:
|
||||||
|
- **Underrun-Schutz** im PcmStreamPlayer fuettert Stille rein wenn die
|
||||||
|
Bridge in Render-Pausen liefert — Spotify bleibt durchgehend pausiert,
|
||||||
|
auch zwischen den Saetzen einer langen Antwort.
|
||||||
|
- **Conversation-Focus** (nur bei Wake-Word 'conversing') haelt den
|
||||||
|
AudioFocus dauerhaft. Bei reinem Tap-to-Talk oder Text-Chat greift's
|
||||||
|
nicht — Spotify darf in der Denk-Phase ruhig weiterspielen.
|
||||||
|
- **Foreground-Service** (mediaPlayback|microphone) haelt App-Prozess
|
||||||
|
am Leben damit TTS/Mikro/Wake-Word auch bei minimierter App weiter-
|
||||||
|
laufen. Notification zeigt aktuellen Status ("ARIA spricht/hoert
|
||||||
|
zu/bereit").
|
||||||
|
- **Anruf-Erkennung** ueber TelephonyManager (klassisch) + AudioFocus-
|
||||||
|
Loss-Listener mit Polling-Fallback (VoIP wie WhatsApp/Signal/Discord).
|
||||||
|
|
||||||
## Erledigt
|
## Erledigt
|
||||||
|
|
||||||
### Bugs / Fixes
|
### Bugs / Fixes
|
||||||
|
|||||||
Reference in New Issue
Block a user