Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 如何在iOS 4中在后台播放多个音频文件?_Iphone_Ios4_Avaudioplayer_Multitasking - Fatal编程技术网

Iphone 如何在iOS 4中在后台播放多个音频文件?

Iphone 如何在iOS 4中在后台播放多个音频文件?,iphone,ios4,avaudioplayer,multitasking,Iphone,Ios4,Avaudioplayer,Multitasking,我使用AVAudioPlayer和AVAudioSession在iPhone应用程序的后台运行音频 现在我的问题是,我已经有了一个书面的代码,可以从用户那里获取大量歌曲作为输入,并使用AVAudioPlayer一首接一首地播放它们 问题是,当应用程序在播放其中一个文件时转到后台,音频会继续播放,但播放完毕后,声音会消失。。。在前台,当一个文件完成时,我只需编写一些代码来播放下一个文件,但在后台,这是不可能的 我想请求一些时间来完成这项工作,并运行我的代码,但我不能这样做,因为音频文件总是在变化,

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

现在我的问题是,我已经有了一个书面的代码,可以从用户那里获取大量歌曲作为输入,并使用AVAudioPlayer一首接一首地播放它们

问题是,当应用程序在播放其中一个文件时转到后台,音频会继续播放,但播放完毕后,声音会消失。。。在前台,当一个文件完成时,我只需编写一些代码来播放下一个文件,但在后台,这是不可能的

我想请求一些时间来完成这项工作,并运行我的代码,但我不能这样做,因为音频文件总是在变化,它们可能会很长。。。那么请告诉我该怎么办?是否有任何内置播放列表播放器作为背景音频运行?或者还有其他解决办法吗?我真的需要把它投入工作


非常感谢

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

这很容易。如果您使用的音频会话是

该链接具有类别…因此使用其中一个,您可以在背景中启动声音: A音频会话类别回放 kAudioSessionCategory_媒体播放

  • 周围的那个可能不起作用
//ViewController.h,写下面的代码
@界面ViewController:UIViewController
//将属性分配给玩家
@属性(非原子,保留)AVAudioPlayer*玩家;
//然后在代码下面的ViewDidLoad方法中写入ViewController.m文件
[[AVAudioSession sharedInstance]设置类别:AVAudioSessionCategoryPlayback错误:nil];
[[AVAudioSession sharedInstance]设置活动:是错误:无];
[[UIApplication sharedApplication]开始接收RemoteControlEvents];
N错误*声音错误;
NSString*path=[[NSBundle mainBundle]pathForResource:@“soundFileName”的类型:@“mp3”];/。mp3播放器文件
NSURL*文件=[[NSURL alloc]initFileURLWithPath:path]//路径
_player=[[AVAudioPlayer alloc]initWithContentsOfURL:文件错误:&soundError]//玩家对象
如果(_player==nil)
{
NSLog(@“播放器因%@”而为空,soundError);
}
其他的
{
[玩家玩];
_播放器。音量=1.0;
[_playersetdelegate:self];
}
//对于停止播放器,您可以使用
//[玩家停止]//如果要停止此行,请取消对其注释。

继续解决此问题,我注意到可以为MPMoviePlayerController提供一个新的URL,而不会被销毁和重新实例化,因此在后台运行时可以保持活动音频会话。(尽管MPMoviePlayer的名字叫MPMoviePlayer,但它只适合音频播放。)
//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];
}