STT.js
2.35 KB
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
const apiRequest = require('./apiRequest');
const isBase64 = require('is-base64');
//const Lame = require("node-lame").Lame;
const fs = require("fs");
//const Mp32Wav = require('mp3-to-wav')
/**
* @param {Object} clientData 클라이언트에서 보낸 데이터
* @param {String} clientData.audio base64로 인코딩된 음성 데이터 16hz로 샘플링 되야함
* @returns {text:String} 음성을 인식한 결과
* @description 음성 인식을 요청해 결과를 내놓는 함수이다.
*/
const apiReq = async ( clientData ) => {
fs.writeFileSync('./audio/audio_input.mp3', Buffer.from(clientData.audio.replace('data:audio/mp3; codecs=opus;base64,', ''), 'base64'));
const mp32Wav = new Mp32Wav('./audio/audio_input.mp3')
mp32Wav.saveForWav(Buffer.from(clientData.audio.replace('data:audio/mp3; codecs=opus;base64,', ''), 'base64'),'./audio/audio_input.wav',_,16000,1)
//let audiodata = fs.readFileSync('./audio/audio_input.mp3').toString('base64')
console.log(Buffer(clientData.audio,'base64'))
let getSTT = {};
try {
getSTT = await apiRequest.ETRI( "WiseASR/Recognition", { "language_code" : "korean", "audio" : audiodata } );
}
catch ( err ) {
throw new Error ( err.message );
}
return { "text" : getSTT.return_object.recognized };
}
/**
* @param req request
* @param req.bdoy.data req.body.data.audio에 요청하는 데이터가 들어있어야한다
* @description 오디로를 텍스트로 바꿔준다.
*/
const STT = async ( req, res ) => {
let clientData,
voiceTemp;
try {
clientData = req.body.data
if( !clientData.audio.length ) {
throw new Error( "client audio empty" );
}
else if( !isBase64( clientData.audio ) ) {
throw new Error( "Type error : audio type should be base64" );
}
}
catch( err ) {
console.log( err );
res.json( { "return_code" : -1, "error_code" : err.message } );
res.status( 403 );
return false;
}
try {
voiceTemp = await apiReq( clientData );
}
catch( err ) {
console.log( err );
res.json( { "return_code" : -1, "error_code" : err.message } );
res.status( 502 );
return false;
}
res.send( { "return_code" : 0, "return_data" : voiceTemp } );
res.status( 200 );
};
module.exports=STT;