Обработка Waveform | JS
На сервере waveform создается с помощью команды:
ffprobe -hide_banner -v error -f lavfi -i amovie=${file_path},astats=metadata=1:reset=1 -show_entries frame=pkt_pts_time:frame_tags=lavfi.astats.Overall.RMS_level -of csv=p=0
А на фронте звук анализируется с помощью АудиоКонтекста:
const audioContext = new AudioContext();
const source = audioContext.createMediaStreamSource(mediaStream);
const analyser = audioContext.createAnalyser();
analyser.fftSize = 64;
source.connect(analyser);
const dataLength = analyser.frequencyBinCount;
const dataArray = new Uint8Array(dataLength);
let isDestroyed = false;
function tick() {
if (isDestroyed) {
return;
}
analyser.getByteFrequencyData(dataArray);
const sum = dataArray.reduce((acc, current) => acc + current, 0);
const mean = (sum / dataLength);
const volume = mean / 255;
cb(volume < 0.1 ? 0 : volume) <- просто добавляется как новый элемент в массив;
tick;
}
tick();
Проблема в том, что на фронте все значения массива [0, 0, 0, 0, 0.2, 0.3, ...]
положительны и от 0 до 1, а с сервера приходят [-100.455, -104.73, -104.671, -107.294, -108.371, -66.827, -76.958, -56.94, -70.662, -71.7, -71.834, -73.791, -73.803, -76.743, -66.634, -76.693, -81.131, -63.331, -62.145, -71.967, -78.733, -58.017, -18.086, -14.999, -14.719, -16.134, -16.677, -17.088, -17.472, -18.019, -17.907, -18.71, -19.181, -19.564, -19.985, -20.719, -20.738, -20.834, -21.234, -21.566, -21.843, -26.398, -51.685, -68.449, -82.437, -85.498, -89.719, -84.046]
. Мало того, что они отрицательны, так ещё и не понятно, как их обработать так, чтобы они прошли к тому же виду, что и на фронте (не понятно, как определять мин/cред/макс значения)
Как привести серверные данные к формату фронта или наоборот?