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

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

任何建议:)

【问题讨论】:

    标签: iphone ios4 iphone-sdk-3.0 avaudioplayer


    【解决方案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 中发布的后续问题,因为这将进一步阐明您接受的答案,以便稍后可能阅读此内容的人。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-25
    • 2017-09-06
    • 2011-08-25
    • 2013-08-13
    相关资源
    最近更新 更多