2011-12-28 19 views
5

Mam trudności pisanie metadanych pliku audio za:AudioFileSetProperty powrocie 'kAudioFileUnsupportedPropertyError (? PTY)'

AudioFileID fileID = nil; 
AudioFileOpenURL((__bridge CFURLRef) url, kAudioFileReadWritePermission, 0, &fileID); 
CFDictionaryRef piDict = nil; 
UInt32 piDataSize = sizeof(piDict); 
AudioFileGetProperty(fileID, kAudioFilePropertyInfoDictionary, &piDataSize, &piDict); 
NSLog(@"%@", (__bridge NSDictionary *)piDict); 

NSMutableDictionary *dict = (__bridge NSMutableDictionary*)piDict; 
[dict setObject:@"NEW ALBUM NAME" forKey:@"album"]; 
piDict = (__bridge CFDictionaryRef)dict; 
piDataSize = sizeof(dict); 
OSStatus status = AudioFileSetProperty(fileID, kAudioFilePropertyInfoDictionary, piDataSize, &piDict); 

NSLog na linii # 6 daje mi piękny słownik z informacji ID3. Ale kiedy chcę zmienić (na przykład nazwę albumu, wiersz # 9), otrzymuję OSStatus "pty?" w zamian.

Każdy, kto może mi wskazać, co robię źle. A może jeszcze lepszy/prostszy/szybszy sposób edycji tagów ID3/metadanych dla plików audio.

Odpowiedz

4

Robi się prawie to samo. Możesz sprawdzić błąd OSStatus za pomocą następującego kodu.

NSError *error = [NSError errorWithDomain:NSOSStatusErrorDomain code:status userInfo:nil]; 
NSLog(@"Error: %@", [error description]); 

I co mam to:

Error: Error Domain=NSOSStatusErrorDomain Code=1886681407 "The operation couldn’t be completed. (OSStatus error 1886681407.)"

Czyżby iOS po prostu nie pozwalają modyfikować kAudioFilePropertyInfoDictionary?


Aktualizacja:

Właśnie przeniesiony idlib3 do iOS i można go używać do modyfikowania ID3. Dołączony jest również przykładowy projekt. Sprawdź to tutaj https://github.com/rjyo/libid3-ios

+0

Nie wiem. Nie można znaleźć dokumentacji o ograniczeniach AudioFileSetProperty. Inne metody Core Audio działają doskonale na iOS. – basvk

+2

Po prostu portowałem idlib3 do iOS i można go użyć do modyfikacji tagu ID3. Dołączony jest również przykładowy projekt. Sprawdź to tutaj https://github.com/rjyo/libid3-ios – rjyo

+0

Dzięki @Lele Xu, sprawdzę to. – basvk