AVAudioPlayer缓慢降低水平

时间:2013-12-20 23:39:55

标签: ios objective-c avaudioplayer

我创造了一个声音,我这样玩:

NSURL *musicFile = [[NSBundle mainBundle] URLForResource:@"My music"
                                           withExtension:@"mp3"];
self.backgroundMusic = [[AVAudioPlayer alloc] initWithContentsOfURL:musicFile
                                                              error:nil];
self.backgroundMusic.numberOfLoops = -1;
[self.backgroundMusic play];

但是当我改变观点时,我想停止音乐。但是,慢慢地,顺利地,不是立即。当您将应用程序置于后台时,您的音乐不会立即停止,而是大约0.5秒。

有可能吗?

谢谢!

2 个答案:

答案 0 :(得分:2)

是的,有可能并且有几种方法可以实现这种“淡出”效果。

我在之前的项目中这样做了,它对我来说非常好用

-(void)fadeOut {  

    if (self.backgroundMusic.volume > 0.05) {

        self.backgroundMusic.volume = self.backgroundMusic.volume - 0.05;

        // Volume will be zero after ~0.5 seconds
        [self performSelector:@selector(fadeOut) withObject:nil afterDelay:1.0/40.0];   

     } else {
        [self.backgroundMusic stop];
    }
}

答案 1 :(得分:0)

创建一个计时器并减少AVAudioPlayer的音量。

[NSTimer scheduledTimerWithTimeInterval: 1.0
                      target: self
                      selector:@selector(timerTriggered:)
                      userInfo: nil repeats:YES];

-(void)timerTriggered:(NSTimer *)timer
{
  [appSoundPlayer setVolume: appSoundPlayer.volume - 0.1];

  if(appSoundPlayer.volume == 0.0)
  { 
    [timer inValidate];

    timer = nil;
  }
}