live2d实现卡通二次元数字人说话嘴唇与声音同步效果代码
代码语言:html
所属分类:其他
代码描述:live2d实现卡通二次元数字人说话嘴唇与声音同步效果代码,点击说话按钮就可以实现卡通人说话,适合抖音虚拟二次元数字人直播等场景。
代码标签: live2d 卡通 数字人 说话 嘴唇 声音 同步
下面为部分代码预览,完整代码请点击下载或在bfwstudio webide中打开
<!DOCTYPE html> <html lang="en" > <head> <meta charset="UTF-8"> <style> body{ background-image: url('//repo.bfw.wiki/bfwrepo/image/61bb2407955ad.png'); } #control { position: absolute; top: 8px; left: 24px; color: #fff; font-size: 18px; } </style> </head> <body > <script type="text/javascript" src="//repo.bfw.wiki/bfwrepo/js/live2dcubismcore.js"></script> <script type="text/javascript" src="//repo.bfw.wiki/bfwrepo/js/live2d.js"></script> <script type="text/javascript" src="//repo.bfw.wiki/bfwrepo/js/pixi.6.5.2.js"></script> <script type="text/javascript" src="//repo.bfw.wiki/bfwrepo/js/pixi-live2d-display.index.min.js"></script> <script type="text/javascript" src="//repo.bfw.wiki/bfwrepo/js/pixi-live2d-display.extra.js"></script> <canvas id=canvas></canvas> <div id="control"> <button onclick="beginsay();" >点我说话</button> </div> <script > var AudioContext = window.AudioContext || window.webkitAudioContext; var audioCtx = new AudioContext(); // 新建分析仪 const analyser = audioCtx.createAnalyser(); // 根据 频率分辨率建立个 Uint8Array 数组备用 const frequencyData = new Uint8Array(analyser.frequencyBinCount); const cubism4Model = "//repo.bfw.wiki/bfwrepo/images/live2dm3/Haru/Haru.model3.json"; const live2d = PIXI.live2d; let models =[]; (async function main() { const app = new PIXI.Application({ view: document.getElementById("canvas"), autoStart: true, transparent: true, resizeTo: window, //backgroundColor: 0xffffff }); models = await Promise.all([ live2d.Live2DModel.from(cubism4Model, { autoInteract: false })]); models.forEach(model => { app.stage.addChild(model); const scaleX = innerWidth * 1.2 / model.width; const scaleY = innerHeight * 0.8 / model.height; // fit the window model.scale.set(Math.min(scaleX, scaleY)); model.y = innerHeight * 0.1; }); const model4 = models[0]; model4.x = (innerWidth - model4.width) / 2; // handle tapping model4.on("hit", hitAreas => { if (hitAreas.includes("Body")) { model4.motion("Tap"); } if (hitAreas.includes("head")) { model4.motion("Sing"); // model4.internalModel.coreModel.setParameterValueById.........完整代码请登录后点击上方下载按钮下载查看
网友评论0