2012-09-29 30 views
4

所以我想讓我的應用程序編輯並保存ID3標籤。在很久以前就如何閱讀他們,我在一些網站上發現,這裏是這個代碼在我的應用程序:在iOS上保存ID3標籤

-(NSDictionary*)MP3InfoDictionary { 
    AudioFileID fileID = nil; 
    OSStatus err = noErr; 

    err = AudioFileOpenURL((CFURLRef) self, kAudioFileReadPermission, 0, &fileID); 
    if (err != noErr) { 
    //NSLog(@"AudioFileOpenURL failed"); 
    } 
    UInt32 id3DataSize = 0; 
    char * rawID3Tag = NULL; 

    err = AudioFileGetPropertyInfo(fileID, kAudioFilePropertyID3Tag, &id3DataSize, NULL); 
    if (err != noErr) { 
    NSLog(@"AudioFileGetPropeetyInfo failed for ID3 tag"); 
    } 
    //NSLog(@"id3 data size is %lu bytes",id3DataSize); 

    rawID3Tag = (char *) malloc(id3DataSize); 
    if (rawID3Tag == NULL) { 
    //NSLog(@"could not allocated %lu bytes of memory for ID3 tag", id3DataSize); 
    } 

    err = AudioFileGetProperty(fileID, kAudioFilePropertyID3Tag, &id3DataSize, rawID3Tag); 
    if (err != noErr) { 
    NSLog(@"AudioFileGetProperty failed for ID3 tag"); 
    } 
    //NSLog(@"read %lu bytes of ID3 info", id3DataSize); 

    CFDictionaryRef piDict = nil; 
    UInt32 piDataSize = sizeof(piDict); 
    free(rawID3Tag); 
    err = AudioFileGetProperty(fileID, kAudioFilePropertyInfoDictionary, &piDataSize, &piDict); 
    if (err != noErr) { 
    //NSLog(@"AudioFileGetProperty failed for property info dictionary"); 
    } 

    //NSLog(@"Property info:%@", (NSDictionary*)piDict); 
    //CFShow(piDict); 

    NSDictionary *MP3InfoDictionary = (NSDictionary*)piDict; 
    if (MP3InfoDictionary != NULL) { 
    return MP3InfoDictionary; 
    } 

    return nil; 
} 

此代碼是一個NSURL類,URL在文檔的mp3文件的URL iOS的目錄。它工作100%,我得到所有的標題,藝術作品,歌詞等,但現在我想保存和覆蓋mp3的價值,如藝術家,標題等。在這裏的另一篇文章中,一個傢伙發佈,你使用AudioFileSetProperty() ,我該如何正確使用它?

顯然這是因爲kAudioFileReadPermission,但它告訴我,MP3只是可讀的,但這不可能是真的,因爲我有另一個應用程序可以更改ID3標籤,並可以在我試圖編輯的相同的MP3。

+1

請在這裏發佈相關的代碼,並附帶警告。你有沒有考慮過使用已經存在多年的ID3庫,而不是自己編寫這個低級別的東西? – trojanfoe

+0

考慮這一點;您無法編輯設備上的媒體文件,因爲存在沙盒。所以你把這個mp3複製到你的項目中,你仍然不能在那裏編輯它(束文件也被保護)。但是您可以將其複製到緩存或文檔目錄。只是想確保您有權使用工作目錄 – 2013-02-19 02:31:18

+0

是的,所有的.mp3文件都在應用程序的文檔文件夾中。 – Maximilian

回答

0

編輯: 看到我下面的第一條評論。它顯示AudioFile不允許修改鏈接中列出的四種類型的文件。

+0

我剛剛在蘋果網站上的技術問答中注意到:http://developer.apple.com/library/mac/#qa/qa1676/_index.html –

+0

我試過打開的網址,我可以完美的讀取ID3,但是有節省了麻煩。我可能已經使用AudioFileSetProperty()錯誤,我使用文件ID和kAudioFilePropertyID3Tag,我不知道該怎麼把inDataSize和inDataProperty – Maximilian

+0

我得到錯誤「的操作無法完成。」當試圖用寫權限打開文件時。 'AudioFileID fileID = nil; OSStatus err = noErr; err = AudioFileOpenURL((__bridge CFURLRef)self,kAudioFileWritePermission,0,&fileID);如果(err!= noErr){Err!= noErr} NSError * error = [NSError errorWithDomain:NSOSStatusErrorDomain code:err userInfo:nil]; NSLog(@「錯誤:%@」,[錯誤描述]); NSLog(@「AudioFileOpenURL failed」); }' – Maximilian