Add Pascal API for Kokoro TTS models (#1724)

This commit is contained in:
Fangjun Kuang
2025-01-16 18:20:21 +08:00
committed by GitHub
parent 4335e2accd
commit 46f2e32e8a
10 changed files with 444 additions and 7 deletions

View File

@@ -76,12 +76,24 @@ type
class operator Initialize({$IFDEF FPC}var{$ELSE}out{$ENDIF} Dest: TSherpaOnnxOfflineTtsMatchaModelConfig);
end;
TSherpaOnnxOfflineTtsKokoroModelConfig = record
Model: AnsiString;
Voices: AnsiString;
Tokens: AnsiString;
DataDir: AnsiString;
LengthScale: Single;
function ToString: AnsiString;
class operator Initialize({$IFDEF FPC}var{$ELSE}out{$ENDIF} Dest: TSherpaOnnxOfflineTtsKokoroModelConfig);
end;
TSherpaOnnxOfflineTtsModelConfig = record
Vits: TSherpaOnnxOfflineTtsVitsModelConfig;
NumThreads: Integer;
Debug: Boolean;
Provider: AnsiString;
Matcha: TSherpaOnnxOfflineTtsMatchaModelConfig;
Kokoro: TSherpaOnnxOfflineTtsKokoroModelConfig;
function ToString: AnsiString;
class operator Initialize({$IFDEF FPC}var{$ELSE}out{$ENDIF} Dest: TSherpaOnnxOfflineTtsModelConfig);
@@ -739,12 +751,21 @@ type
DictDir: PAnsiChar;
end;
SherpaOnnxOfflineTtsKokoroModelConfig = record
Model: PAnsiChar;
Voices: PAnsiChar;
Tokens: PAnsiChar;
DataDir: PAnsiChar;
LengthScale: cfloat;
end;
SherpaOnnxOfflineTtsModelConfig = record
Vits: SherpaOnnxOfflineTtsVitsModelConfig;
NumThreads: cint32;
Debug: cint32;
Provider: PAnsiChar;
Matcha: SherpaOnnxOfflineTtsMatchaModelConfig;
Kokoro: SherpaOnnxOfflineTtsKokoroModelConfig;
end;
SherpaOnnxOfflineTtsConfig = record
@@ -1903,6 +1924,23 @@ begin
Dest.LengthScale := 1.0;
end;
function TSherpaOnnxOfflineTtsKokoroModelConfig.ToString: AnsiString;
begin
Result := Format('TSherpaOnnxOfflineTtsKokoroModelConfig(' +
'Model := %s, ' +
'Voices := %s, ' +
'Tokens := %s, ' +
'DataDir := %s, ' +
'LengthScale := %.2f' +
')',
[Self.Model, Self.Voices, Self.Tokens, Self.DataDir, Self.LengthScale]);
end;
class operator TSherpaOnnxOfflineTtsKokoroModelConfig.Initialize({$IFDEF FPC}var{$ELSE}out{$ENDIF} Dest: TSherpaOnnxOfflineTtsKokoroModelConfig);
begin
Dest.LengthScale := 1.0;
end;
function TSherpaOnnxOfflineTtsModelConfig.ToString: AnsiString;
begin
Result := Format('TSherpaOnnxOfflineTtsModelConfig(' +
@@ -1910,10 +1948,11 @@ begin
'NumThreads := %d, ' +
'Debug := %s, ' +
'Provider := %s, ' +
'Matcha := %s' +
'Matcha := %s, ' +
'Kokoro := %s' +
')',
[Self.Vits.ToString, Self.NumThreads, Self.Debug.ToString, Self.Provider,
Self.Matcha.ToString
Self.Matcha.ToString, Self.Kokoro.ToString
]);
end;
@@ -1966,6 +2005,12 @@ begin
C.Model.Matcha.LengthScale := Config.Model.Matcha.LengthScale;
C.Model.Matcha.DictDir := PAnsiChar(Config.Model.Matcha.DictDir);
C.Model.Kokoro.Model := PAnsiChar(Config.Model.Kokoro.Model);
C.Model.Kokoro.Voices := PAnsiChar(Config.Model.Kokoro.Voices);
C.Model.Kokoro.Tokens := PAnsiChar(Config.Model.Kokoro.Tokens);
C.Model.Kokoro.DataDir := PAnsiChar(Config.Model.Kokoro.DataDir);
C.Model.Kokoro.LengthScale := Config.Model.Kokoro.LengthScale;
C.Model.NumThreads := Config.Model.NumThreads;
C.Model.Provider := PAnsiChar(Config.Model.Provider);
C.Model.Debug := Ord(Config.Model.Debug);