![]() |
Sylloge
A C# helper library
|
00001 using System; 00002 using System.Collections.Generic; 00003 using System.Linq; 00004 using System.Text; 00005 00006 namespace Sylloge.Audio.Metadata.ID3 00007 { 00011 public static class Helper 00012 { 00013 private static System.Text.Encoding m_iso; 00014 private static System.Text.Encoding m_utf16; 00015 private static System.Text.Encoding m_utf16be; 00016 private static System.Text.Encoding m_utf8; 00017 00018 static Helper() 00019 { 00020 Helper.m_iso = System.Text.Encoding.GetEncoding(28591); // 28591 - iso-8859-1 - Western European (ISO) 00021 Helper.m_utf16 = new UnicodeEncoding(false, true); // little-endian 00022 Helper.m_utf16be = new UnicodeEncoding(true, false); 00023 Helper.m_utf8 = System.Text.Encoding.GetEncoding(65001); // 65001 - utf-8 - Unicode (UTF-8) 00024 } 00025 00029 public static System.Text.Encoding ISO { get { return Helper.m_iso; } } 00033 public static System.Text.Encoding UTF16 { get { return Helper.m_utf16; } } 00037 public static System.Text.Encoding UTF16BE { get { return Helper.m_utf16be; } } 00041 public static System.Text.Encoding UTF8 { get { return Helper.m_utf8; } } 00042 00048 public static bool CheckPictureType(byte pbyte) 00049 { 00050 Array ptypes = Enum.GetValues(typeof(ID3.Picture)); 00051 return pbyte <= (byte)ptypes.GetValue(ptypes.Length - 1); 00052 } 00053 00064 public static System.Text.Encoding GetEncoding(byte ebyte) 00065 { 00066 switch (ebyte) { 00067 case 0x00: return Helper.ISO; 00068 case 0x01: return Helper.UTF16; 00069 case 0x02: return Helper.UTF16BE; 00070 case 0x03: return Helper.UTF8; 00071 default: break; 00072 } 00073 return ID3.Helper.ISO; 00074 } 00075 00081 public static string EnumToString(ID3.Picture type) 00082 { 00083 switch (type) { 00084 case Picture.FileIcon: 00085 return "32x32 pixels 'file icon' (PNG only)"; 00086 case Picture.OtherFileIcon: 00087 return "Other file icon"; 00088 case Picture.Cover_Front: 00089 return "Cover (front)"; 00090 case Picture.Cover_Back: 00091 return "Cover (back)"; 00092 case Picture.Leaflet_Page: 00093 return "Leaflet page"; 00094 case Picture.Media: 00095 return "Media (e.g. lable side of CD)"; 00096 case Picture.Lead_Artist: 00097 return "Lead artist/lead performer/soloist"; 00098 case Picture.Artist_Performer: 00099 return "Artist/performer"; 00100 case Picture.Band_Orchestra: 00101 return "Band/Orchestra"; 00102 case Picture.Lyricist: 00103 return "Lyricist/text writer"; 00104 case Picture.Recording_Location: 00105 return "Recording Location"; 00106 case Picture.During_Recording: 00107 return "During recording"; 00108 case Picture.During_Performance: 00109 return "During performance"; 00110 case Picture.Movie_Screen_Capture: 00111 return "Movie/video screen capture"; 00112 case Picture.A_Bright_Coloured_Fish: 00113 return "A bright coloured fish"; // Seriously ... this is in the ID3v2 spec??!?? 00114 case Picture.Band_Logotype: 00115 return "Band/artist logotype"; 00116 case Picture.Publisher_Logotype: 00117 return "Publisher/Studio logotype"; 00118 default: break; 00119 } 00120 return Enum.GetName(typeof(Picture), type); 00121 } 00122 00128 public static string EnumToString(ID3.Genre value) 00129 { 00130 // Becuase the built in Enum.GetName will return a literal string representation 00131 // of the enum name (i.e. RAndB instead of R&B), we need to convert the ones with 00132 // spaces and special characters in the name to make them user friendly readable 00133 switch (value) { 00134 case Genre.Classic_Rock: 00135 return "Classic Rock"; 00136 case Genre.Hip_Hop: 00137 return "Hip-Hop"; 00138 case Genre.New_Age: 00139 return "New Age"; 00140 case Genre.RAndB: 00141 return "R&B"; 00142 case Genre.Death_Metal: 00143 return "Death Metal"; 00144 case Genre.Euro_Techno: 00145 return "Euro-Techno"; 00146 case Genre.Trip_Hop: 00147 return "Trip-Hop"; 00148 case Genre.Jazz_Funk: 00149 return "Jazz+Funk"; 00150 case Genre.Sound_Clip: 00151 return "Sound Clip"; 00152 case Genre.Instrumental_Pop: 00153 return "Instrumental Pop"; 00154 case Genre.Instrumental_Rock: 00155 return "Instrumental Rock"; 00156 case Genre.Techno_Industrial: 00157 return "Techno-Industrial"; 00158 case Genre.Pop_Folk: 00159 return "Pop-Folk"; 00160 case Genre.Southern_Rock: 00161 return "Southern Rock"; 00162 case Genre.Top_40: 00163 return "Top 40"; 00164 case Genre.Christian_Rap: 00165 return "Christian Rap"; 00166 case Genre.Pop_Funk: 00167 return "Pop/Funk"; 00168 case Genre.Native_American: 00169 return "Native American"; 00170 case Genre.New_Wave: 00171 return "New Wave"; 00172 case Genre.Lo_Fi: 00173 return "Lo-Fi"; 00174 case Genre.Acid_Punk: 00175 return "Acid Punk"; 00176 case Genre.Acid_Jazz: 00177 return "Acid Jazz"; 00178 case Genre.Rock_And_Roll: 00179 return "Rock & Roll"; 00180 case Genre.Hard_Rock: 00181 return "Hard Rock"; 00182 case Genre.Folk_Rock: 00183 return "Folk-Rock"; 00184 case Genre.National_Folk: 00185 return "National Folk"; 00186 case Genre.Fast_Fusion: 00187 return "Fast Fusion"; 00188 case Genre.Gothic_Rock: 00189 return "Gothic Rock"; 00190 case Genre.Progressive_Rock: 00191 return "Progressive Rock"; 00192 case Genre.Psychedelic_Rock: 00193 return "Psychedelic Rock"; 00194 case Genre.Symphonic_Rock: 00195 return "Symphonic Rock"; 00196 case Genre.Slow_Rock: 00197 return "Slow Rock"; 00198 case Genre.Big_Band: 00199 return "Big Band"; 00200 case Genre.Easy_Listening: 00201 return "Easy Listening"; 00202 case Genre.Chamber_Music: 00203 return "Chamber Music"; 00204 case Genre.Booty_Bass: 00205 return "Booty Bass"; 00206 case Genre.Porn_Groove: 00207 return "Porn Groove"; 00208 case Genre.Slow_Jam: 00209 return "Slow Jam"; 00210 case Genre.Power_Ballad: 00211 return "Power Ballad"; 00212 case Genre.Rhythmic_Soul: 00213 return "Rhythmic Soul"; 00214 case Genre.Punk_Rock: 00215 return "Punk Rock"; 00216 case Genre.Drum_Solo: 00217 return "Drum Solo"; 00218 case Genre.A_capella: 00219 return "A capella"; 00220 case Genre.Euro_House: 00221 return "Euro-House"; 00222 case Genre.Dance_Hall: 00223 return "Dance Hall"; 00224 case Genre.Goa_Trance: 00225 return "Goa Trance"; 00226 case Genre.Drum_Bass: 00227 return "Drum & Bass"; 00228 case Genre.Club_House: 00229 return "Club-House"; 00230 case Genre.Hardcore_Techno: 00231 return "Hardcore Techno"; 00232 case Genre.Afro_punk: 00233 return "Afro-punk"; 00234 case Genre.Polsk_Punk: 00235 return "Polsk Punk"; 00236 case Genre.Christian_Gangsta_Rap: 00237 return "Christian Gangsta Rap"; 00238 case Genre.Heavy_Metal: 00239 return "Heavy Metal"; 00240 case Genre.Black_Metal: 00241 return "Black Metal"; 00242 case Genre.Contemporary_Christian: 00243 return "Contemporary Christian"; 00244 case Genre.Christian_Rock: 00245 return "Christian Rock"; 00246 case Genre.Thrash_Metal: 00247 return "Thrash Metal"; 00248 case Genre.Art_Rock: 00249 return "Art Rock"; 00250 case Genre.Big_Beat: 00251 return "Big Beat"; 00252 case Genre.Industro_Goth: 00253 return "Industro-Goth"; 00254 case Genre.Jam_Band: 00255 return "Jam Band"; 00256 case Genre.Math_Rock: 00257 return "Math Rock"; 00258 case Genre.New_Romantic: 00259 return "New Romantic"; 00260 case Genre.Nu_Breakz: 00261 return "Nu-Breakz"; 00262 case Genre.Post_Punk: 00263 return "Post-Punk"; 00264 case Genre.Post_Rock: 00265 return "Post-Rock"; 00266 case Genre.Space_Rock: 00267 return "Space Rock"; 00268 case Genre.Trop_Rock: 00269 return "Trop Rock"; 00270 case Genre.World_Music: 00271 return "World Music"; 00272 case Genre.Audio_Theatre: 00273 return "Audio Theatre"; 00274 case Genre.Neue_Deutsche_Welle: 00275 return "Neue Deutsche Welle"; 00276 case Genre.Indie_Rock: 00277 return "Indie Rock"; 00278 case Genre.G_Funk: 00279 return "G-Funk"; 00280 case Genre.Garage_Rock: 00281 return "Garage Rock"; 00282 default: break; 00283 } 00284 return Enum.GetName(typeof(Genre), value); 00285 } 00286 00292 public static Sylloge.Audio.Metadata.ID3.Genre ParseGenre(string type) 00293 { 00294 if (type == null) { throw new ArgumentNullException("type"); } 00295 string f = type.ToLower(); 00296 int c = Enum.GetValues(typeof(ID3.Genre)).Length; 00297 for (int i = 0; i < c; i++) { 00298 if (f == Helper.EnumToString((ID3.Genre)i).ToLower()) { 00299 return ((ID3.Genre)i); 00300 } 00301 } 00302 return Genre.Other; 00303 } 00304 00310 public static int ToSynchsafeInt(int ival) 00311 { 00312 int ret = 0; 00313 int mask = 0x7F; 00314 while ((mask ^ 0x7FFFFFFF) > 0) { 00315 ret = ival & ~mask; 00316 ret <<= 1; 00317 ret |= ival & mask; 00318 mask = ((mask + 1) << 8) - 1; 00319 ival = ret; 00320 } 00321 return ret; 00322 } 00323 00329 public static int FromSynchsafeInt(int syncint) 00330 { 00331 int ret = 0; 00332 int mask = 0x7F000000; 00333 while (mask > 0) { 00334 ret >>= 1; 00335 ret |= syncint & mask; 00336 mask >>= 8; 00337 } 00338 return ret; 00339 } 00340 } 00341 }
1.7.4