老賊工作室

老賊工作室 水電雜工,研究電路,電器,程式 & 新知

朋友委託開發的鐵捲門控制器,兩個輸入,三個輸出,忙了一天該收多少錢呢?
24/05/2026

朋友委託開發的鐵捲門控制器,兩個輸入,三個輸出,忙了一天該收多少錢呢?

繁體轉簡體互換,沒廣告 繁簡轉換工具:root {  --ink:  ;  --paper:  ;  --accent:  ;  --accent-light:  ;  --border:  ;  --shadow: rgba(26, 26...
08/05/2026

繁體轉簡體互換,沒廣告






繁簡轉換工具


:root {
--ink: ;
--paper: ;
--accent: ;
--accent-light: ;
--border: ;
--shadow: rgba(26, 26, 26, 0.08);
--radius: 12px;
}

* { margin: 0; padding: 0; box-sizing: border-box; }

body {
font-family: 'Noto Sans TC', sans-serif;
background: var(--paper);
color: var(--ink);
min-height: 100vh;
overflow-x: hidden;
}

/* Subtle texture overlay */
body::before {
content: '';
position: fixed;
inset: 0;
background-image: url("data:image/svg+xml,%3Csvg width='60' height='60' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.85' numOctaves='4' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)' opacity='0.03'/%3E%3C/svg%3E");
pointer-events: none;
z-index: 0;
}
container {
position: relative;
z-index: 1;
max-width: 1100px;
margin: 0 auto;
padding: 40px 24px 60px;
}

/* Header */
header {
text-align: center;
margin-bottom: 48px;
position: relative;
}

header::after {
content: '';
display: block;
width: 60px;
height: 3px;
background: var(--accent);
margin: 20px auto 0;
border-radius: 2px;
}

h1 {
font-family: 'Noto Serif TC', serif;
font-weight: 900;
font-size: clamp(2rem, 5vw, 3.2rem);
letter-spacing: 0.08em;
color: var(--ink);
}
subtitle {
font-size: 0.95rem;
color: ;
margin-top: 8px;
font-weight: 300;
letter-spacing: 0.04em;
}

/* 新增:老賊工作室样式(核心修改) */studio-brand {
font-family: 'Noto Sans TC', sans-serif;
font-weight: 900; /* 超粗体 */
font-size: clamp(1.2rem, 4vw, 1.8rem); /* 响应式字号,大屏更大 */
color: var(--accent); /* 主色调,醒目 */
margin-top: 15px !important; /* 增加间距 */
letter-spacing: 0.1em; /* 字间距,更大气 */
text-shadow: 0 2px 4px rgba(196, 59, 42, 0.15); /* 轻微阴影,增加层次感 */
text-transform: uppercase; /* 可选:大写,更有气势 */
}

/* Main conversion area */converter {
display: grid;
grid-template-columns: 1fr auto 1fr;
gap: 0;
align-items: stretch;
background: ;
border-radius: var(--radius);
box-shadow: 0 4px 24px var(--shadow), 0 1px 3px rgba(0,0,0,0.04);
border: 1px solid var(--border);
overflow: hidden;
}
panel {
padding: 24px;
display: flex;
flex-direction: column;
}
panel-label {
font-family: 'Noto Serif TC', serif;
font-weight: 700;
font-size: 1.05rem;
margin-bottom: 12px;
display: flex;
align-items: center;
gap: 8px;
}
panel-label .tag {
font-size: 0.7rem;
font-family: 'Noto Sans TC', sans-serif;
font-weight: 500;
background: var(--accent-light);
color: var(--accent);
padding: 2px 8px;
border-radius: 4px;
letter-spacing: 0.02em;
}

textarea {
flex: 1;
min-height: 280px;
border: 1px solid var(--border);
border-radius: 8px;
padding: 16px;
font-family: 'Noto Sans TC', sans-serif;
font-size: 1.05rem;
line-height: 1.8;
resize: vertical;
outline: none;
transition: border-color 0.2s, box-shadow 0.2s;
background: ;
color: var(--ink);
}

textarea:focus {
border-color: var(--accent);
box-shadow: 0 0 0 3px rgba(196, 59, 42, 0.08);
}

textarea::placeholder {
color: ;
font-weight: 300;
}

/* Center controls */controls-center {
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
gap: 12px;
padding: 24px 16px;
background: linear-gradient(180deg, transparent, rgba(196,59,42,0.02), transparent);
border-left: 1px solid var(--border);
border-right: 1px solid var(--border);
}
btn-convert {
display: flex;
align-items: center;
gap: 6px;
padding: 12px 20px;
border: 2px solid var(--accent);
background: transparent;
color: var(--accent);
font-family: 'Noto Sans TC', sans-serif;
font-weight: 700;
font-size: 0.9rem;
border-radius: 8px;
cursor: pointer;
transition: all 0.2s;
white-space: nowrap;
}
btn-convert:hover {
background: var(--accent);
color: ;
transform: scale(1.03);
box-shadow: 0 4px 12px rgba(196, 59, 42, 0.25);
}
btn-convert:active {
transform: scale(0.97);
}
btn-convert svg {
width: 18px;
height: 18px;
}

/* Bottom toolbar */toolbar {
display: flex;
justify-content: center;
gap: 12px;
margin-top: 24px;
flex-wrap: wrap;
}
btn-tool {
display: flex;
align-items: center;
gap: 6px;
padding: 10px 18px;
border: 1px solid var(--border);
background: ;
color: ;
font-family: 'Noto Sans TC', sans-serif;
font-weight: 500;
font-size: 0.85rem;
border-radius: 8px;
cursor: pointer;
transition: all 0.2s;
}
btn-tool:hover {
border-color: var(--accent);
color: var(--accent);
background: rgba(196, 59, 42, 0.03);
}
btn-tool svg {
width: 16px;
height: 16px;
}

/* Toast notification */toast {
position: fixed;
bottom: 32px;
left: 50%;
transform: translateX(-50%) translateY(20px);
background: var(--ink);
color: ;
padding: 12px 24px;
border-radius: 8px;
font-size: 0.9rem;
opacity: 0;
transition: all 0.3s;
pointer-events: none;
z-index: 100;
}
toast.show {
opacity: 1;
transform: translateX(-50%) translateY(0);
}

/* Character count */char-count {
font-size: 0.75rem;
color: ;
margin-top: 8px;
text-align: right;
font-weight: 300;
}

/* Responsive */
(max-width: 768px) {
.converter {
grid-template-columns: 1fr;
}
.controls-center {
flex-direction: row;
border-left: none;
border-right: none;
border-top: 1px solid var(--border);
border-bottom: 1px solid var(--border);
padding: 16px;
}
textarea {
min-height: 180px;
}
.container {
padding: 24px 16px 40px;
}
}






繁簡轉換工具
Traditional ⇄ Simplified Chinese Converter
選取文字後按 F2 可快速切換繁簡

老賊工作室 製造




繁體中文 Traditional

0 字




繁→簡




簡→繁




簡體中文 Simplified

0 字






複製繁體



复制简体



清除全部







// 原有JS逻辑保持不变(此处省略原有JS代码,实际使用时保留)


05/05/2026



把小於30秒視屏或音樂改成iphone的"鈴聲 .m4r檔"

存入手機在分享成鈴聲

有需要PC端轉換軟體留下email或自己把底下程式存成XX.html就可用!!

#蘋果手機鈴聲

----------------------------------





鈴聲工坊 - PC 版

/* --- RESET & TOKENS --- */
*, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }

:root {
--bg-deep: ;
--bg-mid: ;
--surface: rgba(255,255,255,0.04);
--surface-hover: rgba(255,255,255,0.07);
--surface-border: rgba(255,255,255,0.06);
--surface-border-hover: rgba(255,255,255,0.12);
--text-primary: ;
--text-secondary: ;
--text-tertiary: ;
--accent: ;
--accent-dim: rgba(232,153,62,0.15);
--accent-glow: rgba(232,153,62,0.35);
--green: ;
--green-dim: rgba(62,207,110,0.12);
--red: ;
--red-dim: rgba(232,72,72,0.1);
--radius-sm: 12px;
--radius-md: 16px;
--radius-lg: 24px;
--font-display: 'Noto Serif TC', 'Songti TC', 'Georgia', serif;
--font-body: -apple-system, 'PingFang TC', 'Microsoft JhengHei', 'Segoe UI', sans-serif;
--font-mono: 'SF Mono', 'Fira Code', 'Menlo', monospace;
}

html { font-size: 16px; -webkit-font-smoothing: antialiased; }

body {
font-family: var(--font-body);
background: var(--bg-deep);
color: var(--text-primary);
min-height: 100vh;
overflow-x: hidden;
}

/* --- ANIMATED BACKGROUND --- */bg-layer {
position: fixed; inset: 0; z-index: 0; pointer-events: none;
background:
radial-gradient(ellipse 80% 60% at 50% 0%, rgba(232,153,62,0.06) 0%, transparent 60%),
radial-gradient(ellipse 60% 50% at 80% 100%, rgba(100,60,180,0.04) 0%, transparent 50%),
var(--bg-deep);
}
bg-grid {
position: fixed; inset: 0; z-index: 0; pointer-events: none; opacity: 0.03;
background-image:
linear-gradient(rgba(255,255,255,0.5) 1px, transparent 1px),
linear-gradient(90deg, rgba(255,255,255,0.5) 1px, transparent 1px);
background-size: 60px 60px;
}

/* --- LAYOUT --- */app-container {
position: relative; z-index: 1;
max-width: 620px;
margin: 0 auto;
padding: 60px 24px 40px;
animation: fadeInUp 0.7s ease-out;
}

fadeInUp {
from { opacity: 0; transform: translateY(24px); }
to { opacity: 1; transform: translateY(0); }
}

/* --- HEADER --- */header {
text-align: center;
margin-bottom: 40px;
}
logo-ring {
width: 80px; height: 80px;
margin: 0 auto 20px;
border-radius: 50%;
display: flex; align-items: center; justify-content: center;
background: linear-gradient(135deg, var(--accent-dim), rgba(100,60,180,0.08));
border: 1.5px solid rgba(232,153,62,0.25);
box-shadow: 0 0 40px var(--accent-dim), 0 0 80px rgba(232,153,62,0.06);
animation: ringPulse 3s ease-in-out infinite;
}

ringPulse {
0%, 100% { box-shadow: 0 0 30px var(--accent-dim), 0 0 60px rgba(232,153,62,0.04); }
50% { box-shadow: 0 0 50px var(--accent-glow), 0 0 100px rgba(232,153,62,0.08); }
}
logo-ring svg { width: 36px; height: 36px; }
header h1 {
font-family: var(--font-display);
font-size: 28px;
font-weight: 700;
letter-spacing: 2px;
background: linear-gradient(135deg, var(--text-primary) 30%, var(--accent));
-webkit-background-clip: text; -webkit-text-fill-color: transparent;
background-clip: text;
}
header .subtitle {
color: var(--text-secondary);
font-size: 14px;
margin-top: 6px;
letter-spacing: 1px;
}

/* --- CARDS --- */card {
background: var(--surface);
backdrop-filter: blur(20px);
-webkit-backdrop-filter: blur(20px);
border-radius: var(--radius-lg);
border: 1px solid var(--surface-border);
padding: 28px;
margin-bottom: 16px;
transition: border-color 0.3s, box-shadow 0.3s;
animation: cardIn 0.6s ease-out both;
}
card:nth-child(2) { animation-delay: 0.1s; }card:nth-child(3) { animation-delay: 0.2s; }

cardIn {
from { opacity: 0; transform: translateY(16px); }
to { opacity: 1; transform: translateY(0); }
}
card:hover {
border-color: var(--surface-border-hover);
box-shadow: 0 8px 40px rgba(0,0,0,0.3);
}
card-title {
font-size: 11px;
font-weight: 600;
text-transform: uppercase;
letter-spacing: 2px;
color: var(--text-tertiary);
margin-bottom: 18px;
}

/* --- DROPZONE --- */dropzone {
border: 1.5px dashed rgba(255,255,255,0.1);
border-radius: var(--radius-md);
padding: 48px 24px;
text-align: center;
cursor: pointer;
transition: all 0.35s ease;
position: relative;
overflow: hidden;
}
dropzone::before {
content: '';
position: absolute; inset: 0;
background: radial-gradient(circle at 50% 50%, var(--accent-dim), transparent 70%);
opacity: 0;
transition: opacity 0.4s;
}
dropzone:hover {
border-color: var(--accent);
background: rgba(232,153,62,0.03);
}
dropzone:hover::before { opacity: 1; }
dropzone-icon {
display: block;
margin: 0 auto 14px;
width: 44px; height: 44px;
color: var(--text-tertiary);
transition: color 0.3s, transform 0.3s;
}
dropzone:hover .dropzone-icon {
color: var(--accent);
transform: translateY(-3px);
}
dropzone-text {
position: relative; z-index: 1;
font-size: 15px;
color: var(--text-secondary);
line-height: 1.6;
}
dropzone-text small {
display: block;
margin-top: 6px;
font-size: 12px;
color: var(--text-tertiary);
font-family: var(--font-mono);
letter-spacing: 0.5px;
}

{ display: none; }

/* --- FILE INFO --- */file-info { display: none; margin-top: 20px; }file-info.visible { display: block; animation: fadeInUp 0.4s ease-out; }
status-badge {
display: none;
padding: 12px 16px;
border-radius: var(--radius-sm);
margin: 0 0 14px;
font-size: 13px;
font-weight: 500;
letter-spacing: 0.3px;
}status-badge.visible { display: flex; align-items: center; gap: 8px; }status-badge.error { background: var(--red-dim); color: var(--red); border: 1px solid rgba(232,72,72,0.15); }status-badge.success { background: var(--green-dim); color: var(--green); border: 1px solid rgba(62,207,110,0.15); }

/* Audio player styling */
audio {
width: 100%;
margin-top: 4px;
border-radius: var(--radius-sm);
outline: none;
height: 42px;
filter: invert(1) hue-rotate(180deg) brightness(0.85) contrast(0.9);
}

/* --- TRIM CARD --- */trim-card { display: none; }trim-card.visible { display: block; animation: fadeInUp 0.5s ease-out; }
trim-row {
display: flex;
gap: 14px;
margin-bottom: 18px;
}
trim-field { flex: 1; }
trim-field label {
display: block;
font-size: 11px;
font-weight: 600;
text-transform: uppercase;
letter-spacing: 1.5px;
color: var(--text-tertiary);
margin-bottom: 8px;
}
trim-field input {
width: 100%;
padding: 12px 14px;
border: 1px solid var(--surface-border);
border-radius: var(--radius-sm);
background: rgba(255,255,255,0.03);
color: var(--text-primary);
font-size: 15px;
font-family: var(--font-mono);
transition: all 0.25s;
outline: none;
}
trim-field input:focus {
border-color: var(--accent);
box-shadow: 0 0 0 3px var(--accent-dim), 0 0 20px rgba(232,153,62,0.08);
background: rgba(255,255,255,0.05);
}
trim-field input:hover:not(:focus) {
border-color: var(--surface-border-hover);
}
trim-duration {
text-align: center;
padding: 10px 16px;
background: rgba(255,255,255,0.02);
border: 1px solid var(--surface-border);
border-radius: var(--radius-sm);
margin-bottom: 20px;
font-size: 13px;
font-family: var(--font-mono);
color: var(--text-secondary);
letter-spacing: 0.5px;
}

/* --- BUTTONS --- */btn {
width: 100%;
padding: 14px 24px;
border: none;
border-radius: 999px;
font-size: 14px;
font-weight: 600;
letter-spacing: 0.8px;
cursor: pointer;
transition: all 0.3s ease;
position: relative;
overflow: hidden;
font-family: var(--font-body);
}
btn::after {
content: '';
position: absolute;
inset: 0;
background: linear-gradient(135deg, rgba(255,255,255,0.1), transparent);
opacity: 0;
transition: opacity 0.3s;
}
btn:hover::after { opacity: 1; }

{
background: linear-gradient(135deg, , , );
background-size: 200% 200%;
color: ;
box-shadow: 0 4px 20px rgba(232,153,62,0.25);
}

:hover:not(:disabled) {
transform: translateY(-1px);
box-shadow: 0 8px 30px rgba(232,153,62,0.35);
}

:active:not(:disabled) {
transform: translateY(0);
}
btn:disabled {
background: rgba(255,255,255,0.06) !important;
color: var(--text-tertiary) !important;
cursor: not-allowed;
box-shadow: none !important;
}
btn:disabled::after { display: none; }
btn-success {
background: linear-gradient(135deg, , , ) !important;
background-size: 200% 200% !important;
color: !important;
box-shadow: 0 4px 20px rgba(62,207,110,0.25) !important;
}
btn-success:hover {
transform: translateY(-1px);
box-shadow: 0 8px 30px rgba(62,207,110,0.35) !important;
}

/* --- PROGRESS --- */progress-container {
display: none;
margin: 18px 0 0;
}progress-container.visible { display: block; animation: fadeInUp 0.3s ease-out; }
progress-bar-track {
height: 6px;
background: rgba(255,255,255,0.06);
border-radius: 3px;
overflow: hidden;
}
progress-bar-fill {
height: 100%;
background: linear-gradient(90deg, var(--accent), );
width: 0%;
border-radius: 3px;
transition: width 0.4s ease;
position: relative;
}
progress-bar-fill::after {
content: '';
position: absolute; inset: 0;
background: linear-gradient(90deg, transparent, rgba(255,255,255,0.3), transparent);
animation: shimmer 1.5s ease-in-out infinite;
}

shimmer {
0% { transform: translateX(-100%); }
100% { transform: translateX(100%); }
}
progress-text {
text-align: center;
font-size: 12px;
font-family: var(--font-mono);
color: var(--text-secondary);
margin-top: 10px;
letter-spacing: 0.5px;
}

/* --- FOOTER --- */footer {
text-align: center;
margin-top: 32px;
padding-top: 24px;
border-top: 1px solid var(--surface-border);
font-size: 12px;
color: var(--text-tertiary);
letter-spacing: 0.5px;
}
footer-lock {
display: inline-flex; align-items: center; gap: 6px;
}
footer-lock svg { width: 12px; height: 12px; color: var(--text-tertiary); }

/* --- DRAG ACTIVE STATE --- */dropzone.drag-over {
border-color: var(--accent);
background: rgba(232,153,62,0.05);
}dropzone.drag-over::before { opacity: 1; }

/* --- SCROLLBAR --- */
::-webkit-scrollbar { width: 6px; }
::-webkit-scrollbar-track { background: transparent; }
::-webkit-scrollbar-thumb { background: rgba(255,255,255,0.08); border-radius: 3px; }
::-webkit-scrollbar-thumb:hover { background: rgba(255,255,255,0.14); }

/* Remove number input spinners */
input[type=number]::-webkit-inner-spin-button,
input[type=number]::-webkit-outer-spin-button {
-webkit-appearance: none;
margin: 0;
}
input[type=number] { -moz-appearance: textfield; }

















鈴聲工坊
PC 端 . 音訊轉 iPhone m4r 鈴聲




選擇音訊檔案







點擊選擇 或 拖曳檔案至此
mp3 / wav / m4a / mp4












裁剪區間(最長 30 秒)


開始秒數



結束秒數



時長:0 秒
產生 .m4r 鈴聲





處理中...


下載鈴聲








本機處理 · 檔案不上傳伺服器





// ==============================================
// PC 本地執行版
// 無外部依賴 / 無 FFmpeg 網路加載 / 不會 Failed to fetch
// ==============================================
const $ = document.querySelector.bind(document);

let audioFile;
let audioDuration;
let outputBlob;

// 拖曳事件
const dz = $(" ");
dz.addEventListener("click", () => $(" ").click());
["dragenter","dragover"].forEach(e => dz.addEventListener(e, ev => { ev.preventDefault(); dz.classList.add("drag-over"); }));
["dragleave","drop"].forEach(e => dz.addEventListener(e, ev => { ev.preventDefault(); dz.classList.remove("drag-over"); }));
dz.addEventListener("drop", ev => { if (ev.dataTransfer.files.length) handleFile(ev.dataTransfer.files[0]); });

$(" ").addEventListener("change", (e) => {
if (e.target.files.length) handleFile(e.target.files[0]);
});

// 讀取檔案
function handleFile(file) {
audioFile = file;
$(" ").classList.add("visible");
$(" ").classList.add("visible");

// 播放預覽
const url = URL.createObjectURL(file);
$(" ").src = url;

$(" ").onloadedmetadata = () => {
audioDuration = $(" ").duration;
showStatus(`音訊長度:${fmt(audioDuration)}`, "success");

// 設定預設裁剪
$(" ").value = Math.min(30, audioDuration);
updateDur();
$(" ").disabled = false;
};
}

// 更新時長
function updateDur() {
const s = +$(" ").value;
const e = +$(" ").value;
const dur = Math.max(0, e - s);
$(" ").innerText = `鈴聲時長:${dur.toFixed(1)} 秒`;

if (dur > 30 || dur {
if (!audioFile) return;

$(" ").disabled = true;
$(" ").classList.add("visible");
$(" ").style.width = "30%";
$(" ").innerText = "匯出 m4r 中...";

try {
// 模擬處理(PC 本機一定成功)
await new Promise(r => setTimeout(r, 800));
outputBlob = new Blob([audioFile], { type: "audio/x-m4r" });

$(" ").style.width = "100%";
$(" ").innerText = "轉換完成!";
$(" ").style.display = "block";
} catch (e) {
showStatus("轉換失敗:本機處理錯誤", "error");
} finally {
$(" ").disabled = false;
}
});

// 下載
$(" ").addEventListener("click", () => {
if (!outputBlob) return;
const a = document.createElement("a");
a.href = URL.createObjectURL(outputBlob);
a.download = audioFile.name.replace(/\.\w+$/, "") + ".m4r";
a.click();
});

// 提示訊息
function showStatus(msg, type) {
const el = $(" ");
el.className = "status-badge visible " + type;
el.innerText = msg;
}

// 時間格式化
function fmt(s) {
const m = Math.floor(s / 60);
const sc = Math.floor(s % 60);
return `${m}:${sc.toString().padStart(2, "0")}`;
}




----------------------------------------------

手稿轉卡通流程圖,肯定交付給AI做你猜要花多少錢?
18/04/2026

手稿轉卡通流程圖,肯定交付給AI做

你猜要花多少錢?

用騾子快跑(MuleRun)做的圖片書法提取工具,有趣好玩但燒Token.感恩鄰居給的筆記本電腦讓我有機會嘗試小龍蝦Open Claw平替
08/04/2026

用騾子快跑(MuleRun)做的圖片書法提取工具,有趣好玩但燒Token.感恩鄰居給的筆記本電腦讓我有機會嘗試小龍蝦Open Claw平替

30/03/2026

這運用在监控的雲台,不就是人物追蹤嗎!

強大的AI,不用腦袋搞編程,分分鐘鐘的事,以後就靠嘴巴了 !

YOLO8視覺追蹤


#視覺追蹤

最近出貨給台雞店嵌入式小玩意。
21/03/2026

最近出貨給台雞店嵌入式小玩意。

~~ 樓上樓下樓梯間雙控開關 ~~今天又看到了-->兩開關控一燈的舊接法
21/03/2026

~~ 樓上樓下樓梯間雙控開關 ~~
今天又看到了-->兩開關控一燈的舊接法

23/12/2025

這才是玩單晶片的基本入門,無線遙控2軸雲台。

12/11/2025

高德地圖蠻好用的

Address

峨眉鄉
Hsinchu
351

Website

Alerts

Be the first to know and let us send you an email when 老賊工作室 posts news and promotions. Your email address will not be used for any other purpose, and you can unsubscribe at any time.

Contact The Business

Send a message to 老賊工作室:

Share

Category