【发布时间】:2017-10-22 14:05:29
【问题描述】:
我正在尝试通过 socket.io 发送音频文件(或块)。
我试过了:
// server
socket.on('client-get-audio', function (data) {
//data.fname - name of requested file
var buffer = fs.readFileSync(data.fname, null);
// try 2 - read arraybuffer
//var buffer = fs.readFileSync(data.fname, null).buffer;
buffer = new Uint8Array(buffer);
socket.emit('audio-data', {count: 1, buff: buffer});
});
我无法解码数据:
// client
// ctx - AudioContext
// source - buffer source
socket.on('audio-data', function(data){
ctx.decodeAudioData(data.buff, decoded => {
source.buffer = decoded;
source.start(0);
});
我不会描述我所有的尝试,有很多。
更新
工作变体
// server
socket.on('client-get-audio', function (data) {
//data.fname - name of requested file
var buffer = fs.readFileSync(data.fname, null);
socket.emit('audio-data', {count: 1, buff: buffer});
});
// client
function toArrayBuffer(buf) {
var ab = new ArrayBuffer(buf.length);
var view = new Uint8Array(ab);
for (var i = 0; i < buf.length; ++i) {
view[i] = buf[i];
}
return ab;
}
// ctx - AudioContext
// source - buffer source
socket.on('audio-data', function(data){
ctx.decodeAudioData(toArrayBuffer(data.buff.data), decoded => {
source.buffer = decoded;
source.start(0);
});
也许有人可以提出更正确的变体?
【问题讨论】:
-
是否有错误,声音没有播放,或者事件没有在客户端触发?
-
错误:无法解码音频数据
-
我不确定我是否在服务器上正确读取了文件。我收到了数组缓冲区,但音频上下文返回错误。
标签: javascript node.js socket.io audiocontext