Guten Tag zusammen,
wie der titel schon verrät geht es darum werte aus einer map auszulesen. Wir sollen title,author,album und duration aus einer map auslesen.
Hier noch die genaue Aufgabenstellung:
"Wie weiter oben bereits beschrieben, können einige Audio-Dateien (mp3, ogg) Meta-Daten (Tags) enthalten. Zur Bearbeitung dieser speziellen Art von Audio-Dateien haben wir die Klasse TaggedFile vorgesehen. In diesen Tags können unter anderem Informationen zu Titel, Interpret und Album oder auch Informationen zu der Audio-Datei selbst enthalten sein.
Die statische Methode readTags() der Klasse studiplayer.basic.TagReader erlaubt es, die einzelnen Tags, also die einzelnen Werte der Meta-Daten, auszulesen.
Implementieren Sie in der Klasse TaggedFile die Methode public void readAndStoreTags(String pathname) Die Methode nutzt studiplayer.basic.TagReader.readTags(), um die Tags “title“, “author“, “album“ und “duration“ aus derjenigen Datei auszulesen, deren Pfadname im Parameter pathname übergeben wird.
Falls die Tags belegt sind und sinnvolle Werte enthalten (also nicht null-Referenz oder leerer String oder Wert 0), sollen die ausgelesenen Werte in geeigneter Weise in Attributen der Klasse (oder in Attributen einer Basisklasse) gespeichert werden. Sofern nötig, ändern Sie hierzu die Sichtbarkeiten (private → protected) der Attribute in der Basisklasse.
Sollten einige Attribute bereits mit Werten belegt sein, hat der aus dem Tag gelesene Wert (falls sinnvoll) höhere Priorität und soll den alten Wert des Attributs überschreiben.
Beispiel: evtl. speichern sie bereits einen Titel oder Autor, weil die entsprechenden Attribute schon beim Aufruf von parseFilename() im Code der Basisklasse belegt wurden.
Erweitern Sie den Konstruktor der Klasse TaggedFile, der einen Pfadnamen als Argument erwartet, dahingehend, dass nach Aufruf des Konstruktors der Basisklasse ( super ) die Methode readAndStoreTags() mit einem geeigneten Argument aufgerufen wird.
Hinweis: Sie sollten ausnützen, das der Konstruktor der Basisklasse bereits eine Normalisierung und Überprüfung des Pfadnamens ausführt. Holen Sie sich dieses Ergebnis und nutzen Sie nicht den ungeprüften String"
Ehrlich gesagt weiß ich nicht genau wie man die map ausliest. Wenn ich es richtig verstanden hab hat jedes TaggedFileObjekt diese Tags welche mit readAndStoreTags() ausgelsen in einer Map gespeichert werden und dann ggf über die ursrprünglichen Attribute überschrieben.
Hier nun mein Code aber ich weiß ehrlich gesagt nicht wie ich das implementieren soll...
Vielen Dank im Voraus für eure Hilfe
wie der titel schon verrät geht es darum werte aus einer map auszulesen. Wir sollen title,author,album und duration aus einer map auslesen.
Hier noch die genaue Aufgabenstellung:
"Wie weiter oben bereits beschrieben, können einige Audio-Dateien (mp3, ogg) Meta-Daten (Tags) enthalten. Zur Bearbeitung dieser speziellen Art von Audio-Dateien haben wir die Klasse TaggedFile vorgesehen. In diesen Tags können unter anderem Informationen zu Titel, Interpret und Album oder auch Informationen zu der Audio-Datei selbst enthalten sein.
Die statische Methode readTags() der Klasse studiplayer.basic.TagReader erlaubt es, die einzelnen Tags, also die einzelnen Werte der Meta-Daten, auszulesen.
Implementieren Sie in der Klasse TaggedFile die Methode public void readAndStoreTags(String pathname) Die Methode nutzt studiplayer.basic.TagReader.readTags(), um die Tags “title“, “author“, “album“ und “duration“ aus derjenigen Datei auszulesen, deren Pfadname im Parameter pathname übergeben wird.
Falls die Tags belegt sind und sinnvolle Werte enthalten (also nicht null-Referenz oder leerer String oder Wert 0), sollen die ausgelesenen Werte in geeigneter Weise in Attributen der Klasse (oder in Attributen einer Basisklasse) gespeichert werden. Sofern nötig, ändern Sie hierzu die Sichtbarkeiten (private → protected) der Attribute in der Basisklasse.
Sollten einige Attribute bereits mit Werten belegt sein, hat der aus dem Tag gelesene Wert (falls sinnvoll) höhere Priorität und soll den alten Wert des Attributs überschreiben.
Beispiel: evtl. speichern sie bereits einen Titel oder Autor, weil die entsprechenden Attribute schon beim Aufruf von parseFilename() im Code der Basisklasse belegt wurden.
Erweitern Sie den Konstruktor der Klasse TaggedFile, der einen Pfadnamen als Argument erwartet, dahingehend, dass nach Aufruf des Konstruktors der Basisklasse ( super ) die Methode readAndStoreTags() mit einem geeigneten Argument aufgerufen wird.
Hinweis: Sie sollten ausnützen, das der Konstruktor der Basisklasse bereits eine Normalisierung und Überprüfung des Pfadnamens ausführt. Holen Sie sich dieses Ergebnis und nutzen Sie nicht den ungeprüften String"
Ehrlich gesagt weiß ich nicht genau wie man die map ausliest. Wenn ich es richtig verstanden hab hat jedes TaggedFileObjekt diese Tags welche mit readAndStoreTags() ausgelsen in einer Map gespeichert werden und dann ggf über die ursrprünglichen Attribute überschrieben.
Hier nun mein Code aber ich weiß ehrlich gesagt nicht wie ich das implementieren soll...
Java:
import java.util.Map;
import studiplayer.basic.BasicPlayer;
import studiplayer.basic.TagReader;
public class TaggedFile extends AudioFile {
public TaggedFile(String pathname){
super(pathname);
readAndStoreTags(pathname);///
}
public TaggedFile(){
super();
}
@Override
public void play() {
BasicPlayer.play(getPathname());
}
@Override
public void togglePause() {
BasicPlayer.togglePause();
}
@Override
public void stop() {
BasicPlayer.stop();
}
@Override
public String getFormattedDuration() {
return "";
}
@Override
public String getFormattedPosition() {
return "";
}
public static String timeFormatter(long microtime){
//Negative value of microtime
if(microtime < 0){
throw new RuntimeException("Negative Time value provided");
}
//Transformation from microseconds to seconds
long timeInSeconds = microtime / 1000000;
//Checking out of range 99:59 (mm:ss)
if(timeInSeconds > 5999){
throw new RuntimeException("Time value exceeds allowed format");
}
//Transformation in mm:ss
long TimeInMinutes = timeInSeconds / 60;
timeInSeconds = timeInSeconds - (TimeInMinutes * 60);
String parsedTime = "";
if(TimeInMinutes < 10){
parsedTime = "0" + TimeInMinutes;
}else{
parsedTime = "" + TimeInMinutes;
}
parsedTime = parsedTime + ":";
if(timeInSeconds < 10){
parsedTime = parsedTime + "0" + timeInSeconds;
}else{
parsedTime = parsedTime + "" + timeInSeconds;
}
return parsedTime;
}
public void readAndStoreTags(String pathname){
Map <String,Object> tagMap = studiplayer.basic.TagReader.readTags(pathname);
//http://www.java-tutorial.org/maps.html
for( String key: tagMap.keySet()){
if(tagMap.get(key) != null && tagMap.get(key) != "")){
}
}
}
}
Vielen Dank im Voraus für eure Hilfe
Zuletzt bearbeitet: