Changeset 35403 for main


Ignore:
Timestamp:
2021-09-15T13:11:45+12:00 (3 years ago)
Author:
cstephen
Message:

Implement WebVTT downloading for transcriptions

Location:
main/trunk/model-interfaces-dev/atea/korero-maori-asr/src/components
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • main/trunk/model-interfaces-dev/atea/korero-maori-asr/src/components/TranscriptionItem.vue

    r35400 r35403  
    8383import { mapState } from "vuex";
    8484import { saveAs } from "file-saver"
    85 import TranscriptionItemEditor from "./TranscriptionItemEditor.vue"
     85import TranscriptionItemEditor, { getWords } from "./TranscriptionItemEditor.vue"
    8686import { TranscriptionViewModel } from "../main";
    8787import Util from "../js/Util";
     
    130130            const blob = new Blob([ JSON.stringify(toDownload, null, 4) ], { type: "application/json;charset=utf-8" });
    131131            saveAs(blob, fileName);
     132        },
     133        downloadAsWebvtt() {
     134            const fileName = buildDownloadableFileName(this.transcription.fileName, "vtt");
     135            const toDownload = buildWebvttFileContents(this.transcription);
     136
     137            const blob = new Blob([ toDownload ], { type: "text/vtt;charset=utf-8" });
     138            saveAs(blob, fileName);
    132139        }
    133140    }
     
    147154    return fileName;
    148155}
     156
     157/**
     158 * Builds a WebVTT file of the given transcription
     159 * @param {TranscriptionViewModel} transcription The transcription.
     160 * @returns {String} The WebVTT content.
     161 */
     162function buildWebvttFileContents(transcription) {
     163    let contents = "WEBVTT Transcription of " + transcription.fileName + "\n\n";
     164
     165    for (const word of getWords(transcription)) {
     166        contents += getTime(word.startTime) + " --> " + getTime(word.endTime) + "\n";
     167        contents += "- " + word.word + "\n\n";
     168    }
     169
     170    return contents;
     171
     172    function getTime(seconds) {
     173        const hours = (seconds / 3600) | 0;
     174        const minutes = ((seconds - (hours * 60)) / 60) | 0;
     175        const actualSeconds = seconds - (minutes * 60);
     176
     177        let result = hours.toLocaleString("en-US", { maximumFractionDigits: 0, minimumIntegerDigits: 2 });
     178        result += ":" + minutes.toLocaleString("en-US", { maximumFractionDigits: 0, minimumIntegerDigits: 2 });
     179        result += ":" + actualSeconds.toLocaleString("en-US", { minimumFractionDigits: 3, maximumFractionDigis: 3, minimumIntegerDigits: 2 });
     180
     181        return result;
     182    }
     183}
    149184</script>
  • main/trunk/model-interfaces-dev/atea/korero-maori-asr/src/components/TranscriptionItemEditor.vue

    r35397 r35403  
    8282import Util from "../js/Util";
    8383
    84 class Word {
     84export class Word {
    8585    /**
    8686     * Initialises a new instance of the Word class.
     
    257257 * @returns {Word[]}
    258258 */
    259 function getWords(transcription) {
     259export function getWords(transcription) {
    260260    /** @type {Word[]} */
    261261    const words = [];
Note: See TracChangeset for help on using the changeset viewer.