2009-06-23 7 views
1

Tout d'abord, merci pour l'équipe StackOverflow, parce que c'est un site très utile, puisque je développe sur iPhone. Secondaire, veuillez excuser ma langue. Je suis un frenchie et comme tous les frenchies je suis très mauvais en anglais.Différentes instances de SystemSoundID en cours de lecture sur différents flux!

J'ai un très étrange problème avec mes sons dans mon programme iPhone: J'ai mis en place une classe qui joue un son bref dans aiff. Ici, il est:

@implementation SoundPlayer 

-(id)initWithFile:(NSString*)file{ 
    self = [super init]; 
    NSString *soundPath = [[NSBundle mainBundle] pathForResource:file ofType:@"aiff"]; 
    AudioServicesCreateSystemSoundID((CFURLRef)[NSURL fileURLWithPath: soundPath], &soundID); 
    return self; 
} 

-(void)play { 
    if(SOUND_ACTIVATED){ 
     AudioServicesPlaySystemSound (soundID); 
     } 
} 

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

@end 

Il fonctionne très bien, mais même si mes instances sont initialisés de la même façon, ils ne sont pas dans le même flux audio!

J'ai remarqué que parce que quand j'appuie sur les boutons de volume + et de volume de l'iPhone, dans certains cas, il contrôle le flux audio principal, dans d'autres cas, il contrôle le volume de la sonnerie. Si je mets le flux principal au volume 0, le son A ne sera pas audible, mais le son B le sera.

Quelqu'un a-t-il eu un problème similaire? Avez-vous une idée ?

Merci beaucoup.

Martin

+0

J'ai oublié de dire que soundID est une variable SystemSoundID. – Martin

Répondre

1

Ok. J'ai trouvé quelque chose qui serait intéressant pour répondre au problème. Il existe une fonction globale qui initialise le contexte audio. Il semble que je ne l'utilise pas de la bonne façon, mais je pense que le problème vient de là.

// Initialize the Audio context 
AudioSessionInitialize (
    NULL,   // 'NULL' to use the default (main) run loop 
    NULL,   // 'NULL' to use the default run loop mode 
    NULL,   // a reference to your interruption callbac 
    self   // data to pass to your interruption listener callback 
); 

// What kind of sound will be played 
UInt32 sessionCategory = kAudioSessionCategory_MediaPlayback; 
AudioSessionSetProperty (
    kAudioSessionProperty_AudioCategory, 
    sizeof (sessionCategory), 
    &sessionCategory 
); 

En dépit de ces deux fonctions, un son reste sur le flux de l'anneau, et c'est vraiment étrange. Est-ce que quelqu'un peut m'aider ?

Questions connexes