问题描述
从创建动画的角度来看,希望使用 ffplay
实时提取波形数据的 FFT 快照。
这正是我想要捕捉的,但这个演示在浏览器中使用 JavaScript。 (Source own post)
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 上发布的方法尝试了许多变体。
问题是 FFT 的输出格式是 PCM
(Pulse Code Modulation),而不是实时的。
一般来说,是否有一种简单的方法可以在播放声音时检索这些数据?
ffplay -fft file.mp3 > fft.json
使用 C,同样的东西:Apply FFT on pcm data and convert to a spectrogram
FFMPEG waveform filter documentation