1
0

rvc.ts 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. export async function rvc(
  2. audio: Blob,
  3. rvc_url: string,
  4. model_name: string,
  5. index_path: string,
  6. f0up_key: number,
  7. f0method: string,
  8. index_rate: string,
  9. filter_radius: number,
  10. resample_sr: number,
  11. rms_mix_rate: number,
  12. protect: number,
  13. ) {
  14. try {
  15. // Read the Blob data as ArrayBuffer
  16. const arrayBuffer = await new Response(audio).arrayBuffer();
  17. // Convert ArrayBuffer to Blob with audio/wav MIME type
  18. const wavBlob = new Blob([arrayBuffer], { type: 'audio/wav' });
  19. const params = {
  20. model_name: model_name,
  21. index_path: index_path,
  22. f0up_key: f0up_key.toString(),
  23. f0method: f0method,
  24. index_rate: index_rate,
  25. filter_radius: filter_radius.toString(),
  26. resample_sr: resample_sr.toString(),
  27. rms_mix_rate: rms_mix_rate.toString(),
  28. protect: protect.toString(),
  29. };
  30. const formData = new FormData();
  31. formData.append('input_file', wavBlob);
  32. const url = new URL(rvc_url);
  33. Object.entries(params).forEach(([key, value]) => {
  34. url.searchParams.append(key, value);
  35. });
  36. const res = await fetch(url.toString(), {
  37. method: 'POST',
  38. body: formData
  39. });
  40. const data = (await res.arrayBuffer()) as any;
  41. return { audio: data };
  42. } catch (error) {
  43. console.error('Error in rvc:', error);
  44. throw error;
  45. }
  46. }