更新 8
不满意必须将曲目上传到服务并查看 RekordBox 3 的新版本,我决定再次寻找离线方法和更精细的分辨率:D
听起来很有希望,但仍处于非常 alpha 的状态:
约翰尼克 - 好时光
请注意,没有对数刻度或调色板调整,只是从频率到 HSL 的原始映射。
想法:现在波形渲染器有一个颜色提供程序,用于查询特定位置的颜色。您在上面看到的那个获得了该位置旁边 1024 个样本的过零率。
显然,在获得强大的东西之前还有很多工作要做,但这似乎是一条好路……
来自RekordBox 3:
更新 7
我将采用的最终形式,就像在更新 3 中一样
(为了获得颜色之间的平滑过渡,我们进行了一些 Photoshop 处理)
结论是我几个月前很接近,但没有考虑到结果认为它很糟糕 X)
更新 6
我最近发现了这个项目,所以我想在这里更新:D
歌曲:Chic - Good Times 2001 (Stonebridge Club mix)
IMO 更好,节拍具有恒定的颜色等......虽然它没有优化。
如何 ?
仍然与http://developer.echonest.com/docs/v4/_static/AnalyzeDocumentation.pdf(第 6 页)
对于每个段:
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);
}
显然,在您到达这里之前需要更多代码(上传到服务、解析 JSON 等),但这不是本网站的重点,所以我只是发布相关内容以获得上述结果。
所以我使用了分析结果的前2个函数,当然还有更多的事情要做,但我仍然需要测试。如果我发现比上面更酷的东西,我会回来并在这里更新。
与往常一样,任何关于该主题的提示都非常受欢迎!
更新 5
使用谐波级数的一些梯度
颜色平滑是比率敏感的,否则看起来很糟糕,需要进行一些调整。
更新 4
使用具有 0.08 和 0.02 值的Alpha beta 过滤器重写了在源处发生的着色和平滑颜色。
缩小的时候稍微好一点
下一步是获得一个很棒的调色板!
更新 3
黄色代表媒介
未缩放时还不是很好。
(调色板需要一些认真的工作)
更新 2
使用来自pichenettes的第二个“音色”系数提示进行初步测试
更新 1
使用来自EchoNest服务的分析结果进行的初步测试,请注意它的对齐不是很好(我的错),但它比上述方法更连贯。
对于有兴趣使用这个伟大的 API 的人,从这里开始:http: //developer.echonest.com/docs/v4/track.html#profile
此外,不要对这些波形感到困惑,因为它们确实代表了 3 首不同的歌曲。
最初的问题
到目前为止,这是我使用 256 个样本 FFT 并计算每个块的光谱质心得到的结果。
计算的原始结果
应用了一些平滑(使用它的形式看起来好多了)
产生的波形
理想情况下,它应该是这样的(取自Serato DJ软件)
你知道当平均频率随时间变化时我可以使用什么技术/算法来分割音频吗?(如上图)