Closed. This question needs to be more focused。它当前不接受答案。
想要改善这个问题吗?更新问题,使它仅关注editing this post的一个问题。
7年前关闭。
Improve this question
在播放新声音时,我可以隐藏背景音频。但是,我无法再次将背景音频级别恢复到最大。当我的代表试图“撤退”时,它总是在被撤退。正常的解决方法是AudiosessionSetProperty,但iOS 7中已弃用该功能,Apple在弃用警告或文档中未提供任何提示。
我在加载 View 时调用此方法。
这是我播放音频时
完成音频恢复背景音频和取消对接音频后,这是我的代表
那么,如何在不弃用API的情况下再次取消背景音乐呢?调用
使用此方法播放音频文件。观看回避是如何发生的..每次您播放新的音频警报时,请记住像在本示例中一样设置代表。不要在 View 加载方法中设置一次。
代表将在回放后调用此方法并调高背景音乐的音量:)请不要混淆我正在为此使用线程。您可以根据需要调用该方法,但这会使主线程停顿大约一秒钟,甚至两秒钟。这样就可以了,不要使用线程,而只需调用
此示例已通过100%的测试,并且可以在我的应用中正常工作。
想要改善这个问题吗?更新问题,使它仅关注editing this post的一个问题。
7年前关闭。
Improve this question
在播放新声音时,我可以隐藏背景音频。但是,我无法再次将背景音频级别恢复到最大。当我的代表试图“撤退”时,它总是在被撤退。正常的解决方法是AudiosessionSetProperty,但iOS 7中已弃用该功能,Apple在弃用警告或文档中未提供任何提示。
我在加载 View 时调用此方法。
- (void) configureAVAudioSession
{
//get your app's audioSession singleton object
AVAudioSession* session = [AVAudioSession sharedInstance];
//error handling
BOOL success;
NSError* error;
success=[session setCategory:AVAudioSessionCategoryPlayback
withOptions:AVAudioSessionCategoryOptionMixWithOthers error:&error];
if (!success)
{
NSLog(@"AVAudioSession error :%@",error);
}
else
{
}
success = [session setActive:YES error:&error];
if (!success) {
NSLog(@"Error setting active %@",error);
}
else
{
NSLog(@"succes settings active");
}
}
这是我播放音频时
-(void)playTimeOnGo
{
NSURL *url = [NSURL fileURLWithPath:[[NSBundle mainBundle]
pathForResource:@"just-like-magic"
ofType:@"mp3"]];
self.audioPlayer = [[AVAudioPlayer alloc]
initWithContentsOfURL:url
error:nil];
self.audioPlayer.delegate=(id<AVAudioPlayerDelegate>)self;
//get your app's audioSession singleton object
AVAudioSession* session = [AVAudioSession sharedInstance];
//error handling
BOOL success;
NSError* error;
success=[session setCategory:AVAudioSessionCategoryPlayback
withOptions:AVAudioSessionCategoryOptionDuckOthers error:&error];
[self.audioPlayer prepareToPlay];
[self.audioPlayer play];
AudioServicesPlaySystemSound(kSystemSoundID_Vibrate);
}
完成音频恢复背景音频和取消对接音频后,这是我的代表
- (void)audioPlayerDidFinishPlaying:(AVAudioPlayer *)data successfully:(BOOL)flag{
[self configureAVAudioSession];
NSLog(@"playback ended");
}
那么,如何在不弃用API的情况下再次取消背景音乐呢?调用
[self configureAVAudioSession];
显然不起作用.... 最佳答案
女士们,先生们,我为您提供了一个不推荐使用的示例,说明如何在iOS 7中正确使用Ducking。
在任何“ View 加载方法”中调用此方法,其中bool设置为YES。这将混合背景音频并准备回避
- (void) configureAVAudioSession:(bool) active
{
//get your app's audioSession singleton object
AVAudioSession* session = [AVAudioSession sharedInstance];
//error handling
BOOL success;
NSError* error;
success=[session setCategory:AVAudioSessionCategoryPlayback
withOptions:AVAudioSessionCategoryOptionMixWithOthers error:&error];
if (!success)
{
NSLog(@"AVAudioSession error :%@",error);
}
else
{
}
success = [session setActive:active error:&error];
if (!success) {
NSLog(@"Error setting active %@",error);
}
else
{
//NSLog(@"success settings active");
}
}
使用此方法播放音频文件。观看回避是如何发生的..每次您播放新的音频警报时,请记住像在本示例中一样设置代表。不要在 View 加载方法中设置一次。
-(void)playTimeOnGo
{
NSURL *url = [NSURL fileURLWithPath:[[NSBundle mainBundle]
//alertName is the name of your audio file without extention. extenstions is, doh extenstion like "mp"
pathForResource:_dataManager.optionsSettings.setStarts.alertName
ofType:_dataManager.optionsSettings.setStarts.alertExtension]];
self.audioPlayer = [[AVAudioPlayer alloc]
initWithContentsOfURL:url
error:nil];
self.audioPlayer.delegate=(id<AVAudioPlayerDelegate>)self;
//get your app's audioSession singleton object
AVAudioSession* session = [AVAudioSession sharedInstance];
//error handling
BOOL success;
NSError* error;
success=[session setCategory:AVAudioSessionCategoryPlayback
withOptions:AVAudioSessionCategoryOptionDuckOthers error:&error];
[self.audioPlayer prepareToPlay];
[self.audioPlayer play];
AudioServicesPlaySystemSound(kSystemSoundID_Vibrate);
}
代表将在回放后调用此方法并调高背景音乐的音量:)请不要混淆我正在为此使用线程。您可以根据需要调用该方法,但这会使主线程停顿大约一秒钟,甚至两秒钟。这样就可以了,不要使用线程,而只需调用
[self configureAVAudioSession:NO];
- (void)audioPlayerDidFinishPlaying:(AVAudioPlayer *)data successfully:(BOOL)flag
{
_playBackFinishedDelegateThead = [[NSThread alloc] initWithTarget:self selector:@selector(configureAVAudioSession:) object:NO];
[_playBackFinishedDelegateThead start];
}
此示例已通过100%的测试,并且可以在我的应用中正常工作。
09-10 03:09