2010-03-20 6 views
7

Est-ce que quelqu'un a un extrait qui utilise l'infrastructure AudioToolBox qui peut être utilisé pour jouer un son court? Je vous serais reconnaissant si vous le partagiez avec moi et le reste de la communauté. Partout ailleurs, j'ai regardé ne semble pas trop clair avec leur code.Jouer des sons dans le SDK iPhone?

Merci!

+0

Y a-t-il quelque chose en particulier que vous cherchez? Le framework AV Foundation est le moyen le plus simple de jouer des sons, mais je suppose que vous voulez quelque chose de plus? –

+0

Nah, Id juste comme de connaître la façon standard de jouer un son bref ... beaucoup de gens autour de l'utilisation nette AudioToolBox ... merci pour la réponse :) – esqew

Répondre

11

Voici un exemple simple en utilisant la 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]; 
} 

Cela suppose un fichier appelé « click.caf » disponible dans le faisceau principal. Comme je joue beaucoup ce son, je le garde pour le jouer plus tard au lieu de le relâcher.

+0

Ça ne marchera pas pour moi. aidez-moi s'il vous plaît –

+0

@VineeshTP Vous devez probablement changer le nom/type pour être le même que le fichier que vous voulez jouer. Mais, je suggère de poser une nouvelle question et de détailler exactement pourquoi cela ne fonctionne pas pour vous. –

+0

@NathanS .: J'ai changé le nom du fichier. –

7

j'ai écrit d'un simple emballage Objective-C autour AudioServicesPlaySystemSound et les amis:

#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 

Lives here. Pour les autres options sonores, voir this question.

+1

Je suggère que les gens utilisent la solution de @ zoul pour les sons du système (clics de boutons, etc.). Il prend en charge moins de formats, mais il est censé être moins lent et c'est la solution documentée préférée à utiliser pour les sons du système. AVAudioPlayer est excellent pour jouer de la musique, d'un autre côté - mais ce n'est pas ce que l'affiche originale demandait. :-) –

2

Source: AudioServices - iPhone Developer Wiki

Les sons sont Audioservice quel que soit le contrôleur de volume de l'appareil. Même si le téléphone est en mode silencieux, les sons du service audio seront lus. Ces sons peuvent uniquement être coupés en allant Paramètres ->Sons ->Sonnerie et alertes.

sons système personnalisés peuvent être lus par le code suivant:

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

Invoquer la vibration dans l'iPhone

AudioServicesPlaySystemSound(kSystemSoundID_Vibrate); 

Jouer avec des sons système intégré.

AudioServicesPlaySystemSound(1100); 
Questions connexes