diff --git a/main/xiaozhi-server/test/css/test_page.css b/main/xiaozhi-server/test/css/test_page.css index b197c60d..3aac3df1 100644 --- a/main/xiaozhi-server/test/css/test_page.css +++ b/main/xiaozhi-server/test/css/test_page.css @@ -1,250 +1,110 @@ -/* ==================== 全局样式 ==================== */ +/* ==================== 全局样式重置 ==================== */ * { box-sizing: border-box; + margin: 0; + padding: 0; } body { font-family: 'PingFang SC', 'Microsoft YaHei', sans-serif; margin: 0; - padding: 0px; - background-image: url('bg.png'); + padding: 0; + overflow: hidden; + height: 100vh; + width: 100vw; } -/* ==================== 容器布局 ==================== */ +/* ==================== 背景容器 ==================== */ +.background-container { + position: fixed; + top: 0; + left: 0; + width: 100vw; + height: 100vh; + background-image: url('../images/1.png'); + background-size: cover; + background-position: center; + background-repeat: no-repeat; + transition: background-image 0.5s ease-in-out; + z-index: -2; +} + +.background-overlay { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + background: rgba(0, 0, 0, 0.3); + z-index: -1; +} + +/* ==================== 主容器 ==================== */ .container { - max-width: 1400px; - margin: 0 auto; - border-radius: 10px; - padding: 0px; -} - -/* 两栏布局 */ -.two-column-layout { + position: relative; + width: 100vw; + height: 100vh; display: flex; - gap: 20px; - align-items: stretch; - margin-top: 10px; - margin-bottom: 10px; + flex-direction: column; + align-items: center; + justify-content: flex-end; + /* 从底部开始排列 */ + padding: 20px; + padding-bottom: 0; + /* 移除底部padding,让模型可以延伸到页面底部 */ } -.two-column-layout>.section { - flex: 1; - margin-top: 0; - margin-bottom: 0; - min-width: 0; +/* ==================== Live2D显示区域 ==================== */ +#live2d-stage { + position: fixed; + top: 0; + left: 0; + width: 100vw; + height: 100vh; + display: block; + z-index: 100; + pointer-events: auto; } -/* ==================== 通用区块样式 ==================== */ -.section { - margin-top: 10px; - margin-bottom: 10px; - padding: 10px; - border-radius: 15px; - background-color: #fff; - box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1); -} - -.section h2 { - margin: 0; - color: #000; - font-size: 14px; - font-weight: 600; - letter-spacing: 0.02em; +.status-indicator { + position: absolute; + top: 20px; + left: 50%; + transform: translateX(-50%); display: flex; align-items: center; - gap: 10px; -} - -/* ==================== 通用按钮样式 ==================== */ -button { - padding: 8px 15px; - border: none; - border-radius: 5px; - background-color: #007aff; + gap: 8px; + background: rgba(0, 0, 0, 0.4); + backdrop-filter: blur(10px); + padding: 8px 16px; + border-radius: 20px; + border: 1px solid rgba(255, 255, 255, 0.1); color: white; - cursor: pointer; - transition: background-color 0.2s; -} - -button:disabled { - background-color: #cccccc; - cursor: not-allowed; -} - -/* 切换按钮和连接按钮 */ -.toggle-button, -.connect-button { - margin-left: auto; - padding: 4px 12px; font-size: 14px; - border-radius: 20px; - cursor: pointer; - height: 28px; - line-height: 20px; + font-weight: 500; + z-index: 10; } -.toggle-button { - border: 1px solid #007aff; - background-color: #fff; - color: #007aff; +.status-dot { + width: 8px; + height: 8px; + border-radius: 50%; + animation: pulse 2s infinite; } -.connect-button { - box-shadow: 0px 0px 10px 2px rgba(0, 122, 255, 0.28); +.status-disconnected { + background-color: #f44336; } -/* ==================== 设备配置面板 ==================== */ -.config-panel { - display: block; - transition: all 0.3s ease; +.status-connecting { + background-color: #ff9800; } -/* MCP工具面板默认隐藏 */ -#mcpToolsPanel { - display: none; +.status-connected { + background-color: #4caf50; } -#mcpToolsPanel.expanded { - display: block; -} - -.control-panel { - display: flex; - flex-direction: column; - gap: 10px; - margin-top: 10px; -} - -/* 配置行 */ -.config-row { - display: flex; - gap: 10px; - width: 100%; -} - -/* 配置项 */ -.config-item { - flex: 1; - display: flex; - align-items: center; - gap: 10px; - min-width: 0; - margin-bottom: 8px; - width: 100%; -} - -.config-item label { - white-space: nowrap; - min-width: 70px; - text-align: left; - color: #666; - font-size: 12px; -} - -.config-item input { - flex: 1; - width: 0; - flex-grow: 1; - padding: 6px; - font-size: 12px; - border: 1px solid #b1c9f8; - border-radius: 5px; -} - -.config-item input:disabled { - background-color: #fff; - border-color: #fff; - cursor: default; -} - -/* ==================== 连接信息面板 ==================== */ -.connection-controls { - display: flex; - flex-direction: column; - gap: 10px; - width: 100%; - margin-top: 10px; -} - -.connection-controls input { - width: 100%; - padding: 8px; - border: 1px solid #ddd; - border-radius: 5px; - box-sizing: border-box; -} - -.connection-controls button { - white-space: nowrap; - padding: 8px 15px; -} - -#serverUrl, -#otaUrl { - flex-grow: 1; - padding: 8px; - border-radius: 5px; -} - -#otaUrl { - border: 1px solid #b1c9f8; -} - -#serverUrl { - border: 1px solid #fafafa; - background-color: #fafafa; -} - -/* 连接状态 */ -.connection-status { - display: flex; - align-items: center; - gap: 20px; - margin-left: 0px; - padding: 0 15px; - height: 28px; - line-height: 28px; -} - -.connection-status span { - font-size: 13px; -} - -.connection-status .status { - background-color: #fef2f2; - color: #b91c1c; - font-size: 12px; - padding: 0px 8px; - border-radius: 20px; - transition: all 0.3s ease; -} - -/* 已连接状态 */ -.connection-status .status.connected { - background-color: #ecfdf3; - color: #15803d; -} - -/* 会话状态 - 离线中 */ -.connection-status .status.offline { - background-color: #fef2f2; - color: #b91c1c; -} - -/* 会话状态 - 聆听中 */ -.connection-status .status.listening { - background-color: #ecfdf3; - color: #15803d; -} - -/* 会话状态 - 说话中 */ -.connection-status .status.speaking { - background-color: #fff7ed; - color: #c2410c; - animation: pulse-speaking 1.5s infinite; -} - -@keyframes pulse-speaking { +@keyframes pulse { 0%, 100% { @@ -252,67 +112,497 @@ button:disabled { } 50% { - opacity: 0.7; + opacity: 0.5; } } -/* LLM状态emoji样式 */ -span.connection-status.llm-emoji { - display: block !important; - text-align: center !important; - width: 100% !important; - margin: 0 auto !important; -} - -.llm-emoji .status { - font-size: 14px !important; - padding: 8px 20px !important; - line-height: 1.2 !important; -} - -.emoji-large { - font-size: 2em !important; - vertical-align: middle; - display: inline-block; - line-height: 1; -} - -/* ==================== 标签页样式 ==================== */ -.tabs { - display: flex; - margin-bottom: 20px; - border-bottom: 1px solid #e0e0e0; - align-items: center; -} - -.tab { - padding: 10px 20px; - cursor: pointer; - border: none; - background: none; - font-size: 14px; - color: #666; - position: relative; - transition: all 0.3s ease; -} - -.tab:hover { - color: #007aff; -} - -.tab.active { - color: #007aff; - font-weight: bold; -} - -.tab.active::after { - content: ''; +/* ==================== 聊天消息流(弹幕样式) ==================== */ +.chat-stream { position: absolute; - bottom: -1px; + bottom: 100px; + right: 20px; + width: 300px; + max-height: 200px; + overflow-y: auto; + display: flex; + flex-direction: column; + gap: 8px; + z-index: 100; + pointer-events: none; +} + +.chat-message { + animation: slideInRight 0.3s ease-out; + pointer-events: auto; +} + +.chat-message.ai .message-bubble { + background: transparent; + color: white; + align-self: flex-end; + text-shadow: 0 1px 2px rgba(0, 0, 0, 0.8); +} + +.chat-message.user .message-bubble { + background: rgba(88, 101, 242, 0.7); + color: white; + align-self: flex-start; + text-shadow: 0 1px 2px rgba(0, 0, 0, 0.8); + backdrop-filter: blur(5px); + border: 1px solid rgba(255, 255, 255, 0.2); +} + +.chat-message.system .message-bubble { + background: transparent; + color: #b9bbbe; + align-self: center; + text-shadow: 0 1px 2px rgba(0, 0, 0, 0.8); +} + +.message-bubble { + padding: 8px 12px; + border-radius: 18px; + font-size: 14px; + max-width: 250px; + word-wrap: break-word; + backdrop-filter: blur(10px); + border: 1px solid rgba(255, 255, 255, 0.1); + animation: fadeIn 0.3s ease-out; +} + +@keyframes slideInRight { + from { + transform: translateX(100%); + opacity: 0; + } + + to { + transform: translateX(0); + opacity: 1; + } +} + +@keyframes fadeIn { + from { + opacity: 0; + transform: translateY(10px); + } + + to { + opacity: 1; + transform: translateY(0); + } +} + +@keyframes fadeOut { + from { + opacity: 1; + } + + to { + opacity: 0; + } +} + +/* ==================== 底部控制栏 ==================== */ +.control-bar { + position: fixed; + bottom: 20px; + left: 50%; + transform: translateX(-50%); + display: flex; + gap: 16px; + background: rgba(35, 39, 42, 0.9); + backdrop-filter: blur(20px); + padding: 12px 24px; + border-radius: 28px; + border: 1px solid rgba(255, 255, 255, 0.1); + box-shadow: 0 8px 32px rgba(0, 0, 0, 0.3); + z-index: 1000; + /* 确保控制栏在最上层 */ +} + +.control-btn { + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + width: 60px; + height: 60px; + border: none; + border-radius: 50%; + background: rgba(79, 84, 92, 0.8); + color: white; + cursor: pointer; + transition: all 0.2s ease; + position: relative; +} + +.control-btn:hover { + background: rgba(114, 137, 218, 0.8); + transform: translateY(-2px); +} + +.control-btn:active { + transform: translateY(0); +} + +.control-btn:disabled { + background: rgba(79, 84, 92, 0.4); + color: rgba(255, 255, 255, 0.4); + cursor: not-allowed; + transform: none; +} + +.control-btn:disabled:hover { + background: rgba(79, 84, 92, 0.4); + transform: none; +} + +.btn-icon { + width: 24px; + height: 24px; + margin-bottom: 4px; +} + +.btn-text { + font-size: 12px; + font-weight: 500; +} + +/* 拨号按钮特殊样式 */ +.dial-btn.dial-active { + background: rgba(237, 66, 69, 0.9); +} + +.dial-btn.dial-active:hover { + background: rgba(237, 66, 69, 1); +} + +/* 录音按钮特殊样式 */ +.control-btn.recording { + background: rgba(237, 66, 69, 0.9); + animation: pulse 1.5s infinite; +} + +.control-btn.recording:hover { + background: rgba(237, 66, 69, 1); +} + +/* 录音按钮脉冲动画 */ +@keyframes pulse { + 0% { + box-shadow: 0 0 0 0 rgba(237, 66, 69, 0.7); + } + + 70% { + box-shadow: 0 0 0 10px rgba(237, 66, 69, 0); + } + + 100% { + box-shadow: 0 0 0 0 rgba(237, 66, 69, 0); + } +} + +/* ==================== 弹窗样式 ==================== */ +.modal { + display: none; + position: fixed; + top: 0; left: 0; + width: 100vw; + height: 100vh; + background: rgba(0, 0, 0, 0.7); + backdrop-filter: blur(5px); + z-index: 2000; + align-items: center; + justify-content: center; +} + +.modal-content { + background: #36393f; + border-radius: 12px; + width: 90%; + max-width: 500px; + max-height: 80vh; + overflow: hidden; + box-shadow: 0 20px 60px rgba(0, 0, 0, 0.5); + animation: modalSlideIn 0.3s ease-out; +} + +.settings-modal { + max-width: 700px; + max-height: 85vh; +} + +@keyframes modalSlideIn { + from { + opacity: 0; + transform: scale(0.9) translateY(-20px); + } + + to { + opacity: 1; + transform: scale(1) translateY(0); + } +} + +.modal-header { + display: flex; + align-items: center; + justify-content: space-between; + padding: 20px 24px; + border-bottom: 1px solid #40444b; + background: #2f3136; +} + +.modal-header h2 { + color: white; + font-size: 20px; + font-weight: 600; + margin: 0; +} + +.close-btn { + background: none; + border: none; + color: #b9bbbe; + font-size: 24px; + cursor: pointer; + width: 32px; + height: 32px; + display: flex; + align-items: center; + justify-content: center; + border-radius: 4px; + transition: background-color 0.2s; +} + +.close-btn:hover { + background: #40444b; + color: white; +} + +.modal-body { + padding: 24px; + max-height: calc(80vh - 80px); + overflow-y: auto; +} + +/* ==================== 输入组样式 ==================== */ +.input-group { + margin-bottom: 20px; +} + +.input-group label { + display: block; + margin-bottom: 8px; + color: #b9bbbe; + font-size: 14px; + font-weight: 500; +} + +.input-group input, +.input-group textarea { width: 100%; - height: 1px; - background-color: #007aff; + padding: 12px; + border: 1px solid #40444b; + border-radius: 6px; + background: #40444b; + color: white; + font-size: 14px; + transition: border-color 0.2s; +} + +.input-group input:focus, +.input-group textarea:focus { + outline: none; + border-color: #5865f2; +} + +.input-group textarea { + resize: vertical; + min-height: 80px; + font-family: inherit; +} + +/* ==================== 按钮样式 ==================== */ +.modal-actions { + display: flex; + gap: 12px; + justify-content: flex-end; + margin-top: 24px; +} + +/* ==================== 文件协议警告样式 ==================== */ +#fileProtocolWarning { + position: fixed; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); + width: 95%; + max-width: 800px; + background: linear-gradient(135deg, rgba(76, 175, 80, 0.95), rgba(56, 142, 60, 0.95)); + border: 3px solid #4caf50; + border-radius: 16px; + padding: 32px; + z-index: 10000; + box-shadow: 0 20px 60px rgba(0, 0, 0, 0.4); + backdrop-filter: blur(15px); + color: white; + font-family: inherit; + animation: fadeInUp 0.5s ease-out; +} + +#fileProtocolWarning h2 { + color: #e8f5e8; + margin-bottom: 20px; + font-size: 28px; + font-weight: 700; + text-shadow: 0 2px 4px rgba(0, 0, 0, 0.3); +} + +#fileProtocolWarning p { + margin-bottom: 16px; + line-height: 1.6; + font-size: 16px; + color: #e8f5e8; +} + +#fileProtocolWarning ol { + margin: 16px 0; + padding-left: 24px; + font-size: 16px; +} + +#fileProtocolWarning pre { + background: rgba(255, 255, 255, 0.15); + padding: 12px 16px; + border-radius: 8px; + margin: 12px 0; + font-family: 'Courier New', monospace; + font-size: 14px; + overflow-x: auto; + border: 1px solid rgba(255, 255, 255, 0.2); +} + +#fileProtocolWarning strong { + color: #c8e6c9; + font-weight: 600; +} + +/* 背景模糊遮罩 */ +.file-protocol-overlay { + position: fixed; + top: 0; + left: 0; + width: 100vw; + height: 100vh; + background: rgba(0, 0, 0, 0.6); + backdrop-filter: blur(10px); + z-index: 9999; + animation: fadeIn 0.3s ease-out; +} + +/* 动画效果 */ +@keyframes fadeIn { + from { + opacity: 0; + } + + to { + opacity: 1; + } +} + +@keyframes fadeInUp { + from { + opacity: 0; + transform: translate(-50%, -40%); + } + + to { + opacity: 1; + transform: translate(-50%, -50%); + } +} + +/* ==================== 连接信息样式 ==================== */ +.connection-info { + margin-top: 20px; + padding: 16px; + background: rgba(88, 101, 242, 0.1); + border: 1px solid rgba(88, 101, 242, 0.3); + border-radius: 8px; + text-align: center; +} + +.connection-info p { + color: #b9bbbe; + font-size: 14px; + line-height: 1.4; + margin: 0; +} + +.btn-primary { + background: #5865f2; + color: white; + border: none; + padding: 10px 20px; + border-radius: 6px; + cursor: pointer; + font-size: 14px; + font-weight: 500; + transition: background-color 0.2s; +} + +.btn-primary:hover { + background: #4752c4; +} + +.btn-secondary { + background: #4f545c; + color: white; + border: none; + padding: 10px 20px; + border-radius: 6px; + cursor: pointer; + font-size: 14px; + font-weight: 500; + transition: background-color 0.2s; +} + +.btn-secondary:hover { + background: #5d6269; +} + +/* ==================== 设置标签页样式 ==================== */ +.settings-tabs { + display: flex; + border-bottom: 1px solid #40444b; + margin-bottom: 20px; +} + +.tab-btn { + background: none; + border: none; + color: #b9bbbe; + padding: 12px 24px; + cursor: pointer; + font-size: 14px; + font-weight: 500; + border-bottom: 2px solid transparent; + transition: all 0.2s; +} + +.tab-btn.active { + color: white; + border-bottom-color: #5865f2; +} + +.tab-btn:hover:not(.active) { + color: white; + background: #40444b; } .tab-content { @@ -323,677 +613,403 @@ span.connection-status.llm-emoji { display: block; } -/* ==================== 文本消息输入 ==================== */ -.message-input { +/* ==================== 配置面板样式 ==================== */ +.config-panel { + background: #2f3136; + border-radius: 8px; + padding: 20px; +} + +.config-row { display: flex; - gap: 10px; - margin-bottom: 20px; + gap: 16px; + margin-bottom: 16px; } -#messageInput { - flex-grow: 1; - padding: 8px 20px 8px 20px; - border: 1px solid #b1c9f8; - border-radius: 10px; +.config-item { + flex: 1; } -#messageInput:disabled { - border: 1px solid #fafafa; - background-color: #fafafa; +.config-item label { + display: block; + margin-bottom: 6px; + color: #b9bbbe; + font-size: 12px; + font-weight: 500; } -#sendTextButton, -#recordButton { - border-radius: 20px; -} - -/* ==================== 语音消息控制 ==================== */ -.audio-controls { - display: flex; - justify-content: center; - gap: 10px; - margin-top: 20px; -} - -.audio-visualizer { - height: 60px; +.config-item input { width: 100%; - margin-top: 10px; - margin-bottom: 15px; - border: 1px solid #ddd; - border-radius: 5px; - background-color: #fafafa; + padding: 8px 12px; + border: 1px solid #40444b; + border-radius: 4px; + background: #40444b; + color: white; + font-size: 14px; } -.record-button { - background-color: #db4437; +/* ==================== MCP工具样式 ==================== */ +.mcp-tools-container { + background: #2f3136; + border-radius: 8px; + padding: 0; + overflow: hidden; } -.record-button:hover { - background-color: #c53929; -} - -.record-button.recording { - animation: pulse 1.5s infinite; -} - -@keyframes pulse { - 0% { - background-color: #db4437; - } - - 50% { - background-color: #ff6659; - } - - 100% { - background-color: #db4437; - } -} - -/* ==================== 会话记录和日志 ==================== */ -.flex-container { +.mcp-tools-header { display: flex; - margin-top: 20px; - background-color: #f9fafb; + justify-content: space-between; + align-items: center; + padding: 16px 20px; + background: #36393f; + border-bottom: 1px solid #40444b; } -/* 会话记录容器 */ -.conversation { +.mcp-tools-header h3 { + margin: 0; + color: #ffffff; + font-size: 16px; + font-weight: 600; +} + +.mcp-tools-panel { + padding: 20px; + transition: max-height 0.3s ease; + overflow: hidden; +} + +.mcp-tools-panel.expanded { + max-height: 500px; +} + +.mcp-tools-panel:not(.expanded) { + max-height: 0; + padding: 0 20px; +} + +.mcp-tools-list { + min-height: 200px; max-height: 300px; overflow-y: auto; - border: 1px solid #ddd; - border-right: none; - border-radius: 5px 0px 0px 5px; - padding: 10px; - flex: 1; -} - -/* 消息气泡 */ -.message { - margin-bottom: 10px; - padding: 8px 12px; - border-radius: 8px; - width: fit-content; - max-width: 80%; -} - -.user { - background-color: #fff; - margin-left: auto; - margin-right: 10px; - text-align: right; - box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1); -} - -.server { - background-color: #95ec69; - margin-right: auto; - margin-left: 10px; - box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1); -} - -/* 日志容器 */ -#logContainer { - margin-top: 0; - padding: 10px; - border-radius: 0px 5px 5px 0px; - font-family: monospace; - height: 300px; - overflow-y: auto; - flex: 1; - border: 1px solid #ddd; -} - -.log-entry { - margin: 5px 0; - font-size: 12px; -} - -.log-info { - color: #333; -} - -.log-error { - color: #db4437; -} - -.log-success { - color: #0f9d58; -} - -/* ==================== MCP 工具管理 ==================== */ -.mcp-tools-container { - display: grid; - gap: 12px; - margin-top: 10px; + margin-bottom: 16px; } +/* MCP工具卡片样式 */ .mcp-tool-card { - background-color: white; - border: 1px solid #e0e0e0; + background: #36393f; + border: 1px solid #40444b; border-radius: 8px; - padding: 15px; - transition: all 0.2s; + padding: 16px; + margin-bottom: 12px; + transition: background-color 0.2s; } .mcp-tool-card:hover { - box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1); -} - -.mcp-tool-card.disabled { - opacity: 0.6; - pointer-events: none; + background: #40444b; } .mcp-tool-header { display: flex; - align-items: center; justify-content: space-between; - margin-bottom: 10px; + align-items: center; + margin-bottom: 8px; } .mcp-tool-name { - font-size: 15px; font-weight: 600; - color: #333; - flex: 1; + color: white; + font-size: 14px; } .mcp-tool-actions { display: flex; - gap: 6px; + gap: 8px; +} + +.mcp-edit-btn { + padding: 4px 10px; + border: none; + border-radius: 4px; + background-color: #2196f3; + color: white; + cursor: pointer; + font-size: 12px; + transition: background-color 0.2s; +} + +.mcp-edit-btn:hover { + background-color: #1976d2; +} + +.mcp-delete-btn { + padding: 4px 10px; + border: none; + border-radius: 4px; + background-color: #f44336; + color: white; + cursor: pointer; + font-size: 12px; + transition: background-color 0.2s; +} + +.mcp-delete-btn:hover { + background-color: #d32f2f; } .mcp-tool-description { - color: #666; + color: #b9bbbe; font-size: 13px; - line-height: 1.5; - margin-bottom: 8px; + line-height: 1.4; + margin-bottom: 12px; } .mcp-tool-info { - background-color: #f9f9f9; - border: 1px solid #e0e0e0; + background: #2f3136; border-radius: 4px; padding: 8px; - font-size: 12px; } .mcp-tool-info-row { display: flex; - gap: 15px; + justify-content: space-between; margin-bottom: 4px; } .mcp-tool-info-label { - color: #999; - min-width: 60px; + color: #b9bbbe; + font-size: 12px; } .mcp-tool-info-value { - color: #333; - font-family: 'Courier New', monospace; -} - -/* MCP 属性项 */ -.mcp-property-item { - background-color: white; - border: 1px solid #e0e0e0; - border-radius: 5px; - padding: 12px; - margin-bottom: 10px; -} - -.mcp-property-header { - display: flex; - align-items: center; - justify-content: space-between; - margin-bottom: 10px; -} - -.mcp-property-name { - font-weight: 600; - color: #333; -} - -.mcp-property-row { - display: grid; - grid-template-columns: 1fr 1fr; - gap: 10px; - margin-bottom: 8px; -} - -.mcp-property-row-full { - margin-bottom: 8px; -} - -.mcp-small-label { - display: block; - margin-bottom: 4px; - font-size: 12px; - color: #666; -} - -.mcp-small-input { - width: 100%; - padding: 6px 8px; - border: 1px solid #ddd; - border-radius: 4px; - font-size: 13px; -} - -.mcp-checkbox-label { - display: flex; - align-items: center; - gap: 6px; - font-size: 13px; - color: #666; - cursor: pointer; -} - -.mcp-error { - background-color: #ffebee; - color: #c62828; - padding: 10px; - border-radius: 5px; - margin-bottom: 15px; - font-size: 14px; -} - -.mcp-badge { - display: inline-block; - padding: 2px 8px; - border-radius: 12px; - font-size: 11px; - font-weight: 500; - margin-left: 8px; -} - -.mcp-badge-required { - background-color: #ffebee; - color: #c62828; -} - -.mcp-badge-optional { - background-color: #e3f2fd; - color: #1976d2; -} - -/* ==================== 脚本加载状态 ==================== */ -.script-status { - display: inline-block; - width: 10px; - height: 10px; - border-radius: 50%; - margin-right: 5px; -} - -.script-loaded { - background-color: #0f9d58; -} - -.script-loading { - background-color: #f4b400; -} - -.script-error { - background-color: #db4437; -} - -.script-list { - margin: 10px 0; - padding: 10px; - background-color: #f9f9f9; - border-radius: 5px; - font-family: monospace; - font-size: 11px; -} - -#scriptStatus.success { - background-color: #e6f4ea; - color: #0f9d58; - border-left: 4px solid #0f9d58; -} - -#scriptStatus.error { - background-color: #fce8e6; - color: #db4437; - border-left: 4px solid #db4437; -} - -#scriptStatus.warning { - background-color: #fef7e0; - color: #f4b400; - border-left: 4px solid #f4b400; -} - -/* ==================== File协议警告 ==================== */ -#fileProtocolWarning { - position: fixed; - top: 0; - left: 0; - width: 100%; - height: 100%; - background-color: rgba(0, 0, 0, 0.8); - display: flex; - flex-direction: column; - align-items: center; - justify-content: center; - z-index: 9999; color: white; - padding: 20px; - box-sizing: border-box; + font-size: 12px; + font-weight: 500; } -#fileProtocolWarning h2 { - color: #ff4d4d; - margin-bottom: 20px; +.mcp-actions { + text-align: center; } -#fileProtocolWarning pre { - background-color: green; - font-size: 18px; - padding: 15px; - border-radius: 5px; - font-family: monospace; - overflow-x: auto; - margin: 15px 0; +.properties-container { + background: #2f3136; + border: 1px solid #40444b; + border-radius: 6px; + padding: 16px; + margin-bottom: 12px; } -#fileProtocolWarning button { - background-color: #4CAF50; +.property-item { + display: flex; + gap: 8px; + margin-bottom: 8px; + align-items: center; +} + +.property-item input { + flex: 1; + padding: 6px 8px; + border: 1px solid #40444b; + border-radius: 4px; + background: #40444b; + color: white; + font-size: 12px; +} + +.remove-property { + background: #ed4245; color: white; border: none; - padding: 10px 20px; - text-align: center; - text-decoration: none; - display: inline-block; - font-size: 16px; - margin: 10px 2px; - cursor: pointer; + padding: 4px 8px; border-radius: 4px; + cursor: pointer; + font-size: 12px; } -#fileProtocolWarning button:hover { - background-color: #45a049; +.remove-property:hover { + background: #c03537; } -/* ==================== 响应式布局 ==================== */ +/* ==================== 音频可视化器样式 ==================== */ +.audio-visualizer { + position: fixed; + bottom: 100px; + left: 20px; + width: 200px; + height: 60px; + background: rgba(0, 0, 0, 0.3); + backdrop-filter: blur(10px); + border-radius: 10px; + border: 1px solid rgba(255, 255, 255, 0.1); + z-index: 999; +} -/* 大屏幕 (宽度 > 1200px) */ -@media (min-width: 1201px) { +/* ==================== 响应式设计 ==================== */ +@media (max-width: 768px) { .container { - max-width: 80%; - } -} - -/* 中等屏幕 (宽度 <= 1200px) */ -@media (max-width: 1200px) { - .container { - max-width: 95%; padding: 10px; } -} -/* 平板设备 (宽度 <= 1060px) */ -@media (max-width: 1060px) { - - /* 两栏布局改为单栏 */ - .two-column-layout { - flex-direction: column; - gap: 0; - } - - .two-column-layout>.section { - width: 100%; - margin-top: 10px; + .live2d-section { + height: 60vh; margin-bottom: 10px; } - /* 连接状态标签调整 */ - .connection-status { - flex-wrap: wrap; - gap: 8px; - margin-left: 0px; - padding: 0 8px; + .live2d-canvas { + max-width: 300px; + max-height: 450px; } - /* 会话记录和日志容器改为上下布局 */ - .flex-container { - flex-direction: column; + .control-bar { + bottom: 10px; + padding: 8px 16px; + gap: 12px; } - .conversation, - #logContainer { - border-radius: 5px; - border: 1px solid #ddd; - max-height: 200px; - } - - .conversation { - margin-bottom: 10px; - } - - /* MCP 属性行改为单列 */ - .mcp-property-row { - grid-template-columns: 1fr; - } -} - -/* 移动设备 (宽度 <= 768px) */ -@media (max-width: 768px) { - body { - padding: 0; - } - - .container { - max-width: 100%; - padding: 5px; - } - - /* 调整区块内边距 */ - .section { - padding: 8px; - margin-top: 8px; - margin-bottom: 8px; - border-radius: 10px; - } - - /* 调整标题字体 */ - .section h2 { - font-size: 13px; - flex-wrap: wrap; - gap: 5px; - } - - /* 配置行改为单列 */ - .config-row { - flex-direction: column; - } - - /* 按钮调整 */ - .toggle-button, - .connect-button { - padding: 3px 10px; - font-size: 12px; - height: 24px; - line-height: 18px; - } - - button { - padding: 6px 12px; - font-size: 13px; - } - - /* 输入框 */ - #serverUrl, - #otaUrl, - #messageInput { - font-size: 14px; - padding: 6px; - } - - /* 配置项标签 */ - .config-item label { - min-width: 60px; - font-size: 12px; - } - - .config-item input { - font-size: 13px; - padding: 5px; - } - - /* 标签页 */ - .tab { - padding: 8px 12px; - font-size: 14px; - } - - /* 消息气泡 */ - .message { - max-width: 90%; - font-size: 14px; - padding: 6px 10px; - } - - /* 日志容器 */ - #logContainer { - font-size: 11px; - padding: 8px; - } - - .log-entry { - font-size: 11px; - } - - /* 连接状态 */ - .connection-status { - margin-left: 0; - padding: 5px 0; - height: auto; - line-height: normal; - } - - .connection-status .status { - font-size: 11px; - padding: 0px 6px; - } - - /* 音频可视化 */ - .audio-visualizer { + .control-btn { + width: 50px; height: 50px; } - /* MCP 工具卡片 */ - .mcp-tool-card { - padding: 10px; + .btn-icon { + width: 20px; + height: 20px; } - .mcp-tool-name { - font-size: 13px; - } - - .mcp-tool-description { - font-size: 12px; - } - - .mcp-tool-info { - font-size: 11px; - padding: 6px; - } - - .mcp-tool-info-row { - flex-direction: column; - gap: 2px; - } - - .mcp-tool-info-label { - min-width: auto; - } - - /* 消息输入框 */ - .message-input { - gap: 5px; - } - - /* 会话记录高度调整 */ - .conversation, - #logContainer { - max-height: 180px; - } -} - -/* 小型移动设备 (宽度 <= 480px) */ -@media (max-width: 480px) { - .container { - padding: 3px; - } - - .section { - padding: 6px; - margin-top: 5px; - margin-bottom: 5px; - } - - .section h2 { - font-size: 12px; - } - - /* 更紧凑的按钮 */ - .toggle-button, - .connect-button { - padding: 2px 8px; - font-size: 11px; - height: 22px; - line-height: 16px; - } - - button { - padding: 5px 10px; - font-size: 12px; - } - - .config-item label { - min-width: 50px; - font-size: 11px; - } - - .config-item input { - font-size: 12px; - } - - /* 标签页 */ - .tab { - padding: 6px 10px; - font-size: 13px; - } - - /* 消息气泡 */ - .message { - max-width: 95%; - font-size: 13px; - } - - /* 会话记录 */ - .conversation, - #logContainer { - max-height: 150px; - padding: 8px; - } - - /* 连接状态文字更小 */ - .connection-status .status { + .btn-text { font-size: 10px; } - /* MCP 工具 */ - .mcp-tool-name { + .chat-stream { + width: 250px; + right: 10px; + bottom: 80px; + } + + .message-bubble { + max-width: 200px; font-size: 12px; } - .mcp-tool-description { - font-size: 11px; + .modal-content { + width: 95%; + margin: 10px; } + + .config-row { + flex-direction: column; + gap: 12px; + } + + .audio-visualizer { + width: 150px; + height: 50px; + left: 10px; + bottom: 80px; + } +} + +@media (max-width: 480px) { + .live2d-section { + height: 50vh; + } + + .live2d-canvas { + max-width: 250px; + max-height: 350px; + } + + .control-bar { + gap: 8px; + padding: 6px 12px; + } + + .control-btn { + width: 45px; + height: 45px; + } + + .btn-text { + display: none; + } + + .chat-stream { + width: 200px; + max-height: 150px; + } + + .audio-visualizer { + width: 120px; + height: 40px; + left: 5px; + bottom: 70px; + } +} + +/* 竖屏优化 */ +@media (max-height: 700px) { + .live2d-section { + height: 55vh; + } + + .live2d-canvas { + max-height: 400px; + } + + .chat-stream { + bottom: 70px; + max-height: 150px; + } + + .audio-visualizer { + bottom: 70px; + } +} + +/* 横屏优化 */ +@media (min-width: 1024px) and (min-height: 600px) { + .live2d-section { + height: 75vh; + } + + .live2d-canvas { + max-width: 500px; + max-height: 650px; + } + + .chat-stream { + width: 350px; + max-height: 250px; + } + + .audio-visualizer { + width: 250px; + height: 80px; + } +} + +/* 滚动条样式 */ +.chat-stream::-webkit-scrollbar, +.modal-body::-webkit-scrollbar, +.mcp-tools-list::-webkit-scrollbar { + width: 6px; +} + +.chat-stream::-webkit-scrollbar-track, +.modal-body::-webkit-scrollbar-track, +.mcp-tools-list::-webkit-scrollbar-track { + background: #2f3136; + border-radius: 3px; +} + +.chat-stream::-webkit-scrollbar-thumb, +.modal-body::-webkit-scrollbar-thumb, +.mcp-tools-list::-webkit-scrollbar-thumb { + background: #40444b; + border-radius: 3px; +} + +.chat-stream::-webkit-scrollbar-thumb:hover, +.modal-body::-webkit-scrollbar-thumb:hover, +.mcp-tools-list::-webkit-scrollbar-thumb:hover { + background: #4f545c; } \ No newline at end of file diff --git a/main/xiaozhi-server/test/hiyori_pro_zh/ReadMe.txt b/main/xiaozhi-server/test/hiyori_pro_zh/ReadMe.txt new file mode 100644 index 00000000..59536f27 --- /dev/null +++ b/main/xiaozhi-server/test/hiyori_pro_zh/ReadMe.txt @@ -0,0 +1,72 @@ + +============================================================ + +示例模型 +桃濑日和 - PRO + +============================================================ + + 该示例时基于Cubism3.0制作的标准模型素材。 + + 可用于学习变形器的构造以及参数的使用方法。 + 模型的肩部应用了新功能【胶水】。 + + +------------------------------ +素材使用许可 +------------------------------ + + 普通用户以及小规模企业在同意授权协议的情况下可用于商业用途。 + 中/大规模的企业只能用于非公开的内部试用。 + 在使用该素材时,请确认以下的【无偿提供素材使用授权协议】中的“授权类型”、“Live2D原创角色”等的相关内容, + 并必须接受【Live2D Cubism 示例模型的使用授权要求】中的利用条件。 + + 有关许可证的更多信息,请参阅以下页面。 + https://www.live2d.com/zh-CHS/download/sample-data/ + + +------------------------------ +创作者 +------------------------------ + + 插画:Kani Biimu + 模型:Live2D + + +------------------------------ +素材内容 +------------------------------ + + 模型文件(cmo3) ※包含物理模拟的设定 + 动画文件(can3) + 嵌入文件列表(runtime文件夹) + ・模型数据(moc3) + ・动作数据(motion3.json) + ・模型设定文件(model3.json) + ・物理模拟设定文件(physics3.json) + ・姿势设定文件(pose3.json) + ・辅助显示的文件(cdi3.json) + + +------------------------------ +更新记录 +------------------------------ + +【cmo3】 + + hiyori_pro_t11 + 2023年03月08日 修改了部分模型关键点 + + hiyori_pro_t10 + 2021年06月10日 公开 + + +【can3】 + + hiyori_pro_t04 + 2023年03月08日 修改了部分动画关键帧 + + hiyori_pro_t03 + 2021年06月10日 公开 + + \ No newline at end of file diff --git a/main/xiaozhi-server/test/hiyori_pro_zh/hiyori_pro_t04.can3 b/main/xiaozhi-server/test/hiyori_pro_zh/hiyori_pro_t04.can3 new file mode 100644 index 00000000..03695b3b Binary files /dev/null and b/main/xiaozhi-server/test/hiyori_pro_zh/hiyori_pro_t04.can3 differ diff --git a/main/xiaozhi-server/test/hiyori_pro_zh/hiyori_pro_t11.cmo3 b/main/xiaozhi-server/test/hiyori_pro_zh/hiyori_pro_t11.cmo3 new file mode 100644 index 00000000..57ea71eb Binary files /dev/null and b/main/xiaozhi-server/test/hiyori_pro_zh/hiyori_pro_t11.cmo3 differ diff --git a/main/xiaozhi-server/test/hiyori_pro_zh/runtime/hiyori_pro_t11.2048/texture_00.png b/main/xiaozhi-server/test/hiyori_pro_zh/runtime/hiyori_pro_t11.2048/texture_00.png new file mode 100644 index 00000000..ec1107f2 Binary files /dev/null and b/main/xiaozhi-server/test/hiyori_pro_zh/runtime/hiyori_pro_t11.2048/texture_00.png differ diff --git a/main/xiaozhi-server/test/hiyori_pro_zh/runtime/hiyori_pro_t11.2048/texture_01.png b/main/xiaozhi-server/test/hiyori_pro_zh/runtime/hiyori_pro_t11.2048/texture_01.png new file mode 100644 index 00000000..2f50d2fd Binary files /dev/null and b/main/xiaozhi-server/test/hiyori_pro_zh/runtime/hiyori_pro_t11.2048/texture_01.png differ diff --git a/main/xiaozhi-server/test/hiyori_pro_zh/runtime/hiyori_pro_t11.cdi3.json b/main/xiaozhi-server/test/hiyori_pro_zh/runtime/hiyori_pro_t11.cdi3.json new file mode 100644 index 00000000..3816ad89 --- /dev/null +++ b/main/xiaozhi-server/test/hiyori_pro_zh/runtime/hiyori_pro_t11.cdi3.json @@ -0,0 +1,533 @@ +{ + "Version": 3, + "Parameters": [ + { + "Id": "ParamAngleX", + "GroupId": "ParamGroupFace", + "Name": "角度 X" + }, + { + "Id": "ParamAngleY", + "GroupId": "ParamGroupFace", + "Name": "角度 Y" + }, + { + "Id": "ParamAngleZ", + "GroupId": "ParamGroupFace", + "Name": "角度 Z" + }, + { + "Id": "ParamCheek", + "GroupId": "ParamGroupFace", + "Name": "脸颊泛红" + }, + { + "Id": "ParamEyeLOpen", + "GroupId": "ParamGroupEyes", + "Name": "左眼 开闭" + }, + { + "Id": "ParamEyeLSmile", + "GroupId": "ParamGroupEyes", + "Name": "左眼 微笑" + }, + { + "Id": "ParamEyeROpen", + "GroupId": "ParamGroupEyes", + "Name": "右眼 开闭" + }, + { + "Id": "ParamEyeRSmile", + "GroupId": "ParamGroupEyes", + "Name": "右眼 微笑" + }, + { + "Id": "ParamEyeBallX", + "GroupId": "ParamGroupEyeballs", + "Name": "眼珠 X" + }, + { + "Id": "ParamEyeBallY", + "GroupId": "ParamGroupEyeballs", + "Name": "眼珠 Y" + }, + { + "Id": "ParamBrowLY", + "GroupId": "ParamGroupBrows", + "Name": "左眉 上下" + }, + { + "Id": "ParamBrowRY", + "GroupId": "ParamGroupBrows", + "Name": "右眉 上下" + }, + { + "Id": "ParamBrowLX", + "GroupId": "ParamGroupBrows", + "Name": "左眉 左右" + }, + { + "Id": "ParamBrowRX", + "GroupId": "ParamGroupBrows", + "Name": "右眉 左右" + }, + { + "Id": "ParamBrowLAngle", + "GroupId": "ParamGroupBrows", + "Name": "左眉 角度" + }, + { + "Id": "ParamBrowRAngle", + "GroupId": "ParamGroupBrows", + "Name": "右眉 角度" + }, + { + "Id": "ParamBrowLForm", + "GroupId": "ParamGroupBrows", + "Name": "左眉 变形" + }, + { + "Id": "ParamBrowRForm", + "GroupId": "ParamGroupBrows", + "Name": "右眉 变形" + }, + { + "Id": "ParamMouthForm", + "GroupId": "ParamGroupMouth", + "Name": "嘴 变形" + }, + { + "Id": "ParamMouthOpenY", + "GroupId": "ParamGroupMouth", + "Name": "嘴 开闭" + }, + { + "Id": "ParamBodyAngleX", + "GroupId": "ParamGroupBody", + "Name": "身体的旋转 X" + }, + { + "Id": "ParamBodyAngleY", + "GroupId": "ParamGroupBody", + "Name": "身体的旋转 Y" + }, + { + "Id": "ParamBodyAngleZ", + "GroupId": "ParamGroupBody", + "Name": "身体的旋转 Z" + }, + { + "Id": "ParamBreath", + "GroupId": "ParamGroupBody", + "Name": "呼吸" + }, + { + "Id": "ParamShoulder", + "GroupId": "ParamGroupBody", + "Name": "肩" + }, + { + "Id": "ParamLeg", + "GroupId": "ParamGroupBody", + "Name": "腿" + }, + { + "Id": "ParamArmLA", + "GroupId": "ParamGroupArms", + "Name": "左臂 A" + }, + { + "Id": "ParamArmRA", + "GroupId": "ParamGroupArms", + "Name": "右臂 A" + }, + { + "Id": "ParamArmLB", + "GroupId": "ParamGroupArms", + "Name": "左臂 B" + }, + { + "Id": "ParamArmRB", + "GroupId": "ParamGroupArms", + "Name": "右臂 B" + }, + { + "Id": "ParamHandLB", + "GroupId": "ParamGroupArms", + "Name": "左手B 旋转" + }, + { + "Id": "ParamHandRB", + "GroupId": "ParamGroupArms", + "Name": "右手B 旋转" + }, + { + "Id": "ParamHandL", + "GroupId": "ParamGroupArms", + "Name": "左手" + }, + { + "Id": "ParamHandR", + "GroupId": "ParamGroupArms", + "Name": "右手" + }, + { + "Id": "ParamBustY", + "GroupId": "ParamGroupSway", + "Name": "胸部 摇动" + }, + { + "Id": "ParamHairAhoge", + "GroupId": "ParamGroupSway", + "Name": "头发摇动 呆毛" + }, + { + "Id": "ParamHairFront", + "GroupId": "ParamGroupSway", + "Name": "头发摇动 前" + }, + { + "Id": "ParamHairBack", + "GroupId": "ParamGroupSway", + "Name": "头发摇动 后" + }, + { + "Id": "ParamSideupRibbon", + "GroupId": "ParamGroupSway", + "Name": "发饰的摇动" + }, + { + "Id": "ParamRibbon", + "GroupId": "ParamGroupSway", + "Name": "蝴蝶结的摇动" + }, + { + "Id": "ParamSkirt", + "GroupId": "ParamGroupSway", + "Name": "短裙的摇动" + }, + { + "Id": "ParamSkirt2", + "GroupId": "ParamGroupSway", + "Name": "短裙的上卷" + }, + { + "Id": "Param_Angle_Rotation_1_ArtMesh62", + "GroupId": "ParamGroup2", + "Name": "[0]辫子左" + }, + { + "Id": "Param_Angle_Rotation_2_ArtMesh62", + "GroupId": "ParamGroup2", + "Name": "[1]辫子左" + }, + { + "Id": "Param_Angle_Rotation_3_ArtMesh62", + "GroupId": "ParamGroup2", + "Name": "[2]辫子左" + }, + { + "Id": "Param_Angle_Rotation_4_ArtMesh62", + "GroupId": "ParamGroup2", + "Name": "[3]辫子左" + }, + { + "Id": "Param_Angle_Rotation_5_ArtMesh62", + "GroupId": "ParamGroup2", + "Name": "[4]辫子左" + }, + { + "Id": "Param_Angle_Rotation_6_ArtMesh62", + "GroupId": "ParamGroup2", + "Name": "[5]辫子左" + }, + { + "Id": "Param_Angle_Rotation_7_ArtMesh62", + "GroupId": "ParamGroup2", + "Name": "[6]辫子左" + }, + { + "Id": "Param_Angle_Rotation_1_ArtMesh61", + "GroupId": "ParamGroup", + "Name": "[0]辫子右" + }, + { + "Id": "Param_Angle_Rotation_2_ArtMesh61", + "GroupId": "ParamGroup", + "Name": "[1]辫子右" + }, + { + "Id": "Param_Angle_Rotation_3_ArtMesh61", + "GroupId": "ParamGroup", + "Name": "[2]辫子右" + }, + { + "Id": "Param_Angle_Rotation_4_ArtMesh61", + "GroupId": "ParamGroup", + "Name": "[3]辫子右" + }, + { + "Id": "Param_Angle_Rotation_5_ArtMesh61", + "GroupId": "ParamGroup", + "Name": "[4]辫子右" + }, + { + "Id": "Param_Angle_Rotation_6_ArtMesh61", + "GroupId": "ParamGroup", + "Name": "[5]辫子右" + }, + { + "Id": "Param_Angle_Rotation_7_ArtMesh61", + "GroupId": "ParamGroup", + "Name": "[6]辫子右" + }, + { + "Id": "Param_Angle_Rotation_1_ArtMesh55", + "GroupId": "ParamGroup4", + "Name": "[0]侧发左" + }, + { + "Id": "Param_Angle_Rotation_2_ArtMesh55", + "GroupId": "ParamGroup4", + "Name": "[1]侧发左" + }, + { + "Id": "Param_Angle_Rotation_3_ArtMesh55", + "GroupId": "ParamGroup4", + "Name": "[2]侧发左" + }, + { + "Id": "Param_Angle_Rotation_4_ArtMesh55", + "GroupId": "ParamGroup4", + "Name": "[3]侧发左" + }, + { + "Id": "Param_Angle_Rotation_5_ArtMesh55", + "GroupId": "ParamGroup4", + "Name": "[4]侧发左" + }, + { + "Id": "Param_Angle_Rotation_6_ArtMesh55", + "GroupId": "ParamGroup4", + "Name": "[5]侧发左" + }, + { + "Id": "Param_Angle_Rotation_7_ArtMesh55", + "GroupId": "ParamGroup4", + "Name": "[6]侧发左" + }, + { + "Id": "Param_Angle_Rotation_1_ArtMesh54", + "GroupId": "ParamGroup3", + "Name": "[0]侧发右" + }, + { + "Id": "Param_Angle_Rotation_2_ArtMesh54", + "GroupId": "ParamGroup3", + "Name": "[1]侧发右" + }, + { + "Id": "Param_Angle_Rotation_3_ArtMesh54", + "GroupId": "ParamGroup3", + "Name": "[2]侧发右" + }, + { + "Id": "Param_Angle_Rotation_4_ArtMesh54", + "GroupId": "ParamGroup3", + "Name": "[3]侧发右" + }, + { + "Id": "Param_Angle_Rotation_5_ArtMesh54", + "GroupId": "ParamGroup3", + "Name": "[4]侧发右" + }, + { + "Id": "Param_Angle_Rotation_6_ArtMesh54", + "GroupId": "ParamGroup3", + "Name": "[5]侧发右" + }, + { + "Id": "Param_Angle_Rotation_7_ArtMesh54", + "GroupId": "ParamGroup3", + "Name": "[6]侧发右" + } + ], + "ParameterGroups": [ + { + "Id": "ParamGroupFace", + "GroupId": "", + "Name": "脸" + }, + { + "Id": "ParamGroupEyes", + "GroupId": "", + "Name": "眼睛" + }, + { + "Id": "ParamGroupEyeballs", + "GroupId": "", + "Name": "眼珠" + }, + { + "Id": "ParamGroupBrows", + "GroupId": "", + "Name": "眉毛" + }, + { + "Id": "ParamGroupMouth", + "GroupId": "", + "Name": "嘴" + }, + { + "Id": "ParamGroupBody", + "GroupId": "", + "Name": "身体" + }, + { + "Id": "ParamGroupArms", + "GroupId": "", + "Name": "手臂" + }, + { + "Id": "ParamGroupSway", + "GroupId": "", + "Name": "摇动" + }, + { + "Id": "ParamGroup2", + "GroupId": "", + "Name": "摇动 辫子左" + }, + { + "Id": "ParamGroup", + "GroupId": "", + "Name": "摇动 辫子右" + }, + { + "Id": "ParamGroup4", + "GroupId": "", + "Name": "摇动 侧发左" + }, + { + "Id": "ParamGroup3", + "GroupId": "", + "Name": "摇动 侧发右" + } + ], + "Parts": [ + { + "Id": "PartCore", + "Name": "Core" + }, + { + "Id": "PartCheek", + "Name": "脸颊" + }, + { + "Id": "PartBrow", + "Name": "眉毛" + }, + { + "Id": "PartEye", + "Name": "眼睛" + }, + { + "Id": "PartNose", + "Name": "鼻子" + }, + { + "Id": "PartMouth", + "Name": "嘴" + }, + { + "Id": "PartFace", + "Name": "脸" + }, + { + "Id": "PartEar", + "Name": "耳朵" + }, + { + "Id": "PartHairSide", + "Name": "侧发" + }, + { + "Id": "PartHairFront", + "Name": "前发" + }, + { + "Id": "PartHairBack", + "Name": "后发" + }, + { + "Id": "PartNeck", + "Name": "脖子" + }, + { + "Id": "PartArmA", + "Name": "手臂A" + }, + { + "Id": "PartArmB", + "Name": "手臂B" + }, + { + "Id": "PartBody", + "Name": "身体" + }, + { + "Id": "PartBackground", + "Name": "背景" + }, + { + "Id": "PartSketch", + "Name": "[参考图]" + }, + { + "Id": "PartEyeBall", + "Name": "眼珠" + }, + { + "Id": "ArtMesh55_Skinning", + "Name": "侧发右" + }, + { + "Id": "Part4", + "Name": "侧发左(旋转)" + }, + { + "Id": "ArtMesh54_Skinning", + "Name": "侧发右(蒙皮)" + }, + { + "Id": "Part3", + "Name": "侧发右(旋转)" + }, + { + "Id": "ArtMesh61_Skinning", + "Name": "辫子右(蒙皮)" + }, + { + "Id": "Part", + "Name": "辫子右(旋转)" + }, + { + "Id": "ArtMesh62_Skinning", + "Name": "辫子左(蒙皮)" + }, + { + "Id": "Part2", + "Name": "辫子左(旋转)" + } + ], + "CombinedParameters": [ + [ + "ParamAngleX", + "ParamAngleY" + ], + [ + "ParamMouthForm", + "ParamMouthOpenY" + ] + ] +} \ No newline at end of file diff --git a/main/xiaozhi-server/test/hiyori_pro_zh/runtime/hiyori_pro_t11.moc3 b/main/xiaozhi-server/test/hiyori_pro_zh/runtime/hiyori_pro_t11.moc3 new file mode 100644 index 00000000..dc630853 Binary files /dev/null and b/main/xiaozhi-server/test/hiyori_pro_zh/runtime/hiyori_pro_t11.moc3 differ diff --git a/main/xiaozhi-server/test/hiyori_pro_zh/runtime/hiyori_pro_t11.model3.json b/main/xiaozhi-server/test/hiyori_pro_zh/runtime/hiyori_pro_t11.model3.json new file mode 100644 index 00000000..f2046763 --- /dev/null +++ b/main/xiaozhi-server/test/hiyori_pro_zh/runtime/hiyori_pro_t11.model3.json @@ -0,0 +1,82 @@ +{ + "Version": 3, + "FileReferences": { + "Moc": "hiyori_pro_t11.moc3", + "Textures": [ + "hiyori_pro_t11.2048/texture_00.png", + "hiyori_pro_t11.2048/texture_01.png" + ], + "Physics": "hiyori_pro_t11.physics3.json", + "Pose": "hiyori_pro_t11.pose3.json", + "DisplayInfo": "hiyori_pro_t11.cdi3.json", + "Motions": { + "Idle": [ + { + "File": "motion/hiyori_m01.motion3.json" + }, + { + "File": "motion/hiyori_m02.motion3.json" + }, + { + "File": "motion/hiyori_m05.motion3.json" + } + ], + "Flick": [ + { + "File": "motion/hiyori_m03.motion3.json" + } + ], + "FlickDown": [ + { + "File": "motion/hiyori_m04.motion3.json" + } + ], + "FlickUp": [ + { + "File": "motion/hiyori_m06.motion3.json" + } + ], + "Tap": [ + { + "File": "motion/hiyori_m07.motion3.json" + }, + { + "File": "motion/hiyori_m08.motion3.json" + } + ], + "Tap@Body": [ + { + "File": "motion/hiyori_m09.motion3.json" + } + ], + "Flick@Body": [ + { + "File": "motion/hiyori_m10.motion3.json" + } + ] + } + }, + "Groups": [ + { + "Target": "Parameter", + "Name": "LipSync", + "Ids": [ + "ParamMouthOpenY" + ] + }, + { + "Target": "Parameter", + "Name": "EyeBlink", + "Ids": [ + "ParamEyeLOpen", + "ParamEyeROpen" + ] + } + ], + "HitAreas": [ + { + "Id": "HitArea", + "Name": "Body" + } + ] +} \ No newline at end of file diff --git a/main/xiaozhi-server/test/hiyori_pro_zh/runtime/hiyori_pro_t11.physics3.json b/main/xiaozhi-server/test/hiyori_pro_zh/runtime/hiyori_pro_t11.physics3.json new file mode 100644 index 00000000..51e724ca --- /dev/null +++ b/main/xiaozhi-server/test/hiyori_pro_zh/runtime/hiyori_pro_t11.physics3.json @@ -0,0 +1,1569 @@ +{ + "Version": 3, + "Meta": { + "PhysicsSettingCount": 11, + "TotalInputCount": 34, + "TotalOutputCount": 35, + "VertexCount": 58, + "EffectiveForces": { + "Gravity": { + "X": 0, + "Y": -1 + }, + "Wind": { + "X": 0, + "Y": 0 + } + }, + "PhysicsDictionary": [ + { + "Id": "PhysicsSetting1", + "Name": "前发" + }, + { + "Id": "PhysicsSetting2", + "Name": "后发" + }, + { + "Id": "PhysicsSetting3", + "Name": "丝带 头发" + }, + { + "Id": "PhysicsSetting4", + "Name": "短裙 横向摇动" + }, + { + "Id": "PhysicsSetting5", + "Name": "短裙 纵向摇动" + }, + { + "Id": "PhysicsSetting6", + "Name": "丝带 身体" + }, + { + "Id": "PhysicsSetting7", + "Name": "胸 摇动" + }, + { + "Id": "PhysicsSetting8", + "Name": "辫子 右" + }, + { + "Id": "PhysicsSetting9", + "Name": "辫子 左" + }, + { + "Id": "PhysicsSetting10", + "Name": "侧发 右" + }, + { + "Id": "PhysicsSetting11", + "Name": "侧发 左" + } + ] + }, + "PhysicsSettings": [ + { + "Id": "PhysicsSetting1", + "Input": [ + { + "Source": { + "Target": "Parameter", + "Id": "ParamAngleX" + }, + "Weight": 60, + "Type": "X", + "Reflect": false + }, + { + "Source": { + "Target": "Parameter", + "Id": "ParamAngleZ" + }, + "Weight": 60, + "Type": "Angle", + "Reflect": false + }, + { + "Source": { + "Target": "Parameter", + "Id": "ParamBodyAngleX" + }, + "Weight": 40, + "Type": "X", + "Reflect": false + }, + { + "Source": { + "Target": "Parameter", + "Id": "ParamBodyAngleZ" + }, + "Weight": 40, + "Type": "Angle", + "Reflect": false + } + ], + "Output": [ + { + "Destination": { + "Target": "Parameter", + "Id": "ParamHairFront" + }, + "VertexIndex": 1, + "Scale": 1.522, + "Weight": 100, + "Type": "Angle", + "Reflect": false + } + ], + "Vertices": [ + { + "Position": { + "X": 0, + "Y": 0 + }, + "Mobility": 1, + "Delay": 1, + "Acceleration": 1, + "Radius": 0 + }, + { + "Position": { + "X": 0, + "Y": 3 + }, + "Mobility": 0.95, + "Delay": 0.9, + "Acceleration": 1.5, + "Radius": 3 + } + ], + "Normalization": { + "Position": { + "Minimum": -10, + "Default": 0, + "Maximum": 10 + }, + "Angle": { + "Minimum": -10, + "Default": 0, + "Maximum": 10 + } + } + }, + { + "Id": "PhysicsSetting2", + "Input": [ + { + "Source": { + "Target": "Parameter", + "Id": "ParamAngleX" + }, + "Weight": 60, + "Type": "X", + "Reflect": false + }, + { + "Source": { + "Target": "Parameter", + "Id": "ParamAngleZ" + }, + "Weight": 60, + "Type": "Angle", + "Reflect": false + }, + { + "Source": { + "Target": "Parameter", + "Id": "ParamBodyAngleX" + }, + "Weight": 40, + "Type": "X", + "Reflect": false + }, + { + "Source": { + "Target": "Parameter", + "Id": "ParamBodyAngleZ" + }, + "Weight": 40, + "Type": "Angle", + "Reflect": false + } + ], + "Output": [ + { + "Destination": { + "Target": "Parameter", + "Id": "ParamHairBack" + }, + "VertexIndex": 1, + "Scale": 2.061, + "Weight": 100, + "Type": "Angle", + "Reflect": false + } + ], + "Vertices": [ + { + "Position": { + "X": 0, + "Y": 0 + }, + "Mobility": 1, + "Delay": 1, + "Acceleration": 1, + "Radius": 0 + }, + { + "Position": { + "X": 0, + "Y": 15 + }, + "Mobility": 0.95, + "Delay": 0.8, + "Acceleration": 1.5, + "Radius": 15 + } + ], + "Normalization": { + "Position": { + "Minimum": -10, + "Default": 0, + "Maximum": 10 + }, + "Angle": { + "Minimum": -30, + "Default": 0, + "Maximum": 30 + } + } + }, + { + "Id": "PhysicsSetting3", + "Input": [ + { + "Source": { + "Target": "Parameter", + "Id": "ParamAngleX" + }, + "Weight": 40, + "Type": "X", + "Reflect": false + }, + { + "Source": { + "Target": "Parameter", + "Id": "ParamAngleZ" + }, + "Weight": 40, + "Type": "Angle", + "Reflect": false + }, + { + "Source": { + "Target": "Parameter", + "Id": "ParamBodyAngleX" + }, + "Weight": 60, + "Type": "X", + "Reflect": false + }, + { + "Source": { + "Target": "Parameter", + "Id": "ParamBodyAngleZ" + }, + "Weight": 60, + "Type": "Angle", + "Reflect": false + } + ], + "Output": [ + { + "Destination": { + "Target": "Parameter", + "Id": "ParamSideupRibbon" + }, + "VertexIndex": 1, + "Scale": 1.775, + "Weight": 100, + "Type": "Angle", + "Reflect": false + } + ], + "Vertices": [ + { + "Position": { + "X": 0, + "Y": 0 + }, + "Mobility": 1, + "Delay": 1, + "Acceleration": 1, + "Radius": 0 + }, + { + "Position": { + "X": 0, + "Y": 10 + }, + "Mobility": 0.9, + "Delay": 0.6, + "Acceleration": 1.5, + "Radius": 10 + } + ], + "Normalization": { + "Position": { + "Minimum": -10, + "Default": 0, + "Maximum": 10 + }, + "Angle": { + "Minimum": -7.8, + "Default": 0, + "Maximum": 8 + } + } + }, + { + "Id": "PhysicsSetting4", + "Input": [ + { + "Source": { + "Target": "Parameter", + "Id": "ParamBodyAngleX" + }, + "Weight": 100, + "Type": "X", + "Reflect": false + }, + { + "Source": { + "Target": "Parameter", + "Id": "ParamBodyAngleZ" + }, + "Weight": 100, + "Type": "Angle", + "Reflect": false + } + ], + "Output": [ + { + "Destination": { + "Target": "Parameter", + "Id": "ParamSkirt" + }, + "VertexIndex": 1, + "Scale": 1.434, + "Weight": 100, + "Type": "Angle", + "Reflect": false + } + ], + "Vertices": [ + { + "Position": { + "X": 0, + "Y": 0 + }, + "Mobility": 1, + "Delay": 1, + "Acceleration": 1, + "Radius": 0 + }, + { + "Position": { + "X": 0, + "Y": 10 + }, + "Mobility": 0.9, + "Delay": 0.6, + "Acceleration": 1.5, + "Radius": 10 + } + ], + "Normalization": { + "Position": { + "Minimum": -10, + "Default": 0, + "Maximum": 10 + }, + "Angle": { + "Minimum": -10, + "Default": 0, + "Maximum": 10 + } + } + }, + { + "Id": "PhysicsSetting5", + "Input": [ + { + "Source": { + "Target": "Parameter", + "Id": "ParamBodyAngleY" + }, + "Weight": 100, + "Type": "X", + "Reflect": false + } + ], + "Output": [ + { + "Destination": { + "Target": "Parameter", + "Id": "ParamSkirt2" + }, + "VertexIndex": 1, + "Scale": 1.306, + "Weight": 100, + "Type": "Angle", + "Reflect": false + } + ], + "Vertices": [ + { + "Position": { + "X": 0, + "Y": 0 + }, + "Mobility": 1, + "Delay": 1, + "Acceleration": 1, + "Radius": 0 + }, + { + "Position": { + "X": 0, + "Y": 10 + }, + "Mobility": 0.8, + "Delay": 0.9, + "Acceleration": 2, + "Radius": 10 + } + ], + "Normalization": { + "Position": { + "Minimum": -10, + "Default": 0, + "Maximum": 10 + }, + "Angle": { + "Minimum": -10, + "Default": 0, + "Maximum": 10 + } + } + }, + { + "Id": "PhysicsSetting6", + "Input": [ + { + "Source": { + "Target": "Parameter", + "Id": "ParamBodyAngleX" + }, + "Weight": 100, + "Type": "X", + "Reflect": false + }, + { + "Source": { + "Target": "Parameter", + "Id": "ParamBodyAngleZ" + }, + "Weight": 100, + "Type": "Angle", + "Reflect": false + } + ], + "Output": [ + { + "Destination": { + "Target": "Parameter", + "Id": "ParamRibbon" + }, + "VertexIndex": 1, + "Scale": 1.402, + "Weight": 100, + "Type": "Angle", + "Reflect": false + } + ], + "Vertices": [ + { + "Position": { + "X": 0, + "Y": 0 + }, + "Mobility": 1, + "Delay": 1, + "Acceleration": 1, + "Radius": 0 + }, + { + "Position": { + "X": 0, + "Y": 10 + }, + "Mobility": 0.9, + "Delay": 0.6, + "Acceleration": 1.5, + "Radius": 10 + } + ], + "Normalization": { + "Position": { + "Minimum": -10, + "Default": 0, + "Maximum": 10 + }, + "Angle": { + "Minimum": -10, + "Default": 0, + "Maximum": 10.6 + } + } + }, + { + "Id": "PhysicsSetting7", + "Input": [ + { + "Source": { + "Target": "Parameter", + "Id": "ParamBodyAngleY" + }, + "Weight": 100, + "Type": "X", + "Reflect": false + } + ], + "Output": [ + { + "Destination": { + "Target": "Parameter", + "Id": "ParamBustY" + }, + "VertexIndex": 1, + "Scale": 1, + "Weight": 100, + "Type": "Angle", + "Reflect": false + } + ], + "Vertices": [ + { + "Position": { + "X": 0, + "Y": 0 + }, + "Mobility": 1, + "Delay": 1, + "Acceleration": 1, + "Radius": 0 + }, + { + "Position": { + "X": 0, + "Y": 3 + }, + "Mobility": 0.8, + "Delay": 0.9, + "Acceleration": 1.5, + "Radius": 3 + } + ], + "Normalization": { + "Position": { + "Minimum": -10, + "Default": 0, + "Maximum": 10 + }, + "Angle": { + "Minimum": -10, + "Default": 0, + "Maximum": 10 + } + } + }, + { + "Id": "PhysicsSetting8", + "Input": [ + { + "Source": { + "Target": "Parameter", + "Id": "ParamAngleX" + }, + "Weight": 60, + "Type": "X", + "Reflect": false + }, + { + "Source": { + "Target": "Parameter", + "Id": "ParamAngleZ" + }, + "Weight": 60, + "Type": "Angle", + "Reflect": false + }, + { + "Source": { + "Target": "Parameter", + "Id": "ParamBodyAngleX" + }, + "Weight": 40, + "Type": "X", + "Reflect": false + }, + { + "Source": { + "Target": "Parameter", + "Id": "ParamBodyAngleZ" + }, + "Weight": 40, + "Type": "Angle", + "Reflect": false + } + ], + "Output": [ + { + "Destination": { + "Target": "Parameter", + "Id": "Param_Angle_Rotation_1_ArtMesh61" + }, + "VertexIndex": 1, + "Scale": 10, + "Weight": 100, + "Type": "Angle", + "Reflect": false + }, + { + "Destination": { + "Target": "Parameter", + "Id": "Param_Angle_Rotation_2_ArtMesh61" + }, + "VertexIndex": 2, + "Scale": 20, + "Weight": 100, + "Type": "Angle", + "Reflect": false + }, + { + "Destination": { + "Target": "Parameter", + "Id": "Param_Angle_Rotation_3_ArtMesh61" + }, + "VertexIndex": 3, + "Scale": 30, + "Weight": 100, + "Type": "Angle", + "Reflect": false + }, + { + "Destination": { + "Target": "Parameter", + "Id": "Param_Angle_Rotation_4_ArtMesh61" + }, + "VertexIndex": 4, + "Scale": 30, + "Weight": 100, + "Type": "Angle", + "Reflect": false + }, + { + "Destination": { + "Target": "Parameter", + "Id": "Param_Angle_Rotation_5_ArtMesh61" + }, + "VertexIndex": 5, + "Scale": 30, + "Weight": 100, + "Type": "Angle", + "Reflect": false + }, + { + "Destination": { + "Target": "Parameter", + "Id": "Param_Angle_Rotation_6_ArtMesh61" + }, + "VertexIndex": 6, + "Scale": 30, + "Weight": 100, + "Type": "Angle", + "Reflect": false + }, + { + "Destination": { + "Target": "Parameter", + "Id": "Param_Angle_Rotation_7_ArtMesh61" + }, + "VertexIndex": 7, + "Scale": 30, + "Weight": 100, + "Type": "Angle", + "Reflect": false + } + ], + "Vertices": [ + { + "Position": { + "X": 0, + "Y": 0 + }, + "Mobility": 1, + "Delay": 1, + "Acceleration": 1, + "Radius": 10 + }, + { + "Position": { + "X": 0, + "Y": 10 + }, + "Mobility": 0.85, + "Delay": 0.85, + "Acceleration": 1.2, + "Radius": 10 + }, + { + "Position": { + "X": 0, + "Y": 20 + }, + "Mobility": 0.85, + "Delay": 0.85, + "Acceleration": 1.2, + "Radius": 10 + }, + { + "Position": { + "X": 0, + "Y": 30 + }, + "Mobility": 0.85, + "Delay": 0.85, + "Acceleration": 1.2, + "Radius": 10 + }, + { + "Position": { + "X": 0, + "Y": 40 + }, + "Mobility": 0.85, + "Delay": 0.85, + "Acceleration": 1.2, + "Radius": 10 + }, + { + "Position": { + "X": 0, + "Y": 50 + }, + "Mobility": 0.85, + "Delay": 0.85, + "Acceleration": 1.2, + "Radius": 10 + }, + { + "Position": { + "X": 0, + "Y": 60 + }, + "Mobility": 0.85, + "Delay": 0.85, + "Acceleration": 1.2, + "Radius": 10 + }, + { + "Position": { + "X": 0, + "Y": 70 + }, + "Mobility": 0.85, + "Delay": 0.85, + "Acceleration": 1.2, + "Radius": 10 + }, + { + "Position": { + "X": 0, + "Y": 80 + }, + "Mobility": 0.85, + "Delay": 0.85, + "Acceleration": 1.2, + "Radius": 10 + }, + { + "Position": { + "X": 0, + "Y": 90 + }, + "Mobility": 0.85, + "Delay": 0.85, + "Acceleration": 1.2, + "Radius": 10 + }, + { + "Position": { + "X": 0, + "Y": 100 + }, + "Mobility": 0.85, + "Delay": 0.85, + "Acceleration": 1.2, + "Radius": 10 + } + ], + "Normalization": { + "Position": { + "Minimum": -10, + "Default": 0, + "Maximum": 10 + }, + "Angle": { + "Minimum": -10, + "Default": 0, + "Maximum": 10 + } + } + }, + { + "Id": "PhysicsSetting9", + "Input": [ + { + "Source": { + "Target": "Parameter", + "Id": "ParamAngleX" + }, + "Weight": 60, + "Type": "X", + "Reflect": false + }, + { + "Source": { + "Target": "Parameter", + "Id": "ParamAngleZ" + }, + "Weight": 60, + "Type": "Angle", + "Reflect": false + }, + { + "Source": { + "Target": "Parameter", + "Id": "ParamBodyAngleX" + }, + "Weight": 40, + "Type": "X", + "Reflect": false + }, + { + "Source": { + "Target": "Parameter", + "Id": "ParamBodyAngleZ" + }, + "Weight": 40, + "Type": "Angle", + "Reflect": false + } + ], + "Output": [ + { + "Destination": { + "Target": "Parameter", + "Id": "Param_Angle_Rotation_1_ArtMesh62" + }, + "VertexIndex": 1, + "Scale": 10, + "Weight": 100, + "Type": "Angle", + "Reflect": false + }, + { + "Destination": { + "Target": "Parameter", + "Id": "Param_Angle_Rotation_2_ArtMesh62" + }, + "VertexIndex": 2, + "Scale": 20, + "Weight": 100, + "Type": "Angle", + "Reflect": false + }, + { + "Destination": { + "Target": "Parameter", + "Id": "Param_Angle_Rotation_3_ArtMesh62" + }, + "VertexIndex": 3, + "Scale": 30, + "Weight": 100, + "Type": "Angle", + "Reflect": false + }, + { + "Destination": { + "Target": "Parameter", + "Id": "Param_Angle_Rotation_4_ArtMesh62" + }, + "VertexIndex": 4, + "Scale": 30, + "Weight": 100, + "Type": "Angle", + "Reflect": false + }, + { + "Destination": { + "Target": "Parameter", + "Id": "Param_Angle_Rotation_5_ArtMesh62" + }, + "VertexIndex": 5, + "Scale": 30, + "Weight": 100, + "Type": "Angle", + "Reflect": false + }, + { + "Destination": { + "Target": "Parameter", + "Id": "Param_Angle_Rotation_6_ArtMesh62" + }, + "VertexIndex": 6, + "Scale": 30, + "Weight": 100, + "Type": "Angle", + "Reflect": false + }, + { + "Destination": { + "Target": "Parameter", + "Id": "Param_Angle_Rotation_7_ArtMesh62" + }, + "VertexIndex": 7, + "Scale": 30, + "Weight": 100, + "Type": "Angle", + "Reflect": false + } + ], + "Vertices": [ + { + "Position": { + "X": 0, + "Y": 0 + }, + "Mobility": 1, + "Delay": 1, + "Acceleration": 1, + "Radius": 10 + }, + { + "Position": { + "X": 0, + "Y": 10 + }, + "Mobility": 0.85, + "Delay": 0.85, + "Acceleration": 1.2, + "Radius": 10 + }, + { + "Position": { + "X": 0, + "Y": 20 + }, + "Mobility": 0.85, + "Delay": 0.85, + "Acceleration": 1.2, + "Radius": 10 + }, + { + "Position": { + "X": 0, + "Y": 30 + }, + "Mobility": 0.85, + "Delay": 0.85, + "Acceleration": 1.2, + "Radius": 10 + }, + { + "Position": { + "X": 0, + "Y": 40 + }, + "Mobility": 0.85, + "Delay": 0.85, + "Acceleration": 1.2, + "Radius": 10 + }, + { + "Position": { + "X": 0, + "Y": 50 + }, + "Mobility": 0.85, + "Delay": 0.85, + "Acceleration": 1.2, + "Radius": 10 + }, + { + "Position": { + "X": 0, + "Y": 60 + }, + "Mobility": 0.85, + "Delay": 0.85, + "Acceleration": 1.2, + "Radius": 10 + }, + { + "Position": { + "X": 0, + "Y": 70 + }, + "Mobility": 0.85, + "Delay": 0.85, + "Acceleration": 1.2, + "Radius": 10 + }, + { + "Position": { + "X": 0, + "Y": 80 + }, + "Mobility": 0.85, + "Delay": 0.85, + "Acceleration": 1.2, + "Radius": 10 + }, + { + "Position": { + "X": 0, + "Y": 90 + }, + "Mobility": 0.85, + "Delay": 0.85, + "Acceleration": 1.2, + "Radius": 10 + }, + { + "Position": { + "X": 0, + "Y": 100 + }, + "Mobility": 0.85, + "Delay": 0.85, + "Acceleration": 1.2, + "Radius": 10 + } + ], + "Normalization": { + "Position": { + "Minimum": -10, + "Default": 0, + "Maximum": 10 + }, + "Angle": { + "Minimum": -10, + "Default": 0, + "Maximum": 10 + } + } + }, + { + "Id": "PhysicsSetting10", + "Input": [ + { + "Source": { + "Target": "Parameter", + "Id": "ParamAngleX" + }, + "Weight": 60, + "Type": "X", + "Reflect": false + }, + { + "Source": { + "Target": "Parameter", + "Id": "ParamAngleZ" + }, + "Weight": 60, + "Type": "Angle", + "Reflect": false + }, + { + "Source": { + "Target": "Parameter", + "Id": "ParamBodyAngleX" + }, + "Weight": 40, + "Type": "X", + "Reflect": false + }, + { + "Source": { + "Target": "Parameter", + "Id": "ParamBodyAngleZ" + }, + "Weight": 40, + "Type": "Angle", + "Reflect": false + } + ], + "Output": [ + { + "Destination": { + "Target": "Parameter", + "Id": "Param_Angle_Rotation_1_ArtMesh54" + }, + "VertexIndex": 1, + "Scale": 5, + "Weight": 100, + "Type": "Angle", + "Reflect": false + }, + { + "Destination": { + "Target": "Parameter", + "Id": "Param_Angle_Rotation_2_ArtMesh54" + }, + "VertexIndex": 2, + "Scale": 5, + "Weight": 100, + "Type": "Angle", + "Reflect": false + }, + { + "Destination": { + "Target": "Parameter", + "Id": "Param_Angle_Rotation_3_ArtMesh54" + }, + "VertexIndex": 3, + "Scale": 10, + "Weight": 100, + "Type": "Angle", + "Reflect": false + }, + { + "Destination": { + "Target": "Parameter", + "Id": "Param_Angle_Rotation_4_ArtMesh54" + }, + "VertexIndex": 4, + "Scale": 20, + "Weight": 100, + "Type": "Angle", + "Reflect": false + }, + { + "Destination": { + "Target": "Parameter", + "Id": "Param_Angle_Rotation_5_ArtMesh54" + }, + "VertexIndex": 5, + "Scale": 20, + "Weight": 100, + "Type": "Angle", + "Reflect": false + }, + { + "Destination": { + "Target": "Parameter", + "Id": "Param_Angle_Rotation_6_ArtMesh54" + }, + "VertexIndex": 6, + "Scale": 25, + "Weight": 100, + "Type": "Angle", + "Reflect": false + }, + { + "Destination": { + "Target": "Parameter", + "Id": "Param_Angle_Rotation_7_ArtMesh54" + }, + "VertexIndex": 7, + "Scale": 30, + "Weight": 100, + "Type": "Angle", + "Reflect": false + } + ], + "Vertices": [ + { + "Position": { + "X": 0, + "Y": 0 + }, + "Mobility": 0.9, + "Delay": 1, + "Acceleration": 1, + "Radius": 15 + }, + { + "Position": { + "X": 0, + "Y": 15 + }, + "Mobility": 0.9, + "Delay": 0.85, + "Acceleration": 1.2, + "Radius": 15 + }, + { + "Position": { + "X": 0, + "Y": 30 + }, + "Mobility": 0.9, + "Delay": 0.85, + "Acceleration": 1.2, + "Radius": 15 + }, + { + "Position": { + "X": 0, + "Y": 45 + }, + "Mobility": 0.9, + "Delay": 0.85, + "Acceleration": 1.2, + "Radius": 15 + }, + { + "Position": { + "X": 0, + "Y": 60 + }, + "Mobility": 0.9, + "Delay": 0.85, + "Acceleration": 1.2, + "Radius": 15 + }, + { + "Position": { + "X": 0, + "Y": 75 + }, + "Mobility": 0.9, + "Delay": 0.85, + "Acceleration": 1.2, + "Radius": 15 + }, + { + "Position": { + "X": 0, + "Y": 90 + }, + "Mobility": 0.9, + "Delay": 0.85, + "Acceleration": 1.2, + "Radius": 15 + }, + { + "Position": { + "X": 0, + "Y": 105 + }, + "Mobility": 0.9, + "Delay": 0.85, + "Acceleration": 1.2, + "Radius": 15 + }, + { + "Position": { + "X": 0, + "Y": 120 + }, + "Mobility": 0.9, + "Delay": 0.85, + "Acceleration": 1.2, + "Radius": 15 + }, + { + "Position": { + "X": 0, + "Y": 135 + }, + "Mobility": 0.9, + "Delay": 0.85, + "Acceleration": 1.2, + "Radius": 15 + }, + { + "Position": { + "X": 0, + "Y": 150 + }, + "Mobility": 0.9, + "Delay": 0.85, + "Acceleration": 1.2, + "Radius": 15 + } + ], + "Normalization": { + "Position": { + "Minimum": -10, + "Default": 0, + "Maximum": 10 + }, + "Angle": { + "Minimum": -10, + "Default": 0, + "Maximum": 10 + } + } + }, + { + "Id": "PhysicsSetting11", + "Input": [ + { + "Source": { + "Target": "Parameter", + "Id": "ParamAngleX" + }, + "Weight": 60, + "Type": "X", + "Reflect": false + }, + { + "Source": { + "Target": "Parameter", + "Id": "ParamAngleZ" + }, + "Weight": 60, + "Type": "Angle", + "Reflect": false + }, + { + "Source": { + "Target": "Parameter", + "Id": "ParamBodyAngleX" + }, + "Weight": 40, + "Type": "X", + "Reflect": false + }, + { + "Source": { + "Target": "Parameter", + "Id": "ParamBodyAngleZ" + }, + "Weight": 40, + "Type": "Angle", + "Reflect": false + } + ], + "Output": [ + { + "Destination": { + "Target": "Parameter", + "Id": "Param_Angle_Rotation_1_ArtMesh55" + }, + "VertexIndex": 1, + "Scale": 5, + "Weight": 100, + "Type": "Angle", + "Reflect": false + }, + { + "Destination": { + "Target": "Parameter", + "Id": "Param_Angle_Rotation_2_ArtMesh55" + }, + "VertexIndex": 2, + "Scale": 5, + "Weight": 100, + "Type": "Angle", + "Reflect": false + }, + { + "Destination": { + "Target": "Parameter", + "Id": "Param_Angle_Rotation_3_ArtMesh55" + }, + "VertexIndex": 3, + "Scale": 10, + "Weight": 100, + "Type": "Angle", + "Reflect": false + }, + { + "Destination": { + "Target": "Parameter", + "Id": "Param_Angle_Rotation_4_ArtMesh55" + }, + "VertexIndex": 4, + "Scale": 20, + "Weight": 100, + "Type": "Angle", + "Reflect": false + }, + { + "Destination": { + "Target": "Parameter", + "Id": "Param_Angle_Rotation_5_ArtMesh55" + }, + "VertexIndex": 5, + "Scale": 20, + "Weight": 100, + "Type": "Angle", + "Reflect": false + }, + { + "Destination": { + "Target": "Parameter", + "Id": "Param_Angle_Rotation_6_ArtMesh55" + }, + "VertexIndex": 6, + "Scale": 25, + "Weight": 100, + "Type": "Angle", + "Reflect": false + }, + { + "Destination": { + "Target": "Parameter", + "Id": "Param_Angle_Rotation_7_ArtMesh55" + }, + "VertexIndex": 7, + "Scale": 30, + "Weight": 100, + "Type": "Angle", + "Reflect": false + } + ], + "Vertices": [ + { + "Position": { + "X": 0, + "Y": 0 + }, + "Mobility": 0.9, + "Delay": 0.7, + "Acceleration": 1, + "Radius": 15 + }, + { + "Position": { + "X": 0, + "Y": 15 + }, + "Mobility": 0.9, + "Delay": 0.85, + "Acceleration": 1.2, + "Radius": 15 + }, + { + "Position": { + "X": 0, + "Y": 30 + }, + "Mobility": 0.9, + "Delay": 0.85, + "Acceleration": 1.2, + "Radius": 15 + }, + { + "Position": { + "X": 0, + "Y": 45 + }, + "Mobility": 0.9, + "Delay": 0.85, + "Acceleration": 1.2, + "Radius": 15 + }, + { + "Position": { + "X": 0, + "Y": 60 + }, + "Mobility": 0.9, + "Delay": 0.85, + "Acceleration": 1.2, + "Radius": 15 + }, + { + "Position": { + "X": 0, + "Y": 75 + }, + "Mobility": 0.9, + "Delay": 0.85, + "Acceleration": 1.2, + "Radius": 15 + }, + { + "Position": { + "X": 0, + "Y": 90 + }, + "Mobility": 0.9, + "Delay": 0.85, + "Acceleration": 1.2, + "Radius": 15 + }, + { + "Position": { + "X": 0, + "Y": 105 + }, + "Mobility": 0.9, + "Delay": 0.85, + "Acceleration": 1.2, + "Radius": 15 + }, + { + "Position": { + "X": 0, + "Y": 120 + }, + "Mobility": 0.9, + "Delay": 0.85, + "Acceleration": 1.2, + "Radius": 15 + }, + { + "Position": { + "X": 0, + "Y": 135 + }, + "Mobility": 0.9, + "Delay": 0.85, + "Acceleration": 1.2, + "Radius": 15 + }, + { + "Position": { + "X": 0, + "Y": 150 + }, + "Mobility": 0.9, + "Delay": 0.85, + "Acceleration": 1.2, + "Radius": 15 + } + ], + "Normalization": { + "Position": { + "Minimum": -10, + "Default": 0, + "Maximum": 10 + }, + "Angle": { + "Minimum": -10, + "Default": 0, + "Maximum": 10 + } + } + } + ] +} \ No newline at end of file diff --git a/main/xiaozhi-server/test/hiyori_pro_zh/runtime/hiyori_pro_t11.pose3.json b/main/xiaozhi-server/test/hiyori_pro_zh/runtime/hiyori_pro_t11.pose3.json new file mode 100644 index 00000000..28bda7cc --- /dev/null +++ b/main/xiaozhi-server/test/hiyori_pro_zh/runtime/hiyori_pro_t11.pose3.json @@ -0,0 +1,15 @@ +{ + "Type": "Live2D Pose", + "Groups": [ + [ + { + "Id": "PartArmA", + "Link": [] + }, + { + "Id": "PartArmB", + "Link": [] + } + ] + ] +} \ No newline at end of file diff --git a/main/xiaozhi-server/test/hiyori_pro_zh/runtime/motion/hiyori_m01.motion3.json b/main/xiaozhi-server/test/hiyori_pro_zh/runtime/motion/hiyori_m01.motion3.json new file mode 100644 index 00000000..69d1b28d --- /dev/null +++ b/main/xiaozhi-server/test/hiyori_pro_zh/runtime/motion/hiyori_m01.motion3.json @@ -0,0 +1,1063 @@ +{ + "Version": 3, + "Meta": { + "Duration": 4.7, + "Fps": 30.0, + "Loop": true, + "AreBeziersRestricted": false, + "CurveCount": 29, + "TotalSegmentCount": 135, + "TotalPointCount": 374, + "UserDataCount": 0, + "TotalUserDataSize": 0 + }, + "Curves": [ + { + "Target": "Parameter", + "Id": "ParamAngleX", + "Segments": [ + 0, + -8, + 1, + 0.067, + -8, + 0.133, + -8, + 0.2, + -8, + 1, + 0.278, + -8, + 0.356, + -8, + 0.433, + -8, + 1, + 0.556, + -8, + 0.678, + -8, + 0.8, + -8, + 1, + 0.956, + -8, + 1.111, + -8, + 1.267, + -8, + 1, + 1.522, + -8, + 1.778, + 0, + 2.033, + 0, + 1, + 2.122, + 0, + 2.211, + 0, + 2.3, + 0, + 1, + 2.556, + 0, + 2.811, + 9, + 3.067, + 9, + 1, + 3.356, + 9, + 3.644, + 0, + 3.933, + 0, + 1, + 4.067, + 0, + 4.2, + 1, + 4.333, + 1, + 0, + 4.7, + 1 + ] + }, + { + "Target": "Parameter", + "Id": "ParamAngleY", + "Segments": [ + 0, + -5, + 1, + 0.067, + -5, + 0.133, + -5, + 0.2, + -5, + 1, + 0.322, + -5, + 0.444, + 16, + 0.567, + 16, + 1, + 0.711, + 16, + 0.856, + -12, + 1, + -12, + 1, + 1.089, + -12, + 1.178, + 11, + 1.267, + 11, + 1, + 1.356, + 11, + 1.444, + 9.376, + 1.533, + 3, + 1, + 1.611, + -2.579, + 1.689, + -8, + 1.767, + -8, + 1, + 1.856, + -8, + 1.944, + 0, + 2.033, + 0, + 1, + 2.122, + 0, + 2.211, + 0, + 2.3, + 0, + 1, + 2.578, + 0, + 2.856, + -30, + 3.133, + -30, + 1, + 3.278, + -30, + 3.422, + 15, + 3.567, + 15, + 1, + 3.689, + 15, + 3.811, + -9, + 3.933, + -9, + 0, + 4.7, + -9 + ] + }, + { + "Target": "Parameter", + "Id": "ParamAngleZ", + "Segments": [ + 0, + 0, + 1, + 0.067, + 0, + 0.133, + 0, + 0.2, + 0, + 1, + 0.278, + 0, + 0.356, + 0, + 0.433, + 0, + 1, + 0.711, + 0, + 0.989, + 0, + 1.267, + 0, + 1, + 1.522, + 0, + 1.778, + 14, + 2.033, + 14, + 1, + 2.178, + 14, + 2.322, + 14, + 2.467, + 14, + 1, + 2.8, + 14, + 3.133, + 16, + 3.467, + 16, + 1, + 3.633, + 16, + 3.8, + -13, + 3.967, + -13, + 1, + 4.111, + -13, + 4.256, + -11.207, + 4.4, + -11.207, + 0, + 4.7, + -11.207 + ] + }, + { + "Target": "Parameter", + "Id": "ParamCheek", + "Segments": [ + 0, + 0, + 0, + 4.7, + 0 + ] + }, + { + "Target": "Parameter", + "Id": "ParamEyeLOpen", + "Segments": [ + 0, + 1, + 1, + 0.556, + 1, + 1.111, + 1, + 1.667, + 1, + 1, + 1.711, + 1, + 1.756, + 0, + 1.8, + 0, + 1, + 1.822, + 0, + 1.844, + 0, + 1.867, + 0, + 1, + 1.911, + 0, + 1.956, + 1, + 2, + 1, + 1, + 2.489, + 1, + 2.978, + 1, + 3.467, + 1, + 1, + 3.511, + 1, + 3.556, + 0, + 3.6, + 0, + 1, + 3.622, + 0, + 3.644, + 0, + 3.667, + 0, + 1, + 3.733, + 0, + 3.8, + 1, + 3.867, + 1, + 0, + 4.7, + 1 + ] + }, + { + "Target": "Parameter", + "Id": "ParamEyeLSmile", + "Segments": [ + 0, + 0, + 0, + 4.7, + 0 + ] + }, + { + "Target": "Parameter", + "Id": "ParamEyeROpen", + "Segments": [ + 0, + 1, + 1, + 0.556, + 1, + 1.111, + 1, + 1.667, + 1, + 1, + 1.711, + 1, + 1.756, + 0, + 1.8, + 0, + 1, + 1.822, + 0, + 1.844, + 0, + 1.867, + 0, + 1, + 1.911, + 0, + 1.956, + 1, + 2, + 1, + 1, + 2.489, + 1, + 2.978, + 1, + 3.467, + 1, + 1, + 3.511, + 1, + 3.556, + 0, + 3.6, + 0, + 1, + 3.622, + 0, + 3.644, + 0, + 3.667, + 0, + 1, + 3.733, + 0, + 3.8, + 1, + 3.867, + 1, + 0, + 4.7, + 1 + ] + }, + { + "Target": "Parameter", + "Id": "ParamEyeRSmile", + "Segments": [ + 0, + 0, + 0, + 4.7, + 0 + ] + }, + { + "Target": "Parameter", + "Id": "ParamEyeBallX", + "Segments": [ + 0, + 0, + 1, + 0.156, + 0, + 0.311, + -0.02, + 0.467, + -0.02, + 1, + 0.578, + -0.02, + 0.689, + 0, + 0.8, + 0, + 1, + 1.056, + 0, + 1.311, + 0, + 1.567, + 0, + 1, + 1.767, + 0, + 1.967, + -0.131, + 2.167, + -0.15, + 1, + 2.644, + -0.195, + 3.122, + -0.2, + 3.6, + -0.2, + 1, + 3.622, + -0.2, + 3.644, + 0.803, + 3.667, + 0.803, + 0, + 4.7, + 0.803 + ] + }, + { + "Target": "Parameter", + "Id": "ParamEyeBallY", + "Segments": [ + 0, + 0, + 1, + 0.156, + 0, + 0.311, + 0.01, + 0.467, + 0.08, + 1, + 0.578, + 0.13, + 0.689, + 0.21, + 0.8, + 0.21, + 1, + 1.056, + 0.21, + 1.311, + 0.21, + 1.567, + 0.21, + 1, + 1.767, + 0.21, + 1.967, + 0.08, + 2.167, + 0.08, + 1, + 2.644, + 0.08, + 3.122, + 0.086, + 3.6, + 0.1, + 1, + 3.622, + 0.101, + 3.644, + 0.794, + 3.667, + 0.794, + 0, + 4.7, + 0.794 + ] + }, + { + "Target": "Parameter", + "Id": "ParamBrowLY", + "Segments": [ + 0, + 0, + 0, + 4.7, + 0 + ] + }, + { + "Target": "Parameter", + "Id": "ParamBrowRY", + "Segments": [ + 0, + 0, + 0, + 4.7, + 0 + ] + }, + { + "Target": "Parameter", + "Id": "ParamBrowLX", + "Segments": [ + 0, + 0, + 0, + 4.7, + 0 + ] + }, + { + "Target": "Parameter", + "Id": "ParamBrowRX", + "Segments": [ + 0, + 0, + 0, + 4.7, + 0 + ] + }, + { + "Target": "Parameter", + "Id": "ParamBrowLAngle", + "Segments": [ + 0, + 0, + 0, + 4.7, + 0 + ] + }, + { + "Target": "Parameter", + "Id": "ParamBrowRAngle", + "Segments": [ + 0, + 0, + 0, + 4.7, + 0 + ] + }, + { + "Target": "Parameter", + "Id": "ParamBrowLForm", + "Segments": [ + 0, + 0, + 0, + 4.7, + 0 + ] + }, + { + "Target": "Parameter", + "Id": "ParamBrowRForm", + "Segments": [ + 0, + 0, + 0, + 4.7, + 0 + ] + }, + { + "Target": "Parameter", + "Id": "ParamBodyAngleX", + "Segments": [ + 0, + 1, + 1, + 0.856, + 1, + 1.711, + 1, + 2.567, + 1, + 1, + 2.789, + 1, + 3.011, + 1.145, + 3.233, + 0, + 1, + 3.467, + -1.202, + 3.7, + -6, + 3.933, + -6, + 0, + 4.7, + -6 + ] + }, + { + "Target": "Parameter", + "Id": "ParamBodyAngleY", + "Segments": [ + 0, + 0, + 1, + 0.067, + 0, + 0.133, + 0, + 0.2, + 0, + 1, + 0.278, + 0, + 0.356, + 7, + 0.433, + 7, + 1, + 0.611, + 7, + 0.789, + -4, + 0.967, + -4, + 1, + 1.078, + -4, + 1.189, + 6, + 1.3, + 6, + 1, + 1.433, + 6, + 1.567, + -3, + 1.7, + -3, + 1, + 1.789, + -3, + 1.878, + -1.459, + 1.967, + 0, + 1, + 2.067, + 1.642, + 2.167, + 3.47, + 2.267, + 4, + 1, + 2.367, + 4.53, + 2.467, + 4.312, + 2.567, + 5, + 1, + 2.889, + 7.215, + 3.211, + 10, + 3.533, + 10, + 1, + 3.667, + 10, + 3.8, + 0, + 3.933, + 0, + 1, + 4.067, + 0, + 4.2, + 0, + 4.333, + 0, + 0, + 4.7, + 0 + ] + }, + { + "Target": "Parameter", + "Id": "ParamBodyAngleZ", + "Segments": [ + 0, + 0, + 1, + 0.822, + 0, + 1.644, + 0, + 2.467, + 0, + 1, + 2.722, + 0, + 2.978, + 5, + 3.233, + 5, + 1, + 3.489, + 5, + 3.744, + -5, + 4, + -5, + 1, + 4.156, + -5, + 4.311, + -3.976, + 4.467, + -3.976, + 0, + 4.7, + -3.976 + ] + }, + { + "Target": "Parameter", + "Id": "ParamBreath", + "Segments": [ + 0, + 0, + 0, + 4.7, + 0 + ] + }, + { + "Target": "Parameter", + "Id": "ParamShoulder", + "Segments": [ + 0, + 0, + 1, + 0.111, + 0, + 0.222, + 0.2, + 0.333, + 0.2, + 1, + 0.422, + 0.2, + 0.511, + -0.1, + 0.6, + -0.1, + 1, + 1.578, + -0.1, + 2.556, + -0.1, + 3.533, + -0.1, + 1, + 3.611, + -0.1, + 3.689, + 0.2, + 3.767, + 0.2, + 1, + 3.989, + 0.2, + 4.211, + -0.9, + 4.433, + -0.9, + 0, + 4.7, + -0.9 + ] + }, + { + "Target": "Parameter", + "Id": "ParamLeg", + "Segments": [ + 0, + 1, + 0, + 4.7, + 1 + ] + }, + { + "Target": "Parameter", + "Id": "ParamArmLA", + "Segments": [ + 0, + -10, + 1, + 0.178, + -10, + 0.356, + -7, + 0.533, + -7, + 1, + 0.7, + -7, + 0.867, + -10, + 1.033, + -10, + 1, + 1.2, + -10, + 1.367, + -8, + 1.533, + -8, + 1, + 1.611, + -8, + 1.689, + -8.746, + 1.767, + -9, + 1, + 2.011, + -9.797, + 2.256, + -10, + 2.5, + -10, + 1, + 2.556, + -10, + 2.611, + -10, + 2.667, + -10, + 1, + 2.789, + -10, + 2.911, + -10, + 3.033, + -10, + 0, + 4.7, + -10 + ] + }, + { + "Target": "Parameter", + "Id": "ParamArmRA", + "Segments": [ + 0, + -10, + 1, + 0.178, + -10, + 0.356, + -7, + 0.533, + -7, + 1, + 0.7, + -7, + 0.867, + -10, + 1.033, + -10, + 1, + 1.2, + -10, + 1.367, + -6, + 1.533, + -6, + 1, + 1.611, + -6, + 1.689, + -6.903, + 1.767, + -7.5, + 1, + 2.011, + -9.377, + 2.256, + -10, + 2.5, + -10, + 1, + 2.567, + -10, + 2.633, + -8.958, + 2.7, + -8.958, + 1, + 2.811, + -8.958, + 2.922, + -10, + 3.033, + -10, + 0, + 4.7, + -10 + ] + }, + { + "Target": "Parameter", + "Id": "ParamHairAhoge", + "Segments": [ + 0, + 0, + 1, + 0.144, + 0, + 0.289, + 10, + 0.433, + 10, + 1, + 0.578, + 10, + 0.722, + -10, + 0.867, + -10, + 1, + 0.989, + -10, + 1.111, + 4, + 1.233, + 4, + 1, + 1.322, + 4, + 1.411, + 2.767, + 1.5, + 0, + 1, + 1.611, + -3.459, + 1.722, + -5.351, + 1.833, + -5.351, + 1, + 1.922, + -5.351, + 2.011, + 1.661, + 2.1, + 1.661, + 1, + 2.233, + 1.661, + 2.367, + 0, + 2.5, + 0, + 1, + 2.867, + 0, + 3.233, + 10, + 3.6, + 10, + 1, + 3.722, + 10, + 3.844, + -10, + 3.967, + -10, + 1, + 4.078, + -10, + 4.189, + 6, + 4.3, + 6, + 1, + 4.356, + 6, + 4.411, + 0, + 4.467, + 0, + 0, + 4.7, + 0 + ] + }, + { + "Target": "PartOpacity", + "Id": "PartArmA", + "Segments": [ + 0, + 1, + 0, + 4.7, + 1 + ] + }, + { + "Target": "PartOpacity", + "Id": "PartArmB", + "Segments": [ + 0, + 0, + 0, + 4.7, + 0 + ] + } + ] +} \ No newline at end of file diff --git a/main/xiaozhi-server/test/hiyori_pro_zh/runtime/motion/hiyori_m02.motion3.json b/main/xiaozhi-server/test/hiyori_pro_zh/runtime/motion/hiyori_m02.motion3.json new file mode 100644 index 00000000..9a873fc6 --- /dev/null +++ b/main/xiaozhi-server/test/hiyori_pro_zh/runtime/motion/hiyori_m02.motion3.json @@ -0,0 +1,1428 @@ +{ + "Version": 3, + "Meta": { + "Duration": 5.93, + "Fps": 30.0, + "Loop": true, + "AreBeziersRestricted": false, + "CurveCount": 31, + "TotalSegmentCount": 190, + "TotalPointCount": 537, + "UserDataCount": 0, + "TotalUserDataSize": 0 + }, + "Curves": [ + { + "Target": "Parameter", + "Id": "ParamAngleX", + "Segments": [ + 0, + 18, + 1, + 0.211, + 18, + 0.422, + 0, + 0.633, + 0, + 1, + 0.889, + 0, + 1.144, + 22, + 1.4, + 22, + 1, + 1.578, + 22, + 1.756, + 22, + 1.933, + 22, + 1, + 2.1, + 22, + 2.267, + 14.992, + 2.433, + 0, + 1, + 2.6, + -14.992, + 2.767, + -23, + 2.933, + -23, + 1, + 3.244, + -23, + 3.556, + -23, + 3.867, + -23, + 1, + 4.078, + -23, + 4.289, + 0, + 4.5, + 0, + 0, + 5.933, + 0 + ] + }, + { + "Target": "Parameter", + "Id": "ParamAngleY", + "Segments": [ + 0, + -24, + 1, + 0.211, + -24, + 0.422, + 0, + 0.633, + 0, + 1, + 0.889, + 0, + 1.144, + -18, + 1.4, + -18, + 1, + 1.522, + -18, + 1.644, + -11, + 1.767, + -11, + 1, + 1.822, + -11, + 1.878, + -11, + 1.933, + -11, + 1, + 2.1, + -11, + 2.267, + -3, + 2.433, + -3, + 1, + 2.6, + -3, + 2.767, + -30, + 2.933, + -30, + 1, + 3.133, + -30, + 3.333, + -23, + 3.533, + -23, + 1, + 3.644, + -23, + 3.756, + -23, + 3.867, + -23, + 1, + 3.911, + -23, + 3.956, + -23, + 4, + -23, + 1, + 4.167, + -23, + 4.333, + 0, + 4.5, + 0, + 0, + 5.933, + 0 + ] + }, + { + "Target": "Parameter", + "Id": "ParamAngleZ", + "Segments": [ + 0, + 0, + 1, + 0.222, + 0, + 0.444, + 0, + 0.667, + 0, + 1, + 0.756, + 0, + 0.844, + 1.707, + 0.933, + 8, + 1, + 1.122, + 21.373, + 1.311, + 30, + 1.5, + 30, + 1, + 1.656, + 30, + 1.811, + 30, + 1.967, + 30, + 1, + 2.289, + 30, + 2.611, + -30, + 2.933, + -30, + 1, + 3.244, + -30, + 3.556, + -30, + 3.867, + -30, + 1, + 4.078, + -30, + 4.289, + -21.337, + 4.5, + 1, + 1, + 4.578, + 9.23, + 4.656, + 17, + 4.733, + 17, + 0, + 5.933, + 17 + ] + }, + { + "Target": "Parameter", + "Id": "ParamCheek", + "Segments": [ + 0, + 1, + 0, + 5.933, + 1 + ] + }, + { + "Target": "Parameter", + "Id": "ParamEyeLOpen", + "Segments": [ + 0, + 1, + 1, + 0.333, + 1, + 0.667, + 1, + 1, + 1, + 1, + 1.044, + 1, + 1.089, + 0, + 1.133, + 0, + 1, + 1.156, + 0, + 1.178, + 0, + 1.2, + 0, + 1, + 1.256, + 0, + 1.311, + 1, + 1.367, + 1, + 1, + 1.833, + 1, + 2.3, + 1, + 2.767, + 1, + 1, + 2.867, + 1, + 2.967, + 1.2, + 3.067, + 1.2, + 1, + 3.233, + 1.2, + 3.4, + 1, + 3.567, + 1, + 1, + 3.689, + 1, + 3.811, + 1, + 3.933, + 1, + 1, + 3.978, + 1, + 4.022, + 0, + 4.067, + 0, + 1, + 4.089, + 0, + 4.111, + 0, + 4.133, + 0, + 1, + 4.189, + 0, + 4.244, + 1, + 4.3, + 1, + 1, + 4.4, + 1, + 4.5, + 1, + 4.6, + 1, + 1, + 4.633, + 1, + 4.667, + 0, + 4.7, + 0, + 0, + 5.933, + 0 + ] + }, + { + "Target": "Parameter", + "Id": "ParamEyeLSmile", + "Segments": [ + 0, + 0.63, + 1, + 1.433, + 0.63, + 2.867, + 0.6, + 4.3, + 0.6, + 1, + 4.4, + 0.6, + 4.5, + 0.771, + 4.6, + 0.771, + 0, + 5.933, + 0.771 + ] + }, + { + "Target": "Parameter", + "Id": "ParamEyeROpen", + "Segments": [ + 0, + 1, + 1, + 0.333, + 1, + 0.667, + 1, + 1, + 1, + 1, + 1.044, + 1, + 1.089, + 0, + 1.133, + 0, + 1, + 1.156, + 0, + 1.178, + 0, + 1.2, + 0, + 1, + 1.256, + 0, + 1.311, + 1, + 1.367, + 1, + 1, + 1.833, + 1, + 2.3, + 1, + 2.767, + 1, + 1, + 2.867, + 1, + 2.967, + 1.2, + 3.067, + 1.2, + 1, + 3.233, + 1.2, + 3.4, + 1, + 3.567, + 1, + 1, + 3.689, + 1, + 3.811, + 1, + 3.933, + 1, + 1, + 3.978, + 1, + 4.022, + 0, + 4.067, + 0, + 1, + 4.089, + 0, + 4.111, + 0, + 4.133, + 0, + 1, + 4.189, + 0, + 4.244, + 1, + 4.3, + 1, + 1, + 4.4, + 1, + 4.5, + 1, + 4.6, + 1, + 1, + 4.633, + 1, + 4.667, + 0, + 4.7, + 0, + 0, + 5.933, + 0 + ] + }, + { + "Target": "Parameter", + "Id": "ParamEyeRSmile", + "Segments": [ + 0, + 0.63, + 1, + 1.433, + 0.63, + 2.867, + 0.6, + 4.3, + 0.6, + 1, + 4.4, + 0.6, + 4.5, + 0.76, + 4.6, + 0.76, + 0, + 5.933, + 0.76 + ] + }, + { + "Target": "Parameter", + "Id": "ParamEyeBallX", + "Segments": [ + 0, + -0.002, + 1, + 0.211, + -0.002, + 0.422, + 0, + 0.633, + 0, + 1, + 0.889, + 0, + 1.144, + -0.31, + 1.4, + -0.31, + 1, + 1.578, + -0.31, + 1.756, + -0.31, + 1.933, + -0.31, + 1, + 2.233, + -0.31, + 2.533, + 0.67, + 2.833, + 0.67, + 1, + 3.144, + 0.67, + 3.456, + 0.67, + 3.767, + 0.67, + 1, + 4.011, + 0.67, + 4.256, + 0, + 4.5, + 0, + 0, + 5.933, + 0 + ] + }, + { + "Target": "Parameter", + "Id": "ParamEyeBallY", + "Segments": [ + 0, + 0, + 1, + 0.211, + 0, + 0.422, + 0, + 0.633, + 0, + 1, + 0.889, + 0, + 1.144, + 0.38, + 1.4, + 0.38, + 1, + 1.578, + 0.38, + 1.756, + 0.38, + 1.933, + 0.38, + 1, + 2.233, + 0.38, + 2.533, + 0.46, + 2.833, + 0.46, + 1, + 3.144, + 0.46, + 3.456, + 0.46, + 3.767, + 0.46, + 1, + 4.011, + 0.46, + 4.256, + 0, + 4.5, + 0, + 0, + 5.933, + 0 + ] + }, + { + "Target": "Parameter", + "Id": "ParamBrowLY", + "Segments": [ + 0, + 0, + 1, + 0.956, + 0, + 1.911, + 0, + 2.867, + 0, + 1, + 2.933, + 0, + 3, + 0.125, + 3.067, + 0.125, + 1, + 3.133, + 0.125, + 3.2, + 0, + 3.267, + 0, + 1, + 3.711, + 0, + 4.156, + 0, + 4.6, + 0, + 1, + 4.667, + 0, + 4.733, + 0.396, + 4.8, + 0.396, + 0, + 5.933, + 0.396 + ] + }, + { + "Target": "Parameter", + "Id": "ParamBrowRY", + "Segments": [ + 0, + 0, + 1, + 0.956, + 0, + 1.911, + 0, + 2.867, + 0, + 1, + 2.933, + 0, + 3, + 0.125, + 3.067, + 0.125, + 1, + 3.133, + 0.125, + 3.2, + 0, + 3.267, + 0, + 1, + 3.711, + 0, + 4.156, + 0, + 4.6, + 0, + 1, + 4.667, + 0, + 4.733, + 0.417, + 4.8, + 0.417, + 0, + 5.933, + 0.417 + ] + }, + { + "Target": "Parameter", + "Id": "ParamBrowLX", + "Segments": [ + 0, + 0, + 0, + 5.933, + 0 + ] + }, + { + "Target": "Parameter", + "Id": "ParamBrowRX", + "Segments": [ + 0, + 0, + 0, + 5.933, + 0 + ] + }, + { + "Target": "Parameter", + "Id": "ParamBrowLAngle", + "Segments": [ + 0, + 0.03, + 0, + 5.933, + 0.03 + ] + }, + { + "Target": "Parameter", + "Id": "ParamBrowRAngle", + "Segments": [ + 0, + 0, + 0, + 5.933, + 0 + ] + }, + { + "Target": "Parameter", + "Id": "ParamBrowLForm", + "Segments": [ + 0, + 0, + 0, + 5.933, + 0 + ] + }, + { + "Target": "Parameter", + "Id": "ParamBrowRForm", + "Segments": [ + 0, + 0, + 0, + 5.933, + 0 + ] + }, + { + "Target": "Parameter", + "Id": "ParamBodyAngleX", + "Segments": [ + 0, + 0, + 1, + 0.244, + 0, + 0.489, + 0, + 0.733, + 0, + 1, + 0.778, + 0, + 0.822, + 0.667, + 0.867, + 2, + 1, + 1.044, + 7.333, + 1.222, + 10, + 1.4, + 10, + 1, + 1.533, + 10, + 1.667, + 10, + 1.8, + 10, + 1, + 2.178, + 10, + 2.556, + 6, + 2.933, + 6, + 1, + 3.244, + 6, + 3.556, + 6, + 3.867, + 6, + 1, + 4.189, + 6, + 4.511, + 0, + 4.833, + 0, + 1, + 4.956, + 0, + 5.078, + 1.192, + 5.2, + 1.192, + 1, + 5.322, + 1.192, + 5.444, + 0.013, + 5.567, + 0.013, + 0, + 5.933, + 0.013 + ] + }, + { + "Target": "Parameter", + "Id": "ParamBodyAngleY", + "Segments": [ + 0, + 0, + 1, + 0.211, + 0, + 0.422, + 0, + 0.633, + 0, + 1, + 0.667, + 0, + 0.7, + 0, + 0.733, + 0, + 1, + 1.133, + 0, + 1.533, + 0, + 1.933, + 0, + 1, + 2.078, + 0, + 2.222, + 4, + 2.367, + 4, + 1, + 2.556, + 4, + 2.744, + -2.18, + 2.933, + -2.18, + 1, + 3.022, + -2.18, + 3.111, + 0, + 3.2, + 0, + 1, + 3.456, + 0, + 3.711, + -1, + 3.967, + -1, + 1, + 4.067, + -1, + 4.167, + -1.018, + 4.267, + 0, + 1, + 4.333, + 0.679, + 4.4, + 10, + 4.467, + 10, + 1, + 4.567, + 10, + 4.667, + -5, + 4.767, + -5, + 1, + 4.889, + -5, + 5.011, + 0, + 5.133, + 0, + 0, + 5.933, + 0 + ] + }, + { + "Target": "Parameter", + "Id": "ParamBodyAngleZ", + "Segments": [ + 0, + 0, + 1, + 0.233, + 0, + 0.467, + 0, + 0.7, + 0, + 1, + 0.733, + 0, + 0.767, + 0, + 0.8, + 0, + 1, + 1.278, + 0, + 1.756, + -4, + 2.233, + -4, + 1, + 2.544, + -4, + 2.856, + 8, + 3.167, + 8, + 1, + 3.4, + 8, + 3.633, + 8.008, + 3.867, + 7.985, + 1, + 4.178, + 7.954, + 4.489, + -3, + 4.8, + -3, + 0, + 5.933, + -3 + ] + }, + { + "Target": "Parameter", + "Id": "ParamBreath", + "Segments": [ + 0, + 0, + 1, + 0.122, + 0, + 0.244, + 1, + 0.367, + 1, + 1, + 0.511, + 1, + 0.656, + 0, + 0.8, + 0, + 1, + 1.022, + 0, + 1.244, + 1, + 1.467, + 1, + 1, + 1.689, + 1, + 1.911, + 0, + 2.133, + 0, + 1, + 2.344, + 0, + 2.556, + 1, + 2.767, + 1, + 1, + 2.967, + 1, + 3.167, + 0, + 3.367, + 0, + 1, + 3.578, + 0, + 3.789, + 1, + 4, + 1, + 1, + 4.233, + 1, + 4.467, + 0, + 4.7, + 0, + 1, + 4.9, + 0, + 5.1, + 0, + 5.3, + 0, + 0, + 5.933, + 0 + ] + }, + { + "Target": "Parameter", + "Id": "ParamShoulder", + "Segments": [ + 0, + 0, + 1, + 0.456, + 0, + 0.911, + 0.4, + 1.367, + 0.4, + 1, + 1.889, + 0.4, + 2.411, + -1, + 2.933, + -1, + 1, + 3.244, + -1, + 3.556, + -1, + 3.867, + -1, + 0, + 5.933, + -1 + ] + }, + { + "Target": "Parameter", + "Id": "ParamLeg", + "Segments": [ + 0, + 1, + 0, + 5.933, + 1 + ] + }, + { + "Target": "Parameter", + "Id": "ParamArmLA", + "Segments": [ + 0, + -8.7, + 1, + 0.289, + -8.7, + 0.578, + -8.7, + 0.867, + -8.7, + 1, + 1, + -8.7, + 1.133, + -10, + 1.267, + -10, + 1, + 1.578, + -10, + 1.889, + -10, + 2.2, + -10, + 1, + 2.444, + -10, + 2.689, + -6.9, + 2.933, + -6.9, + 1, + 3.244, + -6.9, + 3.556, + -6.9, + 3.867, + -6.9, + 1, + 3.989, + -6.9, + 4.111, + -8.3, + 4.233, + -8.3, + 1, + 4.344, + -8.3, + 4.456, + -3, + 4.567, + -3, + 1, + 4.689, + -3, + 4.811, + -4, + 4.933, + -4, + 1, + 5.1, + -4, + 5.267, + -3, + 5.433, + -3, + 0, + 5.933, + -3 + ] + }, + { + "Target": "Parameter", + "Id": "ParamArmRA", + "Segments": [ + 0, + -8.7, + 1, + 0.289, + -8.7, + 0.578, + -8.7, + 0.867, + -8.7, + 1, + 1, + -8.7, + 1.133, + -10, + 1.267, + -10, + 1, + 1.578, + -10, + 1.889, + -10, + 2.2, + -10, + 1, + 2.444, + -10, + 2.689, + -10, + 2.933, + -10, + 1, + 3.244, + -10, + 3.556, + -10, + 3.867, + -10, + 1, + 3.989, + -10, + 4.111, + -9.998, + 4.233, + -7.8, + 1, + 4.344, + -5.802, + 4.456, + 0.03, + 4.567, + 0.03, + 1, + 4.689, + 0.03, + 4.811, + -1, + 4.933, + -1, + 1, + 5.122, + -1, + 5.311, + -0.002, + 5.5, + -0.002, + 0, + 5.933, + -0.002 + ] + }, + { + "Target": "Parameter", + "Id": "ParamHandL", + "Segments": [ + 0, + 0, + 1, + 1.067, + 0, + 2.133, + 0, + 3.2, + 0, + 1, + 3.633, + 0, + 4.067, + 1, + 4.5, + 1, + 1, + 4.667, + 1, + 4.833, + -1, + 5, + -1, + 1, + 5.122, + -1, + 5.244, + 0.208, + 5.367, + 0.208, + 0, + 5.933, + 0.208 + ] + }, + { + "Target": "Parameter", + "Id": "ParamHandR", + "Segments": [ + 0, + 0, + 1, + 1.067, + 0, + 2.133, + 0, + 3.2, + 0, + 1, + 3.633, + 0, + 4.067, + 1, + 4.5, + 1, + 1, + 4.667, + 1, + 4.833, + -1, + 5, + -1, + 1, + 5.122, + -1, + 5.244, + 0.208, + 5.367, + 0.208, + 0, + 5.933, + 0.208 + ] + }, + { + "Target": "Parameter", + "Id": "ParamHairAhoge", + "Segments": [ + 0, + 0, + 1, + 0.333, + 0, + 0.667, + 0, + 1, + 0, + 1, + 1.133, + 0, + 1.267, + 10, + 1.4, + 10, + 1, + 1.489, + 10, + 1.578, + 2.177, + 1.667, + 2.177, + 1, + 1.789, + 2.177, + 1.911, + 10, + 2.033, + 10, + 1, + 2.289, + 10, + 2.544, + -10, + 2.8, + -10, + 1, + 2.933, + -10, + 3.067, + 7.54, + 3.2, + 7.54, + 1, + 3.344, + 7.54, + 3.489, + 0, + 3.633, + 0, + 1, + 3.911, + 0, + 4.189, + 0, + 4.467, + 0, + 1, + 4.6, + 0, + 4.733, + 10, + 4.867, + 10, + 1, + 4.989, + 10, + 5.111, + -10, + 5.233, + -10, + 1, + 5.322, + -10, + 5.411, + 3.456, + 5.5, + 3.456, + 1, + 5.556, + 3.456, + 5.611, + 0, + 5.667, + 0, + 0, + 5.933, + 0 + ] + }, + { + "Target": "PartOpacity", + "Id": "PartArmA", + "Segments": [ + 0, + 1, + 0, + 5.93, + 1 + ] + }, + { + "Target": "PartOpacity", + "Id": "PartArmB", + "Segments": [ + 0, + 0, + 0, + 5.93, + 0 + ] + } + ] +} \ No newline at end of file diff --git a/main/xiaozhi-server/test/hiyori_pro_zh/runtime/motion/hiyori_m03.motion3.json b/main/xiaozhi-server/test/hiyori_pro_zh/runtime/motion/hiyori_m03.motion3.json new file mode 100644 index 00000000..e35ceff7 --- /dev/null +++ b/main/xiaozhi-server/test/hiyori_pro_zh/runtime/motion/hiyori_m03.motion3.json @@ -0,0 +1,1295 @@ +{ + "Version": 3, + "Meta": { + "Duration": 4.2, + "Fps": 30.0, + "Loop": true, + "AreBeziersRestricted": false, + "CurveCount": 31, + "TotalSegmentCount": 169, + "TotalPointCount": 474, + "UserDataCount": 0, + "TotalUserDataSize": 0 + }, + "Curves": [ + { + "Target": "Parameter", + "Id": "ParamAngleX", + "Segments": [ + 0, + 0, + 1, + 0.056, + 0, + 0.111, + 0, + 0.167, + 0, + 1, + 0.389, + 0, + 0.611, + 0, + 0.833, + 0, + 1, + 0.933, + 0, + 1.033, + 0, + 1.133, + 0, + 1, + 1.311, + 0, + 1.489, + 0, + 1.667, + 0, + 1, + 1.778, + 0, + 1.889, + -0.268, + 2, + -1, + 1, + 2.089, + -1.585, + 2.178, + -2, + 2.267, + -2, + 0, + 4.2, + -2 + ] + }, + { + "Target": "Parameter", + "Id": "ParamAngleY", + "Segments": [ + 0, + 0, + 1, + 0.056, + 0, + 0.111, + 0, + 0.167, + 0, + 1, + 0.3, + 0, + 0.433, + -18, + 0.567, + -18, + 1, + 0.656, + -18, + 0.744, + 8, + 0.833, + 8, + 1, + 0.933, + 8, + 1.033, + -8, + 1.133, + -8, + 1, + 1.311, + -8, + 1.489, + 10, + 1.667, + 10, + 1, + 1.778, + 10, + 1.889, + -21, + 2, + -21, + 1, + 2.089, + -21, + 2.178, + -3, + 2.267, + -3, + 0, + 4.2, + -3 + ] + }, + { + "Target": "Parameter", + "Id": "ParamAngleZ", + "Segments": [ + 0, + 0, + 1, + 0.056, + 0, + 0.111, + 0, + 0.167, + 0, + 1, + 0.289, + 0, + 0.411, + -1, + 0.533, + -1, + 1, + 0.722, + -1, + 0.911, + 17, + 1.1, + 17, + 1, + 1.411, + 17, + 1.722, + -22, + 2.033, + -22, + 1, + 2.244, + -22, + 2.456, + 11, + 2.667, + 11, + 0, + 4.2, + 11 + ] + }, + { + "Target": "Parameter", + "Id": "ParamCheek", + "Segments": [ + 0, + 0, + 1, + 0.056, + 0, + 0.111, + 0, + 0.167, + 0, + 0, + 4.2, + 0 + ] + }, + { + "Target": "Parameter", + "Id": "ParamEyeLOpen", + "Segments": [ + 0, + 1, + 1, + 0.056, + 1, + 0.111, + 1, + 0.167, + 1, + 1, + 0.2, + 1, + 0.233, + 1, + 0.267, + 1, + 1, + 0.322, + 1, + 0.378, + 0, + 0.433, + 0, + 1, + 0.478, + 0, + 0.522, + 0, + 0.567, + 0, + 1, + 0.644, + 0, + 0.722, + 1, + 0.8, + 1, + 1, + 1.056, + 1, + 1.311, + 0.988, + 1.567, + 0.988, + 1, + 1.789, + 0.988, + 2.011, + 1, + 2.233, + 1, + 1, + 2.267, + 1, + 2.3, + 1, + 2.333, + 1, + 1, + 2.367, + 1, + 2.4, + 0, + 2.433, + 0, + 1, + 2.478, + 0, + 2.522, + 0, + 2.567, + 0, + 1, + 2.622, + 0, + 2.678, + 1, + 2.733, + 1, + 0, + 4.2, + 1 + ] + }, + { + "Target": "Parameter", + "Id": "ParamEyeLSmile", + "Segments": [ + 0, + 0, + 1, + 0.056, + 0, + 0.111, + 0, + 0.167, + 0, + 0, + 4.2, + 0 + ] + }, + { + "Target": "Parameter", + "Id": "ParamEyeROpen", + "Segments": [ + 0, + 1, + 1, + 0.056, + 1, + 0.111, + 1, + 0.167, + 1, + 1, + 0.2, + 1, + 0.233, + 1, + 0.267, + 1, + 1, + 0.322, + 1, + 0.378, + 0, + 0.433, + 0, + 1, + 0.478, + 0, + 0.522, + 0, + 0.567, + 0, + 1, + 0.644, + 0, + 0.722, + 1, + 0.8, + 1, + 1, + 1.056, + 1, + 1.311, + 1, + 1.567, + 1, + 1, + 1.789, + 1, + 2.011, + 1, + 2.233, + 1, + 1, + 2.267, + 1, + 2.3, + 1, + 2.333, + 1, + 1, + 2.367, + 1, + 2.4, + 0, + 2.433, + 0, + 1, + 2.478, + 0, + 2.522, + 0, + 2.567, + 0, + 1, + 2.622, + 0, + 2.678, + 1, + 2.733, + 1, + 0, + 4.2, + 1 + ] + }, + { + "Target": "Parameter", + "Id": "ParamEyeRSmile", + "Segments": [ + 0, + 0, + 1, + 0.056, + 0, + 0.111, + 0, + 0.167, + 0, + 0, + 4.2, + 0 + ] + }, + { + "Target": "Parameter", + "Id": "ParamEyeBallX", + "Segments": [ + 0, + 0, + 1, + 0.056, + 0, + 0.111, + 0, + 0.167, + 0, + 1, + 0.256, + 0, + 0.344, + 0, + 0.433, + 0, + 1, + 0.478, + 0, + 0.522, + -1, + 0.567, + -1, + 1, + 0.8, + -1, + 1.033, + -1, + 1.267, + -1, + 1, + 1.422, + -1, + 1.578, + 0.583, + 1.733, + 0.583, + 1, + 1.967, + 0.583, + 2.2, + 0.583, + 2.433, + 0.583, + 1, + 2.478, + 0.583, + 2.522, + 0, + 2.567, + 0, + 0, + 4.2, + 0 + ] + }, + { + "Target": "Parameter", + "Id": "ParamEyeBallY", + "Segments": [ + 0, + 0, + 1, + 0.056, + 0, + 0.111, + 0, + 0.167, + 0, + 1, + 0.256, + 0, + 0.344, + 0, + 0.433, + 0, + 1, + 0.478, + 0, + 0.522, + 1, + 0.567, + 1, + 1, + 0.8, + 1, + 1.033, + 1, + 1.267, + 1, + 1, + 1.422, + 1, + 1.578, + 0.75, + 1.733, + 0.75, + 1, + 1.967, + 0.75, + 2.2, + 0.75, + 2.433, + 0.75, + 1, + 2.478, + 0.75, + 2.522, + 0, + 2.567, + 0, + 0, + 4.2, + 0 + ] + }, + { + "Target": "Parameter", + "Id": "ParamBrowLY", + "Segments": [ + 0, + 0, + 1, + 0.056, + 0, + 0.111, + 0, + 0.167, + 0, + 0, + 4.2, + 0 + ] + }, + { + "Target": "Parameter", + "Id": "ParamBrowRY", + "Segments": [ + 0, + 0, + 1, + 0.056, + 0, + 0.111, + 0, + 0.167, + 0, + 0, + 4.2, + 0 + ] + }, + { + "Target": "Parameter", + "Id": "ParamBrowLX", + "Segments": [ + 0, + 0, + 1, + 0.056, + 0, + 0.111, + 0, + 0.167, + 0, + 0, + 4.2, + 0 + ] + }, + { + "Target": "Parameter", + "Id": "ParamBrowRX", + "Segments": [ + 0, + 0, + 1, + 0.056, + 0, + 0.111, + 0, + 0.167, + 0, + 0, + 4.2, + 0 + ] + }, + { + "Target": "Parameter", + "Id": "ParamBrowLAngle", + "Segments": [ + 0, + 0, + 1, + 0.056, + 0, + 0.111, + 0, + 0.167, + 0, + 0, + 4.2, + 0 + ] + }, + { + "Target": "Parameter", + "Id": "ParamBrowRAngle", + "Segments": [ + 0, + 0, + 1, + 0.056, + 0, + 0.111, + 0, + 0.167, + 0, + 0, + 4.2, + 0 + ] + }, + { + "Target": "Parameter", + "Id": "ParamBrowLForm", + "Segments": [ + 0, + 0, + 1, + 0.056, + 0, + 0.111, + 0, + 0.167, + 0, + 0, + 4.2, + 0 + ] + }, + { + "Target": "Parameter", + "Id": "ParamBrowRForm", + "Segments": [ + 0, + 0, + 1, + 0.056, + 0, + 0.111, + 0, + 0.167, + 0, + 0, + 4.2, + 0 + ] + }, + { + "Target": "Parameter", + "Id": "ParamBodyAngleX", + "Segments": [ + 0, + 0, + 1, + 0.056, + 0, + 0.111, + 0, + 0.167, + 0, + 0, + 4.2, + 0 + ] + }, + { + "Target": "Parameter", + "Id": "ParamBodyAngleY", + "Segments": [ + 0, + 0, + 1, + 0.056, + 0, + 0.111, + 0, + 0.167, + 0, + 1, + 0.244, + 0, + 0.322, + -4, + 0.4, + -4, + 1, + 0.478, + -4, + 0.556, + 10, + 0.633, + 10, + 1, + 0.8, + 10, + 0.967, + -0.386, + 1.133, + -0.386, + 1, + 1.244, + -0.386, + 1.356, + 10, + 1.467, + 10, + 1, + 1.6, + 10, + 1.733, + 0, + 1.867, + 0, + 1, + 2.044, + 0, + 2.222, + 10, + 2.4, + 10, + 1, + 2.444, + 10, + 2.512, + 10, + 2.533, + 9.649, + 1, + 2.7, + 6.854, + 2.867, + -3.526, + 3.033, + -3.526, + 1, + 3.267, + -3.526, + 3.5, + 6.807, + 3.733, + 6.807, + 1, + 3.811, + 6.807, + 3.889, + 6, + 3.967, + 6, + 0, + 4.2, + 6 + ] + }, + { + "Target": "Parameter", + "Id": "ParamBodyAngleZ", + "Segments": [ + 0, + 0, + 1, + 0.056, + 0, + 0.111, + 0, + 0.167, + 0, + 1, + 0.256, + 0, + 0.344, + -1, + 0.433, + -1, + 1, + 0.656, + -1, + 0.878, + 6, + 1.1, + 6, + 1, + 1.333, + 6, + 1.567, + -3, + 1.8, + -3, + 1, + 2.256, + -3, + 2.711, + 8, + 3.167, + 8, + 0, + 4.2, + 8 + ] + }, + { + "Target": "Parameter", + "Id": "ParamBreath", + "Segments": [ + 0, + 0, + 1, + 0.189, + 0, + 0.378, + 1, + 0.567, + 1, + 1, + 0.733, + 1, + 0.9, + 0, + 1.067, + 0, + 1, + 1.3, + 0, + 1.533, + 1, + 1.767, + 1, + 1, + 2.033, + 1, + 2.3, + 0, + 2.567, + 0, + 1, + 2.778, + 0, + 2.989, + 1, + 3.2, + 1, + 1, + 3.4, + 1, + 3.6, + 0, + 3.8, + 0, + 0, + 4.2, + 0 + ] + }, + { + "Target": "Parameter", + "Id": "ParamShoulder", + "Segments": [ + 0, + 0, + 0, + 4.2, + 0 + ] + }, + { + "Target": "Parameter", + "Id": "ParamLeg", + "Segments": [ + 0, + 1, + 1, + 0.8, + 1, + 1.6, + 1, + 2.4, + 1, + 1, + 2.522, + 1, + 2.644, + 0, + 2.767, + 0, + 1, + 3.011, + 0, + 3.256, + 0.062, + 3.5, + 0.062, + 0, + 4.2, + 0.062 + ] + }, + { + "Target": "Parameter", + "Id": "ParamArmLA", + "Segments": [ + 0, + -10, + 1, + 0.256, + -10, + 0.511, + 0, + 0.767, + 0, + 1, + 0.889, + 0, + 1.011, + -6.5, + 1.133, + -6.5, + 1, + 1.289, + -6.5, + 1.444, + 0, + 1.6, + 0, + 1, + 1.756, + 0, + 1.911, + -8, + 2.067, + -8, + 1, + 2.344, + -8, + 2.622, + -1.4, + 2.9, + -1.4, + 1, + 2.978, + -1.4, + 3.056, + -1.775, + 3.133, + -2.3, + 1, + 3.211, + -2.825, + 3.289, + -3, + 3.367, + -3, + 1, + 3.433, + -3, + 3.5, + -2.5, + 3.567, + -2.5, + 1, + 3.733, + -2.5, + 3.9, + -3, + 4.067, + -3, + 0, + 4.2, + -3 + ] + }, + { + "Target": "Parameter", + "Id": "ParamArmRA", + "Segments": [ + 0, + -10, + 1, + 0.256, + -10, + 0.511, + 0, + 0.767, + 0, + 1, + 0.867, + 0, + 0.967, + -5.2, + 1.067, + -5.2, + 1, + 1.244, + -5.2, + 1.422, + 0, + 1.6, + 0, + 1, + 1.778, + 0, + 1.956, + -6.3, + 2.133, + -6.3, + 1, + 2.422, + -6.3, + 2.711, + 0.029, + 3, + 0.029, + 1, + 3.144, + 0.029, + 3.289, + 0, + 3.433, + 0, + 1, + 3.5, + 0, + 3.567, + 0, + 3.633, + 0, + 1, + 3.722, + 0, + 3.811, + -0.029, + 3.9, + -0.029, + 0, + 4.2, + -0.029 + ] + }, + { + "Target": "Parameter", + "Id": "ParamHandL", + "Segments": [ + 0, + 0, + 1, + 0.056, + 0, + 0.111, + 0, + 0.167, + 0, + 1, + 0.256, + 0, + 0.344, + 1, + 0.433, + 1, + 1, + 0.589, + 1, + 0.744, + -1, + 0.9, + -1, + 1, + 1.111, + -1, + 1.322, + 1, + 1.533, + 1, + 1, + 1.733, + 1, + 1.933, + -1, + 2.133, + -1, + 1, + 2.411, + -1, + 2.689, + 1, + 2.967, + 1, + 1, + 3.111, + 1, + 3.256, + -1, + 3.4, + -1, + 1, + 3.5, + -1, + 3.6, + 0.8, + 3.7, + 0.8, + 0, + 4.2, + 0.8 + ] + }, + { + "Target": "Parameter", + "Id": "ParamHandR", + "Segments": [ + 0, + 0, + 1, + 0.056, + 0, + 0.111, + 0, + 0.167, + 0, + 1, + 0.256, + 0, + 0.344, + 1, + 0.433, + 1, + 1, + 0.589, + 1, + 0.744, + -1, + 0.9, + -1, + 1, + 1.111, + -1, + 1.322, + 1, + 1.533, + 1, + 1, + 1.733, + 1, + 1.933, + -1, + 2.133, + -1, + 1, + 2.411, + -1, + 2.689, + 1, + 2.967, + 1, + 1, + 3.111, + 1, + 3.256, + -0.6, + 3.4, + -0.6, + 1, + 3.5, + -0.6, + 3.6, + 0.8, + 3.7, + 0.8, + 0, + 4.2, + 0.8 + ] + }, + { + "Target": "Parameter", + "Id": "ParamHairAhoge", + "Segments": [ + 0, + 0, + 1, + 0.122, + 0, + 0.244, + -3.127, + 0.367, + -4, + 1, + 0.511, + -5.032, + 0.656, + -5, + 0.8, + -5, + 1, + 0.9, + -5, + 1, + 10, + 1.1, + 10, + 1, + 1.267, + 10, + 1.439, + 10, + 1.6, + 8, + 1, + 1.722, + 6.481, + 1.844, + -10, + 1.967, + -10, + 1, + 2.122, + -10, + 2.31, + -10, + 2.433, + -9.434, + 1, + 2.589, + -8.722, + 2.744, + 10, + 2.9, + 10, + 1, + 3.011, + 10, + 3.122, + -5.646, + 3.233, + -5.646, + 1, + 3.367, + -5.646, + 3.5, + 3.825, + 3.633, + 3.825, + 1, + 3.767, + 3.825, + 3.9, + 0, + 4.033, + 0, + 0, + 4.2, + 0 + ] + }, + { + "Target": "PartOpacity", + "Id": "PartArmA", + "Segments": [ + 0, + 1, + 0, + 4.2, + 1 + ] + }, + { + "Target": "PartOpacity", + "Id": "PartArmB", + "Segments": [ + 0, + 0, + 0, + 4.2, + 0 + ] + } + ] +} \ No newline at end of file diff --git a/main/xiaozhi-server/test/hiyori_pro_zh/runtime/motion/hiyori_m04.motion3.json b/main/xiaozhi-server/test/hiyori_pro_zh/runtime/motion/hiyori_m04.motion3.json new file mode 100644 index 00000000..2f91a794 --- /dev/null +++ b/main/xiaozhi-server/test/hiyori_pro_zh/runtime/motion/hiyori_m04.motion3.json @@ -0,0 +1,860 @@ +{ + "Version": 3, + "Meta": { + "Duration": 4.43, + "Fps": 30.0, + "Loop": true, + "AreBeziersRestricted": false, + "CurveCount": 29, + "TotalSegmentCount": 106, + "TotalPointCount": 287, + "UserDataCount": 0, + "TotalUserDataSize": 0 + }, + "Curves": [ + { + "Target": "Parameter", + "Id": "ParamAngleX", + "Segments": [ + 0, + 1, + 1, + 0.211, + 1, + 0.422, + 0, + 0.633, + 0, + 1, + 0.911, + 0, + 1.189, + 5, + 1.467, + 5, + 1, + 1.689, + 5, + 1.911, + -16, + 2.133, + -16, + 1, + 2.356, + -16, + 2.578, + 13.871, + 2.8, + 13.871, + 1, + 2.956, + 13.871, + 3.111, + 0, + 3.267, + 0, + 0, + 4.433, + 0 + ] + }, + { + "Target": "Parameter", + "Id": "ParamAngleY", + "Segments": [ + 0, + 0, + 1, + 0.211, + 0, + 0.422, + 0, + 0.633, + 0, + 1, + 0.911, + 0, + 1.189, + -25, + 1.467, + -25, + 1, + 1.689, + -25, + 1.911, + -15.225, + 2.133, + -11, + 1, + 2.356, + -6.775, + 2.578, + -5.127, + 2.8, + -2.5, + 1, + 2.956, + -0.661, + 3.111, + 0, + 3.267, + 0, + 0, + 4.433, + 0 + ] + }, + { + "Target": "Parameter", + "Id": "ParamAngleZ", + "Segments": [ + 0, + 0, + 1, + 0.222, + 0, + 0.444, + 0, + 0.667, + 0, + 1, + 0.756, + 0, + 0.844, + -4, + 0.933, + -4, + 1, + 1.122, + -4, + 1.311, + 18, + 1.5, + 18, + 1, + 1.722, + 18, + 1.944, + -14, + 2.167, + -14, + 1, + 2.567, + -14, + 2.967, + -14, + 3.367, + -14, + 1, + 3.511, + -14, + 3.656, + -12, + 3.8, + -12, + 0, + 4.433, + -12 + ] + }, + { + "Target": "Parameter", + "Id": "ParamCheek", + "Segments": [ + 0, + 1, + 0, + 4.433, + 1 + ] + }, + { + "Target": "Parameter", + "Id": "ParamEyeLOpen", + "Segments": [ + 0, + 1.2, + 1, + 0.389, + 1.2, + 0.778, + 1.148, + 1.167, + 1, + 1, + 1.211, + 0.983, + 1.256, + 0, + 1.3, + 0, + 1, + 1.322, + 0, + 1.344, + 0, + 1.367, + 0, + 1, + 1.422, + 0, + 1.478, + 1, + 1.533, + 1, + 1, + 1.944, + 1, + 2.356, + 1, + 2.767, + 1, + 1, + 2.811, + 1, + 2.856, + 0, + 2.9, + 0, + 1, + 2.922, + 0, + 2.944, + 0, + 2.967, + 0, + 1, + 3.022, + 0, + 3.078, + 1, + 3.133, + 1, + 0, + 4.433, + 1 + ] + }, + { + "Target": "Parameter", + "Id": "ParamEyeLSmile", + "Segments": [ + 0, + 0, + 0, + 4.433, + 0 + ] + }, + { + "Target": "Parameter", + "Id": "ParamEyeROpen", + "Segments": [ + 0, + 1.2, + 1, + 0.389, + 1.2, + 0.778, + 1.148, + 1.167, + 1, + 1, + 1.211, + 0.983, + 1.256, + 0, + 1.3, + 0, + 1, + 1.322, + 0, + 1.344, + 0, + 1.367, + 0, + 1, + 1.422, + 0, + 1.478, + 1, + 1.533, + 1, + 1, + 1.944, + 1, + 2.356, + 1, + 2.767, + 1, + 1, + 2.811, + 1, + 2.856, + 0, + 2.9, + 0, + 1, + 2.922, + 0, + 2.944, + 0, + 2.967, + 0, + 1, + 3.022, + 0, + 3.078, + 1, + 3.133, + 1, + 0, + 4.433, + 1 + ] + }, + { + "Target": "Parameter", + "Id": "ParamEyeRSmile", + "Segments": [ + 0, + 0, + 0, + 4.433, + 0 + ] + }, + { + "Target": "Parameter", + "Id": "ParamEyeBallX", + "Segments": [ + 0, + 0, + 1, + 0.211, + 0, + 0.422, + 0, + 0.633, + 0, + 1, + 0.911, + 0, + 1.189, + -0.44, + 1.467, + -0.44, + 1, + 1.689, + -0.44, + 1.911, + 0.79, + 2.133, + 0.79, + 1, + 2.511, + 0.79, + 2.889, + 0, + 3.267, + 0, + 0, + 4.433, + 0 + ] + }, + { + "Target": "Parameter", + "Id": "ParamEyeBallY", + "Segments": [ + 0, + 0, + 1, + 0.211, + 0, + 0.422, + 0, + 0.633, + 0, + 1, + 0.911, + 0, + 1.189, + -1, + 1.467, + -1, + 1, + 1.689, + -1, + 1.911, + -1, + 2.133, + -1, + 1, + 2.511, + -1, + 2.889, + 0, + 3.267, + 0, + 0, + 4.433, + 0 + ] + }, + { + "Target": "Parameter", + "Id": "ParamBrowLY", + "Segments": [ + 0, + 1, + 1, + 0.544, + 1, + 1.089, + 1, + 1.633, + 1, + 1, + 1.856, + 1, + 2.078, + 0, + 2.3, + 0, + 1, + 2.5, + 0, + 2.7, + 1, + 2.9, + 1, + 0, + 4.433, + 1 + ] + }, + { + "Target": "Parameter", + "Id": "ParamBrowRY", + "Segments": [ + 0, + 1, + 1, + 0.544, + 1, + 1.089, + 1, + 1.633, + 1, + 1, + 1.856, + 1, + 2.078, + 0, + 2.3, + 0, + 1, + 2.5, + 0, + 2.7, + 1, + 2.9, + 1, + 0, + 4.433, + 1 + ] + }, + { + "Target": "Parameter", + "Id": "ParamBrowLX", + "Segments": [ + 0, + 0, + 0, + 4.433, + 0 + ] + }, + { + "Target": "Parameter", + "Id": "ParamBrowRX", + "Segments": [ + 0, + 0, + 0, + 4.433, + 0 + ] + }, + { + "Target": "Parameter", + "Id": "ParamBrowLAngle", + "Segments": [ + 0, + 0, + 0, + 4.433, + 0 + ] + }, + { + "Target": "Parameter", + "Id": "ParamBrowRAngle", + "Segments": [ + 0, + 0, + 0, + 4.433, + 0 + ] + }, + { + "Target": "Parameter", + "Id": "ParamBrowLForm", + "Segments": [ + 0, + -1, + 0, + 4.433, + -1 + ] + }, + { + "Target": "Parameter", + "Id": "ParamBrowRForm", + "Segments": [ + 0, + -1, + 0, + 4.433, + -1 + ] + }, + { + "Target": "Parameter", + "Id": "ParamBodyAngleX", + "Segments": [ + 0, + 0, + 1, + 0.244, + 0, + 0.489, + 0, + 0.733, + 0, + 1, + 0.933, + 0, + 1.133, + -7, + 1.333, + -7, + 1, + 1.644, + -7, + 1.956, + 0, + 2.267, + 0, + 0, + 4.433, + 0 + ] + }, + { + "Target": "Parameter", + "Id": "ParamBodyAngleY", + "Segments": [ + 0, + 0, + 1, + 0.244, + 0, + 0.489, + 0, + 0.733, + 0, + 0, + 4.433, + 0 + ] + }, + { + "Target": "Parameter", + "Id": "ParamBodyAngleZ", + "Segments": [ + 0, + 2, + 1, + 0.233, + 2, + 0.467, + 0, + 0.7, + 0, + 1, + 0.733, + 0, + 0.767, + 0, + 0.8, + 0, + 1, + 1, + 0, + 1.2, + -4, + 1.4, + -4, + 1, + 1.711, + -4, + 2.022, + 5, + 2.333, + 5, + 1, + 2.567, + 5, + 2.8, + 3.64, + 3.033, + 0, + 1, + 3.133, + -1.56, + 3.233, + -3, + 3.333, + -3, + 1, + 3.467, + -3, + 3.6, + -2, + 3.733, + -2, + 0, + 4.433, + -2 + ] + }, + { + "Target": "Parameter", + "Id": "ParamBreath", + "Segments": [ + 0, + 0, + 1, + 0.189, + 0, + 0.378, + 1, + 0.567, + 1, + 1, + 0.711, + 1, + 0.856, + 0, + 1, + 0, + 1, + 1.222, + 0, + 1.444, + 1, + 1.667, + 1, + 1, + 1.889, + 1, + 2.111, + 0, + 2.333, + 0, + 1, + 2.544, + 0, + 2.756, + 1, + 2.967, + 1, + 1, + 3.167, + 1, + 3.367, + 0, + 3.567, + 0, + 0, + 4.433, + 0 + ] + }, + { + "Target": "Parameter", + "Id": "ParamShoulder", + "Segments": [ + 0, + 0.1, + 1, + 0.467, + 0.1, + 0.933, + 1, + 1.4, + 1, + 1, + 1.844, + 1, + 2.289, + 1, + 2.733, + 1, + 1, + 2.967, + 1, + 3.2, + -1, + 3.433, + -1, + 0, + 4.433, + -1 + ] + }, + { + "Target": "Parameter", + "Id": "ParamLeg", + "Segments": [ + 0, + 1, + 0, + 4.433, + 1 + ] + }, + { + "Target": "Parameter", + "Id": "ParamArmLA", + "Segments": [ + 0, + -10, + 0, + 4.433, + -10 + ] + }, + { + "Target": "Parameter", + "Id": "ParamArmRA", + "Segments": [ + 0, + -10, + 0, + 4.433, + -10 + ] + }, + { + "Target": "Parameter", + "Id": "ParamHairAhoge", + "Segments": [ + 0, + 0, + 1, + 0.3, + 0, + 0.6, + 0, + 0.9, + -0.012, + 1, + 1.067, + -0.019, + 1.233, + -6.827, + 1.4, + -6.827, + 1, + 1.511, + -6.827, + 1.622, + 7.958, + 1.733, + 7.958, + 1, + 1.944, + 7.958, + 2.156, + -7.565, + 2.367, + -7.565, + 1, + 2.5, + -7.565, + 2.633, + 9.434, + 2.767, + 9.434, + 1, + 2.978, + 9.434, + 3.189, + -8.871, + 3.4, + -8.871, + 1, + 3.5, + -8.871, + 3.6, + 7.588, + 3.7, + 7.588, + 1, + 3.789, + 7.588, + 3.878, + -3.904, + 3.967, + -3.904, + 1, + 4.011, + -3.904, + 4.056, + -0.032, + 4.1, + -0.032, + 0, + 4.433, + -0.032 + ] + }, + { + "Target": "PartOpacity", + "Id": "PartArmA", + "Segments": [ + 0, + 1, + 0, + 4.43, + 1 + ] + }, + { + "Target": "PartOpacity", + "Id": "PartArmB", + "Segments": [ + 0, + 0, + 0, + 4.43, + 0 + ] + } + ] +} \ No newline at end of file diff --git a/main/xiaozhi-server/test/hiyori_pro_zh/runtime/motion/hiyori_m05.motion3.json b/main/xiaozhi-server/test/hiyori_pro_zh/runtime/motion/hiyori_m05.motion3.json new file mode 100644 index 00000000..faea7240 --- /dev/null +++ b/main/xiaozhi-server/test/hiyori_pro_zh/runtime/motion/hiyori_m05.motion3.json @@ -0,0 +1,1543 @@ +{ + "Version": 3, + "Meta": { + "Duration": 8.57, + "Fps": 30.0, + "Loop": true, + "AreBeziersRestricted": false, + "CurveCount": 30, + "TotalSegmentCount": 218, + "TotalPointCount": 622, + "UserDataCount": 0, + "TotalUserDataSize": 0 + }, + "Curves": [ + { + "Target": "Parameter", + "Id": "ParamAngleX", + "Segments": [ + 0, + 0, + 1, + 0.189, + 0, + 0.378, + 1, + 0.567, + 1, + 1, + 1.122, + 1, + 1.678, + 1, + 2.233, + 1, + 1, + 2.533, + 1, + 2.833, + -30, + 3.133, + -30, + 1, + 4.067, + -30, + 5, + -30, + 5.933, + -30, + 1, + 6.322, + -30, + 6.711, + 0, + 7.1, + 0, + 0, + 8.567, + 0 + ] + }, + { + "Target": "Parameter", + "Id": "ParamAngleY", + "Segments": [ + 0, + 0, + 1, + 0.189, + 0, + 0.378, + 18, + 0.567, + 18, + 1, + 0.856, + 18, + 1.144, + -9.95, + 1.433, + -9.95, + 1, + 1.522, + -9.95, + 1.611, + -1.589, + 1.7, + -1.589, + 1, + 1.911, + -1.589, + 2.122, + -8.047, + 2.333, + -8.047, + 1, + 2.6, + -8.047, + 2.867, + 30, + 3.133, + 30, + 1, + 3.478, + 30, + 3.822, + 29.529, + 4.167, + 27.847, + 1, + 4.311, + 27.142, + 4.456, + 25.42, + 4.6, + 24.243, + 1, + 4.922, + 21.616, + 5.244, + 20.338, + 5.567, + 20.338, + 1, + 5.789, + 20.338, + 6.011, + 27.397, + 6.233, + 27.397, + 1, + 6.522, + 27.397, + 6.811, + 0, + 7.1, + 0, + 0, + 8.567, + 0 + ] + }, + { + "Target": "Parameter", + "Id": "ParamAngleZ", + "Segments": [ + 0, + 0, + 1, + 0.189, + 0, + 0.378, + 0, + 0.567, + 0, + 1, + 0.8, + 0, + 1.033, + 25, + 1.267, + 25, + 1, + 1.4, + 25, + 1.533, + 25, + 1.667, + 25, + 1, + 1.878, + 25, + 2.089, + 25, + 2.3, + 25, + 1, + 2.578, + 25, + 2.856, + -30, + 3.133, + -30, + 1, + 4, + -30, + 4.867, + -30, + 5.733, + -30, + 1, + 5.8, + -30, + 5.867, + -30, + 5.933, + -30, + 1, + 6.322, + -30, + 6.711, + 0, + 7.1, + 0, + 0, + 8.567, + 0 + ] + }, + { + "Target": "Parameter", + "Id": "ParamCheek", + "Segments": [ + 0, + 0, + 1, + 0.2, + 0, + 0.4, + 0, + 0.6, + 0, + 1, + 2.844, + 0, + 5.089, + 0, + 7.333, + 0, + 0, + 8.567, + 0 + ] + }, + { + "Target": "Parameter", + "Id": "ParamEyeLOpen", + "Segments": [ + 0, + 1, + 1, + 0.278, + 1, + 0.556, + 1, + 0.833, + 1, + 1, + 0.867, + 1, + 0.9, + 0, + 0.933, + 0, + 1, + 1.222, + 0, + 1.511, + 0, + 1.8, + 0, + 1, + 1.889, + 0, + 1.978, + 1, + 2.067, + 1, + 1, + 2.322, + 1, + 2.578, + 1, + 2.833, + 1, + 1, + 2.889, + 1, + 2.944, + 0, + 3, + 0, + 1, + 3.022, + 0, + 3.044, + 0, + 3.067, + 0, + 1, + 3.122, + 0, + 3.178, + 1, + 3.233, + 1, + 1, + 3.5, + 1, + 3.767, + 1, + 4.033, + 1, + 1, + 4.089, + 1, + 4.144, + 0, + 4.2, + 0, + 1, + 4.222, + 0, + 4.244, + 0, + 4.267, + 0, + 1, + 4.322, + 0, + 4.378, + 1, + 4.433, + 1, + 1, + 5.133, + 1, + 5.833, + 1, + 6.533, + 1, + 1, + 6.589, + 1, + 6.644, + 0, + 6.7, + 0, + 1, + 6.722, + 0, + 6.744, + 0, + 6.767, + 0, + 1, + 6.822, + 0, + 6.878, + 1, + 6.933, + 1, + 1, + 7.067, + 1, + 7.2, + 1, + 7.333, + 1, + 0, + 8.567, + 1 + ] + }, + { + "Target": "Parameter", + "Id": "ParamEyeLSmile", + "Segments": [ + 0, + 0, + 1, + 0.278, + 0, + 0.556, + 0.812, + 0.833, + 0.812, + 0, + 8.567, + 0.812 + ] + }, + { + "Target": "Parameter", + "Id": "ParamEyeROpen", + "Segments": [ + 0, + 1, + 1, + 0.278, + 1, + 0.556, + 1, + 0.833, + 1, + 1, + 0.867, + 1, + 0.9, + 0, + 0.933, + 0, + 1, + 1.222, + 0, + 1.511, + 0, + 1.8, + 0, + 1, + 1.889, + 0, + 1.978, + 1, + 2.067, + 1, + 1, + 2.322, + 1, + 2.578, + 1, + 2.833, + 1, + 1, + 2.889, + 1, + 2.944, + 0, + 3, + 0, + 1, + 3.022, + 0, + 3.044, + 0, + 3.067, + 0, + 1, + 3.122, + 0, + 3.178, + 1, + 3.233, + 1, + 1, + 3.5, + 1, + 3.767, + 1, + 4.033, + 1, + 1, + 4.089, + 1, + 4.144, + 0, + 4.2, + 0, + 1, + 4.222, + 0, + 4.244, + 0, + 4.267, + 0, + 1, + 4.322, + 0, + 4.378, + 1, + 4.433, + 1, + 1, + 5.133, + 1, + 5.833, + 1, + 6.533, + 1, + 1, + 6.589, + 1, + 6.644, + 0, + 6.7, + 0, + 1, + 6.722, + 0, + 6.744, + 0, + 6.767, + 0, + 1, + 6.822, + 0, + 6.878, + 1, + 6.933, + 1, + 1, + 7.067, + 1, + 7.2, + 1, + 7.333, + 1, + 0, + 8.567, + 1 + ] + }, + { + "Target": "Parameter", + "Id": "ParamEyeRSmile", + "Segments": [ + 0, + 0, + 1, + 0.278, + 0, + 0.556, + 0.812, + 0.833, + 0.812, + 1, + 1.967, + 0.812, + 3.1, + 0.8, + 4.233, + 0.8, + 0, + 8.567, + 0.8 + ] + }, + { + "Target": "Parameter", + "Id": "ParamEyeBallX", + "Segments": [ + 0, + 0, + 1, + 0.2, + 0, + 0.4, + -0.065, + 0.6, + -0.14, + 1, + 0.811, + -0.219, + 1.022, + -0.24, + 1.233, + -0.24, + 1, + 1.367, + -0.24, + 1.5, + -0.24, + 1.633, + -0.24, + 1, + 1.844, + -0.24, + 2.056, + -0.24, + 2.267, + -0.24, + 1, + 2.556, + -0.24, + 2.844, + 0.661, + 3.133, + 0.68, + 1, + 3.5, + 0.704, + 3.867, + 0.7, + 4.233, + 0.7, + 1, + 4.5, + 0.7, + 4.767, + -0.75, + 5.033, + -0.75, + 1, + 5.589, + -0.75, + 6.144, + 0.68, + 6.7, + 0.68, + 1, + 6.789, + 0.68, + 6.878, + 0, + 6.967, + 0, + 0, + 8.567, + 0 + ] + }, + { + "Target": "Parameter", + "Id": "ParamEyeBallY", + "Segments": [ + 0, + 0, + 1, + 0.2, + 0, + 0.4, + -0.38, + 0.6, + -0.38, + 1, + 0.811, + -0.38, + 1.022, + 0.21, + 1.233, + 0.21, + 1, + 1.367, + 0.21, + 1.5, + 0.21, + 1.633, + 0.21, + 1, + 1.844, + 0.21, + 2.056, + 0.21, + 2.267, + 0.21, + 1, + 2.556, + 0.21, + 2.844, + -0.33, + 3.133, + -0.33, + 1, + 3.767, + -0.33, + 4.4, + 0.625, + 5.033, + 0.625, + 1, + 5.589, + 0.625, + 6.144, + -0.33, + 6.7, + -0.33, + 1, + 6.789, + -0.33, + 6.878, + 0, + 6.967, + 0, + 0, + 8.567, + 0 + ] + }, + { + "Target": "Parameter", + "Id": "ParamBrowLY", + "Segments": [ + 0, + 0, + 1, + 0.2, + 0, + 0.4, + 0, + 0.6, + 0, + 1, + 0.656, + 0, + 0.711, + 0, + 0.767, + 0, + 1, + 0.822, + 0, + 0.878, + 0.667, + 0.933, + 0.667, + 1, + 1.211, + 0.667, + 1.489, + 0.667, + 1.767, + 0.667, + 1, + 2.011, + 0.667, + 2.256, + 0, + 2.5, + 0, + 0, + 8.567, + 0 + ] + }, + { + "Target": "Parameter", + "Id": "ParamBrowRY", + "Segments": [ + 0, + 0, + 1, + 0.2, + 0, + 0.4, + 0, + 0.6, + 0, + 1, + 0.656, + 0, + 0.711, + 0, + 0.767, + 0, + 1, + 0.822, + 0, + 0.878, + 0.646, + 0.933, + 0.646, + 1, + 1.211, + 0.646, + 1.489, + 0.646, + 1.767, + 0.646, + 1, + 2.011, + 0.646, + 2.256, + 0, + 2.5, + 0, + 0, + 8.567, + 0 + ] + }, + { + "Target": "Parameter", + "Id": "ParamBrowLX", + "Segments": [ + 0, + 0, + 1, + 0.2, + 0, + 0.4, + 0, + 0.6, + 0, + 0, + 8.567, + 0 + ] + }, + { + "Target": "Parameter", + "Id": "ParamBrowRX", + "Segments": [ + 0, + 0, + 1, + 0.2, + 0, + 0.4, + 0, + 0.6, + 0, + 0, + 8.567, + 0 + ] + }, + { + "Target": "Parameter", + "Id": "ParamBrowLAngle", + "Segments": [ + 0, + 0, + 1, + 0.2, + 0, + 0.4, + 0, + 0.6, + 0, + 0, + 8.567, + 0 + ] + }, + { + "Target": "Parameter", + "Id": "ParamBrowRAngle", + "Segments": [ + 0, + 0, + 1, + 0.2, + 0, + 0.4, + 0, + 0.6, + 0, + 0, + 8.567, + 0 + ] + }, + { + "Target": "Parameter", + "Id": "ParamBrowLForm", + "Segments": [ + 0, + 0, + 1, + 0.2, + 0, + 0.4, + 0, + 0.6, + 0, + 0, + 8.567, + 0 + ] + }, + { + "Target": "Parameter", + "Id": "ParamBrowRForm", + "Segments": [ + 0, + 0, + 1, + 0.2, + 0, + 0.4, + 0, + 0.6, + 0, + 0, + 8.567, + 0 + ] + }, + { + "Target": "Parameter", + "Id": "ParamBodyAngleX", + "Segments": [ + 0, + 0, + 1, + 0.133, + 0, + 0.267, + 0, + 0.4, + 0, + 1, + 0.5, + 0, + 0.6, + -1.353, + 0.7, + -1.353, + 1, + 0.933, + -1.353, + 1.167, + 10, + 1.4, + 10, + 1, + 1.544, + 10, + 1.689, + 9.799, + 1.833, + 9.8, + 1, + 2.089, + 9.799, + 2.344, + 9.875, + 2.6, + 9.875, + 1, + 2.944, + 9.875, + 3.289, + -9.599, + 3.633, + -9.599, + 1, + 3.844, + -9.599, + 4.056, + -2.657, + 4.267, + -2.657, + 1, + 4.467, + -2.657, + 4.667, + -9.098, + 4.867, + -9.098, + 1, + 5.144, + -9.098, + 5.422, + -4.812, + 5.7, + -4.812, + 1, + 5.967, + -4.812, + 6.233, + -10, + 6.5, + -10, + 1, + 6.778, + -10, + 7.056, + -1.43, + 7.333, + 0, + 1, + 7.533, + 1.03, + 7.733, + 0.752, + 7.933, + 0.752, + 1, + 8.011, + 0.752, + 8.089, + -0.326, + 8.167, + -0.326, + 0, + 8.567, + -0.326 + ] + }, + { + "Target": "Parameter", + "Id": "ParamBodyAngleY", + "Segments": [ + 0, + 0, + 1, + 0.2, + 0, + 0.4, + 5.421, + 0.6, + 5.421, + 1, + 0.867, + 5.421, + 1.133, + -3.737, + 1.4, + -3.737, + 1, + 1.511, + -3.737, + 1.622, + 0.246, + 1.733, + 0.246, + 1, + 1.933, + 0.246, + 2.133, + 0, + 2.333, + 0, + 1, + 2.389, + 0, + 2.444, + 2.993, + 2.5, + 4, + 1, + 2.711, + 7.827, + 2.922, + 9, + 3.133, + 9, + 1, + 4.256, + 9, + 5.378, + 9, + 6.5, + 9, + 1, + 6.778, + 9, + 7.056, + -5, + 7.333, + -5, + 1, + 7.5, + -5, + 7.667, + 2, + 7.833, + 2, + 1, + 7.9, + 2, + 7.967, + 0, + 8.033, + 0, + 0, + 8.567, + 0 + ] + }, + { + "Target": "Parameter", + "Id": "ParamBodyAngleZ", + "Segments": [ + 0, + 0, + 1, + 0.2, + 0, + 0.4, + 2, + 0.6, + 2, + 1, + 0.867, + 2, + 1.133, + -10, + 1.4, + -10, + 1, + 1.533, + -10, + 1.667, + -10, + 1.8, + -10, + 1, + 2, + -10, + 2.211, + -10, + 2.4, + -6.566, + 1, + 2.6, + -2.936, + 2.8, + 10, + 3, + 10, + 1, + 3.433, + 10, + 3.867, + -4.436, + 4.3, + -4.436, + 1, + 4.578, + -4.436, + 4.856, + 10, + 5.133, + 10, + 1, + 5.433, + 10, + 5.733, + 0.695, + 6.033, + -4.261, + 1, + 6.211, + -7.197, + 6.389, + -6.792, + 6.567, + -6.792, + 1, + 6.644, + -6.792, + 6.722, + -6.224, + 6.8, + -4.11, + 1, + 6.989, + 1.023, + 7.178, + 4.236, + 7.367, + 4.236, + 1, + 7.689, + 4.236, + 8.011, + 0.025, + 8.333, + 0.025, + 0, + 8.567, + 0.025 + ] + }, + { + "Target": "Parameter", + "Id": "ParamBreath", + "Segments": [ + 0, + 0, + 1, + 0.122, + 0, + 0.244, + 1, + 0.367, + 1, + 1, + 0.511, + 1, + 0.656, + 0, + 0.8, + 0, + 1, + 1.022, + 0, + 1.244, + 1, + 1.467, + 1, + 1, + 1.689, + 1, + 1.911, + 0, + 2.133, + 0, + 1, + 2.344, + 0, + 2.556, + 1, + 2.767, + 1, + 1, + 2.967, + 1, + 3.167, + 0, + 3.367, + 0, + 1, + 3.578, + 0, + 3.789, + 1, + 4, + 1, + 1, + 4.233, + 1, + 4.467, + 0, + 4.7, + 0, + 1, + 4.9, + 0, + 5.1, + 0, + 5.3, + 0, + 1, + 5.522, + 0, + 5.744, + 1, + 5.967, + 1, + 1, + 6.244, + 1, + 6.522, + 0, + 6.8, + 0, + 1, + 7.022, + 0, + 7.244, + 1, + 7.467, + 1, + 1, + 7.689, + 1, + 7.911, + 0, + 8.133, + 0, + 0, + 8.567, + 0 + ] + }, + { + "Target": "Parameter", + "Id": "ParamShoulder", + "Segments": [ + 0, + 0, + 0, + 8.567, + 0 + ] + }, + { + "Target": "Parameter", + "Id": "ParamLeg", + "Segments": [ + 0, + 1, + 0, + 8.567, + 1 + ] + }, + { + "Target": "Parameter", + "Id": "ParamArmLA", + "Segments": [ + 0, + -10, + 1, + 0.2, + -10, + 0.4, + -10, + 0.6, + -10, + 1, + 0.833, + -10, + 1.067, + -7.083, + 1.3, + -7.083, + 1, + 1.433, + -7.083, + 1.567, + -7.083, + 1.7, + -7.083, + 1, + 1.911, + -7.083, + 2.122, + -10, + 2.333, + -10, + 1, + 3.467, + -10, + 4.6, + -10, + 5.733, + -10, + 1, + 5.8, + -10, + 5.867, + -10, + 5.933, + -10, + 1, + 6.4, + -10, + 6.867, + -10, + 7.333, + -10, + 0, + 8.567, + -10 + ] + }, + { + "Target": "Parameter", + "Id": "ParamArmRA", + "Segments": [ + 0, + -10, + 1, + 0.2, + -10, + 0.4, + -10, + 0.6, + -10, + 1, + 0.833, + -10, + 1.067, + 2.917, + 1.3, + 2.917, + 1, + 1.478, + 2.917, + 1.656, + 3.029, + 1.833, + 2.6, + 1, + 2.033, + 2.117, + 2.233, + -10, + 2.433, + -10, + 1, + 3.533, + -10, + 4.633, + -10, + 5.733, + -10, + 1, + 5.8, + -10, + 5.867, + -10, + 5.933, + -10, + 1, + 6.133, + -10, + 6.333, + -10, + 6.533, + -10, + 1, + 6.8, + -10, + 7.067, + -10, + 7.333, + -10, + 0, + 8.567, + -10 + ] + }, + { + "Target": "Parameter", + "Id": "ParamArmRB", + "Segments": [ + 0, + 0.02, + 0, + 8.567, + 0.02 + ] + }, + { + "Target": "Parameter", + "Id": "ParamHairAhoge", + "Segments": [ + 0, + 0, + 1, + 0.178, + 0, + 0.356, + -10, + 0.533, + -10, + 1, + 0.833, + -10, + 1.133, + 10, + 1.433, + 10, + 1, + 1.567, + 10, + 1.7, + 0, + 1.833, + 0, + 1, + 2.311, + 0, + 2.789, + 10, + 3.267, + 10, + 1, + 3.344, + 10, + 3.422, + 10, + 3.5, + 10, + 1, + 3.633, + 10, + 3.767, + -10, + 3.9, + -10, + 1, + 4.267, + -10, + 4.633, + 7.69, + 5, + 9.705, + 1, + 5.054, + 10, + 5.244, + 10, + 5.367, + 10, + 1, + 5.756, + 10, + 6.144, + -9.975, + 6.533, + -9.975, + 1, + 6.622, + -9.975, + 6.754, + -10, + 6.8, + -9.779, + 1, + 7.033, + -8.654, + 7.267, + 10, + 7.5, + 10, + 1, + 7.7, + 10, + 7.9, + -6.753, + 8.1, + -6.753, + 1, + 8.2, + -6.753, + 8.3, + 0, + 8.4, + 0, + 0, + 8.567, + 0 + ] + }, + { + "Target": "PartOpacity", + "Id": "PartArmA", + "Segments": [ + 0, + 1, + 0, + 8.57, + 1 + ] + }, + { + "Target": "PartOpacity", + "Id": "PartArmB", + "Segments": [ + 0, + 0, + 0, + 8.57, + 0 + ] + } + ] +} \ No newline at end of file diff --git a/main/xiaozhi-server/test/hiyori_pro_zh/runtime/motion/hiyori_m06.motion3.json b/main/xiaozhi-server/test/hiyori_pro_zh/runtime/motion/hiyori_m06.motion3.json new file mode 100644 index 00000000..73302c38 --- /dev/null +++ b/main/xiaozhi-server/test/hiyori_pro_zh/runtime/motion/hiyori_m06.motion3.json @@ -0,0 +1,1947 @@ +{ + "Version": 3, + "Meta": { + "Duration": 5.37, + "Fps": 30.0, + "Loop": true, + "AreBeziersRestricted": false, + "CurveCount": 33, + "TotalSegmentCount": 262, + "TotalPointCount": 751, + "UserDataCount": 0, + "TotalUserDataSize": 0 + }, + "Curves": [ + { + "Target": "Parameter", + "Id": "ParamAngleX", + "Segments": [ + 0, + 0, + 1, + 0.111, + 0, + 0.222, + 1, + 0.333, + 1, + 1, + 0.7, + 1, + 1.067, + 0, + 1.433, + 0, + 1, + 1.711, + 0, + 1.989, + 10, + 2.267, + 10, + 1, + 2.522, + 10, + 2.778, + -7, + 3.033, + -7, + 1, + 3.233, + -7, + 3.433, + 13, + 3.633, + 13, + 1, + 3.811, + 13, + 3.989, + 7.017, + 4.167, + 2, + 1, + 4.244, + -0.195, + 4.322, + 0, + 4.4, + 0, + 0, + 5.367, + 0 + ] + }, + { + "Target": "Parameter", + "Id": "ParamAngleY", + "Segments": [ + 0, + 0, + 1, + 0.111, + 0, + 0.222, + 18, + 0.333, + 18, + 1, + 0.522, + 18, + 0.711, + -9.95, + 0.9, + -9.95, + 1, + 0.956, + -9.95, + 1.011, + -1.664, + 1.067, + -1.589, + 1, + 1.911, + -0.462, + 2.756, + 0, + 3.6, + 0, + 1, + 3.789, + 0, + 3.978, + -18, + 4.167, + -18, + 1, + 4.244, + -18, + 4.322, + -10, + 4.4, + -10, + 0, + 5.367, + -10 + ] + }, + { + "Target": "Parameter", + "Id": "ParamAngleZ", + "Segments": [ + 0, + 0, + 1, + 0.111, + 0, + 0.222, + 0, + 0.333, + 0, + 1, + 0.489, + 0, + 0.644, + 25, + 0.8, + 25, + 1, + 0.878, + 25, + 0.956, + 25, + 1.033, + 25, + 1, + 1.233, + 25, + 1.433, + 25, + 1.633, + 25, + 1, + 1.867, + 25, + 2.1, + -5, + 2.333, + -5, + 1, + 2.533, + -5, + 2.733, + 23, + 2.933, + 23, + 1, + 3.189, + 23, + 3.444, + -3, + 3.7, + -3, + 0, + 5.367, + -3 + ] + }, + { + "Target": "Parameter", + "Id": "ParamCheek", + "Segments": [ + 0, + 0, + 1, + 0.122, + 0, + 0.244, + 0, + 0.367, + 0, + 0, + 5.367, + 0 + ] + }, + { + "Target": "Parameter", + "Id": "ParamEyeLOpen", + "Segments": [ + 0, + 1, + 1, + 0.178, + 1, + 0.356, + 1, + 0.533, + 1, + 1, + 0.567, + 1, + 0.6, + 0, + 0.633, + 0, + 1, + 0.644, + 0, + 0.656, + 0, + 0.667, + 0, + 1, + 0.7, + 0, + 0.733, + 1, + 0.767, + 1, + 1, + 1.056, + 1, + 1.344, + 1, + 1.633, + 1, + 1, + 1.667, + 1, + 1.7, + 0, + 1.733, + 0, + 1, + 1.744, + 0, + 1.756, + 0, + 1.767, + 0, + 1, + 1.8, + 0, + 1.833, + 1, + 1.867, + 1, + 1, + 2.433, + 1, + 3, + 1, + 3.567, + 1, + 1, + 3.6, + 1, + 3.633, + 0, + 3.667, + 0, + 1, + 3.678, + 0, + 3.689, + 0, + 3.7, + 0, + 1, + 3.733, + 0, + 3.767, + 1, + 3.8, + 1, + 1, + 3.944, + 1, + 4.089, + 1, + 4.233, + 1, + 1, + 4.256, + 1, + 4.278, + 0, + 4.3, + 0, + 0, + 5.367, + 0 + ] + }, + { + "Target": "Parameter", + "Id": "ParamEyeLSmile", + "Segments": [ + 0, + 0, + 1, + 1.378, + 0, + 2.756, + 0, + 4.133, + 0, + 1, + 4.167, + 0, + 4.2, + 0.833, + 4.233, + 0.833, + 0, + 5.367, + 0.833 + ] + }, + { + "Target": "Parameter", + "Id": "ParamEyeROpen", + "Segments": [ + 0, + 1, + 1, + 0.178, + 1, + 0.356, + 1, + 0.533, + 1, + 1, + 0.567, + 1, + 0.6, + 0, + 0.633, + 0, + 1, + 0.644, + 0, + 0.656, + 0, + 0.667, + 0, + 1, + 0.7, + 0, + 0.733, + 1, + 0.767, + 1, + 1, + 1.056, + 1, + 1.344, + 1, + 1.633, + 1, + 1, + 1.667, + 1, + 1.7, + 0, + 1.733, + 0, + 1, + 1.744, + 0, + 1.756, + 0, + 1.767, + 0, + 1, + 1.8, + 0, + 1.833, + 1, + 1.867, + 1, + 1, + 2.433, + 1, + 3, + 1, + 3.567, + 1, + 1, + 3.6, + 1, + 3.633, + 0, + 3.667, + 0, + 1, + 3.678, + 0, + 3.689, + 0, + 3.7, + 0, + 1, + 3.733, + 0, + 3.767, + 0.998, + 3.8, + 1, + 1, + 3.944, + 1.01, + 4.089, + 1.012, + 4.233, + 1.012, + 1, + 4.256, + 1.012, + 4.278, + 0, + 4.3, + 0, + 0, + 5.367, + 0 + ] + }, + { + "Target": "Parameter", + "Id": "ParamEyeRSmile", + "Segments": [ + 0, + 0, + 1, + 1.378, + 0, + 2.756, + 0, + 4.133, + 0, + 1, + 4.167, + 0, + 4.2, + 0.823, + 4.233, + 0.823, + 0, + 5.367, + 0.823 + ] + }, + { + "Target": "Parameter", + "Id": "ParamEyeBallX", + "Segments": [ + 0, + 0, + 1, + 0.122, + 0, + 0.244, + -0.067, + 0.367, + -0.14, + 1, + 0.5, + -0.22, + 0.633, + -0.24, + 0.767, + -0.24, + 1, + 0.856, + -0.24, + 0.944, + -0.24, + 1.033, + -0.24, + 1, + 1.311, + -0.24, + 1.589, + -0.24, + 1.867, + -0.25, + 1, + 2.022, + -0.256, + 2.178, + -0.51, + 2.333, + -0.51, + 1, + 2.578, + -0.51, + 2.822, + 0.22, + 3.067, + 0.22, + 1, + 3.267, + 0.22, + 3.467, + -0.57, + 3.667, + -0.57, + 1, + 3.911, + -0.57, + 4.156, + -0.28, + 4.4, + -0.28, + 0, + 5.367, + -0.28 + ] + }, + { + "Target": "Parameter", + "Id": "ParamEyeBallY", + "Segments": [ + 0, + 0, + 1, + 0.122, + 0, + 0.244, + -0.38, + 0.367, + -0.38, + 1, + 0.5, + -0.38, + 0.633, + 0.21, + 0.767, + 0.21, + 1, + 0.856, + 0.21, + 0.944, + 0.21, + 1.033, + 0.21, + 1, + 1.311, + 0.21, + 1.589, + 0.29, + 1.867, + 0.29, + 1, + 2.022, + 0.29, + 2.178, + 0.21, + 2.333, + 0.21, + 1, + 2.578, + 0.21, + 2.822, + 0.29, + 3.067, + 0.29, + 1, + 3.267, + 0.29, + 3.467, + 0.08, + 3.667, + 0.08, + 1, + 3.911, + 0.08, + 4.156, + 0.13, + 4.4, + 0.13, + 0, + 5.367, + 0.13 + ] + }, + { + "Target": "Parameter", + "Id": "ParamBrowLY", + "Segments": [ + 0, + 0, + 1, + 0.078, + 0, + 0.156, + -0.008, + 0.233, + 0.021, + 1, + 0.322, + 0.053, + 0.411, + 0.625, + 0.5, + 0.625, + 1, + 0.567, + 0.625, + 0.633, + 0, + 0.7, + 0, + 1, + 1.144, + 0, + 1.589, + 0, + 2.033, + 0, + 1, + 2.089, + 0, + 2.144, + 0.229, + 2.2, + 0.229, + 1, + 2.278, + 0.229, + 2.356, + 0, + 2.433, + 0, + 1, + 2.544, + 0, + 2.656, + 0, + 2.767, + 0, + 1, + 2.822, + 0, + 2.878, + 0.229, + 2.933, + 0.229, + 1, + 3.011, + 0.229, + 3.089, + 0, + 3.167, + 0, + 1, + 3.456, + 0, + 3.744, + 0, + 4.033, + 0, + 1, + 4.133, + 0, + 4.233, + 0.479, + 4.333, + 0.479, + 0, + 5.367, + 0.479 + ] + }, + { + "Target": "Parameter", + "Id": "ParamBrowRY", + "Segments": [ + 0, + 0, + 1, + 0.078, + 0, + 0.156, + 0, + 0.233, + 0, + 1, + 0.322, + 0, + 0.411, + 0.625, + 0.5, + 0.625, + 1, + 0.567, + 0.625, + 0.633, + 0, + 0.7, + 0, + 1, + 1.144, + 0, + 1.589, + 0.005, + 2.033, + 0.021, + 1, + 2.089, + 0.023, + 2.144, + 0.188, + 2.2, + 0.188, + 1, + 2.278, + 0.188, + 2.356, + 0, + 2.433, + 0, + 1, + 2.544, + 0, + 2.656, + 0.001, + 2.767, + 0.021, + 1, + 2.822, + 0.031, + 2.878, + 0.229, + 2.933, + 0.229, + 1, + 3.011, + 0.229, + 3.089, + 0, + 3.167, + 0, + 1, + 3.456, + 0, + 3.744, + 0, + 4.033, + 0, + 1, + 4.133, + 0, + 4.233, + 0.479, + 4.333, + 0.479, + 0, + 5.367, + 0.479 + ] + }, + { + "Target": "Parameter", + "Id": "ParamBrowLX", + "Segments": [ + 0, + 0, + 1, + 0.167, + 0, + 0.333, + 0, + 0.5, + 0, + 1, + 1.678, + 0, + 2.856, + 0, + 4.033, + 0, + 1, + 4.133, + 0, + 4.233, + -0.479, + 4.333, + -0.479, + 0, + 5.367, + -0.479 + ] + }, + { + "Target": "Parameter", + "Id": "ParamBrowRX", + "Segments": [ + 0, + 0, + 1, + 0.122, + 0, + 0.244, + 0, + 0.367, + 0, + 1, + 1.589, + 0, + 2.811, + 0, + 4.033, + 0, + 1, + 4.133, + 0, + 4.233, + -0.69, + 4.333, + -0.69, + 0, + 5.367, + -0.69 + ] + }, + { + "Target": "Parameter", + "Id": "ParamBrowLAngle", + "Segments": [ + 0, + 0, + 1, + 0.167, + 0, + 0.333, + 0, + 0.5, + 0, + 1, + 1.678, + 0, + 2.856, + 0, + 4.033, + 0, + 1, + 4.133, + 0, + 4.233, + 0, + 4.333, + 0, + 0, + 5.367, + 0 + ] + }, + { + "Target": "Parameter", + "Id": "ParamBrowRAngle", + "Segments": [ + 0, + 0, + 1, + 0.122, + 0, + 0.244, + 0, + 0.367, + 0, + 1, + 1.589, + 0, + 2.811, + 0, + 4.033, + 0, + 1, + 4.133, + 0, + 4.233, + 0, + 4.333, + 0, + 0, + 5.367, + 0 + ] + }, + { + "Target": "Parameter", + "Id": "ParamBrowLForm", + "Segments": [ + 0, + 0, + 1, + 0.122, + 0, + 0.244, + 0, + 0.367, + 0, + 1, + 1.589, + 0, + 2.811, + 0, + 4.033, + 0, + 1, + 4.133, + 0, + 4.233, + 0, + 4.333, + 0, + 0, + 5.367, + 0 + ] + }, + { + "Target": "Parameter", + "Id": "ParamBrowRForm", + "Segments": [ + 0, + 0, + 1, + 0.122, + 0, + 0.244, + 0, + 0.367, + 0, + 1, + 1.589, + 0, + 2.811, + 0, + 4.033, + 0, + 1, + 4.133, + 0, + 4.233, + 0, + 4.333, + 0, + 0, + 5.367, + 0 + ] + }, + { + "Target": "Parameter", + "Id": "ParamBodyAngleX", + "Segments": [ + 0, + -10, + 1, + 0.078, + -10, + 0.156, + 0, + 0.233, + 0, + 1, + 0.311, + 0, + 0.389, + -1.353, + 0.467, + -1.353, + 1, + 0.6, + -1.353, + 0.733, + 10, + 0.867, + 10, + 1, + 0.956, + 10, + 1.044, + 9.8, + 1.133, + 9.8, + 1, + 1.233, + 9.8, + 1.333, + 10, + 1.433, + 10, + 1, + 1.667, + 10, + 1.9, + -2.975, + 2.133, + -2.975, + 1, + 2.211, + -2.975, + 2.289, + -2.975, + 2.367, + -2.975, + 1, + 2.522, + -2.975, + 2.678, + 9.025, + 2.833, + 9.025, + 1, + 2.978, + 9.025, + 3.122, + 9.025, + 3.267, + 9.025, + 1, + 3.489, + 9.025, + 3.711, + 2.025, + 3.933, + 2.025, + 0, + 5.367, + 2.025 + ] + }, + { + "Target": "Parameter", + "Id": "ParamBodyAngleY", + "Segments": [ + 0, + 10, + 1, + 0.122, + 10, + 0.244, + 9.141, + 0.367, + 5.421, + 1, + 0.533, + 0.348, + 0.7, + -3.737, + 0.867, + -3.737, + 1, + 0.978, + -3.737, + 1.089, + 2.181, + 1.2, + 2.181, + 1, + 1.3, + 2.181, + 1.4, + 1.948, + 1.5, + 0.298, + 1, + 1.6, + -1.351, + 1.7, + -3.396, + 1.8, + -3.396, + 1, + 1.944, + -3.396, + 2.089, + 4.673, + 2.233, + 4.673, + 1, + 2.378, + 4.673, + 2.522, + -3.858, + 2.667, + -3.858, + 1, + 2.767, + -3.858, + 2.867, + 4.794, + 2.967, + 4.794, + 1, + 3.089, + 4.794, + 3.211, + -3.573, + 3.333, + -3.573, + 1, + 3.533, + -3.573, + 3.733, + 5.269, + 3.933, + 5.269, + 1, + 4.044, + 5.269, + 4.156, + -5.393, + 4.267, + -5.393, + 1, + 4.356, + -5.393, + 4.444, + 0.095, + 4.533, + 0.095, + 0, + 5.367, + 0.095 + ] + }, + { + "Target": "Parameter", + "Id": "ParamBodyAngleZ", + "Segments": [ + 0, + 0, + 1, + 0.122, + 0, + 0.244, + 2, + 0.367, + 2, + 1, + 0.533, + 2, + 0.7, + -10, + 0.867, + -10, + 1, + 1.078, + -10, + 1.359, + -10, + 1.5, + -9.975, + 1, + 1.767, + -9.927, + 2.033, + 2.026, + 2.3, + 2.026, + 1, + 2.522, + 2.026, + 2.744, + -9.975, + 2.967, + -9.975, + 1, + 3.322, + -9.975, + 3.678, + -6.592, + 4.033, + 1.8, + 1, + 4.178, + 5.21, + 4.322, + 8, + 4.467, + 8, + 0, + 5.367, + 8 + ] + }, + { + "Target": "Parameter", + "Id": "ParamBreath", + "Segments": [ + 0, + 0, + 1, + 0.122, + 0, + 0.244, + 1, + 0.367, + 1, + 1, + 0.511, + 1, + 0.656, + 0, + 0.8, + 0, + 1, + 1.022, + 0, + 1.244, + 1, + 1.467, + 1, + 1, + 1.689, + 1, + 1.911, + 0, + 2.133, + 0, + 1, + 2.344, + 0, + 2.556, + 1, + 2.767, + 1, + 1, + 2.967, + 1, + 3.167, + 0, + 3.367, + 0, + 1, + 3.578, + 0, + 3.789, + 1, + 4, + 1, + 1, + 4.233, + 1, + 4.467, + 0, + 4.7, + 0, + 0, + 5.367, + 0 + ] + }, + { + "Target": "Parameter", + "Id": "ParamShoulder", + "Segments": [ + 0, + 0, + 1, + 0.144, + 0, + 0.289, + 1, + 0.433, + 1, + 1, + 0.6, + 1, + 0.767, + 0.049, + 0.933, + -0.1, + 1, + 1.167, + -0.309, + 1.4, + -0.3, + 1.633, + -0.3, + 1, + 1.844, + -0.3, + 2.056, + 0.9, + 2.267, + 0.9, + 1, + 2.411, + 0.9, + 2.556, + -0.22, + 2.7, + -0.22, + 1, + 2.844, + -0.22, + 2.989, + 0.6, + 3.133, + 0.6, + 1, + 3.289, + 0.6, + 3.444, + -0.4, + 3.6, + -0.4, + 1, + 3.7, + -0.4, + 3.8, + 0.5, + 3.9, + 0.5, + 1, + 4.044, + 0.5, + 4.189, + 0.238, + 4.333, + 0, + 1, + 4.444, + -0.183, + 4.556, + -0.2, + 4.667, + -0.2, + 0, + 5.367, + -0.2 + ] + }, + { + "Target": "Parameter", + "Id": "ParamLeg", + "Segments": [ + 0, + 1, + 1, + 1.344, + 1, + 2.689, + 1, + 4.033, + 1, + 1, + 4.144, + 1, + 4.256, + 0, + 4.367, + 0, + 1, + 4.578, + 0, + 4.789, + 0.052, + 5, + 0.052, + 0, + 5.367, + 0.052 + ] + }, + { + "Target": "Parameter", + "Id": "ParamArmLB", + "Segments": [ + 0, + 0, + 1, + 0.1, + 0, + 0.2, + 1.3, + 0.3, + 1.3, + 1, + 0.544, + 1.3, + 0.789, + 0, + 1.033, + 0, + 1, + 1.222, + 0, + 1.411, + 0, + 1.6, + 0, + 1, + 1.811, + 0, + 2.022, + -10, + 2.233, + -10, + 1, + 2.811, + -10, + 3.389, + -10, + 3.967, + -10, + 1, + 4.133, + -10, + 4.3, + -6.458, + 4.467, + -6.458, + 0, + 5.367, + -6.458 + ] + }, + { + "Target": "Parameter", + "Id": "ParamArmRB", + "Segments": [ + 0, + 0, + 1, + 0.1, + 0, + 0.2, + 1.9, + 0.3, + 1.9, + 1, + 0.544, + 1.9, + 0.789, + 0, + 1.033, + 0, + 1, + 1.222, + 0, + 1.411, + 0, + 1.6, + 0, + 1, + 1.811, + 0, + 2.022, + -10, + 2.233, + -10, + 1, + 2.7, + -10, + 3.167, + -10, + 3.633, + -10, + 1, + 3.744, + -10, + 3.856, + -10, + 3.967, + -10, + 1, + 4.133, + -10, + 4.3, + -5.833, + 4.467, + -5.833, + 0, + 5.367, + -5.833 + ] + }, + { + "Target": "Parameter", + "Id": "ParamHandLB", + "Segments": [ + 0, + 0, + 1, + 0.156, + 0, + 0.311, + 0, + 0.467, + 0, + 1, + 0.656, + 0, + 0.844, + 6.25, + 1.033, + 6.25, + 1, + 1.222, + 6.25, + 1.411, + 6.365, + 1.6, + 5.833, + 1, + 1.811, + 5.239, + 2.022, + -4.07, + 2.233, + -4.583, + 1, + 2.367, + -4.907, + 2.5, + -4.792, + 2.633, + -4.792, + 1, + 2.778, + -4.792, + 2.922, + -3.75, + 3.067, + -3.75, + 1, + 3.256, + -3.75, + 3.444, + -6.25, + 3.633, + -6.25, + 1, + 3.756, + -6.25, + 3.878, + -6.419, + 4, + -5.833, + 1, + 4.156, + -5.087, + 4.311, + 9.4, + 4.467, + 9.4, + 1, + 4.533, + 9.4, + 4.6, + 7.1, + 4.667, + 7.1, + 0, + 5.367, + 7.1 + ] + }, + { + "Target": "Parameter", + "Id": "ParamHandRB", + "Segments": [ + 0, + 0, + 1, + 0.156, + 0, + 0.311, + 0, + 0.467, + 0, + 1, + 0.656, + 0, + 0.844, + 8.064, + 1.033, + 8.333, + 1, + 1.222, + 8.603, + 1.411, + 8.542, + 1.6, + 8.542, + 1, + 1.811, + 8.542, + 2.022, + -5.8, + 2.233, + -7.292, + 1, + 2.367, + -8.234, + 2.5, + -7.917, + 2.633, + -7.917, + 1, + 2.778, + -7.917, + 2.922, + -7.917, + 3.067, + -7.917, + 1, + 3.256, + -7.917, + 3.444, + -8.084, + 3.633, + -8.333, + 1, + 3.756, + -8.494, + 3.878, + -8.542, + 4, + -8.542, + 1, + 4.156, + -8.542, + 4.311, + 10, + 4.467, + 10, + 1, + 4.533, + 10, + 4.6, + 6.8, + 4.667, + 6.8, + 0, + 5.367, + 6.8 + ] + }, + { + "Target": "Parameter", + "Id": "ParamHandL", + "Segments": [ + 0, + 0, + 1, + 0.144, + 0, + 0.289, + 0.958, + 0.433, + 0.958, + 1, + 0.611, + 0.958, + 0.789, + -1, + 0.967, + -1, + 1, + 1.222, + -1, + 1.478, + 0.4, + 1.733, + 0.4, + 1, + 1.922, + 0.4, + 2.111, + -1, + 2.3, + -1, + 1, + 2.544, + -1, + 2.789, + 1, + 3.033, + 1, + 1, + 3.344, + 1, + 3.656, + -1, + 3.967, + -1, + 1, + 4.222, + -1, + 4.478, + 0.4, + 4.733, + 0.4, + 0, + 5.367, + 0.4 + ] + }, + { + "Target": "Parameter", + "Id": "ParamHandR", + "Segments": [ + 0, + 0, + 1, + 0.144, + 0, + 0.289, + 1, + 0.433, + 1, + 1, + 0.611, + 1, + 0.789, + -1, + 0.967, + -1, + 1, + 1.222, + -1, + 1.478, + 0.4, + 1.733, + 0.4, + 1, + 1.922, + 0.4, + 2.111, + -1, + 2.3, + -1, + 1, + 2.544, + -1, + 2.789, + 1, + 3.033, + 1, + 1, + 3.344, + 1, + 3.656, + -1, + 3.967, + -1, + 1, + 4.222, + -1, + 4.478, + 0.3, + 4.733, + 0.3, + 0, + 5.367, + 0.3 + ] + }, + { + "Target": "Parameter", + "Id": "ParamHairAhoge", + "Segments": [ + 0, + 0, + 1, + 0.022, + 0, + 0.044, + 0, + 0.067, + 0, + 1, + 0.144, + 0, + 0.222, + -10, + 0.3, + -10, + 1, + 0.456, + -10, + 0.611, + 8.967, + 0.767, + 8.967, + 1, + 0.889, + 8.967, + 1.011, + -5.867, + 1.133, + -5.867, + 1, + 1.244, + -5.867, + 1.356, + -3.178, + 1.467, + -0.111, + 1, + 1.522, + 1.423, + 1.578, + 1.562, + 1.633, + 1.562, + 1, + 1.733, + 1.562, + 1.833, + -4.563, + 1.933, + -4.563, + 1, + 2.078, + -4.563, + 2.222, + 10, + 2.367, + 10, + 1, + 2.411, + 10, + 2.477, + 10, + 2.5, + 9.828, + 1, + 2.6, + 9.082, + 2.7, + -8.352, + 2.8, + -8.352, + 1, + 2.867, + -8.352, + 2.933, + -8.632, + 3, + -7.761, + 1, + 3.111, + -6.31, + 3.222, + 6.63, + 3.333, + 6.63, + 1, + 3.389, + 6.63, + 3.444, + -4.883, + 3.5, + -4.883, + 1, + 3.544, + -4.883, + 3.589, + -5.066, + 3.633, + -4.785, + 1, + 3.811, + -3.661, + 3.989, + 9.803, + 4.167, + 9.803, + 1, + 4.256, + 9.803, + 4.344, + -9.656, + 4.433, + -9.656, + 1, + 4.567, + -9.656, + 4.7, + 5.375, + 4.833, + 5.375, + 1, + 4.967, + 5.375, + 5.1, + 0, + 5.233, + 0, + 0, + 5.367, + 0 + ] + }, + { + "Target": "PartOpacity", + "Id": "PartArmA", + "Segments": [ + 0, + 0, + 0, + 5.37, + 0 + ] + }, + { + "Target": "PartOpacity", + "Id": "PartArmB", + "Segments": [ + 0, + 1, + 0, + 5.37, + 1 + ] + } + ] +} \ No newline at end of file diff --git a/main/xiaozhi-server/test/hiyori_pro_zh/runtime/motion/hiyori_m07.motion3.json b/main/xiaozhi-server/test/hiyori_pro_zh/runtime/motion/hiyori_m07.motion3.json new file mode 100644 index 00000000..488b078b --- /dev/null +++ b/main/xiaozhi-server/test/hiyori_pro_zh/runtime/motion/hiyori_m07.motion3.json @@ -0,0 +1,927 @@ +{ + "Version": 3, + "Meta": { + "Duration": 1.9, + "Fps": 30.0, + "Loop": true, + "AreBeziersRestricted": false, + "CurveCount": 30, + "TotalSegmentCount": 121, + "TotalPointCount": 331, + "UserDataCount": 0, + "TotalUserDataSize": 0 + }, + "Curves": [ + { + "Target": "Parameter", + "Id": "ParamAngleX", + "Segments": [ + 0, + 0, + 1, + 0.111, + 0, + 0.222, + 0, + 0.333, + 0, + 0, + 1.9, + 0 + ] + }, + { + "Target": "Parameter", + "Id": "ParamAngleY", + "Segments": [ + 0, + 0, + 1, + 0.111, + 0, + 0.222, + 0, + 0.333, + 0, + 0, + 1.9, + 0 + ] + }, + { + "Target": "Parameter", + "Id": "ParamAngleZ", + "Segments": [ + 0, + 0, + 1, + 0.111, + 0, + 0.222, + 0, + 0.333, + 0, + 1, + 0.444, + 0, + 0.556, + 8, + 0.667, + 8, + 0, + 1.9, + 8 + ] + }, + { + "Target": "Parameter", + "Id": "ParamCheek", + "Segments": [ + 0, + 0, + 1, + 0.111, + 0, + 0.222, + 0, + 0.333, + 0, + 0, + 1.9, + 0 + ] + }, + { + "Target": "Parameter", + "Id": "ParamEyeLOpen", + "Segments": [ + 0, + 1, + 1, + 0.111, + 1, + 0.222, + 1, + 0.333, + 1, + 1, + 0.378, + 1, + 0.422, + 0, + 0.467, + 0, + 1, + 0.522, + 0, + 0.578, + 1.2, + 0.633, + 1.2, + 1, + 0.744, + 1.2, + 0.856, + 1.2, + 0.967, + 1.2, + 1, + 0.989, + 1.2, + 1.011, + 0, + 1.033, + 0, + 1, + 1.067, + 0, + 1.1, + 1.2, + 1.133, + 1.2, + 1, + 1.167, + 1.2, + 1.2, + 1.2, + 1.233, + 1.2, + 1, + 1.267, + 1.2, + 1.3, + 0, + 1.333, + 0, + 1, + 1.356, + 0, + 1.378, + 1.2, + 1.4, + 1.2, + 0, + 1.9, + 1.2 + ] + }, + { + "Target": "Parameter", + "Id": "ParamEyeLSmile", + "Segments": [ + 0, + 0, + 1, + 0.111, + 0, + 0.222, + 0, + 0.333, + 0, + 0, + 1.9, + 0 + ] + }, + { + "Target": "Parameter", + "Id": "ParamEyeROpen", + "Segments": [ + 0, + 1, + 1, + 0.111, + 1, + 0.222, + 1, + 0.333, + 1, + 1, + 0.378, + 1, + 0.422, + 0, + 0.467, + 0, + 1, + 0.522, + 0, + 0.578, + 1.2, + 0.633, + 1.2, + 1, + 0.744, + 1.2, + 0.856, + 1.2, + 0.967, + 1.2, + 1, + 0.989, + 1.2, + 1.011, + 0, + 1.033, + 0, + 1, + 1.067, + 0, + 1.1, + 1.2, + 1.133, + 1.2, + 1, + 1.167, + 1.2, + 1.2, + 1.2, + 1.233, + 1.2, + 1, + 1.267, + 1.2, + 1.3, + 0, + 1.333, + 0, + 1, + 1.356, + 0, + 1.378, + 1.2, + 1.4, + 1.2, + 0, + 1.9, + 1.2 + ] + }, + { + "Target": "Parameter", + "Id": "ParamEyeRSmile", + "Segments": [ + 0, + 0, + 1, + 0.111, + 0, + 0.222, + 0, + 0.333, + 0, + 1, + 0.356, + 0, + 0.378, + 0, + 0.4, + 0, + 1, + 0.489, + 0, + 0.578, + 0, + 0.667, + 0, + 0, + 1.9, + 0 + ] + }, + { + "Target": "Parameter", + "Id": "ParamEyeBallX", + "Segments": [ + 0, + 0, + 1, + 0.111, + 0, + 0.222, + 0, + 0.333, + 0, + 1, + 0.356, + 0, + 0.378, + 0, + 0.4, + 0, + 1, + 0.489, + 0, + 0.578, + 0, + 0.667, + 0, + 0, + 1.9, + 0 + ] + }, + { + "Target": "Parameter", + "Id": "ParamEyeBallY", + "Segments": [ + 0, + 0, + 1, + 0.111, + 0, + 0.222, + 0, + 0.333, + 0, + 1, + 0.356, + 0, + 0.378, + 0, + 0.4, + 0, + 1, + 0.489, + 0, + 0.578, + 0, + 0.667, + 0, + 0, + 1.9, + 0 + ] + }, + { + "Target": "Parameter", + "Id": "ParamBrowLY", + "Segments": [ + 0, + 0, + 1, + 0.111, + 0, + 0.222, + 0, + 0.333, + 0, + 1, + 0.356, + 0, + 0.378, + 0, + 0.4, + 0, + 1, + 0.489, + 0, + 0.578, + 0.26, + 0.667, + 0.26, + 0, + 1.9, + 0.26 + ] + }, + { + "Target": "Parameter", + "Id": "ParamBrowRY", + "Segments": [ + 0, + 0, + 1, + 0.111, + 0, + 0.222, + 0, + 0.333, + 0, + 1, + 0.356, + 0, + 0.378, + 0, + 0.4, + 0, + 1, + 0.489, + 0, + 0.578, + 0.36, + 0.667, + 0.36, + 0, + 1.9, + 0.36 + ] + }, + { + "Target": "Parameter", + "Id": "ParamBrowLX", + "Segments": [ + 0, + 0, + 1, + 0.111, + 0, + 0.222, + 0, + 0.333, + 0, + 1, + 0.356, + 0, + 0.378, + 0, + 0.4, + 0, + 1, + 0.489, + 0, + 0.578, + 0, + 0.667, + 0, + 0, + 1.9, + 0 + ] + }, + { + "Target": "Parameter", + "Id": "ParamBrowRX", + "Segments": [ + 0, + 0, + 1, + 0.111, + 0, + 0.222, + 0, + 0.333, + 0, + 1, + 0.356, + 0, + 0.378, + 0, + 0.4, + 0, + 1, + 0.489, + 0, + 0.578, + -0.27, + 0.667, + -0.27, + 0, + 1.9, + -0.27 + ] + }, + { + "Target": "Parameter", + "Id": "ParamBrowLAngle", + "Segments": [ + 0, + 0, + 1, + 0.111, + 0, + 0.222, + 0, + 0.333, + 0, + 1, + 0.356, + 0, + 0.378, + 0, + 0.4, + 0, + 1, + 0.489, + 0, + 0.578, + 0.26, + 0.667, + 0.26, + 0, + 1.9, + 0.26 + ] + }, + { + "Target": "Parameter", + "Id": "ParamBrowRAngle", + "Segments": [ + 0, + 0, + 1, + 0.111, + 0, + 0.222, + 0, + 0.333, + 0, + 1, + 0.356, + 0, + 0.378, + 0, + 0.4, + 0, + 1, + 0.489, + 0, + 0.578, + -0.03, + 0.667, + -0.03, + 0, + 1.9, + -0.03 + ] + }, + { + "Target": "Parameter", + "Id": "ParamBrowLForm", + "Segments": [ + 0, + 0, + 1, + 0.111, + 0, + 0.222, + 0, + 0.333, + 0, + 1, + 0.356, + 0, + 0.378, + 0, + 0.4, + 0, + 1, + 0.489, + 0, + 0.578, + 0.33, + 0.667, + 0.33, + 0, + 1.9, + 0.33 + ] + }, + { + "Target": "Parameter", + "Id": "ParamBrowRForm", + "Segments": [ + 0, + 0, + 1, + 0.111, + 0, + 0.222, + 0, + 0.333, + 0, + 1, + 0.356, + 0, + 0.378, + 0, + 0.4, + 0, + 1, + 0.489, + 0, + 0.578, + 0.21, + 0.667, + 0.21, + 0, + 1.9, + 0.21 + ] + }, + { + "Target": "Parameter", + "Id": "ParamBodyAngleX", + "Segments": [ + 0, + 0, + 1, + 0.111, + 0, + 0.222, + 0, + 0.333, + 0, + 1, + 0.444, + 0, + 0.556, + -6, + 0.667, + -6, + 0, + 1.9, + -6 + ] + }, + { + "Target": "Parameter", + "Id": "ParamBodyAngleY", + "Segments": [ + 0, + 0, + 1, + 0.111, + 0, + 0.222, + 0, + 0.333, + 0, + 1, + 0.422, + 0, + 0.511, + 10, + 0.6, + 10, + 1, + 0.667, + 10, + 0.733, + -6, + 0.8, + -6, + 1, + 0.833, + -6, + 0.867, + 5, + 0.9, + 5, + 1, + 1.011, + 5, + 1.122, + 0, + 1.233, + 0, + 0, + 1.9, + 0 + ] + }, + { + "Target": "Parameter", + "Id": "ParamBodyAngleZ", + "Segments": [ + 0, + 0, + 1, + 0.111, + 0, + 0.222, + 0, + 0.333, + 0, + 1, + 0.444, + 0, + 0.556, + -3, + 0.667, + -3, + 0, + 1.9, + -3 + ] + }, + { + "Target": "Parameter", + "Id": "ParamBreath", + "Segments": [ + 0, + 0, + 1, + 0.111, + 0, + 0.222, + 0, + 0.333, + 0, + 0, + 1.9, + 0 + ] + }, + { + "Target": "Parameter", + "Id": "ParamShoulder", + "Segments": [ + 0, + -0.062, + 1, + 0.111, + -0.062, + 0.222, + -0.103, + 0.333, + 0, + 1, + 0.589, + 0.238, + 0.844, + 1, + 1.1, + 1, + 0, + 1.9, + 1 + ] + }, + { + "Target": "Parameter", + "Id": "ParamArmLA", + "Segments": [ + 0, + 0, + 1, + 0.111, + 0, + 0.222, + 0, + 0.333, + 0, + 1, + 0.478, + 0, + 0.622, + -10, + 0.767, + -10, + 1, + 0.811, + -10, + 0.856, + -8.2, + 0.9, + -8.2, + 0, + 1.9, + -8.2 + ] + }, + { + "Target": "Parameter", + "Id": "ParamArmRA", + "Segments": [ + 0, + 0, + 1, + 0.111, + 0, + 0.222, + 0, + 0.333, + 0, + 1, + 0.478, + 0, + 0.622, + -10, + 0.767, + -10, + 1, + 0.811, + -10, + 0.856, + -7.2, + 0.9, + -7.2, + 0, + 1.9, + -7.2 + ] + }, + { + "Target": "Parameter", + "Id": "ParamArmLB", + "Segments": [ + 0, + 0, + 1, + 0.111, + 0, + 0.222, + 0, + 0.333, + 0, + 0, + 1.9, + 0 + ] + }, + { + "Target": "Parameter", + "Id": "ParamArmRB", + "Segments": [ + 0, + 0, + 1, + 0.111, + 0, + 0.222, + 0, + 0.333, + 0, + 0, + 1.9, + 0 + ] + }, + { + "Target": "Parameter", + "Id": "ParamHairAhoge", + "Segments": [ + 0, + 0, + 1, + 0.111, + 0, + 0.222, + 1.9, + 0.333, + 5.2, + 1, + 0.444, + 8.5, + 0.556, + 9.926, + 0.667, + 9.926, + 1, + 0.744, + 9.926, + 0.822, + -10, + 0.9, + -10, + 1, + 0.956, + -10, + 1.011, + 6, + 1.067, + 6, + 1, + 1.144, + 6, + 1.222, + -4, + 1.3, + -4, + 1, + 1.367, + -4, + 1.433, + 0, + 1.5, + 0, + 0, + 1.9, + 0 + ] + }, + { + "Target": "PartOpacity", + "Id": "PartArmA", + "Segments": [ + 0, + 1, + 0, + 1.9, + 1 + ] + }, + { + "Target": "PartOpacity", + "Id": "PartArmB", + "Segments": [ + 0, + 0, + 0, + 1.9, + 0 + ] + } + ] +} \ No newline at end of file diff --git a/main/xiaozhi-server/test/hiyori_pro_zh/runtime/motion/hiyori_m08.motion3.json b/main/xiaozhi-server/test/hiyori_pro_zh/runtime/motion/hiyori_m08.motion3.json new file mode 100644 index 00000000..c93722a5 --- /dev/null +++ b/main/xiaozhi-server/test/hiyori_pro_zh/runtime/motion/hiyori_m08.motion3.json @@ -0,0 +1,1023 @@ +{ + "Version": 3, + "Meta": { + "Duration": 2.1, + "Fps": 30.0, + "Loop": true, + "AreBeziersRestricted": false, + "CurveCount": 33, + "TotalSegmentCount": 133, + "TotalPointCount": 364, + "UserDataCount": 0, + "TotalUserDataSize": 0 + }, + "Curves": [ + { + "Target": "Parameter", + "Id": "ParamAngleX", + "Segments": [ + 0, + 0, + 1, + 0.056, + 0, + 0.111, + 0, + 0.167, + 0, + 1, + 0.211, + 0, + 0.256, + 0, + 0.3, + 0, + 1, + 0.344, + 0, + 0.389, + 0, + 0.433, + 0, + 1, + 0.522, + 0, + 0.611, + 0, + 0.7, + 0, + 0, + 2.1, + 0 + ] + }, + { + "Target": "Parameter", + "Id": "ParamAngleY", + "Segments": [ + 0, + 0, + 1, + 0.056, + 0, + 0.111, + 0, + 0.167, + 0, + 1, + 0.211, + 0, + 0.256, + 0, + 0.3, + 0, + 1, + 0.344, + 0, + 0.389, + -15, + 0.433, + -15, + 1, + 0.522, + -15, + 0.611, + 11, + 0.7, + 11, + 0, + 2.1, + 11 + ] + }, + { + "Target": "Parameter", + "Id": "ParamAngleZ", + "Segments": [ + 0, + 0, + 1, + 0.056, + 0, + 0.111, + 0, + 0.167, + 0, + 1, + 0.211, + 0, + 0.256, + 0, + 0.3, + 0, + 1, + 0.411, + 0, + 0.522, + -15, + 0.633, + -15, + 1, + 0.689, + -15, + 0.744, + -9, + 0.8, + -9, + 0, + 2.1, + -9 + ] + }, + { + "Target": "Parameter", + "Id": "ParamCheek", + "Segments": [ + 0, + 0, + 1, + 0.056, + 0, + 0.111, + 0, + 0.167, + 0, + 1, + 0.244, + 0, + 0.322, + 0, + 0.4, + 0, + 0, + 2.1, + 0 + ] + }, + { + "Target": "Parameter", + "Id": "ParamEyeLOpen", + "Segments": [ + 0, + 1, + 1, + 0.056, + 1, + 0.111, + 1, + 0.167, + 1, + 1, + 0.211, + 1, + 0.256, + 1, + 0.3, + 1, + 1, + 0.422, + 1, + 0.544, + 0, + 0.667, + 0, + 0, + 2.1, + 0 + ] + }, + { + "Target": "Parameter", + "Id": "ParamEyeLSmile", + "Segments": [ + 0, + 0, + 1, + 0.056, + 0, + 0.111, + 0, + 0.167, + 0, + 1, + 0.211, + 0, + 0.256, + 0, + 0.3, + 0, + 1, + 0.422, + 0, + 0.544, + 1, + 0.667, + 1, + 0, + 2.1, + 1 + ] + }, + { + "Target": "Parameter", + "Id": "ParamEyeROpen", + "Segments": [ + 0, + 1, + 1, + 0.056, + 1, + 0.111, + 1, + 0.167, + 1, + 1, + 0.211, + 1, + 0.256, + 1, + 0.3, + 1, + 1, + 0.422, + 1, + 0.544, + 0, + 0.667, + 0, + 0, + 2.1, + 0 + ] + }, + { + "Target": "Parameter", + "Id": "ParamEyeRSmile", + "Segments": [ + 0, + 0, + 1, + 0.056, + 0, + 0.111, + 0, + 0.167, + 0, + 1, + 0.211, + 0, + 0.256, + 0, + 0.3, + 0, + 1, + 0.422, + 0, + 0.544, + 1, + 0.667, + 1, + 0, + 2.1, + 1 + ] + }, + { + "Target": "Parameter", + "Id": "ParamEyeBallX", + "Segments": [ + 0, + 0, + 1, + 0.056, + 0, + 0.111, + 0, + 0.167, + 0, + 1, + 0.211, + 0, + 0.256, + 0, + 0.3, + 0, + 0, + 2.1, + 0 + ] + }, + { + "Target": "Parameter", + "Id": "ParamEyeBallY", + "Segments": [ + 0, + 0, + 1, + 0.056, + 0, + 0.111, + 0, + 0.167, + 0, + 1, + 0.211, + 0, + 0.256, + 0, + 0.3, + 0, + 0, + 2.1, + 0 + ] + }, + { + "Target": "Parameter", + "Id": "ParamBrowLY", + "Segments": [ + 0, + 0, + 1, + 0.056, + 0, + 0.111, + 0, + 0.167, + 0, + 1, + 0.211, + 0, + 0.256, + 0, + 0.3, + 0, + 1, + 0.422, + 0, + 0.544, + -0.14, + 0.667, + -0.14, + 0, + 2.1, + -0.14 + ] + }, + { + "Target": "Parameter", + "Id": "ParamBrowRY", + "Segments": [ + 0, + 0, + 1, + 0.056, + 0, + 0.111, + 0, + 0.167, + 0, + 1, + 0.211, + 0, + 0.256, + 0, + 0.3, + 0, + 1, + 0.422, + 0, + 0.544, + -0.14, + 0.667, + -0.14, + 0, + 2.1, + -0.14 + ] + }, + { + "Target": "Parameter", + "Id": "ParamBrowLX", + "Segments": [ + 0, + 0, + 1, + 0.056, + 0, + 0.111, + 0, + 0.167, + 0, + 1, + 0.244, + 0, + 0.322, + 0, + 0.4, + 0, + 1, + 0.489, + 0, + 0.578, + -0.21, + 0.667, + -0.21, + 0, + 2.1, + -0.21 + ] + }, + { + "Target": "Parameter", + "Id": "ParamBrowRX", + "Segments": [ + 0, + 0, + 1, + 0.056, + 0, + 0.111, + 0, + 0.167, + 0, + 1, + 0.244, + 0, + 0.322, + 0, + 0.4, + 0, + 1, + 0.489, + 0, + 0.578, + -0.2, + 0.667, + -0.2, + 0, + 2.1, + -0.2 + ] + }, + { + "Target": "Parameter", + "Id": "ParamBrowLAngle", + "Segments": [ + 0, + 0, + 1, + 0.056, + 0, + 0.111, + 0, + 0.167, + 0, + 1, + 0.244, + 0, + 0.322, + 0, + 0.4, + 0, + 1, + 0.489, + 0, + 0.578, + 0.25, + 0.667, + 0.25, + 0, + 2.1, + 0.25 + ] + }, + { + "Target": "Parameter", + "Id": "ParamBrowRAngle", + "Segments": [ + 0, + 0, + 1, + 0.056, + 0, + 0.111, + 0, + 0.167, + 0, + 1, + 0.244, + 0, + 0.322, + 0, + 0.4, + 0, + 1, + 0.489, + 0, + 0.578, + 0.23, + 0.667, + 0.23, + 0, + 2.1, + 0.23 + ] + }, + { + "Target": "Parameter", + "Id": "ParamBrowLForm", + "Segments": [ + 0, + 0, + 1, + 0.056, + 0, + 0.111, + 0, + 0.167, + 0, + 1, + 0.244, + 0, + 0.322, + 0, + 0.4, + 0, + 1, + 0.489, + 0, + 0.578, + 0, + 0.667, + 0, + 0, + 2.1, + 0 + ] + }, + { + "Target": "Parameter", + "Id": "ParamBrowRForm", + "Segments": [ + 0, + 0, + 1, + 0.056, + 0, + 0.111, + 0, + 0.167, + 0, + 1, + 0.244, + 0, + 0.322, + 0, + 0.4, + 0, + 1, + 0.489, + 0, + 0.578, + 0, + 0.667, + 0, + 0, + 2.1, + 0 + ] + }, + { + "Target": "Parameter", + "Id": "ParamBodyAngleX", + "Segments": [ + 0, + 0, + 0, + 2.1, + 0 + ] + }, + { + "Target": "Parameter", + "Id": "ParamBodyAngleY", + "Segments": [ + 0, + 0, + 1, + 0.056, + 0, + 0.111, + 0, + 0.167, + 0, + 1, + 0.244, + 0, + 0.322, + 8, + 0.4, + 8, + 1, + 0.467, + 8, + 0.533, + -7, + 0.6, + -7, + 1, + 0.656, + -7, + 0.711, + 3, + 0.767, + 3, + 1, + 0.811, + 3, + 0.856, + 0, + 0.9, + 0, + 0, + 2.1, + 0 + ] + }, + { + "Target": "Parameter", + "Id": "ParamBodyAngleZ", + "Segments": [ + 0, + 0, + 1, + 0.056, + 0, + 0.111, + 0, + 0.167, + 0, + 1, + 0.244, + 0, + 0.322, + 0, + 0.4, + 0, + 1, + 0.478, + 0, + 0.556, + 4, + 0.633, + 4, + 1, + 0.689, + 4, + 0.744, + 2, + 0.8, + 2, + 0, + 2.1, + 2 + ] + }, + { + "Target": "Parameter", + "Id": "ParamBreath", + "Segments": [ + 0, + 0, + 1, + 0.056, + 0, + 0.111, + 0, + 0.167, + 0, + 1, + 0.244, + 0, + 0.322, + 0, + 0.4, + 0, + 0, + 2.1, + 0 + ] + }, + { + "Target": "Parameter", + "Id": "ParamShoulder", + "Segments": [ + 0, + 0, + 1, + 0.056, + 0, + 0.111, + 0, + 0.167, + 0, + 1, + 0.244, + 0, + 0.322, + -1, + 0.4, + -1, + 1, + 0.467, + -1, + 0.533, + 1, + 0.6, + 1, + 1, + 0.656, + 1, + 0.711, + -0.4, + 0.767, + -0.4, + 1, + 0.922, + -0.4, + 1.078, + 0, + 1.233, + 0, + 0, + 2.1, + 0 + ] + }, + { + "Target": "Parameter", + "Id": "ParamLeg", + "Segments": [ + 0, + 1, + 0, + 2.1, + 1 + ] + }, + { + "Target": "Parameter", + "Id": "ParamArmLA", + "Segments": [ + 0, + 0, + 0, + 2.1, + 0 + ] + }, + { + "Target": "Parameter", + "Id": "ParamArmRA", + "Segments": [ + 0, + 0, + 0, + 2.1, + 0 + ] + }, + { + "Target": "Parameter", + "Id": "ParamArmLB", + "Segments": [ + 0, + 0, + 1, + 0.056, + 0, + 0.111, + 0, + 0.167, + 0, + 1, + 0.211, + 0, + 0.256, + -5.208, + 0.3, + -5.208, + 1, + 0.367, + -5.208, + 0.433, + 9.583, + 0.5, + 9.583, + 0, + 2.1, + 9.583 + ] + }, + { + "Target": "Parameter", + "Id": "ParamArmRB", + "Segments": [ + 0, + 0, + 1, + 0.056, + 0, + 0.111, + 0, + 0.167, + 0, + 1, + 0.211, + 0, + 0.256, + -4.583, + 0.3, + -4.583, + 1, + 0.367, + -4.583, + 0.433, + 4.375, + 0.5, + 4.375, + 0, + 2.1, + 4.375 + ] + }, + { + "Target": "Parameter", + "Id": "ParamHandLB", + "Segments": [ + 0, + 9.971, + 1, + 0.111, + 9.768, + 0.222, + 8.46, + 0.333, + 4.167, + 1, + 0.378, + 2.449, + 0.422, + -4.583, + 0.467, + -4.583, + 1, + 0.511, + -4.583, + 0.556, + 4.792, + 0.6, + 4.792, + 0, + 2.1, + 4.792 + ] + }, + { + "Target": "Parameter", + "Id": "ParamHandRB", + "Segments": [ + 0, + 9.971, + 1, + 0.111, + 9.768, + 0.222, + 8.46, + 0.333, + 4.167, + 1, + 0.378, + 2.449, + 0.422, + -4.583, + 0.467, + -4.583, + 1, + 0.511, + -4.583, + 0.556, + 7.292, + 0.6, + 7.292, + 0, + 2.1, + 7.292 + ] + }, + { + "Target": "Parameter", + "Id": "ParamHairAhoge", + "Segments": [ + 0, + 0, + 1, + 0.056, + 0, + 0.111, + 0, + 0.167, + 0, + 1, + 0.211, + 0, + 0.256, + -0.142, + 0.3, + 0.234, + 1, + 0.378, + 0.89, + 0.456, + 10, + 0.533, + 10, + 1, + 0.578, + 10, + 0.622, + -10, + 0.667, + -10, + 1, + 0.733, + -10, + 0.8, + 9.951, + 0.867, + 9.951, + 1, + 0.944, + 9.951, + 1.022, + -9.508, + 1.1, + -9.508, + 1, + 1.178, + -9.508, + 1.256, + 5.892, + 1.333, + 5.892, + 1, + 1.4, + 5.892, + 1.467, + -2, + 1.533, + -2, + 1, + 1.578, + -2, + 1.622, + 1, + 1.667, + 1, + 1, + 1.722, + 1, + 1.778, + 0, + 1.833, + 0, + 0, + 2.1, + 0 + ] + }, + { + "Target": "PartOpacity", + "Id": "PartArmA", + "Segments": [ + 0, + 0, + 0, + 2.1, + 0 + ] + }, + { + "Target": "PartOpacity", + "Id": "PartArmB", + "Segments": [ + 0, + 0.99, + 0, + 2.1, + 0.99 + ] + } + ] +} \ No newline at end of file diff --git a/main/xiaozhi-server/test/hiyori_pro_zh/runtime/motion/hiyori_m09.motion3.json b/main/xiaozhi-server/test/hiyori_pro_zh/runtime/motion/hiyori_m09.motion3.json new file mode 100644 index 00000000..8ec17a59 --- /dev/null +++ b/main/xiaozhi-server/test/hiyori_pro_zh/runtime/motion/hiyori_m09.motion3.json @@ -0,0 +1,1113 @@ +{ + "Version": 3, + "Meta": { + "Duration": 1.6, + "Fps": 30.0, + "Loop": true, + "AreBeziersRestricted": false, + "CurveCount": 31, + "TotalSegmentCount": 150, + "TotalPointCount": 417, + "UserDataCount": 0, + "TotalUserDataSize": 0 + }, + "Curves": [ + { + "Target": "Parameter", + "Id": "ParamAngleX", + "Segments": [ + 0, + 0, + 1, + 0.067, + 0, + 0.133, + 0, + 0.2, + 0, + 1, + 0.333, + 0, + 0.467, + -4, + 0.6, + -4, + 0, + 1.6, + -4 + ] + }, + { + "Target": "Parameter", + "Id": "ParamAngleY", + "Segments": [ + 0, + 0, + 1, + 0.067, + 0, + 0.133, + 0, + 0.2, + 0, + 1, + 0.289, + 0, + 0.378, + -20, + 0.467, + -20, + 1, + 0.522, + -20, + 0.578, + 2, + 0.633, + 2, + 1, + 0.667, + 2, + 0.7, + 0, + 0.733, + 0, + 1, + 0.8, + 0, + 0.867, + 0, + 0.933, + 0, + 1, + 1, + 0, + 1.067, + -21, + 1.133, + -21, + 1, + 1.167, + -21, + 1.2, + -17, + 1.233, + -17, + 0, + 1.6, + -17 + ] + }, + { + "Target": "Parameter", + "Id": "ParamAngleZ", + "Segments": [ + 0, + 0, + 1, + 0.067, + 0, + 0.133, + 0, + 0.2, + 0, + 0, + 1.6, + 0 + ] + }, + { + "Target": "Parameter", + "Id": "ParamCheek", + "Segments": [ + 0, + 0, + 1, + 0.067, + 0, + 0.133, + 0, + 0.2, + 0, + 1, + 0.356, + 0, + 0.511, + 0, + 0.667, + 0, + 1, + 0.778, + 0, + 0.889, + 1, + 1, + 1, + 0, + 1.6, + 1 + ] + }, + { + "Target": "Parameter", + "Id": "ParamEyeLOpen", + "Segments": [ + 0, + 1, + 1, + 0.067, + 1, + 0.133, + 1, + 0.2, + 1, + 1, + 0.244, + 1, + 0.289, + 1, + 0.333, + 1, + 1, + 0.378, + 1, + 0.422, + 0, + 0.467, + 0, + 1, + 0.489, + 0, + 0.511, + 0, + 0.533, + 0, + 1, + 0.578, + 0, + 0.622, + 1, + 0.667, + 1, + 1, + 0.8, + 1, + 0.933, + 1, + 1.067, + 1, + 1, + 1.122, + 1, + 1.178, + 0.825, + 1.233, + 0.825, + 0, + 1.6, + 0.825 + ] + }, + { + "Target": "Parameter", + "Id": "ParamEyeLSmile", + "Segments": [ + 0, + 0, + 1, + 0.067, + 0, + 0.133, + 0, + 0.2, + 0, + 1, + 0.544, + 0, + 0.889, + 0, + 1.233, + 0, + 0, + 1.6, + 0 + ] + }, + { + "Target": "Parameter", + "Id": "ParamEyeROpen", + "Segments": [ + 0, + 1, + 1, + 0.067, + 1, + 0.133, + 1, + 0.2, + 1, + 1, + 0.244, + 1, + 0.289, + 1, + 0.333, + 1, + 1, + 0.378, + 1, + 0.422, + 0, + 0.467, + 0, + 1, + 0.489, + 0, + 0.511, + 0, + 0.533, + 0, + 1, + 0.578, + 0, + 0.622, + 0.996, + 0.667, + 1, + 1, + 0.8, + 1.011, + 0.933, + 1.012, + 1.067, + 1.012, + 1, + 1.122, + 1.012, + 1.178, + 0.8, + 1.233, + 0.8, + 0, + 1.6, + 0.8 + ] + }, + { + "Target": "Parameter", + "Id": "ParamEyeRSmile", + "Segments": [ + 0, + 0, + 1, + 0.067, + 0, + 0.133, + 0, + 0.2, + 0, + 1, + 0.322, + 0, + 0.444, + 0, + 0.567, + 0, + 1, + 0.789, + 0, + 1.011, + 0, + 1.233, + 0, + 0, + 1.6, + 0 + ] + }, + { + "Target": "Parameter", + "Id": "ParamEyeBallX", + "Segments": [ + 0, + 0, + 1, + 0.067, + 0, + 0.133, + 0, + 0.2, + 0, + 1, + 0.322, + 0, + 0.444, + 0, + 0.567, + 0, + 1, + 0.789, + 0, + 1.011, + 0, + 1.233, + 0, + 0, + 1.6, + 0 + ] + }, + { + "Target": "Parameter", + "Id": "ParamEyeBallY", + "Segments": [ + 0, + 0, + 1, + 0.067, + 0, + 0.133, + 0, + 0.2, + 0, + 1, + 0.322, + 0, + 0.444, + 0, + 0.567, + 0, + 1, + 0.789, + 0, + 1.011, + 0, + 1.233, + 0, + 0, + 1.6, + 0 + ] + }, + { + "Target": "Parameter", + "Id": "ParamBrowLY", + "Segments": [ + 0, + 0, + 1, + 0.067, + 0, + 0.133, + 0, + 0.2, + 0, + 1, + 0.322, + 0, + 0.444, + 1, + 0.567, + 1, + 1, + 0.733, + 1, + 0.9, + 1, + 1.067, + 1, + 1, + 1.122, + 1, + 1.178, + -0.417, + 1.233, + -0.417, + 0, + 1.6, + -0.417 + ] + }, + { + "Target": "Parameter", + "Id": "ParamBrowRY", + "Segments": [ + 0, + 0, + 1, + 0.067, + 0, + 0.133, + 0, + 0.2, + 0, + 1, + 0.322, + 0, + 0.444, + 1, + 0.567, + 1, + 1, + 0.733, + 1, + 0.9, + 1, + 1.067, + 1, + 1, + 1.122, + 1, + 1.178, + -1, + 1.233, + -1, + 0, + 1.6, + -1 + ] + }, + { + "Target": "Parameter", + "Id": "ParamBrowLX", + "Segments": [ + 0, + 0, + 1, + 0.067, + 0, + 0.133, + 0, + 0.2, + 0, + 1, + 0.322, + 0, + 0.444, + 0, + 0.567, + 0, + 1, + 0.789, + 0, + 1.011, + 0, + 1.233, + 0, + 0, + 1.6, + 0 + ] + }, + { + "Target": "Parameter", + "Id": "ParamBrowRX", + "Segments": [ + 0, + 0, + 1, + 0.067, + 0, + 0.133, + 0, + 0.2, + 0, + 1, + 0.322, + 0, + 0.444, + 0, + 0.567, + 0, + 1, + 0.789, + 0, + 1.011, + 0, + 1.233, + 0, + 0, + 1.6, + 0 + ] + }, + { + "Target": "Parameter", + "Id": "ParamBrowLAngle", + "Segments": [ + 0, + 0, + 1, + 0.067, + 0, + 0.133, + 0, + 0.2, + 0, + 1, + 0.322, + 0, + 0.444, + -1, + 0.567, + -1, + 1, + 0.789, + -1, + 1.011, + -1, + 1.233, + -1, + 0, + 1.6, + -1 + ] + }, + { + "Target": "Parameter", + "Id": "ParamBrowRAngle", + "Segments": [ + 0, + 0, + 1, + 0.067, + 0, + 0.133, + 0, + 0.2, + 0, + 1, + 0.322, + 0, + 0.444, + -1, + 0.567, + -1, + 1, + 0.789, + -1, + 1.011, + -1, + 1.233, + -1, + 0, + 1.6, + -1 + ] + }, + { + "Target": "Parameter", + "Id": "ParamBrowLForm", + "Segments": [ + 0, + 0, + 1, + 0.067, + 0, + 0.133, + 0, + 0.2, + 0, + 1, + 0.322, + 0, + 0.444, + -1, + 0.567, + -1, + 1, + 0.789, + -1, + 1.011, + -1, + 1.233, + -1, + 0, + 1.6, + -1 + ] + }, + { + "Target": "Parameter", + "Id": "ParamBrowRForm", + "Segments": [ + 0, + 0, + 1, + 0.067, + 0, + 0.133, + 0, + 0.2, + 0, + 1, + 0.322, + 0, + 0.444, + -1, + 0.567, + -1, + 1, + 0.789, + -1, + 1.011, + -1, + 1.233, + -1, + 0, + 1.6, + -1 + ] + }, + { + "Target": "Parameter", + "Id": "ParamBodyAngleX", + "Segments": [ + 0, + 0, + 1, + 0.156, + 0, + 0.311, + 0, + 0.467, + 0, + 1, + 0.556, + 0, + 0.644, + -10, + 0.733, + -10, + 1, + 0.833, + -10, + 0.933, + -9, + 1.033, + -9, + 0, + 1.6, + -9 + ] + }, + { + "Target": "Parameter", + "Id": "ParamBodyAngleY", + "Segments": [ + 0, + 0, + 1, + 0.067, + 0, + 0.133, + 0, + 0.2, + 0, + 1, + 0.278, + 0, + 0.356, + -4, + 0.433, + -4, + 1, + 0.522, + -4, + 0.611, + 5, + 0.7, + 5, + 1, + 0.789, + 5, + 0.878, + 5, + 0.967, + 5, + 1, + 1.044, + 5, + 1.122, + -7, + 1.2, + -7, + 1, + 1.267, + -7, + 1.333, + 0, + 1.4, + 0, + 0, + 1.6, + 0 + ] + }, + { + "Target": "Parameter", + "Id": "ParamBodyAngleZ", + "Segments": [ + 0, + 0, + 1, + 0.067, + 0, + 0.133, + 0, + 0.2, + 0, + 0, + 1.6, + 0 + ] + }, + { + "Target": "Parameter", + "Id": "ParamBreath", + "Segments": [ + 0, + 0, + 1, + 0.067, + 0, + 0.133, + 0, + 0.2, + 0, + 0, + 1.6, + 0 + ] + }, + { + "Target": "Parameter", + "Id": "ParamShoulder", + "Segments": [ + 0, + 0, + 1, + 0.067, + 0, + 0.133, + 0, + 0.2, + 0, + 1, + 0.367, + 0, + 0.533, + 0.479, + 0.7, + 0.479, + 1, + 0.889, + 0.479, + 1.078, + -1, + 1.267, + -1, + 1, + 1.322, + -1, + 1.378, + -1, + 1.433, + -1, + 0, + 1.6, + -1 + ] + }, + { + "Target": "Parameter", + "Id": "ParamLeg", + "Segments": [ + 0, + 1, + 0, + 1.6, + 1 + ] + }, + { + "Target": "Parameter", + "Id": "ParamArmLA", + "Segments": [ + 0, + 0, + 1, + 0.067, + 0, + 0.133, + 0, + 0.2, + 0, + 1, + 0.233, + 0, + 0.267, + 0, + 0.3, + 0, + 1, + 0.367, + 0, + 0.433, + -4.5, + 0.5, + -4.5, + 1, + 0.578, + -4.5, + 0.656, + 0.8, + 0.733, + 0.8, + 1, + 0.811, + 0.8, + 0.889, + -0.156, + 0.967, + -0.6, + 1, + 1.011, + -0.854, + 1.056, + -0.72, + 1.1, + -1, + 1, + 1.167, + -1.42, + 1.233, + -3.7, + 1.3, + -3.7, + 1, + 1.356, + -3.7, + 1.411, + -2.4, + 1.467, + -2.4, + 0, + 1.6, + -2.4 + ] + }, + { + "Target": "Parameter", + "Id": "ParamArmRA", + "Segments": [ + 0, + 0, + 1, + 0.067, + 0, + 0.133, + 0, + 0.2, + 0, + 1, + 0.233, + 0, + 0.267, + 0, + 0.3, + 0, + 1, + 0.367, + 0, + 0.433, + -4.5, + 0.5, + -4.5, + 1, + 0.578, + -4.5, + 0.656, + 2.2, + 0.733, + 2.2, + 1, + 0.811, + 2.2, + 0.889, + -0.749, + 0.967, + -0.9, + 1, + 1.011, + -0.987, + 1.056, + -0.921, + 1.1, + -1, + 1, + 1.167, + -1.119, + 1.233, + -3.6, + 1.3, + -3.6, + 1, + 1.356, + -3.6, + 1.411, + -1.8, + 1.467, + -1.8, + 0, + 1.6, + -1.8 + ] + }, + { + "Target": "Parameter", + "Id": "ParamArmLB", + "Segments": [ + 0, + 0, + 1, + 0.067, + 0, + 0.133, + 0, + 0.2, + 0, + 0, + 1.6, + 0 + ] + }, + { + "Target": "Parameter", + "Id": "ParamArmRB", + "Segments": [ + 0, + 0, + 1, + 0.067, + 0, + 0.133, + 0, + 0.2, + 0, + 1, + 0.378, + 0, + 0.556, + 0.84, + 0.733, + 0.84, + 1, + 0.744, + 0.84, + 0.756, + 0.65, + 0.767, + 0.65, + 1, + 0.8, + 0.65, + 0.833, + 0.86, + 0.867, + 0.86, + 0, + 1.6, + 0.86 + ] + }, + { + "Target": "Parameter", + "Id": "ParamHairAhoge", + "Segments": [ + 0, + 0, + 1, + 0.067, + 0, + 0.133, + 0, + 0.2, + 0, + 1, + 0.289, + 0, + 0.378, + 6, + 0.467, + 6, + 1, + 0.5, + 6, + 0.533, + 4, + 0.567, + 0, + 1, + 0.622, + -6.667, + 0.678, + -10, + 0.733, + -10, + 1, + 0.767, + -10, + 0.8, + -6, + 0.833, + -6, + 1, + 0.933, + -6, + 1.033, + -10, + 1.133, + -10, + 1, + 1.178, + -10, + 1.222, + -2, + 1.267, + -2, + 1, + 1.311, + -2, + 1.356, + -9, + 1.4, + -9, + 0, + 1.6, + -9 + ] + }, + { + "Target": "PartOpacity", + "Id": "PartArmA", + "Segments": [ + 0, + 1, + 0, + 1.6, + 1 + ] + }, + { + "Target": "PartOpacity", + "Id": "PartArmB", + "Segments": [ + 0, + 0, + 0, + 1.6, + 0 + ] + } + ] +} \ No newline at end of file diff --git a/main/xiaozhi-server/test/hiyori_pro_zh/runtime/motion/hiyori_m10.motion3.json b/main/xiaozhi-server/test/hiyori_pro_zh/runtime/motion/hiyori_m10.motion3.json new file mode 100644 index 00000000..ee27769a --- /dev/null +++ b/main/xiaozhi-server/test/hiyori_pro_zh/runtime/motion/hiyori_m10.motion3.json @@ -0,0 +1,924 @@ +{ + "Version": 3, + "Meta": { + "Duration": 4.17, + "Fps": 30.0, + "Loop": true, + "AreBeziersRestricted": false, + "CurveCount": 31, + "TotalSegmentCount": 118, + "TotalPointCount": 321, + "UserDataCount": 0, + "TotalUserDataSize": 0 + }, + "Curves": [ + { + "Target": "Parameter", + "Id": "ParamAngleX", + "Segments": [ + 0, + 0, + 1, + 0.067, + 0, + 0.133, + 0, + 0.2, + 0, + 1, + 0.4, + 0, + 0.6, + 0, + 0.8, + 0, + 1, + 1.067, + 0, + 1.333, + 1.041, + 1.6, + 1.041, + 1, + 1.844, + 1.041, + 2.089, + -8, + 2.333, + -8, + 1, + 2.656, + -8, + 2.978, + 6, + 3.3, + 6, + 0, + 4.167, + 6 + ] + }, + { + "Target": "Parameter", + "Id": "ParamAngleY", + "Segments": [ + 0, + 0, + 1, + 0.067, + 0, + 0.133, + 0, + 0.2, + 0, + 1, + 0.344, + 0, + 0.489, + -30, + 0.633, + -30, + 0, + 4.167, + -30 + ] + }, + { + "Target": "Parameter", + "Id": "ParamAngleZ", + "Segments": [ + 0, + 0, + 1, + 0.067, + 0, + 0.133, + 0, + 0.2, + 0, + 0, + 4.167, + 0 + ] + }, + { + "Target": "Parameter", + "Id": "ParamCheek", + "Segments": [ + 0, + 0, + 1, + 0.067, + 0, + 0.133, + 0, + 0.2, + 0, + 0, + 4.167, + 0 + ] + }, + { + "Target": "Parameter", + "Id": "ParamEyeLOpen", + "Segments": [ + 0, + 1, + 1, + 0.067, + 1, + 0.133, + 1, + 0.2, + 1, + 1, + 0.311, + 1, + 0.422, + 0.988, + 0.533, + 0.8, + 1, + 0.589, + 0.706, + 0.644, + 0, + 0.7, + 0, + 1, + 0.722, + 0, + 0.744, + 0, + 0.767, + 0, + 1, + 0.822, + 0, + 0.878, + 0.8, + 0.933, + 0.8, + 1, + 1.422, + 0.8, + 1.911, + 0.8, + 2.4, + 0.8, + 1, + 2.456, + 0.8, + 2.511, + 0, + 2.567, + 0, + 1, + 2.589, + 0, + 2.611, + 0, + 2.633, + 0, + 1, + 2.689, + 0, + 2.744, + 0.8, + 2.8, + 0.8, + 0, + 4.167, + 0.8 + ] + }, + { + "Target": "Parameter", + "Id": "ParamEyeLSmile", + "Segments": [ + 0, + 0, + 1, + 0.067, + 0, + 0.133, + 0, + 0.2, + 0, + 0, + 4.167, + 0 + ] + }, + { + "Target": "Parameter", + "Id": "ParamEyeROpen", + "Segments": [ + 0, + 1, + 1, + 0.067, + 1, + 0.133, + 1, + 0.2, + 1, + 1, + 0.311, + 1, + 0.422, + 0.988, + 0.533, + 0.8, + 1, + 0.589, + 0.706, + 0.644, + 0, + 0.7, + 0, + 1, + 0.722, + 0, + 0.744, + 0, + 0.767, + 0, + 1, + 0.822, + 0, + 0.878, + 0.8, + 0.933, + 0.8, + 1, + 1.422, + 0.8, + 1.911, + 0.8, + 2.4, + 0.8, + 1, + 2.456, + 0.8, + 2.511, + 0, + 2.567, + 0, + 1, + 2.589, + 0, + 2.611, + 0, + 2.633, + 0, + 1, + 2.689, + 0, + 2.744, + 0.8, + 2.8, + 0.8, + 0, + 4.167, + 0.8 + ] + }, + { + "Target": "Parameter", + "Id": "ParamEyeRSmile", + "Segments": [ + 0, + 0, + 1, + 0.067, + 0, + 0.133, + 0, + 0.2, + 0, + 1, + 0.278, + 0, + 0.356, + 0, + 0.433, + 0, + 0, + 4.167, + 0 + ] + }, + { + "Target": "Parameter", + "Id": "ParamEyeBallX", + "Segments": [ + 0, + 0, + 1, + 0.067, + 0, + 0.133, + 0, + 0.2, + 0, + 1, + 0.278, + 0, + 0.356, + 0, + 0.433, + 0, + 1, + 0.667, + 0, + 0.9, + 0.004, + 1.133, + -0.01, + 1, + 1.4, + -0.025, + 1.667, + -0.43, + 1.933, + -0.43, + 1, + 2.211, + -0.43, + 2.489, + 0.283, + 2.767, + 0.283, + 0, + 4.167, + 0.283 + ] + }, + { + "Target": "Parameter", + "Id": "ParamEyeBallY", + "Segments": [ + 0, + 0, + 1, + 0.067, + 0, + 0.133, + 0, + 0.2, + 0, + 1, + 0.278, + 0, + 0.356, + -1, + 0.433, + -1, + 0, + 4.167, + -1 + ] + }, + { + "Target": "Parameter", + "Id": "ParamBrowLY", + "Segments": [ + 0, + 0, + 1, + 0.067, + 0, + 0.133, + 0, + 0.2, + 0, + 1, + 0.278, + 0, + 0.356, + 0.19, + 0.433, + 0.19, + 0, + 4.167, + 0.19 + ] + }, + { + "Target": "Parameter", + "Id": "ParamBrowRY", + "Segments": [ + 0, + 0, + 1, + 0.067, + 0, + 0.133, + 0, + 0.2, + 0, + 1, + 0.278, + 0, + 0.356, + 0.11, + 0.433, + 0.11, + 0, + 4.167, + 0.11 + ] + }, + { + "Target": "Parameter", + "Id": "ParamBrowLX", + "Segments": [ + 0, + 0, + 1, + 0.067, + 0, + 0.133, + 0, + 0.2, + 0, + 1, + 0.278, + 0, + 0.356, + -0.48, + 0.433, + -0.48, + 0, + 4.167, + -0.48 + ] + }, + { + "Target": "Parameter", + "Id": "ParamBrowRX", + "Segments": [ + 0, + 0, + 1, + 0.067, + 0, + 0.133, + 0, + 0.2, + 0, + 1, + 0.278, + 0, + 0.356, + -0.29, + 0.433, + -0.29, + 0, + 4.167, + -0.29 + ] + }, + { + "Target": "Parameter", + "Id": "ParamBrowLAngle", + "Segments": [ + 0, + 0, + 1, + 0.067, + 0, + 0.133, + 0, + 0.2, + 0, + 1, + 0.278, + 0, + 0.356, + 1, + 0.433, + 1, + 0, + 4.167, + 1 + ] + }, + { + "Target": "Parameter", + "Id": "ParamBrowRAngle", + "Segments": [ + 0, + 0, + 1, + 0.067, + 0, + 0.133, + 0, + 0.2, + 0, + 1, + 0.278, + 0, + 0.356, + 0.85, + 0.433, + 0.85, + 0, + 4.167, + 0.85 + ] + }, + { + "Target": "Parameter", + "Id": "ParamBrowLForm", + "Segments": [ + 0, + 0, + 1, + 0.067, + 0, + 0.133, + 0, + 0.2, + 0, + 1, + 0.278, + 0, + 0.356, + -0.75, + 0.433, + -0.75, + 0, + 4.167, + -0.75 + ] + }, + { + "Target": "Parameter", + "Id": "ParamBrowRForm", + "Segments": [ + 0, + 0, + 1, + 0.067, + 0, + 0.133, + 0, + 0.2, + 0, + 1, + 0.278, + 0, + 0.356, + -0.87, + 0.433, + -0.87, + 0, + 4.167, + -0.87 + ] + }, + { + "Target": "Parameter", + "Id": "ParamBodyAngleX", + "Segments": [ + 0, + 0, + 1, + 0.067, + 0, + 0.133, + 0, + 0.2, + 0, + 1, + 0.444, + 0, + 0.689, + 0, + 0.933, + 0, + 1, + 1.211, + 0, + 1.489, + 0, + 1.767, + 0, + 1, + 2.056, + 0, + 2.344, + -6, + 2.633, + -6, + 1, + 3.033, + -6, + 3.433, + 10, + 3.833, + 10, + 0, + 4.167, + 10 + ] + }, + { + "Target": "Parameter", + "Id": "ParamBodyAngleY", + "Segments": [ + 0, + 0, + 1, + 0.067, + 0, + 0.133, + 0, + 0.2, + 0, + 0, + 4.167, + 0 + ] + }, + { + "Target": "Parameter", + "Id": "ParamBodyAngleZ", + "Segments": [ + 0, + 0, + 1, + 0.067, + 0, + 0.133, + 0, + 0.2, + 0, + 1, + 0.8, + 0, + 1.4, + -2, + 2, + -2, + 1, + 2.456, + -2, + 2.911, + 8.125, + 3.367, + 8.125, + 0, + 4.167, + 8.125 + ] + }, + { + "Target": "Parameter", + "Id": "ParamBreath", + "Segments": [ + 0, + 0, + 1, + 0.067, + 0, + 0.133, + 0, + 0.2, + 0, + 0, + 4.167, + 0 + ] + }, + { + "Target": "Parameter", + "Id": "ParamShoulder", + "Segments": [ + 0, + 0, + 0, + 4.167, + 0 + ] + }, + { + "Target": "Parameter", + "Id": "ParamLeg", + "Segments": [ + 0, + 1, + 1, + 0.667, + 1, + 1.333, + 1, + 2, + 1, + 1, + 2.267, + 1, + 2.533, + 0.948, + 2.8, + 0.948, + 0, + 4.167, + 0.948 + ] + }, + { + "Target": "Parameter", + "Id": "ParamArmLA", + "Segments": [ + 0, + 0, + 1, + 0.067, + 0, + 0.133, + 0, + 0.2, + 0, + 1, + 0.233, + 0, + 0.267, + 0, + 0.3, + 0, + 1, + 0.478, + 0, + 0.656, + -10, + 0.833, + -10, + 1, + 0.922, + -10, + 1.011, + -8.846, + 1.1, + -8.846, + 1, + 1.467, + -8.846, + 1.833, + -8.835, + 2.2, + -9.1, + 1, + 2.622, + -9.405, + 3.044, + -10, + 3.467, + -10, + 0, + 4.167, + -10 + ] + }, + { + "Target": "Parameter", + "Id": "ParamArmRA", + "Segments": [ + 0, + 0, + 1, + 0.067, + 0, + 0.133, + 0, + 0.2, + 0, + 1, + 0.233, + 0, + 0.267, + 0, + 0.3, + 0, + 1, + 0.478, + 0, + 0.656, + -10, + 0.833, + -10, + 1, + 0.922, + -10, + 1.011, + -8.972, + 1.1, + -8.846, + 1, + 1.467, + -8.328, + 1.833, + -8.2, + 2.2, + -8.2, + 1, + 2.622, + -8.2, + 3.044, + -10, + 3.467, + -10, + 0, + 4.167, + -10 + ] + }, + { + "Target": "Parameter", + "Id": "ParamArmLB", + "Segments": [ + 0, + 0, + 0, + 4.167, + 0 + ] + }, + { + "Target": "Parameter", + "Id": "ParamArmRB", + "Segments": [ + 0, + 0, + 0, + 4.167, + 0 + ] + }, + { + "Target": "Parameter", + "Id": "ParamHairAhoge", + "Segments": [ + 0, + 0, + 1, + 0.067, + 0, + 0.133, + 0, + 0.2, + 0, + 1, + 0.233, + 0, + 0.267, + -5, + 0.3, + -5, + 1, + 0.378, + -5, + 0.456, + 10, + 0.533, + 10, + 1, + 0.633, + 10, + 0.733, + 4, + 0.833, + 4, + 0, + 4.167, + 4 + ] + }, + { + "Target": "PartOpacity", + "Id": "PartArmA", + "Segments": [ + 0, + 1, + 0, + 4.17, + 1 + ] + }, + { + "Target": "PartOpacity", + "Id": "PartArmB", + "Segments": [ + 0, + 0, + 0, + 4.17, + 0 + ] + } + ] +} \ No newline at end of file diff --git a/main/xiaozhi-server/test/images/1.png b/main/xiaozhi-server/test/images/1.png new file mode 100644 index 00000000..6d822acd Binary files /dev/null and b/main/xiaozhi-server/test/images/1.png differ diff --git a/main/xiaozhi-server/test/images/2.png b/main/xiaozhi-server/test/images/2.png new file mode 100644 index 00000000..ec648849 Binary files /dev/null and b/main/xiaozhi-server/test/images/2.png differ diff --git a/main/xiaozhi-server/test/images/3.png b/main/xiaozhi-server/test/images/3.png new file mode 100644 index 00000000..545cc8a6 Binary files /dev/null and b/main/xiaozhi-server/test/images/3.png differ diff --git a/main/xiaozhi-server/test/js/app.js b/main/xiaozhi-server/test/js/app.js index 03930f6a..b608f69d 100644 --- a/main/xiaozhi-server/test/js/app.js +++ b/main/xiaozhi-server/test/js/app.js @@ -1,7 +1,7 @@ // 主应用入口 import { log } from './utils/logger.js'; import { checkOpusLoaded, initOpusEncoder } from './core/audio/opus-codec.js'; -import { getUIController } from './ui/controller.js'; +import { uiController } from './ui/controller.js'; import { getAudioPlayer } from './core/audio/player.js'; import { initMcpTools } from './core/mcp/tools.js'; @@ -10,6 +10,7 @@ class App { constructor() { this.uiController = null; this.audioPlayer = null; + this.live2dManager = null; } // 初始化应用 @@ -17,7 +18,7 @@ class App { log('正在初始化应用...', 'info'); // 初始化UI控制器 - this.uiController = getUIController(); + this.uiController = uiController; this.uiController.init(); // 检查Opus库 @@ -33,13 +34,50 @@ class App { // 初始化MCP工具 initMcpTools(); + // 初始化Live2D + await this.initLive2D(); + log('应用初始化完成', 'success'); } + + // 初始化Live2D + async initLive2D() { + try { + // 检查Live2DManager是否已加载 + if (typeof window.Live2DManager === 'undefined') { + throw new Error('Live2DManager未加载,请检查脚本引入顺序'); + } + + this.live2dManager = new window.Live2DManager(); + await this.live2dManager.initializeLive2D(); + + // 更新UI状态 + const live2dStatus = document.getElementById('live2dStatus'); + if (live2dStatus) { + live2dStatus.textContent = '● 已加载'; + live2dStatus.className = 'status loaded'; + } + + log('Live2D初始化完成', 'success'); + } catch (error) { + log(`Live2D初始化失败: ${error.message}`, 'error'); + + // 更新UI状态 + const live2dStatus = document.getElementById('live2dStatus'); + if (live2dStatus) { + live2dStatus.textContent = '● 加载失败'; + live2dStatus.className = 'status error'; + } + } + } } // 创建并启动应用 const app = new App(); +// 将应用实例暴露到全局,供其他模块访问 +window.chatApp = app; + // DOM加载完成后初始化 if (document.readyState === 'loading') { document.addEventListener('DOMContentLoaded', () => app.init()); diff --git a/main/xiaozhi-server/test/js/core/audio/recorder.js b/main/xiaozhi-server/test/js/core/audio/recorder.js index 3fe785f0..cd248ce9 100644 --- a/main/xiaozhi-server/test/js/core/audio/recorder.js +++ b/main/xiaozhi-server/test/js/core/audio/recorder.js @@ -326,6 +326,11 @@ export class AudioRecorder { this.startVisualization(dataArray); } + // 立即通知录音开始,更新按钮状态 + if (this.onRecordingStart) { + this.onRecordingStart(0); + } + // 启动录音计时器 let recordingSeconds = 0; this.recordingTimer = setInterval(() => { diff --git a/main/xiaozhi-server/test/js/core/audio/stream-context.js b/main/xiaozhi-server/test/js/core/audio/stream-context.js index 05b8c1db..2ff69bcb 100644 --- a/main/xiaozhi-server/test/js/core/audio/stream-context.js +++ b/main/xiaozhi-server/test/js/core/audio/stream-context.js @@ -23,6 +23,10 @@ export class StreamingContext { this.totalSamples = 0; // 累积的总样本数 this.lastPlayTime = 0; // 上次播放的时间戳 this.scheduledEndTime = 0; // 已调度音频的结束时间 + + // 初始化分析器节点(供Live2D使用) + this.analyser = this.audioContext.createAnalyser(); + this.analyser.fftSize = 256; } // 缓存音频数组 @@ -108,6 +112,11 @@ export class StreamingContext { log('音频缓冲已清空', 'success'); } + // 获取分析器节点(供Live2D使用) + getAnalyser() { + return this.analyser; + } + // 将Opus数据解码为PCM async decodeOpusFrames() { if (!this.opusDecoder) { @@ -182,7 +191,8 @@ export class StreamingContext { const currentTime = this.audioContext.currentTime; const startTime = Math.max(this.scheduledEndTime, currentTime); - // 直接连接到输出 + // 连接到分析器和输出 + this.source.connect(this.analyser); this.source.connect(this.audioContext.destination); log(`调度播放 ${currentSamples.length} 个样本,约 ${(currentSamples.length / this.sampleRate).toFixed(2)} 秒`, 'debug'); diff --git a/main/xiaozhi-server/test/js/core/mcp/tools.js b/main/xiaozhi-server/test/js/core/mcp/tools.js index d4579be1..7a1198c9 100644 --- a/main/xiaozhi-server/test/js/core/mcp/tools.js +++ b/main/xiaozhi-server/test/js/core/mcp/tools.js @@ -48,7 +48,9 @@ function renderMcpTools() { const container = document.getElementById('mcpToolsContainer'); const countSpan = document.getElementById('mcpToolsCount'); - countSpan.textContent = `${mcpTools.length} 个工具`; + if (countSpan) { + countSpan.textContent = `${mcpTools.length} 个工具`; + } if (mcpTools.length === 0) { container.innerHTML = '
>2]))break}},n[8]=function(a,tj,vj,wj,xj,yj){a|=0,tj|=0,vj|=0,wj|=0,xj|=0,yj|=0;var Mj,Nj,zj=0,Aj=0,Bj=0,Cj=0,Dj=0,Ej=0,Fj=0,Gj=0,Ij=0,Jj=0,Kj=x(0),Lj=0,Hj=q[a>>2];if(!((0|Hj)<1))if(Mj=xj<<2,Nj=q[a+4>>2],yj)for(;;){if(q[yj>>2]&&(Bj=q[(zj=Cj<<2)+q[a+16>>2]>>2],Fj=q[vj+zj>>2],Aj=q[wj+zj>>2],(zj=(0|(Gj=w(Aj,xj)))<1)||ca(Fj,0,w(Aj,Mj)),!(zj|(0|Bj)<1)))for(Ij=Bj+Ej|0,Jj=q[a+20>>2],zj=Ej;;){for(Kj=u[(Aj=zj<<2)+Jj>>2],Lj=q[tj+Aj>>2],Dj=0;u[(Aj=(Bj=Dj<<2)+Fj|0)>>2]=u[Aj>>2]+x(Kj*u[Bj+Lj>>2]),(0|Gj)!=(0|(Dj=Dj+1|0)););if(!((0|(zj=zj+1|0))<(0|Ij)))break}if(yj=yj+4|0,Ej=q[(Cj<<2)+Nj>>2]+Ej|0,!((0|(Cj=Cj+1|0))<(0|Hj)))break}else for(yj=0;;){if(Bj=q[(Cj=yj<<2)+q[a+16>>2]>>2],Fj=q[vj+Cj>>2],Aj=q[wj+Cj>>2],(zj=(0|(Gj=w(Aj,xj)))<1)||ca(Fj,0,w(Aj,Mj)),!(zj|(0|Bj)<=0))for(Ij=Bj+Ej|0,Jj=q[a+20>>2],zj=Ej;;){for(Kj=u[(Aj=zj<<2)+Jj>>2],Lj=q[tj+Aj>>2],Dj=0;u[(Aj=(Bj=Dj<<2)+Fj|0)>>2]=u[Aj>>2]+x(Kj*u[Bj+Lj>>2]),(0|Gj)!=(0|(Dj=Dj+1|0)););if(!((0|(zj=zj+1|0))<(0|Ij)))break}if(Ej=q[Cj+Nj>>2]+Ej|0,!((0|(yj=yj+1|0))<(0|Hj)))break}},n[9]=function(a){var Je,Ke,Le,Fe=0,Ge=0,He=0,Ie=0;if(!(q[(a|=0)+648>>2]||(0|(Fe=q[a+332>>2]))<1))for(Ke=(Ge=q[a+336>>2])+w(Fe,20)|0,Fe=q[a+424>>2],Ie=q[a+444>>2];;){if(q[Fe>>2]&&!((0|(He=q[Ge+16>>2]))<(a=1)))for(He<<=1,Le=q[Ie>>2];u[(Je=(a<<2)+Le|0)>>2]=-u[Je>>2],(0|(a=a+2|0))<(0|He););if(Ie=Ie+4|0,Fe=Fe+4|0,!((Ge=Ge+20|0)>>>0>>0))break}},n[10]=function(a,rn,sn){var un;return $(un=q[20+(a|=0)>>2],rn|=0,rn=(sn|=0)>>>0<(rn=q[a+16>>2]-un|0)>>>0?sn:rn),q[a+20>>2]=rn+q[a+20>>2],0|sn},n[11]=function(a,Gl,Pm,Qm,Rm,Sm){a|=0,Gl=+Gl,Pm|=0,Qm|=0,Rm|=0,Sm|=0;var dn,on,Xm,hn,Tm=0,Um=0,Vm=0,Wm=0,Ym=0,Zm=0,_m=0,$m=0,an=0,bn=0,cn=0,en=0,fn=0,gn=0,kn=0;if(q[44+(L=Xm=L-560|0)>>2]=0,h(+Gl),Tm=0|b[1],on=4294967295>>0?0:1,hn=(0|Tm)<-1||(0|Tm)<=-1&&on?(h(Gl=-Gl),Tm=0|b[1],b[0],gn=1,3872):2048&Rm?(gn=1,3875):(gn=1&Rm)?3878:3873,2146435072==(2146435072&Tm))_(a,32,Pm,Zm=gn+3|0,-65537&Rm),Z(a,hn,gn),Qm=Sm>>>5&1,Z(a,Gl!=Gl?Qm?3899:3903:Qm?3891:3895,3);else if(Gl=function Ja(a,ic){var kc,lc,jc=0;if(h(+a),jc=0|b[1],kc=0|b[0],2047!=(0|(jc=(lc=jc)>>>20&2047))){if(!jc)return jc=ic,ic=0==a?0:(a=Ja(0x10000000000000000*a,ic),q[ic>>2]+-64|0),q[jc>>2]=ic,a;q[ic>>2]=jc+-1022,f(0,0|kc),f(1,-2146435073&lc|1071644672),a=+g()}return a}(Gl,44+Xm|0),0!=(Gl+=Gl)&&(q[44+Xm>>2]=q[44+Xm>>2]+-1),dn=16+Xm|0,97==(0|(on=32|Sm))){if(cn=(bn=32&Sm)?9+hn|0:hn,!(11 >>0)&&(Tm=12-Qm|0)){for(en=8;en*=16,Tm=Tm+-1|0;);Gl=45==r[0|cn]?-(en+(-Gl-en)):Gl+en-en}for((0|dn)==(0|(Tm=ga((Vm=(Tm=q[44+Xm>>2])>>31)^Tm+Vm,0,dn)))&&(o[15+Xm|0]=48,Tm=15+Xm|0),Ym=2|gn,Vm=q[44+Xm>>2],o[0|(an=Tm+-2|0)]=Sm+15,o[Tm+-1|0]=(0|Vm)<0?45:43,Tm=8&Rm,Um=16+Xm|0;Sm=Um,$m=bn,Vm=y(Gl)<2147483648?~~Gl:-2147483648,o[0|Um]=$m|r[Vm+3856|0],1!=((Um=Sm+1|0)-(16+Xm|0)|0)|(0==(Gl=16*(Gl-(0|Vm)))?!(Tm|0<(0|Qm)):0)||(o[Sm+1|0]=46,Um=Sm+2|0),0!=Gl;);_(a,32,Pm,Zm=(Sm=!Qm|(0|Qm)<=((Um-Xm|0)-18|0)?((dn-(16+Xm|0)|0)-an|0)+Um|0:2+((Qm+dn|0)-an|0)|0)+Ym|0,Rm),Z(a,cn,Ym),_(a,48,Pm,Zm,65536^Rm),Z(a,16+Xm|0,Qm=Um-(16+Xm|0)|0),_(a,48,Sm-((Tm=Qm)+(Qm=dn-an|0)|0)|0,0,0),Z(a,an,Qm)}else{for(Tm=(0|Qm)<0,0==Gl?Wm=q[44+Xm>>2]:(Wm=q[44+Xm>>2]+-28|0,q[44+Xm>>2]=Wm,Gl*=268435456),_m=Tm?6:Qm,Vm=bn=(0|Wm)<0?48+Xm|0:336+Xm|0;Vm=(Qm=Vm)+4|0,0!=(Gl=1e9*(Gl-((q[Qm>>2]=Tm=Gl<4294967296&0<=Gl?~~Gl>>>0:0)>>>0))););if((0|Wm)<1)Tm=Vm,Um=bn;else for(Um=bn;;){if(an=(0|Wm)<29?Wm:29,!((Tm=Vm+-4|0)>>>0 >>0)){for(Qm=an,$m=0;kn=$m,$m=q[(cn=Tm)>>2],Ym=31&Qm,Ym=32<=(63&Qm)>>>(Zm=0)?(Wm=$m< >>32-Ym,$m< >>0 >>0?Zm+1|0:Zm,kn=cn,cn=cd($m=dd(Ym=$m,Zm,1e9),M,1e9),q[kn>>2]=Ym-cn,Um>>>0<=(Tm=Tm+-4|0)>>>0;);(Qm=$m)&&(q[(Um=Um+-4|0)>>2]=Qm)}for(;Um>>>0<(Tm=Vm)>>>0&&!q[(Vm=Tm+-4|0)>>2];);if(Wm=q[44+Xm>>2]-an|0,Vm=Tm,!(0<(0|(q[44+Xm>>2]=Wm))))break}if((0|Wm)<=-1)for(fn=1+((_m+25|0)/9|0)|0,an=102==(0|on);;){if($m=(0|Wm)<-9?9:0-Wm|0,Tm>>>0<=Um>>>0)Um=q[Um>>2]?Um:Um+4|0;else{for(cn=1e9>>>$m,Ym=-1<<$m^-1,Wm=0,Vm=Um;Qm=q[Vm>>2],q[Vm>>2]=(Qm>>>$m)+Wm,Wm=w(cn,Qm&Ym),(Vm=Vm+4|0)>>>0 >>0;);Um=q[Um>>2]?Um:Um+4|0,Wm&&(q[Tm>>2]=Wm,Tm=Tm+4|0)}if(Wm=$m+q[44+Xm>>2]|0,Tm=(0|fn) >2?Qm+(fn<<2)|0:Tm,!((0|(q[44+Xm>>2]=Wm))<0))break}if(!(Tm>>>(Vm=0)<=Um>>>0||(Vm=w(bn-Um>>2,9),(Qm=q[Um>>2])>>>0<(Wm=10))))for(;Vm=Vm+1|0,(Wm=w(Wm,10))>>>0<=Qm>>>0;);if((0|(Qm=(_m-(102==(0|on)?0:Vm)|0)-(103==(0|on)&0!=(0|_m))|0))<(w(Tm-bn>>2,9)+-9|0)){if(Zm=(bn+((Qm=(0|(Ym=Qm+9216|0))/9|0)<<2)|0)-4092|0,Wm=10,(0|(Qm=1+(Ym-w(Qm,9)|0)|0))<=8)for(;Wm=w(Wm,10),9!=(0|(Qm=Qm+1|0)););if(fn=Zm+4|0,((an=(cn=q[Zm>>2])-w(Wm,Ym=(cn>>>0)/(Wm>>>0)|0)|0)||(0|fn)!=(0|Tm))&&(en=an>>>0<(Qm=Wm>>>1)>>>0?.5:(0|Tm)==(0|fn)&&(0|Qm)==(0|an)?1:1.5,Gl=1&Ym?9007199254740994:9007199254740992,!gn|45!=r[0|hn]||(en=-en,Gl=-Gl),q[Zm>>2]=Qm=cn-an|0,Gl+en!=Gl)){if(1e9<=(q[Zm>>2]=Qm=Qm+Wm|0)>>>0)for(;(Zm=Zm+-4|(q[Zm>>2]=0))>>>0 >>0&&(q[(Um=Um+-4|0)>>2]=0),Qm=q[Zm>>2]+1|0,999999999<(q[Zm>>2]=Qm)>>>0;);if(Vm=w(bn-Um>>2,9),!((Qm=q[Um>>2])>>>0<(Wm=10)))for(;Vm=Vm+1|0,(Wm=w(Wm,10))>>>0<=Qm>>>0;);}Tm=(Qm=Zm+4|0)>>>0 >>0?Qm:Tm}j:{for(;;){if((an=Tm)>>>(cn=0)<=Um>>>0)break j;if(q[(Tm=an+-4|0)>>2])break}cn=1}if(103!=(0|on))Ym=8&Rm;else if(_m=((Qm=(0|Vm)<(0|(Tm=_m||1))&-5<(0|Vm))?-1^Vm:-1)+Tm|0,Sm=(Qm?-1:-2)+Sm|0,!(Ym=8&Rm)){if(Tm=9,cn&&(Ym=q[an+-4>>2])&&!((Ym>>>(Tm=0))%(Qm=10)))for(;Tm=Tm+1|0,!((Ym>>>0)%((Qm=w(Qm,10))>>>0)););Qm=w(an-bn>>2,9)+-9|0,_m=102==(32|Sm)?((Ym=0)|_m)<(0|(Qm=0<(0|(Qm=Qm-Tm|0))?Qm:0))?_m:Qm:((Ym=0)|_m)<(0|(Qm=0<(0|(Qm=(Qm+Vm|0)-Tm|0))?Qm:0))?_m:Qm}if(Zm=0!=(0|(Wm=_m|Ym)),Qm=a,kn=Pm,Tm=0<(0|Vm)?Vm:0,102!=(0|($m=32|Sm))){if((dn-(Tm=ga((Tm=Vm>>31)+Vm^Tm,0,dn))|0)<=1)for(;o[0|(Tm=Tm+-1|0)]=48,(dn-Tm|0)<2;);o[0|(fn=Tm+-2|0)]=Sm,o[Tm+-1|0]=(0|Vm)<0?45:43,Tm=dn-fn|0}if(_(Qm,32,kn,Zm=1+(Tm+(Zm+(_m+gn|0)|0)|0)|0,Rm),Z(a,hn,gn),_(a,48,Pm,Zm,65536^Rm),102==(0|$m)){for(Qm=16+Xm|8,Vm=16+Xm|9,Um=Sm=bn>>>0 >>0?bn:Um;;){if(Tm=ga(q[Um>>2],0,Vm),(0|Sm)!=(0|Um)){if(!(Tm>>>0<=16+Xm>>>0))for(;o[0|(Tm=Tm+-1|0)]=48,16+Xm>>>0 >>0;);}else(0|Tm)==(0|Vm)&&(o[24+Xm|0]=48,Tm=Qm);if(Z(a,Tm,Vm-Tm|0),!((Um=Um+4|0)>>>0<=bn>>>0))break}Wm&&Z(a,3907,1);p:if(!((0|_m)<1|an>>>0<=Um>>>0))for(;;){if(16+Xm>>>0<(Tm=ga(q[Um>>2],0,Vm))>>>0)for(;o[0|(Tm=Tm+-1|0)]=48,16+Xm>>>0 >>0;);if(Z(a,Tm,(0|_m)<9?_m:9),_m=_m+-9|0,an>>>0<=(Um=Um+4|0)>>>0)break p;if(!(0<(0|_m)))break}_(a,48,_m+9|0,9,0)}else{q:if(!((0|_m)<0))for(Sm=cn?an:Um+4|0,Qm=16+Xm|8,bn=16+Xm|9,Vm=Um;;){if((0|bn)==(0|(Tm=ga(q[Vm>>2],0,bn)))&&(o[24+Xm|0]=48,Tm=Qm),(0|Um)!=(0|Vm)){if(!(Tm>>>0<=16+Xm>>>0))for(;o[0|(Tm=Tm+-1|0)]=48,16+Xm>>>0 >>0;);}else Z(a,Tm,1),Tm=Tm+1|0,(0|_m)<1&&!Ym||Z(a,3907,1);if(Z(a,$m=Tm,(0|(Tm=bn-Tm|0))<(0|_m)?Tm:_m),_m=_m-Tm|0,Sm>>>0<=(Vm=Vm+4|0)>>>0)break q;if(!(-1<(0|_m)))break}_(a,48,_m+18|0,18,0),Z(a,fn,dn-fn|0)}}return _(a,32,Pm,Zm,8192^Rm),L=560+Xm|0,0|((0|Zm)<(0|Pm)?Pm:Zm)},n[12]=function(a,Gl){a|=0;var Cm=Gl|=0;Gl=q[Gl>>2]+15&-16,q[Cm>>2]=Gl+16,Cm=a,a=function(a,Gl,Hl,Zl){var dm,am,_l=0,$l=0,bm=0,cm=0;return L=am=L-32|0,_l=(cm=_l=2147483647&Zl)-1006698496|0,$l=_l=(dm=$l=bm=Hl)>>>0<0?_l+1|0:_l,_l=cm-1140785152|0,(0|(_l=bm>>>0<0?_l+1|0:_l))==(0|$l)&dm>>>0 >>0|$l>>>0<_l>>>0?(_l=Zl<<4|Hl>>>28,Hl=Hl<<4|Gl>>>28,134217728==(0|(bm=Gl&=268435455))&1<=a>>>0|134217728 >>0?(_l=_l+1073741824|0,(a=Hl+1|0)>>>0<1&&(_l=_l+1|0),$l=a):(_l=_l-((($l=Hl)>>>0<0)+-1073741824|0)|0,a|134217728^bm||((a=$l+(1&$l)|0)>>>0<$l>>>0&&(_l=_l+1|0),$l=a))):(!bm&2147418112==(0|cm)?!(a|Gl):2147418112==(0|cm)&bm>>>0<0|cm>>>0<2147418112)?(_l=2146435072,1140785151==(($l=0)|cm)&4294967295 >>0|1140785151 >>0||(bm=cm>>>16)>>>(_l=0)<15249||(function(a,Gl,Hl,Cm,Dm,Em){var Hm,Im,Fm=0,Gm=0;64&Em?(Gl=31&(Hl=Em-64|0),Gl=32<=(63&Hl)>>>0?(Hl=0,Dm>>>Gl):(Hl=Dm>>>Gl,((1< >>Gl),Dm=Cm=0):Em&&(Gm=Dm,Fm=31&(Im=64-Em|0),Im=32<=(63&Im)>>>0?(Gm=Cm< >>32-Fm|Gm< >>0?(Fm=0,Hl>>>Gl):(Fm=Hl>>>Gl,((1< >>Gl),Gl|=Im,Hl=Fm|Gm,Fm=Cm,Cm=31&Em,Cm=32<=(63&Em)>>>0?(Gm=0,Dm>>>Cm):(Gm=Dm>>>Cm,((1< >>Cm),Dm=Gm),q[a>>2]=Gl,q[4+a>>2]=Hl,q[8+a>>2]=Cm,q[12+a>>2]=Dm}(am,a,Gl,Hl,_l=65535&Zl|65536,15361-bm|0),function(a,Gl,Hl,Zl,fm,gm){var jm,hm,im=0;64&gm?(Zl=Gl,Gl=31&(fm=gm+-64|0),32<=(63&fm)>>>0?(fm=Zl< >>32-Gl|Hl< >>0?(im=hm< >>32-Zl|fm< >>0?(gm=0,Zl>>>=fm):(gm=Zl>>>fm,Zl=((1< >>fm),Zl|=hm,fm=gm|im,gm=Gl,Gl=31&jm,Gl=32<=(63&jm)>>>0?(im=gm< >>32-Gl|Hl< >2]=Gl,q[4+a>>2]=Hl,q[8+a>>2]=Zl,q[12+a>>2]=fm}(16+am|0,a,Gl,Hl,_l,bm+-15233|0),Hl=q[4+am>>2],a=q[8+am>>2],_l=q[12+am>>2]<<4|a>>>28,$l=a<<4|Hl>>>28,134217728==(0|(Hl=a=268435455&Hl))&1<=(Gl=q[am>>2]|(0!=(q[16+am>>2]|q[24+am>>2])|0!=(q[20+am>>2]|q[28+am>>2])))>>>0|134217728>>0?((a=$l+1|0)>>>0<1&&(_l=_l+1|0),$l=a):Gl|134217728^Hl||((a=$l+(1&$l)|0)>>>0<$l>>>0&&(_l=_l+1|0),$l=a))):($l=Hl<<4|Gl>>>28,_l=524287&(_l=Zl<<4|Hl>>>28)|2146959360),L=32+am|0,f(0,0|$l),f(1,-2147483648&Zl|_l),+g()}(q[Gl>>2],q[Gl+4>>2],q[Gl+8>>2],q[Gl+12>>2]),v[Cm>>3]=a},n[13]=function(a){return 0},n[14]=function(a,Gl,Cm){Gl|=0,Cm|=0;var Mm,Em,Dm=0,Jm=0,Km=0,Lm=0;for(L=Em=L-32|0,Dm=q[28+(a|=0)>>2],q[16+Em>>2]=Dm,Km=q[a+20>>2],q[28+Em>>2]=Cm,q[24+Em>>2]=Gl,Km=(q[20+Em>>2]=Gl=Km-Dm|0)+Cm|0,Lm=2,Gl=16+Em|0;;){a:{if((Jm=(Dm=0)|K(q[a+60>>2],0|Gl,0|Lm,12+Em|0))&&(q[2094]=Jm,Dm=-1),(0|(Dm=Dm?q[12+Em>>2]=-1:q[12+Em>>2]))==(0|Km))Gl=q[a+44>>2],q[a+28>>2]=Gl,q[a+20>>2]=Gl,q[a+16>>2]=Gl+q[a+48>>2],a=Cm;else{if(-1<(0|Dm))break a;q[a+28>>2]=0,q[a+16>>2]=0,q[a+20>>2]=0,q[a>>2]=32|q[a>>2],2!=((a=0)|Lm)&&(a=Cm-q[Gl+4>>2]|0)}return L=32+Em|0,0|a}Jm=q[Gl+4>>2],q[(Gl=(Mm=Jm>>>0 >>0)?Gl+8|0:Gl)>>2]=(Jm=Dm-(Mm?Jm:0)|0)+q[Gl>>2],q[Gl+4>>2]=q[Gl+4>>2]-Jm,Km=Km-Dm|0,Lm=Lm-Mm|0}},n[15]=function(a,Gl,Cm,Dm){return M=0},{d:function(){},e:function(){return q[1813]},f:function(){return 83951616},g:function(){return 5},h:function(a,tj){return tj|=0,L=tj=L-16|0,a=(a|=0)?sa(a)?(Y(4,2150,0),0):r[a+4|0]:(q[tj+4>>2]=1444,q[tj>>2]=2267,Y(4,1294,tj),0),L=tj+16|0,0|a},i:function(a,tj){var uj;return tj|=0,L=uj=L-48|0,a=(a|=0)?(a+63&-64)!=(0|a)?(q[36+uj>>2]=1522,q[32+uj>>2]=2284,Y(4,1294,32+uj|0),0):(tj+63&-64)==(0|tj)&&tj?function(a,Tk){var nl,Uk=0,Vk=0,Wk=0,Xk=0,Yk=0,Zk=0,_k=0,$k=0,al=0,bl=0,cl=0,dl=0,el=0,fl=0,gl=0,hl=0,il=0,jl=0,kl=0,ll=0,ml=0;L=Yk=(nl=Vk=L)-704&-64;a:if(Tk>>>0<=1343)Y(4,1235,0);else if(sa(a))Y(4,1469,0);else if(Vk=r[0|(ll=a+4|0)]){if(!(6<=Vk>>>0)){(hl=1==(0|!r[a+5|0]))||(da(ll,1),X(a- -64|0,4,160)),ca(Yk- -64|0,0,640),na(a,Yk- -64|0),Vk=a+Tk|0,Tk=q[Yk+64>>2];b:{c:{d:{if(5<=(gl=r[a+4|0])>>>0){if(Tk>>>0>>0|Vk>>>0 >>0)break c;if((Xk=Tk+256|0)>>>0>>0)break c;if(Xk>>>0<=Vk>>>0)break d;break c}if(Tk>>>0>>0|Vk>>>0 >>0)break c;if((Xk=Tk+128|0)>>>0>>0|Vk>>>0 >>0)break c}if(!((Wk=q[Yk+68>>2])>>>0>>0|Vk>>>0 >>0|Wk>>>0 >>0||(Wk=Wk- -64|0)>>>0>>0|Vk>>>0 >>0||(0|(bl=q[Tk>>2]))<0||(Xk=q[Yk+72>>2])>>>0>>0|Vk>>>0 >>0|Xk>>>0 >>0||(Wk=(Uk=Xk)+(Xk=bl<<2)|0)>>>0>>0|Vk>>>0 >>0||(_k=q[Yk+76>>2])>>>0>>0|Vk>>>0<_k>>>0|_k>>>0 >>0||(Uk=(bl<<6)+_k|0)>>>0>>0|Vk>>>0 >>0||(Wk=q[Yk+80>>2])>>>0>>0|Vk>>>0 >>0|Wk>>>0 >>0||(Uk=Wk+Xk|0)>>>0>>0|Vk>>>0 >>0||(Wk=q[Yk+84>>2])>>>0>>0|Vk>>>0 >>0|Wk>>>0 >>0||(Uk=Wk+Xk|0)>>>0>>0|Vk>>>0 >>0||(Wk=q[Yk+88>>2])>>>0>>0|Vk>>>0 >>0|Wk>>>0 >>0||(Uk=Wk+Xk|0)>>>0>>0|Vk>>>0 >>0||(Wk=q[Yk+92>>2])>>>0>>0|Vk>>>0 >>0|Wk>>>0 >>0||(Uk=Wk+Xk|0)>>>0>>0|Vk>>>0 >>0||(Wk=q[Yk+96>>2])>>>0>>0|Vk>>>0 >>0|Wk>>>0 >>0||(Uk=Wk+Xk|0)>>>0>>0|Vk>>>0 >>0||(Wk=q[Yk+100>>2])>>>0>>0|Vk>>>0 >>0|Wk>>>0 >>0||(Wk=Wk+Xk|0)>>>0>>0|Vk>>>0 >>0||(0|(Uk=q[Tk+4>>2]))<0||(Xk=q[Yk+104>>2])>>>0>>0|Vk>>>0 >>0|Xk>>>0 >>0||(Zk=(Wk=Xk)+(Xk=Uk<<2)|0)>>>0>>0|Vk>>>0 >>0||(Wk=q[Yk+108>>2])>>>0>>0|Vk>>>0 >>0|Wk>>>0 >>0||(Uk=Wk+(Uk<<6)|0)>>>0>>0|Vk>>>0 >>0||(Wk=q[Yk+112>>2])>>>0>>0|Vk>>>0 >>0|Wk>>>0 >>0||(Uk=Wk+Xk|0)>>>0>>0|Vk>>>0 >>0||(Wk=q[Yk+116>>2])>>>0>>0|Vk>>>0 >>0|Wk>>>0 >>0||(Uk=Wk+Xk|0)>>>0>>0|Vk>>>0 >>0||(Wk=q[Yk+120>>2])>>>0>>0|Vk>>>0 >>0|Wk>>>0 >>0||(Uk=Wk+Xk|0)>>>0>>0|Vk>>>0 >>0||(Wk=q[Yk+124>>2])>>>0>>0|Vk>>>0 >>0|Wk>>>0 >>0||(Uk=Wk+Xk|0)>>>0>>0|Vk>>>0 >>0||(Wk=q[Yk+128>>2])>>>0>>0|Vk>>>0 >>0|Wk>>>0 >>0||(Uk=Wk+Xk|0)>>>0>>0|Vk>>>0 >>0||(Wk=q[Yk+132>>2])>>>0>>0|Vk>>>0 >>0|Wk>>>0 >>0||(Uk=Wk+Xk|0)>>>0>>0|Vk>>>0 >>0||(Wk=q[Yk+136>>2])>>>0>>0|Vk>>>0 >>0|Wk>>>0 >>0||(Wk=Wk+Xk|0)>>>0>>0|Vk>>>0 >>0||(0|(Uk=q[Tk+8>>2]))<0||(Xk=q[Yk+140>>2])>>>0>>0|Vk>>>0 >>0|Xk>>>0 >>0||(Wk=(cl=Uk<<2)+Xk|0)>>>0>>0|Vk>>>0 >>0||(Xk=q[Yk+144>>2])>>>0>>0|Vk>>>0 >>0|Xk>>>0 >>0||(Wk=Xk+cl|0)>>>0>>0|Vk>>>0 >>0||(Xk=q[Yk+148>>2])>>>0>>0|Vk>>>0 >>0|Xk>>>0 >>0||(Wk=Xk+cl|0)>>>0>>0|Vk>>>0 >>0||(Xk=q[Yk+156>>2])>>>0>>0|Vk>>>0 >>0|Xk>>>0 >>0||(Wk=Xk+cl|0)>>>0>>0|Vk>>>0 >>0||(Xk=q[Yk+160>>2])>>>0>>0|Vk>>>0 >>0|Xk>>>0 >>0||(Wk=Xk+cl|0)>>>0>>0|Vk>>>0 >>0||(Xk=q[Yk+164>>2])>>>0>>0|Vk>>>0 >>0|Xk>>>0 >>0||(Wk=Xk+cl|0)>>>0>>0|Vk>>>0 >>0||(0|(Uk=q[Tk+12>>2]))<0||(Xk=q[Yk+172>>2])>>>0>>0|Vk>>>0 >>0|Xk>>>0 >>0||(Wk=(dl=Uk<<2)+Xk|0)>>>0>>0|Vk>>>0 >>0||(Xk=q[Yk+176>>2])>>>0>>0|Vk>>>0 >>0|Xk>>>0 >>0||(Wk=Xk+dl|0)>>>0>>0|Vk>>>0 >>0||(Xk=q[Yk+180>>2])>>>0>>0|Vk>>>0 >>0|Xk>>>0 >>0||(Wk=Xk+dl|0)>>>0>>0|Vk>>>0 >>0||(Xk=q[Yk+188>>2])>>>0>>0|Vk>>>0 >>0|Xk>>>0 >>0||(Uk=Xk+dl|0)>>>0>>0|Vk>>>0 >>0||(0|(Wk=q[Tk+16>>2]))<0||(Xk=q[Yk+192>>2])>>>0>>0|Vk>>>0 >>0|Xk>>>0 >>0||(Zk=(Uk=Xk)+(Xk=Wk<<2)|0)>>>0>>0|Vk>>>0 >>0||(Uk=q[Yk+196>>2])>>>0>>0|Vk>>>0 >>0|Uk>>>0 >>0||(Zk=Uk+Xk|0)>>>0>>0|Vk>>>0 >>0||(Uk=q[Yk+200>>2])>>>0>>0|Vk>>>0 >>0|Uk>>>0 >>0||(Zk=Uk+Xk|0)>>>0>>0|Vk>>>0 >>0||(Uk=q[Yk+204>>2])>>>0>>0|Vk>>>0 >>0|Uk>>>0 >>0||(Zk=Uk+Xk|0)>>>0>>0|Vk>>>0