2009-06-23 17 views
1

首先,感謝StackOverflow團隊,因爲我在iPhone上開發,因此它是一個非常有用的網站。 其次,請原諒我的語言。我是一個瘋子,就像每個法國人一樣,我的英語很糟糕。SystemSoundID在不同流上播放的不同實例!

我的iPhone程序中有一個很奇怪的問題: 我實現了一個在aiff中播放短音的類。那就是:

@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 

它的工作原理相當不錯,但即使我的情況下被初始化以同樣的方式,他們是不一樣的音頻流中!

我注意到,因爲當我按下iPhone的音量+和音量 - 按鈕時,在某些情況下,它控制主音頻流,在其他情況下,它控制鈴聲音量。 如果我把主流設置爲音量0,聲音A將不會受到遏制,但聲音B將會是。

有人有類似的問題嗎?你有什麼主意嗎 ?

非常感謝。

Martin

+0

我忘了說soundID是一個SystemSoundID變量。 – Martin 2009-06-23 11:58:08

回答

1

好的。 我發現了一些有趣的東西來回答這個問題。 有一個全局函數來初始化音頻上下文。這似乎是我沒有正確使用它,但我認爲問題來自於此。

// 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 
); 

儘管有這兩個函數,環流中仍有一個聲音,這真的很奇怪。有人能幫我嗎 ?