Отправить двоичные данные с текстом заголовков - PullRequest
0 голосов
/ 28 июня 2018

Я создаю сервис в Golang & Gorilla WebSocket, который преобразует речь в текст с помощью речевого сервиса Microsoft Bing. Для справки

https://docs.microsoft.com/en-us/azure/cognitive-services/speech/api-reference-rest/websocketprotocol

реализация JavaScript

https://github.com/Azure-Samples/SpeechToText-WebSockets-Javascript

Здесь нам нужно отправлять текстовые данные, а также аудиоданные с заголовками. Я могу отправить текстовые данные, но не могу отправить аудио двоичные данные с заголовками.

Подскажите пожалуйста, как отправить данные

Спасибо Динеш Гупта

1 Ответ

0 голосов
/ 04 июля 2018

После долгих поисков, я делаю решение ниже, хорошее это или худшее. Пожалуйста, укажите, где я могу сделать улучшения.

Я создал 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.

Спасибо

...