Klar bedeutet das teilweise eine komplette Programmänderung, und solche sind immer lästig. Ich kann dir aber aus eigener Erfahrung sagen, dass es sehr sinnvoll ist, das Programm von vorneherein so zu gestalten, dass auch gröbere Änderungen im Funktionsumfang nur geringe Änderungen am Code nötig machen. Also: Besser jetzt alles einmal ändern, und später Ruhe damit haben, als sich ständig damit rumärgern zu müssen.
Ob du nun eine Klassenhierarchie aufbaust, wie Jelly es vorgeschlagen hat, oder nur eine Klasse (mein Vorschlag) mit einer Public-Lese/Schreibroutine, die dann selbst entscheidet, welche Private-Routine (mp3/ogg/wma/...) die richtige ist, bleibt dir überlassen
. Wenn es ein reiner Player ohne Tag-Editor werden soll, würde ich meine Methode vorziehen - zur Verarbeitung neuer Dateitypen musst du dann nur die Klasse selbst erweitern, der ganze Rest bleibt gleich.
Möchtest du auch einen umfangreichen Tag-Editor für die unterschiedlichen Typen implementieren, wäre wohl Jellys Methode besser, da mein Verfahren keinen Zugriff auf die internen Tag-Typen (z.B. id2v1 / v2) bietet.
Nachtrag: knappe 3000 Zeilen? Ich durfte mich letztens durch knapp 20.000 Zeilen quälen, weil ich einen Umbau vorgenommen habe. Und das ohne die Hilfe, dass eine vergessene Stelle einen Compilierfehler ergibt...
Edit: Mit der ATL-WMA-
Unit hatte ich mal ein ganz ähnliches Problem. Die hat iirc einen kleinen Fehler, bzw. versteht die neue WMA-Version nicht richtig. Ich hab den glaube ich ausgebügelt, werde mal danach suchen, und dann hier posten