Esto lo he cogido directamente del blog de Cocoa Mental, donde tienen un monton de informacion sobre diferentes temas de programacion para ios.
Formatos de Sonido para iPhone e iPad
Con Cocoa-Touch puedes reproducir sonidos en los siguientes formatos:
- wav (no comprimido)
- mp3 (comprimido)
- aiff (comprimido)
- caff (no comprimido)
Ogg, a fecha de hoy (Junio 2011) no es uno de ellos. Los formatos preferidos son CAFF (Core Audio File Format) y AIFF (Audio Interchange File Format). Son los que menos recursos consumirán.
¿Qué formato de sonido es más adecuado para iOS?
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, 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:
luego haz un #import <AVFoundation/AVAudioPlayer.h>
|
–(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];}
|
Todos estos ejemplos suponen que los archivos de sonido han sido previamente añadidos a tu proyecto.
Donde obtener sonidos