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
- Python 3.8+
- pip (Python package manager)
- 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
- Kunjungi Indonesian TTS Releases
- Download file:
checkpoint.pth
(model file)config.json
(configuration file)
- Buat folder:
storage/app/tts/models/
- 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 announcementardi
: Suara pria formalbudi
: Suara pria ramah
Female Speakers
gadis
: Suara wanita natural, cocok untuk announcementsari
: Suara wanita formalrini
: Suara wanita ramah
Regional Speakers
javanese_*
: Speaker dengan aksen Jawasundanese_*
: Speaker dengan aksen Sunda
Troubleshooting
Common Issues
-
"tts command not found"
# Reinstall TTS pip uninstall TTS pip install TTS
-
"Model files not found"
# Check file permissions ls -la storage/app/tts/models/ chmod 644 storage/app/tts/models/*
-
"Permission denied"
# Fix directory permissions chmod -R 755 storage/app/tts/ chown -R www-data:www-data storage/app/tts/
-
"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
- File Permissions: Pastikan model files tidak dapat diakses publik
- Input Validation: Validasi input text untuk mencegah injection
- Rate Limiting: Batasi jumlah request TTS per menit
- 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:
- Backup existing TTS configuration
- Install Indonesian TTS (ikuti guide di atas)
- 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); }
- Test thoroughly dengan berbagai nomor antrian
- Monitor performance dan error rates
Support
Untuk bantuan lebih lanjut:
- Documentation: Indonesian TTS GitHub
- Issues: Buat issue di repository project ini
- 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.