← Docs hub

보이스 프로필 등록 씬 설계

상위 기준: 보이스 프로필 등록 제품 구현 기준서 3~5장

이 문서는 원격 화면 실행부터 5세트 등록 완료까지의 상세 상태 전이를 설명한다.

현재 등록 실행 흐름

등록 흐름 크게 보기

실제 실행 순서

  1. 모바일 APP 또는 Sample Gateway가 startVoiceProfileEnrollment를 MQTT로 보낸다.
  2. IotAgent가 JSON을 Bundle로 바꾸고 DeviceAgent를 호출한다.
  3. DeviceAgent가 계약 버전, 요청 ID, TTL, 닉네임을 검사하고 Registration App을 연다.
  4. 사용자가 A1 화면의 시작 버튼을 누르면 Registration App이 Binder로 같은 method를 보낸다.
  5. DeviceAgent가 OnDevice Agent Service에 명령을 전달한다.
  6. Service는 일반 녹음을 정지하고 speaker_enrollment 마이크 소유권을 얻는다.
  7. 세트마다 약 5.2초 PCM을 모아 품질을 검사한다. 실패하면 같은 세트만 다시 받는다.
  8. 5세트 통과 후 임베딩 일관성을 확인하고 UUID Voice ID와 기준 임베딩을 저장한다.
  9. 최종 프로필을 DeviceAgent에 commit하고 ACK 결과를 UI에 반영한다.
  10. 완료·취소·실패에서 등록 마이크를 반납하고 일반 음성 경로를 복구한다.

MQTT start만으로 녹음하지 않는다. 먼저 A1의 시작 화면을 열고, 사용자 버튼 입력 뒤 녹음한다.

UI와 Service의 계약

Registration App OnDevice Agent Service
문장·세트·진행률 표시 실제 PCM 수집
시작·취소·재시도 입력 신호 품질과 임베딩 검사
Binder 상태를 reducer로 표시 Voice ID·기준 임베딩 생성
마이크와 파일을 사용하지 않음 로컬 저장과 마이크 복구

UI가 받는 상태는 WAITING_START, RECORDING_SET, SET_ACCEPTED, SET_REJECTED, PERSONALIZATION_SETTINGS, CREATING_LOCAL_PROFILE, PENDING_DEVICE_DELIVERY, COMPLETED, PROFILE_FAILED, DELIVERY_FAILED, CANCELLED다.

현재 품질 판정

현재 검사하지 않는 항목은 안내 문장 STT 일치, 한 세트 내부 다화자·겹침, 재생·합성 음성 공격이다. 자세한 수치는 등록 음성 검증에 둔다.

등록 완료 데이터

위치 남는 데이터 남지 않는 데이터
OnDevice private storage Voice ID, 프로필 메타데이터, 기준 임베딩 등록 PCM/WAV
DeviceAgent outbox Cloud 전달 대기 Voice ID·기준 임베딩 PCM/WAV, 세트별 임베딩
Registration App 화면에 필요한 최소 상태 음성·임베딩

현재 등록 앱 경로는 PCM을 메모리에만 모으며 임시 WAV 파일을 생성하지 않는다.

완료 기준

Keyboard shortcuts

⌘K / Ctrl+KOpen command palette
/Focus search
g hGo to home
g pGo to projects
g sGo to sessions
j / kNext / prev row (tables)
?Show this help
EscClose dialogs

Structured queries

Mix key:value filters with free text in the palette:

type:sessionOnly session pages
project:llm-wikiFilter by project name (substring)
model:claudeFilter by model name (substring)
date:>2026-03-01Sessions after a date
date:<2026-04-01Sessions before a date
tags:rustPages mentioning a tag/topic
sort:dateSort results by date (newest first)

Example: type:session project:llm-wiki date:>2026-04 sort:date