@@ -10,8 +10,8 @@ const debug = require('debug')('botium-speech-processing-routes')
1010
1111const cachePathStt = process . env . BOTIUM_SPEECH_CACHE_DIR && path . join ( process . env . BOTIUM_SPEECH_CACHE_DIR , 'stt' )
1212const cachePathTts = process . env . BOTIUM_SPEECH_CACHE_DIR && path . join ( process . env . BOTIUM_SPEECH_CACHE_DIR , 'tts' )
13- const cacheKeyStt = ( data , language , ext ) => `${ crypto . createHash ( 'md5' ) . update ( data ) . digest ( 'hex' ) } _${ language } ${ ext } `
14- const cacheKeyTts = ( data , language , voice , ext ) => `${ crypto . createHash ( 'md5' ) . update ( data ) . digest ( 'hex' ) } _${ language } _${ voice || 'default' } ${ ext } `
13+ const cacheKeyStt = ( data , language , ext ) => sanitize ( `${ crypto . createHash ( 'md5' ) . update ( data ) . digest ( 'hex' ) } _${ language } ${ ext } ` )
14+ const cacheKeyTts = ( data , language , voice , ext ) => sanitize ( `${ crypto . createHash ( 'md5' ) . update ( data ) . digest ( 'hex' ) } _${ language } _${ voice || 'default' } ${ ext } ` )
1515
1616if ( cachePathStt ) mkdirp . sync ( cachePathStt )
1717if ( cachePathTts ) mkdirp . sync ( cachePathTts )
@@ -64,6 +64,40 @@ router.get('/api/status', (req, res) => {
6464 res . json ( { status : 'OK' } )
6565} )
6666
67+ /**
68+ * @swagger
69+ * /api/sttlanguages:
70+ * get:
71+ * description: Get list of STT languages
72+ * security:
73+ * - ApiKeyAuth: []
74+ * produces:
75+ * - application/json
76+ * parameters:
77+ * - name: stt
78+ * description: Speech-to-text backend
79+ * in: query
80+ * required: false
81+ * schema:
82+ * type: string
83+ * enum: [kaldi, google]
84+ * responses:
85+ * 200:
86+ * description: List of supported STT languages
87+ * schema:
88+ * type: array
89+ * items:
90+ * type: string
91+ */
92+ router . get ( '/api/sttlanguages' , async ( req , res , next ) => {
93+ try {
94+ const stt = sttEngines [ ( req . query . stt && sanitize ( req . query . stt ) ) || process . env . BOTIUM_SPEECH_PROVIDER_STT ]
95+ res . json ( await stt . languages ( ) )
96+ } catch ( err ) {
97+ return next ( err )
98+ }
99+ } )
100+
67101/**
68102 * @swagger
69103 * /api/stt/{language}:
@@ -75,7 +109,7 @@ router.get('/api/status', (req, res) => {
75109 * - application/json
76110 * parameters:
77111 * - name: language
78- * description: ISO-639-1 language code (2 letters )
112+ * description: Language code (as returned from sttlanguages endpoint )
79113 * in: path
80114 * required: true
81115 * schema:
@@ -192,6 +226,40 @@ router.get('/api/ttsvoices', async (req, res, next) => {
192226 }
193227} )
194228
229+ /**
230+ * @swagger
231+ * /api/ttslanguages:
232+ * get:
233+ * description: Get list of TTS languages
234+ * security:
235+ * - ApiKeyAuth: []
236+ * produces:
237+ * - application/json
238+ * parameters:
239+ * - name: tts
240+ * description: Text-to-speech backend
241+ * in: query
242+ * required: false
243+ * schema:
244+ * type: string
245+ * enum: [google, marytts, picotts]
246+ * responses:
247+ * 200:
248+ * description: List of supported TTS languages
249+ * schema:
250+ * type: array
251+ * items:
252+ * type: string
253+ */
254+ router . get ( '/api/ttslanguages' , async ( req , res , next ) => {
255+ try {
256+ const tts = ttsEngines [ ( req . query . tts && sanitize ( req . query . tts ) ) || process . env . BOTIUM_SPEECH_PROVIDER_TTS ]
257+ res . json ( await tts . languages ( ) )
258+ } catch ( err ) {
259+ return next ( err )
260+ }
261+ } )
262+
195263/**
196264 * @swagger
197265 * /api/tts/{language}:
@@ -203,7 +271,7 @@ router.get('/api/ttsvoices', async (req, res, next) => {
203271 * - audio/wav
204272 * parameters:
205273 * - name: language
206- * description: ISO-639-1 language code (2 letters )
274+ * description: Language code (as returned from ttslanguages endpoint )
207275 * in: path
208276 * required: true
209277 * schema:
0 commit comments