我试图通过getusermedia录制48000Hz录制。但是没有运气。返回的音频Mediastream返回44100Hz。如何将其设置为48000Hz?
这是我的代码的片段:
var startUsermedia = this.startUsermedia;
navigator.getUserMedia({
audio: true,
//sampleRate: 48000
}, startUsermedia, function (e) {
console.log('No live audio input: ' + e);
});
stronusermedia函数:
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?
edit :我们现在也可以使用一个可以在48000Hz
无法在音频上下文中更改采样率。采样率通常是您的录音设备的样本率,并将保持这种状态。因此,您将无法写下这样的东西:
var input = audio_context.createMediaStreamSource(stream);
var resampler = new Resampler(44100, 48000);
input.connect(resampler);
resampler.connect(audio_context.destination);
但是,如果要进行音频流,将其重新采样,然后将其发送到后端(或在Web Audio API之外使用STH。://github.com/taisel/xaudiojs/blob/master/resampler.js)。
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
}
看来,关于无法设置采样率的空白:
https://github.com/webaudio/web-audio-api/issues/300
还有一个镀铬问题:
https://bugs.chromium.org/p/chromium/issues/detail?id=432248
我检查了最新的铬代码,没有什么可以让您设置采样率。
编辑:似乎已经在Chrome中实现了,但目前已被打破 - 请参阅Chromium问题中的评论。
已添加到chrome:
var ctx = new(window.audiocontext || window.webkitaudiocontext)({采样:16000});
https://developer.mozilla.org/en-us/docs/web/api/audiocontext/audiocontext/audiocontext
audioContext = new AudioContext({sampleRate: 48000})
只需设置录像速率时,当创建AudioContext对象时,这对我有用
注意:此答案已过时。
你不能。AudioContext的采样率是由浏览器/设备设置的,您无能为力更改它。实际上,您会发现机器上的44.1kHz可能是我的48kHz。默认情况下,它的选择都会有所不同。
还请记住,并非所有硬件都能达到所有样本率。
您可以使用Offlineaudiocontext实质上将音频缓冲区渲染为不同的采样率(但这是批处理操作)。
因此,您将使用普通音频上下文记录录制,然后使用具有不同采样率的OfflineAudiocontext来渲染缓冲区。Mozilla页面上有一个示例。
现在在规格中,但尚未在铬中实现。另外,在bugs.chromium.org中,"状态:可用"并不意味着它已实现。这只是意味着没有人在研究它,并且适用于想要从事它的任何人。因此"可用"表示"未分配"。