Требуется извлечь в режиме реального времени моментальный снимок данных формы сигнала БПФ с помощью ffplay
для создания анимации.
Это именно то, что я хочу уловить, но эта демонстрация использует JavaScript в браузере. (Исходный собственный пост)
const audio = document.getElementById('music');
audio.load();
audio.play();
const ctx = new AudioContext();
const audioSrc = ctx.createMediaElementSource(audio);
const analyser = ctx.createAnalyser();
audioSrc.connect(analyser);
analyser.connect(ctx.destination);
analyser.fftSize = 256;
const bufferLength = analyser.frequencyBinCount;
const frequencyData = new Uint8Array(bufferLength);
setInterval(() => {
analyser.getByteFrequencyData(frequencyData);
console.log(frequencyData);
}, 1000);
<audio id="music" src="http://strm112.1.fm/reggae_mobile_mp3" crossorigin="use-URL-credentials" controls="true"></audio>
Я испробовал множество вариантов метода, опубликованного на https://trac.ffmpeg.org/wiki/Waveform .
Проблема заключается в том, что выходной формат для БПФ — PCM
(Импульсно-кодовая модуляция), а не в реальном времени.
В общем, есть ли простой способ сделать это, во время воспроизведения звука, чтобы получить эти данные?
ffplay -fft file.mp3 > fft.json
Используя C, то же самое: Применить FFT к данным PCM и преобразовать в спектрограмму