]> git.djapps.eu Git - pkg/ggml/sources/whisper.cpp/commitdiff
bindings.go : add DetectedLanguage to go bindings (#2947)
authorAmanda Der Bedrosian <redacted>
Fri, 28 Mar 2025 11:26:22 +0000 (04:26 -0700)
committerGitHub <redacted>
Fri, 28 Mar 2025 11:26:22 +0000 (12:26 +0100)
Adding in DetectedLanguage(), a function to retrieve the detected
language that's populated by processing audio. Also adding in a unit
test to test the success.

Co-authored-by: Amanda Der Bedrosian <redacted>
bindings/go/pkg/whisper/context.go
bindings/go/pkg/whisper/context_test.go
bindings/go/pkg/whisper/interface.go

index a806129364badac90813e44c5bd8955b9c431570..cb3d9eb8c1c3d1d3d4105642ee27602610fc8d97 100644 (file)
@@ -71,6 +71,10 @@ func (context *context) Language() string {
        return whisper.Whisper_lang_str(context.params.Language())
 }
 
+func (context *context) DetectedLanguage() string {
+       return whisper.Whisper_lang_str(context.model.ctx.Whisper_full_lang_id())
+}
+
 // Set translate flag
 func (context *context) SetTranslate(v bool) {
        context.params.SetTranslate(v)
index 510514817345a38be1b5781e4275cdb0364d7e66..e98a4c2b80b356b63fa131cf2bece9832f6bf908 100644 (file)
@@ -91,3 +91,34 @@ func TestProcess(t *testing.T) {
        err = context.Process(data, nil, nil, nil)
        assert.NoError(err)
 }
+
+func TestDetectedLanguage(t *testing.T) {
+       assert := assert.New(t)
+
+       fh, err := os.Open(SamplePath)
+       assert.NoError(err)
+       defer fh.Close()
+
+       // Decode the WAV file - load the full buffer
+       dec := wav.NewDecoder(fh)
+       buf, err := dec.FullPCMBuffer()
+       assert.NoError(err)
+       assert.Equal(uint16(1), dec.NumChans)
+
+       data := buf.AsFloat32Buffer().Data
+
+       model, err := whisper.New(ModelPath)
+       assert.NoError(err)
+       assert.NotNil(model)
+       defer model.Close()
+
+       context, err := model.NewContext()
+       assert.NoError(err)
+
+       err = context.Process(data, nil, nil, nil)
+       assert.NoError(err)
+
+       expectedLanguage := "en"
+       actualLanguage := context.DetectedLanguage()
+       assert.Equal(expectedLanguage, actualLanguage)
+}
index 2b6a9c8ecfa1175ac70dcf1369a1441e59be96c7..e3122c44b763a8bf2ee8bd7f80824f361a5fe6b3 100644 (file)
@@ -41,6 +41,7 @@ type Context interface {
        SetTranslate(bool)        // Set translate flag
        IsMultilingual() bool     // Return true if the model is multilingual.
        Language() string         // Get language
+       DetectedLanguage() string // Get detected language
 
        SetOffset(time.Duration)          // Set offset
        SetDuration(time.Duration)        // Set duration