所以我想讓我的應用程序編輯並保存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。
請在這裏發佈相關的代碼,並附帶警告。你有沒有考慮過使用已經存在多年的ID3庫,而不是自己編寫這個低級別的東西? – trojanfoe
考慮這一點;您無法編輯設備上的媒體文件,因爲存在沙盒。所以你把這個mp3複製到你的項目中,你仍然不能在那裏編輯它(束文件也被保護)。但是您可以將其複製到緩存或文檔目錄。只是想確保您有權使用工作目錄 – 2013-02-19 02:31:18
是的,所有的.mp3文件都在應用程序的文檔文件夾中。 – Maximilian