javascript - 在缓冲区AudioContext JS之间播放音频而没有静音
问题描述
let socket = new WebSocket("WebSocket Address");
let AudioContext = window.AudioContext || window.webkitAudioContext;
let audioCtx;
let buffers = [];
let channels = 1;
function init() {
audioCtx = new AudioContext();
}
function playAudio(buffer) {
if(!audioCtx) {
init();
}
let frameCount = buffer.length;
let myArrayBuffer = audioCtx.createBuffer(channels, frameCount, 44100);
for (let channel = 0; channel < channels; channel++) {
let nowBuffering = myArrayBuffer.getChannelData(channel);
for (let i = 0; i < frameCount; i++) {
nowBuffering[i] = buffer[i];
}
}
source = audioCtx.createBufferSource();
source.buffer = myArrayBuffer;
source.connect(audioCtx.destination);
source.start();
source.onended = () => {
buffers.shift();
playAudio(buffers[0]);
}
}
socket.onmessage = function (event) {
var arr = event.data.split(" ");
buffers.push(arr);
}
document.querySelector('#start').onclick = () => {
playAudio(buffers[0]);
}
我编写了一个程序来解码音频文件并通过套接字发送一个 44100 数字(-1 到 1)的音频缓冲区字符串。
在 JavaScript 中,我编写了这段代码来获取一个字符串,将其转换为一个数组,然后回放它。但是当再次调用 playSound 函数时,声音会消失几毫秒。
有什么方法或想法可以使播放流畅且无延迟?
解决方案
推荐阅读
- graphql - GraphQL 产品查询拒绝访问
- android - LiveData 和 Transformations.switchMap 崩溃
- javascript - 下拉从时间选择上一次禁用时间
- vue.js - 如何为不同的表扩展跨度方法
- c# - 如何将所有解决方案包更新到最新的次要版本 Nuget?
- javascript - 将 XLSX 列数据类型修改为文本
- angular - 删除动态行中选定的下拉值
- javascript - AngularJs 无法从函数返回数据
- javascript - 监听firestore中Root集合云功能的变化
- linux - 在 Ubuntu 18 中使用 Ubuntu 16 的共享库