Skip to content

Commit 58690c9

Browse files
committed
Add CI
1 parent 4c708c6 commit 58690c9

File tree

5 files changed

+123
-0
lines changed

5 files changed

+123
-0
lines changed

.github/workflows/c-api.yaml

+2
Original file line numberDiff line numberDiff line change
@@ -108,6 +108,8 @@ jobs:
108108
cp -v inp_16k.wav denoised-wavs
109109
cp -v enhanced_16k.wav denoised-wavs
110110
111+
rm $name
112+
111113
- uses: actions/upload-artifact@v4
112114
with:
113115
name: denoised-wavs-${{ matrix.os }}

.github/workflows/cxx-api.yaml

+38
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,44 @@ jobs:
8181
otool -L ./install/lib/libsherpa-onnx-cxx-api.dylib
8282
fi
8383
84+
- name: Test Speech Enhancement (GTCRN)
85+
shell: bash
86+
run: |
87+
name=speech-enhancement-gtcrn-cxx-api
88+
g++ -std=c++17 -o $name ./cxx-api-examples/$name.cc \
89+
-I ./build/install/include \
90+
-L ./build/install/lib/ \
91+
-l sherpa-onnx-cxx-api \
92+
-l sherpa-onnx-c-api \
93+
-l onnxruntime
94+
95+
ls -lh $name
96+
97+
export LD_LIBRARY_PATH=$PWD/build/install/lib:$LD_LIBRARY_PATH
98+
export DYLD_LIBRARY_PATH=$PWD/build/install/lib:$DYLD_LIBRARY_PATH
99+
100+
if [[ ${{ matrix.os }} == ubuntu-latest || ${{ matrix.os }} == ubuntu-22.04-arm ]]; then
101+
ldd ./$name
102+
echo "----"
103+
readelf -d ./$name
104+
fi
105+
106+
curl -SL -O https://github.com/k2-fsa/sherpa-onnx/releases/download/speech-enhancement-models/gtcrn_simple.onnx
107+
curl -SL -O https://github.com/k2-fsa/sherpa-onnx/releases/download/speech-enhancement-models/inp_16k.wav
108+
109+
./$name
110+
111+
mkdir denoised-wavs
112+
cp -v inp_16k.wav denoised-wavs
113+
cp -v enhanced_16k.wav denoised-wavs
114+
115+
rm $name
116+
117+
- uses: actions/upload-artifact@v4
118+
with:
119+
name: denoised-wavs-cxx-${{ matrix.os }}
120+
path: ./denoised-wavs/*.wav
121+
84122
- name: Test FireRedAsr
85123
shell: bash
86124
run: |

cxx-api-examples/speech-enhancement-gtcrn-cxx-api.cc

+2
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,9 @@ wget https://github.com/k2-fsa/sherpa-onnx/releases/download/speech-enhancement-
1414
wget https://github.com/k2-fsa/sherpa-onnx/releases/download/speech-enhancement-models/inp_16k.wav
1515
*/
1616
// clang-format on
17+
#include <chrono> // NOLINT
1718
#include <iostream>
19+
#include <string>
1820

1921
#include "sherpa-onnx/c-api/cxx-api.h"
2022

sherpa-onnx/c-api/cxx-api.cc

+45
Original file line numberDiff line numberDiff line change
@@ -513,4 +513,49 @@ void KeywordSpotter::Reset(const OnlineStream *s) const {
513513
SherpaOnnxResetKeywordStream(p_, s->Get());
514514
}
515515

516+
// ============================================================
517+
// For Offline Speech Enhancement
518+
// ============================================================
519+
520+
OfflineSpeechDenoiser OfflineSpeechDenoiser::Create(
521+
const OfflineSpeechDenoiserConfig &config) {
522+
struct SherpaOnnxOfflineSpeechDenoiserConfig c;
523+
memset(&c, 0, sizeof(c));
524+
525+
c.model.gtcrn.model = config.model.gtcrn.model.c_str();
526+
527+
c.model.num_threads = config.model.num_threads;
528+
c.model.provider = config.model.provider.c_str();
529+
c.model.debug = config.model.debug;
530+
531+
auto p = SherpaOnnxCreateOfflineSpeechDenoiser(&c);
532+
533+
return OfflineSpeechDenoiser(p);
534+
}
535+
536+
void OfflineSpeechDenoiser::Destroy(
537+
const SherpaOnnxOfflineSpeechDenoiser *p) const {
538+
SherpaOnnxDestroyOfflineSpeechDenoiser(p);
539+
}
540+
541+
OfflineSpeechDenoiser::OfflineSpeechDenoiser(
542+
const SherpaOnnxOfflineSpeechDenoiser *p)
543+
: MoveOnly<OfflineSpeechDenoiser, SherpaOnnxOfflineSpeechDenoiser>(p) {}
544+
545+
DenoisedAudio OfflineSpeechDenoiser::Run(const float *samples, int32_t n,
546+
int32_t sample_rate) const {
547+
auto audio = SherpaOnnxOfflineSpeechDenoiserRun(p_, samples, n, sample_rate);
548+
549+
DenoisedAudio ans;
550+
ans.samples = {audio->samples, audio->samples + audio->n};
551+
ans.sample_rate = audio->sample_rate;
552+
SherpaOnnxDestroyDenoisedAudio(audio);
553+
554+
return ans;
555+
}
556+
557+
int32_t OfflineSpeechDenoiser::GetSampleRate() const {
558+
return SherpaOnnxOfflineSpeechDenoiserGetSampleRate(p_);
559+
}
560+
516561
} // namespace sherpa_onnx::cxx

sherpa-onnx/c-api/cxx-api.h

+36
Original file line numberDiff line numberDiff line change
@@ -464,6 +464,42 @@ class SHERPA_ONNX_API KeywordSpotter
464464
explicit KeywordSpotter(const SherpaOnnxKeywordSpotter *p);
465465
};
466466

467+
struct OfflineSpeechDenoiserGtcrnModelConfig {
468+
std::string model;
469+
};
470+
471+
struct OfflineSpeechDenoiserModelConfig {
472+
OfflineSpeechDenoiserGtcrnModelConfig gtcrn;
473+
int32_t num_threads = 1;
474+
int32_t debug = false;
475+
std::string provider = "cpu";
476+
};
477+
478+
struct OfflineSpeechDenoiserConfig {
479+
OfflineSpeechDenoiserModelConfig model;
480+
};
481+
482+
struct DenoisedAudio {
483+
std::vector<float> samples; // in the range [-1, 1]
484+
int32_t sample_rate;
485+
};
486+
487+
class SHERPA_ONNX_API OfflineSpeechDenoiser
488+
: public MoveOnly<OfflineSpeechDenoiser, SherpaOnnxOfflineSpeechDenoiser> {
489+
public:
490+
static OfflineSpeechDenoiser Create(
491+
const OfflineSpeechDenoiserConfig &config);
492+
493+
void Destroy(const SherpaOnnxOfflineSpeechDenoiser *p) const;
494+
495+
DenoisedAudio Run(const float *samples, int32_t n, int32_t sample_rate) const;
496+
497+
int32_t GetSampleRate() const;
498+
499+
private:
500+
explicit OfflineSpeechDenoiser(const SherpaOnnxOfflineSpeechDenoiser *p);
501+
};
502+
467503
} // namespace sherpa_onnx::cxx
468504

469505
#endif // SHERPA_ONNX_C_API_CXX_API_H_

0 commit comments

Comments
 (0)