- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想在通话时获取音频缓冲区,我做了这个方法来检测它,但是我收到消息,这个方法 onaudioprocess 已被弃用并且没有被触发,有没有其他替代方法的例子。
audioContext = new AudioContext({ sampleRate: 16000 });
scriptNode = (audioContext.createScriptProcessor || audioContext.createJavaScriptNode).call(audioContext, 1024, 1, 1);
scriptNode.onaudioprocess = function (audioEvent) {
if (recording) {
input = audioEvent.inputBuffer.getChannelData(0);
// convert float audio data to 16-bit PCM
var buffer = new ArrayBuffer(input.length * 2);
var output = new DataView(buffer);
for (var i = 0, offset = 0; i < input.length; i++, offset += 2) {
var s = Math.max(-1, Math.min(1, input[i]));
output.setInt16(offset, s < 0 ? s * 0x8000 : s * 0x7fff, true);
}
ws.send(buffer);
}
};
最佳答案
与 MediaStream Recording API和 MediaDevices.getUserMedia()
方法,您可以从麦克风流式传输音频并将其流式传输到录音机。然后录音机可以发送Blob
每当 ondataavailable
时通过 WebSockets 对象事件在记录器上触发。
下面的函数创建一个流并将其传递给 MediaRecorder
实例。该实例将记录您的麦克风音频并能够将其发送到您的 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;
});
这样你也可以
停止如果您愿意,可以调用
stop()
进行录音记录仪上的方法。
(async () => {
const ws = new WebSocket('ws://yoururl.com');
const recorder = await streamMicrophoneAudioToSocket(ws);
document.addEventListener('click', event => {
recorder.stop();
});
}());
关于javascript - scriptNode.onaudioprocess 已弃用,还有其他选择吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65447236/
(Windows 7/64,FireFox 41.0.1)我有一个Web音频网络,该网络包含一个(现场麦克风)源,该源连接到脚本节点,该脚本节点又连接到目标节点。如果我包含一个没有“onclick”脚
我想在通话时获取音频缓冲区,我做了这个方法来检测它,但是我收到消息,这个方法 onaudioprocess 已被弃用并且没有被触发,有没有其他替代方法的例子。 audioContext = new A
我正在编写一个 GUI 和脚本,当在场景中选择特定对象时执行。我以前没有任何问题,但现在我... 当我选择我的对象时,我创建的 scriptJob 说要启动程序……此时,它没有。进一步研究它,我尝试测
我是一名优秀的程序员,十分优秀!