问题描述
我正在尝试使用HTML和javascript创建一个简单的傅立叶变换程序。我有OS X Catalina,并且正在使用Chrome,并且正在抓麦克风(至少我以为是)。
用于获取流设置的javascript是:
let constraints = {
audio: {
echoCancellation: false,autoGainControl: false,channelCount: 2,noiseSuppression: false,sampleRate: my_sampleRate,sampleSize: 16,volume: 1.0
},video: false
};
navigator.mediaDevices.getUserMedia(constraints).then(spectrum).catch(console.log);
let AudioContext = window.AudioContext || window.webkitaudiocontext;
let audioCtx = new AudioContext({sampleRate: my_sampleRate});
let analyser = audioCtx.createAnalyser();
analyser.fftSize = my_samples;
analyser.smoothingTimeConstant = 0;
audioCtx.createmediastreamsource(stream).connect(analyser);
let data_raw = new Uint8Array(analyser.fftSize);
analyser.getByteTimeDomainData(data_raw);
进行FFT的代码(我知道,我可以使用内置分析器和getByteFrequencyData,但我不想使用它)很简单。当我以1kHz信号对其进行测试时,它会显示在正确的位置,但随后会消失。好像某件事正在相对较长的时间内进行交流滤波。
关于如何摆脱这一点的任何想法?请注意,OS X Catalina仍然具有令人讨厌的“功能”,而麦克风的“偏好设置” /“声音”中曾经没有的噪声抑制选项不再存在。
解决方法
经过更多调查...我认为我的问题的一部分是标准化以制作FFT直方图。归一化在增加,因此峰在减少。但是我注意到,当我注入1000 Hz的纯正弦波时,我在FFT中看到一个清晰的峰值,该峰值应出现在该峰值处,但是从某个值开始并很快在几秒钟内下降到稳定的水平。因此,硬件(或分析仪?)正在做我不了解的事情。有人有建议吗?