代码之家  ›  专栏  ›  技术社区  ›  Martin

在不同的流上播放不同的systemsoundid实例!

  •  1
  • Martin  · 技术社区  · 16 年前

    首先,感谢StackOverflow团队,因为它是一个非常有用的网站,因为我正在开发iPhone。 二级,请原谅我的语言。我是个法国人,和每个法国人一样,我的英语很差。

    我的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音听不到。

    有人有类似的问题吗?你知道吗?

    谢谢。

    马丁

    1 回复  |  直到 16 年前
        1
  •  1
  •   Martin    16 年前

    好啊。 我找到了一些有趣的方法来回答这个问题。 有一个初始化音频上下文的全局函数。似乎我用的方法不对,但我认为问题就出在那里。

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

    尽管有这两个功能,但环流中仍有一个声音,这真的很奇怪。有人能帮我吗?