mp3ファイルからID3タグを読み込むサンプル
多分合ってる。試したOSバージョンは10.7.2(Lion)
// gcc -Wall -framework AudioToolbox -framework CoreServices -o main main.c #import <AudioToolbox/AudioToolbox.h> int main (int argc, const char * argv[]) { const char* inputFile = "sample.mp3"; AudioFileID audioFile; CFURLRef urlRef = CFURLCreateFromFileSystemRepresentation( kCFAllocatorDefault, (const UInt8 *)inputFile, strlen(inputFile), false); OSStatus err = noErr; err = AudioFileOpenURL(urlRef, kAudioFileReadPermission, 0, &audioFile); CFRelease(urlRef); if (err != noErr) { fprintf(stderr, "*** Failed to open file:%s. OSStatus=%d\n", inputFile, err); exit(err); } // read ID3 tag size f/file UInt32 id3tagSize; UInt32 isWritable; err = AudioFileGetPropertyInfo(audioFile, kAudioFilePropertyID3Tag, &id3tagSize, &isWritable); fprintf(stderr, "### id3tagSize = %d, isWritable=%d\n", id3tagSize, isWritable); if (err != noErr) { fprintf(stderr, "*** Failed to get ID3 tag size f/file:%s. OSStatus=%d\n", inputFile, err); AudioFileClose(audioFile); exit(err); } // read ID3 tag f/file char *id3tagBuf = malloc(id3tagSize); err = AudioFileGetProperty(audioFile,kAudioFilePropertyID3Tag, &id3tagSize, id3tagBuf); if (err != noErr) { fprintf(stderr, "*** Failed to get ID3 tag f/file:%s. OSStatus=%d\n", inputFile, err); free(id3tagBuf); AudioFileClose(audioFile); exit(err); } // convert ID3 tag to CFDictionary CFDictionaryRef dictRef = nil; UInt32 dictRefSize = sizeof(dictRef); err = AudioFormatGetProperty(kAudioFormatProperty_ID3TagToDictionary, id3tagSize, id3tagBuf, &dictRefSize, &dictRef); if (err != noErr) { fprintf(stderr, "*** Failed to convert ID3 tag to CFDict. OSStatus=%d\n", err); free(id3tagBuf); AudioFileClose(audioFile); exit(err); } // debug print CFShow(dictRef); // release buffers free(id3tagBuf); CFRelease(dictRef); // close file AudioFileClose(audioFile); return 0; }
しかしどうやって書き込もう……