You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

90 lines
2.5 KiB
Go

3 years ago
package stt
import (
"encoding/json"
"strings"
"time"
"gitlab.com/cinnamon/voiceagent/icserror"
"gitlab.com/cinnamon/voiceagent/icslog"
"gitlab.com/cinnamon/voiceagent/icsws"
)
type LGSTTParam struct {
UserName string `json:"USERNAME"`
UpdateInternal int `json:"UPDATEINTERVAL"`
EPDProcess string `json:"EPD_PROCESS"`
ClinetType string `json:"CLIENT_TYPE"`
}
func sttLG(voicedata []byte) (string, *icserror.IcsError) {
var trstring string
l := icslog.GetIcsLog()
voicedataLen := len(voicedata)
startPos := 0
endPos := 8000
ws := icsws.NewWSClient("18.183.222.16:9998", "")
werr := ws.Connect()
if werr != nil {
l.Printf(icslog.LOG_LEVEL_ERROR, -1, "Failed to connect to LG STT Websocket server[18.183.222.16:9998] - %s", werr.GetError())
icserror.ICSERRSTTFail.SetError(werr.GetError())
return "", icserror.ICSERRSTTFail
}
sttParam := LGSTTParam{
UserName: "LGECS",
UpdateInternal: -1,
EPDProcess: "FALSE",
ClinetType: "APPLICATION",
}
param, jerr := json.Marshal(sttParam)
if jerr != nil {
l.Printf(icslog.LOG_LEVEL_ERROR, -1, "Failed to json marshal - %s", jerr)
icserror.ICSERRSTTFail.SetError(jerr)
return "", icserror.ICSERRSTTFail
}
werr = ws.WriteData(param)
if werr != nil {
l.Printf(icslog.LOG_LEVEL_ERROR, -1, "Failed to send to LG STT Websocket server[18.183.222.16:9998] - %s", werr.GetError())
icserror.ICSERRSTTFail.SetError(werr.GetError())
return "", icserror.ICSERRSTTFail
}
for {
data, rerr := ws.Read()
if rerr != nil {
l.Printf(icslog.LOG_LEVEL_ERROR, -1, "Failed to read to LG STT Websocket server[18.183.222.16:9998] - %s", rerr.GetError())
break
}
command := string(data)
if strings.Compare(command, "DATA") == 0 {
for {
if endPos < voicedataLen {
ws.WriteData(voicedata[startPos:endPos])
startPos += 8000
endPos += 8000
} else {
ws.WriteData(voicedata[startPos:voicedataLen])
ws.Write("ENDOFSPEECH")
break
}
}
} else if strings.Contains(command, "RESULT:") {
ws.Write("STOPLISTENING")
//tr := strings.SplitN(command, "RESULT:", 2)[1]
//trstring = tr[:len(tr)-1]
trstring = strings.SplitN(command, "RESULT:", 2)[1]
} else if strings.Contains(command, "MESSAGE:") {
//tr := strings.SplitN(command, "MESSAGE:", 2)[1]
//trstring = tr[:len(tr)-1]
trstring = strings.SplitN(command, "MESSAGE:", 2)[1]
} else if strings.Compare(command, "STOPLISTENING") == 0 {
time.Sleep(time.Millisecond * 100)
break
}
}
return trstring, icserror.ICSERRSTTOK
}