注: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;
}
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];