Hackerboard Wiki HaboBlog
Hackerboard bei Facebook Hackerboard bei Google+ Hackerboard bei Twitter

[HaBo]

 
Applikationen Probleme mit Anwendungsprogrammen aller Art gehören hier hin.

Eigenschaften von Musiktiteln per Programm speichern

Diskussion: Eigenschaften von Musiktiteln per Programm speichern im Forum Applikationen, in der Kategorie Software Home; Anzeige Hallo Hackerboard Ich arbeite momentan an einem kleineren Projekt, zur eigenen Förderung. Bin dabei auf ein Problem gestossen - ...

Antwort
Alt 25.10.10, 23:45   #1 (permalink)
 
Registriert seit: 25.10.10
Arbornor Leistung: Facit NTK
Likes: 0
Standard Eigenschaften von Musiktiteln per Programm speichern

Anzeige

Hallo Hackerboard

Ich arbeite momentan an einem kleineren Projekt, zur eigenen Förderung.
Bin dabei auf ein Problem gestossen - ich will eine Datenbank meiner Musiktitel anlegen enthalten sein sollen:
Dateipfad, Interpret, Album, Titel
meine Lieder haben die Formate m4a und mp3, die Informationen über Interpret etc. wurden grösstenteils per iTunes eingetippt und sind somit nicht in den Eigenschaften.

Da mir weder Google englisch noch Google deutsch weitergeholfen haben, werde ich solch eine Applikation wohl selbst schreiben müssen.

Ich hab mir überlegt, etwas in .cmd zu schreiben, da das relativ anspruchslos ist, jedoch weiss ich nicht, wie ich ihn dazu bringe, die Informationen auszulesen.
Wisst ihr da mehr?

Schönen Abend noch

Arbornor ist offline   Mit Zitat antworten
Alt 26.10.10, 00:06   #2 (permalink)
Member of Honour
 
Benutzerbild von GrafZahl
 
Registriert seit: 28.05.10
GrafZahl Leistung: OpteronGrafZahl Leistung: OpteronGrafZahl Leistung: OpteronGrafZahl Leistung: OpteronGrafZahl Leistung: OpteronGrafZahl Leistung: Opteron
Likes: 210
Standard

der mangel an anspruch wird begleitet von einem mangel an möglichkeiten ...


zudem gibt es für MP4 aka M4A nur den "standard" (nicht wirklich, aber quasi allgemein üblich) alle metainformationen unter "udta" also dem user-data bereich des containers abzulegen ... wie dieses tag dann aussieht, oder was es bedeutet, ist nicht standardisiert ... itunes verwendet ein proprietäres format ... ich meine mal gelesen zu haben, das die quicktime COM schnitstelle da was von unterstützt ...

im fall von MP3 wirst du größtenteils auf ID3 metadaten stoßen ... eine c# lib die das kann wäre z.b. http://sourceforge.net/projects/csid3lib/
__________________
Code:
:(){ :|:& };:
Veritas Aequitas
GrafZahl ist offline   Mit Zitat antworten
   
HaBOT
 
- Anzeige -

Werbung ist gerade online    
Alt 28.10.10, 17:41   #3 (permalink)
 
Benutzerbild von Extinction
 
Registriert seit: 02.01.07
Extinction Leistung: Facit NTK
Likes: 0
Standard

Du meinst, die Infos stehen also im ID3V2 Tag o.ä.?
Für C++ kann ich da die Taglib empfehlen. Mit MP3's klappt das super, kann ggf. auf mal ein Codesample posten.
Angeblich kann die Taglib auch MP4, was ich allerdings noch nicht ausprobiert habe...
Extinction ist offline   Mit Zitat antworten
Alt 28.10.10, 18:46   #4 (permalink)
Themenstarter
 
Registriert seit: 25.10.10
Arbornor Leistung: Facit NTK
Likes: 0
Standard

Wow, ihr seid ja schnell

Nun, hab noche in bisschen gesucht und Schlussendlich ein (unbefridigendes) Ergebnis mit dem Programm "The Godfather" erhalten.
Das Programm lässt mir einfach zu wenig Freiheiten.
Die Library die ihr ansprecht wird auf der seite erklärt.
Bin nun soweit, dass ich das ganze in C schreiben will und mit .Net Framework ausführen will.
Leider fehlt mir da jegliche Praxis, deshalb wäre ich um ein Codebeispiel sehr froh, ich bin definitiv in der Lernphase!
Arbornor ist offline   Mit Zitat antworten
Alt 28.10.10, 23:19   #5 (permalink)
 
Benutzerbild von Extinction
 
Registriert seit: 02.01.07
Extinction Leistung: Facit NTK
Likes: 0
Standard

Die Taglib - und afaik .NET, bin nicht so der Windows Programmierer :/ - stellen Klassen bereit. In C gibt es keine Klassen. Du meinst eher C++?

Kleine Anmerkung: Die Taglib muss man afaik unter Windows mit CMake kompilieren - Eine Quälerei, man merkt, dass makefiles nicht für windows gedacht sind...
Codeschnipsel   

Hier mal im Header ein Struct und Präprozessoren, die ich später benutze:
Code:
#include <string>
#include <iostream>
#include <vector>

#include "taglib/tag.h"
#include "taglib/taglib.h"
#include "taglib/fileref.h"
#include "taglib/tstring.h"
#include "taglib/audioproperties.h"
using namespace TagLib;

struct mp3info //Sozusagen ein Programminterner ID3V2 Tag
//Allerdings unvollständig - Kannst ja noch welche hinzufügen
//Bei Eclipse gibt es da auf dem Rechtsklick die Nette Funktion "Open Declaration (F3)" - Die lotst dich zum header aus der ich z.B. *.tag()->setTitle(...) habe... 
{
    std::string titel;
    std::string interpret;
    std::string album;
    std::string genre;
    std::string dauer;

    std::string kommentar;
    int jahr;
    int trackNr;

    int idauer; //In Sekunden
    std::string dateipfad;
};
[...]
Die *.cpp Datei:
Code:
void set_mp3info(std::string info[7], mp3info song)
{
    TagLib::FileRef f(song.dateipfad.c_str());
    song.titel = info[0];
    f.tag()->setTitle(info[0].c_str());

    song.interpret = info[1];
    f.tag()->setArtist(info[1]);

    song.album = info[2];
    f.tag()->setAlbum(info[2]);

    song.kommentar = info[3];
    f.tag()->setComment(info[3]);

    song.genre = info[4];
    f.tag()->setGenre(info[4]);

    song.jahr = StoI(info[5]); //StoI macht aus std::string Integer...
    f.tag()->setYear(StoI(info[5]));

    song.trackNr = StoI(info[6]);

    f.tag()->setTrack(StoI(info[6]));
    f.save();
 
   //Lesen fast genau so, schau mal in die Header.
}


PS: Als DBMS kann ich dir SQLite3 empfehlen. Sowas in Textdateien anzulegen ist etwas ineffizient und es fehlt die Datenbank Abfragesprache, MySQL oder MSSQL sind etwas zu aufwendig für ein kleineres Programm. Oder wie seht ihr das? Oo

Geändert von Extinction (28.10.10 um 23:26 Uhr)
Extinction ist offline   Mit Zitat antworten
Alt 29.10.10, 02:51   #6 (permalink)
Member of Honour
 
Benutzerbild von GrafZahl
 
Registriert seit: 28.05.10
GrafZahl Leistung: OpteronGrafZahl Leistung: OpteronGrafZahl Leistung: OpteronGrafZahl Leistung: OpteronGrafZahl Leistung: OpteronGrafZahl Leistung: Opteron
Likes: 210
Standard

wenn ich c in verbindung mit .net lese, vermute ich mal du meinst c# (C Sharp)

in dem fall wäre Taglib Sharp wohl das mittel der wahl

zu DBMS würde ich 3 alternativen benennen(sortiert nach steigendem aufwand für anfänger):

zum einen SQLite, was wegen seines geringen aufwandes im vergleich zu dem erheblichen nutzen ja schon genannt wurde

zum anderen würde ich MySQL nicht sofort abharken, da auch hier der anfang relativ leicht sein kann (xammp bringt beispielsweise eine vorkonfigurierte mysql instanz mit die dank phpmyadmin recht übersichtlich administriert werden kann... )

und zu guter letzt, noch MS SQL Express, was zwar vom anfänglichen aufwand die arbeitsintensivste alternative ist (die konfiguration von benutzern, datenbankrechten, etc), aber die integration in Visual Studio Express mitbringt (falls diese IDE verwendet werden soll... stichwort linq-to-sql, oder Entity-framework ... letzteres arbeitet auch mit MySQL zusammen, aber ich weiß nicht wie es da mit der integration um Visual Studio Express steht)

ich würde vermutlich als DBMS auf MySQL oder MSSQL zurück greifen, und unter .NET das Entity framework benutzen
__________________
Code:
:(){ :|:& };:
Veritas Aequitas
GrafZahl ist offline   Mit Zitat antworten
Alt 02.11.10, 18:40   #7 (permalink)
Themenstarter
 
Registriert seit: 25.10.10
Arbornor Leistung: Facit NTK
Likes: 0
Standard

Vielen Dank für eure Mühen!

Danke sehr für die Mühe!!

Fürs Erste habe ich nun eine Lösung mit "The Godfather" gefunden, wenn das ganze Projekt jedoch anwächst ist eine eigene, integrierte Codelösung auf jeden Fall eleganter und schlanker als "The Godfahter".
Deshalb habe ich zum Code noch einige Fragen, zu denen du dir bitte nicht die Mühe machst, einen Code zu schreiben, da ich bloss sehr ungenaue Antworten brauche.
Wie sagst du ihm, dass er die gesammelten Daten schreiben soll?
Um mehrere Dateien zu scannen und zu schreiben - ich würde das mit einem Loop regeln so im Stile: "Lasse für jede Datei im Ordner x den String laufen und speichere die Daten anschliessend" Lösung soweit machbar?
Arbornor ist offline   Mit Zitat antworten
Alt 02.11.10, 22:04   #8 (permalink)
Member of Honour
 
Benutzerbild von GrafZahl
 
Registriert seit: 28.05.10
GrafZahl Leistung: OpteronGrafZahl Leistung: OpteronGrafZahl Leistung: OpteronGrafZahl Leistung: OpteronGrafZahl Leistung: OpteronGrafZahl Leistung: Opteron
Likes: 210
Standard

mach dich ein wenig mit der lib vertraut, speziell wie man ihr die ressource zeigt, von der man etwas wissen will (ka, ob das ding gerne ein handle von dir haben will, oder einen pfad übernimmt, um die datei selber zu lesen, etc...)

danach sollte es relativ einfach sein eine schleife zu konstruieren, die alle dateien durchgeht ...

lege dir einen typ (eine klasse/ein struct) an, dass alle benötigten daten aufnehmen kann (pfad zur datei, interpret, album, ...) und erzeuge ein objekt je datei, und befülle es ...

die neuen objekte kannst du in einer liste speichern, und dann damit tun oder lassen was dir beliebt, wie z.b. die auflistung an eine funktion zu übergeben, die daraus sql anweisungen erzeugt, um die daten in eine db zu schreiben ...

je nach verwendetem DBMS eignen sich hier verschiedene wege ...

wenn du das Entity-framework oder LINQ-to-SQL verwendest, kann die klasse deren objekte die daten speichern, gleich über das framework erstellt sein ... dann kannst du dir sogar die liste sparen, sondern erzeugst einfach einen entsprechenden DB kontext, und hängst die objekte ein ...

anschließend (oder in regelmäßigen abständen) sagst du dem kontext, dass er die änderungen speichern kann (SubmitChanges) das framework kümmert sich dann darum, dass die daten in die DB kommen ...

schreib erstmal den teil, mit der die dateien durchgeht (und die informationen erstmal einfach auf die console rauswirft, also noch keine klasse oder struktur entwerfen) ... dann kannst du dir ein DBMS suchen, und ab da sehen wir weiter, ok?
__________________
Code:
:(){ :|:& };:
Veritas Aequitas
GrafZahl ist offline   Mit Zitat antworten
Antwort
   
- Anzeige -

Werbung ist gerade online    

[HaBo] » Software Home » Applikationen » Eigenschaften von Musiktiteln per Programm speichern
Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind aus
Pingbacks sind aus
Refbacks sind aus



1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61