#javascript #midi
Вопрос:
Я пытаюсь использовать MIDIjs для воспроизведения звука (в частности, потому, что я использую WAD.js, который его использует). К сожалению, я не могу понять, как зациклить звук, из-за досадного отсутствия документации, и я ничего не нахожу в исходном коде. По крайней мере , я хотел бы знать, когда файл естественным образом закончился, чтобы перезапустить MIDIjs.play()
его, но я даже не вижу ничего для этого.
Я был бы признателен, если бы кто-нибудь указал мне на решение, спасибо.
Ответ №1:
Правильно, функции цикла нет (это нигде здесь не задокументировано).
Тем не менее, мы можем , по крайней мере, смоделировать это с MIDIjs.player_callback
помощью, которая вызывается каждые 100 мс с объектом, который выглядит так { time : number }
. Это время в секундах, прошедших. Мы можем объединить это с get_duration
определением конца воспроизведения.
function playAutoReset(url)
{
// get_duration requires a callback as it returns nothing.
MIDIjs.get_duration(url, function (duration)
{
console.info(`Duration: ${duration}`);
// Start the initial play
MIDIjs.play(url);
// This lets us keep track of current play time in seconds
MIDIjs.player_callback = function (mes)
{
if (mes.time / duration >= 1)
{
console.info('End reached');
// This plays the audio again
MIDIjs.play(url);
}
};
});
}
Примечание:
Это действительно вызывает play
каждый раз, поэтому, вероятно, он повторно загрузит исходный код (документы, похоже, подразумевают, что это всегда так). Если вам нужно что-то более эффективное для работы в сети, вы можете изучить XHRs/AJAX и создать URL-адрес объекта, как указано в документах, который play
принимает URL-адрес. Тем не менее, я подумал, что это будет самое простое решение, и оно действительно показывает, что вам нужно сделать, чтобы снова воспроизвести midi-дорожку, когда она закончится.