This commit is contained in:
Your Name
2026-08-17 13:59:12 +08:00
parent 79601ea176
commit 49309b7c57
62 changed files with 82 additions and 47023 deletions
@@ -1,150 +1,2 @@
"use strict";
const common_vendor = require("../../common/vendor.js");
const training_hooks_useMetronome = require("../hooks/useMetronome.js");
if (!Math) {
WalkerCanvas();
}
const WalkerCanvas = () => "./components/walker-canvas.js";
const _sfc_main = /* @__PURE__ */ common_vendor.defineComponent({
__name: "metronome",
setup(__props) {
const LOOP_PRESETS = [
{ id: "slow", bpm: 110, label: "慢走", desc: "热身 · 恢复" },
{ id: "normal", bpm: 130, label: "健走", desc: "日常 · 通勤" },
{ id: "brisk", bpm: 150, label: "快走", desc: "提速 · 燃脂" }
];
const customExpanded = common_vendor.ref(false);
const currentLoop = common_vendor.ref("normal");
const currentSound = common_vendor.ref("crisp");
const walkerCanvasRef = common_vendor.ref(null);
const SOUND_PRESETS = {
crisp: {
normal: "https://gz-1349751149.cos.ap-guangzhou.myqcloud.com/uploads/file/20260527/202605271539371ebe13672.mp3",
accent: "https://gz-1349751149.cos.ap-guangzhou.myqcloud.com/uploads/file/20260527/202605271539376ff628472.mp3"
},
wood: {
normal: "https://gz-1349751149.cos.ap-guangzhou.myqcloud.com/uploads/file/20260526/202605261051282a0a94508.mp3",
accent: "https://gz-1349751149.cos.ap-guangzhou.myqcloud.com/uploads/file/20260526/202605261051282a0a94508.mp3"
}
};
const fg = training_hooks_useMetronome.useMetronome({
initialBpm: 130,
accentEvery: 2,
clickSrc: SOUND_PRESETS.crisp.normal,
accentSrc: SOUND_PRESETS.crisp.accent,
poolSize: 4,
// 【完美音画同步核心】
onBeat: (index, isAccent) => {
if (walkerCanvasRef.value && walkerCanvasRef.value.triggerBeat) {
walkerCanvasRef.value.triggerBeat();
}
}
});
const isPlaying = common_vendor.computed(() => fg.isPlaying.value);
const currentBpm = common_vendor.computed(() => fg.bpm.value);
const customAccent = common_vendor.computed(() => fg.accentEvery.value);
const intervalMs = common_vendor.computed(() => 6e4 / fg.bpm.value);
const onCenterTap = () => {
if (fg.isPlaying.value) {
fg.stop();
common_vendor.index.setKeepScreenOn({ keepScreenOn: false });
} else {
fg.start();
common_vendor.index.setKeepScreenOn({ keepScreenOn: true });
}
};
const onPresetTap = (id) => {
const preset = LOOP_PRESETS.find((p) => p.id === id);
if (!preset)
return;
currentLoop.value = id;
fg.setBpm(preset.bpm);
if (!fg.isPlaying.value) {
fg.start();
common_vendor.index.setKeepScreenOn({ keepScreenOn: true });
}
};
const onToggleCustom = () => {
customExpanded.value = !customExpanded.value;
if (customExpanded.value) {
fg.preload();
} else {
const matched = LOOP_PRESETS.find((p) => p.bpm === fg.bpm.value);
currentLoop.value = matched ? matched.id : null;
}
};
const onBpmDelta = (delta) => {
fg.setBpm(fg.bpm.value + delta);
currentLoop.value = null;
};
const onAccentSelect = (n) => {
fg.setAccentEvery(n);
};
const onSoundSelect = (sound) => {
currentSound.value = sound;
const preset = SOUND_PRESETS[sound];
fg.updateAudioSrc(preset.normal, preset.accent);
};
const rootStyle = common_vendor.computed(() => ({
"--beat-duration": `${intervalMs.value}ms`
}));
common_vendor.onShow(() => {
fg.preload();
});
function cleanupMetronome() {
fg.stop();
common_vendor.index.setKeepScreenOn({ keepScreenOn: false });
}
common_vendor.onHide(cleanupMetronome);
common_vendor.onUnload(cleanupMetronome);
common_vendor.onUnmounted(cleanupMetronome);
return (_ctx, _cache) => {
return common_vendor.e({
a: common_vendor.sr(walkerCanvasRef, "a75aa31b-0", {
"k": "walkerCanvasRef"
}),
b: common_vendor.o(onCenterTap, "0f"),
c: common_vendor.p({
bpm: currentBpm.value,
["is-playing"]: isPlaying.value
}),
d: currentSound.value === "crisp" ? 1 : "",
e: common_vendor.o(($event) => onSoundSelect("crisp"), "8c"),
f: currentSound.value === "wood" ? 1 : "",
g: common_vendor.o(($event) => onSoundSelect("wood"), "43"),
h: common_vendor.f(LOOP_PRESETS, (p, k0, i0) => {
return {
a: common_vendor.t(p.label),
b: common_vendor.t(p.bpm),
c: common_vendor.t(p.desc),
d: p.id,
e: currentLoop.value === p.id ? 1 : "",
f: common_vendor.o(($event) => onPresetTap(p.id), p.id)
};
}),
i: common_vendor.t(customExpanded.value ? "✕ 收起自定义" : "⚙ 自定义节奏"),
j: common_vendor.o(onToggleCustom, "29"),
k: customExpanded.value
}, customExpanded.value ? {
l: common_vendor.o(($event) => onBpmDelta(-5), "71"),
m: common_vendor.o(($event) => onBpmDelta(-1), "5b"),
n: common_vendor.t(currentBpm.value),
o: common_vendor.o(($event) => onBpmDelta(1), "90"),
p: common_vendor.o(($event) => onBpmDelta(5), "b0"),
q: common_vendor.f([2, 3, 4], (n, k0, i0) => {
return {
a: common_vendor.t(n),
b: n,
c: customAccent.value === n ? 1 : "",
d: common_vendor.o(($event) => onAccentSelect(n), n)
};
})
} : {}, {
r: common_vendor.s(rootStyle.value)
});
};
}
});
const MiniProgramPage = /* @__PURE__ */ common_vendor._export_sfc(_sfc_main, [["__scopeId", "data-v-a75aa31b"]]);
wx.createPage(MiniProgramPage);
"use strict";const e=require("../../common/vendor.js"),x=require("../hooks/useMetronome.js");Math||z();const z=()=>"./components/walker-canvas.js",$=e.defineComponent({__name:"metronome",setup(E){const u=[{id:"slow",bpm:110,label:"慢走",desc:"热身 · 恢复"},{id:"normal",bpm:130,label:"健走",desc:"日常 · 通勤"},{id:"brisk",bpm:150,label:"快走",desc:"提速 · 燃脂"}],c=e.ref(!1),s=e.ref("normal"),p=e.ref("crisp"),l=e.ref(null),i={crisp:{normal:"https://gz-1349751149.cos.ap-guangzhou.myqcloud.com/uploads/file/20260527/202605271539371ebe13672.mp3",accent:"https://gz-1349751149.cos.ap-guangzhou.myqcloud.com/uploads/file/20260527/202605271539376ff628472.mp3"},wood:{normal:"https://gz-1349751149.cos.ap-guangzhou.myqcloud.com/uploads/file/20260526/202605261051282a0a94508.mp3",accent:"https://gz-1349751149.cos.ap-guangzhou.myqcloud.com/uploads/file/20260526/202605261051282a0a94508.mp3"}},o=x.useMetronome({initialBpm:130,accentEvery:2,clickSrc:i.crisp.normal,accentSrc:i.crisp.accent,poolSize:4,onBeat:(t,a)=>{l.value&&l.value.triggerBeat&&l.value.triggerBeat()}}),f=e.computed(()=>o.isPlaying.value),d=e.computed(()=>o.bpm.value),g=e.computed(()=>o.accentEvery.value),b=e.computed(()=>6e4/o.bpm.value),S=()=>{o.isPlaying.value?(o.stop(),e.index.setKeepScreenOn({keepScreenOn:!1})):(o.start(),e.index.setKeepScreenOn({keepScreenOn:!0}))},_=t=>{const a=u.find(n=>n.id===t);a&&(s.value=t,o.setBpm(a.bpm),o.isPlaying.value||(o.start(),e.index.setKeepScreenOn({keepScreenOn:!0})))},k=()=>{if(c.value=!c.value,c.value)o.preload();else{const t=u.find(a=>a.bpm===o.bpm.value);s.value=t?t.id:null}},r=t=>{o.setBpm(o.bpm.value+t),s.value=null},h=t=>{o.setAccentEvery(t)},v=t=>{p.value=t;const a=i[t];o.updateAudioSrc(a.normal,a.accent)},y=e.computed(()=>({"--beat-duration":`${b.value}ms`}));e.onShow(()=>{o.preload()});function m(){o.stop(),e.index.setKeepScreenOn({keepScreenOn:!1})}return e.onHide(m),e.onUnload(m),e.onUnmounted(m),(t,a)=>e.e({a:e.sr(l,"a75aa31b-0",{k:"walkerCanvasRef"}),b:e.o(S,"0f"),c:e.p({bpm:d.value,"is-playing":f.value}),d:p.value==="crisp"?1:"",e:e.o(n=>v("crisp"),"8c"),f:p.value==="wood"?1:"",g:e.o(n=>v("wood"),"43"),h:e.f(u,(n,O,P)=>({a:e.t(n.label),b:e.t(n.bpm),c:e.t(n.desc),d:n.id,e:s.value===n.id?1:"",f:e.o(w=>_(n.id),n.id)})),i:e.t(c.value?"✕ 收起自定义":"⚙ 自定义节奏"),j:e.o(k,"29"),k:c.value},c.value?{l:e.o(n=>r(-5),"71"),m:e.o(n=>r(-1),"5b"),n:e.t(d.value),o:e.o(n=>r(1),"90"),p:e.o(n=>r(5),"b0"),q:e.f([2,3,4],(n,O,P)=>({a:e.t(n),b:n,c:g.value===n?1:"",d:e.o(w=>h(n),n)}))}:{},{r:e.s(y.value)})}}),B=e._export_sfc($,[["__scopeId","data-v-a75aa31b"]]);wx.createPage(B);
//# sourceMappingURL=../../../.sourcemap/mp-weixin/training/pages/metronome.js.map