Я пытаюсь записать песни в формате MP3 с помощью js и socket io в режиме реального времени. Я в основном разделяю MP3 на сегменты байтов и отправляю их на клиентскую сторону, где веб-аудио API получит его, расшифрует и начнет воспроизводить его. Проблема здесь в том, что звук не воспроизводится непрерывно, есть что-то вроде промежутка в 0,5 секунды между каждым буферизованным сегментом. Как я могу решить эту проблему
// buffer is a 2 seconds decoded audio ready to be played
// the function is called when a new buffer is recieved
function stream(buffer)
{
// creates a new buffer source and connects it to the Audio context
var source = context.createBufferSource();
source.buffer = buffer;
source.connect(context.destination);
source.loop = false;
// sets it and updates the time
source.start(time + context.currentTime);
time += buffer.duration; // time is global variable initially set to zero
}
Часть, называемая потоком
// where stream bufferQ is an array of decoded MP3 data
// so the stream function is called after every 3 segments that are recieved
// the Web audio Api plays it with gaps between the sound
if(bufferQ.length == 3)
{
for(var i = 0, n = bufferQ.length ; i < n; i++)
{
stream(bufferQ.splice(0,1)[0]);
}
}
следует ли использовать другой API, отличный от API веб-аудио, или есть способ запланировать мой буфер, чтобы он воспроизводился непрерывно?
Это проблема с mp3 файлами, каждый mp3 файл имеет несколько кадров тишины в начале и в конце. Если вы используете файлы wav или время запуска и остановки каждого файла, вы можете его исправить