Aplicación para iPhone: los files de sonido WAV no se reproducen

Busqué aquí y probé todas las diferentes soluciones dadas, pero nada funcionó. Entonces permítame preguntarle:

Estoy intentando reproducir un sonido en una aplicación de iPhone cuando se presiona un button. Importé el marco de audio, conecté el button con el método, tengo el file de sonido WAV en el package y uso el siguiente código para reproducir el sonido:

NSString *path = [NSString stringWithFormat:@"%@%@", [[NSBundle mainBundle] resourcePath], @"/filename.wav"]; SystemSoundID soundID; NSURL *filePath = [NSURL fileURLWithPath:path isDirectory:NO]; AudioServicesCreateSystemSoundID((CFURLRef)filePath, &soundID); AudioServicesPlaySystemSound(soundID); 

Pero no suena cuando presiono un button. (Sí, mi sonido está encendido.)

¿Alguna idea de por qué podría ser esto y cómo puedo solucionarlo? Estaré encantado de proporcionarle más información si ayuda.

En primer lugar, el formatting de sonido preferido para iPhone es CAF con formatting LE, o mp3 para música. Puede convertir un wav a caf con la utilidad de terminal incorporada:

 afconvert -f caff -d LEI16 crash.wav crash.caf 

Entonces, lo más fácil para reproducir un sonido es usar el AVAudioPlayer … esta function rápida puede ayudarlo a cargar un recurso de sonido:

 - (AVAudioPlayer *) soundNamed:(NSString *)name { NSString * path; AVAudioPlayer * snd; NSError * err; path = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:name]; if ([[NSFileManager defaultManager] fileExistsAtPath:path]) { NSURL * url = [NSURL fileURLWithPath:path]; snd = [[[AVAudioPlayer alloc] initWithContentsOfURL:url error:&err] autorelease]; if (! snd) { NSLog(@"Sound named '%@' had error %@", name, [err localizedDescription]); } else { [snd prepareToPlay]; } } else { NSLog(@"Sound file '%@' doesn't exist at '%@'", name, path); } return snd; } 

No sé si has resuelto el problema, pero para mí, en iOS 7, a veces el (__bridge CFURLRef) no funcionará, en cuyo caso, si imprime el resultado de (__bridge CFURLRef)[NSURL fileURLWithPath:path] , será 0x0 . Esto lleva a la falla de AudioServicesCreateSystemSoundID() . El valor de retorno de la function es tipo de OSStatus . Si falla, la function devolverá -50 , lo que significa que uno o más parameters no son válidos. (Si se ejecuta correctamente, devuelve 0 ).

Resolví esto usando la function de estilo C obteniendo la ruta del file:

  CFBundleRef mainBundle = CFBundleGetMainBundle (); CFURLRef soundFileUrl; soundFileUrl = CFBundleCopyResourceURL(mainBundle, CFSTR("fileName"), CFSTR("wav"), NULL); AudioServicesCreateSystemSoundID(soundFileUrl, &soundID);