php - 波形不如应有的平滑

标签 php c++ audio ffmpeg

所以我一直在尝试创建 SoundClouds“峰值”波形的一个小克隆。我注意到他们的波形更加流线型 与我“响度”的突然变化相比。峰值之间的动态范围似乎永远不会陡峭,而且它们总是很好地代表了轨道每个部分的感知响度。


这是一个例子:

example

请注意所有“下降”如何与其波形中的“故障”区分开来,但我的到处都是(除了最后一个下降和故障,它们有点相似).存在一些细微的相似之处,但即使在这些区域,“锯齿状”仍然非常突出。

我正在使用 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)
*/

我想弄清楚 - 并且在过去几个月一直在努力 - 是如何使每个峰值更加流线型,并使每个峰值的动态范围看起来像实际听起来的那样。


我尝试过的:

  • ffmpeg eqing
  • 实际计算数据中的高点和低点,然后比较波形
  • 为 wav2json 使用各种参数(db 最小值和最大值、线性等)
  • 在轨道上使用各种压缩器和多频段压缩器

感谢所有帮助,
干杯。

最佳答案

这里只是猜测,但与实际水平相比,dB 标度已经是对数,因此添加 -d 参数可能只会让您的情况变得更糟。

您也可以尝试仅使用中音或仅使用最小音,而不是两者!有可能 max 是正确的吗?

另一件事是您采集的样本数量,我敢肯定他们在该图表上没有 1800,您可以尝试对它们进行计数并获得相同的数量。

您还将输出“裁剪”到最大分贝 35,尽量不要在正方向裁剪,并可能在负方向增加裁剪。

您还可以通过对上一个、当前和下一个值取平均值来“平滑”曲线。

尝试结合以上各项,如果有适合您的方法,请不要忘记告诉我们。

关于php - 波形不如应有的平滑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54987250/

相关文章:

php - PHP 中的 Linux 文件夹标识或元数据

php - 如何在cakephp中使用mysql修剪功能

php - 带有条件语句的 mysqli fetch_assoc

c++ - 在SFML中移动矩形,如何让它更平滑?

c++ - `VirtualAllocEx`指定不同的起始地址时返回相同的地址?

iphone - 在 iOS 中使用 openAL 预加载音频文件的好方法

php - 如何确保 Symfony url_for() 包含 PHP 文件名?

C++ - 多线程

iOS 将音频采样率从 16 kHz 转换为 8 kHz

c# - 使用SoundPlayer在C#中播放.wav文件