logo_freesound

Cómo reproducir sonidos en iOS

Reproducir sonidos en iOS: Formatos de Sonido para iPhone e iPad

Con Cocoa-Touch puedes reproducir sonidos en los siguientes formatos:

  1. wav (no comprimido)
  2. mp3 (comprimido)
  3. aiff (comprimido)
  4. 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.

Reproducir sonidos en iOS ¿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, 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 [email protected] 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
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

Un excelente lugar para buscar sonidos bajo licencia Creative Commons es Freesound. Si no encuentras lo que buscas, pídelo en el foro. Los gurus del audio que allí habitan  son muy amables y es más que seguro que alguien grabe o cree el sonido que has pedido.

 

Fernando Rodríguez

Sígueme en twitter.
Cursos de desarrollo iPhone

Acerca de Fernando Rodriguez

Fundador & Editor Jefe de justcodeit, Fernando Rodríguez (@frr149 & Linkedin) es desarrollador & un experto en la enseñanza de máxima calidad en programación y desarrollo para dispositivos iOS, Cocoa Touch, Objective C, Swift, Python, entre otros, aunque su mejor carta de presentación, es la opinión de sus alumnos: http://keepcoding.io/es/testimonio/ CLO en KeepCoding & Arunovo. Instructor de iOS Avanzado del Big Nerd Ranch. Profesor Asociado de la U-tad, autor invitado de revistas como iPhoneWorld, Applesfera.com & ponente habitual en conferencias dentro y fuera de España (iOSDevUK, CodeMotion, BCNDevCon, etc). En sus vidas anteriores fue un nerd de Python y Django, mago de Smalltalk, y para su pesar, galeote de C++ y un gran cocinero.

Share this:

Leave a comment