rvcbench 2.0.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (743) hide show
  1. rvcbench/__init__.py +17 -0
  2. rvcbench/adapter.py +98 -0
  3. rvcbench/adversary/__init__.py +0 -0
  4. rvcbench/adversary/bark_voice_clone_ots.py +146 -0
  5. rvcbench/adversary/base_adversary.py +205 -0
  6. rvcbench/adversary/bertvit2_ots.py +231 -0
  7. rvcbench/adversary/bertvits2_finetune.py +53 -0
  8. rvcbench/adversary/cosyvoice_ots.py +156 -0
  9. rvcbench/adversary/dots_tts_ots.py +133 -0
  10. rvcbench/adversary/f5_tts_ots.py +176 -0
  11. rvcbench/adversary/fireredtts2_ots.py +118 -0
  12. rvcbench/adversary/fish_audio_s2_server_ots.py +188 -0
  13. rvcbench/adversary/fishspeech_ots.py +317 -0
  14. rvcbench/adversary/fishspeech_s2_ots.py +140 -0
  15. rvcbench/adversary/glmtts_ots.py +109 -0
  16. rvcbench/adversary/glowtts_ots.py +169 -0
  17. rvcbench/adversary/higgs_audio_ots.py +151 -0
  18. rvcbench/adversary/index_tts_ots.py +162 -0
  19. rvcbench/adversary/kimi_audio_ots.py +214 -0
  20. rvcbench/adversary/maskgct_ots.py +166 -0
  21. rvcbench/adversary/mgm_omni_ots.py +182 -0
  22. rvcbench/adversary/moss_tts_ots.py +141 -0
  23. rvcbench/adversary/moss_ttsd_ots.py +175 -0
  24. rvcbench/adversary/openai_speech_server_ots.py +355 -0
  25. rvcbench/adversary/openvoice_ots.py +149 -0
  26. rvcbench/adversary/ozspeech_ots.py +213 -0
  27. rvcbench/adversary/playdiffusion_ots.py +162 -0
  28. rvcbench/adversary/qwen3_omni_ots.py +254 -0
  29. rvcbench/adversary/qwen3_tts_ots.py +237 -0
  30. rvcbench/adversary/smoke.py +16 -0
  31. rvcbench/adversary/sparktts_ots.py +94 -0
  32. rvcbench/adversary/styletts2_ots.py +101 -0
  33. rvcbench/adversary/vall_e_ots.py +140 -0
  34. rvcbench/adversary/vibevoice_ots.py +179 -0
  35. rvcbench/adversary/voxcpm_ots.py +155 -0
  36. rvcbench/adversary/xtts_ots.py +281 -0
  37. rvcbench/adversary/zipvoice_ots.py +161 -0
  38. rvcbench/adversary/zonos2_ots.py +149 -0
  39. rvcbench/benchmark/__init__.py +1 -0
  40. rvcbench/benchmark/artifacts.py +252 -0
  41. rvcbench/benchmark/backends.py +278 -0
  42. rvcbench/benchmark/cli.py +268 -0
  43. rvcbench/benchmark/comparability.py +54 -0
  44. rvcbench/benchmark/comparison.py +114 -0
  45. rvcbench/benchmark/denoise_stage.py +160 -0
  46. rvcbench/benchmark/enkidu_stage.py +158 -0
  47. rvcbench/benchmark/fingerprints.py +208 -0
  48. rvcbench/benchmark/model_assets.py +369 -0
  49. rvcbench/benchmark/model_catalog.json +194 -0
  50. rvcbench/benchmark/noise_replay.py +166 -0
  51. rvcbench/benchmark/reference_stages.py +100 -0
  52. rvcbench/benchmark/registry.py +113 -0
  53. rvcbench/benchmark/reproduction.py +232 -0
  54. rvcbench/benchmark/runner.py +298 -0
  55. rvcbench/benchmark/source_audit.py +62 -0
  56. rvcbench/benchmark/submission.py +510 -0
  57. rvcbench/benchmark/subsets.py +40 -0
  58. rvcbench/benchmark/timing.py +214 -0
  59. rvcbench/configs/__init__.py +0 -0
  60. rvcbench/configs/adversary/bertvits2_ots.yaml +18 -0
  61. rvcbench/configs/dataset/aishell.yaml +32 -0
  62. rvcbench/configs/dataset/background_clean.yaml +22 -0
  63. rvcbench/configs/dataset/background_noise.yaml +30 -0
  64. rvcbench/configs/dataset/bilingual_uedin.yaml +32 -0
  65. rvcbench/configs/dataset/dummy.yaml +16 -0
  66. rvcbench/configs/dataset/french.yaml +32 -0
  67. rvcbench/configs/dataset/iemocap.yaml +27 -0
  68. rvcbench/configs/dataset/libritts.yaml +24 -0
  69. rvcbench/configs/dataset/long_librispeech.yaml +22 -0
  70. rvcbench/configs/dataset/multispeaker_libri.yaml +22 -0
  71. rvcbench/configs/dataset/robotcall.yaml +21 -0
  72. rvcbench/configs/dataset/test.yaml +18 -0
  73. rvcbench/configs/dataset/vctk.yaml +21 -0
  74. rvcbench/configs/dataset/vctk_text_robust.yaml +21 -0
  75. rvcbench/configs/denoise/denoiser_dns64_on_protected_libritts.yaml +44 -0
  76. rvcbench/configs/denoise/denoiser_dns64_on_protected_libritts_em.yaml +44 -0
  77. rvcbench/configs/denoise/denoiser_dns64_on_protected_libritts_enkidu.yaml +44 -0
  78. rvcbench/configs/denoise/denoiser_dns64_on_protected_libritts_grnoise.yaml +44 -0
  79. rvcbench/configs/denoise/denoiser_dns64_on_protected_libritts_safespeech.yaml +44 -0
  80. rvcbench/configs/denoise/denoiser_dns64_on_protected_libritts_spec.yaml +44 -0
  81. rvcbench/configs/dummy_on_dummy.yaml +17 -0
  82. rvcbench/configs/em_on_libritts.yaml +61 -0
  83. rvcbench/configs/enkidu_on_libritts.yaml +50 -0
  84. rvcbench/configs/grnoise_on_libritts.yaml +40 -0
  85. rvcbench/configs/model/BertVits2.yaml +58 -0
  86. rvcbench/configs/model/OZSpeech.yaml +7 -0
  87. rvcbench/configs/model/SpeakerRecognition.yaml +3 -0
  88. rvcbench/configs/model/default.yaml +3 -0
  89. rvcbench/configs/ots_vc/clean/aishell/bert_ots.yaml +28 -0
  90. rvcbench/configs/ots_vc/clean/aishell/cosyvoice_ots.yaml +37 -0
  91. rvcbench/configs/ots_vc/clean/aishell/dots_tts_ots.yaml +32 -0
  92. rvcbench/configs/ots_vc/clean/aishell/eval_only.yaml +27 -0
  93. rvcbench/configs/ots_vc/clean/aishell/fish_audio_s2_ots.yaml +46 -0
  94. rvcbench/configs/ots_vc/clean/aishell/fishspeech_ots.yaml +46 -0
  95. rvcbench/configs/ots_vc/clean/aishell/fishspeech_s2_ots.yaml +46 -0
  96. rvcbench/configs/ots_vc/clean/aishell/glmtts_ots.yaml +37 -0
  97. rvcbench/configs/ots_vc/clean/aishell/glowtts_ots.yaml +40 -0
  98. rvcbench/configs/ots_vc/clean/aishell/higgs_audio_ots.yaml +47 -0
  99. rvcbench/configs/ots_vc/clean/aishell/higgs_tts3_ots.yaml +43 -0
  100. rvcbench/configs/ots_vc/clean/aishell/kimi_audio_ots.yaml +43 -0
  101. rvcbench/configs/ots_vc/clean/aishell/mgm_omni_ots.yaml +41 -0
  102. rvcbench/configs/ots_vc/clean/aishell/moss_tts_ots.yaml +31 -0
  103. rvcbench/configs/ots_vc/clean/aishell/moss_ttsd_ots.yaml +41 -0
  104. rvcbench/configs/ots_vc/clean/aishell/ozspeech_ots.yaml +34 -0
  105. rvcbench/configs/ots_vc/clean/aishell/playdiffusion_ots.yaml +47 -0
  106. rvcbench/configs/ots_vc/clean/aishell/qwen3_omni_ots.yaml +58 -0
  107. rvcbench/configs/ots_vc/clean/aishell/sparktts_ots.yaml +33 -0
  108. rvcbench/configs/ots_vc/clean/aishell/styletts2_ots.yaml +37 -0
  109. rvcbench/configs/ots_vc/clean/aishell/vall_e_ots.yaml +35 -0
  110. rvcbench/configs/ots_vc/clean/aishell/vibevoice_ots.yaml +43 -0
  111. rvcbench/configs/ots_vc/clean/aishell/zonos2_ots.yaml +32 -0
  112. rvcbench/configs/ots_vc/clean/background/bert_ots.yaml +28 -0
  113. rvcbench/configs/ots_vc/clean/background/cosyvoice_ots.yaml +37 -0
  114. rvcbench/configs/ots_vc/clean/background/dots_tts_ots.yaml +32 -0
  115. rvcbench/configs/ots_vc/clean/background/eval_only.yaml +26 -0
  116. rvcbench/configs/ots_vc/clean/background/fish_audio_s2_ots.yaml +46 -0
  117. rvcbench/configs/ots_vc/clean/background/fishspeech_ots.yaml +46 -0
  118. rvcbench/configs/ots_vc/clean/background/fishspeech_s2_ots.yaml +46 -0
  119. rvcbench/configs/ots_vc/clean/background/glmtts_ots.yaml +37 -0
  120. rvcbench/configs/ots_vc/clean/background/glowtts_ots.yaml +40 -0
  121. rvcbench/configs/ots_vc/clean/background/higgs_audio_ots.yaml +47 -0
  122. rvcbench/configs/ots_vc/clean/background/higgs_tts3_ots.yaml +43 -0
  123. rvcbench/configs/ots_vc/clean/background/kimi_audio_ots.yaml +43 -0
  124. rvcbench/configs/ots_vc/clean/background/mgm_omni_ots.yaml +41 -0
  125. rvcbench/configs/ots_vc/clean/background/moss_tts_ots.yaml +31 -0
  126. rvcbench/configs/ots_vc/clean/background/moss_ttsd_ots.yaml +40 -0
  127. rvcbench/configs/ots_vc/clean/background/ozspeech_ots.yaml +34 -0
  128. rvcbench/configs/ots_vc/clean/background/playdiffusion_ots.yaml +47 -0
  129. rvcbench/configs/ots_vc/clean/background/qwen3_omni_ots.yaml +58 -0
  130. rvcbench/configs/ots_vc/clean/background/sparktts_ots.yaml +33 -0
  131. rvcbench/configs/ots_vc/clean/background/styletts2_ots.yaml +37 -0
  132. rvcbench/configs/ots_vc/clean/background/vall_e_ots.yaml +35 -0
  133. rvcbench/configs/ots_vc/clean/background/vibevoice_ots.yaml +43 -0
  134. rvcbench/configs/ots_vc/clean/background/zonos2_ots.yaml +32 -0
  135. rvcbench/configs/ots_vc/clean/background_clean/bert_ots.yaml +28 -0
  136. rvcbench/configs/ots_vc/clean/background_clean/cosyvoice_ots.yaml +37 -0
  137. rvcbench/configs/ots_vc/clean/background_clean/dots_tts_ots.yaml +32 -0
  138. rvcbench/configs/ots_vc/clean/background_clean/eval_only.yaml +26 -0
  139. rvcbench/configs/ots_vc/clean/background_clean/fish_audio_s2_ots.yaml +46 -0
  140. rvcbench/configs/ots_vc/clean/background_clean/fishspeech_ots.yaml +46 -0
  141. rvcbench/configs/ots_vc/clean/background_clean/fishspeech_s2_ots.yaml +46 -0
  142. rvcbench/configs/ots_vc/clean/background_clean/glmtts_ots.yaml +37 -0
  143. rvcbench/configs/ots_vc/clean/background_clean/glowtts_ots.yaml +40 -0
  144. rvcbench/configs/ots_vc/clean/background_clean/higgs_audio_ots.yaml +47 -0
  145. rvcbench/configs/ots_vc/clean/background_clean/higgs_tts3_ots.yaml +43 -0
  146. rvcbench/configs/ots_vc/clean/background_clean/kimi_audio_ots.yaml +43 -0
  147. rvcbench/configs/ots_vc/clean/background_clean/mgm_omni_ots.yaml +41 -0
  148. rvcbench/configs/ots_vc/clean/background_clean/moss_tts_ots.yaml +31 -0
  149. rvcbench/configs/ots_vc/clean/background_clean/moss_ttsd_ots.yaml +40 -0
  150. rvcbench/configs/ots_vc/clean/background_clean/ozspeech_ots.yaml +34 -0
  151. rvcbench/configs/ots_vc/clean/background_clean/playdiffusion_ots.yaml +47 -0
  152. rvcbench/configs/ots_vc/clean/background_clean/qwen3_omni_ots.yaml +58 -0
  153. rvcbench/configs/ots_vc/clean/background_clean/sparktts_ots.yaml +33 -0
  154. rvcbench/configs/ots_vc/clean/background_clean/styletts2_ots.yaml +37 -0
  155. rvcbench/configs/ots_vc/clean/background_clean/vall_e_ots.yaml +35 -0
  156. rvcbench/configs/ots_vc/clean/background_clean/vibevoice_ots.yaml +43 -0
  157. rvcbench/configs/ots_vc/clean/background_clean/zonos2_ots.yaml +32 -0
  158. rvcbench/configs/ots_vc/clean/bilingual_uedin/bert_ots.yaml +28 -0
  159. rvcbench/configs/ots_vc/clean/bilingual_uedin/cosyvoice_ots.yaml +37 -0
  160. rvcbench/configs/ots_vc/clean/bilingual_uedin/dots_tts_ots.yaml +32 -0
  161. rvcbench/configs/ots_vc/clean/bilingual_uedin/eval_only.yaml +26 -0
  162. rvcbench/configs/ots_vc/clean/bilingual_uedin/fish_audio_s2_ots.yaml +46 -0
  163. rvcbench/configs/ots_vc/clean/bilingual_uedin/fishspeech_ots.yaml +46 -0
  164. rvcbench/configs/ots_vc/clean/bilingual_uedin/fishspeech_s2_ots.yaml +46 -0
  165. rvcbench/configs/ots_vc/clean/bilingual_uedin/glmtts_ots.yaml +37 -0
  166. rvcbench/configs/ots_vc/clean/bilingual_uedin/glowtts_ots.yaml +40 -0
  167. rvcbench/configs/ots_vc/clean/bilingual_uedin/higgs_audio_ots.yaml +76 -0
  168. rvcbench/configs/ots_vc/clean/bilingual_uedin/higgs_tts3_ots.yaml +43 -0
  169. rvcbench/configs/ots_vc/clean/bilingual_uedin/kimi_audio_ots.yaml +43 -0
  170. rvcbench/configs/ots_vc/clean/bilingual_uedin/mgm_omni_ots.yaml +41 -0
  171. rvcbench/configs/ots_vc/clean/bilingual_uedin/moss_tts_ots.yaml +31 -0
  172. rvcbench/configs/ots_vc/clean/bilingual_uedin/moss_ttsd_ots.yaml +40 -0
  173. rvcbench/configs/ots_vc/clean/bilingual_uedin/ozspeech_ots.yaml +34 -0
  174. rvcbench/configs/ots_vc/clean/bilingual_uedin/playdiffusion_ots.yaml +47 -0
  175. rvcbench/configs/ots_vc/clean/bilingual_uedin/qwen3_omni_ots.yaml +58 -0
  176. rvcbench/configs/ots_vc/clean/bilingual_uedin/sparktts_ots.yaml +33 -0
  177. rvcbench/configs/ots_vc/clean/bilingual_uedin/styletts2_ots.yaml +37 -0
  178. rvcbench/configs/ots_vc/clean/bilingual_uedin/vall_e_ots.yaml +35 -0
  179. rvcbench/configs/ots_vc/clean/bilingual_uedin/vibevoice_ots.yaml +43 -0
  180. rvcbench/configs/ots_vc/clean/bilingual_uedin/zonos2_ots.yaml +32 -0
  181. rvcbench/configs/ots_vc/clean/french/bert_ots.yaml +28 -0
  182. rvcbench/configs/ots_vc/clean/french/cosyvoice_ots.yaml +37 -0
  183. rvcbench/configs/ots_vc/clean/french/dots_tts_ots.yaml +32 -0
  184. rvcbench/configs/ots_vc/clean/french/eval_only.yaml +26 -0
  185. rvcbench/configs/ots_vc/clean/french/fish_audio_s2_ots.yaml +46 -0
  186. rvcbench/configs/ots_vc/clean/french/fishspeech_ots.yaml +46 -0
  187. rvcbench/configs/ots_vc/clean/french/fishspeech_s2_ots.yaml +46 -0
  188. rvcbench/configs/ots_vc/clean/french/glmtts_ots.yaml +37 -0
  189. rvcbench/configs/ots_vc/clean/french/glowtts_ots.yaml +40 -0
  190. rvcbench/configs/ots_vc/clean/french/higgs_audio_ots.yaml +47 -0
  191. rvcbench/configs/ots_vc/clean/french/higgs_tts3_ots.yaml +43 -0
  192. rvcbench/configs/ots_vc/clean/french/kimi_audio_ots.yaml +43 -0
  193. rvcbench/configs/ots_vc/clean/french/mgm_omni_ots.yaml +41 -0
  194. rvcbench/configs/ots_vc/clean/french/moss_tts_ots.yaml +31 -0
  195. rvcbench/configs/ots_vc/clean/french/moss_ttsd_ots.yaml +40 -0
  196. rvcbench/configs/ots_vc/clean/french/ozspeech_ots.yaml +34 -0
  197. rvcbench/configs/ots_vc/clean/french/playdiffusion_ots.yaml +47 -0
  198. rvcbench/configs/ots_vc/clean/french/qwen3_omni_ots.yaml +58 -0
  199. rvcbench/configs/ots_vc/clean/french/sparktts_ots.yaml +33 -0
  200. rvcbench/configs/ots_vc/clean/french/styletts2_ots.yaml +37 -0
  201. rvcbench/configs/ots_vc/clean/french/vall_e_ots.yaml +35 -0
  202. rvcbench/configs/ots_vc/clean/french/vibevoice_ots.yaml +43 -0
  203. rvcbench/configs/ots_vc/clean/french/zonos2_ots.yaml +32 -0
  204. rvcbench/configs/ots_vc/clean/libritts/bark_voice_clone_ots.yaml +28 -0
  205. rvcbench/configs/ots_vc/clean/libritts/bert_ots.yaml +28 -0
  206. rvcbench/configs/ots_vc/clean/libritts/cosyvoice_ots.yaml +38 -0
  207. rvcbench/configs/ots_vc/clean/libritts/custom_ots.yaml +33 -0
  208. rvcbench/configs/ots_vc/clean/libritts/dots_tts_ots.yaml +33 -0
  209. rvcbench/configs/ots_vc/clean/libritts/eval_only.yaml +26 -0
  210. rvcbench/configs/ots_vc/clean/libritts/f5_tts_ots.yaml +48 -0
  211. rvcbench/configs/ots_vc/clean/libritts/fireredtts2_ots.yaml +37 -0
  212. rvcbench/configs/ots_vc/clean/libritts/fireredtts2_short10_retry20_ots.yaml +11 -0
  213. rvcbench/configs/ots_vc/clean/libritts/fish_audio_s2_ots.yaml +46 -0
  214. rvcbench/configs/ots_vc/clean/libritts/fishspeech_ots.yaml +46 -0
  215. rvcbench/configs/ots_vc/clean/libritts/fishspeech_s2_ots.yaml +46 -0
  216. rvcbench/configs/ots_vc/clean/libritts/glmtts_ots.yaml +36 -0
  217. rvcbench/configs/ots_vc/clean/libritts/glowtts_ots.yaml +40 -0
  218. rvcbench/configs/ots_vc/clean/libritts/higgs_audio_ots.yaml +47 -0
  219. rvcbench/configs/ots_vc/clean/libritts/higgs_tts3_ots.yaml +43 -0
  220. rvcbench/configs/ots_vc/clean/libritts/index_tts_ots.yaml +54 -0
  221. rvcbench/configs/ots_vc/clean/libritts/kimi_audio_ots.yaml +44 -0
  222. rvcbench/configs/ots_vc/clean/libritts/maskgct_ots.yaml +49 -0
  223. rvcbench/configs/ots_vc/clean/libritts/mgm_omni_ots.yaml +41 -0
  224. rvcbench/configs/ots_vc/clean/libritts/moss_tts_ots.yaml +33 -0
  225. rvcbench/configs/ots_vc/clean/libritts/moss_ttsd_ots.yaml +41 -0
  226. rvcbench/configs/ots_vc/clean/libritts/openvoice_ots.yaml +60 -0
  227. rvcbench/configs/ots_vc/clean/libritts/ozspeech_ots.yaml +34 -0
  228. rvcbench/configs/ots_vc/clean/libritts/playdiffusion_ots.yaml +47 -0
  229. rvcbench/configs/ots_vc/clean/libritts/qwen3_omni_ots.yaml +58 -0
  230. rvcbench/configs/ots_vc/clean/libritts/qwen3_tts_ots.yaml +46 -0
  231. rvcbench/configs/ots_vc/clean/libritts/sparktts_ots.yaml +35 -0
  232. rvcbench/configs/ots_vc/clean/libritts/styletts2_ots.yaml +37 -0
  233. rvcbench/configs/ots_vc/clean/libritts/vall_e_amphion_ots.yaml +11 -0
  234. rvcbench/configs/ots_vc/clean/libritts/vall_e_ots.yaml +35 -0
  235. rvcbench/configs/ots_vc/clean/libritts/vibevoice_ots.yaml +43 -0
  236. rvcbench/configs/ots_vc/clean/libritts/voxcpm_05_legacy_ots.yaml +13 -0
  237. rvcbench/configs/ots_vc/clean/libritts/voxcpm_ots.yaml +46 -0
  238. rvcbench/configs/ots_vc/clean/libritts/xtts_ots.yaml +50 -0
  239. rvcbench/configs/ots_vc/clean/libritts/zipvoice_ots.yaml +52 -0
  240. rvcbench/configs/ots_vc/clean/libritts/zonos2_ots.yaml +39 -0
  241. rvcbench/configs/ots_vc/clean/long_librispeech/README.md +26 -0
  242. rvcbench/configs/ots_vc/clean/long_librispeech/bert_ots.yaml +28 -0
  243. rvcbench/configs/ots_vc/clean/long_librispeech/cosyvoice_ots.yaml +37 -0
  244. rvcbench/configs/ots_vc/clean/long_librispeech/dots_tts_ots.yaml +32 -0
  245. rvcbench/configs/ots_vc/clean/long_librispeech/eval_only.yaml +26 -0
  246. rvcbench/configs/ots_vc/clean/long_librispeech/fish_audio_s2_ots.yaml +46 -0
  247. rvcbench/configs/ots_vc/clean/long_librispeech/fishspeech_ots.yaml +46 -0
  248. rvcbench/configs/ots_vc/clean/long_librispeech/fishspeech_s2_ots.yaml +46 -0
  249. rvcbench/configs/ots_vc/clean/long_librispeech/glmtts_ots.yaml +37 -0
  250. rvcbench/configs/ots_vc/clean/long_librispeech/glowtts_ots.yaml +40 -0
  251. rvcbench/configs/ots_vc/clean/long_librispeech/higgs_audio_ots.yaml +47 -0
  252. rvcbench/configs/ots_vc/clean/long_librispeech/higgs_tts3_ots.yaml +43 -0
  253. rvcbench/configs/ots_vc/clean/long_librispeech/kimi_audio_ots.yaml +43 -0
  254. rvcbench/configs/ots_vc/clean/long_librispeech/mgm_omni_ots.yaml +41 -0
  255. rvcbench/configs/ots_vc/clean/long_librispeech/moss_tts_ots.yaml +31 -0
  256. rvcbench/configs/ots_vc/clean/long_librispeech/moss_ttsd_ots.yaml +40 -0
  257. rvcbench/configs/ots_vc/clean/long_librispeech/ozspeech_ots.yaml +34 -0
  258. rvcbench/configs/ots_vc/clean/long_librispeech/playdiffusion_ots.yaml +47 -0
  259. rvcbench/configs/ots_vc/clean/long_librispeech/qwen3_omni_ots.yaml +58 -0
  260. rvcbench/configs/ots_vc/clean/long_librispeech/sparktts_ots.yaml +33 -0
  261. rvcbench/configs/ots_vc/clean/long_librispeech/styletts2_ots.yaml +37 -0
  262. rvcbench/configs/ots_vc/clean/long_librispeech/vall_e_ots.yaml +35 -0
  263. rvcbench/configs/ots_vc/clean/long_librispeech/vibevoice_ots.yaml +43 -0
  264. rvcbench/configs/ots_vc/clean/long_librispeech/zonos2_ots.yaml +32 -0
  265. rvcbench/configs/ots_vc/clean/multispeaker_libri/README.md +26 -0
  266. rvcbench/configs/ots_vc/clean/multispeaker_libri/bert_ots.yaml +28 -0
  267. rvcbench/configs/ots_vc/clean/multispeaker_libri/cosyvoice_ots.yaml +37 -0
  268. rvcbench/configs/ots_vc/clean/multispeaker_libri/dots_tts_ots.yaml +32 -0
  269. rvcbench/configs/ots_vc/clean/multispeaker_libri/eval_only.yaml +26 -0
  270. rvcbench/configs/ots_vc/clean/multispeaker_libri/fish_audio_s2_ots.yaml +46 -0
  271. rvcbench/configs/ots_vc/clean/multispeaker_libri/fishspeech_ots.yaml +46 -0
  272. rvcbench/configs/ots_vc/clean/multispeaker_libri/fishspeech_s2_ots.yaml +46 -0
  273. rvcbench/configs/ots_vc/clean/multispeaker_libri/glmtts_ots.yaml +37 -0
  274. rvcbench/configs/ots_vc/clean/multispeaker_libri/glowtts_ots.yaml +40 -0
  275. rvcbench/configs/ots_vc/clean/multispeaker_libri/higgs_audio_ots.yaml +76 -0
  276. rvcbench/configs/ots_vc/clean/multispeaker_libri/higgs_tts3_ots.yaml +43 -0
  277. rvcbench/configs/ots_vc/clean/multispeaker_libri/kimi_audio_ots.yaml +43 -0
  278. rvcbench/configs/ots_vc/clean/multispeaker_libri/mgm_omni_ots.yaml +41 -0
  279. rvcbench/configs/ots_vc/clean/multispeaker_libri/moss_tts_ots.yaml +31 -0
  280. rvcbench/configs/ots_vc/clean/multispeaker_libri/moss_ttsd_ots.yaml +40 -0
  281. rvcbench/configs/ots_vc/clean/multispeaker_libri/ozspeech_ots.yaml +34 -0
  282. rvcbench/configs/ots_vc/clean/multispeaker_libri/playdiffusion_ots.yaml +47 -0
  283. rvcbench/configs/ots_vc/clean/multispeaker_libri/qwen3_omni_ots.yaml +58 -0
  284. rvcbench/configs/ots_vc/clean/multispeaker_libri/sparktts_ots.yaml +33 -0
  285. rvcbench/configs/ots_vc/clean/multispeaker_libri/styletts2_ots.yaml +37 -0
  286. rvcbench/configs/ots_vc/clean/multispeaker_libri/vall_e_ots.yaml +35 -0
  287. rvcbench/configs/ots_vc/clean/multispeaker_libri/vibevoice_ots.yaml +43 -0
  288. rvcbench/configs/ots_vc/clean/multispeaker_libri/zonos2_ots.yaml +32 -0
  289. rvcbench/configs/ots_vc/clean/robotcall/bert_ots.yaml +28 -0
  290. rvcbench/configs/ots_vc/clean/robotcall/cosyvoice_ots.yaml +37 -0
  291. rvcbench/configs/ots_vc/clean/robotcall/dots_tts_ots.yaml +32 -0
  292. rvcbench/configs/ots_vc/clean/robotcall/eval_only.yaml +26 -0
  293. rvcbench/configs/ots_vc/clean/robotcall/fish_audio_s2_ots.yaml +46 -0
  294. rvcbench/configs/ots_vc/clean/robotcall/fishspeech_ots.yaml +46 -0
  295. rvcbench/configs/ots_vc/clean/robotcall/fishspeech_s2_ots.yaml +46 -0
  296. rvcbench/configs/ots_vc/clean/robotcall/glmtts_ots.yaml +37 -0
  297. rvcbench/configs/ots_vc/clean/robotcall/glowtts_ots.yaml +40 -0
  298. rvcbench/configs/ots_vc/clean/robotcall/higgs_audio_ots.yaml +47 -0
  299. rvcbench/configs/ots_vc/clean/robotcall/higgs_tts3_ots.yaml +43 -0
  300. rvcbench/configs/ots_vc/clean/robotcall/kimi_audio_ots.yaml +43 -0
  301. rvcbench/configs/ots_vc/clean/robotcall/mgm_omni_ots.yaml +41 -0
  302. rvcbench/configs/ots_vc/clean/robotcall/moss_tts_ots.yaml +31 -0
  303. rvcbench/configs/ots_vc/clean/robotcall/moss_ttsd_ots.yaml +40 -0
  304. rvcbench/configs/ots_vc/clean/robotcall/ozspeech_ots.yaml +34 -0
  305. rvcbench/configs/ots_vc/clean/robotcall/playdiffusion_ots.yaml +47 -0
  306. rvcbench/configs/ots_vc/clean/robotcall/qwen3_omni_ots.yaml +58 -0
  307. rvcbench/configs/ots_vc/clean/robotcall/sparktts_ots.yaml +33 -0
  308. rvcbench/configs/ots_vc/clean/robotcall/styletts2_ots.yaml +37 -0
  309. rvcbench/configs/ots_vc/clean/robotcall/vall_e_amphion_ots.yaml +11 -0
  310. rvcbench/configs/ots_vc/clean/robotcall/vall_e_ots.yaml +35 -0
  311. rvcbench/configs/ots_vc/clean/robotcall/vibevoice_ots.yaml +43 -0
  312. rvcbench/configs/ots_vc/clean/robotcall/zonos2_ots.yaml +32 -0
  313. rvcbench/configs/ots_vc/clean/test.yaml +46 -0
  314. rvcbench/configs/ots_vc/clean/vctk/bert_ots.yaml +28 -0
  315. rvcbench/configs/ots_vc/clean/vctk/cosyvoice_ots.yaml +37 -0
  316. rvcbench/configs/ots_vc/clean/vctk/dots_tts_ots.yaml +32 -0
  317. rvcbench/configs/ots_vc/clean/vctk/eval_only.yaml +26 -0
  318. rvcbench/configs/ots_vc/clean/vctk/fish_audio_s2_ots.yaml +46 -0
  319. rvcbench/configs/ots_vc/clean/vctk/fishspeech_ots.yaml +46 -0
  320. rvcbench/configs/ots_vc/clean/vctk/fishspeech_s2_ots.yaml +46 -0
  321. rvcbench/configs/ots_vc/clean/vctk/glmtts_ots.yaml +37 -0
  322. rvcbench/configs/ots_vc/clean/vctk/glowtts_ots.yaml +40 -0
  323. rvcbench/configs/ots_vc/clean/vctk/higgs_audio_ots.yaml +45 -0
  324. rvcbench/configs/ots_vc/clean/vctk/higgs_tts3_ots.yaml +43 -0
  325. rvcbench/configs/ots_vc/clean/vctk/kimi_audio_ots.yaml +43 -0
  326. rvcbench/configs/ots_vc/clean/vctk/mgm_omni_ots.yaml +41 -0
  327. rvcbench/configs/ots_vc/clean/vctk/moss_tts_ots.yaml +31 -0
  328. rvcbench/configs/ots_vc/clean/vctk/moss_ttsd_ots.yaml +40 -0
  329. rvcbench/configs/ots_vc/clean/vctk/ozspeech_ots.yaml +34 -0
  330. rvcbench/configs/ots_vc/clean/vctk/playdiffusion_ots.yaml +47 -0
  331. rvcbench/configs/ots_vc/clean/vctk/qwen3_omni_ots.yaml +58 -0
  332. rvcbench/configs/ots_vc/clean/vctk/sparktts_ots.yaml +33 -0
  333. rvcbench/configs/ots_vc/clean/vctk/styletts2_ots.yaml +38 -0
  334. rvcbench/configs/ots_vc/clean/vctk/vall_e_ots.yaml +35 -0
  335. rvcbench/configs/ots_vc/clean/vctk/vibevoice_ots.yaml +43 -0
  336. rvcbench/configs/ots_vc/clean/vctk/zonos2_ots.yaml +32 -0
  337. rvcbench/configs/ots_vc/clean/vctk_text_robust/bert_ots.yaml +28 -0
  338. rvcbench/configs/ots_vc/clean/vctk_text_robust/cosyvoice_ots.yaml +37 -0
  339. rvcbench/configs/ots_vc/clean/vctk_text_robust/dots_tts_ots.yaml +32 -0
  340. rvcbench/configs/ots_vc/clean/vctk_text_robust/eval_only.yaml +26 -0
  341. rvcbench/configs/ots_vc/clean/vctk_text_robust/fish_audio_s2_ots.yaml +46 -0
  342. rvcbench/configs/ots_vc/clean/vctk_text_robust/fishspeech_ots.yaml +46 -0
  343. rvcbench/configs/ots_vc/clean/vctk_text_robust/fishspeech_s2_ots.yaml +46 -0
  344. rvcbench/configs/ots_vc/clean/vctk_text_robust/glmtts_ots.yaml +37 -0
  345. rvcbench/configs/ots_vc/clean/vctk_text_robust/glowtts_ots.yaml +40 -0
  346. rvcbench/configs/ots_vc/clean/vctk_text_robust/higgs_audio_ots.yaml +45 -0
  347. rvcbench/configs/ots_vc/clean/vctk_text_robust/higgs_tts3_ots.yaml +43 -0
  348. rvcbench/configs/ots_vc/clean/vctk_text_robust/kimi_audio_ots.yaml +43 -0
  349. rvcbench/configs/ots_vc/clean/vctk_text_robust/mgm_omni_ots.yaml +41 -0
  350. rvcbench/configs/ots_vc/clean/vctk_text_robust/moss_tts_ots.yaml +31 -0
  351. rvcbench/configs/ots_vc/clean/vctk_text_robust/moss_ttsd_ots.yaml +40 -0
  352. rvcbench/configs/ots_vc/clean/vctk_text_robust/ozspeech_ots.yaml +34 -0
  353. rvcbench/configs/ots_vc/clean/vctk_text_robust/playdiffusion_ots.yaml +47 -0
  354. rvcbench/configs/ots_vc/clean/vctk_text_robust/qwen3_omni_ots.yaml +58 -0
  355. rvcbench/configs/ots_vc/clean/vctk_text_robust/sparktts_ots.yaml +33 -0
  356. rvcbench/configs/ots_vc/clean/vctk_text_robust/styletts2_ots.yaml +38 -0
  357. rvcbench/configs/ots_vc/clean/vctk_text_robust/vall_e_ots.yaml +35 -0
  358. rvcbench/configs/ots_vc/clean/vctk_text_robust/vibevoice_ots.yaml +43 -0
  359. rvcbench/configs/ots_vc/clean/vctk_text_robust/zonos2_ots.yaml +32 -0
  360. rvcbench/configs/ots_vc/protection/denoiser_dns64_on_spec_libritts/bert_ots.yaml +28 -0
  361. rvcbench/configs/ots_vc/protection/denoiser_dns64_on_spec_libritts/cosyvoice_ots.yaml +35 -0
  362. rvcbench/configs/ots_vc/protection/denoiser_dns64_on_spec_libritts/dots_tts_ots.yaml +30 -0
  363. rvcbench/configs/ots_vc/protection/denoiser_dns64_on_spec_libritts/fish_audio_s2_ots.yaml +44 -0
  364. rvcbench/configs/ots_vc/protection/denoiser_dns64_on_spec_libritts/fishspeech_ots.yaml +44 -0
  365. rvcbench/configs/ots_vc/protection/denoiser_dns64_on_spec_libritts/glmtts_ots.yaml +34 -0
  366. rvcbench/configs/ots_vc/protection/denoiser_dns64_on_spec_libritts/higgs_audio_ots.yaml +45 -0
  367. rvcbench/configs/ots_vc/protection/denoiser_dns64_on_spec_libritts/higgs_tts3_ots.yaml +41 -0
  368. rvcbench/configs/ots_vc/protection/denoiser_dns64_on_spec_libritts/mgm_omni_ots.yaml +38 -0
  369. rvcbench/configs/ots_vc/protection/denoiser_dns64_on_spec_libritts/moss_tts_ots.yaml +29 -0
  370. rvcbench/configs/ots_vc/protection/denoiser_dns64_on_spec_libritts/moss_ttsd_ots.yaml +38 -0
  371. rvcbench/configs/ots_vc/protection/denoiser_dns64_on_spec_libritts/ozspeech_ots.yaml +32 -0
  372. rvcbench/configs/ots_vc/protection/denoiser_dns64_on_spec_libritts/playdiffusion_ots.yaml +45 -0
  373. rvcbench/configs/ots_vc/protection/denoiser_dns64_on_spec_libritts/sparktts_ots.yaml +31 -0
  374. rvcbench/configs/ots_vc/protection/denoiser_dns64_on_spec_libritts/styletts2_ots.yaml +35 -0
  375. rvcbench/configs/ots_vc/protection/denoiser_dns64_on_spec_libritts/vibevoice_ots.yaml +40 -0
  376. rvcbench/configs/ots_vc/protection/denoiser_dns64_on_spec_libritts/zonos2_ots.yaml +30 -0
  377. rvcbench/configs/ots_vc/protection/em/bert_ots.yaml +28 -0
  378. rvcbench/configs/ots_vc/protection/em/cosyvoice_ots.yaml +35 -0
  379. rvcbench/configs/ots_vc/protection/em/dots_tts_ots.yaml +30 -0
  380. rvcbench/configs/ots_vc/protection/em/fish_audio_s2_ots.yaml +44 -0
  381. rvcbench/configs/ots_vc/protection/em/fishspeech_ots.yaml +44 -0
  382. rvcbench/configs/ots_vc/protection/em/glmtts_ots.yaml +34 -0
  383. rvcbench/configs/ots_vc/protection/em/glowtts_ots.yaml +38 -0
  384. rvcbench/configs/ots_vc/protection/em/higgs_audio_ots.yaml +45 -0
  385. rvcbench/configs/ots_vc/protection/em/higgs_tts3_ots.yaml +41 -0
  386. rvcbench/configs/ots_vc/protection/em/kimi_audio_ots.yaml +40 -0
  387. rvcbench/configs/ots_vc/protection/em/mgm_omni_ots.yaml +38 -0
  388. rvcbench/configs/ots_vc/protection/em/moss_tts_ots.yaml +29 -0
  389. rvcbench/configs/ots_vc/protection/em/moss_ttsd_ots.yaml +38 -0
  390. rvcbench/configs/ots_vc/protection/em/ozspeech_ots.yaml +32 -0
  391. rvcbench/configs/ots_vc/protection/em/playdiffusion_ots.yaml +45 -0
  392. rvcbench/configs/ots_vc/protection/em/qwen3_omni_ots.yaml +56 -0
  393. rvcbench/configs/ots_vc/protection/em/sparktts_ots.yaml +31 -0
  394. rvcbench/configs/ots_vc/protection/em/styletts2_ots.yaml +35 -0
  395. rvcbench/configs/ots_vc/protection/em/vall_e_ots.yaml +33 -0
  396. rvcbench/configs/ots_vc/protection/em/vibevoice_ots.yaml +40 -0
  397. rvcbench/configs/ots_vc/protection/em/zonos2_ots.yaml +30 -0
  398. rvcbench/configs/ots_vc/protection/enkidu/bert_ots.yaml +28 -0
  399. rvcbench/configs/ots_vc/protection/enkidu/cosyvoice_ots.yaml +35 -0
  400. rvcbench/configs/ots_vc/protection/enkidu/dots_tts_ots.yaml +30 -0
  401. rvcbench/configs/ots_vc/protection/enkidu/fish_audio_s2_ots.yaml +44 -0
  402. rvcbench/configs/ots_vc/protection/enkidu/fishspeech_ots.yaml +44 -0
  403. rvcbench/configs/ots_vc/protection/enkidu/glmtts_ots.yaml +34 -0
  404. rvcbench/configs/ots_vc/protection/enkidu/glowtts_ots.yaml +38 -0
  405. rvcbench/configs/ots_vc/protection/enkidu/higgs_audio_ots.yaml +45 -0
  406. rvcbench/configs/ots_vc/protection/enkidu/higgs_tts3_ots.yaml +41 -0
  407. rvcbench/configs/ots_vc/protection/enkidu/kimi_audio_ots.yaml +40 -0
  408. rvcbench/configs/ots_vc/protection/enkidu/mgm_omni_ots.yaml +38 -0
  409. rvcbench/configs/ots_vc/protection/enkidu/moss_tts_ots.yaml +29 -0
  410. rvcbench/configs/ots_vc/protection/enkidu/moss_ttsd_ots.yaml +38 -0
  411. rvcbench/configs/ots_vc/protection/enkidu/ozspeech_ots.yaml +32 -0
  412. rvcbench/configs/ots_vc/protection/enkidu/playdiffusion_ots.yaml +45 -0
  413. rvcbench/configs/ots_vc/protection/enkidu/qwen3_omni_ots.yaml +56 -0
  414. rvcbench/configs/ots_vc/protection/enkidu/sparktts_ots.yaml +31 -0
  415. rvcbench/configs/ots_vc/protection/enkidu/styletts2_ots.yaml +35 -0
  416. rvcbench/configs/ots_vc/protection/enkidu/vall_e_ots.yaml +33 -0
  417. rvcbench/configs/ots_vc/protection/enkidu/vibevoice_ots.yaml +40 -0
  418. rvcbench/configs/ots_vc/protection/enkidu/zonos2_ots.yaml +30 -0
  419. rvcbench/configs/ots_vc/protection/gaussian_noise/bert_ots.yaml +28 -0
  420. rvcbench/configs/ots_vc/protection/gaussian_noise/cosyvoice_ots.yaml +35 -0
  421. rvcbench/configs/ots_vc/protection/gaussian_noise/dots_tts_ots.yaml +30 -0
  422. rvcbench/configs/ots_vc/protection/gaussian_noise/fish_audio_s2_ots.yaml +44 -0
  423. rvcbench/configs/ots_vc/protection/gaussian_noise/fishspeech_ots.yaml +44 -0
  424. rvcbench/configs/ots_vc/protection/gaussian_noise/glmtts_ots.yaml +34 -0
  425. rvcbench/configs/ots_vc/protection/gaussian_noise/glowtts_ots.yaml +38 -0
  426. rvcbench/configs/ots_vc/protection/gaussian_noise/higgs_audio_ots.yaml +45 -0
  427. rvcbench/configs/ots_vc/protection/gaussian_noise/higgs_tts3_ots.yaml +41 -0
  428. rvcbench/configs/ots_vc/protection/gaussian_noise/kimi_audio_ots.yaml +40 -0
  429. rvcbench/configs/ots_vc/protection/gaussian_noise/mgm_omni_ots.yaml +38 -0
  430. rvcbench/configs/ots_vc/protection/gaussian_noise/moss_tts_ots.yaml +29 -0
  431. rvcbench/configs/ots_vc/protection/gaussian_noise/moss_ttsd_ots.yaml +38 -0
  432. rvcbench/configs/ots_vc/protection/gaussian_noise/ozspeech_ots.yaml +32 -0
  433. rvcbench/configs/ots_vc/protection/gaussian_noise/playdiffusion_ots.yaml +45 -0
  434. rvcbench/configs/ots_vc/protection/gaussian_noise/qwen3_omni_ots.yaml +56 -0
  435. rvcbench/configs/ots_vc/protection/gaussian_noise/sparktts_ots.yaml +31 -0
  436. rvcbench/configs/ots_vc/protection/gaussian_noise/styletts2_ots.yaml +35 -0
  437. rvcbench/configs/ots_vc/protection/gaussian_noise/vall_e_ots.yaml +33 -0
  438. rvcbench/configs/ots_vc/protection/gaussian_noise/vibevoice_ots.yaml +40 -0
  439. rvcbench/configs/ots_vc/protection/gaussian_noise/zonos2_ots.yaml +30 -0
  440. rvcbench/configs/ots_vc/protection/safespeech/bert_ots.yaml +28 -0
  441. rvcbench/configs/ots_vc/protection/safespeech/cosyvoice_ots.yaml +35 -0
  442. rvcbench/configs/ots_vc/protection/safespeech/dots_tts_ots.yaml +30 -0
  443. rvcbench/configs/ots_vc/protection/safespeech/fish_audio_s2_ots.yaml +44 -0
  444. rvcbench/configs/ots_vc/protection/safespeech/fishspeech_ots.yaml +44 -0
  445. rvcbench/configs/ots_vc/protection/safespeech/glmtts_ots.yaml +34 -0
  446. rvcbench/configs/ots_vc/protection/safespeech/glowtts_ots.yaml +38 -0
  447. rvcbench/configs/ots_vc/protection/safespeech/higgs_audio_ots.yaml +45 -0
  448. rvcbench/configs/ots_vc/protection/safespeech/higgs_tts3_ots.yaml +41 -0
  449. rvcbench/configs/ots_vc/protection/safespeech/kimi_audio_ots.yaml +40 -0
  450. rvcbench/configs/ots_vc/protection/safespeech/mgm_omni_ots.yaml +38 -0
  451. rvcbench/configs/ots_vc/protection/safespeech/moss_tts_ots.yaml +29 -0
  452. rvcbench/configs/ots_vc/protection/safespeech/moss_ttsd_ots.yaml +38 -0
  453. rvcbench/configs/ots_vc/protection/safespeech/ozspeech_ots.yaml +32 -0
  454. rvcbench/configs/ots_vc/protection/safespeech/playdiffusion_ots.yaml +45 -0
  455. rvcbench/configs/ots_vc/protection/safespeech/qwen3_omni_ots.yaml +56 -0
  456. rvcbench/configs/ots_vc/protection/safespeech/sparktts_ots.yaml +31 -0
  457. rvcbench/configs/ots_vc/protection/safespeech/styletts2_ots.yaml +35 -0
  458. rvcbench/configs/ots_vc/protection/safespeech/vall_e_ots.yaml +33 -0
  459. rvcbench/configs/ots_vc/protection/safespeech/vibevoice_ots.yaml +40 -0
  460. rvcbench/configs/ots_vc/protection/safespeech/zonos2_ots.yaml +30 -0
  461. rvcbench/configs/ots_vc/protection/spec/bert_ots.yaml +28 -0
  462. rvcbench/configs/ots_vc/protection/spec/cosyvoice_ots.yaml +35 -0
  463. rvcbench/configs/ots_vc/protection/spec/dots_tts_ots.yaml +30 -0
  464. rvcbench/configs/ots_vc/protection/spec/fish_audio_s2_ots.yaml +44 -0
  465. rvcbench/configs/ots_vc/protection/spec/fishspeech_ots.yaml +44 -0
  466. rvcbench/configs/ots_vc/protection/spec/glmtts_ots.yaml +34 -0
  467. rvcbench/configs/ots_vc/protection/spec/glowtts_ots.yaml +38 -0
  468. rvcbench/configs/ots_vc/protection/spec/higgs_audio_ots.yaml +45 -0
  469. rvcbench/configs/ots_vc/protection/spec/higgs_tts3_ots.yaml +41 -0
  470. rvcbench/configs/ots_vc/protection/spec/kimi_audio_ots.yaml +40 -0
  471. rvcbench/configs/ots_vc/protection/spec/mgm_omni_ots.yaml +38 -0
  472. rvcbench/configs/ots_vc/protection/spec/moss_tts_ots.yaml +29 -0
  473. rvcbench/configs/ots_vc/protection/spec/moss_ttsd_ots.yaml +38 -0
  474. rvcbench/configs/ots_vc/protection/spec/ozspeech_ots.yaml +32 -0
  475. rvcbench/configs/ots_vc/protection/spec/playdiffusion_ots.yaml +45 -0
  476. rvcbench/configs/ots_vc/protection/spec/qwen3_omni_ots.yaml +56 -0
  477. rvcbench/configs/ots_vc/protection/spec/sparktts_ots.yaml +31 -0
  478. rvcbench/configs/ots_vc/protection/spec/styletts2_ots.yaml +35 -0
  479. rvcbench/configs/ots_vc/protection/spec/vall_e_ots.yaml +33 -0
  480. rvcbench/configs/ots_vc/protection/spec/vibevoice_ots.yaml +40 -0
  481. rvcbench/configs/ots_vc/protection/spec/zonos2_ots.yaml +30 -0
  482. rvcbench/configs/ozspeech_ots.yaml +31 -0
  483. rvcbench/configs/safespeech_on_libritts.yaml +61 -0
  484. rvcbench/configs/safespeech_on_libritts_eval_only.yaml +28 -0
  485. rvcbench/configs/spec_on_libritts.yaml +61 -0
  486. rvcbench/datasets/__init__.py +9 -0
  487. rvcbench/datasets/audio_only.py +226 -0
  488. rvcbench/datasets/build_canonical_manifests.py +93 -0
  489. rvcbench/datasets/build_vctk_compression_dataset_from_manifest.py +319 -0
  490. rvcbench/datasets/data_utils.py +886 -0
  491. rvcbench/datasets/deepfake_preprocess.py +202 -0
  492. rvcbench/datasets/feature_embedder/__init__.py +0 -0
  493. rvcbench/datasets/feature_embedder/base_embedder.py +14 -0
  494. rvcbench/datasets/feature_embedder/stft.py +14 -0
  495. rvcbench/datasets/manifest_utils.py +393 -0
  496. rvcbench/datasets/mel_preprocessing.py +168 -0
  497. rvcbench/datasets/text_features.py +23 -0
  498. rvcbench/datasets/top10_longest_by_speaker_manifest.csv +41 -0
  499. rvcbench/datasets/zero_shot.py +74 -0
  500. rvcbench/entrypoints/__init__.py +1 -0
  501. rvcbench/entrypoints/denoise.py +349 -0
  502. rvcbench/entrypoints/protect.py +176 -0
  503. rvcbench/entrypoints/vc.py +79 -0
  504. rvcbench/entrypoints/vc_protect.py +174 -0
  505. rvcbench/evaluation/__init__.py +0 -0
  506. rvcbench/evaluation/assets.py +20 -0
  507. rvcbench/evaluation/audio_io.py +27 -0
  508. rvcbench/evaluation/bootstrap.py +112 -0
  509. rvcbench/evaluation/fidelity.py +946 -0
  510. rvcbench/evaluation/generation.py +1111 -0
  511. rvcbench/evaluation/pipeline.py +274 -0
  512. rvcbench/evaluation/scorers/__init__.py +31 -0
  513. rvcbench/evaluation/scorers/auxiliary.py +75 -0
  514. rvcbench/evaluation/scorers/emotion.py +85 -0
  515. rvcbench/evaluation/scorers/mcd.py +18 -0
  516. rvcbench/evaluation/scorers/speaker.py +35 -0
  517. rvcbench/evaluation/scorers/stoi.py +38 -0
  518. rvcbench/evaluation/scorers/text.py +91 -0
  519. rvcbench/evaluation/scorers/wer.py +54 -0
  520. rvcbench/evaluation/setup.py +98 -0
  521. rvcbench/losses/__init__.py +1 -0
  522. rvcbench/losses/bertvits2_loss.py +251 -0
  523. rvcbench/metrics.py +132 -0
  524. rvcbench/models/__init__.py +9 -0
  525. rvcbench/models/acoustic_system_model.py +508 -0
  526. rvcbench/models/antifake_model.py +730 -0
  527. rvcbench/models/bark_voice_clone/__init__.py +1 -0
  528. rvcbench/models/bark_voice_clone/generator.py +201 -0
  529. rvcbench/models/bark_voice_clone/loading.py +59 -0
  530. rvcbench/models/bert/bert_models.json +6 -0
  531. rvcbench/models/bertvits2_model.py +468 -0
  532. rvcbench/models/cosyvoice/__init__.py +8 -0
  533. rvcbench/models/cosyvoice/assets.py +80 -0
  534. rvcbench/models/cosyvoice/generator.py +297 -0
  535. rvcbench/models/dns64_kernel.py +50 -0
  536. rvcbench/models/dots_tts/__init__.py +3 -0
  537. rvcbench/models/dots_tts/generator.py +153 -0
  538. rvcbench/models/enkidu_model.py +27 -0
  539. rvcbench/models/f5_tts/__init__.py +5 -0
  540. rvcbench/models/f5_tts/generator.py +208 -0
  541. rvcbench/models/fireredtts2/__init__.py +8 -0
  542. rvcbench/models/fireredtts2/generator.py +241 -0
  543. rvcbench/models/glmtts/__init__.py +5 -0
  544. rvcbench/models/glmtts/synthesizer.py +365 -0
  545. rvcbench/models/higgs_audio/__init__.py +3 -0
  546. rvcbench/models/higgs_audio/generator.py +349 -0
  547. rvcbench/models/index_tts/__init__.py +5 -0
  548. rvcbench/models/index_tts/generator.py +322 -0
  549. rvcbench/models/kimi_audio/__init__.py +3 -0
  550. rvcbench/models/kimi_audio/generator.py +129 -0
  551. rvcbench/models/maskgct/__init__.py +5 -0
  552. rvcbench/models/maskgct/assets.py +34 -0
  553. rvcbench/models/maskgct/generator.py +362 -0
  554. rvcbench/models/mgm_omni/__init__.py +5 -0
  555. rvcbench/models/mgm_omni/generator.py +309 -0
  556. rvcbench/models/model.py +121 -0
  557. rvcbench/models/modules/__init__.py +0 -0
  558. rvcbench/models/modules/bertvits2_module.py +1078 -0
  559. rvcbench/models/modules/modules.py +922 -0
  560. rvcbench/models/modules/transforms.py +209 -0
  561. rvcbench/models/moss_tts/__init__.py +3 -0
  562. rvcbench/models/moss_tts/generator.py +140 -0
  563. rvcbench/models/moss_ttsd/__init__.py +8 -0
  564. rvcbench/models/moss_ttsd/generator.py +310 -0
  565. rvcbench/models/openvoice/__init__.py +8 -0
  566. rvcbench/models/openvoice/assets.py +15 -0
  567. rvcbench/models/openvoice/generator.py +360 -0
  568. rvcbench/models/openvoice/loading.py +32 -0
  569. rvcbench/models/openvoice/text_models.py +92 -0
  570. rvcbench/models/openvoice/text_resources.py +41 -0
  571. rvcbench/models/ozspeech/__init__.py +3 -0
  572. rvcbench/models/ozspeech/synthesizer.py +292 -0
  573. rvcbench/models/ozspeech_model.py +110 -0
  574. rvcbench/models/playdiffusion/__init__.py +3 -0
  575. rvcbench/models/playdiffusion/generator.py +175 -0
  576. rvcbench/models/qwen3_omni/__init__.py +3 -0
  577. rvcbench/models/qwen3_omni/generator.py +166 -0
  578. rvcbench/models/qwen3_tts/__init__.py +8 -0
  579. rvcbench/models/qwen3_tts/generator.py +169 -0
  580. rvcbench/models/sparktts/__init__.py +8 -0
  581. rvcbench/models/sparktts/assets.py +87 -0
  582. rvcbench/models/sparktts/generator.py +174 -0
  583. rvcbench/models/stable_codec_activations.py +40 -0
  584. rvcbench/models/styletts2/__init__.py +3 -0
  585. rvcbench/models/styletts2/loading.py +50 -0
  586. rvcbench/models/styletts2/synthesizer.py +376 -0
  587. rvcbench/models/text/__init__.py +54 -0
  588. rvcbench/models/text/bert_utils.py +12 -0
  589. rvcbench/models/text/chinese.py +206 -0
  590. rvcbench/models/text/chinese_bert.py +119 -0
  591. rvcbench/models/text/cleaner.py +28 -0
  592. rvcbench/models/text/cmudict.rep +129530 -0
  593. rvcbench/models/text/cmudict_cache.pickle +0 -0
  594. rvcbench/models/text/english.py +494 -0
  595. rvcbench/models/text/english_bert_mock.py +61 -0
  596. rvcbench/models/text/japanese.py +720 -0
  597. rvcbench/models/text/japanese_bert.py +65 -0
  598. rvcbench/models/text/opencpop-strict.txt +429 -0
  599. rvcbench/models/text/symbols.py +187 -0
  600. rvcbench/models/text/tone_sandhi.py +776 -0
  601. rvcbench/models/valle/__init__.py +3 -0
  602. rvcbench/models/valle/amphion.py +75 -0
  603. rvcbench/models/valle/generator.py +114 -0
  604. rvcbench/models/vibevoice/__init__.py +3 -0
  605. rvcbench/models/vibevoice/generator.py +259 -0
  606. rvcbench/models/voxcpm/__init__.py +8 -0
  607. rvcbench/models/voxcpm/generator.py +182 -0
  608. rvcbench/models/worker_protocol.py +47 -0
  609. rvcbench/models/xtts/__init__.py +8 -0
  610. rvcbench/models/xtts/assets.py +22 -0
  611. rvcbench/models/xtts/generator.py +244 -0
  612. rvcbench/models/zipvoice/__init__.py +5 -0
  613. rvcbench/models/zipvoice/assets.py +24 -0
  614. rvcbench/models/zipvoice/generator.py +331 -0
  615. rvcbench/models/zonos2/__init__.py +3 -0
  616. rvcbench/models/zonos2/generator.py +215 -0
  617. rvcbench/monotonic_align.py +55 -0
  618. rvcbench/protection/__init__.py +36 -0
  619. rvcbench/protection/antifake.py +991 -0
  620. rvcbench/protection/attackvc.py +77 -0
  621. rvcbench/protection/base_protector.py +79 -0
  622. rvcbench/protection/dummy.py +19 -0
  623. rvcbench/protection/em.py +242 -0
  624. rvcbench/protection/enkidu.py +276 -0
  625. rvcbench/protection/random_noise.py +104 -0
  626. rvcbench/protection/safespeech/original_code/LICENSE +21 -0
  627. rvcbench/protection/safespeech/original_code/QuickStart.ipynb +724 -0
  628. rvcbench/protection/safespeech/original_code/README.md +176 -0
  629. rvcbench/protection/safespeech/original_code/asr.py +64 -0
  630. rvcbench/protection/safespeech/original_code/bert_gen.py +101 -0
  631. rvcbench/protection/safespeech/original_code/download_models.py +53 -0
  632. rvcbench/protection/safespeech/original_code/evaluate.py +297 -0
  633. rvcbench/protection/safespeech/original_code/evaluation/evallists/BERT_VITS2_SPEC_LibriTTS_text.txt +52 -0
  634. rvcbench/protection/safespeech/original_code/preprocess_text.py +42 -0
  635. rvcbench/protection/safespeech/original_code/protect.py +380 -0
  636. rvcbench/protection/safespeech/original_code/requirements.txt +46 -0
  637. rvcbench/protection/safespeech/original_code/save_audio.py +137 -0
  638. rvcbench/protection/safespeech/original_code/toolbox.py +149 -0
  639. rvcbench/protection/safespeech/original_code/train.py +407 -0
  640. rvcbench/protection/safespeech/protector.py +84 -0
  641. rvcbench/protection/safespeech_use_wrapper.py +183 -0
  642. rvcbench/suites/__init__.py +0 -0
  643. rvcbench/suites/core_v1/adv-clean.metadata.json +342 -0
  644. rvcbench/suites/core_v1/adv-clean.selection.json +290 -0
  645. rvcbench/suites/core_v1/adv-enkidu.metadata.json +342 -0
  646. rvcbench/suites/core_v1/adv-enkidu.selection.json +290 -0
  647. rvcbench/suites/core_v1/adv-gaussian.metadata.json +342 -0
  648. rvcbench/suites/core_v1/adv-gaussian.selection.json +290 -0
  649. rvcbench/suites/core_v1/adv-pop.metadata.json +342 -0
  650. rvcbench/suites/core_v1/adv-pop.selection.json +290 -0
  651. rvcbench/suites/core_v1/adv-safespeech.metadata.json +342 -0
  652. rvcbench/suites/core_v1/adv-safespeech.selection.json +290 -0
  653. rvcbench/suites/core_v1/adv-spec.metadata.json +342 -0
  654. rvcbench/suites/core_v1/adv-spec.selection.json +290 -0
  655. rvcbench/suites/core_v1/antiprotect-spec.metadata.json +342 -0
  656. rvcbench/suites/core_v1/antiprotect-spec.selection.json +290 -0
  657. rvcbench/suites/core_v1/audioshift.metadata.json +458 -0
  658. rvcbench/suites/core_v1/audioshift.selection.json +346 -0
  659. rvcbench/suites/core_v1/background-clean.metadata.json +342 -0
  660. rvcbench/suites/core_v1/background-clean.selection.json +290 -0
  661. rvcbench/suites/core_v1/background.metadata.json +342 -0
  662. rvcbench/suites/core_v1/background.selection.json +290 -0
  663. rvcbench/suites/core_v1/chinese.metadata.json +386 -0
  664. rvcbench/suites/core_v1/chinese.selection.json +346 -0
  665. rvcbench/suites/core_v1/crosslingual.metadata.json +410 -0
  666. rvcbench/suites/core_v1/crosslingual.selection.json +346 -0
  667. rvcbench/suites/core_v1/english-libritts.metadata.json +410 -0
  668. rvcbench/suites/core_v1/english-libritts.selection.json +346 -0
  669. rvcbench/suites/core_v1/french.metadata.json +386 -0
  670. rvcbench/suites/core_v1/french.selection.json +346 -0
  671. rvcbench/suites/core_v1/longaudio.metadata.json +410 -0
  672. rvcbench/suites/core_v1/longaudio.selection.json +346 -0
  673. rvcbench/suites/core_v1/longtext.metadata.json +322 -0
  674. rvcbench/suites/core_v1/longtext.selection.json +290 -0
  675. rvcbench/suites/core_v1/multispeaker-clean.metadata.json +434 -0
  676. rvcbench/suites/core_v1/multispeaker-clean.selection.json +346 -0
  677. rvcbench/suites/core_v1/multispeaker.metadata.json +434 -0
  678. rvcbench/suites/core_v1/multispeaker.selection.json +346 -0
  679. rvcbench/suites/core_v1/suite.json +402 -0
  680. rvcbench/suites/core_v1/textshift-hallucination.metadata.json +386 -0
  681. rvcbench/suites/core_v1/textshift-hallucination.selection.json +346 -0
  682. rvcbench/suites/core_v1/textshift-scam-standard.metadata.json +342 -0
  683. rvcbench/suites/core_v1/textshift-scam-standard.selection.json +290 -0
  684. rvcbench/suites/core_v1/textshift-scam.metadata.json +342 -0
  685. rvcbench/suites/core_v1/textshift-scam.selection.json +290 -0
  686. rvcbench/suites/core_v1/textshift-standard.metadata.json +386 -0
  687. rvcbench/suites/core_v1/textshift-standard.selection.json +346 -0
  688. rvcbench/suites/full_v1/audioshift.metadata.json.gz +0 -0
  689. rvcbench/suites/full_v1/audioshift.selection.json.gz +0 -0
  690. rvcbench/suites/full_v1/background-clean.metadata.json.gz +0 -0
  691. rvcbench/suites/full_v1/background-clean.selection.json.gz +0 -0
  692. rvcbench/suites/full_v1/background.metadata.json.gz +0 -0
  693. rvcbench/suites/full_v1/background.selection.json.gz +0 -0
  694. rvcbench/suites/full_v1/chinese.metadata.json.gz +0 -0
  695. rvcbench/suites/full_v1/chinese.selection.json.gz +0 -0
  696. rvcbench/suites/full_v1/crosslingual.metadata.json.gz +0 -0
  697. rvcbench/suites/full_v1/crosslingual.selection.json.gz +0 -0
  698. rvcbench/suites/full_v1/english-libritts.metadata.json.gz +0 -0
  699. rvcbench/suites/full_v1/english-libritts.selection.json.gz +0 -0
  700. rvcbench/suites/full_v1/french.metadata.json.gz +0 -0
  701. rvcbench/suites/full_v1/french.selection.json.gz +0 -0
  702. rvcbench/suites/full_v1/longaudio.metadata.json.gz +0 -0
  703. rvcbench/suites/full_v1/longaudio.selection.json.gz +0 -0
  704. rvcbench/suites/full_v1/longtext.metadata.json.gz +0 -0
  705. rvcbench/suites/full_v1/longtext.selection.json.gz +0 -0
  706. rvcbench/suites/full_v1/multispeaker-clean.metadata.json.gz +0 -0
  707. rvcbench/suites/full_v1/multispeaker-clean.selection.json.gz +0 -0
  708. rvcbench/suites/full_v1/multispeaker.metadata.json.gz +0 -0
  709. rvcbench/suites/full_v1/multispeaker.selection.json.gz +0 -0
  710. rvcbench/suites/full_v1/suite.json +334 -0
  711. rvcbench/suites/full_v1/textshift-hallucination.metadata.json.gz +0 -0
  712. rvcbench/suites/full_v1/textshift-hallucination.selection.json.gz +0 -0
  713. rvcbench/suites/full_v1/textshift-scam-standard.metadata.json.gz +0 -0
  714. rvcbench/suites/full_v1/textshift-scam-standard.selection.json.gz +0 -0
  715. rvcbench/suites/full_v1/textshift-scam.metadata.json.gz +0 -0
  716. rvcbench/suites/full_v1/textshift-scam.selection.json.gz +0 -0
  717. rvcbench/suites/full_v1/textshift-standard.metadata.json.gz +0 -0
  718. rvcbench/suites/full_v1/textshift-standard.selection.json.gz +0 -0
  719. rvcbench/suites/onboarding_v1/libritts16_v1.metadata.json +258 -0
  720. rvcbench/suites/onboarding_v1/libritts16_v1.selection.json +246 -0
  721. rvcbench/suites/onboarding_v1/robotcall20_v1.metadata.json +322 -0
  722. rvcbench/suites/onboarding_v1/robotcall20_v1.selection.json +301 -0
  723. rvcbench/suites/onboarding_v1/suite.json +23 -0
  724. rvcbench/suites/onboarding_v1/vctk16_v1.metadata.json +258 -0
  725. rvcbench/suites/onboarding_v1/vctk16_v1.selection.json +245 -0
  726. rvcbench/trainers/__init__.py +1 -0
  727. rvcbench/trainers/bertvits2_trainer.py +239 -0
  728. rvcbench/utils/__init__.py +0 -0
  729. rvcbench/utils/commons.py +231 -0
  730. rvcbench/utils/env.py +42 -0
  731. rvcbench/utils/hub.py +19 -0
  732. rvcbench/utils/logger.py +69 -0
  733. rvcbench/utils/runtime_errors.py +8 -0
  734. rvcbench/utils/seeding.py +63 -0
  735. rvcbench/workflows/__init__.py +0 -0
  736. rvcbench/workflows/vc.py +358 -0
  737. rvcbench-2.0.0.dist-info/METADATA +295 -0
  738. rvcbench-2.0.0.dist-info/RECORD +743 -0
  739. rvcbench-2.0.0.dist-info/WHEEL +5 -0
  740. rvcbench-2.0.0.dist-info/entry_points.txt +2 -0
  741. rvcbench-2.0.0.dist-info/licenses/LICENSE +121 -0
  742. rvcbench-2.0.0.dist-info/licenses/src/rvcbench/protection/safespeech/original_code/LICENSE +21 -0
  743. rvcbench-2.0.0.dist-info/top_level.txt +1 -0
rvcbench/__init__.py ADDED
@@ -0,0 +1,17 @@
1
+ """RVCBench: a benchmark for voice cloning robustness and audio protection."""
2
+ from importlib.metadata import PackageNotFoundError, version
3
+
4
+ try:
5
+ __version__ = version("rvcbench")
6
+ except PackageNotFoundError: # source checkout that has not been installed
7
+ __version__ = "0+unknown"
8
+
9
+ __all__ = ["VoiceCloningAdapter", "__version__"]
10
+
11
+
12
+ def __getattr__(name):
13
+ # Imported on demand so that `import rvcbench` stays free of heavy dependencies.
14
+ if name == "VoiceCloningAdapter":
15
+ from rvcbench.adapter import VoiceCloningAdapter
16
+ return VoiceCloningAdapter
17
+ raise AttributeError(f"module 'rvcbench' has no attribute {name!r}")
rvcbench/adapter.py ADDED
@@ -0,0 +1,98 @@
1
+ """Public base class for evaluating your own voice cloning model with RVCBench.
2
+
3
+ Subclass :class:`VoiceCloningAdapter`, implement :meth:`clone`, and select the class
4
+ with ``vc.adapter=your_package.your_module:YourAdapter``. The benchmark runner handles
5
+ sample selection, seeding, output naming, run records and scoring.
6
+ """
7
+ from __future__ import annotations
8
+
9
+ import time
10
+ from pathlib import Path
11
+ from typing import Optional, Tuple
12
+
13
+ import numpy as np
14
+ import soundfile as sf
15
+
16
+ from rvcbench.adversary.base_adversary import BaseAdversary
17
+
18
+
19
+ class VoiceCloningAdapter(BaseAdversary):
20
+ """Zero-shot voice cloning model driven one utterance at a time.
21
+
22
+ ``self.config`` is the ``adversary`` block of the run config, ``self.device`` the
23
+ requested device and ``self.logger`` a standard logger.
24
+ """
25
+
26
+ #: Label recorded with each synthesis time. Describe what :meth:`clone` measures.
27
+ timing_scope = "external_adapter_clone_call_excluding_output_write"
28
+
29
+ def __init__(self, config, dataset_config, device, logger):
30
+ super().__init__(config, device)
31
+ self.dataset_config = dataset_config
32
+ self.logger = logger
33
+ self._loaded = False
34
+
35
+ def load(self) -> None:
36
+ """Load weights and other resources once per run. Optional."""
37
+
38
+ def clone(self, *, text: str, reference_audio: Path, reference_text: str,
39
+ language: Optional[str]) -> Tuple[np.ndarray, int]:
40
+ """Speak ``text`` in the voice of ``reference_audio``.
41
+
42
+ Return ``(waveform, sample_rate)``: a mono float waveform in ``[-1, 1]`` and its
43
+ sample rate in Hz. Raise an exception when the utterance cannot be generated;
44
+ the runner records the failure for that sample and continues.
45
+ """
46
+ raise NotImplementedError
47
+
48
+ def unload(self) -> None:
49
+ """Release resources at the end of the run. Optional."""
50
+
51
+ # -- runner integration -------------------------------------------------------
52
+
53
+ def _ensure_model(self) -> None:
54
+ if not self._loaded:
55
+ self.load()
56
+ self._loaded = True
57
+
58
+ def close(self) -> None:
59
+ try:
60
+ if self._loaded:
61
+ self.unload()
62
+ finally:
63
+ self._loaded = False
64
+ super().close()
65
+
66
+ def attack(self, *, output_path, dataset, protected_audio_path=None):
67
+ del protected_audio_path # protected references already replace sample.prompt_path
68
+ self._ensure_model()
69
+ output_dir = Path(output_path).resolve()
70
+ output_dir.mkdir(parents=True, exist_ok=True)
71
+ self._init_synthesis_timings(output_dir)
72
+ try:
73
+ for sample in dataset.get_zero_shot_samples(max_samples=self.config.get("max_samples")):
74
+ reference = self._resolve_prompt_path(sample)
75
+ if reference is None:
76
+ raise FileNotFoundError(f"Missing reference audio: {sample.prompt_path}")
77
+ text = (sample.target_text or "").strip()
78
+ if not text:
79
+ raise ValueError("Target text is empty")
80
+ started = time.perf_counter()
81
+ waveform, sample_rate = self.clone(
82
+ text=text, reference_audio=reference,
83
+ reference_text=(sample.prompt_text or "").strip(),
84
+ language=sample.target_language or sample.prompt_language)
85
+ elapsed = time.perf_counter() - started
86
+ waveform = np.asarray(waveform, dtype=np.float32)
87
+ if waveform.ndim == 2 and 1 in waveform.shape:
88
+ waveform = waveform.reshape(-1)
89
+ if waveform.ndim != 1 or not waveform.size or not np.isfinite(waveform).all():
90
+ raise ValueError("clone() must return nonempty finite mono audio")
91
+ if int(sample_rate) <= 0:
92
+ raise ValueError("clone() must return a positive sample rate")
93
+ path = (self._speaker_output_dir(output_dir, str(sample.speaker_id))
94
+ / self._cloned_filename(sample, sample.index))
95
+ sf.write(str(path), np.clip(waveform, -1.0, 1.0), int(sample_rate))
96
+ self._record_synthesis_timing(path, elapsed)
97
+ finally:
98
+ self._flush_synthesis_timings()
File without changes
@@ -0,0 +1,146 @@
1
+ from __future__ import annotations
2
+
3
+ from pathlib import Path
4
+ import time
5
+ from typing import TYPE_CHECKING, Optional
6
+
7
+ import numpy as np
8
+ import soundfile as sf
9
+ from hydra.utils import to_absolute_path
10
+
11
+ from .base_adversary import BaseAdversary
12
+
13
+ if TYPE_CHECKING:
14
+ from rvcbench.models.bark_voice_clone import BarkVoiceCloneGenerator
15
+
16
+
17
+ class BarkVoiceCloneZeroShotAdversary(BaseAdversary):
18
+ """Runs the Bark voice cloning pipeline for zero-shot attacks."""
19
+
20
+ def __init__(self, config, dataset_config, device, logger):
21
+ super().__init__(config, device)
22
+ self.dataset_config = dataset_config
23
+ self.logger = logger
24
+
25
+ self.code_path = Path(to_absolute_path(self.config.code_path)).resolve()
26
+ self.models_dir = self._resolve_optional_path(self.config.get("models_dir"))
27
+ self.cache_dir = self._resolve_optional_path(self.config.get("cache_dir"))
28
+ self.prompt_cache_dir = self._resolve_optional_path(self.config.get("prompt_cache_dir"))
29
+ self.hubert_checkpoint = self._resolve_optional_path(self.config.get("hubert_checkpoint"))
30
+ self.hubert_tokenizer = self._resolve_optional_path(self.config.get("hubert_tokenizer"))
31
+
32
+ self.reference_assignment = str(
33
+ self.config.get("reference_assignment", "round_robin")
34
+ ).lower().strip()
35
+ self.max_samples = self.config.get("max_samples")
36
+ self.seed = self.config.get("seed")
37
+ self.default_prompt_text = str(
38
+ self.config.get(
39
+ "default_prompt_text",
40
+ "Here is a short sample of the desired voice.",
41
+ )
42
+ )
43
+
44
+ self._generator: Optional[BarkVoiceCloneGenerator] = None
45
+
46
+ # ------------------------------------------------------------------
47
+ # Helpers
48
+ # ------------------------------------------------------------------
49
+ def _resolve_optional_path(self, value) -> Optional[Path]:
50
+ if value in (None, ""):
51
+ return None
52
+ resolved = Path(to_absolute_path(str(value)))
53
+ return resolved.resolve()
54
+
55
+ def _coerce_optional(self, key: str, caster):
56
+ value = self.config.get(key)
57
+ if value in (None, ""):
58
+ return None
59
+ try:
60
+ return caster(value)
61
+ except (TypeError, ValueError):
62
+ if self.logger is not None:
63
+ self.logger.warning(
64
+ "[BarkVC] Failed to cast '%s' value '%s'; ignoring.",
65
+ key,
66
+ value,
67
+ )
68
+ return None
69
+
70
+ def _ensure_generator(self) -> None:
71
+ if self._generator is not None:
72
+ return
73
+ from rvcbench.models.bark_voice_clone import BarkVoiceCloneGenerator, BarkVoiceCloneGeneratorConfig
74
+
75
+ generator_config = BarkVoiceCloneGeneratorConfig(
76
+ code_path=self.code_path,
77
+ models_dir=self.models_dir,
78
+ cache_dir=self.cache_dir,
79
+ prompt_cache_dir=self.prompt_cache_dir,
80
+ hubert_checkpoint=self.hubert_checkpoint,
81
+ hubert_tokenizer=self.hubert_tokenizer,
82
+ text_tokenizer_path=self._resolve_optional_path(self.config.get('text_tokenizer_path')),
83
+ text_temperature=float(self.config.get("text_temperature", 0.7)),
84
+ text_top_k=self._coerce_optional("text_top_k", int),
85
+ text_top_p=self._coerce_optional("text_top_p", float),
86
+ coarse_temperature=float(self.config.get("coarse_temperature", 0.7)),
87
+ coarse_top_k=self._coerce_optional("coarse_top_k", int),
88
+ coarse_top_p=self._coerce_optional("coarse_top_p", float),
89
+ fine_temperature=float(self.config.get("fine_temperature", 0.5)),
90
+ semantic_use_kv_cache=bool(self.config.get("semantic_use_kv_cache", True)),
91
+ coarse_use_kv_cache=bool(self.config.get("coarse_use_kv_cache", True)),
92
+ silent=bool(self.config.get("silent", True)),
93
+ force_reload_models=bool(self.config.get("force_reload_models", False)),
94
+ max_prompt_seconds=self._coerce_optional("max_prompt_seconds", float),
95
+ hubert_layer=int(self.config.get('hubert_layer', 9)),
96
+ )
97
+ self._generator = BarkVoiceCloneGenerator(generator_config, self.device, self.logger)
98
+
99
+ # ------------------------------------------------------------------
100
+ # Public API
101
+ # ------------------------------------------------------------------
102
+ def generate_sample(self, sample, *, output_dir):
103
+ reference_path = self._resolve_prompt_path(sample)
104
+ if reference_path is None:
105
+ raise FileNotFoundError(f"Missing Bark reference audio: {sample.prompt_path}")
106
+ text = (sample.target_text or "").strip()
107
+ if not text:
108
+ raise ValueError('Bark requires nonempty target text')
109
+ self._ensure_generator()
110
+ self._generator.ensure_model()
111
+ seed = self._sample_seed(sample)
112
+ if seed is not None:
113
+ from rvcbench.utils.seeding import configure_seeds
114
+ configure_seeds(seed, logger=None)
115
+ self._log_clone_request("BarkVC", 0, 1, str(sample.speaker_id), reference_path,
116
+ text, prompt_transcript=sample.prompt_text or self.default_prompt_text)
117
+ started = time.perf_counter()
118
+ audio, sample_rate = self._generator.generate(
119
+ text=text, prompt_audio=reference_path, sample_index=sample.index)
120
+ elapsed = time.perf_counter() - started
121
+ audio = np.asarray(audio, dtype=np.float32)
122
+ if audio.ndim != 1 or not audio.size or not np.isfinite(audio).all():
123
+ raise ValueError('Bark returned invalid mono audio')
124
+ path = self._speaker_output_dir(Path(output_dir).resolve(), str(sample.speaker_id)) / self._cloned_filename(sample, sample.index)
125
+ sf.write(path, audio, sample_rate)
126
+ return path, elapsed
127
+
128
+ def attack(self, *, output_path, dataset, protected_audio_path=None):
129
+ del protected_audio_path
130
+ output_dir = Path(output_path).resolve()
131
+ output_dir.mkdir(parents=True, exist_ok=True)
132
+ self._init_synthesis_timings(output_dir)
133
+ samples = dataset.get_zero_shot_samples(max_samples=self.max_samples)
134
+ if not samples:
135
+ raise RuntimeError("No zero-shot samples available for Bark voice cloning adversary.")
136
+ self._log_attack_plan("BarkVC", samples, self._count_available_prompts(samples))
137
+ completed = 0
138
+ try:
139
+ for sample in samples:
140
+ path, elapsed = self.generate_sample(sample, output_dir=output_dir)
141
+ self._record_synthesis_timing(path, elapsed)
142
+ completed += 1
143
+ finally:
144
+ self._flush_synthesis_timings()
145
+ if self.logger:
146
+ self.logger.info("[BarkVC] Generated %d/%d utterances.", completed, len(samples))
@@ -0,0 +1,205 @@
1
+ from __future__ import annotations
2
+
3
+ from abc import ABC, abstractmethod
4
+ import csv
5
+ import re
6
+ from pathlib import Path
7
+ from typing import Optional, Sequence, TYPE_CHECKING
8
+
9
+ if TYPE_CHECKING:
10
+ from rvcbench.datasets.data_utils import AllSpeakerData
11
+ from rvcbench.datasets.data_utils import ZeroShotSample
12
+
13
+ class BaseAdversary(ABC):
14
+ """Abstract Base Class for all malicious adversaries."""
15
+ def __init__(self, config, device):
16
+ # Hydra sometimes provides the full run config; extract the adversary block if present.
17
+ adversary_cfg = getattr(config, "adversary", None)
18
+ self.config = adversary_cfg or config
19
+ self.device = device
20
+ self._synthesis_timing_records = []
21
+ self._synthesis_timing_path: Optional[Path] = None
22
+ self._managed_lifetime = False
23
+
24
+ def _sample_seed(self, sample):
25
+ seed = self.config.get('seed')
26
+ return None if seed is None else int(seed) + int(sample.index)
27
+
28
+ def prepare(self):
29
+ """Load adapter resources once so setup failures are run-level failures."""
30
+ self._managed_lifetime = True
31
+ for name in ('_ensure_generator', '_ensure_synthesizer', '_ensure_model', '_ensure_imports'):
32
+ hook = getattr(self, name, None)
33
+ if hook is not None:
34
+ hook()
35
+ break
36
+ for name in ('_generator', '_synthesizer'):
37
+ resource = getattr(self, name, None)
38
+ ensure = getattr(resource, 'ensure_model', None)
39
+ if ensure is not None:
40
+ ensure()
41
+
42
+ def close(self) -> None:
43
+ """Release owned generators, including persistent subprocess workers."""
44
+ errors = []
45
+ for name in ('_generator', '_synthesizer'):
46
+ resource = getattr(self, name, None)
47
+ if resource is None:
48
+ continue
49
+ try:
50
+ close = getattr(resource, 'close', None)
51
+ if close is not None:
52
+ close()
53
+ except Exception as exc:
54
+ errors.append(exc)
55
+ else:
56
+ setattr(self, name, None)
57
+ if errors:
58
+ raise RuntimeError('Failed to close adapter resources') from errors[0]
59
+ self._managed_lifetime = False
60
+
61
+ def _speaker_slug(self, speaker_id: str) -> str:
62
+ """Return a filesystem-safe identifier for the supplied speaker identifier."""
63
+ token = str(speaker_id or "").strip()
64
+ slug = re.sub(r"[^0-9A-Za-z_.-]", "_", token)
65
+ return slug or "unknown"
66
+
67
+ def _speaker_output_dir(self, base_dir: Path, speaker_id: str) -> Path:
68
+ """Ensure the per-speaker directory exists and return its path."""
69
+ speaker_dir = Path(base_dir) / self._speaker_slug(speaker_id)
70
+ speaker_dir.mkdir(parents=True, exist_ok=True)
71
+ return speaker_dir
72
+
73
+ def _resolve_prompt_path(self, sample) -> Optional[Path]:
74
+ raw_path = getattr(sample, "prompt_path", None)
75
+ if raw_path in (None, ""):
76
+ return None
77
+ path = Path(str(raw_path))
78
+ try:
79
+ candidate = path if path.is_absolute() else path.resolve(strict=False)
80
+ except Exception:
81
+ candidate = path
82
+ if candidate.exists():
83
+ return candidate
84
+ return None
85
+
86
+ def _count_available_prompts(self, samples: Sequence["ZeroShotSample"]) -> int:
87
+ return sum(1 for sample in samples if self._resolve_prompt_path(sample) is not None)
88
+
89
+ def _preview_text(self, text: Optional[str], limit: int = 120) -> str:
90
+ snippet = re.sub(r"\s+", " ", (text or "").strip())
91
+ if len(snippet) > limit:
92
+ return snippet[: limit - 1] + "…"
93
+ return snippet or "<empty>"
94
+
95
+ def _describe_audio(self, path: Optional[Path]) -> str:
96
+ if path is None:
97
+ return "<none>"
98
+ try:
99
+ import soundfile as sf # Local import to avoid hard dependency when unused
100
+
101
+ with sf.SoundFile(str(path)) as handle:
102
+ duration = handle.frames / handle.samplerate if handle.samplerate else 0.0
103
+ return f"{path.name} (sr={handle.samplerate}, dur={duration:.2f}s)"
104
+ except Exception:
105
+ return path.name
106
+
107
+ def _log_attack_plan(
108
+ self,
109
+ model_label: str,
110
+ samples: Sequence["ZeroShotSample"],
111
+ prompt_count: int,
112
+ ) -> None:
113
+ logger = getattr(self, "logger", None)
114
+ if not logger:
115
+ return
116
+ total = len(samples)
117
+ speakers = [str(sample.speaker_id) for sample in samples]
118
+ unique_speakers = sorted(set(speakers))
119
+ logger.info(
120
+ "[%s] Preparing %d utterances across %d speakers. Prompt audios available: %d.",
121
+ model_label,
122
+ total,
123
+ len(unique_speakers),
124
+ prompt_count,
125
+ )
126
+ if unique_speakers:
127
+ preview = ", ".join(unique_speakers[:8])
128
+ if len(unique_speakers) > 8:
129
+ preview += ", …"
130
+ logger.debug("[%s] Speaker roster: %s", model_label, preview)
131
+
132
+ def _log_clone_request(
133
+ self,
134
+ model_label: str,
135
+ index: int,
136
+ total: int,
137
+ speaker_id: str,
138
+ prompt_path: Optional[Path],
139
+ spoken_text: Optional[str],
140
+ *,
141
+ prompt_transcript: Optional[str] = None,
142
+ ) -> None:
143
+ logger = getattr(self, "logger", None)
144
+ if not logger:
145
+ return
146
+ prompt_desc = self._describe_audio(prompt_path)
147
+ text_preview = self._preview_text(spoken_text)
148
+ message = (
149
+ f"[{model_label}] [{index + 1}/{total}] speaker={speaker_id} "
150
+ f"prompt={prompt_desc} text=\"{text_preview}\""
151
+ )
152
+ if prompt_transcript:
153
+ message += f" transcript=\"{self._preview_text(prompt_transcript)}\""
154
+ logger.info(message)
155
+
156
+ def _cloned_filename(self, sample, idx: int, suffix: str = "cloned") -> str:
157
+ from rvcbench.benchmark.artifacts import output_path
158
+ return output_path(Path('.'), sample, suffix).name
159
+
160
+ def _init_synthesis_timings(self, output_dir: Path) -> None:
161
+ self._synthesis_timing_records = []
162
+ self._synthesis_timing_path = Path(output_dir) / "synthesis_timings.csv"
163
+
164
+ def _record_synthesis_timing(self, generated_path: Path, elapsed_sec: Optional[float]) -> None:
165
+ if elapsed_sec is None:
166
+ return
167
+ if self._synthesis_timing_path is None:
168
+ return
169
+ try:
170
+ resolved = generated_path.resolve()
171
+ except Exception:
172
+ resolved = generated_path
173
+ self._synthesis_timing_records.append(
174
+ {
175
+ "generated_path": str(resolved),
176
+ "synthesis_time_sec": float(elapsed_sec),
177
+ "timing_scope": getattr(self, "timing_scope", "adapter_reported_synthesis"),
178
+ }
179
+ )
180
+
181
+ def _flush_synthesis_timings(self) -> None:
182
+ if not self._synthesis_timing_path or not self._synthesis_timing_records:
183
+ return
184
+ self._synthesis_timing_path.parent.mkdir(parents=True, exist_ok=True)
185
+ with open(self._synthesis_timing_path, "w", encoding="utf-8", newline="") as csvfile:
186
+ writer = csv.DictWriter(
187
+ csvfile,
188
+ fieldnames=["generated_path", "synthesis_time_sec", "timing_scope"],
189
+ )
190
+ writer.writeheader()
191
+ writer.writerows(self._synthesis_timing_records)
192
+ logger = getattr(self, "logger", None)
193
+ if logger is not None:
194
+ logger.info("Saved per-sample synthesis timings to %s", self._synthesis_timing_path)
195
+
196
+ @abstractmethod
197
+ def attack(
198
+ self,
199
+ *,
200
+ output_path: str,
201
+ dataset: "AllSpeakerData",
202
+ protected_audio_path: Optional[str] = None,
203
+ ) -> None:
204
+ """Generate adversarial audio for the provided dataset."""
205
+ pass