-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathtranscript.js
89 lines (64 loc) · 1.95 KB
/
transcript.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
const fs = require('fs')
const { setTimer, getTimer } = require('../lib/chronos')
const { transcriptBuffer, loadModel, freeModel } = require('../stt')
const DEBUG_WORKER = false
/**
* transcript a Buffer, using a specified Model and Scorer
*
* @function
* @sync
*
* @param {String} modelPath
* @param {String} scorerPath
* @param {Buffer} audioBuffer
* @return {String} transcript result
*
*/
function transcriptNoThread(modelPath, scorerPath, audioBuffer) {
let result
const loadModelTime = setTimer()
//
// load Coqui STT model
//
const model = loadModel(modelPath, scorerPath)
if (DEBUG_WORKER)
console.log(`worker: load model elapsed: ${getTimer(loadModelTime)}ms`)
//
// transcript the audio buffer
//
try {
const transcriptBufferTime = setTimer()
result = transcriptBuffer(audioBuffer, model)
if (DEBUG_WORKER)
console.log(`worker: transcriptBuffer elapsed: ${getTimer(transcriptBufferTime)}ms`)
}
catch (error) {
throw `transcriptBuffer: ${error}`
}
//
// free the model
//
const freeModelTime = setTimer()
freeModel(model)
if (DEBUG_WORKER)
console.log(`worker: free model elapsed: ${getTimer(freeModelTime)}ms`)
if (DEBUG_WORKER)
console.log(`worker: total elapsed: ${getTimer('worker')}ms`)
return result
}
function main() {
const modelPath = '../models/coqui-stt-0.9.3-models.pbmm'
const scorerPath = '../models/coqui-stt-0.9.3-models.scorer'
const sourceFile = '../audio/2830-3980-0043.wav'
//
// load an audio file into a Buffer
//
// https://nodejs.org/api/fs.html#fs_file_system_flags
const audioBuffer = fs.readFileSync(sourceFile, { flag: 'rs+' } )
const transcriptTaskTime = setTimer()
const result = transcriptNoThread(modelPath, scorerPath, audioBuffer)
console.log(`transcript: ${result} (${getTimer(transcriptTaskTime)}ms)`)
}
if (require.main === module)
main()
module.exports = { transcriptNoThread }