【问题标题】:JS - Play audio from buffersJS - 从缓冲区播放音频
【发布时间】:2017-12-15 07:50:06
【问题描述】:

我有一个 python 脚本,它每 170 毫秒生成一个音频缓冲区。 这个缓冲区通过套接字实时发送到我的 JS 程序。 我现在正在尝试实时播放缓冲区的声音。

我每次收到东西时都尝试创建一个新的 JS AudioBuffer,但这样做会导致很多口吃。

var net = require('net');
var client = new net.Socket();

client.connect(8484, '127.0.0.1', function() {
    console.log('Connected');
});

var audioCtx = new (window.AudioContext || window.webkitAudioContext)();
var channels = 1;

client.on('data', function(data) {
  // clean data (each buffer has a length of 1350)
  var array = String(data).split(";");
  for (var i = 0; i < array.length; i++)
    array[i] = parseFloat(array[i])
  // play the small buffer
  var buf = audioCtx.createBuffer(channels, array.length, 16000);
  var buffering = buf.getChannelData(0);
  for (var i = 0; i < array.length; i++)
      buffering[i] = array[i];
  var source = audioCtx.createBufferSource();
  source.buffer = buf;
  source.connect(audioCtx.destination);
  source.start();
});

我也尝试了 web-audio-stream API,但它显示了一条错误消息。

谢谢

【问题讨论】:

    标签: javascript audio web-audio-api


    【解决方案1】:

    你好 abcdef 或其他,

    您需要为缓冲区计时。所以你需要知道块的长度=> 170 ms。因此,在开始另一块之前,请确保一块已完成。您可以使用数组或 setTimeout 或其他方式来执行此操作。

    也许 split(";") 命令也太慢了。 我的意思是你需要成千上万的分裂。是不是太费时间了?

    如果这是一个瓶颈,请尝试记录,并且您需要更多时间来完成所有处理,因为您只有 170 毫秒。

    也许您可以在 python 中生成数据,无需拆分,可以直接解码。就像 mp3 或其他东西 => wav 可能更快。

    我不知道这真的取决于您的设置以及不同步骤所花费的时间。

    干杯

    基连

    【讨论】:

      猜你喜欢
      • 2011-10-31
      • 1970-01-01
      • 2013-11-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多