~njh-aelius/maxosx/mp3-isrc

« back to all changes in this revision

Viewing changes to Metadata/AudioMetadata.mm

  • Committer: stephen_booth
  • Date: 2008-04-30 02:17:10 UTC
  • Revision ID: svn-v4:6b6cea13-1402-0410-9567-a7afb52bf336:trunk:1375
Add metadata reading/writing for Speex files

Show diffs side-by-side

added added

removed removed

Lines of Context:
26
26
#include <taglib/mpegfile.h>                            // TagLib::MPEG::File
27
27
#include <taglib/vorbisfile.h>                          // TagLib::Ogg::Vorbis::File
28
28
#include <taglib/oggflacfile.h>                         // TagLib::Ogg::FLAC::File
 
29
#include <taglib/speexfile.h>                           // TagLib::Ogg::Speex::File
29
30
#include <taglib/id3v2tag.h>                            // TagLib::ID3v2::Tag
30
31
#include <taglib/id3v2frame.h>                          // TagLib::ID3v2::Frame
31
32
#include <taglib/attachedpictureframe.h>        // TagLib::ID3V2::AttachedPictureFrame
48
49
+ (AudioMetadata *)             metadataFromMP4File:(NSString *)filename;
49
50
+ (AudioMetadata *)             metadataFromOggVorbisFile:(NSString *)filename;
50
51
+ (AudioMetadata *)             metadataFromOggFLACFile:(NSString *)filename;
 
52
+ (AudioMetadata *)             metadataFromOggSpeexFile:(NSString *)filename;
51
53
+ (AudioMetadata *)             metadataFromMonkeysAudioFile:(NSString *)filename;
52
54
+ (AudioMetadata *)             metadataFromWavPackFile:(NSString *)filename;
53
55
+ (AudioMetadata *)             metadataFromMusepackFile:(NSString *)filename;
87
89
                switch(type) {
88
90
                        case kOggStreamTypeVorbis:              result = [self metadataFromOggVorbisFile:filename];                     break;
89
91
                        case kOggStreamTypeFLAC:                result = [self metadataFromOggFLACFile:filename];                       break;
90
 
                        case kOggStreamTypeSpeex:               result = [[[AudioMetadata alloc] init] autorelease];            break;
 
92
                        case kOggStreamTypeSpeex:               result = [self metadataFromOggSpeexFile:filename];                      break;
91
93
                        default:                                                result = [[[AudioMetadata alloc] init] autorelease];            break;
92
94
                }
93
95
 
101
103
                return [self metadataFromWavPackFile:filename];
102
104
        else if([extension isEqualToString:@"mpc"])
103
105
                return [self metadataFromMusepackFile:filename];
 
106
        else if([extension isEqualToString:@"spx"])
 
107
                return [self metadataFromOggSpeexFile:filename];
104
108
        else
105
109
                return [[[AudioMetadata alloc] init] autorelease];
106
110
}
946
950
        return [result autorelease];
947
951
}
948
952
 
 
953
+ (AudioMetadata *)     metadataFromOggSpeexFile:(NSString *)filename
 
954
{
 
955
        AudioMetadata                                                   *result;
 
956
        TagLib::Ogg::Speex::File                                f                                               ([filename fileSystemRepresentation], false);
 
957
        TagLib::String                                                  s;
 
958
        TagLib::Ogg::XiphComment                                *xiphComment;
 
959
        
 
960
        
 
961
        result = [[AudioMetadata alloc] init];
 
962
        
 
963
        if(f.isValid()) {
 
964
                
 
965
                xiphComment = f.tag();
 
966
                
 
967
                if(NULL != xiphComment) {
 
968
                        TagLib::Ogg::FieldListMap               fieldList       = xiphComment->fieldListMap();
 
969
                        NSString                                                *value          = nil;
 
970
                        TagLib::String                                  tag;
 
971
                        
 
972
                        tag = [self customizeOggFLACTag:@"ALBUM"];
 
973
                        if(fieldList.contains(tag)) {
 
974
                                value = [NSString stringWithUTF8String:fieldList[tag].toString().toCString(true)];
 
975
                                [result setAlbumTitle:value];
 
976
                        }
 
977
                        
 
978
                        tag = [self customizeOggFLACTag:@"ARTIST"];
 
979
                        if(fieldList.contains(tag)) {
 
980
                                value = [NSString stringWithUTF8String:fieldList[tag].toString().toCString(true)];
 
981
                                [result setAlbumArtist:value];
 
982
                        }
 
983
                        
 
984
                        tag = [self customizeOggFLACTag:@"GENRE"];
 
985
                        if(fieldList.contains(tag)) {
 
986
                                value = [NSString stringWithUTF8String:fieldList[tag].toString().toCString(true)];
 
987
                                [result setAlbumGenre:value];
 
988
                        }
 
989
                        
 
990
                        tag = [self customizeOggFLACTag:@"DATE"];
 
991
                        if(fieldList.contains(tag)) {
 
992
                                value = [NSString stringWithUTF8String:fieldList[tag].toString().toCString(true)];
 
993
                                [result setAlbumDate:value];
 
994
                        }
 
995
                        
 
996
                        tag = [self customizeOggFLACTag:@"DESCRIPTION"];
 
997
                        if(fieldList.contains(tag)) {
 
998
                                value = [NSString stringWithUTF8String:fieldList[tag].toString().toCString(true)];
 
999
                                [result setAlbumComment:value];
 
1000
                        }
 
1001
                        
 
1002
                        tag = [self customizeOggFLACTag:@"TITLE"];
 
1003
                        if(fieldList.contains(tag)) {
 
1004
                                value = [NSString stringWithUTF8String:fieldList[tag].toString().toCString(true)];
 
1005
                                [result setTrackTitle:value];
 
1006
                        }
 
1007
                        
 
1008
                        tag = [self customizeOggFLACTag:@"TRACKNUMBER"];
 
1009
                        if(fieldList.contains(tag)) {
 
1010
                                value = [NSString stringWithUTF8String:fieldList[tag].toString().toCString(true)];
 
1011
                                [result setTrackNumber:[NSNumber numberWithInt:[value intValue]]];
 
1012
                        }
 
1013
                        
 
1014
                        tag = [self customizeOggFLACTag:@"COMPOSER"];
 
1015
                        if(fieldList.contains(tag)) {
 
1016
                                value = [NSString stringWithUTF8String:fieldList[tag].toString().toCString(true)];
 
1017
                                [result setAlbumComposer:value];
 
1018
                        }
 
1019
                        
 
1020
                        tag = [self customizeOggFLACTag:@"TRACKTOTAL"];
 
1021
                        if(fieldList.contains(tag)) {
 
1022
                                value = [NSString stringWithUTF8String:fieldList[tag].toString().toCString(true)];
 
1023
                                [result setTrackTotal:[NSNumber numberWithInt:[value intValue]]];
 
1024
                        }
 
1025
                        
 
1026
                        tag = [self customizeOggFLACTag:@"DISCNUMBER"];
 
1027
                        if(fieldList.contains(tag)) {
 
1028
                                value = [NSString stringWithUTF8String:fieldList[tag].toString().toCString(true)];
 
1029
                                [result setDiscNumber:[NSNumber numberWithInt:[value intValue]]];
 
1030
                        }
 
1031
                        
 
1032
                        tag = [self customizeOggFLACTag:@"DISCTOTAL"];
 
1033
                        if(fieldList.contains(tag)) {
 
1034
                                value = [NSString stringWithUTF8String:fieldList[tag].toString().toCString(true)];
 
1035
                                [result setDiscTotal:[NSNumber numberWithInt:[value intValue]]];
 
1036
                        }
 
1037
                        
 
1038
                        tag = [self customizeOggFLACTag:@"COMPILATION"];
 
1039
                        if(fieldList.contains(tag)) {
 
1040
                                value = [NSString stringWithUTF8String:fieldList[tag].toString().toCString(true)];
 
1041
                                [result setCompilation:[NSNumber numberWithBool:(BOOL)[value intValue]]];
 
1042
                        }
 
1043
                        
 
1044
                        tag = [self customizeOggFLACTag:@"ISRC"];
 
1045
                        if(fieldList.contains(tag)) {
 
1046
                                value = [NSString stringWithUTF8String:fieldList[tag].toString().toCString(true)];
 
1047
                                [result setISRC:value];
 
1048
                        }                                       
 
1049
                        
 
1050
                        tag = [self customizeOggFLACTag:@"MCN"];
 
1051
                        if(fieldList.contains(tag)) {
 
1052
                                value = [NSString stringWithUTF8String:fieldList[tag].toString().toCString(true)];
 
1053
                                [result setMCN:value];
 
1054
                        }                                       
 
1055
                        
 
1056
                        // Maintain backwards compatibility for the following tags
 
1057
                        if(fieldList.contains("DISCSINSET") && nil == [result discTotal]) {
 
1058
                                value = [NSString stringWithUTF8String:fieldList["DISCSINSET"].toString().toCString(true)];
 
1059
                                [result setDiscTotal:[NSNumber numberWithInt:[value intValue]]];
 
1060
                        }
 
1061
                        if(fieldList.contains("YEAR") && nil == [result albumDate]) {
 
1062
                                value = [NSString stringWithUTF8String:fieldList["YEAR"].toString().toCString(true)];
 
1063
                                [result setAlbumDate:value];
 
1064
                        }
 
1065
                        if(fieldList.contains("COMMENT") && nil == [result albumComment]) {
 
1066
                                value = [NSString stringWithUTF8String:fieldList["COMMENT"].toString().toCString(true)];
 
1067
                                [result setAlbumComment:value];
 
1068
                        }
 
1069
                }
 
1070
                
 
1071
                // Length
 
1072
                if(NULL != f.audioProperties() && 0 != f.audioProperties()->length())
 
1073
                        [result setLength:[NSNumber numberWithInt:f.audioProperties()->length()]];
 
1074
        }
 
1075
        
 
1076
        return [result autorelease];
 
1077
}
 
1078
 
949
1079
+ (AudioMetadata *) metadataFromMonkeysAudioFile:(NSString *)filename
950
1080
{
951
1081
        AudioMetadata                                   *result                                 = [[AudioMetadata alloc] init];