将 mp3 数据保存在 iPhone 上的文件中

Posted

技术标签:

【中文标题】将 mp3 数据保存在 iPhone 上的文件中【英文标题】:save mp3 data in file on iphone 【发布时间】:2011-03-10 14:03:38 【问题描述】:

我正在开发一个 iPhone 应用程序,我需要在 iPhone 上下载并保存 mp3 媒体并播放它, 我完成了下载工作,并将数据放入 NSMutableData 变量但是 如何将这些数据保存为 mp3 文件

任何建议:)

【问题讨论】:

【参考方案1】:

如果您想将其保存到您的应用程序文档目录中,文件扩展名为 .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;

以上代码段未经测试,从来没有理由在我的应用程序中使用声音。

【讨论】:

这样保存后如何播放这个文件? 我猜你使用的是 AVAudioPlayer 的标签?哪个具有 NSData 的数据属性?我从来没有使用过它,但如果你只是将文件读入 NSData 并在 AVAudioPlayer 对象中插入它? Guesswork,但我尝试添加一个 sn-p 来做你想做的事。我的意思是它会用 mp3 填充 NSData 对象,但我对 avaudioplayer 一无所知。【参考方案2】:

这是正确的解决方案附加在@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];'

【讨论】:

如果某个答案对您找到问题的解决方案有帮助,您可以投票吗?即使给定的答案不是最终的解决方案,这样做对回答的人也是有益的,实际上对后来阅读问题的人也是如此。此外,您可能希望编辑您的原始问题以包括您在 cmets 中发布的后续问题,因为这将进一步阐明您接受的答案,以便稍后可能阅读此内容的人。

以上是关于将 mp3 数据保存在 iPhone 上的文件中的主要内容,如果未能解决你的问题,请参考以下文章

合并iPhone上的音频文件

无法将数据保存到 iPhone 上的文件

iPhone SDK:将流式音频文件保存到 Documents 文件夹

iPhone - 从视频文件中分离音频并将其保存到单独的文件中

将 Java 手机/电话上的通话保存为 mp3 或任何音频格式/文件

我可以将下载的文件保存到 iPhone 中的 NSCacheDictionary 吗?