基于wav文件音量的口形同步(Web)
最終更新: 2021年5月13日
概述
Cubism SDK for Web范例使用口形同步功能,提供基于wav文件音频数据的音量实时移动口形同步的功能。
此范例在Cubism 4 SDK for Web R3beta1或更高版本中提供。
使用方法
准备
在.json文件中写入与动态关联的wav文件。请指定各动态的“Sound”键对应的wav文件路径。
{ ・ ・ ・ "Motions": { "Idle": [ {"File":"motions/haru_g_idle.motion3.json" ,"FadeInTime":0.5, "FadeOutTime":0.5, "Sound": "sounds/haru_normal_05.wav"}, {"File":"motions/haru_g_m15.motion3.json" ,"FadeInTime":0.5, "FadeOutTime":0.5, "Sound": "sounds/haru_normal_06.wav"} ], "TapBody": [ {"File":"motions/haru_g_m06.motion3.json" ,"FadeInTime":0.5, "FadeOutTime":0.5, "Sound": "sounds/haru_normal_01.wav"}, {"File":"motions/haru_g_m09.motion3.json" ,"FadeInTime":0.5, "FadeOutTime":0.5, "Sound": "sounds/haru_normal_02.wav"}, {"File":"motions/haru_g_m20.motion3.json" ,"FadeInTime":0.5, "FadeOutTime":0.5, "Sound": "sounds/haru_normal_03.wav"}, {"File":"motions/haru_g_m26.motion3.json" ,"FadeInTime":0.5, "FadeOutTime":0.5, "Sound": "sounds/haru_normal_04.wav"} ] }, ・ ・ ・ }
请将wav文件置入上面指定的位置。如果wav文件路径不正确,将不会进行口形同步。
音量采集开始
在范例中,信息是通过LAppWavFileHandler类从wav文件中获取的。
执行LAppWavFileHandler::Start()后,从wav文件中导入音频数据,原始化口形同步所需的内部状态。
public startMotion( group: string, no: number, priority: number, onFinishedMotionHandler?: FinishedMotionCallback ): CubismMotionQueueEntryHandle { ・ ・ ・ //voice const voice = this._modelSetting.getMotionSoundFileName(group, no); if (voice.localeCompare('') != 0) { let path = voice; path = this._modelHomeDir + path; this._wavFileHandler.start(path); } ・ ・ ・ }
状态更新和音量获取
执行LAppWavFileHandler::Update()时,测量经过时间对应部分的音量。测量结果的音量可以通过LAppWavFileHandler::GetRms()获得。使用CubismModel::AddParameterValue函数将获取的音量设置为模型中的口形同步值。
在范例中,采集到的音量乘以0.8得到口形同步值。这里,也可以将从声音工具库等获得的音量设置为口形同步值。
public update(): void { ・ ・ ・ // 口形同步设置 if (this._lipsync) { let value = 0.0; // 实时进行口形同步时,从系统获取音量,并输入0~1范围内的值。 this._wavFileHandler.update(deltaTimeSeconds); value = this._wavFileHandler.getRms(); for (let i = 0; i < this._lipSyncIds.getSize(); ++i) { this._model.addParameterValueById(this._lipSyncIds.at(i), value, 0.8); } } ・ ・ ・ }
补充
- 该范例中没有在设备上播放音频的功能。
- LAppWavFileHandler::GetRms()返回0~1范围内的当前音量值。
- 音量单位是RMS(均方根)。
- 计算所有声道音频的平均值。
- 例如,在立体声音频的情况下,计算包括左右声道的音频的平均值。
限制事项
该范例支持导入以下wav文件。如果导入不支持以下格式的文件,将不会执行口形同步。
- Microsoft WAV(小端格式)
- 直线PCM
- 不支持以μ-raw、ADPCM等编码的Wav。
- 声道数:单声道/立体声
- 支持位深:8、16、24bit符号整数
请问这篇文章对您有帮助吗?
是否