我正在Golang&Gorilla WebSocket中提供一项服务,该服务将使用Microsoft Bing语音服务将语音转换为文本。 供参考
javascript实现
https://github.com/Azure-Samples/SpeechToText-WebSockets-Javascript
在这里,我们需要发送带有标题的文本数据以及音频数据。 我能够发送文本数据,但无法发送带有标题的音频二进制数据。
请建议我如何发送数据
谢谢 迪内什·古普塔(Dinesh Gupta)
答案 0 :(得分:0)
经过大量的Google搜索,无论是好是坏,我都会做出以下解决方案。 请提供我可以改进的地方。
我为头创建了2个字节,然后是头字符串的长度,最后是缓冲数据的长度。代码如下:
import(
"encoding/binary"
"fmt"
"time"
"strings"
"encoding/json"
)
func BufferToBytes(buffer *[]byte, requestId string) *[]byte{
headersString := GetHeaders("audio", requestId, "audio/x-wav")
headersString = strings.Replace(headersString, "\n", "\r\n", -1)
headerInt8Array := []byte(headersString)
payload := make([]byte,2)
binary.BigEndian.PutUint16(payload, uint16(len(headerInt8Array)))//till 1st part
t := make([]byte, len(headerInt8Array))
for i := 0; i < len(headerInt8Array); i++ {
t[i] = headerInt8Array[i];
}
payload = append(payload, t...)//till 2nd part
payload = append(payload, *buffer...)//final part
return &payload;
}
func GetHeaders(params... string) string{
header := fmt.Sprintf("path: %s\n", params[0])
header += fmt.Sprintf("x-requestid: %s\n",params[1])//request id
header += fmt.Sprintf("x-timestamp: %s\n",GetTimestamp())// timestamp
header += fmt.Sprintf("content-type: %s\n",params[2])////content type
return header
}
func GetTimestamp() string {
format := "2006-01-02T15:04:05.000Z"
return time.Now().UTC().Format(format)
}
然后该数据被MS bing接受。
谢谢