2010-03-20 14 views
7

¿Alguien tiene un fragmento que utiliza el marco AudioToolBox que se puede utilizar para reproducir un sonido corto? Le agradecería que lo compartiera conmigo y el resto de la comunidad. En todos los demás lugares que he buscado no parece estar muy claro con su código.Reproducir sonidos en iPhone SDK?

Gracias!

+0

¿Hay algo en particular que estés buscando? El marco de AV Foundation es la forma más fácil de reproducir sonidos, pero supongo que quieres algo más. –

+0

Nah, me gustaría saber la forma estándar de reproducir un sonido corto ... muchas personas alrededor de la red usan AudioToolBox ... gracias por la respuesta :) – esqew

Respuesta

11

Este es un ejemplo muy fácil usando el AVAudioPlayer:

-(void)PlayClick 
{ 
    NSURL* musicFile = [NSURL fileURLWithPath:[[NSBundle mainBundle] 
               pathForResource:@"click" 
               ofType:@"caf"]]; 
    AVAudioPlayer *click = [[AVAudioPlayer alloc] initWithContentsOfURL:musicFile error:nil]; 
    [click play]; 
    [click release]; 
} 

Esto supone un archivo llamado "click.caf", disponible en el paquete principal. Mientras toco este sonido mucho, en realidad lo guardo para tocarlo más tarde en lugar de soltarlo.

+0

No funcionará para mí. por favor, ayúdenme –

+0

@VineeshTP Probablemente necesite cambiar el nombre/tipo para que sea el mismo que el que desea reproducir. Pero, sugiero hacer una nueva pregunta y detallar exactamente por qué no funciona para usted. –

+0

@NathanS .: Cambié el nombre del archivo. –

7

me escribió un simple envoltorio de Objective-C en torno AudioServicesPlaySystemSound y amigos:

#import <AudioToolbox/AudioToolbox.h> 

/* 
    Trivial wrapper around system sound as provided 
    by Audio Services. Don’t forget to add the Audio 
    Toolbox framework. 
*/ 

@interface Sound : NSObject 
{ 
    SystemSoundID handle; 
} 

// Path is relative to the resources dir. 
- (id) initWithPath: (NSString*) path; 
- (void) play; 

@end 

@implementation Sound 

- (id) initWithPath: (NSString*) path 
{ 
    [super init]; 
    NSString *resourceDir = [[NSBundle mainBundle] resourcePath]; 
    NSString *fullPath = [resourceDir stringByAppendingPathComponent:path]; 
    NSURL *url = [NSURL fileURLWithPath:fullPath]; 

    OSStatus errcode = AudioServicesCreateSystemSoundID((CFURLRef) url, &handle); 
    NSAssert1(errcode == 0, @"Failed to load sound: %@", path); 
    return self; 
} 

- (void) dealloc 
{ 
    AudioServicesDisposeSystemSoundID(handle); 
    [super dealloc]; 
} 

- (void) play 
{ 
    AudioServicesPlaySystemSound(handle); 
} 

@end 

Vidas here. Para otras opciones de sonido, vea this question.

+1

Sugiero que las personas usen la solución de @ zoul para los sonidos del sistema (clics de botón, etc.). Es compatible con menos formatos, pero se supone que tiene un retraso menor y es la solución documentada preferida que se utilizará para los sonidos del sistema. AVAudioPlayer es genial para reproducir música, por otro lado, pero eso no es lo que pidió el cartel original. :-) –

2

Fuente: AudioServices - iPhone Developer Wiki

Los sonidos AudioService son con independencia del controlador el volumen del dispositivo. Incluso si el teléfono está en modo silencioso, se reproducirán los sonidos del servicio de audio. Estos sonidos solo se pueden silenciar al ir a Configuración ->Sonidos ->Timbre y alertas.

sonidos del sistema personalizado se pueden reproducir mediante el siguiente código:

CFBundleRef mainbundle = CFBundleGetMainBundle(); 
CFURLRef soundFileURLRef = CFBundleCopyResourceURL(mainbundle, CFSTR("tap"), CFSTR("aif"), NULL); 
AudioServicesCreateSystemSoundID(soundFileURLRef, &soundFileObject); 

La invocación de la vibración en iPhone

AudioServicesPlaySystemSound(kSystemSoundID_Vibrate); 

Jugar sistema incorporado suena.

AudioServicesPlaySystemSound(1100); 
Cuestiones relacionadas