Sau*_*dey 7 safari audio web-audio-api
我正在研究网络音频 API。我尝试使用 Web Audio API 录制音频文件,保存录制的块,然后使用 python matplotlib 绘制同一块的频谱。
播放的音频文件包含从 2KHz 到 20KHz 递增的频率。
chrome 的音频录制似乎是正确的,我可以通过音频频谱正确地看到它。
但是当从 safari 录制音频时,12 Khz 之后似乎有一个截止滤波器。
单击按钮时调用 Web 音频代码函数 start_rec()
var samplerate = 48000;
var audio_engine_var = {};
var samples = {
audio_samples: [],
samplerate: samplerate
}
function start_rec() {
audio_engine_var.context = new AudioContext({sampleRate:samplerate});
navigator.mediaDevices.getUserMedia(
{ audio: {
echoCancellation: false,
sampleRate: 48000
} }
).then( function (stream) {
audio_engine_var.stream = stream;
audio_engine_var.track = audio_engine_var.stream.getAudioTracks()[0];
audio_engine_var.track.applyConstraints(
{
echoCancellation: false,
sampleRate: 48000
}
);
audio_engine_var.scriptProcessor = audio_engine_var.context.createScriptProcessor(1024, 1, 1);
audio_engine_var.scriptProcessor.onaudioprocess = function(e) {
let aquired_samples = e.inputBuffer.getChannelData(0);
aquired_samples.forEach(element => {
samples.audio_samples.push(element);
});
}
audio_engine_var.input = audio_engine_var.context.createMediaStreamSource(audio_engine_var.stream);
audio_engine_var.scriptProcessor.connect(audio_engine_var.context.destination)
audio_engine_var.input.connect(audio_engine_var.scriptProcessor);
setTimeout(function() {
download_samples();
}, 15 * 1000) // stop recording and download audio samples.
});
}
function download_samples(){
// stop audio engine
audio_engine_var.context.close();
audio_engine_var.scriptProcessor.disconnect() ;
// download_audio
var dataStr = "data:text/json;charset=utf-8," + encodeURIComponent(JSON.stringify(samples));
var downloadAnchorNode = document.createElement('a');
downloadAnchorNode.setAttribute("href", dataStr);
downloadAnchorNode.setAttribute("download", "audio.json");
document.body.appendChild(downloadAnchorNode); // required for firefox
downloadAnchorNode.click();
downloadAnchorNode.remove();
setTimeout(function() {
window.location.reload();
}, 200 ) // stop recording and download audio samples.
}
Run Code Online (Sandbox Code Playgroud)