2010-01-06 11 views
6

estoy usando lo siguiente para reproducir un archivo M4A:de sonido en el simulador del dispositivo pero no

NSString *path = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent: fileName]; 
SystemSoundID soundID; 
NSURL *filePath = [NSURL fileURLWithPath:path isDirectory:NO]; 
AudioServicesCreateSystemSoundID((CFURLRef)filePath, &soundID); 
AudioServicesPlaySystemSound(soundID); 

Funciona bien en el simulador, pero no escucho nada en el dispositivo. Los archivos de sonidos que estoy usando permanecen en el paquete. no

file://localhost/var/mobile/Applications/418945F3-3711-4B4D-BC65-0D78993C77FB/African%20Adventure.app/Switch%201.m4a 

es un problema con la ruta del archivo o cualquier cosa diferente que tengo que hacer para el dispositivo: Esto es lo que parece rutaArchivo desde el dispositivo?

+0

¿Ha bajado el volumen? –

+0

El volumen está configurado a casi máx. – user230949

+4

¡Asegúrese de que su teléfono no esté en modo silencioso! He pasado 2 horas para descubrir esto ... – Mathieu

Respuesta

0

Comience comprobando el error de sus declaraciones. ¿FilePath es nulo? ¿Alguna de las funciones de AudioServices devuelve un error? La causa más probable es la distinción entre mayúsculas y minúsculas. El sistema de archivos de iPhone distingue entre mayúsculas y minúsculas, mientras que Mac no. Pero el primer paso en la depuración es observar los errores que está proporcionando el sistema.

+0

filePath no es nada. Tiene el valor que publiqué en el PO. No veo ningún error que ocurra. – user230949

+0

¿Ha comprobado los resultados de OSStatus, y ambos son noErr? –

+0

¿Cómo verifico los resultados de OSStatus? – user230949

0

El simulador utiliza QuickTime para la reproducción, por lo que es fácil tener recursos multimedia que funcionen en el simulador, pero fallan en el dispositivo debido a códecs faltantes o no compatibles. La prueba es si puedes reproducir el archivo en absoluto en el dispositivo, por ejemplo, a través de Safari o la aplicación iPod.

+0

Los sonidos sí se reproducen en el iPod del iPhone. – user230949

+0

iTunes recodifica el sonido para que pueda reproducirse en el dispositivo, intente reproducir a través de Safari. –

2

Es posible que desee utilizar el AVAudioPlayer en lugar de AudioServices.

El siguiente código tomará un archivo de audio (.m4a) y reproducirá el archivo de audio 1 vez. No olvides lanzar "audioPlayer" cuando hayas terminado con él.

NSString *urlAddress = [[NSBundle mainBundle] pathForResource:@"filename" ofType:@"m4a"]; 

NSURL *url = [NSURL fileURLWithPath:urlAddress]; 
NSError *error; 

AVAudioPlayer *audioPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:url error:&error]; 
audioPlayer.numberOfLoops = 0; 

if (audioPlayer == nil) 
{ 
    NSLog([error description]); 
} 
else 
{ 
    [audioPlayer play]; 
} 

Espero que este ejemplo lo ayude a reproducir audio en el dispositivo real. También podría ser una buena idea aumentar el audio del dispositivo cuando se reproduce el archivo.

Nota: Deberá agregar el marco de AVFoundation a su proyecto si aún no lo ha hecho. Además de importar el archivo de encabezado.

#import <AVFoundation/AVFoundation.h>

Actualización:

De Core Audio Descripción general de Apple Document

Sesión de audio Servicios

Audio sesión de servicios le permite gestionar las sesiones de audio en su aplicación a la coordinación de la comportamiento de audio en su aplicación con aplicaciones de fondo cationes en un iPhone o iPod touch. Audio Session Services consta de un subconjunto de funciones, tipos de datos y constantes declarados en el archivo de cabecera AudioServices.h en AudioToolbox.framework.

La Clase AVAudioPlayer

La clase AVAudioPlayer proporciona una interfaz sencilla de Objective-C para la reproducción de sonidos. Si su aplicación no requiere posicionamiento estéreo o sincronización precisa, y si no está reproduciendo audio capturado de una transmisión en red, Apple recomienda que use esta clase para la reproducción. Esta clase se declara en el archivo de encabezado AVAudioPlayer.h en AVFoundation.framework.

+0

Gracias. Voy a intentarlo. ¿Por qué AudioServices no podría reproducir sonidos? O, ¿por qué usar uno sobre el otro? – user230949

+0

Estoy usando AVAudioPlayer ahora en función del evento del usuario (es decir, haga clic en el botón). Libero si no es nada, creo la instancia y juego. Parece que hay un pequeño retraso ya que estoy creando una instancia cada vez. ¿Hay una manera más eficiente? – user230949

+0

@ user230949: Puedes crear un objeto de sonido, similar a [este contenedor para 'SystemSoundID'] (http://stackoverflow.com/a/9802540/1431728), solo estás creando un contenedor para' AVAudioPlayer'. – JohnK

5

Tuve problemas con esto también. Finalmente me di cuenta de que era porque AudioServices solo puede reproducir audio con las siguientes restricciones.

archivos de sonido que esté tocando Con esta función debe ser : - No más de 30 segundos de duración - en formato PCM lineal o ima4 (IMA/ADPCM) - Empaquetado en una .caf, .aif o archivo .wav

a partir de documentos de Apple: http://developer.apple.com/library/ios/#documentation/AudioToolbox/Reference/SystemSoundServicesReference/Reference/reference.html

5

Así como una nota al margen - que estaba teniendo el mismo problema y pasé probablemente cerca de una hora en la conversión de archivos en el formato correcto, etc .. Sin embargo, el problema era el "mut" e "enciende el iPad. Así que, aunque el volumen estaba arriba, y podía escuchar otros sonidos en el iPad, porque el interruptor de silencio estaba encendido, no estaba reproduciendo los sonidos del sistema.

Para aumentar la confusión, esta aplicación usa texto a voz y el volumen procedente del dictado estaba perfectamente bien, solo los sonidos procedentes de AudioServicesPlaySystemSound() no se reproducían.

Cuestiones relacionadas