Javascript 更改AudioContext(getUserMedia)的采样率
我正试图通过getUserMedia录制48000Hz的录音。但是没有运气。返回的音频媒体流返回44100Hz。如何将其设置为48000Hz 以下是我的代码片段:Javascript 更改AudioContext(getUserMedia)的采样率,javascript,getusermedia,sample-rate,audiocontext,Javascript,Getusermedia,Sample Rate,Audiocontext,我正试图通过getUserMedia录制48000Hz的录音。但是没有运气。返回的音频媒体流返回44100Hz。如何将其设置为48000Hz 以下是我的代码片段: var startUsermedia = this.startUsermedia; navigator.getUserMedia({ audio: true, //sampleRate: 48000 }, start
var startUsermedia = this.startUsermedia;
navigator.getUserMedia({
audio: true,
//sampleRate: 48000
}, startUsermedia, function (e) {
console.log('No live audio input: ' + e);
});
startUsermedia功能:
startUsermedia: function (stream) {
var input = audio_context.createMediaStreamSource(stream);
console.log('Media stream created.');
// Uncomment if you want the audio to feedback directly
//input.connect(audio_context.destination);
//__log('Input connected to audio context destination.');
recorder = new Recorder(input);
console.log('Recorder initialised.');
},
我尝试更改AudioContext的属性采样器,但没有成功
如何将采样器更改为48000Hz
编辑:我们现在也可以使用flash解决方案,该解决方案可以录制和导出48000Hz的wav文件您不能。AudioContext的采样率由浏览器/设备设置,您无法对其进行任何更改。事实上,你会发现你机器上的44.1kHz可能是我机器上的48kHz。默认情况下,它随操作系统选择的内容而变化
还请记住,并非所有硬件都能实现所有采样率。据我所知,在音频环境中无法更改采样率。采样率通常是您的录音设备的采样率,并保持不变。所以你不能写这样的东西:
var input = audio_context.createMediaStreamSource(stream);
var resampler = new Resampler(44100, 48000);
input.connect(resampler);
resampler.connect(audio_context.destination);
但是,如果您想获取音频流,对其重新采样,然后将其发送到后端(或在Web audio API之外使用它进行其他操作),则可以使用外部采样率转换器(例如)
似乎存在无法设置采样率的公开错误: 还有一个Chrome问题: 我检查了最新的Chromium代码,里面没有允许您设置采样率的内容 编辑:它似乎已经在Chrome中实现,但目前已被破坏-请参阅Chrome问题中的注释。您可以使用基本上以不同的采样率呈现音频缓冲区(但这是批处理操作)
因此,您可以使用普通音频上下文录制录制,然后使用具有不同采样率的OfflineAudioContext渲染缓冲区。Mozilla页面上有一个示例。它现在在规范中,但尚未在Chromium中实现。
同样在bugs.chromium.org中,“Status:Available”并不意味着它已经实现。这只意味着没有人在做这件事,任何想做这件事的人都可以使用它。所以“可用”表示“未分配”。它已添加到chrome中: var ctx=new(window.AudioContext | | window.webkitadiocontext)({sampleRate:16000})
创建AudioContext对象时,只需设置采样率,这对我很有用我明白了,谢谢。是否有支持48kHz的闪存解决方案?(如果某些硬件不支持它,这并不重要)@f.lorenzo也许。你应该发布一个不同的问题,因为Flash的答案与Web音频API完全不同。谢谢你,但遗憾的是,录音的重新采样版本不起作用。但这对于其他正在寻找转换sampleRatesOk的方法的人来说是一个很好的答案,他们只是出于好奇:您想对音频流做什么?你想以某种方式保存它,还是你的目标是什么?遗憾的是,由于公司的政策,我不能告诉你它的目的。但正确的采样器是必须的。好的,我明白了。如果您可以控制应用程序使用的环境(浏览器、操作系统),那么您可以直接在那里更改音频设备的默认采样率。音频上下文采用输出设备的采样率,而不是输入设备的采样率。从2021年起,Firefox无法运行。
var resampler = new Resampler(44100, 48000, 1, 2229);
function startUsermedia(stream) {
var input = audio_context.createMediaStreamSource(stream);
console.log('Media stream created.');
recorder = audio_context.createScriptProcessor(2048);
recorder.onaudioprocess = recorderProcess;
recorder.connect(audio_context.destination);
}
function recorderProcess(e) {
var buffer = e.inputBuffer.getChannelData(0);
var resampled = resampler.resampler(buffer);
//--> do sth with the resampled data for instance send to server
}
audioContext = new AudioContext({sampleRate: 48000})