Greatly improve tag reading performance

Improve tag reading performance for Ogg, Opus, FLAC, TTA, and TAK, by
eliminating TagLib from the equation in those cases and just using the
respective file inputs to do the tag reading, which is apparently a lot
faster anyway.

Signed-off-by: Christopher Snowhill <kode54@gmail.com>
lastfm
Christopher Snowhill 2022-07-05 00:55:21 -07:00
parent 22cd16bb46
commit 45ec7b6263
6 changed files with 164 additions and 539 deletions

View File

@ -8,16 +8,6 @@
/* Begin PBXBuildFile section */
32AE5A5A14E70ED600420CA0 /* config.h in Headers */ = {isa = PBXBuildFile; fileRef = 32AE59A014E70ED600420CA0 /* config.h */; settings = {ATTRIBUTES = (Public, ); }; };
32AE5A5C14E70ED600420CA0 /* apefile.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 32AE59A414E70ED600420CA0 /* apefile.cpp */; };
32AE5A5D14E70ED600420CA0 /* apefile.h in Headers */ = {isa = PBXBuildFile; fileRef = 32AE59A514E70ED600420CA0 /* apefile.h */; settings = {ATTRIBUTES = (Public, ); }; };
32AE5A5E14E70ED600420CA0 /* apefooter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 32AE59A614E70ED600420CA0 /* apefooter.cpp */; };
32AE5A5F14E70ED600420CA0 /* apefooter.h in Headers */ = {isa = PBXBuildFile; fileRef = 32AE59A714E70ED600420CA0 /* apefooter.h */; settings = {ATTRIBUTES = (Public, ); }; };
32AE5A6014E70ED600420CA0 /* apeitem.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 32AE59A814E70ED600420CA0 /* apeitem.cpp */; };
32AE5A6114E70ED600420CA0 /* apeitem.h in Headers */ = {isa = PBXBuildFile; fileRef = 32AE59A914E70ED600420CA0 /* apeitem.h */; settings = {ATTRIBUTES = (Public, ); }; };
32AE5A6214E70ED600420CA0 /* apeproperties.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 32AE59AA14E70ED600420CA0 /* apeproperties.cpp */; };
32AE5A6314E70ED600420CA0 /* apeproperties.h in Headers */ = {isa = PBXBuildFile; fileRef = 32AE59AB14E70ED600420CA0 /* apeproperties.h */; settings = {ATTRIBUTES = (Public, ); }; };
32AE5A6414E70ED600420CA0 /* apetag.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 32AE59AC14E70ED600420CA0 /* apetag.cpp */; };
32AE5A6514E70ED600420CA0 /* apetag.h in Headers */ = {isa = PBXBuildFile; fileRef = 32AE59AD14E70ED600420CA0 /* apetag.h */; settings = {ATTRIBUTES = (Public, ); }; };
32AE5A6614E70ED600420CA0 /* asfattribute.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 32AE59AF14E70ED600420CA0 /* asfattribute.cpp */; };
32AE5A6714E70ED600420CA0 /* asfattribute.h in Headers */ = {isa = PBXBuildFile; fileRef = 32AE59B014E70ED600420CA0 /* asfattribute.h */; settings = {ATTRIBUTES = (Public, ); }; };
32AE5A6814E70ED600420CA0 /* asffile.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 32AE59B114E70ED600420CA0 /* asffile.cpp */; };
@ -32,15 +22,6 @@
32AE5A7114E70ED600420CA0 /* audioproperties.h in Headers */ = {isa = PBXBuildFile; fileRef = 32AE59BA14E70ED600420CA0 /* audioproperties.h */; settings = {ATTRIBUTES = (Public, ); }; };
32AE5A7214E70ED600420CA0 /* fileref.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 32AE59BB14E70ED600420CA0 /* fileref.cpp */; };
32AE5A7314E70ED600420CA0 /* fileref.h in Headers */ = {isa = PBXBuildFile; fileRef = 32AE59BC14E70ED600420CA0 /* fileref.h */; settings = {ATTRIBUTES = (Public, ); }; };
32AE5A7414E70ED600420CA0 /* flacfile.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 32AE59BE14E70ED600420CA0 /* flacfile.cpp */; };
32AE5A7614E70ED600420CA0 /* flacmetadatablock.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 32AE59C014E70ED600420CA0 /* flacmetadatablock.cpp */; };
32AE5A7714E70ED600420CA0 /* flacmetadatablock.h in Headers */ = {isa = PBXBuildFile; fileRef = 32AE59C114E70ED600420CA0 /* flacmetadatablock.h */; settings = {ATTRIBUTES = (Public, ); }; };
32AE5A7814E70ED600420CA0 /* flacpicture.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 32AE59C214E70ED600420CA0 /* flacpicture.cpp */; };
32AE5A7914E70ED600420CA0 /* flacpicture.h in Headers */ = {isa = PBXBuildFile; fileRef = 32AE59C314E70ED600420CA0 /* flacpicture.h */; settings = {ATTRIBUTES = (Public, ); }; };
32AE5A7A14E70ED600420CA0 /* flacproperties.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 32AE59C414E70ED600420CA0 /* flacproperties.cpp */; };
32AE5A7B14E70ED600420CA0 /* flacproperties.h in Headers */ = {isa = PBXBuildFile; fileRef = 32AE59C514E70ED600420CA0 /* flacproperties.h */; settings = {ATTRIBUTES = (Public, ); }; };
32AE5A7C14E70ED600420CA0 /* flacunknownmetadatablock.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 32AE59C614E70ED600420CA0 /* flacunknownmetadatablock.cpp */; };
32AE5A7D14E70ED600420CA0 /* flacunknownmetadatablock.h in Headers */ = {isa = PBXBuildFile; fileRef = 32AE59C714E70ED600420CA0 /* flacunknownmetadatablock.h */; settings = {ATTRIBUTES = (Public, ); }; };
32AE5A8A14E70ED600420CA0 /* mpcfile.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 32AE59D614E70ED600420CA0 /* mpcfile.cpp */; };
32AE5A8B14E70ED600420CA0 /* mpcfile.h in Headers */ = {isa = PBXBuildFile; fileRef = 32AE59D714E70ED600420CA0 /* mpcfile.h */; settings = {ATTRIBUTES = (Public, ); }; };
32AE5A8C14E70ED600420CA0 /* mpcproperties.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 32AE59D814E70ED600420CA0 /* mpcproperties.cpp */; };
@ -81,24 +62,6 @@
32AE5ABF14E70ED600420CA0 /* mpegproperties.h in Headers */ = {isa = PBXBuildFile; fileRef = 32AE5A0F14E70ED600420CA0 /* mpegproperties.h */; settings = {ATTRIBUTES = (Public, ); }; };
32AE5AC014E70ED600420CA0 /* xingheader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 32AE5A1014E70ED600420CA0 /* xingheader.cpp */; };
32AE5AC114E70ED600420CA0 /* xingheader.h in Headers */ = {isa = PBXBuildFile; fileRef = 32AE5A1114E70ED600420CA0 /* xingheader.h */; settings = {ATTRIBUTES = (Public, ); }; };
32AE5AC214E70ED600420CA0 /* oggflacfile.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 32AE5A1414E70ED600420CA0 /* oggflacfile.cpp */; };
32AE5AC314E70ED600420CA0 /* oggflacfile.h in Headers */ = {isa = PBXBuildFile; fileRef = 32AE5A1514E70ED600420CA0 /* oggflacfile.h */; settings = {ATTRIBUTES = (Public, ); }; };
32AE5AC414E70ED600420CA0 /* oggfile.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 32AE5A1614E70ED600420CA0 /* oggfile.cpp */; };
32AE5AC514E70ED600420CA0 /* oggfile.h in Headers */ = {isa = PBXBuildFile; fileRef = 32AE5A1714E70ED600420CA0 /* oggfile.h */; settings = {ATTRIBUTES = (Public, ); }; };
32AE5AC614E70ED600420CA0 /* oggpage.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 32AE5A1814E70ED600420CA0 /* oggpage.cpp */; };
32AE5AC714E70ED600420CA0 /* oggpage.h in Headers */ = {isa = PBXBuildFile; fileRef = 32AE5A1914E70ED600420CA0 /* oggpage.h */; settings = {ATTRIBUTES = (Public, ); }; };
32AE5AC814E70ED600420CA0 /* oggpageheader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 32AE5A1A14E70ED600420CA0 /* oggpageheader.cpp */; };
32AE5AC914E70ED600420CA0 /* oggpageheader.h in Headers */ = {isa = PBXBuildFile; fileRef = 32AE5A1B14E70ED600420CA0 /* oggpageheader.h */; settings = {ATTRIBUTES = (Public, ); }; };
32AE5ACA14E70ED600420CA0 /* speexfile.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 32AE5A1D14E70ED600420CA0 /* speexfile.cpp */; };
32AE5ACB14E70ED600420CA0 /* speexfile.h in Headers */ = {isa = PBXBuildFile; fileRef = 32AE5A1E14E70ED600420CA0 /* speexfile.h */; settings = {ATTRIBUTES = (Public, ); }; };
32AE5ACC14E70ED600420CA0 /* speexproperties.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 32AE5A1F14E70ED600420CA0 /* speexproperties.cpp */; };
32AE5ACD14E70ED600420CA0 /* speexproperties.h in Headers */ = {isa = PBXBuildFile; fileRef = 32AE5A2014E70ED600420CA0 /* speexproperties.h */; settings = {ATTRIBUTES = (Public, ); }; };
32AE5ACE14E70ED600420CA0 /* vorbisfile.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 32AE5A2214E70ED600420CA0 /* vorbisfile.cpp */; };
32AE5ACF14E70ED600420CA0 /* vorbisfile.h in Headers */ = {isa = PBXBuildFile; fileRef = 32AE5A2314E70ED600420CA0 /* vorbisfile.h */; settings = {ATTRIBUTES = (Public, ); }; };
32AE5AD014E70ED600420CA0 /* vorbisproperties.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 32AE5A2414E70ED600420CA0 /* vorbisproperties.cpp */; };
32AE5AD114E70ED600420CA0 /* vorbisproperties.h in Headers */ = {isa = PBXBuildFile; fileRef = 32AE5A2514E70ED600420CA0 /* vorbisproperties.h */; settings = {ATTRIBUTES = (Public, ); }; };
32AE5AD214E70ED600420CA0 /* xiphcomment.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 32AE5A2614E70ED600420CA0 /* xiphcomment.cpp */; };
32AE5AD314E70ED600420CA0 /* xiphcomment.h in Headers */ = {isa = PBXBuildFile; fileRef = 32AE5A2714E70ED600420CA0 /* xiphcomment.h */; settings = {ATTRIBUTES = (Public, ); }; };
32AE5AD414E70ED600420CA0 /* aifffile.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 32AE5A2A14E70ED600420CA0 /* aifffile.cpp */; };
32AE5AD514E70ED600420CA0 /* aifffile.h in Headers */ = {isa = PBXBuildFile; fileRef = 32AE5A2B14E70ED600420CA0 /* aifffile.h */; settings = {ATTRIBUTES = (Public, ); }; };
32AE5AD614E70ED600420CA0 /* aiffproperties.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 32AE5A2C14E70ED600420CA0 /* aiffproperties.cpp */; };
@ -125,10 +88,6 @@
32AE5AF214E70ED600420CA0 /* tstring.h in Headers */ = {isa = PBXBuildFile; fileRef = 32AE5A4A14E70ED600420CA0 /* tstring.h */; settings = {ATTRIBUTES = (Public, ); }; };
32AE5AF314E70ED600420CA0 /* tstringlist.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 32AE5A4B14E70ED600420CA0 /* tstringlist.cpp */; };
32AE5AF414E70ED600420CA0 /* tstringlist.h in Headers */ = {isa = PBXBuildFile; fileRef = 32AE5A4C14E70ED600420CA0 /* tstringlist.h */; settings = {ATTRIBUTES = (Public, ); }; };
32AE5AF714E70ED700420CA0 /* trueaudiofile.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 32AE5A5014E70ED600420CA0 /* trueaudiofile.cpp */; };
32AE5AF814E70ED700420CA0 /* trueaudiofile.h in Headers */ = {isa = PBXBuildFile; fileRef = 32AE5A5114E70ED600420CA0 /* trueaudiofile.h */; settings = {ATTRIBUTES = (Public, ); }; };
32AE5AF914E70ED700420CA0 /* trueaudioproperties.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 32AE5A5214E70ED600420CA0 /* trueaudioproperties.cpp */; };
32AE5AFA14E70ED700420CA0 /* trueaudioproperties.h in Headers */ = {isa = PBXBuildFile; fileRef = 32AE5A5314E70ED600420CA0 /* trueaudioproperties.h */; settings = {ATTRIBUTES = (Public, ); }; };
32AE5AFB14E70ED700420CA0 /* wavpackfile.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 32AE5A5514E70ED600420CA0 /* wavpackfile.cpp */; };
32AE5AFC14E70ED700420CA0 /* wavpackfile.h in Headers */ = {isa = PBXBuildFile; fileRef = 32AE5A5614E70ED600420CA0 /* wavpackfile.h */; settings = {ATTRIBUTES = (Public, ); }; };
32AE5AFD14E70ED700420CA0 /* wavpackproperties.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 32AE5A5714E70ED600420CA0 /* wavpackproperties.cpp */; };
@ -136,11 +95,19 @@
32AE5AFF14E70ED700420CA0 /* taglib_config.h in Headers */ = {isa = PBXBuildFile; fileRef = 32AE5A5914E70ED600420CA0 /* taglib_config.h */; settings = {ATTRIBUTES = (Public, ); }; };
32AE5B0014E70F4700420CA0 /* tlist.tcc in Headers */ = {isa = PBXBuildFile; fileRef = 32AE5A4614E70ED600420CA0 /* tlist.tcc */; settings = {ATTRIBUTES = (Public, ); }; };
32AE5B0114E70F4A00420CA0 /* tmap.tcc in Headers */ = {isa = PBXBuildFile; fileRef = 32AE5A4814E70ED600420CA0 /* tmap.tcc */; settings = {ATTRIBUTES = (Public, ); }; };
83790D241809E8CA0073CF51 /* opusfile.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 83790D201809E8CA0073CF51 /* opusfile.cpp */; };
83790D261809E8CA0073CF51 /* opusproperties.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 83790D221809E8CA0073CF51 /* opusproperties.cpp */; };
83942C67269116530058BD3B /* flacfile.h in Headers */ = {isa = PBXBuildFile; fileRef = 32AE59BF14E70ED600420CA0 /* flacfile.h */; settings = {ATTRIBUTES = (Public, ); }; };
83AF2CBE2622643300538240 /* apegenfile.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 83AF2CBC2622643300538240 /* apegenfile.cpp */; };
83AF2CBF2622643300538240 /* apegenfile.h in Headers */ = {isa = PBXBuildFile; fileRef = 83AF2CBD2622643300538240 /* apegenfile.h */; };
8315534428741C7A00D4D746 /* apeproperties.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8315533728741C7A00D4D746 /* apeproperties.cpp */; };
8315534528741C7A00D4D746 /* apefile.h in Headers */ = {isa = PBXBuildFile; fileRef = 8315533828741C7A00D4D746 /* apefile.h */; };
8315534628741C7A00D4D746 /* apeproperties.h in Headers */ = {isa = PBXBuildFile; fileRef = 8315533928741C7A00D4D746 /* apeproperties.h */; };
8315534728741C7A00D4D746 /* apeitem.h in Headers */ = {isa = PBXBuildFile; fileRef = 8315533A28741C7A00D4D746 /* apeitem.h */; };
8315534828741C7A00D4D746 /* apefile.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8315533B28741C7A00D4D746 /* apefile.cpp */; };
8315534928741C7A00D4D746 /* ape-tag-format.txt in Resources */ = {isa = PBXBuildFile; fileRef = 8315533C28741C7A00D4D746 /* ape-tag-format.txt */; };
8315534A28741C7A00D4D746 /* apefooter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8315533D28741C7A00D4D746 /* apefooter.cpp */; };
8315534B28741C7A00D4D746 /* apetag.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8315533E28741C7A00D4D746 /* apetag.cpp */; };
8315534C28741C7A00D4D746 /* apefooter.h in Headers */ = {isa = PBXBuildFile; fileRef = 8315533F28741C7A00D4D746 /* apefooter.h */; };
8315534D28741C7A00D4D746 /* apeitem.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8315534028741C7A00D4D746 /* apeitem.cpp */; };
8315534E28741C7A00D4D746 /* apegenfile.h in Headers */ = {isa = PBXBuildFile; fileRef = 8315534128741C7A00D4D746 /* apegenfile.h */; };
8315534F28741C7A00D4D746 /* apetag.h in Headers */ = {isa = PBXBuildFile; fileRef = 8315534228741C7A00D4D746 /* apetag.h */; };
8315535028741C7A00D4D746 /* apegenfile.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8315534328741C7A00D4D746 /* apegenfile.cpp */; };
83B46FCA2707EED200847FC9 /* libiconv.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = 83B46FC92707EED200847FC9 /* libiconv.tbd */; };
83B46FCC2707EEDB00847FC9 /* libz.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = 83B46FCB2707EEDB00847FC9 /* libz.tbd */; };
8DC2EF530486A6940098B216 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 089C1666FE841158C02AAC07 /* InfoPlist.strings */; };
@ -188,17 +155,6 @@
/* Begin PBXFileReference section */
174C7A360F4FD43100E18B0F /* libz.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libz.dylib; path = /usr/lib/libz.dylib; sourceTree = "<absolute>"; };
32AE59A014E70ED600420CA0 /* config.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = config.h; path = taglib/config.h; sourceTree = "<group>"; };
32AE59A314E70ED600420CA0 /* ape-tag-format.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "ape-tag-format.txt"; sourceTree = "<group>"; };
32AE59A414E70ED600420CA0 /* apefile.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = apefile.cpp; sourceTree = "<group>"; };
32AE59A514E70ED600420CA0 /* apefile.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = apefile.h; sourceTree = "<group>"; };
32AE59A614E70ED600420CA0 /* apefooter.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = apefooter.cpp; sourceTree = "<group>"; };
32AE59A714E70ED600420CA0 /* apefooter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = apefooter.h; sourceTree = "<group>"; };
32AE59A814E70ED600420CA0 /* apeitem.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = apeitem.cpp; sourceTree = "<group>"; };
32AE59A914E70ED600420CA0 /* apeitem.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = apeitem.h; sourceTree = "<group>"; };
32AE59AA14E70ED600420CA0 /* apeproperties.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = apeproperties.cpp; sourceTree = "<group>"; };
32AE59AB14E70ED600420CA0 /* apeproperties.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = apeproperties.h; sourceTree = "<group>"; };
32AE59AC14E70ED600420CA0 /* apetag.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = apetag.cpp; sourceTree = "<group>"; };
32AE59AD14E70ED600420CA0 /* apetag.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = apetag.h; sourceTree = "<group>"; };
32AE59AF14E70ED600420CA0 /* asfattribute.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = asfattribute.cpp; sourceTree = "<group>"; };
32AE59B014E70ED600420CA0 /* asfattribute.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = asfattribute.h; sourceTree = "<group>"; };
32AE59B114E70ED600420CA0 /* asffile.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = asffile.cpp; sourceTree = "<group>"; };
@ -213,16 +169,6 @@
32AE59BA14E70ED600420CA0 /* audioproperties.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = audioproperties.h; sourceTree = "<group>"; };
32AE59BB14E70ED600420CA0 /* fileref.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = fileref.cpp; sourceTree = "<group>"; };
32AE59BC14E70ED600420CA0 /* fileref.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = fileref.h; sourceTree = "<group>"; };
32AE59BE14E70ED600420CA0 /* flacfile.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = flacfile.cpp; sourceTree = "<group>"; };
32AE59BF14E70ED600420CA0 /* flacfile.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = flacfile.h; sourceTree = "<group>"; };
32AE59C014E70ED600420CA0 /* flacmetadatablock.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = flacmetadatablock.cpp; sourceTree = "<group>"; };
32AE59C114E70ED600420CA0 /* flacmetadatablock.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = flacmetadatablock.h; sourceTree = "<group>"; };
32AE59C214E70ED600420CA0 /* flacpicture.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = flacpicture.cpp; sourceTree = "<group>"; };
32AE59C314E70ED600420CA0 /* flacpicture.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = flacpicture.h; sourceTree = "<group>"; };
32AE59C414E70ED600420CA0 /* flacproperties.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = flacproperties.cpp; sourceTree = "<group>"; };
32AE59C514E70ED600420CA0 /* flacproperties.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = flacproperties.h; sourceTree = "<group>"; };
32AE59C614E70ED600420CA0 /* flacunknownmetadatablock.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = flacunknownmetadatablock.cpp; sourceTree = "<group>"; };
32AE59C714E70ED600420CA0 /* flacunknownmetadatablock.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = flacunknownmetadatablock.h; sourceTree = "<group>"; };
32AE59D614E70ED600420CA0 /* mpcfile.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = mpcfile.cpp; sourceTree = "<group>"; };
32AE59D714E70ED600420CA0 /* mpcfile.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = mpcfile.h; sourceTree = "<group>"; };
32AE59D814E70ED600420CA0 /* mpcproperties.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = mpcproperties.cpp; sourceTree = "<group>"; };
@ -279,24 +225,6 @@
32AE5A0F14E70ED600420CA0 /* mpegproperties.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = mpegproperties.h; sourceTree = "<group>"; };
32AE5A1014E70ED600420CA0 /* xingheader.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = xingheader.cpp; sourceTree = "<group>"; };
32AE5A1114E70ED600420CA0 /* xingheader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = xingheader.h; sourceTree = "<group>"; };
32AE5A1414E70ED600420CA0 /* oggflacfile.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = oggflacfile.cpp; sourceTree = "<group>"; };
32AE5A1514E70ED600420CA0 /* oggflacfile.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = oggflacfile.h; sourceTree = "<group>"; };
32AE5A1614E70ED600420CA0 /* oggfile.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = oggfile.cpp; sourceTree = "<group>"; };
32AE5A1714E70ED600420CA0 /* oggfile.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = oggfile.h; sourceTree = "<group>"; };
32AE5A1814E70ED600420CA0 /* oggpage.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = oggpage.cpp; sourceTree = "<group>"; };
32AE5A1914E70ED600420CA0 /* oggpage.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = oggpage.h; sourceTree = "<group>"; };
32AE5A1A14E70ED600420CA0 /* oggpageheader.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = oggpageheader.cpp; sourceTree = "<group>"; };
32AE5A1B14E70ED600420CA0 /* oggpageheader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = oggpageheader.h; sourceTree = "<group>"; };
32AE5A1D14E70ED600420CA0 /* speexfile.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = speexfile.cpp; sourceTree = "<group>"; };
32AE5A1E14E70ED600420CA0 /* speexfile.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = speexfile.h; sourceTree = "<group>"; };
32AE5A1F14E70ED600420CA0 /* speexproperties.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = speexproperties.cpp; sourceTree = "<group>"; };
32AE5A2014E70ED600420CA0 /* speexproperties.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = speexproperties.h; sourceTree = "<group>"; };
32AE5A2214E70ED600420CA0 /* vorbisfile.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = vorbisfile.cpp; sourceTree = "<group>"; };
32AE5A2314E70ED600420CA0 /* vorbisfile.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = vorbisfile.h; sourceTree = "<group>"; };
32AE5A2414E70ED600420CA0 /* vorbisproperties.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = vorbisproperties.cpp; sourceTree = "<group>"; };
32AE5A2514E70ED600420CA0 /* vorbisproperties.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = vorbisproperties.h; sourceTree = "<group>"; };
32AE5A2614E70ED600420CA0 /* xiphcomment.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = xiphcomment.cpp; sourceTree = "<group>"; };
32AE5A2714E70ED600420CA0 /* xiphcomment.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = xiphcomment.h; sourceTree = "<group>"; };
32AE5A2A14E70ED600420CA0 /* aifffile.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = aifffile.cpp; sourceTree = "<group>"; };
32AE5A2B14E70ED600420CA0 /* aifffile.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = aifffile.h; sourceTree = "<group>"; };
32AE5A2C14E70ED600420CA0 /* aiffproperties.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = aiffproperties.cpp; sourceTree = "<group>"; };
@ -325,24 +253,27 @@
32AE5A4A14E70ED600420CA0 /* tstring.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tstring.h; sourceTree = "<group>"; };
32AE5A4B14E70ED600420CA0 /* tstringlist.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = tstringlist.cpp; sourceTree = "<group>"; };
32AE5A4C14E70ED600420CA0 /* tstringlist.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tstringlist.h; sourceTree = "<group>"; };
32AE5A5014E70ED600420CA0 /* trueaudiofile.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = trueaudiofile.cpp; sourceTree = "<group>"; };
32AE5A5114E70ED600420CA0 /* trueaudiofile.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = trueaudiofile.h; sourceTree = "<group>"; };
32AE5A5214E70ED600420CA0 /* trueaudioproperties.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = trueaudioproperties.cpp; sourceTree = "<group>"; };
32AE5A5314E70ED600420CA0 /* trueaudioproperties.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = trueaudioproperties.h; sourceTree = "<group>"; };
32AE5A5514E70ED600420CA0 /* wavpackfile.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = wavpackfile.cpp; sourceTree = "<group>"; };
32AE5A5614E70ED600420CA0 /* wavpackfile.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = wavpackfile.h; sourceTree = "<group>"; };
32AE5A5714E70ED600420CA0 /* wavpackproperties.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = wavpackproperties.cpp; sourceTree = "<group>"; };
32AE5A5814E70ED600420CA0 /* wavpackproperties.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = wavpackproperties.h; sourceTree = "<group>"; };
32AE5A5914E70ED600420CA0 /* taglib_config.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = taglib_config.h; path = taglib/taglib_config.h; sourceTree = "<group>"; };
8315533728741C7A00D4D746 /* apeproperties.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = apeproperties.cpp; sourceTree = "<group>"; };
8315533828741C7A00D4D746 /* apefile.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = apefile.h; sourceTree = "<group>"; };
8315533928741C7A00D4D746 /* apeproperties.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = apeproperties.h; sourceTree = "<group>"; };
8315533A28741C7A00D4D746 /* apeitem.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = apeitem.h; sourceTree = "<group>"; };
8315533B28741C7A00D4D746 /* apefile.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = apefile.cpp; sourceTree = "<group>"; };
8315533C28741C7A00D4D746 /* ape-tag-format.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "ape-tag-format.txt"; sourceTree = "<group>"; };
8315533D28741C7A00D4D746 /* apefooter.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = apefooter.cpp; sourceTree = "<group>"; };
8315533E28741C7A00D4D746 /* apetag.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = apetag.cpp; sourceTree = "<group>"; };
8315533F28741C7A00D4D746 /* apefooter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = apefooter.h; sourceTree = "<group>"; };
8315534028741C7A00D4D746 /* apeitem.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = apeitem.cpp; sourceTree = "<group>"; };
8315534128741C7A00D4D746 /* apegenfile.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = apegenfile.h; sourceTree = "<group>"; };
8315534228741C7A00D4D746 /* apetag.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = apetag.h; sourceTree = "<group>"; };
8315534328741C7A00D4D746 /* apegenfile.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = apegenfile.cpp; sourceTree = "<group>"; };
833F683D1CDBCAB300AFB9F0 /* es */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = es; path = es.lproj/InfoPlist.strings; sourceTree = "<group>"; };
835C889822CC1889001B4B3F /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = "<group>"; };
83747BD22862D5B00021245F /* Shared.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Shared.xcconfig; sourceTree = "<group>"; };
83790D201809E8CA0073CF51 /* opusfile.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = opusfile.cpp; sourceTree = "<group>"; };
83790D211809E8CA0073CF51 /* opusfile.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = opusfile.h; sourceTree = "<group>"; };
83790D221809E8CA0073CF51 /* opusproperties.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = opusproperties.cpp; sourceTree = "<group>"; };
83790D231809E8CA0073CF51 /* opusproperties.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = opusproperties.h; sourceTree = "<group>"; };
83AF2CBC2622643300538240 /* apegenfile.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = apegenfile.cpp; sourceTree = "<group>"; };
83AF2CBD2622643300538240 /* apegenfile.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = apegenfile.h; sourceTree = "<group>"; };
83B46FC92707EED200847FC9 /* libiconv.tbd */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = libiconv.tbd; path = usr/lib/libiconv.tbd; sourceTree = SDKROOT; };
83B46FCB2707EEDB00847FC9 /* libz.tbd */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = libz.tbd; path = usr/lib/libz.tbd; sourceTree = SDKROOT; };
8DC2EF5A0486A6940098B216 /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist; path = Info.plist; sourceTree = "<group>"; };
@ -537,16 +468,14 @@
EDE8632425CF6CDF0086EFD3 /* s3m */,
EDE8631125CF6CC60086EFD3 /* mod */,
EDE8630825CF6CAE0086EFD3 /* xm */,
32AE59A214E70ED600420CA0 /* ape */,
8315533628741C7A00D4D746 /* ape */,
32AE59AE14E70ED600420CA0 /* asf */,
32AE59B914E70ED600420CA0 /* audioproperties.cpp */,
32AE59BA14E70ED600420CA0 /* audioproperties.h */,
32AE59BB14E70ED600420CA0 /* fileref.cpp */,
32AE59BC14E70ED600420CA0 /* fileref.h */,
32AE59BD14E70ED600420CA0 /* flac */,
32AE59D514E70ED600420CA0 /* mpc */,
32AE59DA14E70ED600420CA0 /* mpeg */,
32AE5A1214E70ED600420CA0 /* ogg */,
32AE5A2814E70ED600420CA0 /* riff */,
32AE5A3514E70ED600420CA0 /* tag.cpp */,
32AE5A3614E70ED600420CA0 /* tag.h */,
@ -554,33 +483,12 @@
32AE5A3914E70ED600420CA0 /* tagunion.cpp */,
32AE5A3A14E70ED600420CA0 /* tagunion.h */,
32AE5A3B14E70ED600420CA0 /* toolkit */,
32AE5A4F14E70ED600420CA0 /* trueaudio */,
32AE5A5414E70ED600420CA0 /* wavpack */,
);
name = taglib;
path = taglib/taglib;
sourceTree = "<group>";
};
32AE59A214E70ED600420CA0 /* ape */ = {
isa = PBXGroup;
children = (
32AE59A314E70ED600420CA0 /* ape-tag-format.txt */,
32AE59A414E70ED600420CA0 /* apefile.cpp */,
32AE59A514E70ED600420CA0 /* apefile.h */,
32AE59A614E70ED600420CA0 /* apefooter.cpp */,
32AE59A714E70ED600420CA0 /* apefooter.h */,
83AF2CBC2622643300538240 /* apegenfile.cpp */,
83AF2CBD2622643300538240 /* apegenfile.h */,
32AE59A814E70ED600420CA0 /* apeitem.cpp */,
32AE59A914E70ED600420CA0 /* apeitem.h */,
32AE59AA14E70ED600420CA0 /* apeproperties.cpp */,
32AE59AB14E70ED600420CA0 /* apeproperties.h */,
32AE59AC14E70ED600420CA0 /* apetag.cpp */,
32AE59AD14E70ED600420CA0 /* apetag.h */,
);
path = ape;
sourceTree = "<group>";
};
32AE59AE14E70ED600420CA0 /* asf */ = {
isa = PBXGroup;
children = (
@ -598,23 +506,6 @@
path = asf;
sourceTree = "<group>";
};
32AE59BD14E70ED600420CA0 /* flac */ = {
isa = PBXGroup;
children = (
32AE59BE14E70ED600420CA0 /* flacfile.cpp */,
32AE59BF14E70ED600420CA0 /* flacfile.h */,
32AE59C014E70ED600420CA0 /* flacmetadatablock.cpp */,
32AE59C114E70ED600420CA0 /* flacmetadatablock.h */,
32AE59C214E70ED600420CA0 /* flacpicture.cpp */,
32AE59C314E70ED600420CA0 /* flacpicture.h */,
32AE59C414E70ED600420CA0 /* flacproperties.cpp */,
32AE59C514E70ED600420CA0 /* flacproperties.h */,
32AE59C614E70ED600420CA0 /* flacunknownmetadatablock.cpp */,
32AE59C714E70ED600420CA0 /* flacunknownmetadatablock.h */,
);
path = flac;
sourceTree = "<group>";
};
32AE59D514E70ED600420CA0 /* mpc */ = {
isa = PBXGroup;
children = (
@ -709,56 +600,6 @@
path = frames;
sourceTree = "<group>";
};
32AE5A1214E70ED600420CA0 /* ogg */ = {
isa = PBXGroup;
children = (
83790D1F1809E8CA0073CF51 /* opus */,
32AE5A1314E70ED600420CA0 /* flac */,
32AE5A1614E70ED600420CA0 /* oggfile.cpp */,
32AE5A1714E70ED600420CA0 /* oggfile.h */,
32AE5A1814E70ED600420CA0 /* oggpage.cpp */,
32AE5A1914E70ED600420CA0 /* oggpage.h */,
32AE5A1A14E70ED600420CA0 /* oggpageheader.cpp */,
32AE5A1B14E70ED600420CA0 /* oggpageheader.h */,
32AE5A1C14E70ED600420CA0 /* speex */,
32AE5A2114E70ED600420CA0 /* vorbis */,
32AE5A2614E70ED600420CA0 /* xiphcomment.cpp */,
32AE5A2714E70ED600420CA0 /* xiphcomment.h */,
);
path = ogg;
sourceTree = "<group>";
};
32AE5A1314E70ED600420CA0 /* flac */ = {
isa = PBXGroup;
children = (
32AE5A1414E70ED600420CA0 /* oggflacfile.cpp */,
32AE5A1514E70ED600420CA0 /* oggflacfile.h */,
);
path = flac;
sourceTree = "<group>";
};
32AE5A1C14E70ED600420CA0 /* speex */ = {
isa = PBXGroup;
children = (
32AE5A1D14E70ED600420CA0 /* speexfile.cpp */,
32AE5A1E14E70ED600420CA0 /* speexfile.h */,
32AE5A1F14E70ED600420CA0 /* speexproperties.cpp */,
32AE5A2014E70ED600420CA0 /* speexproperties.h */,
);
path = speex;
sourceTree = "<group>";
};
32AE5A2114E70ED600420CA0 /* vorbis */ = {
isa = PBXGroup;
children = (
32AE5A2214E70ED600420CA0 /* vorbisfile.cpp */,
32AE5A2314E70ED600420CA0 /* vorbisfile.h */,
32AE5A2414E70ED600420CA0 /* vorbisproperties.cpp */,
32AE5A2514E70ED600420CA0 /* vorbisproperties.h */,
);
path = vorbis;
sourceTree = "<group>";
};
32AE5A2814E70ED600420CA0 /* riff */ = {
isa = PBXGroup;
children = (
@ -823,17 +664,6 @@
path = toolkit;
sourceTree = "<group>";
};
32AE5A4F14E70ED600420CA0 /* trueaudio */ = {
isa = PBXGroup;
children = (
32AE5A5014E70ED600420CA0 /* trueaudiofile.cpp */,
32AE5A5114E70ED600420CA0 /* trueaudiofile.h */,
32AE5A5214E70ED600420CA0 /* trueaudioproperties.cpp */,
32AE5A5314E70ED600420CA0 /* trueaudioproperties.h */,
);
path = trueaudio;
sourceTree = "<group>";
};
32AE5A5414E70ED600420CA0 /* wavpack */ = {
isa = PBXGroup;
children = (
@ -845,6 +675,26 @@
path = wavpack;
sourceTree = "<group>";
};
8315533628741C7A00D4D746 /* ape */ = {
isa = PBXGroup;
children = (
8315533728741C7A00D4D746 /* apeproperties.cpp */,
8315533828741C7A00D4D746 /* apefile.h */,
8315533928741C7A00D4D746 /* apeproperties.h */,
8315533A28741C7A00D4D746 /* apeitem.h */,
8315533B28741C7A00D4D746 /* apefile.cpp */,
8315533C28741C7A00D4D746 /* ape-tag-format.txt */,
8315533D28741C7A00D4D746 /* apefooter.cpp */,
8315533E28741C7A00D4D746 /* apetag.cpp */,
8315533F28741C7A00D4D746 /* apefooter.h */,
8315534028741C7A00D4D746 /* apeitem.cpp */,
8315534128741C7A00D4D746 /* apegenfile.h */,
8315534228741C7A00D4D746 /* apetag.h */,
8315534328741C7A00D4D746 /* apegenfile.cpp */,
);
path = ape;
sourceTree = "<group>";
};
83747BD12862D5B00021245F /* Xcode-config */ = {
isa = PBXGroup;
children = (
@ -854,17 +704,6 @@
path = "../../Xcode-config";
sourceTree = "<group>";
};
83790D1F1809E8CA0073CF51 /* opus */ = {
isa = PBXGroup;
children = (
83790D201809E8CA0073CF51 /* opusfile.cpp */,
83790D211809E8CA0073CF51 /* opusfile.h */,
83790D221809E8CA0073CF51 /* opusproperties.cpp */,
83790D231809E8CA0073CF51 /* opusproperties.h */,
);
path = opus;
sourceTree = "<group>";
};
83B46FC82707EED200847FC9 /* Frameworks */ = {
isa = PBXGroup;
children = (
@ -1051,23 +890,14 @@
buildActionMask = 2147483647;
files = (
32AE5A5A14E70ED600420CA0 /* config.h in Headers */,
32AE5A5D14E70ED600420CA0 /* apefile.h in Headers */,
32AE5A5F14E70ED600420CA0 /* apefooter.h in Headers */,
32AE5A6114E70ED600420CA0 /* apeitem.h in Headers */,
32AE5A6314E70ED600420CA0 /* apeproperties.h in Headers */,
32AE5A6514E70ED600420CA0 /* apetag.h in Headers */,
32AE5A6714E70ED600420CA0 /* asfattribute.h in Headers */,
32AE5A6914E70ED600420CA0 /* asffile.h in Headers */,
32AE5A6B14E70ED600420CA0 /* asfpicture.h in Headers */,
32AE5A6D14E70ED600420CA0 /* asfproperties.h in Headers */,
32AE5A6F14E70ED600420CA0 /* asftag.h in Headers */,
32AE5A7114E70ED600420CA0 /* audioproperties.h in Headers */,
83942C67269116530058BD3B /* flacfile.h in Headers */,
32AE5A7314E70ED600420CA0 /* fileref.h in Headers */,
32AE5A7714E70ED600420CA0 /* flacmetadatablock.h in Headers */,
32AE5A7914E70ED600420CA0 /* flacpicture.h in Headers */,
32AE5A7B14E70ED600420CA0 /* flacproperties.h in Headers */,
32AE5A7D14E70ED600420CA0 /* flacunknownmetadatablock.h in Headers */,
8315534728741C7A00D4D746 /* apeitem.h in Headers */,
32AE5A8B14E70ED600420CA0 /* mpcfile.h in Headers */,
32AE5A8D14E70ED600420CA0 /* mpcproperties.h in Headers */,
32AE5A8F14E70ED600420CA0 /* id3v1genres.h in Headers */,
@ -1087,7 +917,6 @@
32AE5AAF14E70ED600420CA0 /* id3v2footer.h in Headers */,
32AE5AB114E70ED600420CA0 /* id3v2frame.h in Headers */,
32AE5AB314E70ED600420CA0 /* id3v2framefactory.h in Headers */,
83AF2CBF2622643300538240 /* apegenfile.h in Headers */,
32AE5AB514E70ED600420CA0 /* id3v2header.h in Headers */,
32AE5AB714E70ED600420CA0 /* id3v2synchdata.h in Headers */,
32AE5AB914E70ED600420CA0 /* id3v2tag.h in Headers */,
@ -1095,20 +924,16 @@
32AE5ABD14E70ED600420CA0 /* mpegheader.h in Headers */,
32AE5ABF14E70ED600420CA0 /* mpegproperties.h in Headers */,
32AE5AC114E70ED600420CA0 /* xingheader.h in Headers */,
32AE5AC314E70ED600420CA0 /* oggflacfile.h in Headers */,
32AE5AC514E70ED600420CA0 /* oggfile.h in Headers */,
32AE5AC714E70ED600420CA0 /* oggpage.h in Headers */,
32AE5AC914E70ED600420CA0 /* oggpageheader.h in Headers */,
32AE5ACB14E70ED600420CA0 /* speexfile.h in Headers */,
32AE5ACD14E70ED600420CA0 /* speexproperties.h in Headers */,
32AE5ACF14E70ED600420CA0 /* vorbisfile.h in Headers */,
32AE5AD114E70ED600420CA0 /* vorbisproperties.h in Headers */,
32AE5AD314E70ED600420CA0 /* xiphcomment.h in Headers */,
8315534528741C7A00D4D746 /* apefile.h in Headers */,
8315534C28741C7A00D4D746 /* apefooter.h in Headers */,
8315534628741C7A00D4D746 /* apeproperties.h in Headers */,
8315534F28741C7A00D4D746 /* apetag.h in Headers */,
32AE5AD514E70ED600420CA0 /* aifffile.h in Headers */,
32AE5AD714E70ED600420CA0 /* aiffproperties.h in Headers */,
32AE5AD914E70ED600420CA0 /* rifffile.h in Headers */,
32AE5B0014E70F4700420CA0 /* tlist.tcc in Headers */,
32AE5B0114E70F4A00420CA0 /* tmap.tcc in Headers */,
8315534E28741C7A00D4D746 /* apegenfile.h in Headers */,
32AE5ADF14E70ED600420CA0 /* tag.h in Headers */,
32AE5AE114E70ED600420CA0 /* taglib_export.h in Headers */,
32AE5AE314E70ED600420CA0 /* tagunion.h in Headers */,
@ -1121,8 +946,6 @@
32AE5AEF14E70ED600420CA0 /* tmap.h in Headers */,
32AE5AF214E70ED600420CA0 /* tstring.h in Headers */,
32AE5AF414E70ED600420CA0 /* tstringlist.h in Headers */,
32AE5AF814E70ED700420CA0 /* trueaudiofile.h in Headers */,
32AE5AFA14E70ED700420CA0 /* trueaudioproperties.h in Headers */,
32AE5AFC14E70ED700420CA0 /* wavpackfile.h in Headers */,
32AE5AFE14E70ED700420CA0 /* wavpackproperties.h in Headers */,
32AE5AFF14E70ED700420CA0 /* taglib_config.h in Headers */,
@ -1190,6 +1013,7 @@
buildActionMask = 2147483647;
files = (
8DC2EF530486A6940098B216 /* InfoPlist.strings in Resources */,
8315534928741C7A00D4D746 /* ape-tag-format.txt in Resources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@ -1200,14 +1024,9 @@
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
32AE5A5C14E70ED600420CA0 /* apefile.cpp in Sources */,
EDE8630325CF6C260086EFD3 /* trefcounter.cpp in Sources */,
32AE5A5E14E70ED600420CA0 /* apefooter.cpp in Sources */,
32AE5A6014E70ED600420CA0 /* apeitem.cpp in Sources */,
EDE8631F25CF6CC60086EFD3 /* modfile.cpp in Sources */,
32AE5A6214E70ED600420CA0 /* apeproperties.cpp in Sources */,
EDE8631025CF6CAE0086EFD3 /* xmproperties.cpp in Sources */,
32AE5A6414E70ED600420CA0 /* apetag.cpp in Sources */,
32AE5A6614E70ED600420CA0 /* asfattribute.cpp in Sources */,
32AE5A6814E70ED600420CA0 /* asffile.cpp in Sources */,
32AE5A6A14E70ED600420CA0 /* asfpicture.cpp in Sources */,
@ -1217,14 +1036,8 @@
32AE5A7014E70ED600420CA0 /* audioproperties.cpp in Sources */,
EDE863B125CF6D710086EFD3 /* synchronizedlyricsframe.cpp in Sources */,
32AE5A7214E70ED600420CA0 /* fileref.cpp in Sources */,
32AE5A7414E70ED600420CA0 /* flacfile.cpp in Sources */,
EDE8630725CF6C5B0086EFD3 /* itfile.cpp in Sources */,
32AE5A7614E70ED600420CA0 /* flacmetadatablock.cpp in Sources */,
32AE5A7814E70ED600420CA0 /* flacpicture.cpp in Sources */,
83AF2CBE2622643300538240 /* apegenfile.cpp in Sources */,
32AE5A7A14E70ED600420CA0 /* flacproperties.cpp in Sources */,
EDE863C625CF6D710086EFD3 /* ownershipframe.cpp in Sources */,
32AE5A7C14E70ED600420CA0 /* flacunknownmetadatablock.cpp in Sources */,
32AE5A8A14E70ED600420CA0 /* mpcfile.cpp in Sources */,
32AE5A8C14E70ED600420CA0 /* mpcproperties.cpp in Sources */,
32AE5A8E14E70ED600420CA0 /* id3v1genres.cpp in Sources */,
@ -1234,39 +1047,33 @@
32AE5A9C14E70ED600420CA0 /* relativevolumeframe.cpp in Sources */,
EDE863B925CF6D710086EFD3 /* eventtimingcodesframe.cpp in Sources */,
EDE8633925CF6CF50086EFD3 /* infotag.cpp in Sources */,
83790D241809E8CA0073CF51 /* opusfile.cpp in Sources */,
32AE5AA614E70ED600420CA0 /* urllinkframe.cpp in Sources */,
EDE863C025CF6D710086EFD3 /* chapterframe.cpp in Sources */,
32AE5AAE14E70ED600420CA0 /* id3v2footer.cpp in Sources */,
32AE5AB014E70ED600420CA0 /* id3v2frame.cpp in Sources */,
8315534D28741C7A00D4D746 /* apeitem.cpp in Sources */,
32AE5AB414E70ED600420CA0 /* id3v2header.cpp in Sources */,
EDE8633C25CF6CF50086EFD3 /* wavfile.cpp in Sources */,
32AE5AB614E70ED600420CA0 /* id3v2synchdata.cpp in Sources */,
EDE863D525CF6D710086EFD3 /* id3v2framefactory.cpp in Sources */,
EDE863B225CF6D710086EFD3 /* uniquefileidentifierframe.cpp in Sources */,
32AE5AB814E70ED600420CA0 /* id3v2tag.cpp in Sources */,
8315534B28741C7A00D4D746 /* apetag.cpp in Sources */,
32AE5ABA14E70ED600420CA0 /* mpegfile.cpp in Sources */,
32AE5ABC14E70ED600420CA0 /* mpegheader.cpp in Sources */,
EDE8635325CF6D3D0086EFD3 /* tbytevectorstream.cpp in Sources */,
EDE863BD25CF6D710086EFD3 /* podcastframe.cpp in Sources */,
32AE5AC014E70ED600420CA0 /* xingheader.cpp in Sources */,
EDE863BF25CF6D710086EFD3 /* commentsframe.cpp in Sources */,
8315534A28741C7A00D4D746 /* apefooter.cpp in Sources */,
EDE8635D25CF6D3D0086EFD3 /* tzlib.cpp in Sources */,
32AE5AC214E70ED600420CA0 /* oggflacfile.cpp in Sources */,
32AE5AC414E70ED600420CA0 /* oggfile.cpp in Sources */,
32AE5AC614E70ED600420CA0 /* oggpage.cpp in Sources */,
32AE5AC814E70ED600420CA0 /* oggpageheader.cpp in Sources */,
EDE863D825CF6D710086EFD3 /* id3v2extendedheader.cpp in Sources */,
EDE863B625CF6D710086EFD3 /* unknownframe.cpp in Sources */,
EDE8630E25CF6CAE0086EFD3 /* xmfile.cpp in Sources */,
EDE8635C25CF6D3D0086EFD3 /* tiostream.cpp in Sources */,
EDE8631E25CF6CC60086EFD3 /* modfilebase.cpp in Sources */,
32AE5ACA14E70ED600420CA0 /* speexfile.cpp in Sources */,
8315534828741C7A00D4D746 /* apefile.cpp in Sources */,
EDE8635525CF6D3D0086EFD3 /* tdebuglistener.cpp in Sources */,
32AE5ACC14E70ED600420CA0 /* speexproperties.cpp in Sources */,
32AE5ACE14E70ED600420CA0 /* vorbisfile.cpp in Sources */,
32AE5AD014E70ED600420CA0 /* vorbisproperties.cpp in Sources */,
32AE5AD214E70ED600420CA0 /* xiphcomment.cpp in Sources */,
32AE5AD414E70ED600420CA0 /* aifffile.cpp in Sources */,
32AE5AD614E70ED600420CA0 /* aiffproperties.cpp in Sources */,
32AE5AD814E70ED600420CA0 /* rifffile.cpp in Sources */,
@ -1286,14 +1093,13 @@
32AE5AEB14E70ED600420CA0 /* tfile.cpp in Sources */,
32AE5AF114E70ED600420CA0 /* tstring.cpp in Sources */,
32AE5AF314E70ED600420CA0 /* tstringlist.cpp in Sources */,
83790D261809E8CA0073CF51 /* opusproperties.cpp in Sources */,
32AE5AF714E70ED700420CA0 /* trueaudiofile.cpp in Sources */,
EDE8630625CF6C5B0086EFD3 /* itproperties.cpp in Sources */,
32AE5AF914E70ED700420CA0 /* trueaudioproperties.cpp in Sources */,
EDE863E625CF6D710086EFD3 /* mpegproperties.cpp in Sources */,
8315534428741C7A00D4D746 /* apeproperties.cpp in Sources */,
EDE8630225CF6C260086EFD3 /* tfilestream.cpp in Sources */,
32AE5AFB14E70ED700420CA0 /* wavpackfile.cpp in Sources */,
EDE8633E25CF6CF50086EFD3 /* wavproperties.cpp in Sources */,
8315535028741C7A00D4D746 /* apegenfile.cpp in Sources */,
32AE5AFD14E70ED700420CA0 /* wavpackproperties.cpp in Sources */,
EDE8632C25CF6CE00086EFD3 /* s3mfile.cpp in Sources */,
EDE863CD25CF6D710086EFD3 /* textidentificationframe.cpp in Sources */,

View File

@ -25,17 +25,12 @@
#include <taglib/toolkit/tbytevector.h>
#include <taglib/riff/aiff/aiffproperties.h>
#include <taglib/ape/apeproperties.h>
#include <taglib/asf/asfproperties.h>
#include <taglib/flac/flacproperties.h>
#include <taglib/mp4/mp4properties.h>
#include <taglib/mpc/mpcproperties.h>
#include <taglib/mpeg/mpegproperties.h>
#include <taglib/ogg/opus/opusproperties.h>
#include <taglib/ogg/speex/speexproperties.h>
#include <taglib/trueaudio/trueaudioproperties.h>
#include <taglib/ogg/vorbis/vorbisproperties.h>
#include <taglib/riff/aiff/aiffproperties.h>
#include <taglib/riff/wav/wavproperties.h>
#include <taglib/wavpack/wavpackproperties.h>
@ -46,33 +41,23 @@ using namespace TagLib;
// This macro is a workaround for the fact that we can't add virtual functions.
// Should be true virtual functions in taglib2.
#define VIRTUAL_FUNCTION_WORKAROUND(function_name, default_value) \
if(dynamic_cast<const APE::Properties*>(this)) \
return dynamic_cast<const APE::Properties*>(this)->function_name(); \
else if(dynamic_cast<const ASF::Properties*>(this)) \
return dynamic_cast<const ASF::Properties*>(this)->function_name(); \
else if(dynamic_cast<const FLAC::Properties*>(this)) \
return dynamic_cast<const FLAC::Properties*>(this)->function_name(); \
else if(dynamic_cast<const MPC::Properties*>(this)) \
return dynamic_cast<const MPC::Properties*>(this)->function_name(); \
else if(dynamic_cast<const MPEG::Properties*>(this)) \
return dynamic_cast<const MPEG::Properties*>(this)->function_name(); \
else if(dynamic_cast<const Ogg::Opus::Properties*>(this)) \
return dynamic_cast<const Ogg::Opus::Properties*>(this)->function_name(); \
else if(dynamic_cast<const Ogg::Speex::Properties*>(this)) \
return dynamic_cast<const Ogg::Speex::Properties*>(this)->function_name(); \
else if(dynamic_cast<const TrueAudio::Properties*>(this)) \
return dynamic_cast<const TrueAudio::Properties*>(this)->function_name(); \
else if(dynamic_cast<const RIFF::AIFF::Properties*>(this)) \
return dynamic_cast<const RIFF::AIFF::Properties*>(this)->function_name(); \
else if(dynamic_cast<const RIFF::WAV::Properties*>(this)) \
return dynamic_cast<const RIFF::WAV::Properties*>(this)->function_name(); \
else if(dynamic_cast<const Vorbis::Properties*>(this)) \
return dynamic_cast<const Vorbis::Properties*>(this)->function_name(); \
else if(dynamic_cast<const WavPack::Properties*>(this)) \
return dynamic_cast<const WavPack::Properties*>(this)->function_name(); \
else \
return (default_value);
#define VIRTUAL_FUNCTION_WORKAROUND(function_name, default_value) \
if(dynamic_cast<const APE::Properties*>(this)) \
return dynamic_cast<const APE::Properties*>(this)->function_name(); \
else if(dynamic_cast<const ASF::Properties*>(this)) \
return dynamic_cast<const ASF::Properties*>(this)->function_name(); \
else if(dynamic_cast<const MPC::Properties*>(this)) \
return dynamic_cast<const MPC::Properties*>(this)->function_name(); \
else if(dynamic_cast<const MPEG::Properties*>(this)) \
return dynamic_cast<const MPEG::Properties*>(this)->function_name(); \
else if(dynamic_cast<const RIFF::AIFF::Properties*>(this)) \
return dynamic_cast<const RIFF::AIFF::Properties*>(this)->function_name(); \
else if(dynamic_cast<const RIFF::WAV::Properties*>(this)) \
return dynamic_cast<const RIFF::WAV::Properties*>(this)->function_name(); \
else if(dynamic_cast<const WavPack::Properties*>(this)) \
return dynamic_cast<const WavPack::Properties*>(this)->function_name(); \
else \
return (default_value);
class AudioProperties::AudioPropertiesPrivate
{

View File

@ -35,25 +35,17 @@
#include <taglib/toolkit/tdebug.h>
#include <taglib/toolkit/trefcounter.h>
#include <taglib/fileref.h>
#include <taglib/asf/asffile.h>
#include <taglib/mpeg/mpegfile.h>
#include <taglib/ogg/vorbis/vorbisfile.h>
#include <taglib/flac/flacfile.h>
#include <taglib/ogg/flac/oggflacfile.h>
#include <taglib/mpc/mpcfile.h>
#include <taglib/fileref.h>
#include <taglib/it/itfile.h>
#include <taglib/mod/modfile.h>
#include <taglib/mp4/mp4file.h>
#include <taglib/wavpack/wavpackfile.h>
#include <taglib/ogg/speex/speexfile.h>
#include <taglib/ogg/opus/opusfile.h>
#include <taglib/trueaudio/trueaudiofile.h>
#include <taglib/mpc/mpcfile.h>
#include <taglib/mpeg/mpegfile.h>
#include <taglib/riff/aiff/aifffile.h>
#include <taglib/riff/wav/wavfile.h>
#include <taglib/ape/apefile.h>
#include <taglib/ape/apegenfile.h>
#include <taglib/mod/modfile.h>
#include <taglib/s3m/s3mfile.h>
#include <taglib/it/itfile.h>
#include <taglib/wavpack/wavpackfile.h>
#include <taglib/xm/xmfile.h>
using namespace TagLib;
@ -108,30 +100,18 @@ namespace
// .oga can be any audio in the Ogg container. So leave it to content-based detection.
if(ext == "MP3")
return new MPEG::File(stream, ID3v2::FrameFactory::instance(), readAudioProperties, audioPropertiesStyle);
if(ext == "OGG")
return new Ogg::Vorbis::File(stream, readAudioProperties, audioPropertiesStyle);
if(ext == "FLAC")
return new FLAC::File(stream, ID3v2::FrameFactory::instance(), readAudioProperties, audioPropertiesStyle);
if(ext == "MPC")
return new MPEG::File(stream, ID3v2::FrameFactory::instance(), readAudioProperties, audioPropertiesStyle);
if(ext == "MPC")
return new MPC::File(stream, readAudioProperties, audioPropertiesStyle);
if(ext == "WV")
return new WavPack::File(stream, readAudioProperties, audioPropertiesStyle);
if(ext == "SPX")
return new Ogg::Speex::File(stream, readAudioProperties, audioPropertiesStyle);
if(ext == "OPUS")
return new Ogg::Opus::File(stream, readAudioProperties, audioPropertiesStyle);
if(ext == "TTA")
return new TrueAudio::File(stream, readAudioProperties, audioPropertiesStyle);
if(ext == "WMA" || ext == "ASF")
return new WavPack::File(stream, readAudioProperties, audioPropertiesStyle);
if(ext == "WMA" || ext == "ASF")
return new ASF::File(stream, readAudioProperties, audioPropertiesStyle);
if(ext == "AIF" || ext == "AIFF" || ext == "AFC" || ext == "AIFC")
return new RIFF::AIFF::File(stream, readAudioProperties, audioPropertiesStyle);
if(ext == "WAV")
return new RIFF::WAV::File(stream, readAudioProperties, audioPropertiesStyle);
if(ext == "APE")
return new APE::File(stream, readAudioProperties, audioPropertiesStyle);
// module, nst and wow are possible but uncommon extensions
return new RIFF::WAV::File(stream, readAudioProperties, audioPropertiesStyle);
// module, nst and wow are possible but uncommon extensions
if(ext == "MOD" || ext == "MODULE" || ext == "NST" || ext == "WOW")
return new Mod::File(stream, readAudioProperties, audioPropertiesStyle);
if(ext == "S3M")
@ -139,11 +119,9 @@ namespace
if(ext == "IT")
return new IT::File(stream, readAudioProperties, audioPropertiesStyle);
if(ext == "XM")
return new XM::File(stream, readAudioProperties, audioPropertiesStyle);
if(ext == "TAK")
return new APEGen::File(stream, readAudioProperties, audioPropertiesStyle);
return new XM::File(stream, readAudioProperties, audioPropertiesStyle);
return 0;
return 0;
}
// Detect the file type based on the actual content of the stream.
@ -154,35 +132,19 @@ namespace
File *file = 0;
if(MPEG::File::isSupported(stream))
file = new MPEG::File(stream, ID3v2::FrameFactory::instance(), readAudioProperties, audioPropertiesStyle);
else if(Ogg::Vorbis::File::isSupported(stream))
file = new Ogg::Vorbis::File(stream, readAudioProperties, audioPropertiesStyle);
else if(Ogg::FLAC::File::isSupported(stream))
file = new Ogg::FLAC::File(stream, readAudioProperties, audioPropertiesStyle);
else if(FLAC::File::isSupported(stream))
file = new FLAC::File(stream, ID3v2::FrameFactory::instance(), readAudioProperties, audioPropertiesStyle);
else if(MPC::File::isSupported(stream))
file = new MPEG::File(stream, ID3v2::FrameFactory::instance(), readAudioProperties, audioPropertiesStyle);
else if(MPC::File::isSupported(stream))
file = new MPC::File(stream, readAudioProperties, audioPropertiesStyle);
else if(WavPack::File::isSupported(stream))
file = new WavPack::File(stream, readAudioProperties, audioPropertiesStyle);
else if(Ogg::Speex::File::isSupported(stream))
file = new Ogg::Speex::File(stream, readAudioProperties, audioPropertiesStyle);
else if(Ogg::Opus::File::isSupported(stream))
file = new Ogg::Opus::File(stream, readAudioProperties, audioPropertiesStyle);
else if(TrueAudio::File::isSupported(stream))
file = new TrueAudio::File(stream, readAudioProperties, audioPropertiesStyle);
else if(ASF::File::isSupported(stream))
file = new WavPack::File(stream, readAudioProperties, audioPropertiesStyle);
else if(ASF::File::isSupported(stream))
file = new ASF::File(stream, readAudioProperties, audioPropertiesStyle);
else if(RIFF::AIFF::File::isSupported(stream))
file = new RIFF::AIFF::File(stream, readAudioProperties, audioPropertiesStyle);
else if(RIFF::WAV::File::isSupported(stream))
file = new RIFF::WAV::File(stream, readAudioProperties, audioPropertiesStyle);
else if(APE::File::isSupported(stream))
file = new APE::File(stream, readAudioProperties, audioPropertiesStyle);
else if(APEGen::File::isSupported(stream))
file = new APEGen::File(stream, readAudioProperties, audioPropertiesStyle);
file = new RIFF::WAV::File(stream, readAudioProperties, audioPropertiesStyle);
// isSupported() only does a quick check, so double check the file here.
// isSupported() only does a quick check, so double check the file here.
if(file) {
if(file->isValid())
@ -220,38 +182,18 @@ namespace
return 0;
if(ext == "MP3")
return new MPEG::File(fileName, ID3v2::FrameFactory::instance(), readAudioProperties, audioPropertiesStyle);
if(ext == "OGG")
return new Ogg::Vorbis::File(fileName, readAudioProperties, audioPropertiesStyle);
if(ext == "OGA") {
/* .oga can be any audio in the Ogg container. First try FLAC, then Vorbis. */
File *file = new Ogg::FLAC::File(fileName, readAudioProperties, audioPropertiesStyle);
if(file->isValid())
return file;
delete file;
return new Ogg::Vorbis::File(fileName, readAudioProperties, audioPropertiesStyle);
}
if(ext == "FLAC")
return new FLAC::File(fileName, ID3v2::FrameFactory::instance(), readAudioProperties, audioPropertiesStyle);
if(ext == "MPC")
return new MPEG::File(fileName, ID3v2::FrameFactory::instance(), readAudioProperties, audioPropertiesStyle);
if(ext == "MPC")
return new MPC::File(fileName, readAudioProperties, audioPropertiesStyle);
if(ext == "WV")
return new WavPack::File(fileName, readAudioProperties, audioPropertiesStyle);
if(ext == "SPX")
return new Ogg::Speex::File(fileName, readAudioProperties, audioPropertiesStyle);
if(ext == "OPUS")
return new Ogg::Opus::File(fileName, readAudioProperties, audioPropertiesStyle);
if(ext == "TTA")
return new TrueAudio::File(fileName, readAudioProperties, audioPropertiesStyle);
if(ext == "WMA" || ext == "ASF")
return new WavPack::File(fileName, readAudioProperties, audioPropertiesStyle);
if(ext == "WMA" || ext == "ASF")
return new ASF::File(fileName, readAudioProperties, audioPropertiesStyle);
if(ext == "AIF" || ext == "AIFF" || ext == "AFC" || ext == "AIFC")
return new RIFF::AIFF::File(fileName, readAudioProperties, audioPropertiesStyle);
if(ext == "WAV")
return new RIFF::WAV::File(fileName, readAudioProperties, audioPropertiesStyle);
if(ext == "APE")
return new APE::File(fileName, readAudioProperties, audioPropertiesStyle);
// module, nst and wow are possible but uncommon extensions
return new RIFF::WAV::File(fileName, readAudioProperties, audioPropertiesStyle);
// module, nst and wow are possible but uncommon extensions
if(ext == "MOD" || ext == "MODULE" || ext == "NST" || ext == "WOW")
return new Mod::File(fileName, readAudioProperties, audioPropertiesStyle);
if(ext == "S3M")
@ -259,11 +201,9 @@ namespace
if(ext == "IT")
return new IT::File(fileName, readAudioProperties, audioPropertiesStyle);
if(ext == "XM")
return new XM::File(fileName, readAudioProperties, audioPropertiesStyle);
if(ext == "TAK")
return new APEGen::File(fileName, readAudioProperties, audioPropertiesStyle);
return new XM::File(fileName, readAudioProperties, audioPropertiesStyle);
return 0;
return 0;
}
}
@ -366,22 +306,10 @@ StringList FileRef::defaultFileExtensions()
{
StringList l;
l.append("ogg");
l.append("flac");
l.append("oga");
l.append("opus");
l.append("mp3");
l.append("mpc");
l.append("wv");
l.append("spx");
l.append("tta");
l.append("m4a");
l.append("m4r");
l.append("m4b");
l.append("m4p");
l.append("3g2");
l.append("mp4");
l.append("m4v");
l.append("wma");
l.append("asf");
l.append("aif");
@ -389,7 +317,6 @@ StringList FileRef::defaultFileExtensions()
l.append("afc");
l.append("aifc");
l.append("wav");
l.append("ape");
l.append("mod");
l.append("module"); // alias for "mod"
l.append("nst"); // alias for "mod"

View File

@ -27,10 +27,9 @@
#include <taglib/toolkit/tstringlist.h>
#include <taglib/toolkit/tpropertymap.h>
#include <taglib/ape/apetag.h>
#include <taglib/mpeg/id3v1/id3v1tag.h>
#include <taglib/mpeg/id3v2/id3v2tag.h>
#include <taglib/ape/apetag.h>
#include <taglib/ogg/xiphcomment.h>
#include <taglib/riff/wav/infotag.h>
using namespace TagLib;
@ -135,10 +134,7 @@ PropertyMap TagUnion::properties() const
else if(dynamic_cast<const APE::Tag *>(d->tags[i]))
return dynamic_cast<const APE::Tag *>(d->tags[i])->properties();
else if(dynamic_cast<const Ogg::XiphComment *>(d->tags[i]))
return dynamic_cast<const Ogg::XiphComment *>(d->tags[i])->properties();
else if(dynamic_cast<const RIFF::Info::Tag *>(d->tags[i]))
else if(dynamic_cast<const RIFF::Info::Tag *>(d->tags[i]))
return dynamic_cast<const RIFF::Info::Tag *>(d->tags[i])->properties();
}
}
@ -164,10 +160,7 @@ void TagUnion::removeUnsupportedProperties(const StringList &unsupported)
else if(dynamic_cast<APE::Tag *>(d->tags[i]))
dynamic_cast<APE::Tag *>(d->tags[i])->removeUnsupportedProperties(unsupported);
else if(dynamic_cast<Ogg::XiphComment *>(d->tags[i]))
dynamic_cast<Ogg::XiphComment *>(d->tags[i])->removeUnsupportedProperties(unsupported);
else if(dynamic_cast<RIFF::Info::Tag *>(d->tags[i]))
else if(dynamic_cast<RIFF::Info::Tag *>(d->tags[i]))
dynamic_cast<RIFF::Info::Tag *>(d->tags[i])->removeUnsupportedProperties(unsupported);
}
}

View File

@ -45,23 +45,14 @@
#endif
#include <taglib/asf/asffile.h>
#include <taglib/mpeg/mpegfile.h>
#include <taglib/ogg/vorbis/vorbisfile.h>
#include <taglib/flac/flacfile.h>
#include <taglib/ogg/flac/oggflacfile.h>
#include <taglib/it/itfile.h>
#include <taglib/mod/modfile.h>
#include <taglib/mpc/mpcfile.h>
#include <taglib/mp4/mp4file.h>
#include <taglib/wavpack/wavpackfile.h>
#include <taglib/ogg/speex/speexfile.h>
#include <taglib/ogg/opus/opusfile.h>
#include <taglib/trueaudio/trueaudiofile.h>
#include <taglib/mpeg/mpegfile.h>
#include <taglib/riff/aiff/aifffile.h>
#include <taglib/riff/wav/wavfile.h>
#include <taglib/ape/apefile.h>
#include <taglib/ape/apegenfile.h>
#include <taglib/mod/modfile.h>
#include <taglib/s3m/s3mfile.h>
#include <taglib/it/itfile.h>
#include <taglib/wavpack/wavpackfile.h>
#include <taglib/xm/xmfile.h>
using namespace TagLib;
@ -111,116 +102,74 @@ FileName File::name() const
PropertyMap File::properties() const
{
// ugly workaround until this method is virtual
if(dynamic_cast<const APE::File* >(this))
return dynamic_cast<const APE::File* >(this)->properties();
if(dynamic_cast<const FLAC::File* >(this))
return dynamic_cast<const FLAC::File* >(this)->properties();
if(dynamic_cast<const IT::File* >(this))
return dynamic_cast<const IT::File* >(this)->properties();
if(dynamic_cast<const Mod::File* >(this))
return dynamic_cast<const Mod::File* >(this)->properties();
if(dynamic_cast<const MPC::File* >(this))
return dynamic_cast<const MPC::File* >(this)->properties();
if(dynamic_cast<const MPEG::File* >(this))
return dynamic_cast<const MPEG::File* >(this)->properties();
if(dynamic_cast<const Ogg::FLAC::File* >(this))
return dynamic_cast<const Ogg::FLAC::File* >(this)->properties();
if(dynamic_cast<const Ogg::Speex::File* >(this))
return dynamic_cast<const Ogg::Speex::File* >(this)->properties();
if(dynamic_cast<const Ogg::Opus::File* >(this))
return dynamic_cast<const Ogg::Opus::File* >(this)->properties();
if(dynamic_cast<const Ogg::Vorbis::File* >(this))
return dynamic_cast<const Ogg::Vorbis::File* >(this)->properties();
if(dynamic_cast<const RIFF::AIFF::File* >(this))
return dynamic_cast<const RIFF::AIFF::File* >(this)->properties();
if(dynamic_cast<const RIFF::WAV::File* >(this))
return dynamic_cast<const RIFF::WAV::File* >(this)->properties();
if(dynamic_cast<const S3M::File* >(this))
return dynamic_cast<const S3M::File* >(this)->properties();
if(dynamic_cast<const TrueAudio::File* >(this))
return dynamic_cast<const TrueAudio::File* >(this)->properties();
if(dynamic_cast<const WavPack::File* >(this))
return dynamic_cast<const WavPack::File* >(this)->properties();
if(dynamic_cast<const XM::File* >(this))
return dynamic_cast<const XM::File* >(this)->properties();
if(dynamic_cast<const ASF::File* >(this))
return dynamic_cast<const ASF::File* >(this)->properties();
if(dynamic_cast<const APEGen::File* >(this))
return dynamic_cast<const APEGen::File* >(this)->properties();
return tag()->properties();
// ugly workaround until this method is virtual
if(dynamic_cast<const IT::File*>(this))
return dynamic_cast<const IT::File*>(this)->properties();
if(dynamic_cast<const Mod::File*>(this))
return dynamic_cast<const Mod::File*>(this)->properties();
if(dynamic_cast<const MPC::File*>(this))
return dynamic_cast<const MPC::File*>(this)->properties();
if(dynamic_cast<const MPEG::File*>(this))
return dynamic_cast<const MPEG::File*>(this)->properties();
if(dynamic_cast<const RIFF::AIFF::File*>(this))
return dynamic_cast<const RIFF::AIFF::File*>(this)->properties();
if(dynamic_cast<const RIFF::WAV::File*>(this))
return dynamic_cast<const RIFF::WAV::File*>(this)->properties();
if(dynamic_cast<const S3M::File*>(this))
return dynamic_cast<const S3M::File*>(this)->properties();
if(dynamic_cast<const WavPack::File*>(this))
return dynamic_cast<const WavPack::File*>(this)->properties();
if(dynamic_cast<const XM::File*>(this))
return dynamic_cast<const XM::File*>(this)->properties();
if(dynamic_cast<const ASF::File*>(this))
return dynamic_cast<const ASF::File*>(this)->properties();
return tag()->properties();
}
void File::removeUnsupportedProperties(const StringList &properties)
{
// here we only consider those formats that could possibly contain
// unsupported properties
if(dynamic_cast<APE::File* >(this))
dynamic_cast<APE::File* >(this)->removeUnsupportedProperties(properties);
else if(dynamic_cast<FLAC::File* >(this))
dynamic_cast<FLAC::File* >(this)->removeUnsupportedProperties(properties);
else if(dynamic_cast<MPC::File* >(this))
dynamic_cast<MPC::File* >(this)->removeUnsupportedProperties(properties);
if(dynamic_cast<MPC::File*>(this))
dynamic_cast<MPC::File*>(this)->removeUnsupportedProperties(properties);
else if(dynamic_cast<MPEG::File* >(this))
dynamic_cast<MPEG::File* >(this)->removeUnsupportedProperties(properties);
else if(dynamic_cast<Ogg::Vorbis::File* >(this))
dynamic_cast<Ogg::Vorbis::File* >(this)->removeUnsupportedProperties(properties);
dynamic_cast<MPEG::File*>(this)->removeUnsupportedProperties(properties);
else if(dynamic_cast<RIFF::AIFF::File* >(this))
dynamic_cast<RIFF::AIFF::File* >(this)->removeUnsupportedProperties(properties);
else if(dynamic_cast<RIFF::WAV::File* >(this))
dynamic_cast<RIFF::WAV::File* >(this)->removeUnsupportedProperties(properties);
else if(dynamic_cast<TrueAudio::File* >(this))
dynamic_cast<TrueAudio::File* >(this)->removeUnsupportedProperties(properties);
dynamic_cast<RIFF::WAV::File*>(this)->removeUnsupportedProperties(properties);
else if(dynamic_cast<WavPack::File* >(this))
dynamic_cast<WavPack::File* >(this)->removeUnsupportedProperties(properties);
else if(dynamic_cast<ASF::File* >(this))
dynamic_cast<ASF::File* >(this)->removeUnsupportedProperties(properties);
else if(dynamic_cast<APEGen::File* >(this))
dynamic_cast<APEGen::File* >(this)->removeUnsupportedProperties(properties);
dynamic_cast<ASF::File*>(this)->removeUnsupportedProperties(properties);
else
tag()->removeUnsupportedProperties(properties);
}
PropertyMap File::setProperties(const PropertyMap &properties)
{
if(dynamic_cast<APE::File* >(this))
return dynamic_cast<APE::File* >(this)->setProperties(properties);
else if(dynamic_cast<FLAC::File* >(this))
return dynamic_cast<FLAC::File* >(this)->setProperties(properties);
else if(dynamic_cast<IT::File* >(this))
return dynamic_cast<IT::File* >(this)->setProperties(properties);
else if(dynamic_cast<Mod::File* >(this))
return dynamic_cast<Mod::File* >(this)->setProperties(properties);
else if(dynamic_cast<MPC::File* >(this))
return dynamic_cast<MPC::File* >(this)->setProperties(properties);
else if(dynamic_cast<MPEG::File* >(this))
return dynamic_cast<MPEG::File* >(this)->setProperties(properties);
else if(dynamic_cast<Ogg::FLAC::File* >(this))
return dynamic_cast<Ogg::FLAC::File* >(this)->setProperties(properties);
else if(dynamic_cast<Ogg::Speex::File* >(this))
return dynamic_cast<Ogg::Speex::File* >(this)->setProperties(properties);
else if(dynamic_cast<Ogg::Opus::File* >(this))
return dynamic_cast<Ogg::Opus::File* >(this)->setProperties(properties);
else if(dynamic_cast<Ogg::Vorbis::File* >(this))
return dynamic_cast<Ogg::Vorbis::File* >(this)->setProperties(properties);
else if(dynamic_cast<RIFF::AIFF::File* >(this))
return dynamic_cast<RIFF::AIFF::File* >(this)->setProperties(properties);
else if(dynamic_cast<RIFF::WAV::File* >(this))
return dynamic_cast<RIFF::WAV::File* >(this)->setProperties(properties);
else if(dynamic_cast<S3M::File* >(this))
return dynamic_cast<S3M::File* >(this)->setProperties(properties);
else if(dynamic_cast<TrueAudio::File* >(this))
return dynamic_cast<TrueAudio::File* >(this)->setProperties(properties);
else if(dynamic_cast<WavPack::File* >(this))
return dynamic_cast<WavPack::File* >(this)->setProperties(properties);
else if(dynamic_cast<XM::File* >(this))
return dynamic_cast<XM::File* >(this)->setProperties(properties);
else if(dynamic_cast<ASF::File* >(this))
return dynamic_cast<ASF::File* >(this)->setProperties(properties);
else if(dynamic_cast<APEGen::File* >(this))
return dynamic_cast<APEGen::File* >(this)->setProperties(properties);
else
return tag()->setProperties(properties);
if(dynamic_cast<IT::File*>(this))
return dynamic_cast<IT::File*>(this)->setProperties(properties);
else if(dynamic_cast<Mod::File*>(this))
return dynamic_cast<Mod::File*>(this)->setProperties(properties);
else if(dynamic_cast<MPC::File*>(this))
return dynamic_cast<MPC::File*>(this)->setProperties(properties);
else if(dynamic_cast<MPEG::File*>(this))
return dynamic_cast<MPEG::File*>(this)->setProperties(properties);
else if(dynamic_cast<RIFF::AIFF::File*>(this))
return dynamic_cast<RIFF::AIFF::File*>(this)->setProperties(properties);
else if(dynamic_cast<RIFF::WAV::File*>(this))
return dynamic_cast<RIFF::WAV::File*>(this)->setProperties(properties);
else if(dynamic_cast<S3M::File*>(this))
return dynamic_cast<S3M::File*>(this)->setProperties(properties);
else if(dynamic_cast<WavPack::File*>(this))
return dynamic_cast<WavPack::File*>(this)->setProperties(properties);
else if(dynamic_cast<XM::File*>(this))
return dynamic_cast<XM::File*>(this)->setProperties(properties);
else if(dynamic_cast<ASF::File*>(this))
return dynamic_cast<ASF::File*>(this)->setProperties(properties);
else
return tag()->setProperties(properties);
}
ByteVector File::readBlock(unsigned long length)

View File

@ -161,41 +161,6 @@
}
}
TagLib::Ogg::Vorbis::File *vorbis = dynamic_cast<TagLib::Ogg::Vorbis::File *>(f.file());
if(vorbis) {
TagLib::Ogg::XiphComment *tag = vorbis->tag();
if(tag) {
auto list = tag->pictureList();
if(!list.isEmpty()) {
// Just get the first image for now.
TagLib::FLAC::Picture *coverArt = list.front();
if(coverArt) {
// Look into TagLib::FLAC::Picture::Type for type description.
NSLog(@"Loading image metadata from Ogg Vorbis, type = %d",
static_cast<int>(coverArt->type()));
image = [NSData dataWithBytes:coverArt->data().data()
length:coverArt->data().size()];
}
}
}
}
TagLib::FLAC::File *flac = dynamic_cast<TagLib::FLAC::File *>(f.file());
if(flac) {
auto list = flac->pictureList();
if(!list.isEmpty()) {
// Just get the first image for now.
TagLib::FLAC::Picture *coverArt = list.front();
if(coverArt) {
// Look into TagLib::FLAC::Picture::Type for type description.
NSLog(@"Loading image metadata from FLAC, type = %d",
static_cast<int>(coverArt->type()));
image = [NSData dataWithBytes:coverArt->data().data()
length:coverArt->data().size()];
}
}
}
if(nil != image) {
[dict setObject:image forKey:@"albumArt"];
}
@ -208,11 +173,11 @@
+ (NSArray *)fileTypes {
// May be a way to get a list of supported formats
return @[@"ape", @"asf", @"wma", @"ogg", @"opus", @"mpc", @"flac", @"mp3", @"tak", @"ac3", @"apl", @"dts", @"dtshd", @"tta", @"wav", @"aif", @"aiff", @"wv", @"wvp"];
return @[@"asf", @"wma", @"mpc", @"mp3", @"apl", @"wav", @"aif", @"aiff", @"wv", @"wvp"];
}
+ (NSArray *)mimeTypes {
return @[@"audio/x-ape", @"audio/x-ms-wma", @"application/ogg", @"application/x-ogg", @"audio/x-vorbis+ogg", @"audio/x-musepack", @"audio/x-flac", @"audio/x-m4a", @"audio/mpeg", @"audio/x-mp3", @"audio/x-tak", @"audio/x-ac3", @"audio/x-apl", @"audio/x-dts", @"audio/x-dtshd", @"audio/x-tta", @"audio/wav", @"audio/aiff", @"audio/x-wavpack"];
return @[@"audio/x-ms-wma", @"audio/x-musepack", @"audio/mpeg", @"audio/x-mp3", @"audio/x-apl", @"audio/wav", @"audio/aiff", @"audio/x-wavpack"];
}
+ (float)priority {