Skip to main content

Change Log

오픈소스 사용 고지문

1.4.1 (2022-12-13)

라이선스가 만료되어 isExpired()가 true를 반환하는 경우 아래와 같이 동작합니다.

다음 표의 bypassdenoise.process()로 전달되는 파라미터 enableBypass를 의미합니다

isExpiredbypass동작
TrueTruebypass (입력 음원 그대로 출력)
TrueFalsemute (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)을 적용하였습니다.

예시

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(노이즈 제거 모델)를 설정 가능합니다.

TypeComputational Complexity
TINY14MMACs
BASE31MMACs

DHDenoise.SampleRate enum에 정의된 타입(SAMPLE_RATE_16K, SAMPLE_RATE_48K)을 통해 사용할 Sample Rate 설정 가능.

TypeSampleRate
SAMPLE_RATE_16K16000Hz
SAMPLE_RATE_48K48000Hz

기존 방식

  • 이전에는 DenoiseEngine 에서 initialize한 모델의 포인터를 반환받았었습니다.
int sampleRate = 16000;

long modelPtr = DenoiseEngine.initModel(sampleRate);

변경된 방식

  • 빌더 디자인 패턴(Builder Design Pattern)이 적용되었습니다.
  • DenoiseEngine에서 반환하던 model(neural network) pointer는 DHDenoise 내부에서 가지고 있도록 변경되었습니다. 따라서 따로 관리를 할 필요가 없어졌습니다.
  • DHDenoise 내부에 선언되어있는 Builder를 사용해 initialize에 필요한 값들을 선언합니다.
  • DHDenoise.NNetDHDenoise.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 활성화 가능
denoise(long modelPtr,
float[] inputAudio,
float[] outputAudio,
int frames,
boolean enableBypass,
boolean enableAGC);

1.0.0 (2022-09-23)

Android SE SDK Release.