Change Log
오픈소스 사용 고지문
- Android SDK : 오프소스 라이브러리 사용에 대한 고지문
1.4.1 (2022-12-13)
라이선스가 만료되어 isExpired()
가 true를 반환하는 경우 아래와 같이 동작합니다.
다음 표의 bypass
는 denoise.process()
로 전달되는 파라미터 enableBypass를 의미합니다
isExpired | bypass | 동작 |
---|---|---|
True | True | bypass (입력 음원 그대로 출력) |
True | False | mute (zero filled buffer 출력) |
1.4.0 (2022-12-07)
노이즈 제거 Neural Network(14MMACs & 31MMACs) 통합.
enum DenoiseEngine
에서class DHDenoise
로 변경되었습니다.class DHDenoise
에서 빌드 시, 노이즈 제거 모델(14MMACs 또는 31MMACs)을 선택할 수 있습니다.
DHDenoise Init
노이즈 제거 모듈을 초기화 시키는 메소드입니다.
DenoiseEngine.denoise(...)
에서 전달 받던 frames를 초기 빌드 시 설정하도록 변경되었습니다.
모델을 선택할 수 있도록 통합을 진행하면서 설정 및 초기화를 하는 방식에 빌더 디자인 패턴(Builder Design Parttern)을 적용하였습니다.
예시
- 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
setFrames
메소드를 통해 처리할 frames 설정합니다. frames의 default 값은 160(10ms @16KHz) 이며, 160의 배수로만 설정 가능합니다.
Frame Size |
---|
160(default) |
DHDenoise Enum Values
DHDenoise.NNet
enum에 정의된 타입(TINY
, BASE
)을 통해 사용할 Neural Network(노이즈 제거 모델)를 설정 가능합니다.
Type | Computational Complexity |
---|---|
TINY | 14MMACs |
BASE | 31MMACs |
DHDenoise.SampleRate
enum에 정의된 타입(SAMPLE_RATE_16K
, SAMPLE_RATE_48K
)을 통해 사용할 Sample Rate 설정 가능.
Type | SampleRate |
---|---|
SAMPLE_RATE_16K | 16000Hz |
SAMPLE_RATE_48K | 48000Hz |
기존 방식
- 이전에는 DenoiseEngine 에서 initialize한 모델의 포인터를 반환받았었습니다.
int sampleRate = 16000;
long modelPtr = DenoiseEngine.initModel(sampleRate);
변경된 방식
- 빌더 디자인 패턴(Builder Design Pattern)이 적용되었습니다.
DenoiseEngine
에서 반환하던 model(neural network) pointer는DHDenoise
내부에서 가지고 있도록 변경되었습니다. 따라서 따로 관리를 할 필요가 없어졌습니다.DHDenoise
내부에 선언되어있는Builder
를 사용해 initialize에 필요한 값들을 선언합니다.DHDenoise.NNet
과DHDenoise.SampleRate
는 필수로 설정해야합니다.setFrames
을 설정하지 않으면 default 값인 160으로 설정되게 됩니다.DHDenoise.Builder()
로 DHDenoise 객체를 생성한 뒤에init()
을 통해 노이즈 제거의 모델을 initialize 할 수 있습니다.
DHDenoise denoise = new DHDenoise.Builder(DHDenoise.NNet nn, DHDenoise.SampleRate sampleRate).build();
denoise.init();
if (denoise.isExpired()) {
Log.e("DHDenoise", "SDK is expired");
return;
}
frame을 따로 설정할 경우의 예시
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
노이즈 제거 모듈을 통해 노이즈 제거를 종료시키는 메소드입니다.
기존 방식
- 선언된
DenoiseEngine.deleteModel
로 현재 사용 중인 모델의 포인터를 전달했었어야 했습니다.
DenoiseEngine.deleteModel(modelPtr);
변경된 방식
deleteModel()
메소드가destroy()
로 변경되었습니다.- 이제는 DHDenoise 내부에서 모델의 포인터를 가지고 있기 때문에 destroy로 전달할 필요가 없습니다.
- 선언한 DHDenoise에서 간단하게 destroy() 만을 호출해서 해제할 수 있습니다.
DHDenoise denoise = new DHDenoise.Builder(...).setFrames(...).build();
// ...
denoise.destroy();
DHDenoise Process
노이즈 제거 모듈을 통해 노이즈 제거를 실행시키는 메소드입니다.
기존 방식
- 미리 선언해둔 모델의 포인터와 frame size를 노이즈 제거 모듈로 전달했어야 했습니다.
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);
변경된 방식
- 노이즈 제거 모듈의 이름이
denoise
에서process
로 변경되었습니다. - DHDenoise 내부에서 모델의 포인터를 가지고 있기 때문에 노이즈 제거 모듈에 포인터를 전달할 필요가 없습니다.
- frames 역시 Builder를 통해 설정할 수 있으므로 노이즈 제거 모듈에 전달할 필요가 없어졌습니다.
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
노이즈 제거 모듈의 인증 만료를 확인할 수 있는 메소드입니다.
기존 방식
DenoiseEngine.initModel
을 통해 모델의 포인터를 받아왔을 때, 모델의 포인터 값이 0일 경우 인증이 만료된 상태였었습니다.
long modelPtr = DenoiseEngine.initModel(sampleRate);
if(modelPtr === 0) { Log.e('Library expired'); return;}
변경된 방식
DHDenoise
에서isExpired()
메소드를 통해 라이선스가 만료되었는지 확인할 수 있습니다.denoise.init()
이후에denoise.isExpired()
를 호출하여 라이선스가 만료되었는지 확인할 수 있습니다.
DHDenoise denoise = new DHDenoise.Builder(...).build();
denoise.init();
if (denoise.isExpired()) {
Log.e("DHDenoise", "SDK is expired");
return;
}
1.3.0 (2022-11-28)
- 라이선스 만료된 상태에서
DenoiseEngine.denoise()
호출시 무음(Zero Filled Buffer) 출력.
1.2.0 (2022-09-29)
Feature
- 48kHz 샘플레이트 지원.
DenoiseEngine.initModel(int samplerate)
를 통해 설정.
long modelPtr = DenoiseEngine.initModel(); // 기존
int samplerate = 48000;
long modelPtr = DenoiseEngine.initModel(samplerate); // 변경된 버전
1.1.0 (2022-09-26)
Feature
- AGC 활성화 옵션 추가.
DenoiseEngine.denoise()
의 enableAGC 파라미터를 통해 AGC 활성화 가능
- Java
denoise(long modelPtr,
float[] inputAudio,
float[] outputAudio,
int frames,
boolean enableBypass,
boolean enableAGC);
1.0.0 (2022-09-23)
Android SE SDK Release.