Есть ли лучший способ синхронизировать аудио с видео (без того, чтобы просто поместить его в само видео)?

Я пытаюсь разработать панель проигрывателя, которая работает в Animate cc и воспроизводит как видео, так и анимацию перед указанным видео на холсте html5.

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

//Position the scrubber, handle press/release events for scrubber
this.addEventListener("tick", fl_MouseClickHandler.bind(this));
function fl_MouseClickHandler()
{
    if(isDragging == false){
        proportion = this.currentFrame/this.totalFrames;
        if(Math.round(this.currentFrame/30) % 10 == 0){ // do this every 10 seconds
            audioSync(proportion);
        }
        this.scrubber.x = scrubberStart + (proportion * barWidth);
    }
    else {
        if (stage.mouseX > scrubberStart && stage.mouseX < (scrubberStart + barWidth)) {
            proportion = (stage.mouseX-scrubberStart)/barWidth;
            this.scrubber.x = stage.mouseX;         
        }
    }
}

function audioSync(var p){
    audioInstance.setPosition(p * audioInstance.duration);

    //is there a better way to do this without it getting choppy?
    //currently sounds like 
    //fo-o-o-d-d-d S-s-aaaaffttey-y-y when set to 2 seconds 
    //(it gets off that fast)
    //it does those glitchy sounds for a few seconds when you increase the interval 
    //(if set to do it 10 seconds, ~3 seconds glitch, ~7 seconds normal)
}

Прямо сейчас это звучит как Daft Punk, когда они замедляют вокал, и он становится очень прерывистым. (см. с 0:00 до 1:30 "Alive 2007", трек 7, "лицом к лицу / короткое замыкание" (c) Daft Punk Legals, хороший пример).

Вот демо, где только рассинхронизация: http://mhardingfoodsafe.github.io/player-audio-messed-up/

Когда я пытаюсь сделать audioInstance.currentTime = video.currentTime;, ничего не меняется, а когда я делаю video.currentTime = audioInstance.currentTime;, я получаю сообщение об ошибке, в котором говорится, что он не может считывать значения, которые не являются конечными.

это тот, где он на самом деле делает то, что я описываю (а не то, что я хочу): http://mhardingfoodsafe.github.io/player-bar-v2/


person Mike    schedule 04.05.2016    source источник
comment
Возможная помощь: stackoverflow.com /вопросы/6433900/   -  person Riddell    schedule 04.05.2016
comment
Я только что попробовал это сделать, но мне это почему-то не нравится. они до сих пор играют по разным ставкам. (пробовал в audioSync() в прослушивателе тиков и в прослушивателе тиков, но вне условия делать это каждые 10 секунд):/   -  person Mike    schedule 04.05.2016
comment
Вы пытались изменить его, чтобы вместо этого синхронизировать видео с аудио? Я не могу помочь, потому что я недостаточно хорошо знаю ситуацию.   -  person Riddell    schedule 04.05.2016
comment
да, у меня почти есть демо для тебя :), когда я сделал это вчера, это стробировало видео. Я мог бы попробовать еще раз в другом месте, чтобы посмотреть, поможет ли это, но сначала я опубликую демо.   -  person Mike    schedule 04.05.2016
comment
Хорошо, Майк. Людям намного легче тестировать и экспериментировать, когда им даются демоверсии. Это значительно ускоряет процесс отладки и получение ответа.   -  person Riddell    schedule 04.05.2016
comment
Итак, это демо, но я не могу заставить его воспроизвести глючный звук, который он делает, когда я тестирую его локально. он по-прежнему не синхронизируется, но я буду работать над воссозданием другой проблемы mhardingfoodsafe. github.io/player-audio-messed-up   -  person Mike    schedule 04.05.2016


Ответы (1)


Было проще просто убедиться, что все анимации находятся в видео со звуком, чтобы оно было менее сложным и оставалось синхронизированным...

Почему:

  • Видео отслеживает синхронизацию лучше, чем Animate cc при использовании холста html5.

  • Проще просто добавить элементы управления видео, чем кадры, аудио и видео одновременно.

  • менее подвержены ошибкам при попытке реализации через множество различных видов интернет-соединений и устройств.

это в основном то же самое, за исключением функции синхронизации звука. Просто убедитесь, что в сцене достаточно кадров, чтобы соответствовать длине видео с установленной вами частотой кадров.

person Mike    schedule 06.05.2016