因此,我一直在尝试创建SoundClouds“峰值”波形的小克隆。我注意到它们的波形更加简化 与我的“响度”突然变化相比峰值之间的动态范围似乎从未太陡峭,它们总是很好地代表了音轨各部分的感知响度。
这是一个例子:
注意所有“滴”如何与波形中的“击穿”区分开来,但我的位置无处不在(除了最后的滴和击穿外,它们与类似 )。有一些次要相似之处,但即使在那些地区,“锯齿状”仍然非常突出。
我将wav2json用作峰值转换器(通过命令行运行并在C++
中编程)。这是我如何使用它的一个示例:
/*
* --channels: mids and min
* --db-min (minimum level in dB to capture): -35dB
* --db-max (pretty self explanatory): 6dB
* -d: use logarithmic instead of linear scale
* -s (number of peaks to generate): 1800
* -o (output file): outputfile.json
* -p (precision of floats): 0
* -n: no header
*/
exec("wav2json inputfile.wav -s 1800 --channels mid min -d --db-min -35 --db-max 6 -p 0 -o outputfile.json -n");
$fp = fopen($tmpOutput, "r");
$json = fread($fp, filesize($tmpOutput));
// get mids and min from the generated peaks file
$mid = json_decode($json, true)["mid"];
$min = json_decode($json, true)["min"];
fclose($fp);
unlink($tmpOutput);
/*
* from here I just combine each mid and min value together and divide by two
*
* then I normalise all the peaks (instead of each value being between -0.293 to
* 1.766(just as an example), it is between 0 and 100)
*/
在过去的几个月中,我一直试图弄清楚的是如何使每个峰更合理化,以及如何使每个峰的动态范围看起来如何。
感谢所有帮助,
干杯。
答案 0 :(得分:4)
在这里只是猜测,但dB刻度已经与实际水平成对数,因此添加-d参数可能会使您的情况更糟。
您也可以尝试只用几分钟或几分钟,而不是两者!最大可能是正确的事吗?
另一件事是您采集的样本数量,我确定它们在该图上没有1800,您可以尝试对它们进行计数并得出相同的数量。
您还正在将输出“剪切”到最大db为35,请尝试不沿正向剪切它,而可能沿负向增加剪切。
还可以通过对上一个,当前和下一个值进行平均来“平滑”曲线。
尝试结合以上内容,别忘了告诉我们是否有适合您的事情。