2013-02-19 65 views
8

在我的应用程序中,我需要播放音量从0到最大系统音量(这是一个闹钟应用程序)。如何在没有声音指示器更改的iOS中以最大音量播放声音文件

我目前使用AVAudioPlayer播放声音和MPMusicPlayerController最大化设备的音量的报警

MPMusicPlayerController.applicationMusicPlayer.volume = 1.0; 


NSString *fileName = [NSString stringWithFormat:alarm.sound]; 
fileName = [fileName stringByDeletingPathExtension]; 

NSString *soundFilePath = [[NSBundle mainBundle] pathForResource:fileName ofType:@"aifc"]; 
NSURL *soundFileURL = [NSURL fileURLWithPath:soundFilePath]; 

audioPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:soundFileURL error:nil]; 
audioPlayer.volume = 0.0; 
audioPlayer.numberOfLoops = -1; 

[audioPlayer prepareToPlay]; 

audioPlayer.play; 

,然后我安排一个计时器,以提高音量的时间

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

//逐渐增加音量

- (void)pollTimeForGradualVolumeIncrease 
{ 
    timerSecond += 1; 

    if (audioPlayer.volume < 1.0 && timerSecond % 1 == 0) 
    { 
     [audioPlayer setVolume:audioPlayer.volume + 0.02]; 
     UISlider *slider = volumeSliderView.subviews[0]; 
     [slider setValue:1.0 animated:NO]; 
    } 
    else if (audioPlayer.volume >= 1.0) 
    { 
     timerSecond = 0; 
     timer.invalidate; 
     timer = nil; 
    } 
} 

这个问题是,当设置MPMusicPlayerController.applicationMusicPlayer.volume

时会出现iOS音量指示灯有没有办法以最大设备音量播放声音文件,而不显示iOS音量已更改指示符?

+0

你说你正在使用应用程序musicplayer音量,但我看到你正在使用audioPlayer setVolume这是一个AVAudioPlayer,你能澄清吗? – Daniel 2013-02-19 17:09:14

+0

从我的理解。 ApplicationMusicPlayer为iOS设置主音量,并使用AVAudioPlayer播放声音。这是不正确的? 我遵循http://stackoverflow.com/questions/9279233/ios-maximum-volume-level-for-avaudioplayer?rq=1的示例。 AVAudioPlayer播放声音并逐渐将音量提高一小部分主音量。 – 2013-02-19 17:45:21

+0

我不认为你可以这样做,你可以做的是将音量设置为最大值,在更改前保留音量值,并在停止播放声音时返回原始值... – Ondrej 2013-02-20 15:52:48

回答

3

我在8个月前试验了相关的东西,据我所知,如果存在一个MPVolumeView,那么iOS就不会显示系统音量已更改的指示器。

如果你实际上不想看到MPVolumeView,我想你可以将它隐藏在另一个视图之后。

+0

我结束了用类似的解决方案修复它。我只是将MPVolumeView的原点设置为关闭屏幕 – 2013-05-08 00:15:52