การรัน OpenVoice V2 บนเบราว์เซอร์

ผมได้สร้างเวิร์กโฟลว์การโคลนเสียงแบบหลายภาษาที่ทำงานแบบ Local สำหรับ Timeline Studio ทุกอย่างทำงานภายในเบราว์เซอร์ ดังนั้นข้อมูลเสียงหรือการบันทึกเสียงอ้างอิงจะไม่หลุดออกจากอุปกรณ์ของคุณเลย ช่วยให้ข้อมูลของคุณเป็นส่วนตัวและทำงานได้อย่างรวดเร็ว

ระบบนี้รัน OpenVoice V2 ด้วย FP16 ONNX, WebGPU และ IndexedDB

ขั้นตอนการทำงานของเวิร์กโฟลว์

  • เลือกภาษาและเสียงพื้นฐาน
  • สร้างเสียงต้นฉบับ
  • อัปโหลดหรือบันทึกเสียงอ้างอิง
  • สกัด speaker embeddings
  • รันการแปลงโทนสีเสียง (tone-color conversion)
  • ดูตัวอย่างและบันทึกผลลัพธ์

รายละเอียดทางเทคนิค

เอนจินถูกแบ่งออกเป็นสองส่วน ได้แก่ reference encoder ที่ใช้ WASM และ converter ที่ขับเคลื่อนด้วย WebGPU หาก WebGPU ทำงานไม่ได้ ตัว converter จะสลับไปใช้ WASM แทน เพื่อให้ทุกคนสามารถใช้งานได้

ผมเลือกใช้ FP16 สำหรับโมเดลที่ใช้งานจริง แม้จะมี FP8 อยู่ แต่การรองรับบนเบราว์เซอร์ยังไม่เสถียรพอ ในปัจจุบัน FP16 ให้ความสมดุลระหว่างความเร็วและคุณภาพเสียงได้ดีที่สุด

เพื่อให้ UI ลื่นไหล ผมได้ย้ายเส้นทางการประมวลผล (inference path) ทั้งหมดไปไว้ใน Web Worker ซึ่งช่วยป้องกันไม่ให้เบราว์เซอร์ค้างระหว่างการประมวลผลหนักๆ ผมใช้ ArrayBuffer แบบ transferable เพื่อส่งผ่านข้อมูลเสียงโดยไม่ทำให้ระบบช้าลง

ขั้นตอนการรักษาคุณภาพเสียง

  • รีแซมเปิล (Resample) เป็น 22,050 Hz
  • ใช้ STFT สำหรับการแปลง
  • ล้างส่วนหางเสียง (tails) โดยอัตโนมัติโดยใช้ RMS activity
  • ทำ Soft-limit สัญญาณเพื่อหลีกเลี่ยงการเกิด clipping เมื่อระดับเสียงสูง

การจัดเก็บข้อมูล

ผมจัดเก็บโปรไฟล์ผู้พูดไว้ใน IndexedDB ทำให้คุณสามารถนำเสียงเดิมไปใช้กับภาษาอื่นได้โดยไม่ต้องรัน encoder ใหม่

นอกจากนี้ผมยังเพิ่มระบบ smart caching โดยโมเดลจะดาวน์โหลดแบบขนานจาก Hugging Face หรือ ModelScope หากแคชของเบราว์เซอร์เต็ม ระบบจะรันโมเดลจากหน่วยความจำแทนที่จะแจ้งข้อผิดพลาด

โปรเจกต์นี้เป็นมากกว่าแค่โมเดล ONNX แต่มันคือระบบที่สมบูรณ์สำหรับการส่งมอบโมเดล, การสำรองการทำงานด้วยฮาร์ดแวร์ (hardware fallback) และการจัดเก็บข้อมูลในเครื่อง (local data persistence)

Repository: https://github.com/MartinDelophy/ai-video-editor

Full technical breakdown: https://dev.to/martindelophy/running-openvoice-v2-in-the-browser-with-fp16-onnx-webgpu-and-indexeddb-50kl

Optional learning community: https://t.me/GyaanSetuAi