-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathrecv_wav_server.go
144 lines (127 loc) · 3.05 KB
/
recv_wav_server.go
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
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
package main
import (
"./config"
"./logger"
"bufio"
"fmt"
"github.com/gorilla/websocket"
wave "github.com/zenwerk/go-wave"
"log"
"net/http"
"net/url"
"os"
"os/exec"
"path"
"path/filepath"
"time"
)
var upgrader = websocket.Upgrader{
CheckOrigin: func(r *http.Request) bool {
return true
},
} // use default options
func checkFileIsExist(path string) bool {
_, err := os.Stat(path) //os.Stat获取文件信息
if err != nil {
if os.IsExist(err) {
return true
}
return false
}
return true
}
func echo(w http.ResponseWriter, r *http.Request) {
c, err := upgrader.Upgrade(w, r, nil)
defer c.Close()
if err != nil {
logger.Error.Println("Error upgrade request: " + err.Error())
return
}
var uid string
params, _ := url.ParseQuery(r.URL.RawQuery)
if len(params) == 0 {
logger.Error.Println("no userid")
return
} else {
uid = params["uid"][0]
logger.Info.Println(uid + " ws connected")
}
udirPath := path.Join(config.G_wav_dir, uid)
if !checkFileIsExist(udirPath) {
err := os.MkdirAll(udirPath, os.ModePerm)
if err != nil {
logger.Error.Println("udir mkdir failed :" + err.Error())
return
}
}
filename := path.Join(udirPath, time.Now().Format("2006-01-02_15:04:05")+".wav")
f, err := os.Create(filename)
defer f.Close()
if err != nil {
logger.Error.Println("Cannot create file: " + err.Error())
return
}
param := wave.WriterParam{
Out: f,
Channel: 1,
SampleRate: 16000,
BitsPerSample: 16,
}
w1, err2 := wave.NewWriter(param)
if err2 != nil {
panic(err2)
}
for {
mt, message, err := c.ReadMessage()
if err != nil {
logger.Error.Println("websocket read: " + err.Error())
break
}
_, err = w1.WriteSample8(message)
if err != nil {
logger.Error.Println("websocket recv: " + err.Error())
break
}
//log.Printf("recv: %s", message)
err = c.WriteMessage(mt, message)
if err != nil {
logger.Error.Println("websocket write: " + err.Error())
break
}
}
w1.Close()
absFp, err := filepath.Abs(filename)
dbFp := "/home/ray/Workspace/project/asr/src/dictation-kit/test.db"
var dbf *os.File
if checkFileIsExist(dbFp) { //如果文件存在
dbf, err = os.OpenFile(dbFp, os.O_WRONLY, os.ModePerm) //打开文件
fmt.Println("文件存在")
} else {
dbf, err = os.Create(dbFp) //创建文件
fmt.Println("文件不存在")
}
if err != nil {
logger.Error.Println("open file error: " + err.Error())
return
}
write := bufio.NewWriter(dbf)
write.WriteString(absFp)
//Flush将缓存的文件真正写入到文件中
write.Flush()
dbf.Close()
exec.Command("/bin/bash", "-c", `cd /home/ray/Workspace/project/asr/src/dictation-kit && ./run-linux-dnn.sh`).Run()
}
func main() {
logger.Info.Println("Service start.")
log.SetFlags(0)
if !checkFileIsExist(config.G_wav_dir) {
err := os.MkdirAll(config.G_wav_dir, os.ModePerm)
if err != nil {
logger.Error.Println("wav mkdir failed :" + err.Error())
return
}
}
http.HandleFunc("/ws", echo)
logger.Info.Println("Service running on " + config.G_host)
log.Fatal(http.ListenAndServe(config.G_host, nil))
}