2012-07-28 12 views
5

que estoy tratando de conseguir un sonido para jugar, pero cuando código:CFURLRef requiere un error de fundido en puente

AudioServicesCreateSystemSoundID ((CFURLRef) alertSound, &soundFileObject); 

que arroja el siguiente error:

moldeada de Objective C-tipo de puntero ' NSURL *' a C tipo de puntero 'CFURLRef'(también conocido como '__CFURL estructura const *') requiere un error de fundido en puente

me han tratado tanto de los dos siguientes soluciones sugeridas:

AudioServicesCreateSystemSoundID ((__bridge CFURLRef) alertSound, &soundFileObject); 

o

AudioServicesCreateSystemSoundID ((CFURLRef) CFBridgingRetain(alertSound), &soundFileObject); 

Pero todavía no puedo obtener el sonido para jugar.

Supongo que la pregunta es: ¿el error de puente es la causa de que el sonido no se reproduzca, o debería buscar dónde?

Puedo obtener el sonido para jugar usando el código de muestra SysSound y estoy usando iOS 6 y Xcode 4.5.

Gracias por cualquier punteros :)

Respuesta

9

El reparto no es probablemente la razón por la que el sonido no se reproduce:

AudioServicesCreateSystemSoundID ((__bridge CFURLRef) alertSound, &soundFileObject); 

está muy bien.

Es muy probable que su error esté en un código que no nos ha mostrado. Un problema común es un error en la creación de URL o un formato de archivo no válido.

modificar el código de la siguiente manera:

OSStatus status = AudioServicesCreateSystemSoundID((__bridge CFURLRef)alertSound, &soundFileObject); 
NSLog(@"AudioServicesCreateSystemSoundID status = %ld", status); 

y comprobar qué código de estado se obtiene; parmErr (-50) es relativamente común y generalmente significa que su URL es nula.

Ah, y una idea más, no muestra dónde está realmente reproduciendo el sonido. Usted sabe que AudioServicesCreateSystemSoundID no reproduce el sonido. Debe llamar al:

AudioServicesPlaySystemSound(soundFileObject); 

Disculpe, si ya lo sabía.

+0

Sí, -50. Mi NSURL se ve así: NSURL * alertSound = [[NSBundle mainBundle] URLForResource: @ "tap" withExtension: @ "aif"]; Y el archivo "tap.aif" se encuentra en un grupo que creé llamado Sonidos. ¿Hay algún lugar específico que necesite ser colocado? ¡Muchas gracias por su ayuda! – robspencer77

+0

Solo para asegurarse de verificar en el depurador o con un 'NSLog' que la URL es nula. Esto significaría (como creo que está empezando a sospechar) que Xcode no está copiando su sonido en el paquete de su aplicación. Puedes intentar eliminarlo (¡solo referencia!) De tu proyecto y volver a agregarlo y también verificar dos veces que la ortografía del nombre del archivo sea correcta (¿podría ser .aiff?). No creo que necesites ponerlo en un lugar especial. Usualmente pongo tales cosas en el grupo de "Archivos de Soporte" que crea Xcode, pero no creo que sea necesario. – idz

+0

¡Ah, lo tengo! ¡Gracias! :) No estoy seguro de por qué no se ha agregado correctamente en primer lugar. ¡Salud, idz! – robspencer77