iphone iphone-sdk-3.0 ios4 avaudioplayer

iphone - Reproducción de MP3 con AVAudioPlayer no funciona en el dispositivo



iphone-sdk-3.0 ios4 (4)

Estoy probando mi aplicación en mi iPhone 3GS con iOS 4.2

Estoy usando el siguiente código que reproduce un sonido en mi IBAction. Funciona perfectamente en el simulador (iPad y iPhone) - Escucho el sonido.

NSString *pathToMusicFile1 = [[NSBundle mainBundle] pathForResource:@"alarm" ofType:@"mp3"]; NSError *error; alarmSound = [[AVAudioPlayer alloc]initWithContentsOfURL:[NSURL fileURLWithPath:pathToMusicFile1] error:&error]; NSLog(@"Song1 Loaded"); if (alarmSound == nil) { NSLog(@"Error playing sound"); } else { alarmSound.numberOfLoops = 20; alarmSound.volume = 1.0; [alarmSound play]; }

Tengo todo declarado correctamente (encabezados y marcos, etc.) ya que puedo escuchar el sonido en el simulador.

¡También he comprobado que mi teléfono NO está en modo silencioso! Escucho otros sonidos de la GUI genérica de iPhone. (ejemplo de un datepicker).

También limpié todos los objetivos y eliminé la aplicación para volver a instalarla.

¿Alguna idea de lo que está mal?


Entonces, también tuve este problema, bueno, estoy bastante seguro de que es el mismo ...

Hemos tenido una aplicación en la tienda de aplicaciones durante un año o así ahora y recientemente necesitábamos cambiar un poco de contenido aunque nada funcional.

De repente, el sonido dejó de funcionar: el simulador en la última versión de SDK (versión 4.0) Y también en el dispositivo (nuevamente con iOS 4).

El código que siempre funcionó para nosotros fue este ...

NSString *sound_file; if ((sound_file = [[NSBundle mainBundle] pathForResource:@"track1" ofType:@"mp3"])){ NSURL *url = [[NSURL alloc] initFileURLWithPath:sound_file]; audioPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:url error:NULL]; audioPlayer.delegate = self; [url release]; [audioPlayer prepareToPlay]; [audioPlayer play]; }

Finalmente, descubrí que ahora necesita establecer el tipo de reproducción de AVAudioSession solo para que el sonido se reproduzca a través del altavoz como ya lo hizo. Coloque la siguiente línea de código en su aplicación delegadoDidFinishLaunching controlador de eventos ...

- (void)applicationDidFinishLaunching:(UIApplication *)application { [[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback error:nil];

Sin olvidarse de agregar el archivo .h del archivo adjunto de la aplicación (obviamente, también debe importar el marco AVFoundation si aún no lo ha hecho) ...

#import <AVFoundation/AVAudioSession.h>

Con suerte, esto hará que tu sonido se reproduzca en el dispositivo.

No salgas de cuaght por lo que creo que podría ser un problema aparte, y ese es el sonido que aún no se reproduce en el simulador. He visto otras publicaciones que sugieren que este es el caso, pero no estoy seguro de cuán generalizado es esto. Descubrí que si seleccioné el iPad 3.2 como mi simulador, al menos funcionó en eso. ¡La alegria!

Lo que me parece una locura es que, seguramente, esto debe afectar a muchas personas y, sin embargo, es bastante difícil encontrar información o sugerencias sobre algo que debería ser un tema bastante conocido. Después de todo, he visto montones de publicaciones en foros que no parecen haber sido respondidas.

De todos modos, espero que esto ayude a alguien más.


Mi problema era que iOS estaba liberando automáticamente mi instancia de AVAudioPlayer antes de que el archivo tuviera la oportunidad de jugar. Extrañamente, esto solo sucedió con MP3 y no con archivos AU. La solución fue no establecerlo como liberación automática y luego soltarlo en el método delegado ...

- (void)playSound:(NSString *)sound { AVAudioPlayer *audioPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:[NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:sound ofType:@""]] error:NULL]; audioPlayer.delegate = self; [audioPlayer play]; }

... luego en el método delegado ...

- (void)audioPlayerDidFinishPlaying:(AVAudioPlayer *)player successfully:(BOOL)flag { [player release]; }

... funciona bien ahora


Es extremadamente importante tener la variable "audioPlayer" como una propiedad. De lo contrario, con ARC, ¡se lanza antes de que tenga la oportunidad de jugar!

Me tomó media hora y algunos google para este momento A-ha.

Mi sonido funciona perfectamente ahora!


¿Has probado [NSURL URLWithString:pathToMusicFile1]; en lugar de fileURLWithPath: :?