{"id":25614,"date":"2016-02-25T23:01:23","date_gmt":"2016-02-25T15:01:23","guid":{"rendered":"https:\/\/www.hongkiat.com\/blog\/?p=25614"},"modified":"2017-11-22T23:23:36","modified_gmt":"2017-11-22T15:23:36","slug":"display-audio-transcript","status":"publish","type":"post","link":"https:\/\/www.hongkiat.com\/blog\/display-audio-transcript\/","title":{"rendered":"How to Display Timed Transcript Alongside Played Audio"},"content":{"rendered":"<p>Audio transcript is the text version of speech, helpful in providing useful materials like <a href=\"https:\/\/www.hongkiat.com\/blog\/web-designer-podcast\/\">recorded lectures<\/a>, seminars, etc. to the audibly challenged. They\u2019re also used to keep textual records of events like interviews, court hearings and meetings.<\/p>\n<p>Speech audio in webpages (like in <a href=\"https:\/\/www.hongkiat.com\/blog\/web-dev-podcasts\/\">podcasts<\/a>) are typically accompanied with transcripts, for the benefit of those who are hearing impaired or not able to hear at all. They can <strong>view the text \"playing\" alongside the audio<\/strong>. The best way to create an audio transcript is by means of manual interpretation and recording.<\/p>\n<p>In this post, we\u2019re going to see <strong>how to display a running audio transcript alongside the audio<\/strong>. To get started we need to have the transcript ready. For this post, I\u2019ve downloaded a sample audio and its transcript from <em><a href=\"https:\/\/www.voxtab.com\/samples-style.htm\">voxtab<\/a><\/em>.<\/p>\n<p class=\"note\"><strong>Read more: <\/strong><a href=\"https:\/\/www.hongkiat.com\/blog\/audio-production-for-podcasters\/\">Beginner\u2019s Guide to Setting Up Your Own Podcasts<\/a><\/p>\n<p>I use HTML <code>ul<\/code> list to display the dialogues on a webpage like below:<\/p>\n<pre>&lt;div id=\"transcriptWrapper\"&gt;\r\n    &lt;ul id=\"transcript\"&gt;\r\n        &lt;li class=\"speaker1\"&gt;&lt;strong class=\"speakerName\"&gt;Justin&lt;\/strong&gt;: What I am trying to say is that the appeal and the settlement are separate.&lt;\/li&gt;\r\n        &lt;li class=\"speaker2\"&gt;&lt;strong class=\"speakerName\"&gt;Alistair&lt;\/strong&gt;: You mean that communications and announcements internal and external would be brought into the appeal process.&lt;\/li&gt;\r\n        &lt;li class=\"speaker1\"&gt;&lt;strong class=\"speakerName\"&gt;Justin&lt;\/strong&gt;: Right, because they connect to the appeal.&lt;\/li&gt;\r\n        ...\r\n    &lt;\/ul&gt;\r\n&lt;\/div&gt;\r\n<\/pre>\n<p>Next, I want all the available text to be blurred and to <strong>unblur only the dialogue that will match the current speech being played by the audio recording<\/strong>. So, to unblur the dialogues I use the CSS filter \"blur\".<\/p>\n<pre>#transcript &gt; li{\r\n     -webkit-filter: blur(3px)\r\n    filter: blur(3px);\r\n    transition: all .8s ease;\r\n    ...\r\n}<\/pre>\n<p>For IE 10+ you can add <code>text-shadow<\/code> to create a blurred effect. You can use this code to detect whether CSS blur has been applied or not, and to load your IE specific stylesheet. Once the text is blurred, I went ahead and added some style to the transcript.<\/p>\n<pre>\r\nif( getComputedStyle(dialogues[0]).webkitFilter === undefined && getComputedStyle(dialogues[0]).filter === \"none\"){\r\n    var headEle = document.querySelector('head'),\r\n      linkEle = document.createElement('link');\r\n      linkEle.type = 'text\/css';\r\n      linkEle.rel = 'stylesheet';\r\n      linkEle.href = 'ie.css';\r\n      headEle.appendChild(linkEle);\r\n}<\/pre>\n<p>Now, let\u2019s add the audio to the page, with this.<\/p>\n<pre>&lt;audio id=\"audio\" ontimeupdate=\"playTranscript()\" controls&gt;\r\n    &lt;source src=\"sample.mp3\" type=\"audio\/mpeg\"&gt;\r\n    Your browser does not support the audio element.\r\n&lt;\/audio&gt; \r\n<\/pre>\n<p>The <code>ontimeupdate<\/code> event of the <code>audio<\/code> element is fired every time its <code>currentTime<\/code> is updated, so we\u2019ll use that event to check the current running time of the audio and highlight the corresponding dialogue in the transcript. Let\u2019s first create some global variables we\u2019ll be needing.<\/p>\n<pre>dialogueTimings = [0,4,9,11,18,24,29,31,44,45,47];\r\ndialogues = document.querySelectorAll('#transcript&gt;li');\r\ntranscriptWrapper = document.querySelector('#transcriptWrapper');\r\naudio = document.querySelector('#audio');\r\npreviousDialogueTime = -1;\r\n<\/pre>\n<p><code>dialogueTimings<\/code> is an array of numbers representing the seconds when each dialogue in the transcript begins. The first dialogue starts at 0s, second at 4s, and so on. <code>previousDialogueTime<\/code> will be used to track dialogue changes.<\/p>\n<p>Let\u2019s finally move to the function hooked to <code>ontimeupdate<\/code>, which is named \"playTranscript\". Since <code>playTranscript<\/code> is fired almost every second the audio is playing, we first need to identify which dialogue is currently being played. Suppose the audio is at 0:14, then it\u2019s playing the dialogue that started at 0:11 (refer the <code>dialogueTimings<\/code> array), if the current time is 0:30 in the audio then it\u2019s the dialogue that started at 0:29.<\/p>\n<p>Hence, to find out when the current dialogue begun, we first filter all the times in the <code>dialogueTimings<\/code> array which are below the current time of the audio. If the current time is 0:14 we filter out the all the nos. in the array that are below 14 (which are 0, 4, 9 and 11) and find out the maximum no. out of those, which is 11 (thus the dialogue started at 0:11).<\/p>\n<pre>function playTranscript(){\r\n    var currentDialogueTime = Math.max.apply(Math, dialogueTimings.filter(function(v){return v &lt;= audio.currentTime}));\r\n}\r\n<\/pre>\n<p>Once the <code>currentDialogueTime<\/code> is calculated, we check if it\u2019s the same as the <code>previousDialogueTime<\/code>(that is if the dialogue in the audio has changed or not), if it\u2019s not a match (that is if the dialogue has changed), then <code>currentDialogueTime<\/code> is assigned to <code>previousDialogueTime<\/code>.<\/p>\n<pre>function playTranscript(){\r\n    var currentDialogueTime = Math.max.apply(Math, dialogueTimings.filter(function(v){return v &lt;= audio.currentTime}));\r\n\r\n    if(previousDialogueTime !== currentDialogueTime) {\r\n        previousDialogueTime = currentDialogueTime;\r\n    }\r\n}\r\n<\/pre>\n<p>Now let\u2019s use the index of the <code>currentDialogueTime<\/code> in the <code>dialogueTimings<\/code> array to find out which dialogue in the list of transcript dialogues needs to be highlighted. For example, if the <code>currentDialogueTime<\/code> is 11, then index of 11 in the <code>dialogueTimings<\/code> array is 3 which means we have to highlight the dialogue at  index 3  in the <code>dialogues<\/code> array.<\/p>\n<pre>function playTranscript(){\r\n    var currentDialogueTime = Math.max.apply(Math, dialogueTimings.filter(function(v){return v &lt;= audio.currentTime}));\r\n\r\n    if(previousDialogueTime !== currentDialogueTime) {\r\n        previousDialogueTime = currentDialogueTime;\r\n        var currentDialogue = dialogues[dialogueTimings.indexOf(currentDialogueTime)];\r\n    }\r\n}\r\n<\/pre>\n<p>Once we\u2019ve found the dialogue to highlight (that is the <code>currentDialogue<\/code>), we scroll <code>transcriptWrapper<\/code> (if scrollable) till <code>currentDialogue<\/code> is 50px below the wrapper\u2019s top, then we find out the previously highlighted dialogue and remove the class <code>speaking<\/code> from it and add it to <code>currentDialogue<\/code>.<\/p>\n<pre>function playTranscript(){\r\n    var currentDialogueTime = Math.max.apply(Math, dialogueTimings.filter(function(v){return v &lt;= audio.currentTime}));\r\n\r\n    if(previousDialogueTime !== currentDialogueTime) {\r\n        previousDialogueTime = currentDialogueTime;\r\n        var currentDialogue = dialogues[dialogueTimings.indexOf(currentDialogueTime)];\r\n        transcriptWrapper.scrollTop  = currentDialogue.offsetTop - 50;  \r\n        var previousDialogue = document.getElementsByClassName('speaking')[0];\r\n        if(previousDialogue !== undefined)\r\n            previousDialogue.className = previousDialogue.className.replace('speaking','');\r\n        currentDialogue.className +=' speaking';\r\n    }\r\n}\r\n<\/pre>\n<p>The element with class <code>speaking<\/code> will display unblurred text.<\/p>\n<pre>.speaking{\r\n  -webkit-filter: blur(0px)\r\n  filter:blur(0px);\r\n}<\/pre>\n<p>And that\u2019s it, here\u2019s the full code HTML and JS code.<\/p>\n<pre>&lt;div id=\"transcriptWrapper\"&gt;\r\n    &lt;ul id=\"transcript\"&gt;\r\n        &lt;li class=\"speaker1\"&gt;&lt;strong class=\"speakerName\"&gt;Justin&lt;\/strong&gt;: What I am trying to say is that the appeal and the settlement are separate.&lt;\/li&gt;\r\n        &lt;li class=\"speaker2\"&gt;&lt;strong class=\"speakerName\"&gt;Alistair&lt;\/strong&gt;: You mean that communications and announcements internal and external would be brought into the appeal process.&lt;\/li&gt;\r\n        &lt;li class=\"speaker1\"&gt;&lt;strong class=\"speakerName\"&gt;Justin&lt;\/strong&gt;: Right, because they connect to the appeal.&lt;\/li&gt;\r\n        ...\r\n    &lt;\/ul&gt;\r\n&lt;\/div&gt;\r\n\r\n&lt;br&gt;\r\n\r\n&lt;audio id=\"audio\" ontimeupdate=\"playTranscript()\" controls&gt;\r\n    &lt;source src=\"sample.mp3\" type=\"audio\/mpeg\"&gt;\r\n    Your browser does not support the audio element.\r\n&lt;\/audio&gt;\r\n\r\n&lt;br&gt;\r\n\r\n&lt;script&gt;\r\ndialogueTimings = [0,4,9,11,18,24,29,31,44,45,47];\r\ndialogues = document.querySelectorAll('#transcript&gt;li');\r\ntranscriptWrapper = document.querySelector('#transcriptWrapper');\r\naudio = document.querySelector('#audio');\r\npreviousDialogueTime = -1;\r\n\r\nfunction playTranscript(){\r\n    var currentDialogueTime = Math.max.apply(Math, dialogueTimings.filter(function(v){return v &lt;= audio.currentTime}));\r\n\r\n    if(previousDialogueTime !== currentDialogueTime) {\r\n        previousDialogueTime = currentDialogueTime;\r\n        var currentDialogue = dialogues[dialogueTimings.indexOf(currentDialogueTime)];\r\n        transcriptWrapper.scrollTop  = currentDialogue.offsetTop - 50;  \r\n        var previousDialogue = document.getElementsByClassName('speaking')[0];\r\n        if(previousDialogue !== undefined)\r\n            previousDialogue.className = previousDialogue.className.replace('speaking','');\r\n        currentDialogue.className +=' speaking';\r\n    }\r\n}\r\n&lt;\/script&gt;\r\n<\/pre>\n<h2>Demo<\/h2>\n<p>Check out the demo below to get an idea how it works when all codes are put together.<\/p>\n<p><iframe height=\"600\" scrolling=\"no\" src=\"https:\/\/codepen.io\/tfirdaus\/embed\/wMOXGP\/?height=600&theme-id=12825&default-tab=result\" frameborder=\"no\" allowtransparency=\"true\" allowfullscreen=\"true\" style=\"width: 100%;\"><\/iframe><\/p>","protected":false},"excerpt":{"rendered":"<p>Audio transcript is the text version of speech, helpful in providing useful materials like recorded lectures, seminars, etc. to the audibly challenged. They\u2019re also used to keep textual records of events like interviews, court hearings and meetings. Speech audio in webpages (like in podcasts) are typically accompanied with transcripts, for the benefit of those who&hellip;<\/p>\n","protected":false},"author":145,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_feature_clip_id":0,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_post_was_ever_published":false},"categories":[3392],"tags":[2336],"topic":[4520],"class_list":["entry-content","is-maxi"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v22.8 (Yoast SEO v27.8) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>How to Display Timed Transcript Alongside Played Audio - Hongkiat<\/title>\n<meta name=\"description\" content=\"Audio transcript is the text version of speech, helpful in providing useful materials like recorded lectures, seminars, etc. to the audibly challenged.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.hongkiat.com\/blog\/display-audio-transcript\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"How to Display Timed Transcript Alongside Played Audio\" \/>\n<meta property=\"og:description\" content=\"Audio transcript is the text version of speech, helpful in providing useful materials like recorded lectures, seminars, etc. to the audibly challenged.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.hongkiat.com\/blog\/display-audio-transcript\/\" \/>\n<meta property=\"og:site_name\" content=\"Hongkiat\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/hongkiatcom\" \/>\n<meta property=\"article:published_time\" content=\"2016-02-25T15:01:23+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2017-11-22T15:23:36+00:00\" \/>\n<meta name=\"author\" content=\"Preethi Ranjit\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@hongkiat\" \/>\n<meta name=\"twitter:site\" content=\"@hongkiat\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Preethi Ranjit\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"6 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.hongkiat.com\\\/blog\\\/display-audio-transcript\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.hongkiat.com\\\/blog\\\/display-audio-transcript\\\/\"},\"author\":{\"name\":\"Preethi Ranjit\",\"@id\":\"https:\\\/\\\/www.hongkiat.com\\\/blog\\\/#\\\/schema\\\/person\\\/e981676afae36d1ff5feb75094950ab3\"},\"headline\":\"How to Display Timed Transcript Alongside Played Audio\",\"datePublished\":\"2016-02-25T15:01:23+00:00\",\"dateModified\":\"2017-11-22T15:23:36+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.hongkiat.com\\\/blog\\\/display-audio-transcript\\\/\"},\"wordCount\":653,\"commentCount\":5,\"publisher\":{\"@id\":\"https:\\\/\\\/www.hongkiat.com\\\/blog\\\/#organization\"},\"keywords\":[\"podcast\"],\"articleSection\":[\"Coding\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.hongkiat.com\\\/blog\\\/display-audio-transcript\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.hongkiat.com\\\/blog\\\/display-audio-transcript\\\/\",\"url\":\"https:\\\/\\\/www.hongkiat.com\\\/blog\\\/display-audio-transcript\\\/\",\"name\":\"How to Display Timed Transcript Alongside Played Audio - Hongkiat\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.hongkiat.com\\\/blog\\\/#website\"},\"datePublished\":\"2016-02-25T15:01:23+00:00\",\"dateModified\":\"2017-11-22T15:23:36+00:00\",\"description\":\"Audio transcript is the text version of speech, helpful in providing useful materials like recorded lectures, seminars, etc. to the audibly challenged.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.hongkiat.com\\\/blog\\\/display-audio-transcript\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.hongkiat.com\\\/blog\\\/display-audio-transcript\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.hongkiat.com\\\/blog\\\/display-audio-transcript\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.hongkiat.com\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"How to Display Timed Transcript Alongside Played Audio\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.hongkiat.com\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/www.hongkiat.com\\\/blog\\\/\",\"name\":\"Hongkiat\",\"description\":\"Tech and Design Tips\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.hongkiat.com\\\/blog\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.hongkiat.com\\\/blog\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/www.hongkiat.com\\\/blog\\\/#organization\",\"name\":\"Hongkiat.com\",\"url\":\"https:\\\/\\\/www.hongkiat.com\\\/blog\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.hongkiat.com\\\/blog\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/www.hongkiat.com\\\/blog\\\/wp-content\\\/uploads\\\/hkdc-logo-rect-yoast.jpg\",\"contentUrl\":\"https:\\\/\\\/www.hongkiat.com\\\/blog\\\/wp-content\\\/uploads\\\/hkdc-logo-rect-yoast.jpg\",\"width\":1200,\"height\":799,\"caption\":\"Hongkiat.com\"},\"image\":{\"@id\":\"https:\\\/\\\/www.hongkiat.com\\\/blog\\\/#\\\/schema\\\/logo\\\/image\\\/\"},\"sameAs\":[\"https:\\\/\\\/www.facebook.com\\\/hongkiatcom\",\"https:\\\/\\\/x.com\\\/hongkiat\",\"https:\\\/\\\/www.pinterest.com\\\/hongkiat\\\/\"]},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/www.hongkiat.com\\\/blog\\\/#\\\/schema\\\/person\\\/e981676afae36d1ff5feb75094950ab3\",\"name\":\"Preethi Ranjit\",\"description\":\"A .NET developer with a JavaScript background, Preethi is expert in front-end coding, JavaScript, HTML, and CSS.\",\"url\":\"https:\\\/\\\/www.hongkiat.com\\\/blog\\\/author\\\/preethi\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"How to Display Timed Transcript Alongside Played Audio - Hongkiat","description":"Audio transcript is the text version of speech, helpful in providing useful materials like recorded lectures, seminars, etc. to the audibly challenged.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.hongkiat.com\/blog\/display-audio-transcript\/","og_locale":"en_US","og_type":"article","og_title":"How to Display Timed Transcript Alongside Played Audio","og_description":"Audio transcript is the text version of speech, helpful in providing useful materials like recorded lectures, seminars, etc. to the audibly challenged.","og_url":"https:\/\/www.hongkiat.com\/blog\/display-audio-transcript\/","og_site_name":"Hongkiat","article_publisher":"https:\/\/www.facebook.com\/hongkiatcom","article_published_time":"2016-02-25T15:01:23+00:00","article_modified_time":"2017-11-22T15:23:36+00:00","author":"Preethi Ranjit","twitter_card":"summary_large_image","twitter_creator":"@hongkiat","twitter_site":"@hongkiat","twitter_misc":{"Written by":"Preethi Ranjit","Est. reading time":"6 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.hongkiat.com\/blog\/display-audio-transcript\/#article","isPartOf":{"@id":"https:\/\/www.hongkiat.com\/blog\/display-audio-transcript\/"},"author":{"name":"Preethi Ranjit","@id":"https:\/\/www.hongkiat.com\/blog\/#\/schema\/person\/e981676afae36d1ff5feb75094950ab3"},"headline":"How to Display Timed Transcript Alongside Played Audio","datePublished":"2016-02-25T15:01:23+00:00","dateModified":"2017-11-22T15:23:36+00:00","mainEntityOfPage":{"@id":"https:\/\/www.hongkiat.com\/blog\/display-audio-transcript\/"},"wordCount":653,"commentCount":5,"publisher":{"@id":"https:\/\/www.hongkiat.com\/blog\/#organization"},"keywords":["podcast"],"articleSection":["Coding"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.hongkiat.com\/blog\/display-audio-transcript\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.hongkiat.com\/blog\/display-audio-transcript\/","url":"https:\/\/www.hongkiat.com\/blog\/display-audio-transcript\/","name":"How to Display Timed Transcript Alongside Played Audio - Hongkiat","isPartOf":{"@id":"https:\/\/www.hongkiat.com\/blog\/#website"},"datePublished":"2016-02-25T15:01:23+00:00","dateModified":"2017-11-22T15:23:36+00:00","description":"Audio transcript is the text version of speech, helpful in providing useful materials like recorded lectures, seminars, etc. to the audibly challenged.","breadcrumb":{"@id":"https:\/\/www.hongkiat.com\/blog\/display-audio-transcript\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.hongkiat.com\/blog\/display-audio-transcript\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.hongkiat.com\/blog\/display-audio-transcript\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.hongkiat.com\/blog\/"},{"@type":"ListItem","position":2,"name":"How to Display Timed Transcript Alongside Played Audio"}]},{"@type":"WebSite","@id":"https:\/\/www.hongkiat.com\/blog\/#website","url":"https:\/\/www.hongkiat.com\/blog\/","name":"Hongkiat","description":"Tech and Design Tips","publisher":{"@id":"https:\/\/www.hongkiat.com\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.hongkiat.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/www.hongkiat.com\/blog\/#organization","name":"Hongkiat.com","url":"https:\/\/www.hongkiat.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.hongkiat.com\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/www.hongkiat.com\/blog\/wp-content\/uploads\/hkdc-logo-rect-yoast.jpg","contentUrl":"https:\/\/www.hongkiat.com\/blog\/wp-content\/uploads\/hkdc-logo-rect-yoast.jpg","width":1200,"height":799,"caption":"Hongkiat.com"},"image":{"@id":"https:\/\/www.hongkiat.com\/blog\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/hongkiatcom","https:\/\/x.com\/hongkiat","https:\/\/www.pinterest.com\/hongkiat\/"]},{"@type":"Person","@id":"https:\/\/www.hongkiat.com\/blog\/#\/schema\/person\/e981676afae36d1ff5feb75094950ab3","name":"Preethi Ranjit","description":"A .NET developer with a JavaScript background, Preethi is expert in front-end coding, JavaScript, HTML, and CSS.","url":"https:\/\/www.hongkiat.com\/blog\/author\/preethi\/"}]}},"jetpack_featured_media_url":"https:\/\/","jetpack_shortlink":"https:\/\/wp.me\/p4uxU-6F8","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/www.hongkiat.com\/blog\/wp-json\/wp\/v2\/posts\/25614","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.hongkiat.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.hongkiat.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.hongkiat.com\/blog\/wp-json\/wp\/v2\/users\/145"}],"replies":[{"embeddable":true,"href":"https:\/\/www.hongkiat.com\/blog\/wp-json\/wp\/v2\/comments?post=25614"}],"version-history":[{"count":3,"href":"https:\/\/www.hongkiat.com\/blog\/wp-json\/wp\/v2\/posts\/25614\/revisions"}],"predecessor-version":[{"id":41659,"href":"https:\/\/www.hongkiat.com\/blog\/wp-json\/wp\/v2\/posts\/25614\/revisions\/41659"}],"wp:attachment":[{"href":"https:\/\/www.hongkiat.com\/blog\/wp-json\/wp\/v2\/media?parent=25614"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.hongkiat.com\/blog\/wp-json\/wp\/v2\/categories?post=25614"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.hongkiat.com\/blog\/wp-json\/wp\/v2\/tags?post=25614"},{"taxonomy":"topic","embeddable":true,"href":"https:\/\/www.hongkiat.com\/blog\/wp-json\/wp\/v2\/topic?post=25614"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}