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  }