🎹 AI Piano en tu iPhone: autocompleta música en tiempo real sin conexión
Introducción
¿Alguna vez has querido que tu iPhone termine la melodía que estás improvisando antes de que termines de tocar la última tecla? Con el nuevo modelo de 125 M de parámetros eso ya es posible: genera ≈ 108 notas por segundo directamente en el iPhone 15, sin necesidad de internet.
Este artículo te muestra, paso a paso, cómo funciona la tecnología, qué puedes hacer con ella y, lo más importante, cómo probarla hoy mismo con ejemplos de código listos para copiar.
1. ¿Qué es el modelo de 125 M y por qué cabe en tu móvil?
| Característica | Modelo de 125 M | MuseNet (1 B) | MusicLM (varios cientos de M) |
|---|---|---|---|
| Parámetros | 125 M | 1 000 M | 300‑600 M |
| Latencia en móvil | < 30 ms | > 500 ms (cloud) | > 200 ms (cloud) |
| Consumo de batería | ≈ 3 % h⁻¹ | N/A | N/A |
| Necesita conexión | No | Sí (servidor) | Sí (servidor) |
El truco está en tres optimizaciones clave:
- Cuantización a 8 bits – reduce el tamaño del modelo sin perder calidad audible.
- Atención local – solo mira los últimos 64 timesteps, evitando la complejidad O(n²) de los Transformers clásicos.
- Neural Engine (ANE) de Apple – ejecuta operaciones vectoriales en paralelo, procesando bloques de 64 timesteps en una sola pasada.
2. Primeros pasos: instala y ejecuta la demo
2.1 Requisitos
| Requisito | Versión mínima |
|---|---|
| iOS | 17.0 |
| iPhone | 13 o superior (con ANE) |
| Espacio libre | 200 MB |
2.2 Código de ejemplo (Swift)
import UIKit
import CoreML
import AVFoundation
class PianoViewController: UIViewController {
// Carga del modelo cuantizado (archivo .mlmodelc incluido en el bundle)
private lazy var musicModel: MLModel = {
let config = MLModelConfiguration()
config.computeUnits = .all // usa CPU + ANE
return try! MusicGenerator(configuration: config).model
}()
// Motor de audio para reproducir notas generadas
private let synth = AVAudioEngine()
private let sampler = AVAudioUnitSampler()
override func viewDidLoad() {
super.viewDidLoad()
setupAudio()
}
private func setupAudio() {
synth.attach(sampler)
synth.connect(sampler, to: synth.mainMixerNode, format: nil)
try? synth.start()
}
// Llamada cada vez que el usuario toca la pantalla
func userDidPlay(note: UInt8, velocity: UInt8) {
// 1. Enviamos la nota al modelo
let input = MusicGeneratorInput(note: note, velocity: velocity)
guard let output = try? musicModel.prediction(from: input) as? MusicGeneratorOutput else { return }
// 2. Reproducimos la nota del modelo (output.nextNote)
playMidi(note: output.nextNote, velocity: output.nextVelocity)
}
private func playMidi(note: UInt8, velocity: UInt8) {
try? sampler.startNote(note, withVelocity: velocity, onChannel: 0)
}
}
Qué hace el fragmento
-
Carga el modelo
MusicGenerator.mlmodelcoptimizado para ANE. -
Inicializa un sintetizador simple (
AVAudioUnitSampler). - Cada toque del usuario se envía al modelo y la respuesta (
nextNote) se reproduce inmediatamente, logrando una latencia inferior a 30 ms.
2.3 Ejecuta la demo
- Clona el repositorio:
git clone https://github.com/tuusuario/ai-piano-demo.git
cd ai-piano-demo
open AI-Piano.xcodeproj
- Selecciona tu iPhone 15 como dispositivo y pulsa Run.
- Toca la pantalla y observa cómo la app sugiere la siguiente nota en tiempo real.
3. Personaliza el modelo con tu propio estilo
3.1 Fine‑tuning on‑device (máx. 500 frases)
let trainer = OnDeviceTrainer(model: musicModel)
let dataset = try! MusicDataset.load(from: "mySamples/")
trainer.fineTune(dataset: dataset, epochs: 3) { progress in
print("Fine‑tuning: \(Int(progress*100)) %")
}
Pasos:
- Graba hasta 2 minutos de tus improvisaciones (formato WAV, 44.1 kHz).
-
Arrástralas a la carpeta
mySamples/dentro de la app. - Ejecuta el código anterior; el proceso tarda entre 5 y 15 min según la potencia del ANE.
3.2 Exporta tus composiciones
let exporter = MidiExporter()
let midiData = exporter.convert(notes: generatedSequence)
try midiData.write(to: FileManager.default.urls(for: .documentDirectory,
in: .userDomainMask)[0]
.appendingPathComponent("miCancion.mid"))
Ahora puedes abrir el archivo en GarageBand, Logic o cualquier DAW.
4. Casos de uso prácticos
| Caso | Cómo se aprovecha la IA | Beneficio concreto |
|---|---|---|
| Composición rápida | Toca una frase y deja que la IA complete el resto. | Reduce el tiempo de escritura de una canción de 30 min a < 5 min. |
| Aprendizaje de improvisación | La IA sugiere notas que siguen tu escala y ritmo. | Los estudiantes escuchan en tiempo real qué “podría” sonar bien. |
| Bocetos para producción | Genera líneas de bajo o acordes mientras grabas la melodía principal. | Evita sesiones largas de prueba‑error en el DAW. |
| Accesibilidad | Personas con limitaciones motoras pueden tocar menos notas y la IA completa la pieza. | Permite crear música completa con movimientos mínimos. |
5. Impacto en la industria musical
- Descentralización de la producción – Ya no es necesario un estudio con GPU potente; cualquier iPhone 15 puede generar arreglos profesionales.
- Nuevos modelos de negocio – Apps que venden “packs de estilo” (Jazz, Lo‑Fi, EDM) para fine‑tuning on‑device.
- Derechos de autor – La generación local complica la atribución tradicional; los creadores deben declarar el uso de IA en sus metadatos.
6. Guía rápida para lanzar tu propia app de AI Piano
| Paso | Acción | Herramienta |
|---|---|---|
| 1 | Obtener el modelo | Descarga MusicGenerator.mlmodelc desde el repositorio oficial. |
| 2 | Integrar en Xcode | Arrastra el .mlmodelc al proyecto y marca “Allow on‑device only”. |
| 3 | Configurar ANE |
MLModelConfiguration.computeUnits = .all. |
| 4 | Crear UI de teclado | Usa UIButton o SwiftUI Canvas para dibujar teclas. |
| 5 | Implementar el pipeline | Ver código de la sección 2.2. |
| 6 | Añadir fine‑tuning | Incluye OnDeviceTrainer y una pantalla de importación de audio. |
| 7 | Exportar a MIDI | Usa MidiExporter (código en el repo). |
| 8 | Publicar | En App Store, destaca “Sin conexión, privacidad garantizada”. |
7. Preguntas frecuentes (actualizadas)
| Pregunta | Respuesta |
|---|---|
| ¿Necesito conexión a internet? | No. Todo el procesamiento ocurre en el dispositivo. |
| ¿Afecta la batería? | Aproximadamente 3 % de consumo por hora de uso continuo; la latencia ultra‑baja evita picos de energía. |
| ¿Puedo usar la app con auriculares Bluetooth? | Sí, la salida de audio se enruta automáticamente al dispositivo de audio activo. |
| ¿Qué formatos de entrada admite para el fine‑tuning? | WAV (44.1 kHz, 16 bit) y FLAC. Otros formatos se convierten automáticamente. |
| ¿Hay riesgo de “over‑fitting” al entrenar con pocos datos? | El proceso incluye regularización L2 y early‑ |
Herramienta mencionada: DigitalOcean
Top comments (0)