Update 8
Ich bin unglücklich darüber, Tracks in den Dienst hochladen zu müssen und mir die neue Version von RekordBox 3 anzusehen. Ich habe mich entschlossen, einen weiteren Blick auf einen Offline-Ansatz und eine feinere Auflösung zu werfen: D.
Klingt vielversprechend, wenn auch noch in einem sehr Alpha-Zustand:
Johnick - Gute Zeit
Beachten Sie, dass es weder eine logarithmische Skalierung noch eine Palettenoptimierung gibt, sondern nur eine Rohzuordnung von Frequenz zu HSL.
Die Idee : Jetzt hat ein Wellenform-Renderer einen Farbanbieter, der nach einer Farbe für eine bestimmte Position abgefragt wird. Die oben gezeigte erhält die Nulldurchgangsrate für die 1024 Samples neben dieser Position.
Natürlich gibt es noch viel zu tun, bevor man etwas Robustes bekommt, aber es scheint ein guter Weg zu sein ...
Aus RekordBox 3 :
Update 7
Das endgültige Formular, das ich übernehmen werde, ähnlich wie in Update 3
(Es war ein wenig Photoshopping, um sanfte Übergänge zwischen den Farben zu erhalten)
Fazit: Ich war vor Monaten in der Nähe, habe dieses Ergebnis aber nicht für schlecht gehalten. X)
Update 6
Ich habe das Projekt kürzlich ausgegraben, daher habe ich darüber nachgedacht, es hier zu aktualisieren: D.
Lied: Chic - Good Times 2001 (Stonebridge Club Mix)
Es ist viel besser, IMO, Beats haben eine konstante Farbe usw. Es ist jedoch nicht optimiert.
Wie ?
Immer noch mit http://developer.echonest.com/docs/v4/_static/AnalyzeDocumentation.pdf (Seite 6)
Für jedes Segment:
public static int GetSegmentColorFromTimbre(Segment[] segments, Segment segment)
{
var timbres = segment.Timbre;
var avgLoudness = timbres[0];
var avgLoudnesses = segments.Select(s => s.Timbre[0]).ToArray();
double avgLoudnessNormalized = Normalize(avgLoudness, avgLoudnesses);
var brightness = timbres[1];
var brightnesses = segments.Select(s => s.Timbre[1]).ToArray();
double brightnessNormalized = Normalize(brightness, brightnesses);
ColorHSL hsl = new ColorHSL(brightnessNormalized, 1.0d, avgLoudnessNormalized);
var i = hsl.ToInt32();
return i;
}
public static double Normalize(double value, double[] values)
{
var min = values.Min();
var max = values.Max();
return (value - min) / (max - min);
}
Natürlich wird viel mehr Code benötigt, bevor Sie hierher kommen (zum Service hochladen, JSON analysieren usw.), aber das ist nicht der Punkt dieser Site, also poste ich nur die relevanten Dinge, um das obige Ergebnis zu erhalten.
Ich verwende also die ersten beiden Funktionen des Analyseergebnisses. Es gibt sicherlich mehr damit zu tun, aber ich muss noch testen. Wenn ich jemals etwas cooleres als oben finde, komme ich zurück und aktualisiere hier.
Hinweise zum Thema sind wie immer herzlich willkommen!
Update 5
Ein Gradient mit harmonischen Reihen
Die Farbglättung ist verhältnisempfindlich, ansonsten sieht sie schlecht aus und muss angepasst werden.
Update 4
Die Färbung an der Quelle wurde neu geschrieben und die Farben mit einem Alpha-Beta-Filter mit 0,08- und 0,02-Werten geglättet .
Beim Verkleinern etwas besser
Der nächste Schritt ist eine großartige Farbpalette!
Update 3
Gelb steht für Medien
Noch nicht so toll, wenn es nicht gezoomt ist.
(Die Palette braucht ernsthafte Arbeit)
Update 2
Vorversuch mit zweitem ' Timbre' -Koeffizienten-Hinweis von Pichenetten
Update 1
Bei einem vorläufigen Test unter Verwendung eines Analyseergebnisses des EchoNest- Dienstes ist zu beachten, dass es nicht sehr gut ausgerichtet ist (meine Schuld), aber viel kohärenter als der obige Ansatz.
Für Leute, die an der Verwendung dieser großartigen API interessiert sind, beginnen Sie hier: http://developer.echonest.com/docs/v4/track.html#profile
Lassen Sie sich auch nicht von diesen Wellenformen verwirren, da sie 3 verschiedene Songs darstellen.
Erste Frage
Bisher ist dies das Ergebnis, das ich mit einer FFT mit 256 Abtastwerten und der Berechnung des Spektralschwerpunkts jedes Chunks erhalte .
Rohes Ergebnis der Berechnungen
Etwas Glättung angewendet (Form sieht damit viel besser aus)
Wellenform erzeugt
Im Idealfall sollte es so aussehen (aus der Serato DJ- Software)
Wissen Sie, welche Technik / welchen Algorithmus ich verwenden könnte, um das Audio zu teilen, wenn sich die durchschnittliche Frequenz im Laufe der Zeit ändert? (wie das obige Bild)
spectral_centroid
Code . Was ich wirklich möchte, ist, das Audiospektrum auf das Farbspektrum abzubilden, also ist eine niedrige Frequenz rot, eine hohe Frequenz ist blau, eine Kombination aus beiden ist magenta, eine mittlere Frequenz ist grün, ein logarithmischer Sweep ist Regenbogen, weißes Rauschen ist weiß, rosa Rauschen ist rosa, rotes Rauschen ist rot, ... Ich kann allerdings nicht herausfinden, wie es geht, da ein Spektrum linear und das andere logarithmisch ist. :) flic.kr/p/7S8oHA