func wait(client *speech.Client, opName string) (*speechpb.AsyncRecognizeResponse, error) { ctx := context.Background() opClient := longrunningpb.NewOperationsClient(client.Connection()) var op *longrunningpb.Operation var err error for { op, err = opClient.GetOperation(ctx, &longrunningpb.GetOperationRequest{ Name: opName, }) if err != nil { return nil, err } if op.Done { break } time.Sleep(500 * time.Millisecond) } switch { case op.GetError() != nil: return nil, fmt.Errorf("recieved error in response: %v", op.GetError()) case op.GetResponse() != nil: var resp speechpb.AsyncRecognizeResponse if err := proto.Unmarshal(op.GetResponse().Value, &resp); err != nil { return nil, err } return &resp, nil } // should never happen. return nil, errors.New("no response") }
func send(client *speech.Client, filename string) (string, error) { ctx := context.Background() data, err := ioutil.ReadFile(filename) if err != nil { return "", err } // Send the contents of the audio file with the encoding and // and sample rate information to be transcripted. req := &speechpb.AsyncRecognizeRequest{ Config: &speechpb.RecognitionConfig{ Encoding: speechpb.RecognitionConfig_LINEAR16, SampleRate: 16000, }, Audio: &speechpb.RecognitionAudio{ AudioSource: &speechpb.RecognitionAudio_Content{Content: data}, }, } op, err := client.AsyncRecognize(ctx, req) if err != nil { return "", err } return op.Name(), nil }