Change Log
Open Source Software Notice
- Android SDK : Notice for using open source libraries
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()
isExpired | bypass | 동작 |
---|---|---|
True | True | bypass (Output the input sound source as it is) |
True | False | mute (output with zero filled buffer) |
1.4.0 (2022-12-07)
Integrated Denoise Neural Network (14MMACs & 31MMACs).
- Changed from
enum DenoiseEngine
toclass 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
- java
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
).
Type | Computational Complexity |
---|---|
TINY | 14MMACs |
BASE | 31MMACs |
Enable to set the sample rate to use through DHDenoise.SampleRate
defined as enumeration type(SAMPLE_RATE_16K
, SAMPLE_RATE_48K
).
Type | SampleRate |
---|---|
SAMPLE_RATE_16K | 16000Hz |
SAMPLE_RATE_48K | 48000Hz |
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 insideDHDenoise
. Therefore, there is no need to manage it separately. - Declare the values required for initialization using the
Builder
declared insideDHDenoise
. DHDenoise.NNet
andDHDenoise.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 throughinit()
.
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 todestroy()
. - 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
, theisExpired()
method can be used to determine if the license has expired. - After
denoise.init()
, you can calldenoise.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 ofDenoiseEngine.denoise()
- Java
denoise(long modelPtr,
float[] inputAudio,
float[] outputAudio,
int frames,
boolean enableBypass,
boolean enableAGC);
1.0.0 (2022-09-23)
Android SE SDK Release.