Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 6 additions & 1 deletion c-api-examples/speech-enhancement-dpdfnet-c-api.c
Original file line number Diff line number Diff line change
Expand Up @@ -17,13 +17,17 @@ wget https://github.com/k2-fsa/sherpa-onnx/releases/download/speech-enhancement-
wget https://github.com/k2-fsa/sherpa-onnx/releases/download/speech-enhancement-models/dpdfnet4.onnx
wget https://github.com/k2-fsa/sherpa-onnx/releases/download/speech-enhancement-models/dpdfnet8.onnx
wget https://github.com/k2-fsa/sherpa-onnx/releases/download/speech-enhancement-models/dpdfnet2_48khz_hr.onnx
wget https://huggingface.co/Ceva-IP/DPDFNet/resolve/main/onnx/dpdfnet2_8khz.onnx
wget https://huggingface.co/Ceva-IP/DPDFNet/resolve/main/onnx/dpdfnet8_8khz.onnx
wget https://huggingface.co/Ceva-IP/DPDFNet/resolve/main/onnx/dpdfnet8_48khz_hr.onnx
wget https://github.com/k2-fsa/sherpa-onnx/releases/download/speech-enhancement-models/inp_16k.wav
*/
// clang-format on
//
// Use dpdfnet_baseline.onnx, dpdfnet2.onnx, dpdfnet4.onnx, or dpdfnet8.onnx
// for 16 kHz downstream ASR or speech recognition.
// Use dpdfnet2_48khz_hr.onnx for 48 kHz enhancement output.
// Use dpdfnet2_8khz.onnx or dpdfnet8_8khz.onnx for 8 kHz enhancement, and
// dpdfnet2_48khz_hr.onnx or dpdfnet8_48khz_hr.onnx for 48 kHz enhancement.
Comment thread
coderabbitai[bot] marked this conversation as resolved.
#include <stdio.h>
#include <string.h>

Expand All @@ -37,6 +41,7 @@ int32_t main() {

memset(&config, 0, sizeof(config));
config.model.dpdfnet.model = model_filename;
config.model.dpdfnet.attenuation_limit_db = 12.0f;

const SherpaOnnxOfflineSpeechDenoiser *sd =
SherpaOnnxCreateOfflineSpeechDenoiser(&config);
Expand Down
1 change: 1 addition & 0 deletions cxx-api-examples/speech-enhancement-dpdfnet-cxx-api.cc
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@ int32_t main() {
std::string wav_filename = "./inp_16k.wav";
std::string out_wave_filename = "./enhanced-dpdfnet.wav";
config.model.dpdfnet.model = model_filename;
config.model.dpdfnet.attenuation_limit_db = 12.0f;

auto sd = OfflineSpeechDenoiser::Create(config);
if (!sd.Get()) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,13 +26,17 @@ void main(List<String> arguments) async {
final outputWav = res['output-wav'] as String;

final config = sherpa_onnx.OfflineSpeechDenoiserConfig(
model: sherpa_onnx.OfflineSpeechDenoiserModelConfig(
gtcrn: const sherpa_onnx.OfflineSpeechDenoiserGtcrnModelConfig(),
dpdfnet: sherpa_onnx.OfflineSpeechDenoiserDpdfNetModelConfig(model: model),
numThreads: 1,
debug: true,
provider: 'cpu',
));
model: sherpa_onnx.OfflineSpeechDenoiserModelConfig(
gtcrn: const sherpa_onnx.OfflineSpeechDenoiserGtcrnModelConfig(),
dpdfnet: sherpa_onnx.OfflineSpeechDenoiserDpdfNetModelConfig(
model: model,
attenuationLimitDb: 12.0,
),
numThreads: 1,
debug: true,
provider: 'cpu',
),
);

final sd = sherpa_onnx.OfflineSpeechDenoiser(config);

Expand Down
1 change: 1 addition & 0 deletions dotnet-examples/speech-enhancement-dpdfnet/Program.cs
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@ static void Main(string[] args)
var model = "./dpdfnet_baseline.onnx";
var config = new OfflineSpeechDenoiserConfig();
config.Model.Dpdfnet.Model = model;
config.Model.Dpdfnet.AttenuationLimitDb = 12.0f;
config.Model.Debug = 1;
config.Model.NumThreads = 1;
var sd = new OfflineSpeechDenoiser(config);
Expand Down
2 changes: 2 additions & 0 deletions flutter/sherpa_onnx/lib/src/offline_speech_denoiser.dart
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,8 @@ class OfflineSpeechDenoiser {
final c = calloc<SherpaOnnxOfflineSpeechDenoiserConfig>();
c.ref.model.gtcrn.model = config.model.gtcrn.model.toNativeUtf8();
c.ref.model.dpdfnet.model = config.model.dpdfnet.model.toNativeUtf8();
c.ref.model.dpdfnet.attenuationLimitDb =
config.model.dpdfnet.attenuationLimitDb;

c.ref.model.numThreads = config.model.numThreads;
c.ref.model.debug = config.model.debug ? 1 : 0;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -35,25 +35,31 @@ class OfflineSpeechDenoiserGtcrnModelConfig {
class OfflineSpeechDenoiserDpdfNetModelConfig {
const OfflineSpeechDenoiserDpdfNetModelConfig({
this.model = '',
this.attenuationLimitDb = 0.0,
});

factory OfflineSpeechDenoiserDpdfNetModelConfig.fromJson(
Map<String, dynamic> json) {
return OfflineSpeechDenoiserDpdfNetModelConfig(
model: json['model'] as String? ?? '',
attenuationLimitDb:
(json['attenuation_limit_db'] as num?)?.toDouble() ?? 0.0,
);
}

@override
String toString() {
return 'OfflineSpeechDenoiserDpdfNetModelConfig(model: $model)';
return 'OfflineSpeechDenoiserDpdfNetModelConfig(model: $model, '
'attenuationLimitDb: $attenuationLimitDb)';
}

Map<String, dynamic> toJson() => {
'model': model,
'attenuation_limit_db': attenuationLimitDb,
};

final String model;
final double attenuationLimitDb;
}

/// Aggregate model configuration for [OfflineSpeechDenoiser].
Expand Down
3 changes: 3 additions & 0 deletions flutter/sherpa_onnx/lib/src/sherpa_onnx_bindings.dart
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,9 @@ final class SherpaOnnxOfflineSpeechDenoiserGtcrnModelConfig extends Struct {

final class SherpaOnnxOfflineSpeechDenoiserDpdfNetModelConfig extends Struct {
external Pointer<Utf8> model;

@Float()
external double attenuationLimitDb;
}

final class SherpaOnnxOfflineSpeechDenoiserModelConfig extends Struct {
Expand Down
1 change: 1 addition & 0 deletions go-api-examples/speech-enhancement-dpdfnet/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ func main() {

config := sherpa.OfflineSpeechDenoiserConfig{}
config.Model.DpdfNet.Model = "./dpdfnet_baseline.onnx"
config.Model.DpdfNet.AttenuationLimitDb = 12
config.Model.NumThreads = 1
config.Model.Debug = 1

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@ GetSpeechDenoiserDpdfNetModelConfig(Napi::Object obj) {

Napi::Object o = obj.Get("dpdfnet").As<Napi::Object>();
SHERPA_ONNX_ASSIGN_ATTR_STR(model, model);
SHERPA_ONNX_ASSIGN_ATTR_FLOAT(attenuation_limit_db, attenuationLimitDb);
return c;
}

Expand Down
9 changes: 7 additions & 2 deletions java-api-examples/NonStreamingSpeechEnhancementDpdfNet.java
Original file line number Diff line number Diff line change
Expand Up @@ -21,11 +21,16 @@ public static void main(String[] args) {
.setDebug(true)
.setProvider("cpu")
.setDpdfnet(
OfflineSpeechDenoiserDpdfNetModelConfig.builder().setModel(model).build());
OfflineSpeechDenoiserDpdfNetModelConfig.builder()
.setModel(model)
.setAttenuationLimitDb(12.0f)
.build());

OfflineSpeechDenoiserModelConfig modelConfig = builder.build();
OfflineSpeechDenoiserConfig config =
OfflineSpeechDenoiserConfig.builder().setModel(modelConfig).build();
OfflineSpeechDenoiserConfig.builder()
.setModel(modelConfig)
.build();

OfflineSpeechDenoiser speech_denoiser = new OfflineSpeechDenoiser(config);

Expand Down
3 changes: 2 additions & 1 deletion kotlin-api-examples/test_offline_speech_denoiser_dpdfnet.kt
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,8 @@ fun createOfflineSpeechDenoiserDpdfNet(): OfflineSpeechDenoiser {
val config = OfflineSpeechDenoiserConfig(
model = OfflineSpeechDenoiserModelConfig(
dpdfnet = OfflineSpeechDenoiserDpdfNetModelConfig(
model = "./dpdfnet_baseline.onnx"
model = "./dpdfnet_baseline.onnx",
attenuationLimitDb = 12.0f,
),
provider = "cpu",
numThreads = 1,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,10 @@ function createOfflineSpeechDenoiser() {
// https://github.com/k2-fsa/sherpa-onnx/releases/tag/speech-enhancement-models
const config = {
model: {
dpdfnet: {model: './dpdfnet_baseline.onnx'},
dpdfnet: {
model: './dpdfnet_baseline.onnx',
attenuationLimitDb: 12,
},
debug: true,
numThreads: 1,
},
Expand Down
2 changes: 1 addition & 1 deletion nodejs-examples/test-offline-speech-enhancement-dpdfnet.js
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ function createOfflineSpeechDenoiser() {
const model = './dpdfnet2.onnx';
let config = {
model: {
dpdfnet: {model},
dpdfnet: {model, attenuationLimitDb: 12},
debug: 1,
},
};
Expand Down
1 change: 1 addition & 0 deletions pascal-api-examples/speech-enhancement-dpdfnet/dpdfnet.pas
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@

Initialize(Config);
Config.Model.DpdfNet.Model := './dpdfnet_baseline.onnx';
Config.Model.DpdfNet.AttenuationLimitDb := 12.0;
Config.Model.NumThreads:= 1;
Config.Model.Debug:= True;
Config.Model.Provider:= 'cpu';
Expand Down
5 changes: 3 additions & 2 deletions python-api-examples/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -21,9 +21,10 @@

- [online-speech-enhancement-dpdfnet.py](./online-speech-enhancement-dpdfnet.py)
It shows how to use the online speech denoiser API with DPDFNet.
models. Use 16 kHz DPDFNet models such as `dpdfnet_baseline.onnx`,
Use 16 kHz DPDFNet models such as `dpdfnet_baseline.onnx`,
`dpdfnet2.onnx`, `dpdfnet4.onnx`, or `dpdfnet8.onnx` for downstream ASR and
`dpdfnet2_48khz_hr.onnx` for 48 kHz enhancement output.
`dpdfnet2_8khz.onnx` or `dpdfnet8_8khz.onnx` for 8 kHz enhancement.
Use `dpdfnet2_48khz_hr.onnx` or `dpdfnet8_48khz_hr.onnx` for 48 kHz output.

- [pocket-tts.py](./pocket-tts.py) It shows how to use PocketTTS with the
`GenerationConfig` API.
Expand Down
11 changes: 8 additions & 3 deletions python-api-examples/offline-speech-enhancement-dpdfnet.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,11 +15,15 @@
wget https://github.com/k2-fsa/sherpa-onnx/releases/download/speech-enhancement-models/dpdfnet4.onnx
wget https://github.com/k2-fsa/sherpa-onnx/releases/download/speech-enhancement-models/dpdfnet8.onnx
wget https://github.com/k2-fsa/sherpa-onnx/releases/download/speech-enhancement-models/dpdfnet2_48khz_hr.onnx
wget https://huggingface.co/Ceva-IP/DPDFNet/resolve/main/onnx/dpdfnet2_8khz.onnx
wget https://huggingface.co/Ceva-IP/DPDFNet/resolve/main/onnx/dpdfnet8_8khz.onnx
wget https://huggingface.co/Ceva-IP/DPDFNet/resolve/main/onnx/dpdfnet8_48khz_hr.onnx
wget https://github.com/k2-fsa/sherpa-onnx/releases/download/speech-enhancement-models/speech_with_noise.wav

Use 16 kHz DPDFNet models such as `dpdfnet_baseline.onnx`, `dpdfnet2.onnx`,
`dpdfnet4.onnx`, or `dpdfnet8.onnx` for downstream ASR or speech recognition.
Use `dpdfnet2_48khz_hr.onnx` for 48 kHz enhancement output.
Use `dpdfnet2_8khz.onnx` or `dpdfnet8_8khz.onnx` for 8 kHz enhancement, and
`dpdfnet2_48khz_hr.onnx` or `dpdfnet8_48khz_hr.onnx` for 48 kHz output.
"""

import time
Expand All @@ -45,12 +49,13 @@ def create_speech_denoiser():
config = sherpa_onnx.OfflineSpeechDenoiserConfig(
model=sherpa_onnx.OfflineSpeechDenoiserModelConfig(
dpdfnet=sherpa_onnx.OfflineSpeechDenoiserDpdfNetModelConfig(
model=model_filename
model=model_filename,
attenuation_limit_db=12.0,
),
debug=False,
num_threads=1,
provider="cpu",
)
),
)
if not config.validate():
print(config)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ fn main() -> anyhow::Result<()> {
model: sherpa_onnx::OfflineSpeechDenoiserModelConfig {
dpdfnet: OfflineSpeechDenoiserDpdfNetModelConfig {
model: Some(args.model),
attenuation_limit_db: 12.0,
},
..Default::default()
},
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
use clap::Parser;
use sherpa_onnx::{
write, OfflineSpeechDenoiserDpdfNetModelConfig, OnlineSpeechDenoiser, OnlineSpeechDenoiserConfig,
Wave,
write, OfflineSpeechDenoiserDpdfNetModelConfig, OnlineSpeechDenoiser,
OnlineSpeechDenoiserConfig, Wave,
};

#[derive(Parser, Debug)]
Expand All @@ -24,6 +24,7 @@ fn main() -> anyhow::Result<()> {
model: sherpa_onnx::OfflineSpeechDenoiserModelConfig {
dpdfnet: OfflineSpeechDenoiserDpdfNetModelConfig {
model: Some(args.model),
..Default::default()
},
..Default::default()
},
Expand Down
2 changes: 2 additions & 0 deletions scripts/dotnet/OfflineSpeechDenoiserDpdfNetModelConfig.cs
Original file line number Diff line number Diff line change
Expand Up @@ -10,9 +10,11 @@ public struct OfflineSpeechDenoiserDpdfNetModelConfig
public OfflineSpeechDenoiserDpdfNetModelConfig()
{
Model = "";
AttenuationLimitDb = 0.0f;
}

[MarshalAs(UnmanagedType.LPStr)]
public string Model;
public float AttenuationLimitDb;
}
}
4 changes: 3 additions & 1 deletion scripts/go/sherpa_onnx.go
Original file line number Diff line number Diff line change
Expand Up @@ -2570,7 +2570,8 @@ type OfflineSpeechDenoiserGtcrnModelConfig struct {
}

type OfflineSpeechDenoiserDpdfNetModelConfig struct {
Model string
Model string
AttenuationLimitDb float32
}

type OfflineSpeechDenoiserModelConfig struct {
Expand Down Expand Up @@ -2650,6 +2651,7 @@ func NewOfflineSpeechDenoiser(config *OfflineSpeechDenoiserConfig) *OfflineSpeec
defer C.free(unsafe.Pointer(c.model.gtcrn.model))
c.model.dpdfnet.model = C.CString(config.Model.DpdfNet.Model)
defer C.free(unsafe.Pointer(c.model.dpdfnet.model))
c.model.dpdfnet.attenuation_limit_db = C.float(config.Model.DpdfNet.AttenuationLimitDb)

c.model.num_threads = C.int(config.Model.NumThreads)
c.model.debug = C.int(config.Model.Debug)
Expand Down
15 changes: 8 additions & 7 deletions scripts/node-addon-api/lib/types.js
Original file line number Diff line number Diff line change
Expand Up @@ -616,9 +616,10 @@
*/

/**
* Offline Speech Denoiser model config
* @typedef {Object} OfflineSpeechDenoiserDpdfNetModelConfig
* @property {string} [model]
* Offline Speech Denoiser model config
* @typedef {Object} OfflineSpeechDenoiserDpdfNetModelConfig
* @property {string} [model]
* @property {number} [attenuationLimitDb] Offline attenuation limit in dB.
*/

/**
Expand All @@ -632,10 +633,10 @@
*/

/**
* Offline Speech Denoiser configuration (partial).
* @typedef {Object} OfflineSpeechDenoiserConfig
* @property {OfflineSpeechDenoiserModelConfig} [model]
*/
* Offline Speech Denoiser configuration (partial).
* @typedef {Object} OfflineSpeechDenoiserConfig
* @property {OfflineSpeechDenoiserModelConfig} [model]
*/

/**
* Online Speech Denoiser configuration (partial).
Expand Down
2 changes: 2 additions & 0 deletions sherpa-onnx/c-api/c-api.cc
Original file line number Diff line number Diff line change
Expand Up @@ -2828,6 +2828,8 @@ static sherpa_onnx::OfflineSpeechDenoiserConfig GetOfflineSpeechDenoiserConfig(
c.model.debug = config->model.debug;
c.model.provider = SHERPA_ONNX_OR(config->model.provider, "cpu");
c.model.dpdfnet.model = SHERPA_ONNX_OR(config->model.dpdfnet.model, "");
c.model.dpdfnet.attenuation_limit_db =
config->model.dpdfnet.attenuation_limit_db;

if (c.model.debug) {
#if __OHOS__
Expand Down
9 changes: 9 additions & 0 deletions sherpa-onnx/c-api/c-api.h
Original file line number Diff line number Diff line change
Expand Up @@ -4098,6 +4098,15 @@ typedef struct SherpaOnnxOfflineSpeechDenoiserGtcrnModelConfig {
typedef struct SherpaOnnxOfflineSpeechDenoiserDpdfNetModelConfig {
/** Model filename. */
const char *model;
/**
* Offline attenuation limit in dB.
*
* Values greater than 0 limit suppression by blending aligned noisy spectra
* into the enhanced spectra with a noisy-signal weight of
* `10^(-limit_db / 20)`. The maximum finite value is 100. Set to 0 or
* infinity to disable the limit.
*/
float attenuation_limit_db;
} SherpaOnnxOfflineSpeechDenoiserDpdfNetModelConfig;

/**
Expand Down
1 change: 1 addition & 0 deletions sherpa-onnx/c-api/cxx-api.cc
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ static void FillSpeechDenoiserModelConfig(
memset(dst, 0, sizeof(*dst));
dst->gtcrn.model = src.gtcrn.model.c_str();
dst->dpdfnet.model = src.dpdfnet.model.c_str();
dst->dpdfnet.attenuation_limit_db = src.dpdfnet.attenuation_limit_db;
dst->num_threads = src.num_threads;
dst->provider = src.provider.c_str();
dst->debug = src.debug;
Expand Down
2 changes: 2 additions & 0 deletions sherpa-onnx/c-api/cxx-api.h
Original file line number Diff line number Diff line change
Expand Up @@ -1219,6 +1219,8 @@ struct OfflineSpeechDenoiserGtcrnModelConfig {
struct OfflineSpeechDenoiserDpdfNetModelConfig {
/** Model ONNX file. */
std::string model;
/** Offline attenuation limit in dB. 0 disables it. */
float attenuation_limit_db = 0.0f;
};

/**
Expand Down
8 changes: 6 additions & 2 deletions sherpa-onnx/c-api/docs/speech-enhancement.dox
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,7 @@ Example source: [speech-enhancement-gtcrn-c-api.c](https://github.com/k2-fsa/she
SherpaOnnxOfflineSpeechDenoiserConfig config;
memset(&config, 0, sizeof(config));
config.model.dpdfnet.model = "./dpdfnet_baseline.onnx";
config.model.dpdfnet.attenuation_limit_db = 12.0f;
config.model.num_threads = 1;
config.model.provider = "cpu";

Expand All @@ -49,7 +50,8 @@ SherpaOnnxDestroyOfflineSpeechDenoiser(sd);
@endcode

Model file: `dpdfnet_baseline.onnx` (also: `dpdfnet2.onnx`, `dpdfnet4.onnx`,
`dpdfnet8.onnx` for 16 kHz; `dpdfnet2_48khz_hr.onnx` for 48 kHz)
`dpdfnet8.onnx` for 16 kHz; `dpdfnet2_8khz.onnx`, `dpdfnet8_8khz.onnx` for
8 kHz; and `dpdfnet2_48khz_hr.onnx`, `dpdfnet8_48khz_hr.onnx` for 48 kHz)

Example source: [speech-enhancement-dpdfnet-c-api.c](https://github.com/k2-fsa/sherpa-onnx/blob/master/c-api-examples/speech-enhancement-dpdfnet-c-api.c)

Expand Down Expand Up @@ -92,7 +94,9 @@ const SherpaOnnxOnlineSpeechDenoiser *sd =
SherpaOnnxDestroyOnlineSpeechDenoiser(sd);
@endcode

Model file: `dpdfnet_baseline.onnx`
Model files: `dpdfnet_baseline.onnx`, `dpdfnet2.onnx`, `dpdfnet4.onnx`,
`dpdfnet8.onnx` for 16 kHz; `dpdfnet2_8khz.onnx`, `dpdfnet8_8khz.onnx` for
8 kHz; and `dpdfnet2_48khz_hr.onnx`, `dpdfnet8_48khz_hr.onnx` for 48 kHz.

Example source: [online-speech-enhancement-dpdfnet-c-api.c](https://github.com/k2-fsa/sherpa-onnx/blob/master/c-api-examples/online-speech-enhancement-dpdfnet-c-api.c)
*/
Loading
Loading