JS - 从缓冲区播放音频

时间:2017-07-11 10:01:05

标签: javascript audio web-audio web-audio-api

我有一个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();
});

我也尝试了网络音频流API,但它显示了错误消息。

谢谢

1 个答案:

答案 0 :(得分:0)

嗨abcdef或其他什么,

你需要计算你的缓冲时间。所以你需要知道块的长度=&gt;可能170毫秒。因此,在开始另一个之前,请确保一个块是finsisehd。您可以使用数组或setTimeout或其他任何方式执行此操作。

也许拆分(&#34 ;;&#34;)命令太慢了。 我的意思是你需要成千上万的分裂。这不是太费时间吗?

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

也许你可以用python生成数据,它不必分割,也可以直接解码。就像一个mp3或其他东西=&gt; wav可能更快。

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

干杯

Kilian的