Javascript scriptNode.onaudioprocess已弃用,是否有其他选择?
我想在说话时获取音频缓冲区,我使用了这个方法来检测它,但我收到一条消息:AudioProcess上的这个方法已被弃用,并且没有被激发,有没有其他方法可以替代,请举例说明Javascript scriptNode.onaudioprocess已弃用,是否有其他选择?,javascript,audio,buffer,html5-audio,audiocontext,Javascript,Audio,Buffer,Html5 Audio,Audiocontext,我想在说话时获取音频缓冲区,我使用了这个方法来检测它,但我收到一条消息:AudioProcess上的这个方法已被弃用,并且没有被激发,有没有其他方法可以替代,请举例说明 audioContext=新的audioContext({sampleRate:16000}); scriptNode=(audioContext.createScriptProcessor | | audioContext.createJavaScriptNode).call(audioContext,1024,1,1); s
audioContext=新的audioContext({sampleRate:16000});
scriptNode=(audioContext.createScriptProcessor | | audioContext.createJavaScriptNode).call(audioContext,1024,1,1);
scriptNode.onaudioprocess=函数(audioEvent){
如果(录音){
输入=audioEvent.inputBuffer.getChannelData(0);
//将浮点音频数据转换为16位PCM
var buffer=new ArrayBuffer(input.length*2);
var输出=新数据视图(缓冲区);
对于(变量i=0,偏移量=0;i
使用和方法,您可以将麦克风中的音频流传输到录音机中。然后,每当事件触发记录器时,记录器可以通过WebSocket发送Blob
对象
async function streamMicrophoneAudioToSocket(ws) {
let stream;
const constraints = { video: false, audio: true };
try {
stream = await navigator.mediaDevices.getUserMedia(constraints);
} catch (error) {
throw new Error(`
MediaDevices.getUserMedia() threw an error.
Stream did not open.
${error.name} -
${error.message}
`);
}
const recorder = new MediaRecorder(stream);
recorder.addEventListener('dataavailable', ({ data }) => {
ws.send(data);
});
recorder.start();
return recorder;
});
(async () => {
const ws = new WebSocket('ws://yoururl.com');
const recorder = await streamMicrophoneAudioToSocket(ws);
document.addEventListener('click', event => {
recorder.stop();
});
}());
下面的函数创建一个流并将其传递给实例。该实例将录制您的麦克风音频,并能够将其发送到您的WebSocket。返回MediaRecorder
的实例以控制记录器
async function streamMicrophoneAudioToSocket(ws) {
let stream;
const constraints = { video: false, audio: true };
try {
stream = await navigator.mediaDevices.getUserMedia(constraints);
} catch (error) {
throw new Error(`
MediaDevices.getUserMedia() threw an error.
Stream did not open.
${error.name} -
${error.message}
`);
}
const recorder = new MediaRecorder(stream);
recorder.addEventListener('dataavailable', ({ data }) => {
ws.send(data);
});
recorder.start();
return recorder;
});
(async () => {
const ws = new WebSocket('ws://yoururl.com');
const recorder = await streamMicrophoneAudioToSocket(ws);
document.addEventListener('click', event => {
recorder.stop();
});
}());
这样,您也可以通过调用记录器上的方法来停止录制
async function streamMicrophoneAudioToSocket(ws) {
let stream;
const constraints = { video: false, audio: true };
try {
stream = await navigator.mediaDevices.getUserMedia(constraints);
} catch (error) {
throw new Error(`
MediaDevices.getUserMedia() threw an error.
Stream did not open.
${error.name} -
${error.message}
`);
}
const recorder = new MediaRecorder(stream);
recorder.addEventListener('dataavailable', ({ data }) => {
ws.send(data);
});
recorder.start();
return recorder;
});
(async () => {
const ws = new WebSocket('ws://yoururl.com');
const recorder = await streamMicrophoneAudioToSocket(ws);
document.addEventListener('click', event => {
recorder.stop();
});
}());
这一行不推荐使用的代码的完全替代品。替换:
scriptNode.onaudioprocess = function (audioEvent) {
与:
这包含用于捕获音频和视频的兼容工作代码。如何捕获音频?您是否打算从您的麦克风捕获声音并将其发送到websocket?@EmielZuurbier是的,它是从我的麦克风发送到websocket的。您能否就下面的答案给出一些反馈?