os x getUserMedia增益控制会随着时间的推移减少恒定的输入信号

问题描述

我正在尝试使用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中看到一个清晰的峰值,该峰值应出现在该峰值处,但是从某个值开始并很快在几秒钟内下降到稳定的水平。因此,硬件(或分析仪?)正在做我不了解的事情。有人有建议吗?