Reproducir sonidos en iOS: Formatos de Sonido para iPhone e iPad
Con Cocoa-Touch puedes reproducir sonidos en iOS utilizando los siguientes formatos:
- wav (no comprimido)
- mp3 (comprimido)
- aiff (comprimido)
- caff (no comprimido)
¿Qué formato de sonido es más adecuado para iOS?
Para reproducir sonidos iOS es conveniente es conveniente conocer el formato más adecuado. Para sonidos cortos, como un bip al tocar un botón, el ideal es CAFF. Al no ser comprimido, iOS no tendrá que perder el tiempo descomprimiéndolo y sonará casi instantaneamente. Apple recomienda no usarlo para ficheros de más de 30 segundos de duración.
Para sonidos más largos, es preferible usar el formato AIFF (que logra compresiones de hasta 4:1). iOS lo irá descomprimiendo sobre la marcha, a medida que lo reproduce.
Convertir sonidos al formato adecuado para Cocoa
Si tienes un sonido en mp3 o wav y deseas convertirlo a alguno de estos formatos para reproducir sonidos en iOS, la herramienta necesaria viene incluída con el SDK de iPhone. Es una utilidad de linea de comandos llamada afconvert.
Algunos ejemplos del uso de afconvert:
# creates sound.caf (little endian, 16 bit) afconvert -f caff -d LEI16 sound.wav # creates sound.caf (little endian, 16 bit, 22kHz) afconvert -f caff -d LEI16@22050 sound.wav # creates sound.caf (little endian, 16 bit, MONO) afconvert -f caff -d LEI16 -c 1 sound.wav # creates sound.aifc (IMA4 compression) afconvert -f AIFC -d ima4 sound.wav # creates sound.aifc (IMA4 compression, MONO) afconvert -f AIFC -d ima4 -c 1 sound.wav
Reproducir un sonido corto en iOS
Lo primero es añadir la siguiente framework a tu proyecto: AudioToolbox. Luego tienes que #import <AudioToolbox/AudioServices.h>
Crear un SystemSoundID para tu sonido
- (void)viewDidLoad { [superviewDidLoad]; NSString *path = [[NSBundlemainBundle] pathForResource:@"btn"ofType:@"caf"]; NSURL *url = [NSURLfileURLWithPath:path isDirectory:NO]; SystemSoundID id; OSStatus res = AudioServicesCreateSystemSoundID((CFURLRef)url, &id); if (res == kAudioServicesNoError) { self.btnClickId = id; }
}
Reproducir el sonido
-(IBAction) playClic: (id) sender{ AudioServicesPlaySystemSound(self.btnClickId); }
Recuerda que luego habrá que llamar a AudioServicesDisposeSystemSoundID() para liberar recursos.
Reproducir un sonido largo en iOS
Lo primero es añadir las siguientes frameworks a tu proyecto:
- AVFoundation
- MediaPlayer
-(IBAction) playLongSound: (id) sender{ NSString *filePath = [[NSBundlemainBundle] pathForResource:@"beach_waves"ofType:@"aifc"]; NSError *err = nil; NSData *soundData = [[NSDataalloc] initWithContentsOfFile:filePath options:NSDataReadingMappederror:&err]; AVAudioPlayer *p = [[AVAudioPlayeralloc] initWithData:soundData error:&err]; self.player = p; self.player.numberOfLoops = -1; [self.playerplay];}
Donde obtener sonidos
Fernando Rodríguez
Sígueme en twitter.
Cursos de desarrollo iPhone
Si quieres saber más, suscríbete. Y si te gusta la programación y aprender sobre lo último de lo último en tecnología, mira nuestros bootcamps.