Skip to main content

Change Log

Open Source Software Notice​

1.4.1 (2022-12-13)​

If isExpired() returns true due to the expiration of the license, it behaves as follows:

bypass in the following table means the parameter enableBypass passed to denoise.process()

isExpiredbypass동작
TrueTruebypass (Output the input sound source as it is)
TrueFalsemute (output with zero filled buffer)

1.4.0 (2022-12-07)​

Integrated Denoise Neural Network (14MMACs & 31MMACs).​

  • Changed from enum DenoiseEngine to class DHDenoise.
  • When building from class DHDenoise, you can select a denoise model (14MMACs or 31MMACs).

DHDenoise Init​

Method for initializing the denoise module.

The frames set by DenoiseEngine.denoise(...) have been changed to be set at initial build time.

As the integration progresses to select a model, the Builder Design Pattern is applied to set up and initialize the model.

Example

DHDenoise denoise = new DHDenoise.Builder(DHDenoise.NNet.BASE,
DHDenoise.SampleRate.SAMPLE_RATE_16K)
.setFrames(160)
.build();

denoise.init();

if (denoise.isExpired()) {
Log.e("DHDenoise", "SDK is expired");
return;
}

DHDenoise Frame

Set the frames to be processed by the setFrames method. The default value for frames is 160 (10ms @ 16KHz) and can only be set to a multiple of 160.

Frame Size
160(default)

DHDenoise Enum Values

Enable to set up a neural network to use through DHDenoise.NNet defined as enumeration type(TINY, BASE).

TypeComputational Complexity
TINY14MMACs
BASE31MMACs

Enable to set the sample rate to use through DHDenoise.SampleRate defined as enumeration type(SAMPLE_RATE_16K, SAMPLE_RATE_48K).

TypeSampleRate
SAMPLE_RATE_16K16000Hz
SAMPLE_RATE_48K48000Hz

Previous method

  • Previously, DenoiseEngine returned a pointer to the initialized model.
int sampleRate = 16000;

long modelPtr = DenoiseEngine.initModel(sampleRate);

Changed method

  • Builder Design Pattern is applied.
  • The model(Neural Network) pointer returned by DenoiseEngine has been changed to have it inside DHDenoise. Therefore, there is no need to manage it separately.
  • Declare the values required for initialization using the Builder declared inside DHDenoise.
  • DHDenoise.NNet and DHDenoise.SampleRate must be set to be required.
  • If setFrames is not set, it will be set to the default value of 160.
  • After creating the DHDenoise object with DHDenoise.Builder(), enable to initialize the model of denoise through init().
DHDenoise denoise = new DHDenoise.Builder(DHDenoise.NNet nn, DHDenoise.SampleRate sampleRate).build();
denoise.init();

if (denoise.isExpired()) {
Log.e("DHDenoise", "SDK is expired");
return;
}

Example of setting a frame separately

int frames = 320;

DHDenoise denoise = new DHDenoise.Builder(...).setFrames(frames).build();
denoise.init()

if (denoise.isExpired()) {
Log.e("DHDenoise", "SDK is expired");
return;
}

DHDenoise Destory​

Method for terminating DHDenoise via the denoise module.

Previous method

  • The model pointer should have been passed to the DenoiseEngine.deleteModel
DenoiseEngine.deleteModel(modelPtr);

Changed method

  • The method deleteModel() has been changed to destroy().
  • It has a pointer to the model inside DHDenoise, we don't need to forward it to destroy.
  • DHDenoise can simply invoke only destroy() to release it.
DHDenoise denoise = new DHDenoise.Builder(...).setFrames(...).build();

// ...

denoise.destroy();

DHDenoise Process​

Method to enable denoise through the DHDenoise module.

Previous method

  • The model pointer and frame size should have been passed to the denoise module.
int frames = 160;
boolean enableBypass = false;
boolean enableAGC = false;
float[] input = new float[frames];
float[] output = new float[frames];

DenoiseEngine.denoise(modelPtr, input, output, frames, enableBypass, enableAGC);

Changed method

  • The denoise module has been renamed from 'denoise' to 'process'.
  • The model has a pointer inside DHDenoise, it is not necessary to pass the model pointer to the denoise module.
  • Frames can also be set through the Builder, it is not necessary to pass frames to the process().
int frames = 160;
boolean enableBypass = false;
boolean enableAGC = false;
float[] input = new float[frames];
float[] output = new float[frames];

DHDenoise denoise = new DHDenoise.Builder(...).setFrames(frames).build();

// ...

denoise.process(input, output, enableBypass, enableAGC);

DHDenoise isExpired​

Method for verifying the authentication expiration of the DHDenoise module.

Previous method

  • When the model's pointer was received via DenoiseEngine.initModel, the authentication had expired if the value was 0.
long modelPtr = DenoiseEngine.initModel(sampleRate);

if(modelPtr === 0) { Log.e('Library expired'); return;}

Changed method

  • In DHDenoise, the isExpired() method can be used to determine if the license has expired.
  • After denoise.init(), you can call denoise.isExpired() to see if the license has expired.
DHDenoise denoise = new DHDenoise.Builder(...).build();
denoise.init();

if (denoise.isExpired()) {
Log.e("DHDenoise", "SDK is expired");
return;
}

1.3.0 (2022-11-28)​

  • Zero Filmed Buffer output when calling DenoiseEngine.denoise() with license expired.

1.2.0 (2022-09-29)​

Feature​

  • 48 kHz sample plate support.
  • Set via DenoiseEngine.initModel(sampleRate).
long modelPtr = DenoiseEngine.initModel();           // Previous version

int sampleRate = 48000;
long modelPtr = DenoiseEngine.initModel(sampleRate); // Changed version

1.1.0 (2022-09-26)​

  • Added option to enable AGC. AGC can be enabled through the enableAGC parameter of DenoiseEngine.denoise()
denoise(long modelPtr,
float[] inputAudio,
float[] outputAudio,
int frames,
boolean enableBypass,
boolean enableAGC);

1.0.0 (2022-09-23)​

Android SE SDK Release.