1 line
9.7 KiB
Plaintext
1 line
9.7 KiB
Plaintext
<view class="memorial-bg data-v-41b5703e"><view class="memorial-content data-v-41b5703e"><view class="header data-v-41b5703e"><text class="logo data-v-41b5703e">AI声音克隆</text><text class="tagline data-v-41b5703e">克隆亲人声音 · 语音合成 · 实时对话</text></view><view wx:if="{{a}}" class="{{['data-v-41b5703e', 'message', c]}}">{{b}}</view><view class="create-voice-btn-wrapper data-v-41b5703e"><button class="create-voice-btn data-v-41b5703e" bindtap="{{d}}"> 📤 创建音色 </button></view><view class="tabs data-v-41b5703e"><view class="{{['data-v-41b5703e', 'tab-item', e]}}" bindtap="{{f}}"> 🔊 合成 </view><view class="{{['data-v-41b5703e', 'tab-item', g]}}" bindtap="{{h}}"> 💬 对话 </view><view class="{{['data-v-41b5703e', 'tab-item', i]}}" bindtap="{{j}}"> 📋 列表 </view></view></view><scroll-view scroll-y class="content data-v-41b5703e"><view wx:if="{{k}}" class="tab-content data-v-41b5703e"><view class="section-title data-v-41b5703e">🎵 语音合成</view><view class="form-section data-v-41b5703e"><view class="form-label-with-help data-v-41b5703e"><text class="form-label data-v-41b5703e">选择音色类型</text><text class="help-icon data-v-41b5703e" bindtap="{{l}}">❓</text></view><picker class="data-v-41b5703e" mode="selector" range="{{n}}" range-key="label" bindchange="{{o}}"><view class="picker-large data-v-41b5703e">{{m}}</view></picker><picker class="data-v-41b5703e" mode="selector" range="{{q}}" range-key="voice_name" bindchange="{{r}}"><view class="picker-large data-v-41b5703e">{{p}}</view></picker><view class="hint-text data-v-41b5703e">💡 请先在"声音克隆"页面创建音色</view></view><view wx:if="{{s}}" class="form-section data-v-41b5703e"><view class="form-label data-v-41b5703e">方言</view><picker class="data-v-41b5703e" mode="selector" range="{{v}}" bindchange="{{w}}"><view class="picker-large data-v-41b5703e">{{t}}</view></picker></view><view wx:if="{{x}}" class="form-section data-v-41b5703e"><view class="form-label data-v-41b5703e">语言提示(可选)</view><picker class="data-v-41b5703e" mode="selector" range="{{z}}" bindchange="{{A}}"><view class="picker-large data-v-41b5703e">{{y}}</view></picker><view class="hint-text data-v-41b5703e">💡 仅处理第一个值;不设置不生效</view></view><view class="form-section data-v-41b5703e"><view class="form-label data-v-41b5703e"> 文案模板</view><view wx:if="{{B}}" class="empty-template data-v-41b5703e"><text class="data-v-41b5703e">⏳ 加载中...</text></view><view wx:else class="template-categories data-v-41b5703e"><view class="category-group data-v-41b5703e"><view class="category-header data-v-41b5703e" bindtap="{{D}}"><text class="category-name data-v-41b5703e">💭 缅怀类</text><text class="{{['category-arrow', 'data-v-41b5703e', C && 'arrow-open']}}">▼</text></view><view wx:if="{{E}}" class="category-content data-v-41b5703e"><view wx:for="{{F}}" wx:for-item="template" wx:key="c" class="template-item data-v-41b5703e" bindtap="{{template.d}}"><text class="template-title data-v-41b5703e">{{template.a}}</text><text class="template-preview data-v-41b5703e">{{template.b}}</text></view></view></view><view class="category-group data-v-41b5703e"><view class="category-header data-v-41b5703e" bindtap="{{H}}"><text class="category-name data-v-41b5703e">👋 问候类</text><text class="{{['category-arrow', 'data-v-41b5703e', G && 'arrow-open']}}">▼</text></view><view wx:if="{{I}}" class="category-content data-v-41b5703e"><view wx:for="{{J}}" wx:for-item="template" wx:key="c" class="template-item data-v-41b5703e" bindtap="{{template.d}}"><text class="template-title data-v-41b5703e">{{template.a}}</text><text class="template-preview data-v-41b5703e">{{template.b}}</text></view></view></view><view class="category-group data-v-41b5703e"><view class="category-header data-v-41b5703e" bindtap="{{L}}"><text class="category-name data-v-41b5703e">📖 回忆类</text><text class="{{['category-arrow', 'data-v-41b5703e', K && 'arrow-open']}}">▼</text></view><view wx:if="{{M}}" class="category-content data-v-41b5703e"><view wx:for="{{N}}" wx:for-item="template" wx:key="c" class="template-item data-v-41b5703e" bindtap="{{template.d}}"><text class="template-title data-v-41b5703e">{{template.a}}</text><text class="template-preview data-v-41b5703e">{{template.b}}</text></view></view></view></view></view><view class="form-section data-v-41b5703e"><view class="form-label data-v-41b5703e">输入文本(最多100字)</view><block wx:if="{{r0}}"><textarea class="textarea data-v-41b5703e" placeholder="请输入要合成的文本..." maxlength="100" value="{{O}}" bindinput="{{P}}"/></block><view class="{{['char-count', 'data-v-41b5703e', R && 'char-warning']}}">{{Q}} / 100 </view></view><button class="primary-btn data-v-41b5703e" disabled="{{T}}" bindtap="{{U}}">{{S}}</button><text class="ai-disclaimer data-v-41b5703e">本服务为AI生成内容,结果仅供参考</text><view wx:if="{{V}}" class="audio-result data-v-41b5703e"><view class="result-title data-v-41b5703e">✅ 合成成功!</view><audio class="data-v-41b5703e" src="{{W}}" controls style="width:100%"></audio></view></view><view wx:if="{{X}}" class="tab-content data-v-41b5703e"><view class="section-title data-v-41b5703e">💬 实时语音对话</view><view class="memory-card data-v-41b5703e"><view class="card-header data-v-41b5703e"><text class="card-title data-v-41b5703e">💭 记忆设定</text><text class="card-hint data-v-41b5703e">填写越详细,AI模拟越真实</text></view><view class="memory-form data-v-41b5703e"><view class="form-item data-v-41b5703e"><view class="item-label data-v-41b5703e"><text class="label-text data-v-41b5703e">身份</text><text class="label-required data-v-41b5703e">*</text></view><input class="form-input data-v-41b5703e" placeholder="例如:我的母亲" maxlength="50" value="{{Y}}" bindinput="{{Z}}"/></view><view class="form-item data-v-41b5703e"><view class="item-label data-v-41b5703e"><text class="label-text data-v-41b5703e">基础信息</text></view><block wx:if="{{r0}}"><textarea class="form-textarea data-v-41b5703e" placeholder="例如:退休教师,喜欢养花,做饭很拿手..." maxlength="200" value="{{aa}}" bindinput="{{ab}}"/></block><text class="form-count data-v-41b5703e">{{ac}}/200</text></view><button class="apply-btn data-v-41b5703e" bindtap="{{ad}}"><text class="btn-icon data-v-41b5703e">✓</text><text class="data-v-41b5703e">应用设定</text></button></view></view><view class="form-section data-v-41b5703e"><view class="form-label data-v-41b5703e">选择回复音色</view><picker class="data-v-41b5703e" mode="selector" range="{{af}}" range-key="label" bindchange="{{ag}}"><view class="picker-large data-v-41b5703e">{{ae}}</view></picker><picker class="data-v-41b5703e" mode="selector" range="{{ai}}" range-key="voice_name" bindchange="{{aj}}"><view class="picker-large data-v-41b5703e">{{ah}}</view></picker></view><view wx:if="{{ak}}" class="form-section data-v-41b5703e"><view class="form-label data-v-41b5703e">方言</view><picker class="data-v-41b5703e" mode="selector" range="{{am}}" bindchange="{{an}}"><view class="picker-large data-v-41b5703e">{{al}}</view></picker></view><view wx:if="{{ao}}" class="form-section data-v-41b5703e"><view class="form-label data-v-41b5703e">语言提示(可选)</view><picker class="data-v-41b5703e" mode="selector" range="{{aq}}" bindchange="{{ar}}"><view class="picker-large data-v-41b5703e">{{ap}}</view></picker><view class="hint-text data-v-41b5703e">💡 仅处理第一个值;不设置不生效</view></view><view class="record-buttons data-v-41b5703e"><view wx:if="{{as}}" class="record-btn start data-v-41b5703e" bindtap="{{at}}"> 🎤 开始说话 </view><view wx:if="{{av}}" class="record-btn stop data-v-41b5703e" bindtap="{{aw}}"> ⏹️ 停止录音 </view><view wx:if="{{ax}}" class="record-btn processing data-v-41b5703e"> ⏳ 处理中... </view><view class="{{['small-btn', 'data-v-41b5703e', az && 'disabled']}}" bindtap="{{aA}}"><image src="{{ay}}" class="delete-icon data-v-41b5703e" mode="aspectFit" style="width:44upx;height:44upx"></image></view></view><view wx:if="{{aB}}" class="result-box user data-v-41b5703e"><view class="result-label data-v-41b5703e">🎤 您说:</view><text class="data-v-41b5703e">{{aC}}</text></view><view wx:if="{{aD}}" class="result-box ai data-v-41b5703e"><view class="result-label data-v-41b5703e">💬 AI回复:</view><text class="data-v-41b5703e">{{aE}}</text></view><view wx:if="{{aF}}" class="result-box audio data-v-41b5703e"><view class="result-label data-v-41b5703e">🔊 语音回复:</view><audio class="data-v-41b5703e" src="{{aG}}" controls style="width:100%"></audio></view></view><view wx:if="{{aH}}" class="tab-content data-v-41b5703e"><view class="list-header data-v-41b5703e"><view class="section-title data-v-41b5703e">我的音色</view><button class="small-btn refresh-btn data-v-41b5703e" disabled="{{aJ}}" bindtap="{{aK}}">{{aI}}</button></view><view wx:if="{{aL}}" class="loading data-v-41b5703e">⏳ 加载中...</view><view wx:elif="{{aM}}" class="empty data-v-41b5703e">🎤 暂无音色</view><view wx:else class="data-v-41b5703e"><view wx:for="{{aN}}" wx:for-item="voice" wx:key="g" class="voice-item data-v-41b5703e"><view class="voice-info data-v-41b5703e"><text class="voice-name data-v-41b5703e">{{voice.a}} <text wx:if="{{voice.b}}" class="public-badge data-v-41b5703e">公共</text></text><text class="voice-detail data-v-41b5703e">{{voice.c}}</text></view><button wx:if="{{voice.d}}" class="delete-btn data-v-41b5703e" bindtap="{{voice.f}}"><image src="{{voice.e}}" class="delete-icon data-v-41b5703e" mode="aspectFit"></image></button></view></view></view></scroll-view><payment-modal wx:if="{{aR}}" class="r data-v-41b5703e" u-r="paymentModal" bindclose="{{aP}}" bindconfirm="{{aQ}}" u-i="41b5703e-0" bind:__l="__l" u-p="{{aR}}"/></view> |