CI / Lint (push) Canceled after 0s
CI / Build Test (stage-web) (push) Canceled after 0s
CI / Build Test (ui-loading-screens) (push) Canceled after 0s
CI / Build Test (ui-transitions) (push) Canceled after 0s
CI / Unit Test (push) Canceled after 0s
CI / Type Check (push) Canceled after 0s
CI / Check Provenance (push) Canceled after 0s
Sync Labels / sync-labels (push) Successful in 1m43s
- Remove stage-tamagotchi, stage-pocket, server, and engine workspaces with their workflows, addons, and docs - Switch the toolchain from pnpm to bun, replace lockfiles with bun.lock - Rewrite remaining product references to Moeka
50 lines
1.8 KiB
Markdown
50 lines
1.8 KiB
Markdown
# `@proj-airi/model-driver-lipsync`
|
|
|
|
Shared lip-sync profiles and model-neutral mouth-driving policies for Moeka.
|
|
|
|
## What It Does
|
|
|
|
- Exposes the shared wLipSync profile.
|
|
- Converts raw AEIOUS frames into stable AEIOU weights.
|
|
- Owns winner selection, silence detection, and weight smoothing.
|
|
- Provides the existing Live2D lip-sync driver.
|
|
- Exposes the browser-only wLipSync node factory through a separate runtime entry.
|
|
|
|
The package does not write weights to VRM expressions or MMD morphs. Each renderer owns that mapping.
|
|
|
|
## Exports
|
|
|
|
- `@proj-airi/model-driver-lipsync`: the Live2D driver.
|
|
- `@proj-airi/model-driver-lipsync/shared/wlipsync`: the profile, types, and pure vowel driver.
|
|
- `@proj-airi/model-driver-lipsync/runtime/wlipsync`: the browser-only audio-node factory.
|
|
|
|
The shared entry has no Web Audio side effects. Node-based tools and tests can import it safely.
|
|
|
|
## How To Use It
|
|
|
|
```ts
|
|
import { createWLipSyncNode } from '@proj-airi/model-driver-lipsync/runtime/wlipsync'
|
|
import {
|
|
createWLipSyncVowelDriver,
|
|
wlipsyncProfile,
|
|
} from '@proj-airi/model-driver-lipsync/shared/wlipsync'
|
|
|
|
const node = await createWLipSyncNode(audioContext, wlipsyncProfile)
|
|
const driver = createWLipSyncVowelDriver()
|
|
const weights = driver.update(node, deltaSeconds)
|
|
```
|
|
|
|
The caller owns the `AudioContext`, the source node, and the source lifecycle.
|
|
|
|
## When To Use It
|
|
|
|
- Use the shared entry when a renderer needs standard AEIOU weights.
|
|
- Use the runtime entry when browser code creates a wLipSync audio node.
|
|
- Keep renderer-specific expression and morph mappings in the renderer package.
|
|
|
|
## When Not To Use It
|
|
|
|
- Do not import the runtime entry from Node-only code.
|
|
- Do not add Vue, Three.js, VRM, or MMD dependencies to this package.
|
|
- Do not move renderer-specific model writes into the shared driver.
|