0

我使用 AVAudioPlayer 和 AVAudioSession 在我的 iPhone 应用程序的后台运行音频...

现在我的问题是我已经有一个书面代码,它接受用户的一些歌曲作为输入,并使用 AVAudioPlayer 一个接一个地播放它们......

问题是,当应用程序在播放其中一个文件时进入后台时,音频会继续播放,但完成后,声音会消失......在前台完成文件后,我只需执行一些代码即可播放下一个,但在后台这是不可能的......

我考虑过请求一些时间来完成这项工作并运行我的代码,但我不能这样做,因为音频文件总是在变化并且它们可能很长......所以请告诉我我应该怎么做?是否有任何作为背景音频运行的内置播放列表播放器?还是有其他解决方案?我真的需要把它投入工作......

多谢

4

3 回答 3

2

我遇到了同样的问题,但还没有完全解决。audioDidFinishPlaying 委托方法仍然会触发,您可以使用 UIAplication 的 beginBackgroundTask 创建一个新的 AVaudioPlayer 实例,确保 AVAudioSession 仍然处于活动状态等。但是当我尝试播放新的 AVAudioPlayer 实例时,它会立即暂停。我的怀疑/担心是没有办法从后台启动音频,只有在应用程序状态转换发生时才继续播放。不过,我很想弄错。

于 2010-10-22T22:44:37.747 回答
0

这很容易..如果您使用的是...的音频会话,只需更改类别即可

http://developer.apple.com/library/ios/#documentation/Audio/Conceptual/AudioSessionProgrammingGuide/AudioSessionCategories/AudioSessionCategories.html

该链接具有类别...所以使用其中之一,您就可以在后台启动声音:AVAudioSessionCategoryPlayback kAudioSessionCategory_MediaPlayback

  • 环境的可能不起作用。
于 2012-08-26T00:02:20.303 回答
0
//ViewController.h ,write below code
@interface ViewController :   UIViewController<AVAudioRecorderDelegate,AVAudioPlayerDelegate>

//assign property to player
 @property(nonatomic,retain) AVAudioPlayer *player;

//then write in ViewController.m file in ViewDidLoad Method below code

[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback error:nil];
[[AVAudioSession sharedInstance] setActive: YES error: nil];
[[UIApplication sharedApplication] beginReceivingRemoteControlEvents];

NSError *soundError;
NSString *path=[[NSBundle mainBundle]pathForResource:@"soundFileName" ofType:@"mp3"]; //.mp3 file for player
NSURL *file=[[NSURL alloc]initFileURLWithPath:path]; //path
_player=[[AVAudioPlayer alloc]initWithContentsOfURL:file error:&soundError];       //player Object

if(_player == nil)
{
    NSLog(@"player is empty because of %@",soundError);
}
else
{
    [_player play];
    _player.volume=1.0;
    [_player setDelegate:self];
}

// 对于停止播放器,您可以使用 // [_player stop]; //当你想停止它时取消注释这一行。

于 2015-05-19T07:40:05.603 回答