最新消息: 电脑我帮您提供丰富的电脑知识,编程学习,软件下载,win7系统下载。

将Float32Array缓冲到客户端

IT培训 admin 6浏览 0评论

将Float32Array缓冲到客户端

这应该是显而易见的,但由于某种原因,我没有得到任何结果。我已经花了太多时间只是尝试不同的方法来使这个工作没有结果。

TLDR:解释这个问题的一个简短方法可能是:我知道如何从文件中传输声音。如何流式传输包含服务器上合成的声音的缓冲区?

这有效:

  • 客户: var stream = ss.createStream(); ss(socket).emit('get-file', stream, data.bufferSource); var parts = []; stream.on('data', function(chunk){ parts.push(chunk); }); stream.on('end', function () { var blob=new Blob(parts,{type:"audio"}); if(cb){ cb(blob); } });
  • server(在socket.io的'socket-connected'回调中) var ss = require('socket.io-stream'); // .... ss(socket).on('get-file', (stream:any, filename:any)=>{ console.log("get-file",filename); fs.createReadStream(filename).pipe(stream); });

现在,问题是:

我想改变这个音频缓冲区并发送修改后的音频而不仅仅是文件。我将ReadStream转换为Float32Array,并按样本进行了一些处理。现在我想将修改后的Float32Array发送给客户端。

在我看来,我只需要用fs.createReadStream(filename)替换(new Readable()).push(modifiedSoundBuffer)。但是,我得到了一个TypeError: Invalid non-string/buffer chunk。有趣的是,如果我将这个modifiedSodunBuffer转换为Uint8Array,它不会对我大喊大叫,而客户端会得到一个很大的数组,看起来不错;只是所有的数组值都是0.我猜它是所有值的地板?

  ss(socket).on('get-buffer', (stream:any, filename:any)=>{
    let readable=(new Readable()).push(modifiedFloat32Array);
    readable.pipe(stream);
  });

我试图使用流有两个原因:声音缓冲区很大,并允许将来进行并发处理

回答如下:

如果你将对象Float32Array转换为缓冲区之前发送像这样的Readable())。push(Buffer.from(modifiedSoundBuffer))?

将Float32Array缓冲到客户端

这应该是显而易见的,但由于某种原因,我没有得到任何结果。我已经花了太多时间只是尝试不同的方法来使这个工作没有结果。

TLDR:解释这个问题的一个简短方法可能是:我知道如何从文件中传输声音。如何流式传输包含服务器上合成的声音的缓冲区?

这有效:

  • 客户: var stream = ss.createStream(); ss(socket).emit('get-file', stream, data.bufferSource); var parts = []; stream.on('data', function(chunk){ parts.push(chunk); }); stream.on('end', function () { var blob=new Blob(parts,{type:"audio"}); if(cb){ cb(blob); } });
  • server(在socket.io的'socket-connected'回调中) var ss = require('socket.io-stream'); // .... ss(socket).on('get-file', (stream:any, filename:any)=>{ console.log("get-file",filename); fs.createReadStream(filename).pipe(stream); });

现在,问题是:

我想改变这个音频缓冲区并发送修改后的音频而不仅仅是文件。我将ReadStream转换为Float32Array,并按样本进行了一些处理。现在我想将修改后的Float32Array发送给客户端。

在我看来,我只需要用fs.createReadStream(filename)替换(new Readable()).push(modifiedSoundBuffer)。但是,我得到了一个TypeError: Invalid non-string/buffer chunk。有趣的是,如果我将这个modifiedSodunBuffer转换为Uint8Array,它不会对我大喊大叫,而客户端会得到一个很大的数组,看起来不错;只是所有的数组值都是0.我猜它是所有值的地板?

  ss(socket).on('get-buffer', (stream:any, filename:any)=>{
    let readable=(new Readable()).push(modifiedFloat32Array);
    readable.pipe(stream);
  });

我试图使用流有两个原因:声音缓冲区很大,并允许将来进行并发处理

回答如下:

如果你将对象Float32Array转换为缓冲区之前发送像这样的Readable())。push(Buffer.from(modifiedSoundBuffer))?

与本文相关的文章

发布评论

评论列表 (0)

  1. 暂无评论