您的位置:首页 > 理论基础 > 计算机网络

使用AVAudioPlayer播放网络上的音频

2015-09-03 13:44 579 查看
注:ios中的AVAudioPlayer不支持变下边播放,所以只能存储到本地进行播放

一、在.m中定义对象

#define AUDIO_PATH @"/AudioCache"
@property (nonatomic,strong)AVAudioPlayer* player;

二、根据路径,创建目录,如果创建失败,则返回

NSString *cachPath = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory,NSUserDomainMask, YES) objectAtIndex:0];
NSString* fullPath = [cachPath stringByAppendingString:AUDIO_PATH];
NSString* filePath = @"";
if([self createDirectory:fullPath])
{
filePath = [NSString stringWithFormat:@"%@/%@.aud",fullPath,item.id];
}
else
{
return;
}


-(BOOL)createDirectory:(NSString*)audioPath
{
NSFileManager* fileManager = [NSFileManager defaultManager];

BOOL isDirExist = [fileManager fileExistsAtPath:audioPath
isDirectory:nil];
if(!isDirExist)
{
BOOL bCreateDir = [fileManager createDirectoryAtPath:audioPath
withIntermediateDirectories:YES
attributes:nil
error:nil];

if(!bCreateDir){

NSLog(@"创建文件夹失败");
return NO;

}
}
return YES;
}


三、将网络音频转化为NSDate,并写入文件

NSURL* url = [[NSURL alloc] initWithString:item.audUrl];
NSData* audioData = [NSData dataWithContentsOfURL:url];


//atomically:YES,表示写成功后(会写入到临时文件中)再覆盖文件,若写入失败,则不会覆盖文件,这样更安全。
BOOL isSuccess = NO;
if(![[NSFileManager defaultManager] fileExistsAtPath:filePath])
{
isSuccess = [audioData writeToFile:filePath atomically:YES];
}
else
{
isSuccess = YES;
}

四、播放音频

if(!isSuccess){
NSLog(@"写入失败");
return;
}else
{
NSLog(@"写入成功");
//播放本地音乐
if(!TARGET_IPHONE_SIMULATOR)
{
self.player = nil;
NSError *playerError;
NSURL* fileURL = [NSURL fileURLWithPath:filePath];
self.player = [[AVAudioPlayer alloc] initWithContentsOfURL:fileURL error:&playerError];
if(self.player == nil)
{
NSLog(@"ERror creating player: %@", [playerError description]);
}
else
{
[self.player play];
}
}
}


五、停止播放音频
[self.player stop];
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: