બ્રાઉઝરમાં OpenVoice V2 ચલાવવું

મેં Timeline Studio માટે લોકલ, બહુભાષી વૉઇસ-ક્લોનિંગ વર્કફ્લો બનાવ્યો છે. બધું જ બ્રાઉઝરની અંદર ચાલે છે, તેથી કોઈ પણ ઓડિયો ડેટા અથવા રેફરન્સ રેકોર્ડિંગ ક્યારેય તમારા ઉપકરણને છોડીને બહાર જતું નથી. આ તમારા ડેટાને ખાનગી અને ઝડપી રાખે છે.

આ સિસ્ટમ FP16 ONNX, WebGPU અને IndexedDB સાથે OpenVoice V2 ચલાવે છે.

વર્કફ્લો કેવી રીતે કામ કરે છે

  • એક ભાષા અને બેઝ વૉઇસ પસંદ કરો.
  • સોર્સ સ્પીચ જનરેટ કરો.
  • રેફરન્સ વૉઇસ અપલોડ કરો અથવા રેકોર્ડ કરો.
  • સ્પીકર એમ્બેડિંગ્સ એક્સટ્રેક્ટ કરો.
  • ટોન-કલર કન્વર્ઝન ચલાવો.
  • પરિણામનું પ્રિવ્યૂ કરો અને સેવ કરો.

ટેકનિકલ વિગતો

એન્જિન બે ભાગોમાં વહેંચાયેલું છે: એક WASM-આધારિત રેફરન્સ એન્કોડર અને બીજું WebGPU-સંચાલિત કન્વર્ટર. જો WebGPU નિષ્ફળ જાય, તો કન્વર્ટર WASM પર ફોલબેક થાય છે જેથી દરેક તેનો ઉપયોગ કરી શકે.

મેં પ્રોડક્શન મોડલ માટે FP16 પસંદ કર્યું છે. FP8 ઉપલબ્ધ છે, પરંતુ બ્રાઉઝર સપોર્ટ હજુ સ્થિર નથી. આજે FP16 ઝડપ અને ઓડિયો ક્વોલિટીનું શ્રેષ્ઠ મિશ્રણ આપે છે.

UI ને સ્મૂધ રાખવા માટે, મેં આખી ઇન્ફરન્સ પાથને Web Worker માં ખસેડી દીધી છે. તે ભારે પ્રોસેસિંગ દરમિયાન બ્રાઉઝરને ફ્રીઝ થતું અટકાવે છે. સિસ્ટમને ધીમી પાડ્યા વિના ઓડિયો ડેટા ટ્રાન્સફર કરવા માટે હું ટ્રાન્સફરેબલ ArrayBuffers નો ઉપયોગ કરું છું.

ઓડિયો ક્વોલિટીના સ્ટેપ્સ

  • 22,050 Hz પર રિસેમ્પલ કરો.
  • કન્વર્ઝન માટે STFT લાગુ કરો.
  • RMS એક્ટિવિટીનો ઉપયોગ કરીને ટેલ્સ (tails) ને આપમેળે ક્લીન કરો.
  • હાઈ વોલ્યુમ પર ક્લિપિંગ ટાળવા માટે સિગ્નલને સોફ્ટ-લિમિટ કરો.

સ્ટોરેજ

હું સ્પીકર પ્રોફાઇલ્સને IndexedDB માં સ્ટોર કરું છું, જેનાથી તમે એન્કોડરને ફરીથી ચલાવ્યા વિના વિવિધ ભાષાઓમાં એક જ વૉઇસનો ફરીથી ઉપયોગ કરી શકો છો.

મેં સ્માર્ટ કેશિંગ પણ ઉમેર્યું છે. મોડલ Hugging Face અથવા ModelScope પરથી સમાંતર રીતે ડાઉનલોડ થાય છે; જો બ્રાઉઝર કેશ ભરાઈ જાય, તો સિસ્ટમ એરર આપવાને બદલે મેમરીમાંથી મોડલ ચલાવે છે.

આ પ્રોજેક્ટ માત્ર એક ONNX મોડલ નથી—તે મોડલ ડિલિવરી, હાર્ડવેર ફોલબેક અને લોકલ ડેટા પર્સિસ્ટન્સ માટેની એક સંપૂર્ણ સિસ્ટમ છે.

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