Početna » šifriranje » Kako prikazati vremenski transkript uz igrao audio

    Kako prikazati vremenski transkript uz igrao audio

    Audio zapis je tekstualna verzija govora, korisna u pružanju korisnih materijala kao što su snimljena predavanja, seminari, itd. Uz zvučno izazvan. Također se koriste za vođenje tekstualnih zapisa o događajima kao što su razgovori, sudska saslušanja i sastanci.

    Zvuk govora na web-stranicama (kao u podcastima) obično je popraćen transkriptima, u korist onih koji su oštećeni sluha ili uopće ne mogu čuti. Oni mogu pogledati tekst "svira" uz zvuk. Najbolji način za stvaranje audio zapisa je ručno tumačenje i snimanje.

    U ovom postu, vidjet ćemo kako prikazati zvučni zapis uz zvuk. Za početak trebamo pripremiti transkript. Za ovaj je post preuzet uzorak zvuka i njegov transkript voxtab.

    Koristim HTML ul popisa za prikaz dijaloga na web-stranici:

    • Justin: Ono što pokušavam reći jest da su žalba i nagodba odvojeni.
    • Alistair: Mislite na to da će komunikacija i najave unutar i izvan sustava biti uvršteni u žalbeni postupak.
    • Justin: Da, jer se povezuju s žalbom.
    • ...

    Sljedeće, želim da se sav raspoloživi tekst zamuti i da poništite samo dijalog koji će odgovarati trenutnom govoru koji se reproducira audio zapisom. Dakle, za rasplinjavanje dijaloga koristim CSS filtar "blur".

    #transcript> li -webkit-filter: zamućenje (3px) filter: zamućenje (3px); tranzicija: sve .8s lakoća;…

    Za IE 10+ možete dodati text-shadow za stvaranje zamagljenog efekta. Ovaj kôd možete upotrijebiti da biste otkrili je li zamućenje CSS-a primijenjeno ili ne, te da biste učitali svoj stilski obrazac specifičan za IE. Kad je tekst nejasan, otišao sam naprijed i dodao neki stil u transkript.

     if (getComputedStyle (dijalozi [0]) webkitFilter === undefined && getComputedStyle (dijalozi [0]) filter === "none") var headEle = document.querySelector ('head'), linkEle = document.createElement ('veza'); linkEle.type = 'tekst / css'; linkEle.rel = 'stilova'; linkEle.href = 'ie.css'; headEle.appendChild (linkEle); 

    Sada dodajte zvuk na stranicu, s ovim.

     

    ontimeupdate događaj zvučni Element se ispaljuje svaki put kad se pojavi Trenutno vrijeme ažurira se, pa ćemo taj događaj upotrijebiti za provjeru trenutačnog trajanja zvuka i označiti odgovarajući dijalog u transkriptu. Prvo ćemo stvoriti neke globalne varijable koje će nam trebati.

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

    dialogueTimings je niz brojeva koji predstavljaju sekunde nakon početka svakog dijaloga u prijepisu. Prvi dijalog počinje u 0s, drugi u 4s, i tako dalje. previousDialogueTime će se koristiti za praćenje promjena u dijalogu.

    Idemo napokon na funkciju zakačenu ontimeupdate, koji se zove "playTranscript". Od playTranscript je ispaljen gotovo svake sekunde kada se reproducira zvuk, najprije moramo odrediti koji se dijalog trenutno reproducira. Pretpostavimo da je zvuk u 0:14, a zatim reproducira dijalog koji je započeo u 0:11 dialogueTimings ako je trenutno vrijeme 0:30 u zvuku, onda je to dijalog koji je započeo u 0:29.

    Stoga, da bismo saznali kada je započet trenutni dijalog, najprije filtriramo sva vremena u dialogueTimings niz koji je ispod trenutnog vremena zvuka. Ako je trenutno vrijeme 0:14, filtriramo sve brojeve. u nizu koji su ispod 14 (koji su 0, 4, 9 i 11) i saznajte maksimalnu br. od njih, što je 11 (dijalog je započeo u 0:11).

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

    Jednom currentDialogueTime izračunava se, provjeravamo je li isti kao previousDialogueTime(to jest ako se dijalog u zvuku promijenio ili ne), ako se ne podudara (to jest ako se dijalog promijenio), currentDialogueTime je dodijeljen previousDialogueTime.

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

    Sada upotrijebimo indeks currentDialogueTime u dialogueTimings da biste saznali koji dijalog u popisu dijaloga s transkriptima treba istaknuti. Na primjer, ako je currentDialogueTime je 11, zatim indeks od 11 u dialogueTimings niz je 3 što znači da moramo označiti dijalog na indeksu 3 u dijalozi red.

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

    Nakon što pronađemo dijalog koji označava (to je currentDialogue), pomičemo se transcriptWrapper (ako se može pomicati) do currentDialogue je 50px ispod vrha omotača, zatim otkrijemo prethodno istaknuti dijalog i uklonimo klasu govor iz njega i dodajte currentDialogue.

    funkcija playTranscript () var currentDialogueTime = Math.max.apply (Matematika, dialogTimings.filter (funkcija (v) povratak 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 s klasom govor će prikazati nebrižan tekst.

    .govoreći -webkit-filter: zamućenje (0px) filtar: zamućenje (0px); 

    I to je to, ovdje je puni kôd HTML i JS kod.

    • Justin: Ono što pokušavam reći jest da su žalba i nagodba odvojeni.
    • Alistair: Mislite na to da će komunikacija i najave unutar i izvan sustava biti uvršteni u žalbeni postupak.
    • Justin: Da, jer se povezuju s žalbom.
    • ...


    Demo

    Provjerite demo ispod da biste dobili ideju kako funkcionira kada se svi kodovi sastave.