【发布时间】:2022-01-11 20:44:12
【问题描述】:
我的问题的单行版本: 如何在 Web 浏览器中录制无损(或至少是令人难以置信的高质量)音频?最好是铬/铬,因为我想做一个高质量的录音电子应用程序。
请注意,这个问题是 8 年前提出的,但我正在努力寻找 2022 年的现代解决方案:High Quality Audio Recording in Web Browser
我曾尝试使用getUserMedia() 在 javascript 中录制音频,甚至可以像这样指定音频质量变量:
var constraints = {
audio: true,
"mandatory": {
//sampleSize: 32,
//sampleRate
channelCount: 2,
//autoGainControl: false,
//noiseSuppression: false,
//echoCancellation: false,
"googEchoCancellation": "false",
"googAutoGainControl": "false",
"googNoiseSuppression": "false",
"googHighpassFilter": "false"
},
video: false
};
此代码在我的仓库中:https://github.com/MartinBarker/simple-web-audio-recorder-demo 录音有效,但质量仍然很低: windows文件浏览器显示保存的wav文件为705kbps,Spek显示为16bit, 1411kbps, 44100Hz, 1通道,文件听起来很糟糕。
比较大胆,在同一台计算机上使用同一个麦克风录音,我可以输出一个 32 位签名的 wav 文件,Windows 说它的比特率为 2822kbps,Spek 显示 32bit、2822kbps、44100hz, 2声道文件,听起来很棒。
我正在尝试在我的 chrome 浏览器中录制质量与 audacity 相似的 wav 文件,这可能吗?还有其他网络库可以帮助我实现这个目标吗?
【问题讨论】:
-
44100Hz 16 位音频(字面上)是 CD 质量(尽管 CD 有 2 个声道,用于立体声)。您可能不会将原始音频写入 PCM 文件,而是以某种方式压缩流(解码回 PCM)。
-
据我所知,OPUS 是我们在大多数情况下获得的最高质量,如果它是通过浏览器流式传输完成的,则无需编码/解码。作为采样率/比特,在线传输的标准是 48KHz@16bit(如果需要,可以使用 24 位)。这确保了所有声音都可以像后来发现的萨克斯管的最高音符一样被听到(但这在这里可能无关紧要)。 OPUS 是通过浏览器的标准。 :)
-
我要补充一下,您的 WebRTC 设置未设置为高质量,请使用 echoCancellation、autoGainControl、noiseSuppression 作为您的设置,我认为您不应该使用强制它的基本选项寻求 webrtc正确部署。 goog 在设置这些时并不是真正的标准或考虑,它可能会起作用但不要依赖它们。
标签: javascript google-chrome audio-recording getusermedia web-mediarecorder