2011-05-16 15 views
12

Estoy haciendo una aplicación para Mac OS X usando Xcode, y quiero que emita un sonido de alerta cuando algo sucede.Manera simple de reproducir un archivo de sonido (.aif)

¿Cuál es el código más simple para reproducir un sonido en Objective-C/Cocoa? Tenga en cuenta que mi archivo de sonido es .aif.

Además, ¿dónde pongo el archivo de sonido dentro de mi proyecto?

Gracias.

Respuesta

26

Para reproducir audio en la Mac, puede usar NSSound para actividades básicas, o el marco más robusto CoreAudio para tareas más complicadas.


Si se va a utilizar NSSound para lograr este objetivo, el código sería algo como esto:

NSString *resourcePath = [[NSBundle mainBundle] pathForResource:@"replace-with-file-name" ofType:@"aif"]; 
NSSound *sound = [[NSSound alloc] initWithContentsOfFile:resourcePath byReference:YES]; 
// Do something with sound, like [sound play] and release. 

O

NSSound *sound = [NSSound soundNamed:@"replace-with-file-name-without-the-extension"]; 
// Do something with sound, like [sound play], but don't release (it's autoreleased). 

Si se va a utilizar el segundo fragmento, Debería asegurarse de que la extensión del archivo de sonido sea aiff y no solo aif, ya que +soundNamed: busca archivos muy específicos exte nesiones; No creo que aif esté en esa lista.

Usando CoreAudio es más complicado, así que si lo que desea es jugar y perder el tiempo con la configuración muy simple, sólo tiene que utilizar NSSound

+0

Gracias, ¿me pueden dar un ejemplo de cómo usar NSSound en el código? – Andy

+0

Gracias funcionó, solo una pregunta más: el sonido fue por ejemplo 1 minuto y lo lanzo, ¿sigue jugando? – Andy

+0

Andy, la [Referencia de clase de NSSound] (http://developer.apple.com/library/mac/#documentation/Cocoa/Reference/ApplicationKit/Classes/NSSound_Class/Reference/Reference.html) indica que un sonido dejará de reproducirse una vez que ha sido desasignado: "Al desasignar, un objeto de sonido detiene la reproducción del sonido (según sea necesario) para que pueda liberar los recursos de audio correspondientes". Por lo tanto, si crea un sonido, comience a reproducirlo, luego suéltelo antes de que termine de reproducirse, el sonido se detendrá. –

10

básicos de reproducción del sonido es bastante fácil.

Usted puede utilizar la clase NSSound para cargar el archivo de varias maneras diferentes, por ejemplo, por su nombre:

NSSound * myAwesomeSound = [NSSound soundNamed:@"AwesomeSound"]; 

Esto tendrá que ser retenido si desea mantenerlo alrededor.

En este caso, la clase buscará en determinados directorios, incluido el paquete de la aplicación, un archivo de sonido con ese nombre. Una nota importante es que el archivo debe tener el .aiff (con dos de f) la extensión con el fin de ser encontrado por este método *

Es probable que almacenar el archivo de sonido en la carpeta de recursos de su proyecto.; ahí es donde comúnmente se guardan los archivos "multimedia".

A continuación, se puede jugar de manera muy simple, tal vez mediante una pulsación de botón:

- (IBAction)playTheSound:(id)sender { 
    NSSound * myAwesomeSound = [NSSound soundNamed:@"AwesomeSound"]; 
    [myAwesomeSound play]; 
} 

También es posible hacer algún tipo de control de transporte básico: hacer una pausa, detener, comprobando si el sonido ha terminado, y así sucesivamente. Por favor, consulte el Sound Programming Topics Guide para más detalles.


* También es posible utilizar otros formatos, por supuesto.

1

Por ejemplo, agregue el marco de AudioToolbox, agregue el archivo de sonido a sus recursos/proyecto, luego agregue el siguiente a su.h:

#import <AudioToolbox/AudioToolbox.h> 

Y luego: (después de @interface {} bla en su .h)

- (IBAction) playSound; 

Añadir lo siguiente a su .m: (cambiar 'ping' y 'wav' a la nombre de archivo correspondiente y el tipo)

- (IBAction) playSound 
{ 
    SystemSoundID soundID; 
    NSString *soundFile = [[NSBundle mainBundle] pathForResource:@"Ping" ofType:@"wav"]; 
    AudioServicesCreateSystemSoundID((CFURLRef)[NSURL fileURLWithPath:soundFile], &soundID); 
    AudioServicesPlaySystemSound(soundID); 
    [soundFile release]; 
} 
0

puede copiar y añadir los archivos .aif a su proyecto en Xcode de la siguiente manera:

  1. Comando + clic en la carpeta Classes (desde dentro xCode)
  2. Seleccione Agregar> archivos existentes
  3. Vaya al directorio que contiene su .aif y seleccione la (s). Haga clic en Agregar. (opcional:. Marque la casilla “Copiar elementos” casilla de verificación & Haga clic en Agregar)

ejemplos de ver que Apple & gran Info: here & here.

Cuestiones relacionadas