From cd5a5df4ea730bf9ded12d05ae0ededdb4cfabbd Mon Sep 17 00:00:00 2001 From: Nonso Chukwurah Date: Fri, 28 Apr 2023 14:58:40 -0500 Subject: [PATCH] Create function PreRecordedFromStream for transcribing local files --- deepgram/prerecorded.go | 39 ++++++++++++++++ examples/preRecordedFromStream_example.go | 56 +++++++++++++++++++++++ 2 files changed, 95 insertions(+) create mode 100644 examples/preRecordedFromStream_example.go diff --git a/deepgram/prerecorded.go b/deepgram/prerecorded.go index 16c16081..2f2b91fe 100644 --- a/deepgram/prerecorded.go +++ b/deepgram/prerecorded.go @@ -115,6 +115,45 @@ type Results struct { Channels []Channel `json:"channels"` } +func (dg *Client) PreRecordedFromStream(source ReadStreamSource, options PreRecordedTranscriptionOptions) (*PreRecordedResponse, error) { + client := &http.Client{} + query, _ := query.Values(options) + u := url.URL{Scheme: "https", Host: dg.Host, Path: "/v1/listen", RawQuery: query.Encode()} + + // TODO: accept file path as string build io.Reader here + req, err := http.NewRequest("POST", u.String(), source.Stream) + if err != nil { + //Handle Error + return nil, err + } + + req.Header = http.Header{ + "Host": []string{dg.Host}, + "Content-Type": []string{source.Mimetype}, + "Authorization": []string{"token " + dg.ApiKey}, + "X-DG-Agent": []string{dgAgent}, + } + + res, err := client.Do(req) + if err != nil { + return nil, err + } + + if res.StatusCode != 200 { + b, _ := io.ReadAll(res.Body) + return nil, fmt.Errorf("response error: %s", string(b)) + } + + var result PreRecordedResponse + jsonErr := GetJson(res, &result) + if jsonErr != nil { + fmt.Printf("error getting request list: %s\n", jsonErr.Error()) + return nil, jsonErr + } + + return &result, nil +} + func (dg *Client) PreRecordedFromURL(source UrlSource, options PreRecordedTranscriptionOptions) (PreRecordedResponse, error) { client := new(http.Client) query, _ := query.Values(options) diff --git a/examples/preRecordedFromStream_example.go b/examples/preRecordedFromStream_example.go new file mode 100644 index 00000000..3bdec3b2 --- /dev/null +++ b/examples/preRecordedFromStream_example.go @@ -0,0 +1,56 @@ +package main + +import ( + "flag" + "fmt" + "log" + "os" + + "github.com/deepgram-devs/go-sdk/deepgram" +) + +var ( + key = flag.String("key", "", "Deepgram API key") + file = flag.String("file", "", "Path to file that will be transcribed") + mimetype = flag.String("mimetype", "", "Mimetype of file") +) + +func main() { + flag.Parse() + + dg := deepgram.NewClient(*key) + file, err := os.Open(*file) + if err != nil { + log.Fatalf("error opening file %s: %v", *file, err) + } + source := deepgram.ReadStreamSource{Stream: file, Mimetype: *mimetype} + res, err := dg.PreRecordedFromStream(source, deepgram.PreRecordedTranscriptionOptions{Punctuate: true, Diarize: true, Language: "en-US", Utterances: true}) + if err != nil { + fmt.Println("ERROR", err) + return + } + // Log the results + log.Printf("recv: %+v", res.Results) + f, err := os.Create("transcription.vtt") + if err != nil { + fmt.Printf("error creating VTT file: %v", err) + } + // Convert the results to WebVTT format + vtt, err := res.ToWebVTT() + if err != nil { + log.Fatal(err) + } + f.WriteString(vtt) + + // Convert the results to SRT format + srtF, err := os.Create("transcription.srt") + if err != nil { + fmt.Printf("error creating SRT file: %v", err) + } + srt, err := res.ToSRT() + if err != nil { + log.Fatal(err) + } + srtF.WriteString(srt) + +}