본문으로 건너뛰기

전체 연구 기록

기법

Xhadow: 자기 목소리를 기준선으로 삼는 음향 근거 발음 코칭

학습자의 목소리를 목표 언어로 복제한 레퍼런스와 실제 발화를 비교합니다. 브라우저 DSP, 음소 평가, 단어 앵커 분할 DTW와 WSOLA로 근거를 계산하고, 측정된 차이를 혀·턱·입술의 행동 지시로 번역합니다.

브라우저 DSP: F0·스펙트럼 피크·유성성·음색 분석
FFT · formants
단어 앵커 분할 정렬과 피치 보존 재합성
DTW · WSOLA

발음 코칭 제품은 흔히 원어민 발화를 기준으로 점수를 반환합니다. 그러나 학습자와 원어민은 조음뿐 아니라 음색, 음역, 성도 구조와 말하기 속도까지 다릅니다. 낮은 점수가 실제 발음 오류 때문인지 화자 차이 때문인지 분리하지 못하면 “몇 점인가”는 말해도 “혀와 턱을 어떻게 움직여야 하는가”에는 답하기 어렵습니다.

Xhadow는 비교 기준을 바꿨습니다. 학습자 자신의 목소리를 복제해 목표 언어로 말하게 하고, 그 레퍼런스와 학습자의 실제 발화를 비교합니다. 화자 고유 특성의 일부를 양쪽에 공통으로 두고, 남은 음소·타이밍·음향 차이를 조음 지시로 바꾸려는 설계입니다. 화자 차이를 완전히 제거했다는 실험 결과는 아니며, 검증해야 할 제품 가설입니다.

이 연구 기록의 기여는 새로운 음성 모델이나 DTW 알고리즘을 발명했다는 데 있지 않습니다. 음성 복제, 음소 평가, 브라우저 신호처리, 단어 앵커 정렬과 생성 모델을 측정 가능한 근거 경계 하나로 조합한 시스템 설계에 있습니다.

복제·현지화한 자기 목소리와 학습자 발화를 단어 앵커로 정렬하고, 계산된 음향 근거만 LLM에 전달하는 Xhadow 파이프라인

1. 생성보다 먼저 비교 기준을 설계하다

레퍼런스 생성은 두 단계입니다. 5–10초 음성으로 화자의 음색을 복제하고, 그 목소리를 목표 언어와 방언으로 현지화합니다. 레퍼런스 합성에서 받은 단어 타임스탬프는 노래방식 하이라이트가 아니라 이후 시간 정렬의 앵커가 됩니다.

학습자 녹음은 Azure Speech의 음소 단위 평가를 거칩니다. 기대 음소의 점수뿐 아니라 실제로 들린 상위 대치 음소, 누락·삽입, 운율과 단어 오프셋을 받습니다. /ɹ/ 자리에 /l/이 들렸다면 낮은 점수보다 그 대치 방향이 코칭에 더 직접적인 근거가 됩니다.

단계 입력 결정론적으로 남기는 근거
자기 음성 레퍼런스 복제 후 목표 언어로 현지화한 발화 PCM과 단어별 시작·종료 시각
음소 평가 학습자 녹음과 목표 문장 음소 점수, 대치 후보, 누락·삽입, 단어 오프셋
브라우저 DSP 두 음성의 PCM 스펙트럼, F0, F1/F2/F3 후보, 유성성, 음색 특징
시간 정렬 양쪽 단어 구간과 스펙트럼 양방향 구간 선형 타임맵
코칭 번역 정렬된 음향 근거 혀·턱·입술의 행동 지시

2. 브라우저 안에서 직접 만든 DSP 프론트엔드

FFT, 포먼트 피크 추출, 자기상관 기반 피치, 영교차율, RMS와 유성성 판단을 외부 DSP 라이브러리 없이 TypeScript로 구현했습니다. 2,048포인트 Hann 윈도우와 512 샘플 홉으로 프레임을 만들고, 반복형 radix-2 Cooley–Tukey FFT를 브라우저에서 실행합니다.

포먼트는 LPC가 아니라 대역 제약을 둔 스펙트럼 피크 피킹입니다. F1은 200–1,000Hz, F2는 800–2,500Hz, F3는 2,000–4,000Hz 범위에서 순서 제약을 만족하는 피크를 고릅니다. 침묵과 마찰음에서도 그럴듯한 피크가 생기는 문제를 줄이기 위해 피치 신뢰도, 영교차율과 RMS를 합친 유성성 게이트를 별도로 둡니다.

이 연산은 원음성을 생성 모델로 보내지 않고도 음향 차이를 구조화하기 위한 전처리입니다. LLM이 보는 것은 오디오가 아니라 이미 계산된 표입니다.

3. 전역 정렬을 단어 단위 문제로 분해하다

10초 발화를 약 1,000프레임으로 표현하면 전역 DTW는 약 백만 개 셀에서 고차원 거리를 계산합니다. 계산량뿐 아니라, 기침이나 반사음 하나가 정렬 경로를 틀면 이후 구간이 그 오차를 물려받는 드리프트가 문제였습니다.

Xhadow의 해법은 음성 인식과 합성 과정에서 이미 얻은 단어 경계를 사용하는 것입니다.

  1. 문장부호와 대소문자를 정규화해 양쪽의 같은 단어를 찾습니다.
  2. 레퍼런스와 실제 발화의 단어 시작·종료 시각을 프레임 구간으로 바꿉니다.
  3. 어느 한쪽이 100프레임을 넘으면 양쪽을 같은 비율로 축소합니다.
  4. 각 단어 구간 안에서 표준 DTW를 실행합니다.
  5. 경로에서 약 10개 점을 뽑아 단어의 실제 시간축으로 되돌리고 시작·끝 앵커를 붙입니다.
  6. 모든 앵커를 연결해 레퍼런스↔학습자 양방향 타임맵을 만듭니다.

이것은 새로운 DTW 알고리즘이 아니라 언어적 앵커로 표준 DTW의 탐색 범위와 실패 전파 범위를 제한한 애플리케이션 구성입니다. 한 단어의 정렬 오류가 다음 단어 뒤까지 번지지 않고, 각 국소 문제의 크기가 상한을 갖습니다.

같은 타임맵은 세 곳에 재사용됩니다. WSOLA는 학습자 음성을 레퍼런스 시간축에 맞춰 피치를 보존한 채 재합성하고, 동기 재생 서보는 두 오디오의 드리프트를 보정하며, 음소별 F1/F2/F3와 유성성 궤적은 30포인트 고정 그리드 위에서 직접 비교됩니다.

4. LLM의 역할을 “측정”이 아니라 “번역”으로 제한하다

생성 모델에는 원음성이 전달되지 않습니다. 각 음소에 대해 다음 근거만 전달합니다.

  • 기대 음소와 실제로 들린 대치 후보
  • 레퍼런스와 비교한 지속시간 편차
  • 정렬된 F1/F2/F3 궤적과 유성성 차이
  • 학습자의 모국어에서 알려진 L1 간섭 패턴

출력 계약은 포먼트 수치를 그대로 말하지 못하게 하고, 관찰된 차이를 사람이 수행할 수 있는 행동으로 바꾸도록 요구합니다. 예를 들어 내부의 F2 차이는 “혀를 더 앞으로”, F1 차이는 “턱을 더 열거나 닫기” 같은 지시로 번역됩니다. 모델은 표현을 잘못할 수 있지만, 측정 단계에 없던 음향 차이를 새로 만들 수는 없도록 입력 경계를 좁혔습니다.

5. 무엇을 검증했고, 무엇은 검증하지 않았는가

번들된 스크립트는 각 계층을 합성 입력으로 실행해 콘솔 결과를 냅니다. 2026년 8월 코드 감사에서 세 스크립트를 다시 실행했습니다.

대상 합성 조건 감사 실행 결과
포먼트 피크 복원 720 / 1,250 / 2,550Hz 피크 주입 9.4 / 1.1 / 9.1Hz 오차
유성성 게이트 /s/·/z/·/a/에 대응하는 특징 주입 0.150 / 0.510 / 0.910
음소 경계 보정 실제 전이를 0.60초에 둔 합성 트랙 균등 0.50초 경계를 0.60초로 이동
단어 분할 DTW 무작위 1,000×1,100 프레임, 단어 앵커 3개 전역 481.44ms → 분할 25.58ms, 앵커 40개
타임맵 역변환 정방향 조회 뒤 결과를 역방향으로 조회 왕복 오차 0.000000초

DTW 하니스는 무작위 노이즈를 사용하고 스크립트에는 assertion이 없습니다. 따라서 위 시간은 고정 벤치마크가 아니라 한 로컬 감사 실행의 참고값입니다. 기존 기록의 422.5ms→23.4ms와 절대값이 다른 이유도 이것입니다. 반복해서 보인 방향은 전역 문제를 단어별 상계 문제로 나눴을 때 계산량이 크게 줄었다는 것이지만, 하드웨어 간 성능이나 통계적 분포는 측정하지 않았습니다.

더 중요한 경계가 있습니다. 이 하니스는 학습자의 발음이 좋아졌다는 증거가 아닙니다. 실제 음성 코퍼스에서의 포먼트 정확도, 코칭 전후 발음 향상, 사용자 유지율과 교사 평가를 측정하지 않았습니다.

6. 현재 한계

  • 포먼트는 LPC가 아니라 피크 피킹이어서 높은 F0 화자에서는 포락선보다 개별 하모닉을 고를 수 있습니다.
  • 피치 신뢰도는 정규화된 자기상관계수가 아니며, 현재 구현에서는 에너지 게이트에 더 가깝게 동작합니다.
  • DTW의 국소 비용은 피크 정규화 dB 스펙트럼의 코사인 거리입니다. MFCC와 delta 특징이 더 엄밀한 후보입니다.
  • 함수가 받는 Sakoe–Chiba window는 제품 호출 경로에서 전달되지 않습니다. 실제 계산 상한은 단어 구간의 100프레임 축소입니다.
  • DSP와 DTW가 메인 스레드에서 동기 실행됩니다. AudioWorklet 또는 Web Worker 이전이 필요합니다.
  • 음성 복제는 생체정보에 준합니다. 본인 이외 목소리를 다루려면 명시적 동의와 오용 방지 절차가 먼저 필요합니다.

7. 기여 범위와 다음 검증

Xhadow가 보여주는 것은 “AI가 발음을 잘 가르친다”는 결과가 아닙니다. 생성 전에 비교 기준과 측정 경계를 설계하고, 서로 다른 음성 기술을 하나의 추적 가능한 코칭 파이프라인으로 조합한 엔지니어링 방법입니다.

다음 검증은 실제 화자 데이터에서 피크 피킹과 LPC를 비교하고, 단어 앵커 유무의 정렬 오류를 평가하며, 블라인드 교사 평가로 점수형 피드백과 조음 지시형 피드백의 학습 효과를 비교하는 것입니다. 그 전까지 성능 주장은 합성 하니스의 계층별 동작 범위로 제한합니다.

측정 기록

영역 원 기록
전체 설계와 한계 Xhadow 저장소 README.ko.md
브라우저 DSP lib/audio-analyzer.ts, scripts/test-dsp.ts
단어 앵커 DTW lib/dtw.ts, scripts/test-hybrid-dtw.ts
WSOLA lib/granular.ts
음소 경계 scripts/test-phoneme-boundary.ts
개발 이력 2025-11-19 초기 앱 → 2025-12-06 음소 타이밍 통합 커밋

Xhadow 소스 저장소

무엇을 측정한 것인가

  • Xhadow

    AI 음성 클론과 브라우저 내 음향 분석을 결합해, 점수 대신 조음을 교정하는 발음 코치