@scrypted/libav 1.0.167 → 1.0.169

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 (722) hide show
  1. package/binding.gyp +2 -0
  2. package/opus/.gitattributes +10 -0
  3. package/opus/.gitlab-ci.yml +122 -0
  4. package/opus/AUTHORS +6 -0
  5. package/opus/CMakeLists.txt +755 -0
  6. package/opus/COPYING +44 -0
  7. package/opus/ChangeLog +0 -0
  8. package/opus/LICENSE_PLEASE_READ.txt +22 -0
  9. package/opus/Makefile.am +497 -0
  10. package/opus/Makefile.mips +169 -0
  11. package/opus/Makefile.unix +167 -0
  12. package/opus/NEWS +0 -0
  13. package/opus/README +189 -0
  14. package/opus/README.draft +54 -0
  15. package/opus/autogen.bat +13 -0
  16. package/opus/autogen.sh +16 -0
  17. package/opus/celt/_kiss_fft_guts.h +188 -0
  18. package/opus/celt/arch.h +390 -0
  19. package/opus/celt/arm/arm2gnu.pl +353 -0
  20. package/opus/celt/arm/arm_celt_map.c +171 -0
  21. package/opus/celt/arm/armcpu.c +291 -0
  22. package/opus/celt/arm/armcpu.h +90 -0
  23. package/opus/celt/arm/armopts.s.in +37 -0
  24. package/opus/celt/arm/celt_fft_ne10.c +173 -0
  25. package/opus/celt/arm/celt_mdct_ne10.c +258 -0
  26. package/opus/celt/arm/celt_neon_intr.c +272 -0
  27. package/opus/celt/arm/celt_pitch_xcorr_arm.s +551 -0
  28. package/opus/celt/arm/fft_arm.h +71 -0
  29. package/opus/celt/arm/fixed_arm64.h +35 -0
  30. package/opus/celt/arm/fixed_armv4.h +80 -0
  31. package/opus/celt/arm/fixed_armv5e.h +151 -0
  32. package/opus/celt/arm/kiss_fft_armv4.h +121 -0
  33. package/opus/celt/arm/kiss_fft_armv5e.h +118 -0
  34. package/opus/celt/arm/mdct_arm.h +59 -0
  35. package/opus/celt/arm/meson.build +12 -0
  36. package/opus/celt/arm/pitch_arm.h +160 -0
  37. package/opus/celt/arm/pitch_neon_intr.c +288 -0
  38. package/opus/celt/bands.c +1686 -0
  39. package/opus/celt/bands.h +123 -0
  40. package/opus/celt/celt.c +317 -0
  41. package/opus/celt/celt.h +255 -0
  42. package/opus/celt/celt_decoder.c +1616 -0
  43. package/opus/celt/celt_encoder.c +2854 -0
  44. package/opus/celt/celt_lpc.c +364 -0
  45. package/opus/celt/celt_lpc.h +66 -0
  46. package/opus/celt/cpu_support.h +72 -0
  47. package/opus/celt/cwrs.c +715 -0
  48. package/opus/celt/cwrs.h +48 -0
  49. package/opus/celt/dump_modes/dump_modes.c +400 -0
  50. package/opus/celt/dump_modes/dump_modes_arch.h +45 -0
  51. package/opus/celt/dump_modes/dump_modes_arm_ne10.c +152 -0
  52. package/opus/celt/ecintrin.h +91 -0
  53. package/opus/celt/entcode.c +153 -0
  54. package/opus/celt/entcode.h +152 -0
  55. package/opus/celt/entdec.c +266 -0
  56. package/opus/celt/entdec.h +110 -0
  57. package/opus/celt/entenc.c +305 -0
  58. package/opus/celt/entenc.h +119 -0
  59. package/opus/celt/fixed_c5x.h +79 -0
  60. package/opus/celt/fixed_c6x.h +70 -0
  61. package/opus/celt/fixed_debug.h +839 -0
  62. package/opus/celt/fixed_generic.h +201 -0
  63. package/opus/celt/float_cast.h +152 -0
  64. package/opus/celt/kiss_fft.c +648 -0
  65. package/opus/celt/kiss_fft.h +217 -0
  66. package/opus/celt/laplace.c +235 -0
  67. package/opus/celt/laplace.h +57 -0
  68. package/opus/celt/mathops.c +217 -0
  69. package/opus/celt/mathops.h +479 -0
  70. package/opus/celt/mdct.c +372 -0
  71. package/opus/celt/mdct.h +115 -0
  72. package/opus/celt/meson.build +64 -0
  73. package/opus/celt/mfrngcod.h +48 -0
  74. package/opus/celt/mips/celt_mipsr1.h +152 -0
  75. package/opus/celt/mips/fixed_generic_mipsr1.h +126 -0
  76. package/opus/celt/mips/kiss_fft_mipsr1.h +167 -0
  77. package/opus/celt/mips/mdct_mipsr1.h +288 -0
  78. package/opus/celt/mips/pitch_mipsr1.h +161 -0
  79. package/opus/celt/mips/vq_mipsr1.h +116 -0
  80. package/opus/celt/modes.c +450 -0
  81. package/opus/celt/modes.h +75 -0
  82. package/opus/celt/opus_custom_demo.c +451 -0
  83. package/opus/celt/os_support.h +99 -0
  84. package/opus/celt/pitch.c +555 -0
  85. package/opus/celt/pitch.h +203 -0
  86. package/opus/celt/quant_bands.c +562 -0
  87. package/opus/celt/quant_bands.h +66 -0
  88. package/opus/celt/rate.c +646 -0
  89. package/opus/celt/rate.h +101 -0
  90. package/opus/celt/stack_alloc.h +185 -0
  91. package/opus/celt/static_modes_fixed.h +1541 -0
  92. package/opus/celt/static_modes_fixed_arm_ne10.h +388 -0
  93. package/opus/celt/static_modes_float.h +888 -0
  94. package/opus/celt/static_modes_float_arm_ne10.h +404 -0
  95. package/opus/celt/tests/meson.build +19 -0
  96. package/opus/celt/tests/test_unit_cwrs32.c +162 -0
  97. package/opus/celt/tests/test_unit_dft.c +181 -0
  98. package/opus/celt/tests/test_unit_entropy.c +383 -0
  99. package/opus/celt/tests/test_unit_laplace.c +94 -0
  100. package/opus/celt/tests/test_unit_mathops.c +369 -0
  101. package/opus/celt/tests/test_unit_mdct.c +233 -0
  102. package/opus/celt/tests/test_unit_rotation.c +87 -0
  103. package/opus/celt/tests/test_unit_types.c +50 -0
  104. package/opus/celt/vq.c +442 -0
  105. package/opus/celt/vq.h +79 -0
  106. package/opus/celt/x86/celt_lpc_sse.h +67 -0
  107. package/opus/celt/x86/celt_lpc_sse4_1.c +96 -0
  108. package/opus/celt/x86/pitch_avx.c +101 -0
  109. package/opus/celt/x86/pitch_sse.c +185 -0
  110. package/opus/celt/x86/pitch_sse.h +216 -0
  111. package/opus/celt/x86/pitch_sse2.c +95 -0
  112. package/opus/celt/x86/pitch_sse4_1.c +240 -0
  113. package/opus/celt/x86/vq_sse.h +52 -0
  114. package/opus/celt/x86/vq_sse2.c +217 -0
  115. package/opus/celt/x86/x86_arch_macros.h +47 -0
  116. package/opus/celt/x86/x86_celt_map.c +187 -0
  117. package/opus/celt/x86/x86cpu.c +184 -0
  118. package/opus/celt/x86/x86cpu.h +112 -0
  119. package/opus/celt_headers.mk +54 -0
  120. package/opus/celt_sources.mk +55 -0
  121. package/opus/cmake/CFeatureCheck.cmake +39 -0
  122. package/opus/cmake/OpusBuildtype.cmake +27 -0
  123. package/opus/cmake/OpusConfig.cmake +118 -0
  124. package/opus/cmake/OpusConfig.cmake.in +20 -0
  125. package/opus/cmake/OpusFunctions.cmake +231 -0
  126. package/opus/cmake/OpusPackageVersion.cmake +70 -0
  127. package/opus/cmake/OpusSources.cmake +71 -0
  128. package/opus/cmake/README.md +132 -0
  129. package/opus/cmake/RunTest.cmake +61 -0
  130. package/opus/cmake/config.h.cmake.in +1 -0
  131. package/opus/cmake/cpu_info_by_asm.c +31 -0
  132. package/opus/cmake/cpu_info_by_c.c +9 -0
  133. package/opus/cmake/vla.c +7 -0
  134. package/opus/configure.ac +1091 -0
  135. package/opus/dnn/LPCNet.yml +24 -0
  136. package/opus/dnn/README +1 -0
  137. package/opus/dnn/README.md +126 -0
  138. package/opus/dnn/adaconvtest.c +449 -0
  139. package/opus/dnn/arm/arm_dnn_map.c +88 -0
  140. package/opus/dnn/arm/dnn_arm.h +104 -0
  141. package/opus/dnn/arm/nnet_dotprod.c +38 -0
  142. package/opus/dnn/arm/nnet_neon.c +38 -0
  143. package/opus/dnn/burg.c +246 -0
  144. package/opus/dnn/burg.h +41 -0
  145. package/opus/dnn/common.h +56 -0
  146. package/opus/dnn/datasets.txt +163 -0
  147. package/opus/dnn/download_model.bat +9 -0
  148. package/opus/dnn/download_model.sh +30 -0
  149. package/opus/dnn/dred_coding.c +44 -0
  150. package/opus/dnn/dred_coding.h +36 -0
  151. package/opus/dnn/dred_config.h +54 -0
  152. package/opus/dnn/dred_decoder.c +129 -0
  153. package/opus/dnn/dred_decoder.h +49 -0
  154. package/opus/dnn/dred_encoder.c +363 -0
  155. package/opus/dnn/dred_encoder.h +71 -0
  156. package/opus/dnn/dred_rdovae.h +42 -0
  157. package/opus/dnn/dred_rdovae_dec.c +139 -0
  158. package/opus/dnn/dred_rdovae_dec.h +53 -0
  159. package/opus/dnn/dred_rdovae_enc.c +110 -0
  160. package/opus/dnn/dred_rdovae_enc.h +52 -0
  161. package/opus/dnn/dump_data.c +238 -0
  162. package/opus/dnn/dump_lpcnet_tables.c +104 -0
  163. package/opus/dnn/fargan.c +225 -0
  164. package/opus/dnn/fargan.h +68 -0
  165. package/opus/dnn/fargan_demo.c +217 -0
  166. package/opus/dnn/freq.c +328 -0
  167. package/opus/dnn/freq.h +61 -0
  168. package/opus/dnn/fwgan.c +322 -0
  169. package/opus/dnn/fwgan.h +83 -0
  170. package/opus/dnn/kiss99.c +81 -0
  171. package/opus/dnn/kiss99.h +46 -0
  172. package/opus/dnn/lossgen.c +192 -0
  173. package/opus/dnn/lossgen.h +55 -0
  174. package/opus/dnn/lossgen_demo.c +22 -0
  175. package/opus/dnn/lpcnet.c +283 -0
  176. package/opus/dnn/lpcnet.h +183 -0
  177. package/opus/dnn/lpcnet_enc.c +230 -0
  178. package/opus/dnn/lpcnet_plc.c +211 -0
  179. package/opus/dnn/lpcnet_private.h +90 -0
  180. package/opus/dnn/lpcnet_tables.c +307 -0
  181. package/opus/dnn/meson.build +64 -0
  182. package/opus/dnn/nndsp.c +416 -0
  183. package/opus/dnn/nndsp.h +143 -0
  184. package/opus/dnn/nnet.c +149 -0
  185. package/opus/dnn/nnet.h +163 -0
  186. package/opus/dnn/nnet_arch.h +247 -0
  187. package/opus/dnn/nnet_default.c +35 -0
  188. package/opus/dnn/osce.c +1419 -0
  189. package/opus/dnn/osce.h +84 -0
  190. package/opus/dnn/osce_config.h +60 -0
  191. package/opus/dnn/osce_features.c +454 -0
  192. package/opus/dnn/osce_features.h +50 -0
  193. package/opus/dnn/osce_structs.h +125 -0
  194. package/opus/dnn/parse_lpcnet_weights.c +238 -0
  195. package/opus/dnn/pitchdnn.c +79 -0
  196. package/opus/dnn/pitchdnn.h +34 -0
  197. package/opus/dnn/tansig_table.h +50 -0
  198. package/opus/dnn/test_vec.c +128 -0
  199. package/opus/dnn/torch/dnntools/dnntools/__init__.py +2 -0
  200. package/opus/dnn/torch/dnntools/dnntools/quantization/__init__.py +1 -0
  201. package/opus/dnn/torch/dnntools/dnntools/quantization/softquant.py +113 -0
  202. package/opus/dnn/torch/dnntools/dnntools/relegance/__init__.py +2 -0
  203. package/opus/dnn/torch/dnntools/dnntools/relegance/meta_critic.py +85 -0
  204. package/opus/dnn/torch/dnntools/dnntools/relegance/relegance.py +449 -0
  205. package/opus/dnn/torch/dnntools/dnntools/sparsification/__init__.py +6 -0
  206. package/opus/dnn/torch/dnntools/dnntools/sparsification/base_sparsifier.py +58 -0
  207. package/opus/dnn/torch/dnntools/dnntools/sparsification/common.py +123 -0
  208. package/opus/dnn/torch/dnntools/dnntools/sparsification/conv1d_sparsifier.py +133 -0
  209. package/opus/dnn/torch/dnntools/dnntools/sparsification/conv_transpose1d_sparsifier.py +134 -0
  210. package/opus/dnn/torch/dnntools/dnntools/sparsification/gru_sparsifier.py +178 -0
  211. package/opus/dnn/torch/dnntools/dnntools/sparsification/linear_sparsifier.py +128 -0
  212. package/opus/dnn/torch/dnntools/dnntools/sparsification/utils.py +64 -0
  213. package/opus/dnn/torch/dnntools/requirements.txt +1 -0
  214. package/opus/dnn/torch/dnntools/setup.py +48 -0
  215. package/opus/dnn/torch/fargan/README.md +54 -0
  216. package/opus/dnn/torch/fargan/adv_train_fargan.py +277 -0
  217. package/opus/dnn/torch/fargan/dataset.py +61 -0
  218. package/opus/dnn/torch/fargan/dump_fargan_weights.py +112 -0
  219. package/opus/dnn/torch/fargan/fargan.py +322 -0
  220. package/opus/dnn/torch/fargan/filters.py +46 -0
  221. package/opus/dnn/torch/fargan/rc.py +29 -0
  222. package/opus/dnn/torch/fargan/stft_loss.py +186 -0
  223. package/opus/dnn/torch/fargan/test_fargan.py +128 -0
  224. package/opus/dnn/torch/fargan/train_fargan.py +168 -0
  225. package/opus/dnn/torch/fwgan/dump_model_weights.py +88 -0
  226. package/opus/dnn/torch/fwgan/inference.py +141 -0
  227. package/opus/dnn/torch/fwgan/models/__init__.py +7 -0
  228. package/opus/dnn/torch/fwgan/models/fwgan400.py +308 -0
  229. package/opus/dnn/torch/fwgan/models/fwgan500.py +260 -0
  230. package/opus/dnn/torch/lossgen/README.md +27 -0
  231. package/opus/dnn/torch/lossgen/export_lossgen.py +101 -0
  232. package/opus/dnn/torch/lossgen/lossgen.py +29 -0
  233. package/opus/dnn/torch/lossgen/process_data.sh +17 -0
  234. package/opus/dnn/torch/lossgen/test_lossgen.py +42 -0
  235. package/opus/dnn/torch/lossgen/train_lossgen.py +99 -0
  236. package/opus/dnn/torch/lpcnet/README.md +27 -0
  237. package/opus/dnn/torch/lpcnet/add_dataset_config.py +77 -0
  238. package/opus/dnn/torch/lpcnet/data/__init__.py +1 -0
  239. package/opus/dnn/torch/lpcnet/data/lpcnet_dataset.py +227 -0
  240. package/opus/dnn/torch/lpcnet/engine/lpcnet_engine.py +141 -0
  241. package/opus/dnn/torch/lpcnet/make_default_setup.py +56 -0
  242. package/opus/dnn/torch/lpcnet/make_test_config.py +78 -0
  243. package/opus/dnn/torch/lpcnet/models/__init__.py +8 -0
  244. package/opus/dnn/torch/lpcnet/models/lpcnet.py +303 -0
  245. package/opus/dnn/torch/lpcnet/models/multi_rate_lpcnet.py +437 -0
  246. package/opus/dnn/torch/lpcnet/print_lpcnet_complexity.py +64 -0
  247. package/opus/dnn/torch/lpcnet/scripts/collect_multi_run_results.py +190 -0
  248. package/opus/dnn/torch/lpcnet/scripts/loop_run.sh +52 -0
  249. package/opus/dnn/torch/lpcnet/scripts/make_animation.py +67 -0
  250. package/opus/dnn/torch/lpcnet/scripts/modify_dataset_target.py +17 -0
  251. package/opus/dnn/torch/lpcnet/scripts/multi_run.sh +17 -0
  252. package/opus/dnn/torch/lpcnet/scripts/run_inference_test.sh +22 -0
  253. package/opus/dnn/torch/lpcnet/scripts/update_checkpoints.py +54 -0
  254. package/opus/dnn/torch/lpcnet/scripts/update_output_folder.sh +22 -0
  255. package/opus/dnn/torch/lpcnet/scripts/update_setups.py +57 -0
  256. package/opus/dnn/torch/lpcnet/test_lpcnet.py +89 -0
  257. package/opus/dnn/torch/lpcnet/train_lpcnet.py +272 -0
  258. package/opus/dnn/torch/lpcnet/utils/__init__.py +4 -0
  259. package/opus/dnn/torch/lpcnet/utils/data.py +141 -0
  260. package/opus/dnn/torch/lpcnet/utils/endoscopy.py +234 -0
  261. package/opus/dnn/torch/lpcnet/utils/layers/__init__.py +3 -0
  262. package/opus/dnn/torch/lpcnet/utils/layers/dual_fc.py +44 -0
  263. package/opus/dnn/torch/lpcnet/utils/layers/pcm_embeddings.py +71 -0
  264. package/opus/dnn/torch/lpcnet/utils/layers/subconditioner.py +497 -0
  265. package/opus/dnn/torch/lpcnet/utils/misc.py +65 -0
  266. package/opus/dnn/torch/lpcnet/utils/pcm.py +35 -0
  267. package/opus/dnn/torch/lpcnet/utils/sample.py +44 -0
  268. package/opus/dnn/torch/lpcnet/utils/sparsification/__init__.py +2 -0
  269. package/opus/dnn/torch/lpcnet/utils/sparsification/common.py +121 -0
  270. package/opus/dnn/torch/lpcnet/utils/sparsification/gru_sparsifier.py +187 -0
  271. package/opus/dnn/torch/lpcnet/utils/templates.py +157 -0
  272. package/opus/dnn/torch/lpcnet/utils/ulaw.py +58 -0
  273. package/opus/dnn/torch/lpcnet/utils/wav.py +43 -0
  274. package/opus/dnn/torch/neural-pitch/README.md +18 -0
  275. package/opus/dnn/torch/neural-pitch/data_augmentation.py +149 -0
  276. package/opus/dnn/torch/neural-pitch/download_demand.sh +43 -0
  277. package/opus/dnn/torch/neural-pitch/evaluation.py +349 -0
  278. package/opus/dnn/torch/neural-pitch/experiments.py +38 -0
  279. package/opus/dnn/torch/neural-pitch/export_neuralpitch_weights.py +109 -0
  280. package/opus/dnn/torch/neural-pitch/models.py +178 -0
  281. package/opus/dnn/torch/neural-pitch/neural_pitch_update.py +179 -0
  282. package/opus/dnn/torch/neural-pitch/ptdb_process.sh +34 -0
  283. package/opus/dnn/torch/neural-pitch/run_crepe.py +72 -0
  284. package/opus/dnn/torch/neural-pitch/training.py +162 -0
  285. package/opus/dnn/torch/neural-pitch/utils.py +59 -0
  286. package/opus/dnn/torch/osce/README.md +66 -0
  287. package/opus/dnn/torch/osce/adv_train_model.py +462 -0
  288. package/opus/dnn/torch/osce/adv_train_vocoder.py +451 -0
  289. package/opus/dnn/torch/osce/create_testvectors.py +165 -0
  290. package/opus/dnn/torch/osce/data/__init__.py +2 -0
  291. package/opus/dnn/torch/osce/data/lpcnet_vocoding_dataset.py +225 -0
  292. package/opus/dnn/torch/osce/data/silk_conversion_set.py +132 -0
  293. package/opus/dnn/torch/osce/data/silk_enhancement_set.py +140 -0
  294. package/opus/dnn/torch/osce/engine/engine.py +103 -0
  295. package/opus/dnn/torch/osce/engine/vocoder_engine.py +101 -0
  296. package/opus/dnn/torch/osce/export_model_weights.py +174 -0
  297. package/opus/dnn/torch/osce/losses/stft_loss.py +277 -0
  298. package/opus/dnn/torch/osce/losses/td_lowpass.py +34 -0
  299. package/opus/dnn/torch/osce/make_default_setup.py +93 -0
  300. package/opus/dnn/torch/osce/models/__init__.py +42 -0
  301. package/opus/dnn/torch/osce/models/fd_discriminator.py +974 -0
  302. package/opus/dnn/torch/osce/models/lace.py +190 -0
  303. package/opus/dnn/torch/osce/models/lavoce.py +274 -0
  304. package/opus/dnn/torch/osce/models/lavoce_400.py +254 -0
  305. package/opus/dnn/torch/osce/models/lpcnet_feature_net.py +91 -0
  306. package/opus/dnn/torch/osce/models/nns_base.py +69 -0
  307. package/opus/dnn/torch/osce/models/no_lace.py +218 -0
  308. package/opus/dnn/torch/osce/models/scale_embedding.py +68 -0
  309. package/opus/dnn/torch/osce/models/shape_up_48.py +179 -0
  310. package/opus/dnn/torch/osce/models/silk_feature_net.py +86 -0
  311. package/opus/dnn/torch/osce/models/silk_feature_net_pl.py +127 -0
  312. package/opus/dnn/torch/osce/requirements.txt +9 -0
  313. package/opus/dnn/torch/osce/resources/training_files.txt +107716 -0
  314. package/opus/dnn/torch/osce/resources/validation_files.txt +26929 -0
  315. package/opus/dnn/torch/osce/scripts/concatenator.py +85 -0
  316. package/opus/dnn/torch/osce/silk_16_to_48.py +28 -0
  317. package/opus/dnn/torch/osce/stndrd/evaluation/commonvoice_clip_selection.py +123 -0
  318. package/opus/dnn/torch/osce/stndrd/evaluation/create_input_data.sh +25 -0
  319. package/opus/dnn/torch/osce/stndrd/evaluation/env.rc +7 -0
  320. package/opus/dnn/torch/osce/stndrd/evaluation/evaluate.py +113 -0
  321. package/opus/dnn/torch/osce/stndrd/evaluation/lace_loss_metric.py +330 -0
  322. package/opus/dnn/torch/osce/stndrd/evaluation/make_boxplots.py +116 -0
  323. package/opus/dnn/torch/osce/stndrd/evaluation/make_boxplots_moctest.py +109 -0
  324. package/opus/dnn/torch/osce/stndrd/evaluation/make_tables.py +124 -0
  325. package/opus/dnn/torch/osce/stndrd/evaluation/make_tables_moctest.py +121 -0
  326. package/opus/dnn/torch/osce/stndrd/evaluation/moc.py +182 -0
  327. package/opus/dnn/torch/osce/stndrd/evaluation/moc2.py +190 -0
  328. package/opus/dnn/torch/osce/stndrd/evaluation/process_dataset.sh +98 -0
  329. package/opus/dnn/torch/osce/stndrd/evaluation/run_nomad.py +138 -0
  330. package/opus/dnn/torch/osce/stndrd/evaluation/run_osce_test.py +196 -0
  331. package/opus/dnn/torch/osce/stndrd/presentation/endoscopy.py +205 -0
  332. package/opus/dnn/torch/osce/stndrd/presentation/lace_demo.ipynb +313 -0
  333. package/opus/dnn/torch/osce/stndrd/presentation/linear_prediction.ipynb +320 -0
  334. package/opus/dnn/torch/osce/stndrd/presentation/playback.py +25 -0
  335. package/opus/dnn/torch/osce/stndrd/presentation/postfilter.ipynb +275 -0
  336. package/opus/dnn/torch/osce/stndrd/presentation/spectrogram.ipynb +173 -0
  337. package/opus/dnn/torch/osce/test_model.py +96 -0
  338. package/opus/dnn/torch/osce/test_vocoder.py +103 -0
  339. package/opus/dnn/torch/osce/train_model.py +307 -0
  340. package/opus/dnn/torch/osce/train_vocoder.py +287 -0
  341. package/opus/dnn/torch/osce/utils/ada_conv.py +71 -0
  342. package/opus/dnn/torch/osce/utils/complexity.py +8 -0
  343. package/opus/dnn/torch/osce/utils/endoscopy.py +205 -0
  344. package/opus/dnn/torch/osce/utils/layers/fir.py +27 -0
  345. package/opus/dnn/torch/osce/utils/layers/limited_adaptive_comb1d.py +230 -0
  346. package/opus/dnn/torch/osce/utils/layers/limited_adaptive_conv1d.py +200 -0
  347. package/opus/dnn/torch/osce/utils/layers/noise_shaper.py +100 -0
  348. package/opus/dnn/torch/osce/utils/layers/pitch_auto_correlator.py +84 -0
  349. package/opus/dnn/torch/osce/utils/layers/silk_upsampler.py +167 -0
  350. package/opus/dnn/torch/osce/utils/layers/td_shaper.py +145 -0
  351. package/opus/dnn/torch/osce/utils/lpcnet_features.py +112 -0
  352. package/opus/dnn/torch/osce/utils/misc.py +95 -0
  353. package/opus/dnn/torch/osce/utils/moc.py +153 -0
  354. package/opus/dnn/torch/osce/utils/pitch.py +122 -0
  355. package/opus/dnn/torch/osce/utils/silk_features.py +144 -0
  356. package/opus/dnn/torch/osce/utils/softquant.py +110 -0
  357. package/opus/dnn/torch/osce/utils/spec.py +210 -0
  358. package/opus/dnn/torch/osce/utils/templates.py +347 -0
  359. package/opus/dnn/torch/plc/export_plc.py +100 -0
  360. package/opus/dnn/torch/plc/plc.py +144 -0
  361. package/opus/dnn/torch/plc/plc_dataset.py +60 -0
  362. package/opus/dnn/torch/plc/train_plc.py +145 -0
  363. package/opus/dnn/torch/rdovae/README.md +55 -0
  364. package/opus/dnn/torch/rdovae/download_datasets.sh +6 -0
  365. package/opus/dnn/torch/rdovae/export_rdovae_weights.py +365 -0
  366. package/opus/dnn/torch/rdovae/fec_encoder.py +212 -0
  367. package/opus/dnn/torch/rdovae/import_rdovae_weights.py +143 -0
  368. package/opus/dnn/torch/rdovae/packets/__init__.py +1 -0
  369. package/opus/dnn/torch/rdovae/packets/fec_packets.c +142 -0
  370. package/opus/dnn/torch/rdovae/packets/fec_packets.h +34 -0
  371. package/opus/dnn/torch/rdovae/packets/fec_packets.py +108 -0
  372. package/opus/dnn/torch/rdovae/process_speech.sh +7 -0
  373. package/opus/dnn/torch/rdovae/rdovae/__init__.py +2 -0
  374. package/opus/dnn/torch/rdovae/rdovae/dataset.py +67 -0
  375. package/opus/dnn/torch/rdovae/rdovae/rdovae.py +719 -0
  376. package/opus/dnn/torch/rdovae/requirements.txt +4 -0
  377. package/opus/dnn/torch/rdovae/train_rdovae.py +278 -0
  378. package/opus/dnn/torch/testsuite/README.md +46 -0
  379. package/opus/dnn/torch/testsuite/examples/lpcnet_c_example.yml +6 -0
  380. package/opus/dnn/torch/testsuite/examples/lpcnet_c_plc_example.yml +5 -0
  381. package/opus/dnn/torch/testsuite/examples/lpcnet_torch_example.yml +5 -0
  382. package/opus/dnn/torch/testsuite/requirements.txt +12 -0
  383. package/opus/dnn/torch/testsuite/run_test.py +375 -0
  384. package/opus/dnn/torch/testsuite/utils/__init__.py +0 -0
  385. package/opus/dnn/torch/testsuite/utils/files.py +54 -0
  386. package/opus/dnn/torch/testsuite/utils/pesq.py +43 -0
  387. package/opus/dnn/torch/testsuite/utils/pitch.py +61 -0
  388. package/opus/dnn/torch/weight-exchange/README.md +21 -0
  389. package/opus/dnn/torch/weight-exchange/requirements.txt +1 -0
  390. package/opus/dnn/torch/weight-exchange/setup.py +48 -0
  391. package/opus/dnn/torch/weight-exchange/wexchange/__init__.py +30 -0
  392. package/opus/dnn/torch/weight-exchange/wexchange/c_export/__init__.py +31 -0
  393. package/opus/dnn/torch/weight-exchange/wexchange/c_export/c_writer.py +181 -0
  394. package/opus/dnn/torch/weight-exchange/wexchange/c_export/common.py +386 -0
  395. package/opus/dnn/torch/weight-exchange/wexchange/tf/__init__.py +5 -0
  396. package/opus/dnn/torch/weight-exchange/wexchange/tf/tf.py +188 -0
  397. package/opus/dnn/torch/weight-exchange/wexchange/torch/__init__.py +37 -0
  398. package/opus/dnn/torch/weight-exchange/wexchange/torch/torch.py +433 -0
  399. package/opus/dnn/training_tf2/dataloader.py +49 -0
  400. package/opus/dnn/training_tf2/decode_rdovae.py +111 -0
  401. package/opus/dnn/training_tf2/diffembed.py +49 -0
  402. package/opus/dnn/training_tf2/dump_lpcnet.py +388 -0
  403. package/opus/dnn/training_tf2/dump_plc.py +296 -0
  404. package/opus/dnn/training_tf2/dump_rdovae.py +306 -0
  405. package/opus/dnn/training_tf2/encode_rdovae.py +125 -0
  406. package/opus/dnn/training_tf2/fec_encoder.py +256 -0
  407. package/opus/dnn/training_tf2/fec_packets.c +142 -0
  408. package/opus/dnn/training_tf2/fec_packets.h +34 -0
  409. package/opus/dnn/training_tf2/fec_packets.py +108 -0
  410. package/opus/dnn/training_tf2/keraslayerdump.py +189 -0
  411. package/opus/dnn/training_tf2/lossfuncs.py +99 -0
  412. package/opus/dnn/training_tf2/lpcnet.py +339 -0
  413. package/opus/dnn/training_tf2/lpcnet_plc.py +101 -0
  414. package/opus/dnn/training_tf2/mdense.py +95 -0
  415. package/opus/dnn/training_tf2/pade.py +70 -0
  416. package/opus/dnn/training_tf2/parameters.py +29 -0
  417. package/opus/dnn/training_tf2/plc_loader.py +73 -0
  418. package/opus/dnn/training_tf2/rdovae.py +372 -0
  419. package/opus/dnn/training_tf2/rdovae_exchange.py +138 -0
  420. package/opus/dnn/training_tf2/rdovae_import.py +123 -0
  421. package/opus/dnn/training_tf2/test_lpcnet.py +120 -0
  422. package/opus/dnn/training_tf2/test_plc.py +92 -0
  423. package/opus/dnn/training_tf2/tf_funcs.py +70 -0
  424. package/opus/dnn/training_tf2/train_lpcnet.py +214 -0
  425. package/opus/dnn/training_tf2/train_plc.py +197 -0
  426. package/opus/dnn/training_tf2/train_rdovae.py +151 -0
  427. package/opus/dnn/training_tf2/ulaw.py +19 -0
  428. package/opus/dnn/training_tf2/uniform_noise.py +78 -0
  429. package/opus/dnn/vec.h +389 -0
  430. package/opus/dnn/vec_avx.h +884 -0
  431. package/opus/dnn/vec_neon.h +473 -0
  432. package/opus/dnn/write_lpcnet_weights.c +97 -0
  433. package/opus/dnn/x86/dnn_x86.h +121 -0
  434. package/opus/dnn/x86/nnet_avx2.c +40 -0
  435. package/opus/dnn/x86/nnet_sse2.c +40 -0
  436. package/opus/dnn/x86/nnet_sse4_1.c +40 -0
  437. package/opus/dnn/x86/x86_dnn_map.c +83 -0
  438. package/opus/doc/Doxyfile.in +340 -0
  439. package/opus/doc/Makefile.am +45 -0
  440. package/opus/doc/build_draft.sh +113 -0
  441. package/opus/doc/build_isobmff.sh +50 -0
  442. package/opus/doc/build_oggdraft.sh +52 -0
  443. package/opus/doc/customdoxygen.css +1011 -0
  444. package/opus/doc/draft-ietf-codec-oggopus.xml +1873 -0
  445. package/opus/doc/draft-ietf-codec-opus-update.xml +513 -0
  446. package/opus/doc/draft-ietf-codec-opus.xml +8276 -0
  447. package/opus/doc/draft-ietf-payload-rtp-opus.xml +960 -0
  448. package/opus/doc/footer.html +32 -0
  449. package/opus/doc/header.html +61 -0
  450. package/opus/doc/meson.build +33 -0
  451. package/opus/doc/opus_in_isobmff.css +60 -0
  452. package/opus/doc/opus_in_isobmff.html +692 -0
  453. package/opus/doc/opus_logo.svg +157 -0
  454. package/opus/doc/opus_update.patch +244 -0
  455. package/opus/doc/release.txt +43 -0
  456. package/opus/doc/trivial_example.c +171 -0
  457. package/opus/include/meson.build +13 -0
  458. package/opus/include/opus.h +1172 -0
  459. package/opus/include/opus_custom.h +381 -0
  460. package/opus/include/opus_defines.h +830 -0
  461. package/opus/include/opus_multistream.h +736 -0
  462. package/opus/include/opus_projection.h +643 -0
  463. package/opus/include/opus_types.h +166 -0
  464. package/opus/lpcnet_headers.mk +44 -0
  465. package/opus/lpcnet_sources.mk +44 -0
  466. package/opus/m4/as-gcc-inline-assembly.m4 +98 -0
  467. package/opus/m4/ax_add_fortify_source.m4 +53 -0
  468. package/opus/m4/opus-intrinsics.m4 +29 -0
  469. package/opus/meson/README.md +88 -0
  470. package/opus/meson/get-version.py +86 -0
  471. package/opus/meson/read-sources-list.py +28 -0
  472. package/opus/meson.build +745 -0
  473. package/opus/meson_options.txt +27 -0
  474. package/opus/opus-uninstalled.pc.in +12 -0
  475. package/opus/opus.m4 +117 -0
  476. package/opus/opus.pc.in +16 -0
  477. package/opus/opus_headers.mk +8 -0
  478. package/opus/opus_sources.mk +17 -0
  479. package/opus/releases.sha2 +85 -0
  480. package/opus/scripts/dump_rnn.py +57 -0
  481. package/opus/scripts/local_build.py +220 -0
  482. package/opus/scripts/rnn_train.py +67 -0
  483. package/opus/scripts/shrink_model.sh +7 -0
  484. package/opus/silk/A2NLSF.c +267 -0
  485. package/opus/silk/API.h +156 -0
  486. package/opus/silk/CNG.c +188 -0
  487. package/opus/silk/HP_variable_cutoff.c +77 -0
  488. package/opus/silk/Inlines.h +188 -0
  489. package/opus/silk/LPC_analysis_filter.c +111 -0
  490. package/opus/silk/LPC_fit.c +82 -0
  491. package/opus/silk/LPC_inv_pred_gain.c +141 -0
  492. package/opus/silk/LP_variable_cutoff.c +135 -0
  493. package/opus/silk/MacroCount.h +710 -0
  494. package/opus/silk/MacroDebug.h +945 -0
  495. package/opus/silk/NLSF2A.c +141 -0
  496. package/opus/silk/NLSF_VQ.c +76 -0
  497. package/opus/silk/NLSF_VQ_weights_laroia.c +80 -0
  498. package/opus/silk/NLSF_decode.c +93 -0
  499. package/opus/silk/NLSF_del_dec_quant.c +215 -0
  500. package/opus/silk/NLSF_encode.c +124 -0
  501. package/opus/silk/NLSF_stabilize.c +142 -0
  502. package/opus/silk/NLSF_unpack.c +55 -0
  503. package/opus/silk/NSQ.c +437 -0
  504. package/opus/silk/NSQ.h +101 -0
  505. package/opus/silk/NSQ_del_dec.c +733 -0
  506. package/opus/silk/PLC.c +493 -0
  507. package/opus/silk/PLC.h +65 -0
  508. package/opus/silk/SigProc_FIX.h +643 -0
  509. package/opus/silk/VAD.c +360 -0
  510. package/opus/silk/VQ_WMat_EC.c +131 -0
  511. package/opus/silk/ana_filt_bank_1.c +74 -0
  512. package/opus/silk/arm/LPC_inv_pred_gain_arm.h +57 -0
  513. package/opus/silk/arm/LPC_inv_pred_gain_neon_intr.c +288 -0
  514. package/opus/silk/arm/NSQ_del_dec_arm.h +100 -0
  515. package/opus/silk/arm/NSQ_del_dec_neon_intr.c +1138 -0
  516. package/opus/silk/arm/NSQ_neon.c +112 -0
  517. package/opus/silk/arm/NSQ_neon.h +114 -0
  518. package/opus/silk/arm/SigProc_FIX_armv4.h +47 -0
  519. package/opus/silk/arm/SigProc_FIX_armv5e.h +61 -0
  520. package/opus/silk/arm/arm_silk_map.c +128 -0
  521. package/opus/silk/arm/biquad_alt_arm.h +68 -0
  522. package/opus/silk/arm/biquad_alt_neon_intr.c +156 -0
  523. package/opus/silk/arm/macros_arm64.h +39 -0
  524. package/opus/silk/arm/macros_armv4.h +110 -0
  525. package/opus/silk/arm/macros_armv5e.h +220 -0
  526. package/opus/silk/biquad_alt.c +121 -0
  527. package/opus/silk/bwexpander.c +51 -0
  528. package/opus/silk/bwexpander_32.c +51 -0
  529. package/opus/silk/check_control_input.c +106 -0
  530. package/opus/silk/code_signs.c +115 -0
  531. package/opus/silk/control.h +161 -0
  532. package/opus/silk/control_SNR.c +113 -0
  533. package/opus/silk/control_audio_bandwidth.c +132 -0
  534. package/opus/silk/control_codec.c +423 -0
  535. package/opus/silk/debug.c +174 -0
  536. package/opus/silk/debug.h +267 -0
  537. package/opus/silk/dec_API.c +465 -0
  538. package/opus/silk/decode_core.c +243 -0
  539. package/opus/silk/decode_frame.c +169 -0
  540. package/opus/silk/decode_indices.c +151 -0
  541. package/opus/silk/decode_parameters.c +115 -0
  542. package/opus/silk/decode_pitch.c +77 -0
  543. package/opus/silk/decode_pulses.c +115 -0
  544. package/opus/silk/decoder_set_fs.c +108 -0
  545. package/opus/silk/define.h +235 -0
  546. package/opus/silk/enc_API.c +593 -0
  547. package/opus/silk/encode_indices.c +181 -0
  548. package/opus/silk/encode_pulses.c +206 -0
  549. package/opus/silk/errors.h +98 -0
  550. package/opus/silk/fixed/LTP_analysis_filter_FIX.c +90 -0
  551. package/opus/silk/fixed/LTP_scale_ctrl_FIX.c +58 -0
  552. package/opus/silk/fixed/apply_sine_window_FIX.c +101 -0
  553. package/opus/silk/fixed/arm/warped_autocorrelation_FIX_arm.h +68 -0
  554. package/opus/silk/fixed/arm/warped_autocorrelation_FIX_neon_intr.c +265 -0
  555. package/opus/silk/fixed/autocorr_FIX.c +48 -0
  556. package/opus/silk/fixed/burg_modified_FIX.c +280 -0
  557. package/opus/silk/fixed/corrMatrix_FIX.c +150 -0
  558. package/opus/silk/fixed/encode_frame_FIX.c +444 -0
  559. package/opus/silk/fixed/find_LPC_FIX.c +151 -0
  560. package/opus/silk/fixed/find_LTP_FIX.c +99 -0
  561. package/opus/silk/fixed/find_pitch_lags_FIX.c +143 -0
  562. package/opus/silk/fixed/find_pred_coefs_FIX.c +146 -0
  563. package/opus/silk/fixed/k2a_FIX.c +54 -0
  564. package/opus/silk/fixed/k2a_Q16_FIX.c +54 -0
  565. package/opus/silk/fixed/main_FIX.h +244 -0
  566. package/opus/silk/fixed/mips/noise_shape_analysis_FIX_mipsr1.h +336 -0
  567. package/opus/silk/fixed/mips/prefilter_FIX_mipsr1.h +184 -0
  568. package/opus/silk/fixed/mips/warped_autocorrelation_FIX_mipsr1.h +165 -0
  569. package/opus/silk/fixed/noise_shape_analysis_FIX.c +407 -0
  570. package/opus/silk/fixed/pitch_analysis_core_FIX.c +721 -0
  571. package/opus/silk/fixed/process_gains_FIX.c +117 -0
  572. package/opus/silk/fixed/regularize_correlations_FIX.c +47 -0
  573. package/opus/silk/fixed/residual_energy16_FIX.c +103 -0
  574. package/opus/silk/fixed/residual_energy_FIX.c +98 -0
  575. package/opus/silk/fixed/schur64_FIX.c +93 -0
  576. package/opus/silk/fixed/schur_FIX.c +107 -0
  577. package/opus/silk/fixed/structs_FIX.h +116 -0
  578. package/opus/silk/fixed/vector_ops_FIX.c +102 -0
  579. package/opus/silk/fixed/warped_autocorrelation_FIX.c +92 -0
  580. package/opus/silk/fixed/x86/burg_modified_FIX_sse4_1.c +400 -0
  581. package/opus/silk/fixed/x86/vector_ops_FIX_sse4_1.c +93 -0
  582. package/opus/silk/float/LPC_analysis_filter_FLP.c +249 -0
  583. package/opus/silk/float/LPC_inv_pred_gain_FLP.c +73 -0
  584. package/opus/silk/float/LTP_analysis_filter_FLP.c +75 -0
  585. package/opus/silk/float/LTP_scale_ctrl_FLP.c +58 -0
  586. package/opus/silk/float/SigProc_FLP.h +205 -0
  587. package/opus/silk/float/apply_sine_window_FLP.c +81 -0
  588. package/opus/silk/float/autocorrelation_FLP.c +53 -0
  589. package/opus/silk/float/burg_modified_FLP.c +187 -0
  590. package/opus/silk/float/bwexpander_FLP.c +49 -0
  591. package/opus/silk/float/corrMatrix_FLP.c +95 -0
  592. package/opus/silk/float/encode_frame_FLP.c +432 -0
  593. package/opus/silk/float/energy_FLP.c +59 -0
  594. package/opus/silk/float/find_LPC_FLP.c +105 -0
  595. package/opus/silk/float/find_LTP_FLP.c +65 -0
  596. package/opus/silk/float/find_pitch_lags_FLP.c +132 -0
  597. package/opus/silk/float/find_pred_coefs_FLP.c +117 -0
  598. package/opus/silk/float/inner_product_FLP.c +59 -0
  599. package/opus/silk/float/k2a_FLP.c +54 -0
  600. package/opus/silk/float/main_FLP.h +290 -0
  601. package/opus/silk/float/noise_shape_analysis_FLP.c +350 -0
  602. package/opus/silk/float/pitch_analysis_core_FLP.c +630 -0
  603. package/opus/silk/float/process_gains_FLP.c +103 -0
  604. package/opus/silk/float/regularize_correlations_FLP.c +48 -0
  605. package/opus/silk/float/residual_energy_FLP.c +117 -0
  606. package/opus/silk/float/scale_copy_vector_FLP.c +57 -0
  607. package/opus/silk/float/scale_vector_FLP.c +56 -0
  608. package/opus/silk/float/schur_FLP.c +70 -0
  609. package/opus/silk/float/sort_FLP.c +83 -0
  610. package/opus/silk/float/structs_FLP.h +112 -0
  611. package/opus/silk/float/warped_autocorrelation_FLP.c +75 -0
  612. package/opus/silk/float/wrappers_FLP.c +209 -0
  613. package/opus/silk/float/x86/inner_product_FLP_avx2.c +85 -0
  614. package/opus/silk/gain_quant.c +142 -0
  615. package/opus/silk/init_decoder.c +84 -0
  616. package/opus/silk/init_encoder.c +68 -0
  617. package/opus/silk/inner_prod_aligned.c +47 -0
  618. package/opus/silk/interpolate.c +51 -0
  619. package/opus/silk/lin2log.c +46 -0
  620. package/opus/silk/log2lin.c +58 -0
  621. package/opus/silk/macros.h +151 -0
  622. package/opus/silk/main.h +486 -0
  623. package/opus/silk/meson.build +69 -0
  624. package/opus/silk/mips/NSQ_del_dec_mipsr1.h +410 -0
  625. package/opus/silk/mips/macros_mipsr1.h +92 -0
  626. package/opus/silk/mips/sigproc_fix_mipsr1.h +60 -0
  627. package/opus/silk/pitch_est_defines.h +88 -0
  628. package/opus/silk/pitch_est_tables.c +99 -0
  629. package/opus/silk/process_NLSFs.c +107 -0
  630. package/opus/silk/quant_LTP_gains.c +132 -0
  631. package/opus/silk/resampler.c +215 -0
  632. package/opus/silk/resampler_down2.c +74 -0
  633. package/opus/silk/resampler_down2_3.c +103 -0
  634. package/opus/silk/resampler_private.h +88 -0
  635. package/opus/silk/resampler_private_AR2.c +55 -0
  636. package/opus/silk/resampler_private_IIR_FIR.c +107 -0
  637. package/opus/silk/resampler_private_down_FIR.c +194 -0
  638. package/opus/silk/resampler_private_up2_HQ.c +113 -0
  639. package/opus/silk/resampler_rom.c +96 -0
  640. package/opus/silk/resampler_rom.h +68 -0
  641. package/opus/silk/resampler_structs.h +60 -0
  642. package/opus/silk/shell_coder.c +151 -0
  643. package/opus/silk/sigm_Q15.c +76 -0
  644. package/opus/silk/sort.c +154 -0
  645. package/opus/silk/stereo_LR_to_MS.c +229 -0
  646. package/opus/silk/stereo_MS_to_LR.c +85 -0
  647. package/opus/silk/stereo_decode_pred.c +73 -0
  648. package/opus/silk/stereo_encode_pred.c +62 -0
  649. package/opus/silk/stereo_find_predictor.c +79 -0
  650. package/opus/silk/stereo_quant_pred.c +73 -0
  651. package/opus/silk/structs.h +357 -0
  652. package/opus/silk/sum_sqr_shift.c +83 -0
  653. package/opus/silk/table_LSF_cos.c +70 -0
  654. package/opus/silk/tables.h +114 -0
  655. package/opus/silk/tables_LTP.c +294 -0
  656. package/opus/silk/tables_NLSF_CB_NB_MB.c +195 -0
  657. package/opus/silk/tables_NLSF_CB_WB.c +234 -0
  658. package/opus/silk/tables_gain.c +63 -0
  659. package/opus/silk/tables_other.c +124 -0
  660. package/opus/silk/tables_pitch_lag.c +69 -0
  661. package/opus/silk/tables_pulses_per_block.c +264 -0
  662. package/opus/silk/tests/meson.build +8 -0
  663. package/opus/silk/tests/test_unit_LPC_inv_pred_gain.c +130 -0
  664. package/opus/silk/tuning_parameters.h +155 -0
  665. package/opus/silk/typedef.h +81 -0
  666. package/opus/silk/x86/NSQ_del_dec_avx2.c +1075 -0
  667. package/opus/silk/x86/NSQ_del_dec_sse4_1.c +915 -0
  668. package/opus/silk/x86/NSQ_sse4_1.c +772 -0
  669. package/opus/silk/x86/SigProc_FIX_sse.h +99 -0
  670. package/opus/silk/x86/VAD_sse4_1.c +289 -0
  671. package/opus/silk/x86/VQ_WMat_EC_sse4_1.c +173 -0
  672. package/opus/silk/x86/main_sse.h +299 -0
  673. package/opus/silk/x86/x86_silk_map.c +179 -0
  674. package/opus/silk_headers.mk +44 -0
  675. package/opus/silk_sources.mk +164 -0
  676. package/opus/src/analysis.c +979 -0
  677. package/opus/src/analysis.h +103 -0
  678. package/opus/src/extensions.c +663 -0
  679. package/opus/src/mapping_matrix.c +993 -0
  680. package/opus/src/mapping_matrix.h +165 -0
  681. package/opus/src/meson.build +45 -0
  682. package/opus/src/mlp.c +132 -0
  683. package/opus/src/mlp.h +60 -0
  684. package/opus/src/mlp_data.c +672 -0
  685. package/opus/src/opus.c +362 -0
  686. package/opus/src/opus_compare.c +382 -0
  687. package/opus/src/opus_decoder.c +1579 -0
  688. package/opus/src/opus_demo.c +1194 -0
  689. package/opus/src/opus_encoder.c +3180 -0
  690. package/opus/src/opus_multistream.c +92 -0
  691. package/opus/src/opus_multistream_decoder.c +563 -0
  692. package/opus/src/opus_multistream_encoder.c +1321 -0
  693. package/opus/src/opus_private.h +263 -0
  694. package/opus/src/opus_projection_decoder.c +283 -0
  695. package/opus/src/opus_projection_encoder.c +522 -0
  696. package/opus/src/repacketizer.c +469 -0
  697. package/opus/src/repacketizer_demo.c +247 -0
  698. package/opus/src/tansig_table.h +45 -0
  699. package/opus/tar_list.txt +28 -0
  700. package/opus/tests/meson.build +39 -0
  701. package/opus/tests/opus_build_test.sh +29 -0
  702. package/opus/tests/opus_decode_fuzzer.c +124 -0
  703. package/opus/tests/opus_decode_fuzzer.options +2 -0
  704. package/opus/tests/opus_encode_regressions.c +1034 -0
  705. package/opus/tests/random_config.sh +126 -0
  706. package/opus/tests/run_vectors.sh +143 -0
  707. package/opus/tests/test_opus_api.c +1904 -0
  708. package/opus/tests/test_opus_common.h +86 -0
  709. package/opus/tests/test_opus_custom.c +694 -0
  710. package/opus/tests/test_opus_decode.c +481 -0
  711. package/opus/tests/test_opus_dred.c +107 -0
  712. package/opus/tests/test_opus_encode.c +738 -0
  713. package/opus/tests/test_opus_extensions.c +750 -0
  714. package/opus/tests/test_opus_padding.c +94 -0
  715. package/opus/tests/test_opus_projection.c +384 -0
  716. package/opus/training/rnn_dump.py +66 -0
  717. package/opus/training/rnn_train.py +177 -0
  718. package/opus/training/txt2hdf5.py +12 -0
  719. package/opus/update_version +65 -0
  720. package/package.json +2 -2
  721. package/src/build-ffmpeg-msys.sh +8 -2
  722. package/test.mp4 +0 -0
@@ -0,0 +1,437 @@
1
+ """
2
+ /* Copyright (c) 2023 Amazon
3
+ Written by Jan Buethe */
4
+ /*
5
+ Redistribution and use in source and binary forms, with or without
6
+ modification, are permitted provided that the following conditions
7
+ are met:
8
+
9
+ - Redistributions of source code must retain the above copyright
10
+ notice, this list of conditions and the following disclaimer.
11
+
12
+ - Redistributions in binary form must reproduce the above copyright
13
+ notice, this list of conditions and the following disclaimer in the
14
+ documentation and/or other materials provided with the distribution.
15
+
16
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
17
+ ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
18
+ LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
19
+ A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
20
+ OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
21
+ EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
22
+ PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
23
+ PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
24
+ LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
25
+ NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
26
+ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27
+ */
28
+ """
29
+
30
+ import torch
31
+ from torch import nn
32
+ from utils.layers.subconditioner import get_subconditioner
33
+ from utils.layers import DualFC
34
+
35
+ from utils.ulaw import lin2ulawq, ulaw2lin
36
+ from utils.sample import sample_excitation
37
+ from utils.pcm import clip_to_int16
38
+ from utils.sparsification import GRUSparsifier, calculate_gru_flops_per_step
39
+
40
+ from utils.misc import interleave_tensors
41
+
42
+
43
+
44
+
45
+ # MultiRateLPCNet
46
+ class MultiRateLPCNet(nn.Module):
47
+ def __init__(self, config):
48
+ super(MultiRateLPCNet, self).__init__()
49
+
50
+ # general parameters
51
+ self.input_layout = config['input_layout']
52
+ self.feature_history = config['feature_history']
53
+ self.feature_lookahead = config['feature_lookahead']
54
+ self.signals = config['signals']
55
+
56
+ # frame rate network parameters
57
+ self.feature_dimension = config['feature_dimension']
58
+ self.period_embedding_dim = config['period_embedding_dim']
59
+ self.period_levels = config['period_levels']
60
+ self.feature_channels = self.feature_dimension + self.period_embedding_dim
61
+ self.feature_conditioning_dim = config['feature_conditioning_dim']
62
+ self.feature_conv_kernel_size = config['feature_conv_kernel_size']
63
+
64
+ # frame rate network layers
65
+ self.period_embedding = nn.Embedding(self.period_levels, self.period_embedding_dim)
66
+ self.feature_conv1 = nn.Conv1d(self.feature_channels, self.feature_conditioning_dim, self.feature_conv_kernel_size, padding='valid')
67
+ self.feature_conv2 = nn.Conv1d(self.feature_conditioning_dim, self.feature_conditioning_dim, self.feature_conv_kernel_size, padding='valid')
68
+ self.feature_dense1 = nn.Linear(self.feature_conditioning_dim, self.feature_conditioning_dim)
69
+ self.feature_dense2 = nn.Linear(*(2*[self.feature_conditioning_dim]))
70
+
71
+ # sample rate network parameters
72
+ self.frame_size = config['frame_size']
73
+ self.signal_levels = config['signal_levels']
74
+ self.signal_embedding_dim = config['signal_embedding_dim']
75
+ self.gru_a_units = config['gru_a_units']
76
+ self.gru_b_units = config['gru_b_units']
77
+ self.output_levels = config['output_levels']
78
+
79
+ # subconditioning B
80
+ sub_config = config['subconditioning']['subconditioning_b']
81
+ self.substeps_b = sub_config['number_of_subsamples']
82
+ self.subcondition_signals_b = sub_config['signals']
83
+ self.signals_idx_b = [self.input_layout['signals'][key] for key in sub_config['signals']]
84
+ method = sub_config['method']
85
+ kwargs = sub_config['kwargs']
86
+ if type(kwargs) == type(None):
87
+ kwargs = dict()
88
+
89
+ state_size = self.gru_b_units
90
+ self.subconditioner_b = get_subconditioner(method,
91
+ sub_config['number_of_subsamples'], sub_config['pcm_embedding_size'],
92
+ state_size, self.signal_levels, len(sub_config['signals']),
93
+ **sub_config['kwargs'])
94
+
95
+ # subconditioning A
96
+ sub_config = config['subconditioning']['subconditioning_a']
97
+ self.substeps_a = sub_config['number_of_subsamples']
98
+ self.subcondition_signals_a = sub_config['signals']
99
+ self.signals_idx_a = [self.input_layout['signals'][key] for key in sub_config['signals']]
100
+ method = sub_config['method']
101
+ kwargs = sub_config['kwargs']
102
+ if type(kwargs) == type(None):
103
+ kwargs = dict()
104
+
105
+ state_size = self.gru_a_units
106
+ self.subconditioner_a = get_subconditioner(method,
107
+ sub_config['number_of_subsamples'], sub_config['pcm_embedding_size'],
108
+ state_size, self.signal_levels, self.substeps_b * len(sub_config['signals']),
109
+ **sub_config['kwargs'])
110
+
111
+
112
+ # wrap up subconditioning, group_size_gru_a holds the number
113
+ # of timesteps that are grouped as sample input for GRU A
114
+ # input and group_size_subcondition_a holds the number of samples that are
115
+ # grouped as input to pre-GRU B subconditioning
116
+ self.group_size_gru_a = self.substeps_a * self.substeps_b
117
+ self.group_size_subcondition_a = self.substeps_b
118
+ self.gru_a_rate_divider = self.group_size_gru_a
119
+ self.gru_b_rate_divider = self.substeps_b
120
+
121
+ # gru sizes
122
+ self.gru_a_input_dim = self.group_size_gru_a * len(self.signals) * self.signal_embedding_dim + self.feature_conditioning_dim
123
+ self.gru_b_input_dim = self.subconditioner_a.get_output_dim(0) + self.feature_conditioning_dim
124
+ self.signals_idx = [self.input_layout['signals'][key] for key in self.signals]
125
+
126
+ # sample rate network layers
127
+ self.signal_embedding = nn.Embedding(self.signal_levels, self.signal_embedding_dim)
128
+ self.gru_a = nn.GRU(self.gru_a_input_dim, self.gru_a_units, batch_first=True)
129
+ self.gru_b = nn.GRU(self.gru_b_input_dim, self.gru_b_units, batch_first=True)
130
+
131
+ # sparsification
132
+ self.sparsifier = []
133
+
134
+ # GRU A
135
+ if 'gru_a' in config['sparsification']:
136
+ gru_config = config['sparsification']['gru_a']
137
+ task_list = [(self.gru_a, gru_config['params'])]
138
+ self.sparsifier.append(GRUSparsifier(task_list,
139
+ gru_config['start'],
140
+ gru_config['stop'],
141
+ gru_config['interval'],
142
+ gru_config['exponent'])
143
+ )
144
+ self.gru_a_flops_per_step = calculate_gru_flops_per_step(self.gru_a,
145
+ gru_config['params'], drop_input=True)
146
+ else:
147
+ self.gru_a_flops_per_step = calculate_gru_flops_per_step(self.gru_a, drop_input=True)
148
+
149
+ # GRU B
150
+ if 'gru_b' in config['sparsification']:
151
+ gru_config = config['sparsification']['gru_b']
152
+ task_list = [(self.gru_b, gru_config['params'])]
153
+ self.sparsifier.append(GRUSparsifier(task_list,
154
+ gru_config['start'],
155
+ gru_config['stop'],
156
+ gru_config['interval'],
157
+ gru_config['exponent'])
158
+ )
159
+ self.gru_b_flops_per_step = calculate_gru_flops_per_step(self.gru_b,
160
+ gru_config['params'])
161
+ else:
162
+ self.gru_b_flops_per_step = calculate_gru_flops_per_step(self.gru_b)
163
+
164
+
165
+
166
+ # dual FCs
167
+ self.dual_fc = []
168
+ for i in range(self.substeps_b):
169
+ dim = self.subconditioner_b.get_output_dim(i)
170
+ self.dual_fc.append(DualFC(dim, self.output_levels))
171
+ self.add_module(f"dual_fc_{i}", self.dual_fc[-1])
172
+
173
+ def get_gflops(self, fs, verbose=False, hierarchical_sampling=False):
174
+ gflops = 0
175
+
176
+ # frame rate network
177
+ conditioning_dim = self.feature_conditioning_dim
178
+ feature_channels = self.feature_channels
179
+ frame_rate = fs / self.frame_size
180
+ frame_rate_network_complexity = 1e-9 * 2 * (5 * conditioning_dim + 3 * feature_channels) * conditioning_dim * frame_rate
181
+ if verbose:
182
+ print(f"frame rate network: {frame_rate_network_complexity} GFLOPS")
183
+ gflops += frame_rate_network_complexity
184
+
185
+ # gru a
186
+ gru_a_rate = fs / self.group_size_gru_a
187
+ gru_a_complexity = 1e-9 * gru_a_rate * self.gru_a_flops_per_step
188
+ if verbose:
189
+ print(f"gru A: {gru_a_complexity} GFLOPS")
190
+ gflops += gru_a_complexity
191
+
192
+ # subconditioning a
193
+ subcond_a_rate = fs / self.substeps_b
194
+ subconditioning_a_complexity = 1e-9 * self.subconditioner_a.get_average_flops_per_step() * subcond_a_rate
195
+ if verbose:
196
+ print(f"subconditioning A: {subconditioning_a_complexity} GFLOPS")
197
+ gflops += subconditioning_a_complexity
198
+
199
+ # gru b
200
+ gru_b_rate = fs / self.substeps_b
201
+ gru_b_complexity = 1e-9 * gru_b_rate * self.gru_b_flops_per_step
202
+ if verbose:
203
+ print(f"gru B: {gru_b_complexity} GFLOPS")
204
+ gflops += gru_b_complexity
205
+
206
+ # subconditioning b
207
+ subcond_b_rate = fs
208
+ subconditioning_b_complexity = 1e-9 * self.subconditioner_b.get_average_flops_per_step() * subcond_b_rate
209
+ if verbose:
210
+ print(f"subconditioning B: {subconditioning_b_complexity} GFLOPS")
211
+ gflops += subconditioning_b_complexity
212
+
213
+ # dual fcs
214
+ for i, fc in enumerate(self.dual_fc):
215
+ rate = fs / len(self.dual_fc)
216
+ input_size = fc.dense1.in_features
217
+ output_size = fc.dense1.out_features
218
+ dual_fc_complexity = 1e-9 * (4 * input_size * output_size + 22 * output_size) * rate
219
+ if hierarchical_sampling:
220
+ dual_fc_complexity /= 8
221
+ if verbose:
222
+ print(f"dual_fc_{i}: {dual_fc_complexity} GFLOPS")
223
+ gflops += dual_fc_complexity
224
+
225
+ if verbose:
226
+ print(f'total: {gflops} GFLOPS')
227
+
228
+ return gflops
229
+
230
+
231
+
232
+ def sparsify(self):
233
+ for sparsifier in self.sparsifier:
234
+ sparsifier.step()
235
+
236
+ def frame_rate_network(self, features, periods):
237
+
238
+ embedded_periods = torch.flatten(self.period_embedding(periods), 2, 3)
239
+ features = torch.concat((features, embedded_periods), dim=-1)
240
+
241
+ # convert to channels first and calculate conditioning vector
242
+ c = torch.permute(features, [0, 2, 1])
243
+
244
+ c = torch.tanh(self.feature_conv1(c))
245
+ c = torch.tanh(self.feature_conv2(c))
246
+ # back to channels last
247
+ c = torch.permute(c, [0, 2, 1])
248
+ c = torch.tanh(self.feature_dense1(c))
249
+ c = torch.tanh(self.feature_dense2(c))
250
+
251
+ return c
252
+
253
+ def prepare_signals(self, signals, group_size, signal_idx):
254
+ """ extracts, delays and groups signals """
255
+
256
+ batch_size, sequence_length, num_signals = signals.shape
257
+
258
+ # extract signals according to position
259
+ signals = torch.cat([signals[:, :, i : i + 1] for i in signal_idx],
260
+ dim=-1)
261
+
262
+ # roll back pcm to account for grouping
263
+ signals = torch.roll(signals, group_size - 1, -2)
264
+
265
+ # reshape
266
+ signals = torch.reshape(signals,
267
+ (batch_size, sequence_length // group_size, group_size * len(signal_idx)))
268
+
269
+ return signals
270
+
271
+
272
+ def sample_rate_network(self, signals, c, gru_states):
273
+
274
+ signals_a = self.prepare_signals(signals, self.group_size_gru_a, self.signals_idx)
275
+ embedded_signals = torch.flatten(self.signal_embedding(signals_a), 2, 3)
276
+ # features at GRU A rate
277
+ c_upsampled_a = torch.repeat_interleave(c, self.frame_size // self.gru_a_rate_divider, dim=1)
278
+ # features at GRU B rate
279
+ c_upsampled_b = torch.repeat_interleave(c, self.frame_size // self.gru_b_rate_divider, dim=1)
280
+
281
+ y = torch.concat((embedded_signals, c_upsampled_a), dim=-1)
282
+ y, gru_a_state = self.gru_a(y, gru_states[0])
283
+ # first round of upsampling and subconditioning
284
+ c_signals_a = self.prepare_signals(signals, self.group_size_subcondition_a, self.signals_idx_a)
285
+ y = self.subconditioner_a(y, c_signals_a)
286
+ y = interleave_tensors(y)
287
+
288
+ y = torch.concat((y, c_upsampled_b), dim=-1)
289
+ y, gru_b_state = self.gru_b(y, gru_states[1])
290
+ c_signals_b = self.prepare_signals(signals, 1, self.signals_idx_b)
291
+ y = self.subconditioner_b(y, c_signals_b)
292
+
293
+ y = [self.dual_fc[i](y[i]) for i in range(self.substeps_b)]
294
+ y = interleave_tensors(y)
295
+
296
+ return y, (gru_a_state, gru_b_state)
297
+
298
+ def decoder(self, signals, c, gru_states):
299
+ embedded_signals = torch.flatten(self.signal_embedding(signals), 2, 3)
300
+
301
+ y = torch.concat((embedded_signals, c), dim=-1)
302
+ y, gru_a_state = self.gru_a(y, gru_states[0])
303
+ y = torch.concat((y, c), dim=-1)
304
+ y, gru_b_state = self.gru_b(y, gru_states[1])
305
+
306
+ y = self.dual_fc(y)
307
+
308
+ return torch.softmax(y, dim=-1), (gru_a_state, gru_b_state)
309
+
310
+ def forward(self, features, periods, signals, gru_states):
311
+
312
+ c = self.frame_rate_network(features, periods)
313
+ y, _ = self.sample_rate_network(signals, c, gru_states)
314
+ log_probs = torch.log_softmax(y, dim=-1)
315
+
316
+ return log_probs
317
+
318
+ def generate(self, features, periods, lpcs):
319
+
320
+ with torch.no_grad():
321
+ device = self.parameters().__next__().device
322
+
323
+ num_frames = features.shape[0] - self.feature_history - self.feature_lookahead
324
+ lpc_order = lpcs.shape[-1]
325
+ num_input_signals = len(self.signals)
326
+ pitch_corr_position = self.input_layout['features']['pitch_corr'][0]
327
+
328
+ # signal buffers
329
+ last_signal = torch.zeros((num_frames * self.frame_size + lpc_order + 1))
330
+ prediction = torch.zeros((num_frames * self.frame_size + lpc_order + 1))
331
+ last_error = torch.zeros((num_frames * self.frame_size + lpc_order + 1))
332
+ output = torch.zeros((num_frames * self.frame_size), dtype=torch.int16)
333
+ mem = 0
334
+
335
+ # state buffers
336
+ gru_a_state = torch.zeros((1, 1, self.gru_a_units))
337
+ gru_b_state = torch.zeros((1, 1, self.gru_b_units))
338
+
339
+ input_signals = 128 + torch.zeros(self.group_size_gru_a * num_input_signals, dtype=torch.long)
340
+ # conditioning signals for subconditioner a
341
+ c_signals_a = 128 + torch.zeros(self.group_size_subcondition_a * len(self.signals_idx_a), dtype=torch.long)
342
+ # conditioning signals for subconditioner b
343
+ c_signals_b = 128 + torch.zeros(len(self.signals_idx_b), dtype=torch.long)
344
+
345
+ # signal dict
346
+ signal_dict = {
347
+ 'prediction' : prediction,
348
+ 'last_error' : last_error,
349
+ 'last_signal' : last_signal
350
+ }
351
+
352
+ # push data to device
353
+ features = features.to(device)
354
+ periods = periods.to(device)
355
+ lpcs = lpcs.to(device)
356
+
357
+ # run feature encoding
358
+ c = self.frame_rate_network(features.unsqueeze(0), periods.unsqueeze(0))
359
+
360
+ for frame_index in range(num_frames):
361
+ frame_start = frame_index * self.frame_size
362
+ pitch_corr = features[frame_index + self.feature_history, pitch_corr_position]
363
+ a = - torch.flip(lpcs[frame_index + self.feature_history], [0])
364
+ current_c = c[:, frame_index : frame_index + 1, :]
365
+
366
+ for i in range(0, self.frame_size, self.group_size_gru_a):
367
+ pcm_position = frame_start + i + lpc_order
368
+ output_position = frame_start + i
369
+
370
+ # calculate newest prediction
371
+ prediction[pcm_position] = torch.sum(last_signal[pcm_position - lpc_order + 1: pcm_position + 1] * a)
372
+
373
+ # prepare input
374
+ for slot in range(self.group_size_gru_a):
375
+ k = slot - self.group_size_gru_a + 1
376
+ for idx, name in enumerate(self.signals):
377
+ input_signals[idx + slot * num_input_signals] = lin2ulawq(
378
+ signal_dict[name][pcm_position + k]
379
+ )
380
+
381
+
382
+ # run GRU A
383
+ embed_signals = self.signal_embedding(input_signals.reshape((1, 1, -1)))
384
+ embed_signals = torch.flatten(embed_signals, 2)
385
+ y = torch.cat((embed_signals, current_c), dim=-1)
386
+ h_a, gru_a_state = self.gru_a(y, gru_a_state)
387
+
388
+ # loop over substeps_a
389
+ for step_a in range(self.substeps_a):
390
+ # prepare conditioning input
391
+ for slot in range(self.group_size_subcondition_a):
392
+ k = slot - self.group_size_subcondition_a + 1
393
+ for idx, name in enumerate(self.subcondition_signals_a):
394
+ c_signals_a[idx + slot * num_input_signals] = lin2ulawq(
395
+ signal_dict[name][pcm_position + k]
396
+ )
397
+
398
+ # subconditioning
399
+ h_a = self.subconditioner_a.single_step(step_a, h_a, c_signals_a.reshape((1, 1, -1)))
400
+
401
+ # run GRU B
402
+ y = torch.cat((h_a, current_c), dim=-1)
403
+ h_b, gru_b_state = self.gru_b(y, gru_b_state)
404
+
405
+ # loop over substeps b
406
+ for step_b in range(self.substeps_b):
407
+ # prepare subconditioning input
408
+ for idx, name in enumerate(self.subcondition_signals_b):
409
+ c_signals_b[idx] = lin2ulawq(
410
+ signal_dict[name][pcm_position]
411
+ )
412
+
413
+ # subcondition
414
+ h_b = self.subconditioner_b.single_step(step_b, h_b, c_signals_b.reshape((1, 1, -1)))
415
+
416
+ # run dual FC
417
+ probs = torch.softmax(self.dual_fc[step_b](h_b), dim=-1)
418
+
419
+ # sample
420
+ new_exc = ulaw2lin(sample_excitation(probs, pitch_corr))
421
+
422
+ # update signals
423
+ sig = new_exc + prediction[pcm_position]
424
+ last_error[pcm_position + 1] = new_exc
425
+ last_signal[pcm_position + 1] = sig
426
+
427
+ mem = 0.85 * mem + float(sig)
428
+ output[output_position] = clip_to_int16(round(mem))
429
+
430
+ # increase positions
431
+ pcm_position += 1
432
+ output_position += 1
433
+
434
+ # calculate next prediction
435
+ prediction[pcm_position] = torch.sum(last_signal[pcm_position - lpc_order + 1: pcm_position + 1] * a)
436
+
437
+ return output
@@ -0,0 +1,64 @@
1
+ """
2
+ /* Copyright (c) 2023 Amazon
3
+ Written by Jan Buethe */
4
+ /*
5
+ Redistribution and use in source and binary forms, with or without
6
+ modification, are permitted provided that the following conditions
7
+ are met:
8
+
9
+ - Redistributions of source code must retain the above copyright
10
+ notice, this list of conditions and the following disclaimer.
11
+
12
+ - Redistributions in binary form must reproduce the above copyright
13
+ notice, this list of conditions and the following disclaimer in the
14
+ documentation and/or other materials provided with the distribution.
15
+
16
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
17
+ ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
18
+ LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
19
+ A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
20
+ OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
21
+ EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
22
+ PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
23
+ PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
24
+ LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
25
+ NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
26
+ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27
+ */
28
+ """
29
+
30
+ import argparse
31
+
32
+ import yaml
33
+
34
+ from models import model_dict
35
+
36
+
37
+ debug = False
38
+ if debug:
39
+ args = type('dummy', (object,),
40
+ {
41
+ 'setup' : 'setups/lpcnet_m/setup_1_4_concatenative.yml',
42
+ 'hierarchical_sampling' : False
43
+ })()
44
+ else:
45
+ parser = argparse.ArgumentParser()
46
+ parser.add_argument('setup', type=str, help='setup yaml file')
47
+ parser.add_argument('--hierarchical-sampling', action="store_true", help='whether to assume hierarchical sampling (default=False)', default=False)
48
+
49
+ args = parser.parse_args()
50
+
51
+ with open(args.setup, 'r') as f:
52
+ setup = yaml.load(f.read(), yaml.FullLoader)
53
+
54
+ # check model
55
+ if not 'model' in setup['lpcnet']:
56
+ print(f'warning: did not find model entry in setup, using default lpcnet')
57
+ model_name = 'lpcnet'
58
+ else:
59
+ model_name = setup['lpcnet']['model']
60
+
61
+ # create model
62
+ model = model_dict[model_name](setup['lpcnet']['config'])
63
+
64
+ gflops = model.get_gflops(16000, verbose=True, hierarchical_sampling=args.hierarchical_sampling)
@@ -0,0 +1,190 @@
1
+ """
2
+ /* Copyright (c) 2023 Amazon
3
+ Written by Jan Buethe */
4
+ /*
5
+ Redistribution and use in source and binary forms, with or without
6
+ modification, are permitted provided that the following conditions
7
+ are met:
8
+
9
+ - Redistributions of source code must retain the above copyright
10
+ notice, this list of conditions and the following disclaimer.
11
+
12
+ - Redistributions in binary form must reproduce the above copyright
13
+ notice, this list of conditions and the following disclaimer in the
14
+ documentation and/or other materials provided with the distribution.
15
+
16
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
17
+ ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
18
+ LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
19
+ A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
20
+ OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
21
+ EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
22
+ PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
23
+ PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
24
+ LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
25
+ NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
26
+ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27
+ */
28
+ """
29
+
30
+ import argparse
31
+ import os
32
+ from uuid import UUID
33
+ from collections import OrderedDict
34
+ import pickle
35
+
36
+
37
+ import torch
38
+ import numpy as np
39
+
40
+ import utils
41
+
42
+
43
+
44
+ parser = argparse.ArgumentParser()
45
+ parser.add_argument("input", type=str, help="input folder containing multi-run output")
46
+ parser.add_argument("tag", type=str, help="tag for multi-run experiment")
47
+ parser.add_argument("csv", type=str, help="name for output csv")
48
+
49
+
50
+ def is_uuid(val):
51
+ try:
52
+ UUID(val)
53
+ return True
54
+ except:
55
+ return False
56
+
57
+
58
+ def collect_results(folder):
59
+
60
+ training_folder = os.path.join(folder, 'training')
61
+ testing_folder = os.path.join(folder, 'testing')
62
+
63
+ # validation loss
64
+ checkpoint = torch.load(os.path.join(training_folder, 'checkpoints', 'checkpoint_finalize_epoch_1.pth'), map_location='cpu')
65
+ validation_loss = checkpoint['validation_loss']
66
+
67
+ # eval_warpq
68
+ eval_warpq = utils.data.parse_warpq_scores(os.path.join(training_folder, 'out_finalize.txt'))[-1]
69
+
70
+ # testing results
71
+ testing_results = utils.data.collect_test_stats(os.path.join(testing_folder, 'final'))
72
+
73
+ results = OrderedDict()
74
+ results['eval_loss'] = validation_loss
75
+ results['eval_warpq'] = eval_warpq
76
+ results['pesq_mean'] = testing_results['pesq'][0]
77
+ results['warpq_mean'] = testing_results['warpq'][0]
78
+ results['pitch_error_mean'] = testing_results['pitch_error'][0]
79
+ results['voicing_error_mean'] = testing_results['voicing_error'][0]
80
+
81
+ return results
82
+
83
+ def print_csv(path, results, tag, ranks=None, header=True):
84
+
85
+ metrics = next(iter(results.values())).keys()
86
+ if ranks is not None:
87
+ rank_keys = next(iter(ranks.values())).keys()
88
+ else:
89
+ rank_keys = []
90
+
91
+ with open(path, 'w') as f:
92
+ if header:
93
+ f.write("uuid, tag")
94
+
95
+ for metric in metrics:
96
+ f.write(f", {metric}")
97
+
98
+ for rank in rank_keys:
99
+ f.write(f", {rank}")
100
+
101
+ f.write("\n")
102
+
103
+
104
+ for uuid, values in results.items():
105
+ f.write(f"{uuid}, {tag}")
106
+
107
+ for val in values.values():
108
+ f.write(f", {val:10.8f}")
109
+
110
+ for rank in rank_keys:
111
+ f.write(f", {ranks[uuid][rank]:4d}")
112
+
113
+ f.write("\n")
114
+
115
+ def get_ranks(results):
116
+
117
+ metrics = list(next(iter(results.values())).keys())
118
+
119
+ positive = {'pesq_mean', 'mix'}
120
+
121
+ ranks = OrderedDict()
122
+ for key in results.keys():
123
+ ranks[key] = OrderedDict()
124
+
125
+ for metric in metrics:
126
+ sign = -1 if metric in positive else 1
127
+
128
+ x = sorted([(key, value[metric]) for key, value in results.items()], key=lambda x: sign * x[1])
129
+ x = [y[0] for y in x]
130
+
131
+ for key in results.keys():
132
+ ranks[key]['rank_' + metric] = x.index(key) + 1
133
+
134
+ return ranks
135
+
136
+ def analyse_metrics(results):
137
+ metrics = ['eval_loss', 'pesq_mean', 'warpq_mean', 'pitch_error_mean', 'voicing_error_mean']
138
+
139
+ x = []
140
+ for metric in metrics:
141
+ x.append([val[metric] for val in results.values()])
142
+
143
+ x = np.array(x)
144
+
145
+ print(x)
146
+
147
+ def add_mix_metric(results):
148
+ metrics = ['eval_loss', 'pesq_mean', 'warpq_mean', 'pitch_error_mean', 'voicing_error_mean']
149
+
150
+ x = []
151
+ for metric in metrics:
152
+ x.append([val[metric] for val in results.values()])
153
+
154
+ x = np.array(x).transpose() * np.array([-1, 1, -1, -1, -1])
155
+
156
+ z = (x - np.mean(x, axis=0)) / np.std(x, axis=0)
157
+
158
+ print(f"covariance matrix for normalized scores of {metrics}:")
159
+ print(np.cov(z.transpose()))
160
+
161
+ score = np.mean(z, axis=1)
162
+
163
+ for i, key in enumerate(results.keys()):
164
+ results[key]['mix'] = score[i].item()
165
+
166
+ if __name__ == "__main__":
167
+ args = parser.parse_args()
168
+
169
+ uuids = sorted([x for x in os.listdir(args.input) if os.path.isdir(os.path.join(args.input, x)) and is_uuid(x)])
170
+
171
+
172
+ results = OrderedDict()
173
+
174
+ for uuid in uuids:
175
+ results[uuid] = collect_results(os.path.join(args.input, uuid))
176
+
177
+
178
+ add_mix_metric(results)
179
+
180
+ ranks = get_ranks(results)
181
+
182
+
183
+
184
+ csv = args.csv if args.csv.endswith('.csv') else args.csv + '.csv'
185
+
186
+ print_csv(args.csv, results, args.tag, ranks=ranks)
187
+
188
+
189
+ with open(csv[:-4] + '.pickle', 'wb') as f:
190
+ pickle.dump(results, f, protocol=pickle.HIGHEST_PROTOCOL)