| | |
| | | import ( |
| | | "bytes" |
| | | "encoding/json" |
| | | "errors" |
| | | "gorm.io/gorm" |
| | | "io" |
| | | "mime/multipart" |
| | | "net/http" |
| | | "os" |
| | | "speechAnalysis/conf" |
| | | "speechAnalysis/constvar" |
| | | "speechAnalysis/models" |
| | | "speechAnalysis/pkg/logx" |
| | | ) |
| | | |
| | | // Response 结构体用于存储响应体的内容 |
| | |
| | | |
| | | return |
| | | } |
| | | |
| | | func Process(audioId uint) (err error) { |
| | | audio, err := models.NewAudioSearch().SetID(audioId).First() |
| | | |
| | | if err != nil { |
| | | return errors.New("查找音频失败") |
| | | } |
| | | |
| | | if audio.AudioStatus != constvar.AudioStatusUploadOk && audio.AudioStatus != constvar.AudioStatusFailed { |
| | | return errors.New("状态不正确") |
| | | } |
| | | |
| | | err = models.NewAudioSearch().SetID(audioId).UpdateByMap(map[string]interface{}{"audio_status": constvar.AudioStatusProcessing}) |
| | | if err != nil { |
| | | return errors.New("DB错误") |
| | | } |
| | | |
| | | go func() { |
| | | resp, err := AnalysisAudio(audio.FilePath, conf.AanlysisConf.Url) |
| | | if err != nil { |
| | | logx.Errorf("err when AnalysisAudio:%v", err) |
| | | _ = models.NewAudioSearch().SetID(audioId).UpdateByMap(map[string]interface{}{"audio_status": constvar.AudioStatusFailed}) |
| | | return |
| | | } |
| | | if resp.Code != 0 { |
| | | logx.Errorf("AnalysisAudio error return:%v", resp) |
| | | _ = models.NewAudioSearch().SetID(audioId).UpdateByMap(map[string]interface{}{"audio_status": constvar.AudioStatusFailed}) |
| | | return |
| | | } |
| | | logx.Infof("AnalysisAudio result: %v", resp) |
| | | err = models.WithTransaction(func(db *gorm.DB) error { |
| | | err = models.NewAudioSearch().SetID(audioId).UpdateByMap(map[string]interface{}{"audio_status": constvar.AudioStatusFinish}) |
| | | if err != nil { |
| | | return err |
| | | } |
| | | err = models.NewAudioTextSearch().Save(&models.AudioText{ |
| | | AudioID: audio.ID, |
| | | AudioText: resp.Result, |
| | | Score: resp.Score, |
| | | }) |
| | | return err |
| | | }) |
| | | if err != nil { |
| | | logx.Infof("AnalysisAudio success but update record failed: %v", err) |
| | | return |
| | | } |
| | | }() |
| | | |
| | | return nil |
| | | } |