Skip to content

Commit

Permalink
Merge pull request #34 from TrippleCCC/pre-recorded-local-file
Browse files Browse the repository at this point in the history
Create function PreRecordedFromStream for transcribing local files
  • Loading branch information
briancbarrow authored Jun 5, 2023
2 parents 04123a1 + cd5a5df commit 8ad711d
Show file tree
Hide file tree
Showing 2 changed files with 95 additions and 0 deletions.
39 changes: 39 additions & 0 deletions deepgram/prerecorded.go
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down
56 changes: 56 additions & 0 deletions examples/preRecordedFromStream_example.go
Original file line number Diff line number Diff line change
@@ -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)

}

0 comments on commit 8ad711d

Please sign in to comment.