MIF_E31222851/README_INDONESIAN_TTS.md

7.6 KiB

Indonesian TTS Integration Guide

Overview

Repository ini mengintegrasikan Indonesian TTS yang menggunakan Coqui TTS untuk menghasilkan suara Indonesia yang lebih natural dan akurat. Indonesian TTS ini cocok untuk sistem antrian Puskesmas karena:

  • Suara Natural: Menggunakan model yang dilatih khusus untuk bahasa Indonesia
  • Pengucapan Akurat: Menggunakan g2p-id untuk konversi grapheme ke phoneme
  • Multiple Speakers: Tersedia 80+ speaker dengan berbagai karakteristik suara
  • Offline Capability: Dapat berjalan tanpa internet setelah model diinstall

Fitur Utama

1. Indonesian Pronunciation

  • Konversi otomatis nomor antrian ke pengucapan Indonesia
  • Contoh: "U5" → "U Lima", "A10" → "A Sepuluh"
  • Mendukung angka 0-100 dengan pengucapan yang benar

2. Multiple TTS Options

  • Indonesian TTS (Prioritas): Menggunakan model Coqui TTS Indonesia
  • Google TTS (Fallback): Menggunakan Google Cloud TTS API
  • Browser TTS (Fallback): Menggunakan Web Speech API browser

3. Audio Sequence Management

  • Urutan audio: Attention Sound → TTS → Attention Sound
  • Queue management untuk mencegah overlap
  • Cross-page communication untuk admin → display

Instalasi

Prerequisites

  1. Python 3.8+
  2. pip (Python package manager)
  3. Laravel 8+ dengan PHP 8.0+

Step 1: Install Coqui TTS

# Install Coqui TTS
pip install TTS

# Verify installation
tts --version

Step 2: Download Model Files

  1. Kunjungi Indonesian TTS Releases
  2. Download file:
    • checkpoint.pth (model file)
    • config.json (configuration file)
  3. Buat folder: storage/app/tts/models/
  4. Simpan file di folder tersebut

Step 3: Install g2p-id (Optional)

# Install g2p-id for better pronunciation
pip install g2p-id

# Verify installation
g2p-id --help

Step 4: Test Installation

# Test TTS with sample text
tts --text "Halo dunia" \
    --model_path storage/app/tts/models/checkpoint.pth \
    --config_path storage/app/tts/models/config.json \
    --speaker_idx wibowo \
    --out_path test.wav

Konfigurasi

Environment Variables

Tambahkan ke file .env:

# Indonesian TTS Configuration
INDONESIAN_TTS_ENABLED=true
INDONESIAN_TTS_MODEL_PATH=storage/app/tts/models/checkpoint.pth
INDONESIAN_TTS_CONFIG_PATH=storage/app/tts/models/config.json
INDONESIAN_TTS_DEFAULT_SPEAKER=wibowo

# Google TTS (Fallback)
GOOGLE_TTS_API_KEY=your_google_tts_api_key

File Structure

storage/
├── app/
│   └── tts/
│       ├── models/
│       │   ├── checkpoint.pth
│       │   └── config.json
│       └── g2p-id
└── public/
    └── audio/
        └── queue_calls/
            └── indonesian_tts_*.wav

Penggunaan

1. Admin Panel

Akses halaman Indonesian TTS Settings:

/admin/indonesian-tts

Fitur yang tersedia:

  • Status monitoring (Indonesian TTS, Coqui TTS, Model Files, Speakers)
  • Test TTS dengan text custom
  • Installation instructions
  • Download model files

2. API Endpoints

// Generate TTS audio
POST /admin/indonesian-tts/generate
{
    "poli_name": "Poli Umum",
    "queue_number": "U5"
}

// Create complete audio sequence
POST /admin/indonesian-tts/audio-sequence
{
    "poli_name": "Poli Umum", 
    "queue_number": "U5"
}

// Check status
GET /admin/indonesian-tts/status

// Test TTS
POST /admin/indonesian-tts/test
{
    "text": "Nomor antrian U Lima, silakan menuju ke Poli Umum"
}

3. Service Usage

use App\Services\IndonesianTTSService;

$ttsService = new IndonesianTTSService();

// Generate TTS
$result = $ttsService->generateQueueCall('Poli Umum', 'U5');

// Create audio sequence
$sequence = $ttsService->createCompleteAudioSequence('Poli Umum', 'U5');

// Check status
$isAvailable = $ttsService->isIndonesianTTSAvailable();
$speakers = $ttsService->getAvailableSpeakers();

Available Speakers

Model Indonesian TTS menyediakan 80+ speaker dengan karakteristik berbeda:

Male Speakers

  • wibowo: Suara pria natural, cocok untuk announcement
  • ardi: Suara pria formal
  • budi: Suara pria ramah

Female Speakers

  • gadis: Suara wanita natural, cocok untuk announcement
  • sari: Suara wanita formal
  • rini: Suara wanita ramah

Regional Speakers

  • javanese_*: Speaker dengan aksen Jawa
  • sundanese_*: Speaker dengan aksen Sunda

Troubleshooting

Common Issues

  1. "tts command not found"

    # Reinstall TTS
    pip uninstall TTS
    pip install TTS
    
  2. "Model files not found"

    # Check file permissions
    ls -la storage/app/tts/models/
    chmod 644 storage/app/tts/models/*
    
  3. "Permission denied"

    # Fix directory permissions
    chmod -R 755 storage/app/tts/
    chown -R www-data:www-data storage/app/tts/
    
  4. "Audio generation failed"

    # Check Python environment
    which python
    which tts
    
    # Test with simple command
    tts --text "test" --model_path storage/app/tts/models/checkpoint.pth --config_path storage/app/tts/models/config.json --out_path test.wav
    

Debug Mode

Aktifkan debug mode di .env:

APP_DEBUG=true
LOG_LEVEL=debug

Cek log Laravel:

tail -f storage/logs/laravel.log

Performance Optimization

1. Model Caching

// Cache model loading
$ttsService = app(IndonesianTTSService::class);

2. Audio File Management

# Clean old audio files (older than 7 days)
find storage/app/public/audio/queue_calls/ -name "*.wav" -mtime +7 -delete

3. Memory Management

// Limit concurrent TTS processes
$maxProcesses = 3;

Security Considerations

  1. File Permissions: Pastikan model files tidak dapat diakses publik
  2. Input Validation: Validasi input text untuk mencegah injection
  3. Rate Limiting: Batasi jumlah request TTS per menit
  4. Audio Sanitization: Bersihkan nama file audio

Monitoring

Health Checks

// Check TTS health
$health = [
    'indonesian_tts' => $ttsService->isIndonesianTTSAvailable(),
    'coqui_tts' => $ttsService->isCoquiTTSInstalled(),
    'model_files' => file_exists($modelPath),
    'speakers' => count($ttsService->getAvailableSpeakers())
];

Metrics

  • TTS generation success rate
  • Audio file size and duration
  • Speaker usage statistics
  • Error rates and types

Migration from Google TTS

Jika ingin migrasi dari Google TTS ke Indonesian TTS:

  1. Backup existing TTS configuration
  2. Install Indonesian TTS (ikuti guide di atas)
  3. Update service configuration:
    // In TTSService.php
    public function generateQueueCall($poliName, $queueNumber)
    {
        // Try Indonesian TTS first
        $indonesianTTS = new IndonesianTTSService();
        if ($indonesianTTS->isIndonesianTTSAvailable()) {
            return $indonesianTTS->generateQueueCall($poliName, $queueNumber);
        }
    
        // Fallback to Google TTS
        return parent::generateQueueCall($poliName, $queueNumber);
    }
    
  4. Test thoroughly dengan berbagai nomor antrian
  5. Monitor performance dan error rates

Support

Untuk bantuan lebih lanjut:

  1. Documentation: Indonesian TTS GitHub
  2. Issues: Buat issue di repository project ini
  3. Community: Coqui TTS Discord/Forum

License

Indonesian TTS model memiliki lisensi terpisah. Pastikan untuk membaca dan mematuhi lisensi yang berlaku sebelum menggunakan untuk tujuan komersial.


Note: Indonesian TTS memerlukan resource yang cukup (RAM, CPU) untuk berjalan optimal. Pastikan server memiliki spesifikasi yang memadai.