осциллограммы не такие гладкие, какими они должны быть - PullRequest
0 голосов
/ 04 марта 2019

Итак, я пытался создать небольшой клон формы пиков 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 (мин. и дБ дБ, линейные и т. д.)
  • , используя различные компрессоры и многополосные компрессоры на дорожке

Вся помощь приветствуется,
Приветствия.

1 Ответ

0 голосов
/ 15 марта 2019

Просто угадайте здесь, но шкала дБ уже логарифмическая по сравнению с фактическим уровнем, поэтому добавление параметра -d может только ухудшить вашу ситуацию.

Вы также можете попробовать использовать только средние или минимальные значения,не оба!Есть вероятность, что макс - это то, что нужно?

Другая вещь - это количество выборок, которые вы берете, я уверен, что у них нет 1800 на этом графике, вы можете попробовать подсчитать их и сделать то же количество.

Вы также «обрезаете» свой выходной сигнал до максимального значения 35 дБ, попробуйте не обрезать его в положительном направлении и, возможно, увеличить ограничение в отрицательном направлении.

Также вы можете «сгладить»«Кривые, делая среднее из предыдущего, текущего и следующего значения.

Попробуйте объединить вышесказанное, не забудьте сообщить нам, если что-то работает для вас.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...