Потоковое аудио PCM с помощью node.js - PullRequest
0 голосов
/ 26 августа 2018

Я хочу сгенерировать определенный звуковой шаблон на сервере nodejs, а затем передать аудио на http-клиент, используя express.js.

С этой реализацией API WebAudio https://github.com/mohayonao/web-audio-engine/ я былвозможность воспроизведения сгенерированного аудио непосредственно на сервере с помощью модуля динамика, как в примере (https://github.com/mohayonao/web-audio-engine#example)

const Speaker = require("speaker");
const AudioContext = require("web-audio-engine").StreamAudioContext;

function audio(){
  const context = new AudioContext();

  const osc = context.createOscillator();
  osc.type = "sine";
  osc.frequency.setValueAtTime(220, 0);
  osc.frequency.setValueAtTime(440, 1);
  osc.start(0);
  osc.stop(2);
  osc.connect(context.destination);
  osc.onended = () => {
    console.log("finished")
    delete context
  };

  context.pipe(new Speaker());       
  context.resume();
}

audio()

Теперь я попытался передать аудиопоток на http-ответ express:

const express = require("express")
const app = express();

app.get('/', function (req, res) {
  res.set('Content-Type', 'audio/wav');
  audio((context)=>{
    context.pipe(res)
  })
});

app.listen(3000)


const Speaker = require("speaker");
const AudioContext = require("web-audio-engine").StreamAudioContext;

function audio(callback){
  const context = new AudioContext();

  const osc = context.createOscillator();
  osc.type = "sine";
  osc.frequency.setValueAtTime(220, 0);
  osc.frequency.setValueAtTime(440, 1);
  osc.start(0);
  osc.stop(2);
  osc.connect(context.destination);
  osc.onended = () => {
    console.log("finished")
    delete context
  };

  callback(context);
  context.resume();
}

Когда я открываю localhost: 3000, в браузере теперь есть аудиоплеер, поэтому тип контента был распознан, но ничего не воспроизводится, просто отображается анимация загрузки. Через 2 секунды, когда аудиопотокпо окончании отображается значок «поврежденного файла».
Как правильно транслировать сгенерированный звук PCM (в формате wav?)

...