![]() |
AW: Die Vision eines intelligenten Mediaplayers...
Ja, wie beim Aufbau der Matrix muss man die Ähnlichkeit zu jedem Lied ermitteln und dann in die Koordinaten umrechnen.
Mögliche Auswertungskriterien wären (mal gebrainstormt) - frequenzspektrum (von n Frequenzbereichen die prozentualen Werte ermitteln) - Dynamikänderungen (laut-leise Wechsel) - USW. |
AW: Die Vision eines intelligenten Mediaplayers...
Zitat:
Und laß ab von diesem XML-Fanatismus. XML hat seine Anwendungsbereiche, aber bei der Datenspeicherung sehe ich die absolut nicht. Denn im Gegensatz zu bspw. SQLite ist deine XML-Datei am A.... wenn sich zwischendrin das Programm verabschiedet. Dann validiert die XML nicht mehr weil diverse Tags nicht geschlossen wurden ... naja :roll: Zu den bisherigen Antworten fällt mir auf, daß sie alle den Spaß etwas zu stark vereinfachen. Denn der Abstand für "Genre" mag X betragen, kann aber für "Stimmung" schon wieder Y sein. Bsp.: Oper und Requiem. Und um eine sinnvolle Wertung vorzunehmen muß mehr als ein Merkmal gewichtet werden. Ergänzung: Zitat:
|
AW: Die Vision eines intelligenten Mediaplayers...
Zitat:
@Bug: Eine Aufwandsanalyse ist imho wichtig. Sieht man am Anfang schon ein Problem, welches die Realisierung beeinträchtigen/verhindern könnte, wäre es fahrlässig dieses einfach auszublenden |
AW: Die Vision eines intelligenten Mediaplayers...
Zitat:
Allerdings ist es sinnlos, jetzt darüber zu diskutieren ob der Index bei 5000 Liedern bei 20kB, 2MB oder 200 MB liegt. Man könnte sich zum Beispiel überlegen, dass, wenn man am Anfang alle Lieder mit gleichem BPM verknüpft, man bereits am Anfang sehr viele Kanten hat. Damit könnte es tatsächlich klug sein, gleich eine Matrix zu nehmen. Allerdings muss man dann in Kauf nehmen, dass bei Hinzufügen eines Liedes der Speicherbedarf quadratisch mit der Anzahl der Knoten steigt. Wenn die Kanten nach und nach hinzugefügt werden, wäre es dann eventuell besser, eine andere Darstellung zu wählen und das Organisieren der Daten zB. SQLite zu überlassen. Letztlich gewinnt man bei dieser Überlegung nicht viel, wenn sie am Anfang steht. Wenn die Kantenwerte genau so groß sind wie die Knotenbezeichner (und das wäre dann vermutlich wenig), dann kostet die Speicherung aller möglichen Kanten in einem Graphen als Matrix nur ca. 1/3. Das ist doch kein so großartiger Faktor, zumal wir noch nicht wissen, wie die Anzahl der Kanten von der Anzahl der Knoten abhängt. Allein um jedes Lied nach jedem anderem zu anzuspielen (und nach 3 Sekunden weiterzuskippen, ohne Pause) bräuchte man ca. 2,4 Jahre. Das heißt wenn man die Anzahl der anfänglichen Kanten nicht so hoch setzt, wird sehr lange dauern, bis alle Kanten gesetzt sind. |
AW: Die Vision eines intelligenten Mediaplayers...
Zitat:
Falsch: 5000 Lieder * 3sekunden= 15000s 15000s/60s=250m 250m/60m=4,17h Also ein bisschen über 4 Stunden und nicht 2,4 Jahre... Aber BTT... |
AW: Die Vision eines intelligenten Mediaplayers...
Er meint alle liedkombinationen
|
AW: Die Vision eines intelligenten Mediaplayers...
Zitat:
Hingegen ein richtig oder falsch gesetzter Index kann deutliche Einbußen der Performance hervorrufen. Das Schema haben wir bisher allerdings nichtmal auszugsweise gesehen :lol: |
AW: Die Vision eines intelligenten Mediaplayers...
Hui, da lässt man euch einmal alleine diskutieren... :shock:
Ich habe mir Folgendes überlegt: Die Gewichtung einer Kante hat die Größe eines Byte, ich habe also 256 Werte. Das ermöglicht in meinen Augen eine recht feine Abstimmung. Gehen wir davon aus, dass der User eine Sammlung von 100 Liedern hat. Meine Idee ist, die Lieder zu Beginn in einzelne Gruppen (nennt es meinetwegen Teilgraphen) zu organisieren. Hier bin ich noch am Überlegen, welche Gemeinsamkeit geschickt wären. Selber Künstler? Gleiches Album? Ähnliche Beats per Minute? Angenommen, ich habe jetzt eine Vorauswahl treffen können. Ich gruppiere alle Lieder aus demselben BPM-Bereich. Jetzt verknüpfe ich alle Lieder untereinander, die in derselben Gruppe sind. Die Songs werden dabei so verknüpft, dass das Gewicht auf 0 gesetzt wird (Oder -127, wenn man annimmt, dass das Byte vorzeichenbehaftet ist). Es sind also alle Verbindungen gleichberechtigt. Die Richtung spielt keine Rolle. Das ist der Ausgangspunkt für alle Kanten. Zwischen einzelnen BPM-Gruppen wird noch keine Verbindung erstellt. Jetzt könnte man nach Gemeinsamkeiten im BPM-Block gucken. Bspw. Lieder, die denselben Interpreten haben, oder vom selben Album sind. Hier könnte man das Kantengewicht entsprechend erhöhen. Jetzt kommt der User ins Spiel. Er hört Song A aus dem BPM-Block 100. Als nächstes käme Song B, dieser wird aber bewusst übersprungen, und es wird C ausgewählt. Jetzt müsste das Programm das Gewicht der Kante A-C erhöhen, denn der User empfindet eine gewisse Bindung zwischen A u. C. Umgekehrt sollte die Bindung zwischen A-B verringert werden, denn dies hat der User übersprungen. Der Graph ist richtungslos, denn ob ich nun A nach C spiele, oder umgekehrt, sollte im Regelfall eigentlich kein Problem sein. Jetzt ist der User aber ein merkwürdiges Wesen, und findet bspw, dass das Lied aus dem BPM-Block 140 gut nach Lied C kommen könnte. Das führt dazu, dass zwischen dem Block 140 BPM und 100 BPM eine Bindung entsteht, welche in Zukunft als Übergang von 100 nach 140 genutzt werden kann. Da der User diese Bindung selbst erstellt hat, bekommt sie eine höhere Wertung als programmatisch erstellte Bindungen. Ziel ist also, dass der User den größten Einfluss auf das hat, was das Programm an Zusammenhängen ermittelt. Natürlich kann man überlegen, ob man nicht guckt, wie man die Daten des Users nutzen kann. Denkbar wäre auch eine Liste alà "Vielleicht möchten Sie als nächstes XYZ hören?". Darüber könnte man nachdenken. Auch müsste zu jedem Knoten ein Timestamp gespeichert werden. So könnte man bspw auch Knoten mal wieder hervorholen, bei denen die letzte Wiedergabe schon länger als X her ist. Oder man verringert die Gewichtung nach einem bestimmten Zeitraum, damit man nicht immer nur denselben Kram hört. ;) Die Größe der Indexdatei ist in meinen Augen schon ein wichtiger Faktor. Ich meine, wir haben mittlerweile Festplatten im 1 - 2 Terabyte Bereich. Lasst aber mal n Programm mehr Platz als 50 Megabyte belegen. Dann wird Sodom und Gomorrha gebrüllt. Insofern ist der Faktor nicht unwesentlich, auch wenn ich zugeben muss, dass 5000 Lieder schon viel sind. Aber eben nicht unwahrscheinlich. ;) Assarbad, meine Tabellenstruktur war recht einfach:
SQL-Code:
CREATE TABLE IF NOT EXISTS edges ( id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, FirstSong INTEGER NOT NULL, LastSong INTEGER NOT NULL, stLikeIndex DOUBLE NOT NULL, stTimestamp DATETIME);
|
AW: Die Vision eines intelligenten Mediaplayers...
Die Platten sind durchaus größer geworden und der Speicherplatz damit quasi vernachlässigter, aber was ist mit dem Zugriff auf diese Daten?
Da ist kleiner halt schneller |
AW: Die Vision eines intelligenten Mediaplayers...
Man könnte am Anfang der Daten eine Art Index einfügen - was aber wieder mehr Speicherplatz bräuchte. :)
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:30 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz