Delphi-PRAXiS
Seite 1 von 6  1 23     Letzte »    

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Die Vision eines intelligenten Mediaplayers... (https://www.delphipraxis.net/155138-die-vision-eines-intelligenten-mediaplayers.html)

Mithrandir 10. Okt 2010 18:17

Die Vision eines intelligenten Mediaplayers...
 
Ich finde, dieser Beitrag gehört nicht in K&T, weil er ja doch definitiv was mit Programmierung zu tun hat. :) Außerdem ist er recht lang. Es könnte passieren, dass ihr während des Lesens einschlaft. Sorry schonmal dafür. :D

Ich hab heute mal aus reinem Interesse die Vita vom Facebook-Mitbegründer Mark Zuckerberg gelesen. Da fand sich unteranderem ein kleiner Satz über Synapse, einen Mediaplayer den Mark zusammen mit Adam D'Angelo geschrieben hat. Irgendwann ist dieser (= der Player) aber in der Versenkung verschwunden, vermutlich, weil er grad an nem Webprojekt gearbeitet hat... :zwinker:

Ich finde jedenfalls die Idee dahinter nicht schlecht, und stelle mir dabei sowas wie eine "intelligente Shuffle-Funktion" vor.

Man kennt das ja. Wenn man die Shufflefunktion seines Mediaplayer nutzt, werden einem zufällig Songs präsentiert. Im Regelfall ist man, gerade bei großen Datenbanken, dann aber eher damit beschäftigt, den Song zu skippen, weil man bspw. nachm Soundtrack von Inception gerade keinen Bock auf die Schmusestimme von James Blunt hat. Wie umgeht man das Problem heutzutage meist? Man erstellt sich Playlists, vielleicht nach Stimmung sortiert, vielleicht nach Künstlern oder Genres. Im Regelfall skippt man aber einfach weiter und nimmt es so hin, denn eigentlich hat man für die Erstellung von Playlists auch keine Zeit. Was könnte man dagegen tun?

Zum einen könnte man gucken, wie oft welche Lieder abgespielt werden. Das mag zwar hilfreich sein, ändert aber nichts daran, dass, wenn ich mir bspw. James Blunt anmache, weil ich gerade in einer traurigen Stimmung bin, ich nun keinen Bock auf Iron Maiden habe, auch wenn es die Tage davor rauf und runterlief, und entsprechen oft gespielt wurde.

Wie wäre es aber, wenn der Mediaplayer in der Lage wäre, zu erkennen, was wir in welcher Stimmung hören wollen und welche Lieder zusammenpassen? Nehmen wir an, wir haben die Lieder A,B,C,D,E,F...Z. Wenn der Player jetzt intelligent wäre, könnte er während der Benutzung dazu lernen. Um einen Startpunkt zu haben, analysiert man erstmal die BPM aller Lieder. Da das bei einer großen Datenbank entsprechen lange dauern wird, kann man dies im Hintergrund tun. Ist man fertig, hat man schonmal ein paar Verknüpfungspaare. So weiß man bspw, dass die Lieder A-E, J-L und X-Z alle im selben BPM Bereich sind, bspw. 120. Es wäre also eine gute Idee, wenn Lied D abgespielt wird, dann im Shuffle Modus ein Lied aus den Blöcken J-L oder X-Z zu benutzen.

Und jetzt kommt der User ins Spiel. Es geht dann darum, Verknüpfungen zwischen den einzelnen Liedern aufzubauen. Wenn der User Lied A spielt, dann Lied C und dann Lied I (und zwar bewusst dahinspringt), dann kann man als Programm davon ausgehen, dass die Lieder für den User eine Einheit bilden. Kommt dies häufiger vor, wird die Bindung zwischen den einzelnen Liedern immer stärker.

Im Prinzip würde die Anforderung an den Player lauten: "Erinnere dich daran, was ich als nächstes gehört habe. Wenn du mir die Lieder liefern sollst, dann erinnerst du dich an meine Auswahl." Denn wenn man mal in sich geht und überlegt, dann weiß man selbst eigentlich immer am Besten, welche Lieder zueinander passen und welche nicht.

Natürlich kann man die Liedgruppen nicht isoliert betrachten. Es könnte bspw sein, dass Lied R nach Lied X und nach Lied A fast gleichoft gehört wurde. Diese Tatsache könnte man aber auch geschickt nutzen, in dem man die Liedgruppen A,C,I und X-Z über das Lied R miteinander verknüpfen könnte, quasi als geschickter Übergang.

Natürlich gibt es noch andere Sachen, die man bedenken muss. Bei so einem System hätten neue Lieder, die neu in die Liste geladen werden, ein Problem. Dem könnte man entgegenwirken, in dem die Bindungen über die Zeit wieder schwächer werden, sodass auch neue Songs die Chance haben, in das System eingebunden zu werden. Außerdem sollte es bspw. bei der Gruppe A,C,I egal sein, in welcher Reihenfolge sie gespielt werden.

Jetzt gibt es nur eine technische Überlegung: Wie setzt man sowas am geschicktesten um? Über ein System ähnlich neuronaler Netze? Und wie speichert man die Verbindungen zwischen den einzelnen Liedern ab. Fragen über Fragen... Und eure Ideen sind mir dazu Willkommen. Mein ihr, sowas wäre sinnvoll?

Teekeks 10. Okt 2010 18:56

AW: Die Vision eines intelligenten Mediaplayers...
 
Die Idee finde ich schon einmal total interessant.
Die Wichtigskeitsverknüpfungen (was für ein Wort :lol: ) könnte man ja so aufbauen (nur eine verknüpfung):

Code:
 Track1: integer (die ID des ersten Titels)
 track2: integer (die ID des zweiten Titels)
 Wichtigkeit: integer
Die Wichtigkeit könnte immer höher werden je öfter diese Verknüpfung auftritt.
Die Zeitabhängigkeit könnte z.B. darüber entstehen das man z.B. einmal die Woche oder so da über alle Verknüpfungen ein *2/3 oder ähnliches über die Wichtigkeiten drüber jagt.

Der Nachteil wäre das mit der Zeit ein wirklich gigantischer Baum an Daten entstehen würde.

Das wäre ja im schlimmsten Fall (n-1)^n Verknüpfungen, was bei z.B. nur 1000 Titeln schon 1E+3000 Datensätze wären (gut, es fallen noch ein paar raus weil die ja nicht mit sich selbst verknüpft werden können).

An sich aber eine Idee die man weiter verfolgen sollte (vl als ein Community-Projekt?).

Gruß Teekeks

BUG 10. Okt 2010 19:24

AW: Die Vision eines intelligenten Mediaplayers...
 
Ich glaube neuronale Netze liegen nur vom Namen (Netze) her nahe.

Man kann eine solches Netzwerk als Graph darstellen.

Die Lieder sind Knoten.
Die Beziehungen sind (evtl. gerichtete, mehrfache) gewertete Kanten.

Das Finden einer passenden Lieder für eine Playlist könnte man als das Finden eines Teilgraphs darstellen, ein dem die Kanten bestimmte Werte haben haben.

Das Konkretisieren dieser Vorstellung ist vermutlich der größter Teil der eigentlichen Arbeit, eine vermutlich anderer großer Teil das anschließende Finden der Algorithmen zum Finden des Teilgraphs.

Assarbad 10. Okt 2010 19:29

AW: Die Vision eines intelligenten Mediaplayers...
 
Mir ist so als hätten sowohl iPod als auch iTunes das eingebaut. Da geht es, wenn ich mich recht entsinne nach Genre und man kann ein Lied auch als "Favorit" markieren. Dann wird es auch bei zufälliger Abspielfolge öfter gespielt. Das ist doch was du meinst, oder?

Teekeks 10. Okt 2010 19:46

AW: Die Vision eines intelligenten Mediaplayers...
 
Lese die bitte das von Mithandir bitte noch einmal durch, genau das möchte er halt nicht, sondern das der Player durch das verhalten des Nutzers dazulernt was derjenige gut findet.
Also nicht über das Genre gehen, sondern über die Erfahrung des Players, welchen Titel der Nutzer nach diesem und jenen eigentlich gerne hört oder welcher der Erfahrung nach da an dieser Stelle jetzt gut passen würde.

Mithrandir 10. Okt 2010 19:46

AW: Die Vision eines intelligenten Mediaplayers...
 
Zitat:

Zitat von Assarbad (Beitrag 1054945)
Mir ist so als hätten sowohl iPod als auch iTunes das eingebaut. Da geht es, wenn ich mich recht entsinne nach Genre und man kann ein Lied auch als "Favorit" markieren. Dann wird es auch bei zufälliger Abspielfolge öfter gespielt. Das ist doch was du meinst, oder?

Ich bin mir nicht so sicher, ob Genius wirklich das ist, was ich meine. Ich werde mir das aber nochmal genauer ansehen.

@Teekeks und BUG: Gute Ansätze, ich werde sie mal weiterverfolgen. :) Aber es stimmt, man wird vermutlich mit riesigen Datensätzen konfrontiert werden. ;)

Assarbad 10. Okt 2010 20:10

AW: Die Vision eines intelligenten Mediaplayers...
 
Zitat:

Zitat von Teekeks (Beitrag 1054947)
Lese die bitte das von Mithandir bitte noch einmal durch, genau das möchte er halt nicht, sondern das der Player durch das verhalten des Nutzers dazulernt was derjenige gut findet.
Also nicht über das Genre gehen, sondern über die Erfahrung des Players, welchen Titel der Nutzer nach diesem und jenen eigentlich gerne hört oder welcher der Erfahrung nach da an dieser Stelle jetzt gut passen würde.

Also nochmal lese ich mir den langen Aufsatz nicht durch. Einerlei, ich denke daß eine Bestimmung von Genre oder ob man ein Lied "mag" oder "nicht mag" einige Metadaten voraussetzt. Entweder in den Dateien selbst oder eben extern. Wenn man so will muß die Distanz (also die Länge eines Vertex) der "Nähe" der Lieder entsprechen. Aber da diese Nähe sehr subjektiv ist, muß man eben auf Metadaten zurückgreifen und diese ggf. je nach Benutzer anders wichten.

Zitat:

Zitat von Mithrandir (Beitrag 1054949)
Ich bin mir nicht so sicher, ob Genius wirklich das ist, was ich meine. Ich werde mir das aber nochmal genauer ansehen.

Stimmt, das war der Name. Eine Wichtung wird dort meines Wissens nach auch vorgenommen. Und BUG hat ja einen gewichteten Graphen vorgeschlagen.

Zitat:

Zitat von Mithrandir (Beitrag 1054949)
Aber es stimmt, man wird vermutlich mit riesigen Datensätzen konfrontiert werden. ;)

Da kann ich nur SQLite empfehlen ;)

omata 10. Okt 2010 22:36

AW: Die Vision eines intelligenten Mediaplayers...
 
Die Idee hatte ich auch schon. Ist auch schon im Einsatz. Macht nicht genau das was du dir vorstellst, ist aber vom Anspruch ähnlich. klick

Mithrandir 11. Okt 2010 16:44

AW: Die Vision eines intelligenten Mediaplayers...
 
@omata: Danke für den Hinweis, werde ich mir ansehen. :thumb:

@Assarbad: Die einzigen Metadaten für den Einstieg wären tatsächlich nur die ID3-Tags bezgl. Genre, Künstler und die BPM, die ein Song aufweist. Auf Basis dessen würde ich einen Graphen erstellen, mit eben unterschiedlich gewichteten Verbindungen. Der Rest ist erstmal Sache des Users. Ggf. könnte man mit der Zeit diverse Muster versuchen zu finden, die einem helfen, neu hinzugefügte Lieder besser einzuordnen. Aber das ist weite Zukunftsmusik. Interessant ist noch die Überlegung, wie ich diesen Graphen auf die Datenbank abbilde (SQLite ist schon in Verwendung. :) ).

Genius scheint tatsächlich eine ähnliche Methode zu verwenden. Allerdings müssen hier die Daten an einen Server geschickt werden. Das soll bei mir nicht der Fall sein, zumal nichtmal die Infrastruktur dafür vorhanden wäre.

Hisoka 11. Okt 2010 16:57

AW: Die Vision eines intelligenten Mediaplayers...
 
Solch eine Funktion wird in den Meisten Music Playern über Last.fm und ähnliche Dienste gemacht. Denn diese haben solche Beziehungen schon analysiert und es klappt auch. Zumindest schlägt mir der Player immer ganz vernünftige Bands vor.

Also alles nichts neues ;)

Aber die Umsetzung über ein Neuronales Netz wäre eine nette Bastelei.


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:56 Uhr.
Seite 1 von 6  1 23     Letzte »    

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz