UNPKG

sherpa-onnx-node

Version:

Speech-to-text, text-to-speech, speaker diarization, and speech enhancement using Next-gen Kaldi without internet connection

131 lines (115 loc) 3.05 kB
/** @typedef {import('./types').OnlineStreamObject} OnlineStreamObject */ /** @typedef {import('./types').OnlineRecognizerHandle} OnlineRecognizerHandle */ /** @typedef {import('./types').OnlineStreamHandle} OnlineStreamHandle */ /** @typedef {import('./types').DisplayHandle} DisplayHandle */ /** @typedef {import('./types').DisplayObject} DisplayObject */ /** @typedef {import('./types').OnlineRecognizerConfig} OnlineRecognizerConfig */ /** @typedef {import('./types').Waveform} Waveform */ /** @typedef {import('./types').OnlineRecognizerResult} OnlineRecognizerResult */ const addon = require('./addon.js'); /** * Display helper for printing recognized words. */ class Display { /** * @param {number} maxWordPerline */ constructor(maxWordPerline) { this.handle = addon.createDisplay(maxWordPerline); } /** * Print text to display. * @param {number} idx * @param {string} text */ print(idx, text) { addon.print(this.handle, idx, text) } } /** * OnlineStream holds an active online stream handle. */ class OnlineStream { /** * @param {OnlineStreamObject|Object} handle - object with `handle` property */ constructor(handle) { this.handle = handle; } /** * Accept waveform data * @param {Waveform} obj - { samples: Float32Array, sampleRate: number } */ acceptWaveform(obj) { addon.acceptWaveformOnline(this.handle, obj) } /** Notify the stream input has finished. */ inputFinished() { addon.inputFinished(this.handle) } } /** * OnlineRecognizer wraps native online recognizer. */ class OnlineRecognizer { /** * @param {OnlineRecognizerConfig} config - online recognizer config (see C++ for fields) */ constructor(config) { this.handle = addon.createOnlineRecognizer(config); this.config = config } /** * Create a new OnlineStream. * @returns {OnlineStream} */ createStream() { const handle = addon.createOnlineStream(this.handle); return new OnlineStream(handle); } /** * Check whether a stream is ready. * @param {OnlineStream} stream * @returns {boolean} */ isReady(stream) { return addon.isOnlineStreamReady(this.handle, stream.handle); } /** * Trigger decoding on a stream. * @param {OnlineStream} stream */ decode(stream) { addon.decodeOnlineStream(this.handle, stream.handle); } /** * Check endpoint condition for a stream. * @param {OnlineStream} stream * @returns {boolean} */ isEndpoint(stream) { return addon.isEndpoint(this.handle, stream.handle); } /** * Reset a stream. * @param {OnlineStream} stream */ reset(stream) { addon.reset(this.handle, stream.handle); } /** * Get recognition result for a stream. * @param {OnlineStream} stream * @returns {OnlineRecognizerResult} */ getResult(stream) { const jsonStr = addon.getOnlineStreamResultAsJson(this.handle, stream.handle); return JSON.parse(jsonStr); } } module.exports = { OnlineRecognizer, OnlineStream, Display }