Anasayfa » Kodlama » Çalınan Sesin Yanında Zamanlanmış Konuşma Metnini Görüntüleme

    Çalınan Sesin Yanında Zamanlanmış Konuşma Metnini Görüntüleme

    Ses transkript, konuşmanın metin versiyonudur, sesli olarak okunan derslere, seminerlere vb. Yararlı materyaller sağlamada yardımcı olur. Ayrıca görüşmeler, mahkeme duruşmaları ve toplantılar gibi olayların metinsel kayıtlarını tutmak için kullanılırlar..

    Web sayfalarındaki (podcast'lerde olduğu gibi) konuşma seslerine, tipik olarak işitme engelliler için duyulan veya hiç duymayanların yararına transkriptler eşlik eder. Yapabilirler Sesin yanında "çalma" metnini görüntüleyin. Ses transkripti oluşturmanın en iyi yolu manuel yorumlama ve kaydetmedir..

    Bu yayında göreceğiz Sesin yanında çalışan bir ses transkriptinin nasıl gösterileceği. Başlamak için transkript hazır olmalı. Bu gönderi için örnek bir ses dosyası ve onun transkripsiyonunu indirdim. voxtab.

    HTML kullanıyorum ul aşağıdaki gibi bir web sayfasında iletişim kutularını görüntülemek için bir liste:

    • Justin: Söylemeye çalıştığım, temyiz ve çözümün ayrı olduğu..
    • Alistair: İç ve dış iletişim ve duyuruların temyiz sürecine sokulacağını mı söylüyorsunuz?.
    • Justin: Doğru, çünkü temyize bağlandılar.
    • ...

    Daha sonra, mevcut tüm metnin bulanıklaştırılmasını ve sadece ses kaydı tarafından çalınmakta olan konuşmaya uygun olacak diyalogu kaldır. Bu yüzden diyalogları silmek için CSS filtresini "blur" olarak kullanıyorum..

    #transcript> li -webkit-filter: blur (3px) filtresi: blur (3px); geçiş: tüm .8s kolaylığı;…

    IE 10+ için ekleyebilirsiniz Metin gölgesi bulanık bir efekt oluşturmak için. Bu kodu CSS bulanıklığının uygulanıp uygulanmadığını tespit etmek ve IE'ye özgü stil sayfanızı yüklemek için kullanabilirsiniz. Metin bulanıklaştığında, devam ettim ve yazıya bir stil ekledim.

     if (getComputedStyle ([0] iletişim kutusu)). webkitFilter === undefined && getComputedStyle (iletişim [0]) .tr === "none") var headEle = document.querySelector ('head'), linkEle = document.createElement ( 'bağlantı'); linkEle.type = 'text / css'; linkEle.rel = 'stylesheet'; linkEle.href = 'ie.css'; headEle.appendChild (linkEle); 

    Şimdi, hadi sayfaya ses ekleyelim..

     

    ontimeupdate olayı ses element her seferinde ateşlenir şimdiki zaman güncellendiğinden, bu olayı sesin geçerli çalışma zamanını kontrol etmek ve transkriptteki ilgili diyalogu vurgulamak için kullanacağız. İlk önce ihtiyaç duyacağımız bazı küresel değişkenler oluşturalım.

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

    dialogueTimings transkriptteki her diyaloğun başladığı anları temsil eden bir sayı dizisidir. İlk diyalog 0'larda, ikincisi 4s'de vb. Başlar.. previousDialogueTime diyalog değişikliklerini izlemek için kullanılacak.

    Sonunda bağladığımız işleve geçelim ontimeupdate, "playTranscript" olarak adlandırılır. Dan beri playTranscript Sesin çaldığı hemen her saniyede bir ateşlenir, ilk önce hangi diyaloğun yürütülmekte olduğunu belirlememiz gerekir. Sesin 0: 14'te olduğunu varsayalım, daha sonra 0: 11'de başlayan diyaloğu çalıyorsa (bkz. dialogueTimings dizi), o andaki saat 0:30 ise, o zaman saat 0: 29'da başlayan diyalogdur..

    Dolayısıyla, mevcut diyaloğun ne zaman başladığını bulmak için önce dialogueTimings sesin geçerli zamanının altında olan dizi. Eğer şimdiki saat 0:14 ise, tüm noktaları filtrelendiriyoruz. 14'ün altındaki dizide (0, 4, 9 ve 11'dir) ve maksimum sayıyı bulun. bunlardan 11'i (böylece diyalog 0: 11'de başladı).

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

    Bir kere currentDialogueTime hesaplanır, aynı olup olmadığını kontrol ederiz. previousDialogueTime(eğer sesteki diyalog değişmişse veya değişmediyse), eşleşme değilse (diyalog değişmişse), currentDialogueTime atandı previousDialogueTime.

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

    Şimdi dizini kullanalım currentDialogueTime içinde dialogueTimings transkript diyalogları listesindeki hangi diyaloğun vurgulanması gerektiğini bulmak için dizi. Örneğin, eğer currentDialogueTime 11’dir, sonra dialogueTimings dizi 3'tür, bu da dizinde 3. dizindeki diyalogu vurgulamamız gerektiği anlamına gelir. diyaloglar dizi.

    function 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)];   

    Bir kez vurgulamak için diyalog bulduktan sonra (bu currentDialogue), kaydırıyoruz transcriptWrapper (kaydırılabilir ise) currentDialogue ambalajın üst kısmının 50 piksel altında, daha önce vurgulanan diyalogu bulup sınıfı kaldırdık konuşuyorum ondan ekleyin ve currentDialogue.

    function 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';   

    Sınıf ile eleman konuşuyorum bulanık metin gösterecektir.

    .konuşan -webkit-filter: blur (0px) filtresi: blur (0px); 

    İşte bu, işte tam kod HTML ve JS kodu.

    • Justin: Söylemeye çalıştığım, temyiz ve çözümün ayrı olduğu..
    • Alistair: İç ve dış iletişim ve duyuruların temyiz sürecine sokulacağını mı söylüyorsunuz.
    • Justin: Doğru, çünkü temyize bağlandılar.
    • ...


    gösteri

    Tüm kodlar bir araya getirildiğinde nasıl çalıştığı hakkında bir fikir edinmek için aşağıdaki demoyu inceleyin.