Буферизация массива Float32 для клиента - PullRequest
0 голосов
/ 14 февраля 2019

Это должно быть очевидно, но по какой-то причине я не получаю никакого результата.Я уже потратил слишком много времени, просто пытаясь разными способами заставить это работать без результатов.

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);
          }
     });
    
  • сервер (в «обратном вызове socket.io»)

    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);
  });

Я пытаюсь использовать потоки по двум причинам: звуковые буферы велики и для одновременной обработки в будущем

1 Ответ

0 голосов
/ 14 февраля 2019

если вы преобразуете объект Float32Array в буфер перед отправкой следующим образом: Readable ()). Push (Buffer.from (ifiedSoundBuffer))?

...