Начална » кодиране на стоките » Как да се покаже Времевият транскрипт заедно с аудио

    Как да се покаже Времевият транскрипт заедно с аудио

    Звуковата транскрипция е текстовата версия на речта, която е полезна за предоставяне на полезни материали като записани лекции, семинари и т.н. Те също така се използват за съхраняване на текстови записи на събития като интервюта, съдебни заседания и срещи.

    Аудиото на речта в уеб страници (като в подкасти) обикновено се придружава с преписи, в полза на хората с увреден слух или изобщо не могат да чуят. Те могат да видите текста "играе" заедно с аудиото. Най-добрият начин за създаване на аудиозапис е чрез ръчна интерпретация и запис.

    В този пост ще видим как да показвате работещ аудиозапис заедно с аудиото. За да започнем, трябва да подготвим транскрипта. За тази публикация изтеглих пробен звук и препис от него voxtab.

    Използвам HTML ул списък за показване на диалози на уеб страница, както е показано по-долу:

    • Джъстин: Опитвам се да кажа, че жалбата и споразумението са отделни.
    • Алистър: Искаш да кажеш, че вътрешните и външните комуникации и съобщения ще бъдат включени в процеса на обжалване.
    • Джъстин: Точно така, защото се свързват с жалбата.
    • ...

    След това искам всички налични текстове да бъдат размазани и на размазвайте само диалога, който съответства на текущата реч, която се възпроизвежда от аудиозаписа. Така че, за да размазвам диалозите, използвам CSS филтъра "blur".

    #transcript> li -webkit-filter: филтър за размазване (3px): размазване (3px); преход: всички .8s лекота;…

    За IE 10+ можете да добавите текстови сянка за да създадете размазан ефект. Можете да използвате този код, за да откриете дали е приложено размазване на CSS или не, и да заредите вашата специална таблица за стилове в IE. След като текстът е размазан, аз продължих и добавих стил към преписа.

     if (getComputedStyle (диалози [0]). webkitFilter === undefined && getComputedStyle (диалози [0]). ( "връзка"); linkEle.type = 'текст / css'; linkEle.rel = 'stylesheet'; linkEle.href = 'ie.css'; headEle.appendChild (linkEle); 

    Сега, нека добавим аудиото към страницата, с това.

     

    Най- ontimeupdate събитие звуков елементът се изстрелва всеки път, когато се текущо време се актуализира, така че ще използваме това събитие, за да проверим текущото време на работа на аудиото и да подчертаем съответния диалог в преписа. Нека първо създадем някои глобални променливи, които ще са ни необходими.

    dialogueTimings = [0,4,9,11,18,24,29,31,44,45,47]; диалози = document.querySelectorAll ('# transcript> li'); transcriptWrapper = document.querySelector ('# transcriptWrapper'); audio = document.querySelector ('# audio'); previousDialogueTime = -1; 

    dialogueTimings е масив от числа, представляващи секундите, когато започва всеки диалог в транскрипта. Първият диалог започва от 0s, втори в 4s, и така нататък. previousDialogueTime ще се използва за проследяване на промените в диалога.

    Нека най-накрая да преминем към функцията, прикачена към ontimeupdate, което се нарича "playTranscript". От playTranscript изстрелва се почти всяка секунда, когато звукът се възпроизвежда, трябва първо да определим кой диалог се изпълнява в момента. Да предположим, че аудиото е в 0:14, след това възпроизвежда диалога, който започна в 0:11 (препратете dialogueTimings масив), ако текущото време е 0:30 в аудиото, тогава е диалогът, който започна в 0:29.

    Следователно, за да разберем кога е започнал текущият диалог, първо филтрираме всички времена в dialogueTimings масив, които са под текущото време на звука. Ако текущото време е 0:14, филтрираме всички номера. в масива, който е под 14 (които са 0, 4, 9 и 11) и разберете максимума не. от тези, които са 11 (така диалогът започна в 0:11).

    функция playTranscript () var currentDialogueTime = Math.max.apply (Математика, dialogTimings.filter (функция (v) връщане v <= audio.currentTime));  

    Веднъж currentDialogueTime се изчислява, проверяваме дали е същата като previousDialogueTime(ако диалогът в аудиото се е променил или не), ако не е съвпадение (ако диалогът се е променил), то currentDialogueTime е присвоено previousDialogueTime.

    функция playTranscript () var currentDialogueTime = Math.max.apply (Математика, dialogTimings.filter (функция (v) връщане v <= audio.currentTime)); if(previousDialogueTime !== currentDialogueTime)  previousDialogueTime = currentDialogueTime;   

    Сега да използваме индекса на currentDialogueTime в dialogueTimings масив, за да разберете кой диалог в списъка с диалози трябва да бъде подчертан. Например, ако currentDialogueTime е 11, след това индекс от 11 в dialogueTimings масив е 3, което означава, че трябва да подчертаем диалога в индекс 3 в диалози масив.

    функция playTranscript () var currentDialogueTime = Math.max.apply (Математика, dialogTimings.filter (функция (v) връщане v <= audio.currentTime)); if(previousDialogueTime !== currentDialogueTime)  previousDialogueTime = currentDialogueTime; var currentDialogue = dialogues[dialogueTimings.indexOf(currentDialogueTime)];   

    След като намерим диалога, който да подчертае (това е currentDialogue), превъртаме transcriptWrapper (при превъртане) до currentDialogue е 50px под горната част на опаковката, след което откриваме предварително подчертания диалог и премахваме класа говорещ от него и го добавете currentDialogue.

    функция playTranscript () var currentDialogueTime = Math.max.apply (Математика, dialogTimings.filter (функция (v) връщане v <= audio.currentTime)); if(previousDialogueTime !== currentDialogueTime)  previousDialogueTime = currentDialogueTime; var currentDialogue = dialogues[dialogueTimings.indexOf(currentDialogueTime)]; transcriptWrapper.scrollTop = currentDialogue.offsetTop - 50; var previousDialogue = document.getElementsByClassName('speaking')[0]; if(previousDialogue !== undefined) previousDialogue.className = previousDialogue.className.replace('speaking',"); currentDialogue.className +=' speaking';   

    Елементът с клас говорещ ще покаже текст, който не е размазан.

    .говорещ -webkit-филтър: размазване (0px) филтър: размазване (0px); 

    И това е всичко, тук е пълният код на HTML и JS кода.

    • Джъстин: Опитвам се да кажа, че жалбата и споразумението са отделни.
    • Алистър: Искаш да кажеш, че вътрешните и външните комуникации и съобщения ще бъдат включени в процеса на обжалване.
    • Джъстин: Точно така, защото се свързват с жалбата.
    • ...


    Демонстрация

    Вижте демото по-долу, за да получите представа как работи, когато всички кодове са събрани.