MP3 Spider
29 lipca 2007Razem z kumplami (ta sama niezrównoważona ekipa z mat-fizu) w trakcie produkcji softu do obsługi szkolnego radiowęzła (o którym niedługo napisze). Informacje o wszystkich utworach chcemy umieścić w bazie danych.
Problem - Kto to wszystko doda? (tytuł, zespół, album, ścieżka, typ...) Rozwiązanie - Program który zrobi to za nas.
Tak więc zabrałem się do rozpatrzenia tego jakże skomplikowanego zadania. Plan był prosty: Odwiedzić wszystkie pliki, pobrać z nich dane ID3 i zapisać do bazy. Parę minut z googlami i napisałem pająka które sprawdza wszystkie subfoldery i wyciąga tagi za pomocą ID3 Library
Kod pająka:
using System; using System.Collections.Generic; using System.Text; using System.IO; namespace MP3Spider { class Program { static void Main(string[] args) { while (true) { ProcessDir(Console.ReadLine()); } } static void ProcessDir(string sourceDir) { MP3 current; string[] fileEntries = Directory.GetFiles(sourceDir); string[] parts; foreach (string fileName in fileEntries) { parts = fileName.Split(new Char[] { '.' }); if (parts[parts.Length - 1] == "mp3") { FileInfo fFileInfo = new FileInfo(fileName); current = new MP3(fFileInfo.DirectoryName, fFileInfo.Name); FileCommands.readMP3Tag(ref current); save(current); } } string[] subdirEntries = Directory.GetDirectories(sourceDir); foreach (string subdir in subdirEntries) { if ((File.GetAttributes(subdir) & FileAttributes.ReparsePoint) != FileAttributes.ReparsePoint) ProcessDir(subdir); } } static void save(MP3 mp3) { Console.WriteLine("Source: " + mp3.fileComplete); Console.WriteLine("Title: " + mp3.id3Title); Console.WriteLine("Artist: " + mp3.id3Artist); Console.WriteLine("Album: " + mp3.id3Album); Console.WriteLine("Genre: " + mp3.id3Genre); Console.WriteLine("---------------------"); } } }
W metodzie save wystarczy wrzucić zapis do bazy. Prawda że proste?
P.S. ID3 Library udostępnia też możliwość edycji tagów, nie bawiłem się tym ale komuś może sie przydać.
Edit: Grrr, musze wychodzić a widze ze sie kod niesformatowal, poprawie jak wroce.
1 komentarz
no offence, ale to wszystko najprawdopodobniej załatwiłby jednolinijkowiec find + id3 (lub jakakolwiek odmiana) + libsqlite...