Aplicación Android que convierte texto en audio de multitud simulada. El usuario escribe una frase y la app genera el efecto de decenas (o cientos) de personas diciéndola al mismo tiempo.
CrowdVoiceApp/
├── app/
│ ├── src/main/
│ │ ├── java/com/crowdvoice/app/
│ │ │ ├── MainActivity.kt ← UI + orquestación
│ │ │ ├── TTSManager.kt ← Motor TextToSpeech
│ │ │ ├── CrowdAudioGenerator.kt ← Motor de mezcla de audio
│ │ │ ├── AudioPlayer.kt ← Reproducción con AudioTrack
│ │ │ └── WavUtils.kt ← Lectura/escritura WAV
│ │ ├── res/
│ │ │ ├── layout/activity_main.xml ← Diseño de la pantalla
│ │ │ ├── drawable/ ← Fondos y estilos
│ │ │ └── values/ ← Strings, temas
│ │ └── AndroidManifest.xml
│ └── build.gradle ← Dependencias del módulo
├── build.gradle ← Configuración raíz
├── settings.gradle
└── gradle.properties
| Herramienta | Versión mínima | Descarga |
|---|---|---|
| Android Studio | Hedgehog (2023.1.1) o superior | developer.android.com/studio |
| JDK | 17 | Incluido en Android Studio |
| Android SDK | API 34 (Android 14) | Se instala desde Android Studio |
| Dispositivo / Emulador | Android 7.0+ (API 24) | — |
-
Clona o descarga el proyecto en tu equipo:
git clone https://github.com/tu-usuario/CrowdVoiceApp.git # o descomprime el ZIP descargado -
Abre Android Studio →
File → Open→ selecciona la carpetaCrowdVoiceApp. -
Sincroniza Gradle: Android Studio lo hará automáticamente. Si no, haz clic en
File → Sync Project with Gradle Files. -
Instala el SDK si se te solicita:
- Ve a
Tools → SDK Manager. - Marca Android 14.0 (API 34) y haz clic en
Apply.
- Ve a
-
Genera el APK de debug:
- Menú:
Build → Build Bundle(s) / APK(s) → Build APK(s) - El APK se genera en:
app/build/outputs/apk/debug/app-debug.apk
- Menú:
-
Genera el APK de release (firmado):
- Menú:
Build → Generate Signed Bundle / APK - Sigue el asistente para crear o usar un keystore.
- Menú:
# Entrar al directorio del proyecto
cd CrowdVoiceApp
# macOS / Linux
./gradlew assembleDebug
# Windows
gradlew.bat assembleDebug
# El APK queda en:
# app/build/outputs/apk/debug/app-debug.apk- Conecta tu teléfono por USB.
- Activa Opciones de Desarrollador en tu teléfono:
Ajustes → Acerca del teléfono → Número de compilación(tocar 7 veces).
- Habilita Depuración USB en las Opciones de Desarrollador.
- En Android Studio, selecciona tu dispositivo en el menú desplegable (barra superior).
- Pulsa el botón ▶ Run (o
Shift + F10).
# Verificar que el dispositivo está conectado
adb devices
# Instalar el APK
adb install app/build/outputs/apk/debug/app-debug.apk
# Si ya estaba instalada una versión anterior
adb install -r app/build/outputs/apk/debug/app-debug.apk- Copia el archivo
app-debug.apkal teléfono (por USB, correo, Google Drive…). - En el teléfono, activa "Instalar apps de fuentes desconocidas":
Ajustes → Seguridad → Fuentes desconocidas(Android 7-8)Ajustes → Aplicaciones → Instalar apps desconocidas(Android 9+)
- Abre el APK desde el explorador de archivos y sigue el asistente de instalación.
- Escribe una palabra o frase en el campo de texto (ej: "¡Campeón!").
- Elige el idioma: Español o English.
- Ajusta el slider para seleccionar cuántas voces tendrá la multitud (5–100).
- Pulsa 🎙 GENERAR AUDIO DE MULTITUD.
- La app convierte el texto a voz (TTS) y mezcla N copias con variaciones aleatorias.
- Pulsa ▶ Reproducir para escuchar el resultado.
- Pulsa 💾 Guardar WAV para exportar el audio a
Música/CrowdVoice/.
⚠️ Nota: Dispositivos sin el paquete de voz en español instalado usarán el idioma del sistema por defecto. Para instalar voces adicionales:Ajustes → Accesibilidad → Texto a voz → Motor de voz.
Texto
│
▼
[TTS Engine] ──→ tts_base.wav (voz limpia)
│
┌─────────────┴─────────────┐
│ Para cada voz (1..N): │
│ ─ pitch_factor = rand(0.88..1.12) │
│ ─ amplitude = rand(0.60..1.00) │
│ ─ delay_ms = rand(0..300ms) │
│ ─ resample(base, factor) │
└─────────────┬─────────────┘
│ Suma en buffer Long
▼
[Normalización ÷ (N × 0.65)]
│
▼
crowd_output.wav
Re-muestreo de pitch: Se usa interpolación lineal sobre las muestras PCM. Un factor > 1.0 comprime el audio (más agudo y rápido), un factor < 1.0 lo expande (más grave y lento). Esto simula variaciones naturales de voz entre personas.
Mezcla con acumulador Long: Sumar directamente valores Short causaría desbordamiento. Se usa un LongArray como acumulador y se normaliza al final.
| Problema | Causa probable | Solución |
|---|---|---|
| "Error al inicializar motor de voz" | TTS no instalado | Instala Google Text-to-Speech desde Play Store |
| "Idioma no disponible" | Paquete de voz faltante | Descarga la voz en Ajustes → Accesibilidad → TTS |
| El audio suena distorsionado | Demasiadas voces (100) | Reduce a 20–50 voces |
| APK no se instala | "Fuentes desconocidas" desactivado | Ver instrucciones de instalación manual |
| Build falla con "SDK not found" | SDK no instalado | Tools → SDK Manager → instalar API 34 |
La arquitectura ya tiene los puntos de extensión preparados (marcados con TODO v2 en el código):
- Tipos de público: estadio, niños, multitud grande (enum
AudienceType) - Control de emoción: gritando, normal, susurrando (enum
Emotion) - Aplausos y gritos: generación procedural de sonidos de multitud
- Reverb / eco: simulación de espacio acústico (estadio, sala, etc.)
- Exportar a MP3: compresión del WAV final
- Separación pitch/velocidad: algoritmo PSOLA o Phase Vocoder
- TTS en la nube: voces de mayor calidad via API (Google Cloud TTS, AWS Polly)
- Widget de onda: visualización de la forma de onda del audio generado
MIT License — Libre para uso personal y comercial.