El verdadero geek no se queja de que su reproductor de MP3 no ordene las canciones…

… el verdadeo geek, escribe una rutina que ordene alfabéticamente los archivos y directorios de un directorio FAT.


Sí, lo reconozco: tengo un reproductor de MP3 que es una verdadera porquería. Antes tenía un Creative MuVO V200, pero desde que me lo cargué con una actualización de firmware, mi vida se había vuelto gris y anodina. Sabía que si me compraba algo mejor que el MuVO, también acabaría tratando de “tunearlo” a toda costa, y por ende, cargándomelo, así que me decanté por un modelo baratito. Así, al menos, cuando me lo cargase, tampoco me daría demasiada pena.


El caso es que mi nuevo reproductor desde el principio me dejó desconcertado. Resulta que cuando cargaba canciones desde el Windows Media Player, estas no se reproducían en orden alfabético, sino en el orden en el que las había añadido al reproductor. ¡Qué invento del demonio!


<< Tanto esmero en ordenar mi biblioteca de emepetreses para que este chisme con vida propia decida que mi vida requiere un orden distinto al que yo he previsto. No me gusta… no, no, no y no. Me niego a la regir mi vida al ritmo de un tirano digital >>. Tenía que hacer algo, así que busqué una explicación a semejante ultraje.


Lo primero que pensé fue: “el ceporro que haya programado esto, ordena las canciones por fecha de creación del archivo”. Es curioso… los programadores siempre pensamos que el resto de programadores son unos ceporros, ¿verdad? Y resulta que no es ni más ni menos certero que el nivel ceporrismo que tú, querido lector, puedas intuir en mis palabras. Lo cierto del caso es que el programador del firmware de mi MP3 no es un ceporro. Es un programador ágil, que no ha implementado ninguna característica porque nadie se la ha solicitado.


El problema de mi reproductor de MP3 es muy común, y no está causado por la mala baba de un programador que quiera dominar el mundo imponiendo su propio orden a nuestros archivos: está causado por la implementación del sistema de archivos FAT.


Pensemos en cómo es un directorio FAT:



Bueno, además de ver que soy un cutre que dibuja en las servilletas de papel, vemos que un directorio es una simple tabla con el nombre, extensión, atributos… y un apuntador al primer cluster en el que se encuentra el archivo. ¿Cual es el problema con mi reproductor de MP3? El problema es que cuando añadimos archivos o subdirectorios a un volumen FAT, estamos añadiendo secuencialmente entradas a esta tabla. El programador de mi reproductor, va leyendo y reproduciendo cada una de estas entradas, así que si las pilla desordenadas, las reproduce tal cual (provocando la ira de los que como a mi, nos gusta oir las canciones en un determinado orden).


¿Cómo se puede solucionar esto?


Lo primero que se nos ocurre es: ¡Ordenemos esa tabla! Se trata sólo de leer estructuras de tamaño fijo desde disco a un buffer, ordenarlas, y volver a volcarlas a disco. Es cierto, el problema es tan sencillo como ese… pero este enfoque tiene dos desventajas:



  • Requiere acceso directo a disco, por lo que en Windows sólo podría funcionar con permisos de administrador.

  • Las estructuras a manejar son distintas en función del tipo de FAT que tenga el disco (hay FAT12, 16 y 32, con ligeras diferencias en el directorio… nombres largos… etc).

La segunda solución requiere aprovecharse del conocimiento de la mente de los programadores. Sí amigos… pensad en cómo MOVERÍAIS archivos en un directorio FAT. Desde luego, a nadie se le ocurriría moverlos físicamente en disco… ¡basta con cambiar las entradas de la tabla!. Así que ese es el truco que siempre funciona para ordenar archivos en un volumen FAT: ir moviéndolos a un nuevo directorio, sabiendo que la nueva tabla se irá creando secuencialmente. Una vez completada la operación, sólo tenemos que sustituir el directorio original por el nuevo.


Así que ahora ya puedo ir tranquilamente por el mundo, escuchando mis canciones en el orden que a mi me gusta, y mirando por encima del hombro a todo aquel que tiene un iPod, Muvo, Zune, o cualquier reproductor de “pedigree”. Vosotros tendréis un reproductor mejor que el mío, pero el mío venía con rompecabezas de regalo, ¡y lo he solucionado!.


PD: Os dejo los fuentes y binarios del programita que uso para ordenar el directorio de mi reproductor de MP3. A ver si alguien le pone una bonita interfaz gráfica de usuario, lo modifica para que ordene por distintos criterios al alfabético, ¡y de paso me lo envía de vuelta!



 

4 comentarios en “El verdadero geek no se queja de que su reproductor de MP3 no ordene las canciones…”

  1. Hola!!
    He hechado un vistacillo al codigo y es un gran trabajo!
    Lo que ocurre es que no he podido hacer ninguna prueba.
    Llamame cazurro pero no se como pasarle exactamente las carpetas a ordenar.
    De hecho he visto la ejecucion gracias a una parada en VS2005.
    Porfi da unas instrucciones basicas…

  2. Bueno, no se si te refieres a que no sabes cómo funciona la implementación, o el propio comando Dirsort.exe.

    Si te refieres al comando, es sencillo:
    Dirsort directorio1 directorio2 …. directorioN [/s]
    Es decir, dirsort.exe, una lista de directorios a ordenar, y “/s” si se desea que la ordenación sea recursiva. Si pones Dirsort /h te mostrará la sintaxis del comando.

    La clase… básicamente funciona tal y como se menciona en el post. Instancias la clase pasándole como argumento el path a ordenar, y luego tiene un método que permite ordenar por nombre (pretendía implementar la ordenación por varios criterios, pero me aburrí). Lanza un evento que va informando del progreso de la ordenación, de forma que su clase usuaria pueda ir imprimiendo en consola, actualizando una barra de progreso… o lo que sea (también pretendía hacerle una bonita interfaz, pero me quedé en la línea de comandos, que personalmente es lo que necesitaba para automatizar la ordenación de mis carpetas).

  3. Este programa permite sincronizar dos directorios por ejemplo uno donde lo ordenas como quieras las canciones y el otro en el reproducor. De este modo te las copia secuencialmente¡¡¡ filemenu tools 5.1

    Has resuelto un problema importante yo escuho muchos audiolibros y esta jodido, de verdad.

    Gracias

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *