Pregunta

Estoy intentando reproducir un archivo de sonido desde un programa de iPhone.

Aquí está el código:

NSString *path = [[NSBundle mainBundle] pathForResource:@"play" ofType:@"caf"];
NSFileHandle *bodyf = [NSFileHandle fileHandleForReadingAtPath:path];
NSData *body = [bodyf availableData];
NSLog( @"length of play.caf %d",[body length] );
NSURL *url = [NSURL fileURLWithPath:path isDirectory:NO];
NSLog( [url description] );
NSLog( @"%d", AudioServicesCreateSystemSoundID((CFURLRef)url, &soundID) );

El primer NSLog es verificar que tengo acceso al archivo (lo hice), el segundo NSLog es mostrar la URL del archivo y el tercer NSLog devuelve -1500 " Se ha producido un error no especificado. "

Para el segundo NSLog, obtengo el siguiente resultado:

archivo: // localhost / Users / alan / Library / Application Knock upport / iPhone ? ? ? A ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?? Feng Yuqin retención ? Cuifang ? gris PEG inercia Ti sopa ? ? ? ? ? ? ? ? ? ? ? ?? ? ? ? ? ? ? ? desenrollar Shi ? ? Lan está representada plantilla Chai Ti Asr imulator / usuario / Aplicaciones / BFE5B819 -C3D8-4DCF-8C37-AC6258AF4902 / LocateMe.app / play.caf

Esto se debe a mi malentendido del método de "descripción", o esto contribuye al problema.

¿Alguna idea de lo que va mal?

¿Fue útil?

Solución 3

Una actualización sobre esto.

Recibí mis claves para permitirme ejecutar mi aplicación en el dispositivo.

Descubrí que mi archivo .caf se reprodujo correctamente cuando la aplicación se ejecutó en el dispositivo.

Luego probé varias alternativas.

Un archivo .wav que dura 60 segundos no funcionó en el simulador y el dispositivo.

Un archivo .wav de 5 segundos de duración funcionaría en el simulador, pero no en el dispositivo.

Un archivo .aiff de 5 segundos de duración funciona en el simulador y el dispositivo.

Sería bueno saber definitivamente lo que el simulador y el dispositivo están verificando sobre el archivo cuando se pasa a AudioServicesCreateSystemSoundID

Otros consejos

El primer parámetro para NSLog es una cadena de formato; está pasando [Descripción de URL] como la cadena de formato para el segundo uso de NSLog. Eso es malo, porque si la descripción de la URL contiene caracteres % , terminará imprimiendo cosas aleatorias de la pila.

En cambio, escriba

NSLog(@"%@", URL);

Ni siquiera necesita usar -description aquí; NSLog lo invocará automáticamente porque % @ significa " un objeto, " no "una NSString" y es lo suficientemente inteligente como para hacer lo correcto por usted.

Además, parece que al simulador de iPhone no le gusta reproducir (systemSound) sonidos de más de 5 segundos de duración. Tuve el mismo problema que nuestras aplicaciones casi siempre reproducen un sistema de inicio de sonido.

Una de las aplicaciones que estaba trabajando en el simulador no reproduciría el sonido, pero el dispositivo sí. Más tarde descubrí que hay una limitación extraña en el simulador y la forma en que maneja los sonidos. He presentado un error con Apple. Esperemos que esta sea la dirección con el lanzamiento del iPhone SDK 3.0.

Intenté lo mismo con mi aplicación que reproduce sonidos muy bien. Los sonidos no se reproducen en el simulador y cuando intento NSLog la URL, obtengo la misma basura que usted y EXC_BAD_ACCESS en la parte superior. Cuando registro la URL en el dispositivo, la URL está bien, pero de todas maneras obtengo EXC_BAD_ACCESS . Cuando suelto el registro, suena el juego y todo funciona. Si alguien pudiera explicar este comportamiento, estaría agradecido. En cuanto a su problema, dejaría el registro y probaría el código en el dispositivo.

Use " AVAudioPlayer " clase para reproducir archivos .caf

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top