@@ -513,4 +513,49 @@ void KeywordSpotter::Reset(const OnlineStream *s) const {
513
513
SherpaOnnxResetKeywordStream (p_, s->Get ());
514
514
}
515
515
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
+
516
561
} // namespace sherpa_onnx::cxx
0 commit comments