Pagina principala » Codificare » Cum se afișează transcrierea temporizată alături de Audio redată

    Cum se afișează transcrierea temporizată alături de Audio redată

    Transcrierea audio este versiunea text a discursului, utilă în furnizarea materialelor utile, cum ar fi prelegeri, seminarii etc., la audiența provocată. De asemenea, acestea sunt folosite pentru a păstra înregistrări textuale ale evenimentelor, cum ar fi interviurile, audierile și întâlnirile în instanță.

    Difuzarea audio în paginile web (de exemplu, în podcast-uri) este de obicei însoțită de transcrieri, în beneficiul celor care au auzul sau nu pot auzi deloc. Ei pot vizualizați textul "redat" alături de audio. Cea mai bună modalitate de a crea o transcriere audio este prin interpretarea și înregistrarea manuală.

    În acest post, vom vedea cum se afișează o transcriere audio în desfășurare alături de audio. Pentru a începe, trebuie să avem pregătită transcrierea. Pentru acest post, am descarcat un eșantion audio și transcrierea lui voxtab.

    Eu folosesc HTML ul pentru a afișa dialogurile de pe o pagină web, cum ar fi cele de mai jos:

    • Justin: Ceea ce încerc să spun este că apelul și decontarea sunt separate.
    • Alistair: Vrei să spui că comunicările și anunțurile interne și externe vor fi aduse în procesul de apel.
    • Justin: Corect, pentru că se conectează la recurs.
    • ...

    Apoi, vreau ca tot textul disponibil să fie neclar și să dezactivați numai dialogul care se va potrivi cu discursul curent care este redat de înregistrarea audio. Deci, pentru a debloca dialogurile folosesc filtrul CSS "blur".

    #transcript> li -webkit-filter: blur (3px) filtru: estompare (3px); tranziție: toate facilitățile .8s; ...

    Pentru IE 10+ puteți adăuga text-shadow pentru a crea un efect neclar. Puteți utiliza acest cod pentru a detecta dacă a fost aplicată sau nu culoarea CSS și pentru a încărca foaia de stil specifică IE. Odată ce textul este neclar, m-am dus înainte și am adăugat un anumit stil transcrierii.

     dacă getComputedStyle (dialoguri [0]) .webkitFilter === undefined && getComputedStyle (dialoguri [0]) filter === "none") var headEle = document.querySelector ('head'), linkEle = document.createElement ('legătură'); linkEle.type = 'text / css'; linkEle.rel = 'stylesheet'; linkEle.href = 'ie.css'; headEle.appendChild (linkEle); 

    Acum, să adăugăm audio la pagină, cu asta.

     

    ontimeupdate eveniment al audio elementul este concediat de fiecare dată ora curentă este actualizată, deci vom folosi acel eveniment pentru a verifica timpul de funcționare curent al sunetului și a evidenția dialogul corespunzător din transcriere. Să facem mai întâi niște variabile globale pe care le vom avea nevoie.

    dialogTimings = [0,4,9,11,18,24,29,31,44,45,47]; dialoguri = document.querySelectorAll ('# transcript> li'); transcriptWrapper = document.querySelector ('#exemplare'); audio = document.querySelector ('# audio'); previousDialogueTime = -1; 

    dialogueTimings este o serie de numere reprezentând secundele în care începe fiecare dialog din transcriere. Primul dialog începe la 0s, al doilea la 4s și așa mai departe. previousDialogueTime va fi folosit pentru a urmări schimbările de dialog.

    Să mergem în cele din urmă la funcția pe care ne-o acordăm ontimeupdate, care este numit "playTranscript". De cand playTranscript este declanșată aproape în fiecare secundă pe care o redă sunetul, trebuie să identificăm mai întâi ce dialog se află în prezent în joc. Să presupunem că sunetul este la 0:14, apoi se joacă dialogul care a început la ora 0:11 (vezi dialogueTimings array), dacă ora curentă este 0:30 în audio, atunci este dialogul care a început la 0:29.

    Prin urmare, pentru a afla când începe dialogul actual, mai întâi filtrăm tot timpul în dialogueTimings care sunt sub ora curentă a sunetului. Dacă ora curentă este de 0:14, filtram totul. în matricele care sunt sub 14 (care sunt 0, 4, 9 și 11) și pentru a afla maximum nr. din cele care sunt 11 (astfel dialogul a început la 0:11).

    funcția playTranscript () var currentDialogueTime = Math.max.apply (Math, dialogTimings.filter (funcția (v) retur v <= audio.currentTime));  

    Odata ce currentDialogueTime se calculează, verificăm dacă este la fel ca și previousDialogueTime(adică dacă dialogul din audio sa schimbat sau nu), dacă nu este o potrivire (adică dacă dialogul sa schimbat), atunci currentDialogueTime este alocat previousDialogueTime.

    funcția playTranscript () var currentDialogueTime = Math.max.apply (Math, dialogTimings.filter (funcția (v) retur v <= audio.currentTime)); if(previousDialogueTime !== currentDialogueTime)  previousDialogueTime = currentDialogueTime;   

    Acum, să folosim indexul currentDialogueTime în dialogueTimings pentru a afla care dialog din lista de dialoguri de transcriere trebuie să fie evidențiat. De exemplu, dacă currentDialogueTime este 11, apoi indicele de 11 în dialogueTimings matricea este 3 ceea ce înseamnă că trebuie să evidențiem dialogul la indexul 3 în dialoguri mulțime.

    funcția playTranscript () var currentDialogueTime = Math.max.apply (Math, dialogTimings.filter (funcția (v) retur v <= audio.currentTime)); if(previousDialogueTime !== currentDialogueTime)  previousDialogueTime = currentDialogueTime; var currentDialogue = dialogues[dialogueTimings.indexOf(currentDialogueTime)];   

    Odată ce am găsit dialogul pentru a evidenția (adică currentDialogue), ne defilam transcriptWrapper (dacă este scrollabil) până currentDialogue este de 50 de pixeli sub partea de sus a ambalajului, apoi aflăm dialogul evidențiat anterior și eliminăm clasa vorbitor din ea și adăugați-o currentDialogue.

    funcția playTranscript () var currentDialogueTime = Math.max.apply (Math, dialogTimings.filter (funcția (v) retur 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';   

    Elementul cu clasa vorbitor va afișa un text neclar.

    .vorbind -webkit-filter: blur (0px) filtru: estompare (0px); 

    Și asta este, iată codul HTML complet și codul JS.

    • Justin: Ceea ce încerc să spun este că apelul și decontarea sunt separate.
    • Alistair: Vrei să spui că comunicările și anunțurile interne și externe vor fi aduse în procesul de apel.
    • Justin: Corect, pentru că se conectează la recurs.
    • ...


    Demo

    Consultați demo-ul de mai jos pentru a obține o idee despre cum funcționează atunci când toate codurile sunt puse împreună.