Add Pascal API for speech enhancement GTCRN models (#1992)
This commit is contained in:
26
.github/workflows/pascal.yaml
vendored
26
.github/workflows/pascal.yaml
vendored
@@ -111,20 +111,36 @@ jobs:
|
|||||||
ls -lh install/lib/
|
ls -lh install/lib/
|
||||||
|
|
||||||
if [[ ${{ matrix.os }} == 'windows-latest' ]]; then
|
if [[ ${{ matrix.os }} == 'windows-latest' ]]; then
|
||||||
cp -v install/lib/*.dll ../pascal-api-examples/read-wav
|
|
||||||
cp -v install/lib/*.dll ../pascal-api-examples/streaming-asr
|
|
||||||
cp -v install/lib/*.dll ../pascal-api-examples/non-streaming-asr
|
cp -v install/lib/*.dll ../pascal-api-examples/non-streaming-asr
|
||||||
|
cp -v install/lib/*.dll ../pascal-api-examples/read-wav
|
||||||
|
cp -v install/lib/*.dll ../pascal-api-examples/speaker-diarization
|
||||||
|
cp -v install/lib/*.dll ../pascal-api-examples/speech-enhancement-gtcrn
|
||||||
|
cp -v install/lib/*.dll ../pascal-api-examples/streaming-asr
|
||||||
|
cp -v install/lib/*.dll ../pascal-api-examples/tts
|
||||||
cp -v install/lib/*.dll ../pascal-api-examples/vad
|
cp -v install/lib/*.dll ../pascal-api-examples/vad
|
||||||
cp -v install/lib/*.dll ../pascal-api-examples/vad-with-non-streaming-asr
|
cp -v install/lib/*.dll ../pascal-api-examples/vad-with-non-streaming-asr
|
||||||
|
|
||||||
cp -v ../sherpa-onnx/pascal-api/*.pas ../pascal-api-examples/read-wav
|
|
||||||
cp -v ../sherpa-onnx/pascal-api/*.pas ../pascal-api-examples/streaming-asr
|
|
||||||
cp -v ../sherpa-onnx/pascal-api/*.pas ../pascal-api-examples/non-streaming-asr
|
cp -v ../sherpa-onnx/pascal-api/*.pas ../pascal-api-examples/non-streaming-asr
|
||||||
|
cp -v ../sherpa-onnx/pascal-api/*.pas ../pascal-api-examples/read-wav
|
||||||
|
cp -v ../sherpa-onnx/pascal-api/*.pas ../pascal-api-examples/speaker-diarization
|
||||||
|
cp -v ../sherpa-onnx/pascal-api/*.pas ../pascal-api-examples/speech-enhancement-gtcrn
|
||||||
|
cp -v ../sherpa-onnx/pascal-api/*.pas ../pascal-api-examples/streaming-asr
|
||||||
|
cp -v ../sherpa-onnx/pascal-api/*.pas ../pascal-api-examples/tts
|
||||||
cp -v ../sherpa-onnx/pascal-api/*.pas ../pascal-api-examples/vad
|
cp -v ../sherpa-onnx/pascal-api/*.pas ../pascal-api-examples/vad
|
||||||
cp -v ../sherpa-onnx/pascal-api/*.pas ../pascal-api-examples/vad-with-non-streaming-asr
|
cp -v ../sherpa-onnx/pascal-api/*.pas ../pascal-api-examples/vad-with-non-streaming-asr
|
||||||
cp -v ../sherpa-onnx/pascal-api/*.pas ../pascal-api-examples/tts
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
- name: Run Speech Enhancement test (GTCRN)
|
||||||
|
shell: bash
|
||||||
|
run: |
|
||||||
|
export PATH=/c/lazarus/fpc/3.2.2/bin/x86_64-win64:$PATH
|
||||||
|
|
||||||
|
cd ./pascal-api-examples
|
||||||
|
|
||||||
|
pushd speech-enhancement-gtcrn
|
||||||
|
./run-gtcrn.sh
|
||||||
|
ls -lh
|
||||||
|
|
||||||
- name: Run Pascal test (Non Streaming ASR)
|
- name: Run Pascal test (Non Streaming ASR)
|
||||||
shell: bash
|
shell: bash
|
||||||
run: |
|
run: |
|
||||||
|
|||||||
16
.github/workflows/test-go.yaml
vendored
16
.github/workflows/test-go.yaml
vendored
@@ -99,11 +99,21 @@ jobs:
|
|||||||
cp -v ./install/lib/sherpa-onnx-c-api.dll ../scripts/go/_internal/lib/x86_64-pc-windows-gnu/
|
cp -v ./install/lib/sherpa-onnx-c-api.dll ../scripts/go/_internal/lib/x86_64-pc-windows-gnu/
|
||||||
cp -v ./install/lib/onnxruntime.dll ../scripts/go/_internal/lib/x86_64-pc-windows-gnu/
|
cp -v ./install/lib/onnxruntime.dll ../scripts/go/_internal/lib/x86_64-pc-windows-gnu/
|
||||||
ls -lh ../scripts/go/_internal/lib/x86_64-pc-windows-gnu/
|
ls -lh ../scripts/go/_internal/lib/x86_64-pc-windows-gnu/
|
||||||
cp -v ../scripts/go/_internal/lib/x86_64-pc-windows-gnu/*.dll ../scripts/go/_internal/speaker-identification/
|
cp -v ../scripts/go/_internal/lib/x86_64-pc-windows-gnu/*.dll ../scripts/go/_internal/add-punctuation
|
||||||
cp -v ../scripts/go/_internal/lib/x86_64-pc-windows-gnu/*.dll ../scripts/go/_internal/streaming-hlg-decoding/
|
cp -v ../scripts/go/_internal/lib/x86_64-pc-windows-gnu/*.dll ../scripts/go/_internal/audio-tagging
|
||||||
cp -v ../scripts/go/_internal/lib/x86_64-pc-windows-gnu/*.dll ../scripts/go/_internal/non-streaming-tts/
|
cp -v ../scripts/go/_internal/lib/x86_64-pc-windows-gnu/*.dll ../scripts/go/_internal/keyword-spotting-from-file/
|
||||||
cp -v ../scripts/go/_internal/lib/x86_64-pc-windows-gnu/*.dll ../scripts/go/_internal/non-streaming-decode-files/
|
cp -v ../scripts/go/_internal/lib/x86_64-pc-windows-gnu/*.dll ../scripts/go/_internal/non-streaming-decode-files/
|
||||||
|
cp -v ../scripts/go/_internal/lib/x86_64-pc-windows-gnu/*.dll ../scripts/go/_internal/non-streaming-speaker-diarization/
|
||||||
|
cp -v ../scripts/go/_internal/lib/x86_64-pc-windows-gnu/*.dll ../scripts/go/_internal/non-streaming-tts/
|
||||||
|
cp -v ../scripts/go/_internal/lib/x86_64-pc-windows-gnu/*.dll ../scripts/go/_internal/speaker-identification/
|
||||||
|
cp -v ../scripts/go/_internal/lib/x86_64-pc-windows-gnu/*.dll ../scripts/go/_internal/speech-enhancement-gtcrn
|
||||||
cp -v ../scripts/go/_internal/lib/x86_64-pc-windows-gnu/*.dll ../scripts/go/_internal/streaming-decode-files/
|
cp -v ../scripts/go/_internal/lib/x86_64-pc-windows-gnu/*.dll ../scripts/go/_internal/streaming-decode-files/
|
||||||
|
cp -v ../scripts/go/_internal/lib/x86_64-pc-windows-gnu/*.dll ../scripts/go/_internal/streaming-hlg-decoding/
|
||||||
|
cp -v ../scripts/go/_internal/lib/x86_64-pc-windows-gnu/*.dll ../scripts/go/_internal/vad
|
||||||
|
cp -v ../scripts/go/_internal/lib/x86_64-pc-windows-gnu/*.dll ../scripts/go/_internal/vad-asr-paraformer
|
||||||
|
cp -v ../scripts/go/_internal/lib/x86_64-pc-windows-gnu/*.dll ../scripts/go/_internal/vad-asr-whisper
|
||||||
|
cp -v ../scripts/go/_internal/lib/x86_64-pc-windows-gnu/*.dll ../scripts/go/_internal/vad-speaker-identification
|
||||||
|
cp -v ../scripts/go/_internal/lib/x86_64-pc-windows-gnu/*.dll ../scripts/go/_internal/vad-spoken-language-identification
|
||||||
|
|
||||||
cp -v ../scripts/go/_internal/lib/x86_64-pc-windows-gnu/*.dll $upload_dir
|
cp -v ../scripts/go/_internal/lib/x86_64-pc-windows-gnu/*.dll $upload_dir
|
||||||
else
|
else
|
||||||
|
|||||||
1
pascal-api-examples/speech-enhancement-gtcrn/.gitignore
vendored
Normal file
1
pascal-api-examples/speech-enhancement-gtcrn/.gitignore
vendored
Normal file
@@ -0,0 +1 @@
|
|||||||
|
gtcrn
|
||||||
43
pascal-api-examples/speech-enhancement-gtcrn/gtcrn.pas
Normal file
43
pascal-api-examples/speech-enhancement-gtcrn/gtcrn.pas
Normal file
@@ -0,0 +1,43 @@
|
|||||||
|
{ Copyright (c) 2025 Xiaomi Corporation }
|
||||||
|
{
|
||||||
|
This file shows how to use the speech enhancement API from sherpa-onnx
|
||||||
|
|
||||||
|
Please first download files used in this script before you run it.
|
||||||
|
|
||||||
|
wget https://github.com/k2-fsa/sherpa-onnx/releases/download/speech-enhancement-models/gtcrn_simple.onnx
|
||||||
|
wget https://github.com/k2-fsa/sherpa-onnx/releases/download/speech-enhancement-models/inp_16k.wav
|
||||||
|
}
|
||||||
|
program main;
|
||||||
|
|
||||||
|
{$mode delphi}
|
||||||
|
|
||||||
|
uses
|
||||||
|
sherpa_onnx,
|
||||||
|
SysUtils;
|
||||||
|
|
||||||
|
var
|
||||||
|
Wave: TSherpaOnnxWave;
|
||||||
|
|
||||||
|
Config: TSherpaOnnxOfflineSpeechDenoiserConfig;
|
||||||
|
Sd: TSherpaOnnxOfflineSpeechDenoiser;
|
||||||
|
Audio: TSherpaOnnxDenoisedAudio;
|
||||||
|
begin
|
||||||
|
Wave := SherpaOnnxReadWave('./inp_16k.wav');
|
||||||
|
|
||||||
|
Initialize(Config);
|
||||||
|
|
||||||
|
Config.Model.Gtcrn.Model := './gtcrn_simple.onnx';
|
||||||
|
Config.Model.NumThreads:= 1;
|
||||||
|
Config.Model.Debug:= True;
|
||||||
|
Config.Model.Provider:= 'cpu';
|
||||||
|
|
||||||
|
Sd := TSherpaOnnxOfflineSpeechDenoiser.Create(Config);
|
||||||
|
|
||||||
|
Audio := Sd.Run(Wave.Samples, Wave.SampleRate);
|
||||||
|
|
||||||
|
SherpaOnnxWriteWave('./enhanced-16k.wav', Audio.Samples, Audio.SampleRate);
|
||||||
|
WriteLn('Saved to ./enhanced-16k.wav');
|
||||||
|
|
||||||
|
FreeAndNil(Sd);
|
||||||
|
end.
|
||||||
|
|
||||||
44
pascal-api-examples/speech-enhancement-gtcrn/run-gtcrn.sh
Executable file
44
pascal-api-examples/speech-enhancement-gtcrn/run-gtcrn.sh
Executable file
@@ -0,0 +1,44 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
set -ex
|
||||||
|
|
||||||
|
SCRIPT_DIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )
|
||||||
|
SHERPA_ONNX_DIR=$(cd $SCRIPT_DIR/../.. && pwd)
|
||||||
|
|
||||||
|
echo "SHERPA_ONNX_DIR: $SHERPA_ONNX_DIR"
|
||||||
|
|
||||||
|
if [[ ! -f ../../build/install/lib/libsherpa-onnx-c-api.dylib && ! -f ../../build/install/lib/libsherpa-onnx-c-api.so && ! -f ../../build/install/lib/sherpa-onnx-c-api.dll ]]; then
|
||||||
|
mkdir -p ../../build
|
||||||
|
pushd ../../build
|
||||||
|
cmake \
|
||||||
|
-DCMAKE_INSTALL_PREFIX=./install \
|
||||||
|
-DSHERPA_ONNX_ENABLE_PYTHON=OFF \
|
||||||
|
-DSHERPA_ONNX_ENABLE_TESTS=OFF \
|
||||||
|
-DSHERPA_ONNX_ENABLE_CHECK=OFF \
|
||||||
|
-DBUILD_SHARED_LIBS=ON \
|
||||||
|
-DSHERPA_ONNX_ENABLE_PORTAUDIO=OFF \
|
||||||
|
..
|
||||||
|
|
||||||
|
cmake --build . --target install --config Release
|
||||||
|
popd
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ ! -f ./gtcrn_simple.onnx ]; then
|
||||||
|
curl -SL -O https://github.com/k2-fsa/sherpa-onnx/releases/download/speech-enhancement-models/gtcrn_simple.onnx
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ ! -f ./inp_16k.wav ]; then
|
||||||
|
curl -SL -O https://github.com/k2-fsa/sherpa-onnx/releases/download/speech-enhancement-models/inp_16k.wav
|
||||||
|
fi
|
||||||
|
|
||||||
|
fpc \
|
||||||
|
-dSHERPA_ONNX_USE_SHARED_LIBS \
|
||||||
|
-Fu$SHERPA_ONNX_DIR/sherpa-onnx/pascal-api \
|
||||||
|
-Fl$SHERPA_ONNX_DIR/build/install/lib \
|
||||||
|
./gtcrn.pas
|
||||||
|
|
||||||
|
export LD_LIBRARY_PATH=$SHERPA_ONNX_DIR/build/install/lib:$LD_LIBRARY_PATH
|
||||||
|
export DYLD_LIBRARY_PATH=$SHERPA_ONNX_DIR/build/install/lib:$DYLD_LIBRARY_PATH
|
||||||
|
|
||||||
|
./gtcrn
|
||||||
|
|
||||||
@@ -515,6 +515,44 @@ type
|
|||||||
property GetSampleRate: Integer Read SampleRate;
|
property GetSampleRate: Integer Read SampleRate;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
TSherpaOnnxOfflineSpeechDenoiserGtcrnModelConfig = record
|
||||||
|
Model: AnsiString;
|
||||||
|
function ToString: AnsiString;
|
||||||
|
end;
|
||||||
|
|
||||||
|
TSherpaOnnxOfflineSpeechDenoiserModelConfig = record
|
||||||
|
Gtcrn: TSherpaOnnxOfflineSpeechDenoiserGtcrnModelConfig;
|
||||||
|
NumThreads: Integer;
|
||||||
|
Debug: Boolean;
|
||||||
|
Provider: AnsiString;
|
||||||
|
function ToString: AnsiString;
|
||||||
|
class operator Initialize({$IFDEF FPC}var{$ELSE}out{$ENDIF} Dest: TSherpaOnnxOfflineSpeechDenoiserModelConfig);
|
||||||
|
end;
|
||||||
|
|
||||||
|
TSherpaOnnxOfflineSpeechDenoiserConfig = record
|
||||||
|
Model: TSherpaOnnxOfflineSpeechDenoiserModelConfig;
|
||||||
|
function ToString: AnsiString;
|
||||||
|
end;
|
||||||
|
|
||||||
|
TSherpaOnnxDenoisedAudio = record
|
||||||
|
Samples: array of Single;
|
||||||
|
SampleRate: Integer;
|
||||||
|
end;
|
||||||
|
|
||||||
|
TSherpaOnnxOfflineSpeechDenoiser = class
|
||||||
|
private
|
||||||
|
Handle: Pointer;
|
||||||
|
SampleRate: Integer;
|
||||||
|
_Config: TSherpaOnnxOfflineSpeechDenoiserConfig;
|
||||||
|
public
|
||||||
|
constructor Create(Config: TSherpaOnnxOfflineSpeechDenoiserConfig);
|
||||||
|
destructor Destroy; override;
|
||||||
|
|
||||||
|
function Run(Samples: array of Single; InputSampleRate: Integer): TSherpaOnnxDenoisedAudio;
|
||||||
|
|
||||||
|
property GetHandle: Pointer Read Handle;
|
||||||
|
property GetSampleRate: Integer Read SampleRate;
|
||||||
|
end;
|
||||||
|
|
||||||
{ It supports reading a single channel wave with 16-bit encoded samples.
|
{ It supports reading a single channel wave with 16-bit encoded samples.
|
||||||
Samples are normalized to the range [-1, 1].
|
Samples are normalized to the range [-1, 1].
|
||||||
@@ -851,6 +889,31 @@ type
|
|||||||
|
|
||||||
PSherpaOnnxOfflineSpeakerDiarizationConfig = ^SherpaOnnxOfflineSpeakerDiarizationConfig;
|
PSherpaOnnxOfflineSpeakerDiarizationConfig = ^SherpaOnnxOfflineSpeakerDiarizationConfig;
|
||||||
|
|
||||||
|
SherpaOnnxOfflineSpeechDenoiserGtcrnModelConfig = record
|
||||||
|
Model: PAnsiChar;
|
||||||
|
end;
|
||||||
|
|
||||||
|
SherpaOnnxOfflineSpeechDenoiserModelConfig = record
|
||||||
|
Gtcrn: SherpaOnnxOfflineSpeechDenoiserGtcrnModelConfig;
|
||||||
|
NumThreads: cint32;
|
||||||
|
Debug: cint32;
|
||||||
|
Provider: PAnsiChar;
|
||||||
|
end;
|
||||||
|
|
||||||
|
SherpaOnnxOfflineSpeechDenoiserConfig = record
|
||||||
|
Model: SherpaOnnxOfflineSpeechDenoiserModelConfig;
|
||||||
|
end;
|
||||||
|
|
||||||
|
PSherpaOnnxOfflineSpeechDenoiserConfig = ^SherpaOnnxOfflineSpeechDenoiserConfig;
|
||||||
|
|
||||||
|
SherpaOnnxDenoisedAudio = record
|
||||||
|
Samples: pcfloat;
|
||||||
|
N: cint32;
|
||||||
|
SampleRate: cint32;
|
||||||
|
end;
|
||||||
|
|
||||||
|
PSherpaOnnxDenoisedAudio = ^SherpaOnnxDenoisedAudio;
|
||||||
|
|
||||||
function SherpaOnnxCreateLinearResampler(SampleRateInHz: cint32;
|
function SherpaOnnxCreateLinearResampler(SampleRateInHz: cint32;
|
||||||
SampleRateOutHz: cint32;
|
SampleRateOutHz: cint32;
|
||||||
FilterCutoffHz: cfloat;
|
FilterCutoffHz: cfloat;
|
||||||
@@ -872,6 +935,22 @@ procedure SherpaOnnxLinearResamplerResampleFree(P: PSherpaOnnxResampleOut); cdec
|
|||||||
procedure SherpaOnnxLinearResamplerReset(P: Pointer); cdecl;
|
procedure SherpaOnnxLinearResamplerReset(P: Pointer); cdecl;
|
||||||
external SherpaOnnxLibName;
|
external SherpaOnnxLibName;
|
||||||
|
|
||||||
|
function SherpaOnnxCreateOfflineSpeechDenoiser(Config: PSherpaOnnxOfflineSpeechDenoiserConfig): Pointer; cdecl;
|
||||||
|
external SherpaOnnxLibName;
|
||||||
|
|
||||||
|
procedure SherpaOnnxDestroyOfflineSpeechDenoiser(P: Pointer); cdecl;
|
||||||
|
external SherpaOnnxLibName;
|
||||||
|
|
||||||
|
function SherpaOnnxOfflineSpeechDenoiserGetSampleRate(P: Pointer): cint32; cdecl;
|
||||||
|
external SherpaOnnxLibName;
|
||||||
|
|
||||||
|
function SherpaOnnxOfflineSpeechDenoiserRun(P: Pointer;
|
||||||
|
Samples: pcfloat; N: cint32;SampleRate: cint32):PSherpaOnnxDenoisedAudio; cdecl;
|
||||||
|
external SherpaOnnxLibName;
|
||||||
|
|
||||||
|
procedure SherpaOnnxDestroyDenoisedAudio(Audio: Pointer); cdecl;
|
||||||
|
external SherpaOnnxLibName;
|
||||||
|
|
||||||
function SherpaOnnxCreateOfflineSpeakerDiarization(Config: PSherpaOnnxOfflineSpeakerDiarizationConfig): Pointer; cdecl;
|
function SherpaOnnxCreateOfflineSpeakerDiarization(Config: PSherpaOnnxOfflineSpeakerDiarizationConfig): Pointer; cdecl;
|
||||||
external SherpaOnnxLibName;
|
external SherpaOnnxLibName;
|
||||||
|
|
||||||
@@ -2358,4 +2437,79 @@ begin
|
|||||||
SherpaOnnxOfflineSpeakerDiarizationDestroyResult(R);
|
SherpaOnnxOfflineSpeakerDiarizationDestroyResult(R);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
function TSherpaOnnxOfflineSpeechDenoiserGtcrnModelConfig.ToString: AnsiString;
|
||||||
|
begin
|
||||||
|
Result := Format('TSherpaOnnxOfflineSpeechDenoiserGtcrnModelConfig(' +
|
||||||
|
'Model := %s)', [Self.Model]);
|
||||||
|
end;
|
||||||
|
|
||||||
|
function TSherpaOnnxOfflineSpeechDenoiserModelConfig.ToString: AnsiString;
|
||||||
|
begin
|
||||||
|
Result := Format('TSherpaOnnxOfflineSpeechDenoiserModelConfig(' +
|
||||||
|
'Gtcrn := %s, '+
|
||||||
|
'NumThreads := %d, '+
|
||||||
|
'Debug := %s, '+
|
||||||
|
'Provider := %s)',
|
||||||
|
[Self.Gtcrn.ToString, Self.NumThreads, Self.Debug.ToString, Self.Provider]);
|
||||||
|
end;
|
||||||
|
|
||||||
|
class operator TSherpaOnnxOfflineSpeechDenoiserModelConfig.Initialize({$IFDEF FPC}var{$ELSE}out{$ENDIF} Dest: TSherpaOnnxOfflineSpeechDenoiserModelConfig);
|
||||||
|
begin
|
||||||
|
Dest.NumThreads := 1;
|
||||||
|
Dest.Debug := False;
|
||||||
|
Dest.Provider := 'cpu';
|
||||||
|
end;
|
||||||
|
|
||||||
|
function TSherpaOnnxOfflineSpeechDenoiserConfig.ToString: AnsiString;
|
||||||
|
begin
|
||||||
|
Result := Format('TSherpaOnnxOfflineSpeechDenoiserConfig(' +
|
||||||
|
'Model := %s)', [Self.Model.ToString]);
|
||||||
|
end;
|
||||||
|
|
||||||
|
constructor TSherpaOnnxOfflineSpeechDenoiser.Create(Config: TSherpaOnnxOfflineSpeechDenoiserConfig);
|
||||||
|
var
|
||||||
|
C: SherpaOnnxOfflineSpeechDenoiserConfig;
|
||||||
|
begin
|
||||||
|
C := Default(SherpaOnnxOfflineSpeechDenoiserConfig);
|
||||||
|
C.Model.Gtcrn.Model := PAnsiChar(Config.Model.Gtcrn.Model);
|
||||||
|
C.Model.NumThreads := Config.Model.NumThreads;
|
||||||
|
C.Model.Debug := Ord(Config.Model.Debug);
|
||||||
|
C.Model.Provider := PAnsiChar(Config.Model.Provider);
|
||||||
|
|
||||||
|
Self.Handle := SherpaOnnxCreateOfflineSpeechDenoiser(@C);
|
||||||
|
Self._Config := Config;
|
||||||
|
Self.SampleRate := 0;
|
||||||
|
|
||||||
|
if Self.Handle <> nil then
|
||||||
|
begin
|
||||||
|
Self.SampleRate := SherpaOnnxOfflineSpeechDenoiserGetSampleRate(Self.Handle);
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
destructor TSherpaOnnxOfflineSpeechDenoiser.Destroy;
|
||||||
|
begin
|
||||||
|
SherpaOnnxDestroyOfflineSpeechDenoiser(Self.Handle);
|
||||||
|
Self.Handle := nil;
|
||||||
|
end;
|
||||||
|
|
||||||
|
function TSherpaOnnxOfflineSpeechDenoiser.Run(Samples: array of Single; InputSampleRate: Integer): TSherpaOnnxDenoisedAudio;
|
||||||
|
var
|
||||||
|
Audio: PSherpaOnnxDenoisedAudio;
|
||||||
|
I: Integer;
|
||||||
|
begin
|
||||||
|
Result := Default(TSherpaOnnxDenoisedAudio);
|
||||||
|
|
||||||
|
Audio := SherpaOnnxOfflineSpeechDenoiserRun(Self.Handle, pcfloat(Samples), Length(Samples), InputSampleRate);
|
||||||
|
|
||||||
|
SetLength(Result.Samples, Audio^.N);
|
||||||
|
Result.SampleRate := Audio^.SampleRate;
|
||||||
|
|
||||||
|
for I := Low(Result.Samples) to High(Result.Samples) do
|
||||||
|
begin
|
||||||
|
Result.Samples[I] := Audio^.Samples[I];
|
||||||
|
end;
|
||||||
|
|
||||||
|
SherpaOnnxDestroyDenoisedAudio(audio);
|
||||||
|
end;
|
||||||
|
|
||||||
end.
|
end.
|
||||||
|
|||||||
Reference in New Issue
Block a user