我有一个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,但它显示了错误消息。
谢谢
答案 0 :(得分:0)
嗨abcdef或其他什么,
你需要计算你的缓冲时间。所以你需要知道块的长度=&gt;可能170毫秒。因此,在开始另一个之前,请确保一个块是finsisehd。您可以使用数组或setTimeout或其他任何方式执行此操作。
也许拆分(&#34 ;;&#34;)命令太慢了。 我的意思是你需要成千上万的分裂。这不是太费时间吗?
如果这是一个瓶颈并且您需要更多时间来完成所有处理,请尝试记录,因为您只有170毫秒。
也许你可以用python生成数据,它不必分割,也可以直接解码。就像一个mp3或其他东西=&gt; wav可能更快。
我不知道这取决于您的设置和不同步骤所花费的时间。
干杯
Kilian的