Główna » Kodowanie » Jak wyświetlić zapis czasowy obok odtwarzanego dźwięku

    Jak wyświetlić zapis czasowy obok odtwarzanego dźwięku

    Transkrypcja audio to tekstowa wersja mowy, pomocna w dostarczaniu przydatnych materiałów, takich jak nagrane wykłady, seminaria itp. Do głośno kwestionowanych. Służą również do przechowywania tekstowych zapisów wydarzeń, takich jak wywiady, przesłuchania sądowe i spotkania.

    Dźwiękowi mowy na stronach internetowych (podobnie jak w podcastach) zazwyczaj towarzyszą stenogramy, z korzyścią dla osób niedosłyszących lub nie mogących w ogóle słyszeć. Mogą wyświetl tekst „grający” obok dźwięku. Najlepszym sposobem tworzenia transkryptu audio jest ręczna interpretacja i nagrywanie.

    W tym poście zobaczymy jak wyświetlać działający zapis audio obok dźwięku. Aby zacząć, musimy mieć gotowy transkrypt. W tym poście pobrałem przykładowy dźwięk i jego zapis voxtab.

    Używam HTML ul lista, aby wyświetlić dialogi na stronie internetowej jak poniżej:

    • Justin: Próbuję powiedzieć, że apelacja i ugoda są oddzielne.
    • Alistair: Oznacza to, że komunikacja i ogłoszenia wewnętrzne i zewnętrzne zostaną wprowadzone do procesu odwoławczego.
    • Justin: Racja, ponieważ łączą się z odwołaniem.

    Następnie chcę, aby cały dostępny tekst był zamazany i do odblokuj tylko dialog, który będzie pasował do bieżącej mowy odtwarzanej przez nagranie audio. Aby odblokować dialogi, używam filtru CSS „blur”.

    #transcript> li -webkit-filter: blur (3px) filter: blur (3px); przejście: wszystko .8s łatwe;…

    Dla IE 10+ możesz dodać cień tekstu stworzyć niewyraźny efekt. Możesz użyć tego kodu, aby wykryć, czy CSS został zastosowany, czy nie, i załadować arkusz stylów IE. Gdy tekst jest zamazany, poszedłem dalej i dodałem trochę stylu do transkryptu.

     if (getComputedStyle (dialogues [0]). webkitFilter === undefined && getComputedStyle (dialogues [0]). filter === "none") var headEle = document.querySelector ('head'), linkEle = document.createElement ('połączyć'); linkEle.type = 'text / css'; linkEle.rel = 'arkusz stylów'; linkEle.href = 'ie.css'; headEle.appendChild (linkEle); 

    Dodajmy teraz do strony dźwięk.

     

    The ontimeupdate wydarzenie audio element jest odpalany za każdym razem Obecny czas jest zaktualizowany, więc użyjemy tego zdarzenia, aby sprawdzić bieżący czas pracy audio i zaznaczyć odpowiedni dialog w transkrypcie. Najpierw stwórzmy zmienne globalne, których będziemy potrzebować.

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

    dialogTimings jest tablicą liczb reprezentujących sekundy, od których rozpoczyna się każdy dialog w transkrypcie. Pierwszy dialog rozpoczyna się od 0s, drugi od 4s i tak dalej. previousDialogueTime będzie używany do śledzenia zmian w dialogu.

    Przejdźmy wreszcie do funkcji powiązanej z ontimeupdate, który nazywa się „playTranscript”. Od playTranscript jest uruchamiany prawie co sekundę podczas odtwarzania dźwięku, musimy najpierw określić, który dialog jest aktualnie odtwarzany. Przypuśćmy, że dźwięk ma wartość 0:14, a następnie odtwarza dialog, który rozpoczął się o godzinie 0:11 (patrz dialogTimings tablica), jeśli aktualny czas wynosi 0:30 w dźwięku, to dialog rozpoczął się o godzinie 0:29.

    Dlatego, aby dowiedzieć się, kiedy rozpoczął się bieżący dialog, najpierw filtrujemy cały czas w dialogTimings tablica, która jest poniżej bieżącego czasu dźwięku. Jeśli bieżący czas wynosi 0:14, odfiltrowujemy wszystkie numery. w tablicy poniżej 14 (które są 0, 4, 9 i 11) i dowiedz się maksimum nie. z tych, które wynosi 11 (zatem dialog rozpoczął się o godzinie 0:11).

    funkcja playTranscript () var currentDialogueTime = Math.max.apply (Math, dialogueTimings.filter (function (v) return v <= audio.currentTime));  

    Kiedyś currentDialogueTime jest obliczany, sprawdzamy, czy jest taki sam jak previousDialogueTime(to znaczy, jeśli dialog w audio zmienił się lub nie), jeśli nie jest to mecz (jeśli dialog się zmienił), to currentDialogueTime jest przypisany do previousDialogueTime.

    funkcja playTranscript () var currentDialogueTime = Math.max.apply (Math, dialogueTimings.filter (function (v) return v <= audio.currentTime)); if(previousDialogueTime !== currentDialogueTime)  previousDialogueTime = currentDialogueTime;   

    Teraz użyjmy indeksu currentDialogueTime w dialogTimings tablica, aby dowiedzieć się, który dialog z listy dialogów transkrypcji musi zostać wyróżniony. Na przykład, jeśli currentDialogueTime wynosi 11, a następnie 11 w indeksie dialogTimings tablica to 3, co oznacza, że ​​musimy podświetlić dialog przy indeksie 3 w dialogi szyk.

    funkcja playTranscript () var currentDialogueTime = Math.max.apply (Math, dialogueTimings.filter (function (v) return v <= audio.currentTime)); if(previousDialogueTime !== currentDialogueTime)  previousDialogueTime = currentDialogueTime; var currentDialogue = dialogues[dialogueTimings.indexOf(currentDialogueTime)];   

    Po znalezieniu dialogu do podświetlenia (czyli currentDialogue), przewijamy transkrypcja (jeśli można przewijać) do currentDialogue jest 50px poniżej wierzchołka opakowania, a następnie dowiadujemy się o wcześniej podświetlonym dialogu i usuwamy klasę mówienie z niego i dodaj go do currentDialogue.

    funkcja playTranscript () var currentDialogueTime = Math.max.apply (Math, dialogueTimings.filter (function (v) return 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 klasą mówienie wyświetli niewyraźny tekst.

    .talking -webkit-filter: filtr blur (0px): blur (0px); 

    I to wszystko, oto pełny kod HTML i kod JS.

    • Justin: Próbuję powiedzieć, że apelacja i ugoda są oddzielne.
    • Alistair: Oznacza to, że komunikacja i ogłoszenia wewnętrzne i zewnętrzne zostaną wprowadzone do procesu odwoławczego.
    • Justin: Racja, ponieważ łączą się z odwołaniem.


    Próbny

    Zapoznaj się z poniższym demo, aby dowiedzieć się, jak to działa, gdy wszystkie kody są połączone.