Domača » Kodiranje » Kako prikazati časovno transkripcijo ob predvajani avdio

    Kako prikazati časovno transkripcijo ob predvajani avdio

    Zvočni zapis je besedilna različica govora, ki je koristna pri zagotavljanju uporabnih materialov, kot so posneta predavanja, seminarji itd. Uporabljajo se tudi za vodenje besedilnih zapisov dogodkov, kot so razgovori, sodne obravnave in sestanki.

    Zvočni zapis govora na spletnih straneh (kot v podcastih) je običajno opremljen s prepisi, v korist tistih, ki imajo težave s sluhom ali pa sploh ne morejo slišati. Oni lahko Oglejte si besedilo "predvajanje" ob zvoku. Najboljši način za ustvarjanje zvočnega zapisa je z ročno interpretacijo in snemanjem.

    Na tem mestu bomo videli kako prikazati tekoči zvočni zapis skupaj z zvokom. Za začetek moramo pripraviti prepis. Za to objavo sem prenesel vzorčni zvok in njegov prepis voxtab.

    Uporabljam HTML ul za prikaz dialogov na spletni strani, kot je spodaj:

    • Justin: Želim povedati, da sta pritožba in poravnava ločena.
    • Alistair: Mislite, da bodo v pritožbeni postopek vključene komunikacije in obvestila, notranja in zunanja.
    • Justin: Prav, ker se povezujejo s pritožbo.

    Nato želim, da se vse razpoložljivo besedilo zamegli in da Razbremenite samo dialog, ki bo ustrezal trenutnemu govoru, ki ga predvaja zvočni posnetek. Torej, da razveljavim dialoge, uporabljam CSS filter "zamegljenost".

    #transcript> li -webkit-filter: zameglitev (3px) filter: zamegljenost (3px); prehod: vse .8s lahek;…

    Za IE 10+ lahko dodate text-shadow ustvarite zamegljen učinek. S to kodo lahko odkrijete, ali je bila uporabljena nejasna vsebina CSS ali ne, in naložite svoj slog slogov IE. Ko je besedilo zamegljeno, sem šel naprej in dodal nekaj stila v prepis.

     if (getComputedStyle (dialogi [0]). webkitFilter === undefined && getComputedStyle (dialogi [0]) filter === "none") var headEle = document.querySelector ('head'), linkEle = document.createElement („povezava“); linkEle.type = 'text / css'; linkEle.rel = 'stylesheet'; linkEle.href = 'ie.css'; headEle.appendChild (linkEle); 

    Sedaj dodamo zvočni zapis na to stran.

     

    The ontimeupdate dogodka zvok element je odpuščen vsakič, ko je Trenutni čas je posodobljen, zato bomo ta dogodek uporabili za preverjanje trenutnega časa delovanja zvoka in označevanje ustreznega dialoga v prepisu. Najprej ustvarimo nekaj globalnih spremenljivk, ki jih bomo potrebovali.

    dialogueTimings = [0,4,9,11,18,24,29,31,44,45,47]; dialogues = document.querySelectorAll ('# transkript> li'); transcriptWrapper = document.querySelector ('# transcriptWrapper'); avdio = document.querySelector ("# audio"); previousDialogueTime = -1; 

    dialogTimings je niz številk, ki predstavljajo sekunde, ko se začne vsak dialog v prepisu. Prvi dialog se začne pri 0s, drugi pri 4s in tako naprej. previousDialogueTime bodo uporabljene za spremljanje sprememb v dialogu.

    Končno se premaknimo na funkcijo, ki je priklopljena ontimeupdate, ki se imenuje "playTranscript". Od playTranscript se sproži skoraj vsako sekundo predvajanja zvoka, moramo najprej ugotoviti, kateri dialog se trenutno predvaja. Recimo, da je zvok ob 0:14, potem pa se predvaja dialog, ki se je začel ob 0:11 (glej dialogTimings matrika), če je trenutni čas v avdio 0:30, potem je to dialog, ki se je začel ob 0:29.

    Zato, da bi ugotovili, kdaj se je začel trenutni dialog, najprej filtriramo vse čase v dialogTimings niz, ki je pod trenutnim časom zvoka. Če je trenutni čas 0:14, filtriramo vse nos. v matriki, ki so pod 14 (to so 0, 4, 9 in 11) in ugotovite največje število št. od teh, ki je 11 (tako se je dialog začel ob 0:11).

    funkcija playTranscript () var currentDialogueTime = Math.max.apply (matematika, dialogTimings.filter (funkcija (v) vrnitev v <= audio.currentTime));  

    Enkrat currentDialogueTime izračunamo, preverjamo, če je enako kot previousDialogueTime(če se je dialog v zvoku spremenil ali ne), če ni ujemanje (če se je dialog spremenil), currentDialogueTime je dodeljen previousDialogueTime.

    funkcija playTranscript () var currentDialogueTime = Math.max.apply (matematika, dialogTimings.filter (funkcija (v) vrnitev v <= audio.currentTime)); if(previousDialogueTime !== currentDialogueTime)  previousDialogueTime = currentDialogueTime;   

    Zdaj pa uporabimo indeks currentDialogueTime v dialogTimings da bi ugotovili, kateri dialog na seznamu prepisov mora biti poudarjen. Na primer, če je currentDialogueTime je 11, nato indeks 11 dialogTimings matrika je 3, kar pomeni, da moramo poudariti dialog v indeksu 3 v dialogi matrika.

    funkcija playTranscript () var currentDialogueTime = Math.max.apply (matematika, dialogTimings.filter (funkcija (v) vrnitev v <= audio.currentTime)); if(previousDialogueTime !== currentDialogueTime)  previousDialogueTime = currentDialogueTime; var currentDialogue = dialogues[dialogueTimings.indexOf(currentDialogueTime)];   

    Ko najdemo dialog, ki ga želite označiti (to je trenutni dialog), se pomikamo transcriptWrapper (če se lahko premaknete) do trenutni dialog pod vrhom ovojnice je 50px, nato pa ugotovimo prej označen dialog in odstranimo razred govoriti iz nje in jo dodajte trenutni dialog.

    funkcija playTranscript () var currentDialogueTime = Math.max.apply (matematika, dialogTimings.filter (funkcija (v) vrnitev 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';   

    Element z razredom govoriti prikaže nebledano besedilo.

    .speaking -webkit-filter: zamegljenost (0px) filter: zamegljenost (0px); 

    In to je to, tukaj je koda HTML in koda JS.

    • Justin: Želim povedati, da sta pritožba in poravnava ločena.
    • Alistair: Mislite, da bodo v pritožbeni postopek vključene komunikacije in obvestila, notranja in zunanja.
    • Justin: Prav, ker se povezujejo s pritožbo.


    Demo

    Oglejte si predstavitev spodaj, da dobite idejo, kako deluje, ko so vse kode skupaj.