use*_*461 20 javascript audio speech voice-recording getusermedia
我目前正在使用getUserMedia(),仅适用于Firefox和Chrome,但它已被弃用,仅适用于https(在Chrome中).有没有其他/更好的方法来获得适用于所有平台的javascript中的语音输入?
例如,像web.whatsapp.com app这样的网站如何录制音频?getUserMedia()提示第一次用户允许录音,而Whatsapp应用程序不需要用户的许可.
在getUserMedia()我目前正在使用这个样子的:
navigator.getUserMedia(
{
"audio": {
"mandatory": {
"googEchoCancellation": "false",
"googAutoGainControl": "false",
"googNoiseSuppression": "false",
"googHighpassFilter": "false"
},
"optional": []
},
}, gotStream, function(e) {
console.log(e);
});
Run Code Online (Sandbox Code Playgroud)
Geo*_*etu 28
Chrome 60+确实需要使用https,因为它getUserMedia是一个强大的功能.API访问不应在非安全域中工作,因为该API访问可能会流失到非安全的actor.不过,Firefox仍支持getUserMediaover http.
我一直在使用RecorderJS,它很好地满足了我的目的.这是一个代码示例.(来源)
function RecordAudio(stream, cfg) {
var config = cfg || {};
var bufferLen = config.bufferLen || 4096;
var numChannels = config.numChannels || 2;
this.context = stream.context;
var recordBuffers = [];
var recording = false;
this.node = (this.context.createScriptProcessor ||
this.context.createJavaScriptNode).call(this.context,
bufferLen, numChannels, numChannels);
stream.connect(this.node);
this.node.connect(this.context.destination);
this.node.onaudioprocess = function(e) {
if (!recording) return;
for (var i = 0; i < numChannels; i++) {
if (!recordBuffers[i]) recordBuffers[i] = [];
recordBuffers[i].push.apply(recordBuffers[i], e.inputBuffer.getChannelData(i));
}
}
this.getData = function() {
var tmp = recordBuffers;
recordBuffers = [];
return tmp; // returns an array of array containing data from various channels
};
this.start() = function() {
recording = true;
};
this.stop() = function() {
recording = false;
};
}
Run Code Online (Sandbox Code Playgroud)
用法很简单:
var recorder = new RecordAudio(userMedia);
recorder.start();
recorder.stop();
var recordedData = recorder.getData()
Run Code Online (Sandbox Code Playgroud)
编辑:如果没有任何效果,您可能还想检查此答案.
Sas*_*nan 17
Recorder JS为您轻松完成工作.它适用于Web Audio API节点
Chrome和Firefox浏览器现已发展.有一个内置的MediaRecoderAPI,可以为您录音.
navigator.mediaDevices.getUserMedia({audio:true})
.then(stream => {
rec = new MediaRecorder(stream);
rec.ondataavailable = e => {
audioChunks.push(e.data);
if (rec.state == "inactive"){
// Use blob to create a new Object URL and playback/download
}
}
})
.catch(e=>console.log(e));
Run Code Online (Sandbox Code Playgroud)
工作演示
MediaRecoder 支持从
Chrome支持:47
Firefox支持:25.0
| 归档时间: |
|
| 查看次数: |
21209 次 |
| 最近记录: |