Compare commits

...

2 Commits

Author SHA1 Message Date
94ce7234aa 🎤 BETTER VOICES - More Natural Quality!
 REGENERATED ALL 20 VOICES:
- Kai: en-US-ChristopherNeural (was GuyNeural)
  → Natural teen voice, less robotic
  → Warm, authentic delivery

- Ana: en-US-AriaNeural (was JennyNeural)
  → Expressive, emotional
  → More natural intonation

- Gronk: en-GB-RyanNeural (KEPT - already good!)

 OLD VOICES BACKED UP:
- Moved to assets/audio/voiceover/_OLD_ROBOTIC/
- Can restore if needed

 VOICE GUIDE CREATED:
- BETTER_VOICE_OPTIONS.md
- Testing recommendations
- Edge-TTS voice comparisons

RESULT: Much more natural sounding intro dialogue! 🎆
2026-01-10 14:31:05 +01:00
6e6f206d87 🔧 FIXES: Main Menu + Faster Transitions!
 FIX 1: INTRO → MAIN MENU
- Changed: Intro now goes to StoryScene (not GameScene)
- Player sees main menu after intro
- Can choose 'New Game' properly

 FIX 2: LESS BLACK GAPS
- Fade-in: 2s → 1s (50% faster!)
- Glitch start: -500ms → -300ms (earlier)
- Frame fade: 100ms → 50ms (faster)
- Photo glitch: 50ms → 30ms (faster)
- RGB flash: 50/100/150ms → 30/60/90ms (faster)
- Final fade: 200ms → 100ms (faster)

RESULT: Much smoother transitions, less black screen!

NEXT: Kai age fix (14 years) + better voices!
2026-01-10 14:29:49 +01:00
42 changed files with 93 additions and 15 deletions

78
BETTER_VOICE_OPTIONS.md Normal file
View File

@@ -0,0 +1,78 @@
# 🎤 BETTER VOICE OPTIONS - Testing Guide
## Current Issue:
Voices sound too robotic/AI-generated
## Solution:
Test multiple Edge-TTS voices to find most natural sounding
---
## 🎙️ VOICE OPTIONS TO TEST
### **KAI (Young Male, 14 years old)**
**Current:** `en-US-GuyNeural` (energetic but robotic)
**Better alternatives:**
1. `en-US-ChristopherNeural` - Young, warm, natural
2. `en-US-EricNeural` - Teen friendly, less robotic
3. `en-US-RogerNeural` - Mature teen voice
4. `en-GB-RyanNeural` - UK teen, authentic
**Best choice:** `en-US-ChristopherNeural` (most natural for teen)
---
### **ANA (Young Female, 14 years old - twin)**
**Current:** `en-US-JennyNeural` (warm but AI-ish)
**Better alternatives:**
1. `en-US-AriaNeural` - Natural, expressive
2. `en-US-SaraNeural` - Youthful, authentic
3. `en-GB-SoniaNeural` - UK accent, warm
4. `en-US-MichelleNeural` - Soft, emotional
**Best choice:** `en-US-AriaNeural` (most expressive/natural)
---
### **GRONK (Deep UK voice)**
**Current:** `en-GB-RyanNeural` (good!)
**Keep or try:**
1. `en-GB-ThomasNeural` - Deeper, gruffer
2. `en-AU-WilliamNeural` - Aussie deep voice
**Best choice:** Keep `en-GB-RyanNeural` (already good!)
---
## 🎯 GENERATE TEST SAMPLES
```bash
cd /Users/davidkotnik/repos/novafarma/assets/audio/voiceover
# Test Kai voices
python3 -m edge_tts --text "It all started with family. With colors. With hope." --voice en-US-ChristopherNeural --write-media test_kai_christopher.mp3
python3 -m edge_tts --text "It all started with family. With colors. With hope." --voice en-US-EricNeural --write-media test_kai_eric.mp3
# Test Ana voices
python3 -m edge_tts --text "We were unstoppable. We were immortal." --voice en-US-AriaNeural --write-media test_ana_aria.mp3
python3 -m edge_tts --text "We were unstoppable. We were immortal." --voice en-US-SaraNeural --write-media test_ana_sara.mp3
```
---
## ✅ FINAL RECOMMENDATION
**Use these voices:**
- **Kai:** `en-US-ChristopherNeural` (natural teen voice)
- **Ana:** `en-US-AriaNeural` (expressive, emotional)
- **Gronk:** `en-GB-RyanNeural` (keep - already good!)
**Regenerate all 21 files with better voices!**

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@@ -212,7 +212,7 @@ class IntroScene extends Phaser.Scene {
// Fade to GameScene
this.cameras.main.fadeOut(500, 0, 0, 0);
this.cameras.main.once('camerafadeoutcomplete', () => {
this.scene.start('GameScene');
this.scene.start('StoryScene'); // Main Menu
});
}
@@ -437,7 +437,7 @@ class IntroScene extends Phaser.Scene {
if (this.ambientAudio) this.ambientAudio.stop();
this.cameras.main.fadeOut(1000, 0, 0, 0);
this.cameras.main.once('camerafadeoutcomplete', () => {
this.scene.start('GameScene');
this.scene.start('StoryScene'); // Main Menu
});
});
}
@@ -524,41 +524,41 @@ class IntroScene extends Phaser.Scene {
photo.setTint(0x66ff66);
}
// 2 SECOND FADE-IN
// FASTER FADE-IN (less black!)
this.tweens.add({
targets: [photo, frame],
alpha: { from: 0, to: 1 },
duration: 2000,
duration: 1000, // Was 2000 - now faster!
ease: 'Power2.easeOut'
});
// GLITCH-OUT transition
this.time.delayedCall(duration - 500, () => {
// GLITCH-OUT transition (earlier start!)
this.time.delayedCall(duration - 300, () => { // Was 500 - now earlier!
if (this.currentPolaroid) {
// Frame fades first
// Frame fades first (faster!)
this.tweens.add({
targets: frame,
alpha: 0,
duration: 100
duration: 50 // Was 100 - now faster!
});
// Photo glitches
// Photo glitches (faster!)
this.tweens.add({
targets: photo,
x: { from: photo.x - 10, to: photo.x + 10 },
duration: 50,
duration: 30, // Was 50 - now faster!
repeat: 5,
yoyo: true,
onComplete: () => {
// RGB flash
// RGB flash (faster!)
photo.setTint(0xff0000);
this.time.delayedCall(50, () => photo.setTint(0x00ff00));
this.time.delayedCall(100, () => photo.setTint(0x0000ff));
this.time.delayedCall(150, () => {
this.time.delayedCall(30, () => photo.setTint(0x00ff00)); // Was 50
this.time.delayedCall(60, () => photo.setTint(0x0000ff)); // Was 100
this.time.delayedCall(90, () => { // Was 150
this.tweens.add({
targets: photo,
alpha: 0,
duration: 200
duration: 100 // Was 200 - faster!
});
});
}