#php #c #audio #ffmpeg
#php #c #Аудио #ffmpeg
Вопрос:
Итак, я пытался создать небольшой клон формы сигналов SoundClouds ‘peaks’. Я заметил, что их формы сигналов намного более упорядочены по сравнению с моими внезапными изменениями «громкости». Динамический диапазон между пиками никогда не кажется слишком крутым, и они всегда довольно хорошо отражают воспринимаемую громкость каждой части трека.
Вот пример:
Обратите внимание, что все «падения» довольно отличимы от «сбоев» в их форме сигнала, но мои встречаются повсюду (кроме последнего падения и пробоя, которые отчасти похожи). Есть некоторые незначительные сходства, но «неровности» все еще очень заметны даже в этих областях.
Я использую 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
- на самом деле вычисление максимумов и минимумов в daw, а затем сравнение форм сигналов
- использование различных параметров для wav2json (db min и max, линейный и т.д.)
- использование различных компрессоров и многополосных компрессоров на дорожке
Любая помощь приветствуется,
приветствия.
Комментарии:
1. Почему это помечено тегом C ? Ваш код написан не на C , и только потому, что инструмент, который вы запускаете, был написан на C , не делает ваш вопрос связанным с языком.
2. @1201ProgramAlarm пометил его как C из-за того, что инструмент, который я использую, имеет открытый исходный код. Я не очень хорош в C , поэтому, если кто-нибудь знает, как интерпретировать то, что происходит за кулисами, они могли бы получить хорошее представление о том, как я могу достичь того, к чему стремлюсь
3. Вероятно, это больше разница в инструментах, чем проблема с вашей стороны. Вы уверены, что инструменты, используемые в двух случаях, похожи? Если нет, либо получите инструменты, которые они используют, или примите разницу, или создайте инструменты, имитирующие их..
4. Почему это помечено тегом Javascript?
Ответ №1:
Здесь просто предположение, но масштаб базы данных уже логарифмический по сравнению с фактическим уровнем, поэтому добавление параметра -d может просто ухудшить ваш.
Вы также можете попробовать использовать только средние значения или только min, а не оба сразу! Есть вероятность, что max — это то, что нужно?
Другое дело, что вы берете количество выборок, я уверен, что на этом графике их не 1800, вы могли бы попробовать посчитать их и получить такое же количество.
Вы также «обрезаете» свой вывод до максимального значения 35 дб, попробуйте не обрезать его в положительном направлении и, возможно, увеличить обрезку в отрицательном направлении.
Также вы можете «сгладить» кривые, усреднив предыдущее, текущее и следующее значения.
Попробуйте объединить вышеперечисленное, не забудьте сообщить нам, если у вас что-то получится.
Комментарии:
1. Большое вам спасибо! Попробую!
![]()
2. «You» пишется как «Tou» в 4-м абзаце, и я не могу предложить редактировать, потому что это всего лишь 1 символ.
3. исправлено, спасибо и извините за позднее исправление, был в отпуске