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.