@@ -824,44 +824,59 @@ final class SherpaOnnxSpokenLanguageIdentificationResult extends Struct {
824824
825825final class SherpaOnnxSpokenLanguageIdentification extends Opaque {}
826826
827- final class SherpaOnnxVocabLogProbs extends Struct {
828- // Flattened 2D array
829- external Pointer <Float > logProbs;
830-
827+ /// FFI struct for the online recognizer result (mirrors C API struct layout).
828+ final class SherpaOnnxOnlineRecognizerResultNative extends Struct {
829+ external Pointer <Utf8 > text;
830+ external Pointer <Utf8 > tokens;
831+ external Pointer <Pointer <Utf8 >> tokensArr;
832+ external Pointer <Float > timestamps;
833+ @Int 32()
834+ external int count;
835+ external Pointer <Utf8 > json;
836+ external Pointer <Float > vocabLogProbs;
831837 @Int 32()
832- external int numTokens;
838+ external int vocabSize;
839+ }
833840
841+ /// FFI struct for the offline recognizer result (mirrors C API struct layout).
842+ final class SherpaOnnxOfflineRecognizerResultNative extends Struct {
843+ external Pointer <Utf8 > text;
844+ external Pointer <Float > timestamps;
845+ @Int 32()
846+ external int count;
847+ external Pointer <Utf8 > tokens;
848+ external Pointer <Pointer <Utf8 >> tokensArr;
849+ external Pointer <Utf8 > json;
850+ external Pointer <Utf8 > lang;
851+ external Pointer <Utf8 > emotion;
852+ external Pointer <Utf8 > event;
853+ external Pointer <Float > durations;
854+ external Pointer <Float > ysLogProbs;
855+ external Pointer <Float > segmentTimestamps;
856+ external Pointer <Float > segmentDurations;
857+ external Pointer <Utf8 > segmentTexts;
858+ external Pointer <Pointer <Utf8 >> segmentTextsArr;
859+ @Int 32()
860+ external int segmentCount;
861+ external Pointer <Float > vocabLogProbs;
834862 @Int 32()
835863 external int vocabSize;
836864}
837865
838- /// Read a native [SherpaOnnxVocabLogProbs] pointer into a Dart list-of-lists
839- /// and free the native memory via [destroyFunc] . Returns `null` when
840- /// [vocabPtr] is null or the sizes look invalid.
841- List < List < double >> ? readAndFreeVocabLogProbs (
842- Pointer < SherpaOnnxVocabLogProbs > vocabPtr ,
843- void Function ( Pointer < SherpaOnnxVocabLogProbs >) destroyFunc ,
866+ /// Read vocab_log_probs from a native result struct into a Dart list-of-lists.
867+ /// Returns `null` when vocab_log_probs is null or sizes are invalid.
868+ List < List < double >> ? readVocabLogProbsFromResult (
869+ Pointer < Float > vocabLogProbs,
870+ int count ,
871+ int vocabSize ,
844872) {
845- if (vocabPtr == nullptr) {
846- return null ;
847- }
848-
849- final ref = vocabPtr.ref;
850- final numTokens = ref.numTokens;
851- final vocabSize = ref.vocabSize;
852-
853- if (numTokens <= 0 || vocabSize <= 0 ||
854- numTokens > 10000 || vocabSize > 100000 ) {
855- destroyFunc (vocabPtr);
873+ if (vocabLogProbs == nullptr || count <= 0 || vocabSize <= 0 ) {
856874 return null ;
857875 }
858876
859- final flat = ref.logProbs. asTypedList (numTokens * vocabSize);
860- final result = List .generate (numTokens , (i) =>
877+ final flat = vocabLogProbs. asTypedList (count * vocabSize);
878+ return List .generate (count , (i) =>
861879 List <double >.generate (vocabSize, (j) => flat[i * vocabSize + j]));
862-
863- destroyFunc (vocabPtr);
864- return result;
865880}
866881
867882final class SherpaOnnxOfflineSpeechDenoiser extends Opaque {}
@@ -1886,19 +1901,24 @@ typedef SherpaOnnxGetGitSha1 = SherpaOnnxGetGitSha1Native;
18861901typedef SherpaOnnxGetGitDateNative = Pointer <Utf8 > Function ();
18871902typedef SherpaOnnxGetGitDate = SherpaOnnxGetGitDateNative ;
18881903
1889- typedef SherpaOnnxOnlineStreamGetVocabLogProbsNative
1890- = Pointer <SherpaOnnxVocabLogProbs > Function (
1904+ typedef SherpaOnnxGetOnlineStreamResultNative
1905+ = Pointer <SherpaOnnxOnlineRecognizerResultNative > Function (
1906+ Pointer <SherpaOnnxOnlineRecognizer > recognizer,
18911907 Pointer <SherpaOnnxOnlineStream > stream);
18921908
1893- typedef SherpaOnnxOfflineStreamGetVocabLogProbsNative
1894- = Pointer <SherpaOnnxVocabLogProbs > Function (
1895- Pointer <SherpaOnnxOfflineStream > stream);
1909+ typedef SherpaOnnxDestroyOnlineRecognizerResultNative = Void Function (
1910+ Pointer <SherpaOnnxOnlineRecognizerResultNative > r);
1911+ typedef SherpaOnnxDestroyOnlineRecognizerResultDart = void Function (
1912+ Pointer <SherpaOnnxOnlineRecognizerResultNative > r);
18961913
1897- typedef SherpaOnnxDestroyVocabLogProbsNative = Void Function (
1898- Pointer <SherpaOnnxVocabLogProbs > logProbs);
1914+ typedef SherpaOnnxGetOfflineStreamResultNative
1915+ = Pointer <SherpaOnnxOfflineRecognizerResultNative > Function (
1916+ Pointer <SherpaOnnxOfflineStream > stream);
18991917
1900- typedef SherpaOnnxDestroyVocabLogProbsDart = void Function (
1901- Pointer <SherpaOnnxVocabLogProbs >);
1918+ typedef SherpaOnnxDestroyOfflineRecognizerResultNative = Void Function (
1919+ Pointer <SherpaOnnxOfflineRecognizerResultNative > r);
1920+ typedef SherpaOnnxDestroyOfflineRecognizerResultDart = void Function (
1921+ Pointer <SherpaOnnxOfflineRecognizerResultNative > r);
19021922
19031923class SherpaOnnxBindings {
19041924 static SherpaOnnxCreateOfflineSpeechDenoiser ?
@@ -2141,11 +2161,12 @@ class SherpaOnnxBindings {
21412161 static SherpaOnnxGetGitSha1 ? getGitSha1;
21422162 static SherpaOnnxGetGitDate ? getGitDate;
21432163
2144- static SherpaOnnxOnlineStreamGetVocabLogProbsNative ?
2145- getOnlineStreamVocabLogProbs;
2146- static SherpaOnnxOfflineStreamGetVocabLogProbsNative ?
2147- getOfflineStreamVocabLogProbs;
2148- static SherpaOnnxDestroyVocabLogProbsDart ? destroyVocabLogProbs;
2164+ static SherpaOnnxGetOnlineStreamResultNative ? getOnlineStreamResult;
2165+ static SherpaOnnxDestroyOnlineRecognizerResultDart ?
2166+ destroyOnlineRecognizerResult;
2167+ static SherpaOnnxGetOfflineStreamResultNative ? getOfflineStreamResult;
2168+ static SherpaOnnxDestroyOfflineRecognizerResultDart ?
2169+ destroyOfflineRecognizerResult;
21492170
21502171 static void init (DynamicLibrary dynamicLibrary) {
21512172 sherpaOnnxCreateOfflineSpeechDenoiser ?? = dynamicLibrary
@@ -2921,21 +2942,27 @@ class SherpaOnnxBindings {
29212942 )
29222943 .asFunction ();
29232944
2924- getOnlineStreamVocabLogProbs ?? = dynamicLibrary
2925- .lookup <NativeFunction <SherpaOnnxOnlineStreamGetVocabLogProbsNative >>(
2926- 'SherpaOnnxOnlineStreamGetVocabLogProbs' ,
2945+ getOnlineStreamResult ?? = dynamicLibrary
2946+ .lookup <NativeFunction <SherpaOnnxGetOnlineStreamResultNative >>(
2947+ 'SherpaOnnxGetOnlineStreamResult' ,
2948+ )
2949+ .asFunction ();
2950+
2951+ destroyOnlineRecognizerResult ?? = dynamicLibrary
2952+ .lookup <NativeFunction <SherpaOnnxDestroyOnlineRecognizerResultNative >>(
2953+ 'SherpaOnnxDestroyOnlineRecognizerResult' ,
29272954 )
29282955 .asFunction ();
29292956
2930- getOfflineStreamVocabLogProbs ?? = dynamicLibrary
2931- .lookup <NativeFunction <SherpaOnnxOfflineStreamGetVocabLogProbsNative >>(
2932- 'SherpaOnnxOfflineStreamGetVocabLogProbs ' ,
2957+ getOfflineStreamResult ?? = dynamicLibrary
2958+ .lookup <NativeFunction <SherpaOnnxGetOfflineStreamResultNative >>(
2959+ 'SherpaOnnxGetOfflineStreamResult ' ,
29332960 )
29342961 .asFunction ();
29352962
2936- destroyVocabLogProbs ?? = dynamicLibrary
2937- .lookup <NativeFunction <SherpaOnnxDestroyVocabLogProbsNative >>(
2938- 'SherpaOnnxDestroyVocabLogProbs ' ,
2963+ destroyOfflineRecognizerResult ?? = dynamicLibrary
2964+ .lookup <NativeFunction <SherpaOnnxDestroyOfflineRecognizerResultNative >>(
2965+ 'SherpaOnnxDestroyOfflineRecognizerResult ' ,
29392966 )
29402967 .asFunction ();
29412968 }
0 commit comments