teamon.eu

blah blah blah

MP3 Spider

29 lipca 2007

Kategorie:

Tagi:

  • C#

Razem 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

  • GiM 16 sierpnia 2007 21:17:16

    no offence, ale to wszystko najprawdopodobniej załatwiłby jednolinijkowiec find + id3 (lub jakakolwiek odmiana) + libsqlite...

Zostaw komentarz

code