github.com/aavshr/aws-sdk-go@v1.41.3/service/transcribestreamingservice/streamreader.go (about) 1 package transcribestreamingservice 2 3 import ( 4 "fmt" 5 "io" 6 7 "github.com/aavshr/aws-sdk-go/aws" 8 ) 9 10 // StreamAudioFromReader will stream bytes from the provided input io.Reader to 11 // the AudioStreamWriter in chunks of frameSize in length. Returns an error if 12 // streaming to AudioStreamWriter fails. 13 func StreamAudioFromReader(ctx aws.Context, stream AudioStreamWriter, frameSize int, input io.Reader) (err error) { 14 defer func() { 15 if closeErr := stream.Close(); closeErr != nil && err == nil { 16 err = fmt.Errorf("failed to close stream, %v", closeErr) 17 } 18 }() 19 20 frame := make([]byte, frameSize) 21 for { 22 var n int 23 n, err = input.Read(frame) 24 if n > 0 { 25 err = stream.Send(ctx, &AudioEvent{ 26 AudioChunk: frame[:n], 27 }) 28 if err != nil { 29 return fmt.Errorf("failed to send audio event, %v", err) 30 } 31 } 32 33 if err == io.EOF { 34 return nil 35 } 36 if err != nil { 37 return fmt.Errorf("failed to read audio, %v", err) 38 } 39 } 40 }