【发布时间】:2011-03-10 14:03:38
【问题描述】:
我正在开发一个 iPhone 应用程序,我需要在 iPhone 上下载并保存 mp3 媒体并播放它, 我完成了下载工作,并将数据放入 NSMutableData 变量但是 如何将这些数据保存为 mp3 文件
任何建议:)
【问题讨论】:
标签: iphone ios4 iphone-sdk-3.0 avaudioplayer
我正在开发一个 iPhone 应用程序,我需要在 iPhone 上下载并保存 mp3 媒体并播放它, 我完成了下载工作,并将数据放入 NSMutableData 变量但是 如何将这些数据保存为 mp3 文件
任何建议:)
【问题讨论】:
标签: iphone ios4 iphone-sdk-3.0 avaudioplayer
如果您想将其保存到您的应用程序文档目录中,文件扩展名为 .mp3,您可以使用以下内容:
NSString *mp3FileName = [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,
NSUserDomainMask,
YES) lastObject]
stringByAppendingPathComponent:@"MyFileName.mp3"];
[[NSFileManager defaultManager] createFileAtPath:mp3FileName
contents:mp3Data
attributes:nil];
mp3Data 是您的 NSMutableData。我使用与上述类似的代码来保存 PDF 文档、自定义文件格式、jpg 和各种文件。我还没有理由尝试 mp3,但没有理由不尝试。
将文件读回 NSData 以发送到 AVAudioPlayer:
NSString *mp3FileName = [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,
NSUserDomainMask,
YES) lastObject]
stringByAppendingPathComponent:@"MyFileName.mp3"];
NSData *mp3Data = [NSData dataWithContentsOfFile:mp3FileName];
avAudioPlayer.data = mp3Data;
以上代码段未经测试,从来没有理由在我的应用程序中使用声音。
【讨论】:
这是正确的解决方案附加在@Diziet 评论上
'//准备数据保存到文件中 NSData *fileData=[[NSData alloc]initWithData:(NSData *)receivedData];
NSString *mp3FileName = [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,YES) lastObject]stringByAppendingPathComponent:@"MyFileName.mp3"];
//create the file
[[NSFileManager defaultManager] createFileAtPath:mp3FileName contents:receivedData attributes:nil];
//load the file for playing
NSString *FileNamePath = [[NSString alloc] initWithString:@"MyFileName.mp3"];
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *appSettingsPath = [documentsDirectory stringByAppendingPathComponent:FileNamePath];
NSURL *url=[[NSURL alloc]initWithString:appSettingsPath ];
player=[[AVAudioPlayer alloc]initWithContentsOfURL:url error:NULL];
player.delegate=self;
[player play];'
【讨论】: