Как зациклить mp3 в браузере с нулевым разрывом? - PullRequest
2 голосов
/ 02 ноября 2010

Я пытаюсь создать сайт, посвященный гитарным практикам, и критически важной функцией является циклическое воспроизведение очень коротких mp3-файлов (длиной в несколько секунд) с абсолютно нулевым промежутком между ними.Например, это может быть аккорд длиной в 4 такта, и я хочу, чтобы пользователь мог плавно переходить через него.

Я пытался использовать тег HTML5 <audio> с атрибутом loop.Google Chrome дает небольшой разрыв между циклами, но достаточно большой, чтобы быть совершенно неприемлемым для моих целей.Я не тестировал другие браузеры, но считаю, что он не будет работать.

Возможный обходной путь - использовать ffmpeg для потоковой передачи повторений того же звука, что и в mp3.Однако это стоит большой полосы пропускания.

Для себя я использую Audacity для цикла без пробелов, но, к сожалению, Audacity не имеет веб-версии.

Итак, есть ли у вас какие-либо идеи, какЯ могу зациклить mp3 в браузере с нулевым разрывом?Я предпочитаю не Flash-решения, но если ничего не сработает, я буду использовать Flash.

Редактировать: Спасибо за все ваши предложения.Вспышка получается прилично работает.Я сделал игрушечную демонстрацию на http://vmlucid.lcm.hk/~netvope/audio/flash.html. К моему удивлению (я использую, чтобы связать Flash только с зависанием ресурсов и сбоями браузера), Flash и ActionScript довольно хорошо разработаны и просты в использовании.Мне потребовалось всего 3 часа на мой первый проект Flash:)

Ответы [ 4 ]

3 голосов
/ 02 ноября 2010

Посмотрите на эту страницу . Прослушав некоторое время с помощью Google Chrome 7, я обнаружил, что метод 1 работает прилично, а метод 3 дает лучшие результаты, хотя это немного хакерский. В конечном итоге все браузеры работают по-разному, тем более что HTML5 еще не завершен. Если возможно, вы должны выбрать версию Flash, которая, я думаю, даст вам лучший цикл.

1 голос
/ 02 ноября 2010

Или воспользуйтесь этой утилитой: http://www.compuphase.com/mp3/mp3loops.htm Я успешно использовал ее для своих проектов флеш-памяти, когда музыку нужно было зацикливать без пропусков, и 99% времени она работала. Он принимает WAV в качестве входа.
По сути, это своего рода интерфейс для кодировщика LAME mp3, который использует такие настройки, чтобы предотвратить появление пробелов. Он не будет работать с очень короткими звуковыми эффектами (я полагаю, менее чем за 0,5 секунды).
После всего, что вам нужно сделать, это использовать:

var sound:Sound = new MySoundEffect();
sound.play(0, 1000);

и он будет повторяться тысячу раз.

1 голос
/ 02 ноября 2010

во flash AS3 вы можете извлечь звуковые данные с помощью computeSpectrum () и передать их вашему звуковому объекту именно тогда, когда это необходимо ( SampleDataEvent запущено).

1 голос
/ 02 ноября 2010

Я не уверен, насколько хорошо это будет работать, но если бы вы знали, что ваш цикл длился 800 миллисекунд - вы могли бы заставить браузер вызывать метод воспроизведения каждые 800 мс ... хотя все равно он не гарантированно будет идеальным. Я не думаю, что браузер изначально способен обеспечить надежную зацикливание звука на данный момент.

setInterval(function(){
  document.getElementById("loop").play();
}, 800);

По слухам, это лучший способ сделать это самым бесшумным способом, чтобы использовать несколько звуковых тегов и чередовать их.

...