@scrypted/libav 1.0.166 → 1.0.168

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 (720) hide show
  1. package/opus/.gitattributes +10 -0
  2. package/opus/.gitlab-ci.yml +122 -0
  3. package/opus/AUTHORS +6 -0
  4. package/opus/CMakeLists.txt +755 -0
  5. package/opus/COPYING +44 -0
  6. package/opus/ChangeLog +0 -0
  7. package/opus/LICENSE_PLEASE_READ.txt +22 -0
  8. package/opus/Makefile.am +497 -0
  9. package/opus/Makefile.mips +169 -0
  10. package/opus/Makefile.unix +167 -0
  11. package/opus/NEWS +0 -0
  12. package/opus/README +189 -0
  13. package/opus/README.draft +54 -0
  14. package/opus/autogen.bat +13 -0
  15. package/opus/autogen.sh +16 -0
  16. package/opus/celt/_kiss_fft_guts.h +188 -0
  17. package/opus/celt/arch.h +390 -0
  18. package/opus/celt/arm/arm2gnu.pl +353 -0
  19. package/opus/celt/arm/arm_celt_map.c +171 -0
  20. package/opus/celt/arm/armcpu.c +291 -0
  21. package/opus/celt/arm/armcpu.h +90 -0
  22. package/opus/celt/arm/armopts.s.in +37 -0
  23. package/opus/celt/arm/celt_fft_ne10.c +173 -0
  24. package/opus/celt/arm/celt_mdct_ne10.c +258 -0
  25. package/opus/celt/arm/celt_neon_intr.c +272 -0
  26. package/opus/celt/arm/celt_pitch_xcorr_arm.s +551 -0
  27. package/opus/celt/arm/fft_arm.h +71 -0
  28. package/opus/celt/arm/fixed_arm64.h +35 -0
  29. package/opus/celt/arm/fixed_armv4.h +80 -0
  30. package/opus/celt/arm/fixed_armv5e.h +151 -0
  31. package/opus/celt/arm/kiss_fft_armv4.h +121 -0
  32. package/opus/celt/arm/kiss_fft_armv5e.h +118 -0
  33. package/opus/celt/arm/mdct_arm.h +59 -0
  34. package/opus/celt/arm/meson.build +12 -0
  35. package/opus/celt/arm/pitch_arm.h +160 -0
  36. package/opus/celt/arm/pitch_neon_intr.c +288 -0
  37. package/opus/celt/bands.c +1686 -0
  38. package/opus/celt/bands.h +123 -0
  39. package/opus/celt/celt.c +317 -0
  40. package/opus/celt/celt.h +255 -0
  41. package/opus/celt/celt_decoder.c +1616 -0
  42. package/opus/celt/celt_encoder.c +2854 -0
  43. package/opus/celt/celt_lpc.c +364 -0
  44. package/opus/celt/celt_lpc.h +66 -0
  45. package/opus/celt/cpu_support.h +72 -0
  46. package/opus/celt/cwrs.c +715 -0
  47. package/opus/celt/cwrs.h +48 -0
  48. package/opus/celt/dump_modes/dump_modes.c +400 -0
  49. package/opus/celt/dump_modes/dump_modes_arch.h +45 -0
  50. package/opus/celt/dump_modes/dump_modes_arm_ne10.c +152 -0
  51. package/opus/celt/ecintrin.h +91 -0
  52. package/opus/celt/entcode.c +153 -0
  53. package/opus/celt/entcode.h +152 -0
  54. package/opus/celt/entdec.c +266 -0
  55. package/opus/celt/entdec.h +110 -0
  56. package/opus/celt/entenc.c +305 -0
  57. package/opus/celt/entenc.h +119 -0
  58. package/opus/celt/fixed_c5x.h +79 -0
  59. package/opus/celt/fixed_c6x.h +70 -0
  60. package/opus/celt/fixed_debug.h +839 -0
  61. package/opus/celt/fixed_generic.h +201 -0
  62. package/opus/celt/float_cast.h +152 -0
  63. package/opus/celt/kiss_fft.c +648 -0
  64. package/opus/celt/kiss_fft.h +217 -0
  65. package/opus/celt/laplace.c +235 -0
  66. package/opus/celt/laplace.h +57 -0
  67. package/opus/celt/mathops.c +217 -0
  68. package/opus/celt/mathops.h +479 -0
  69. package/opus/celt/mdct.c +372 -0
  70. package/opus/celt/mdct.h +115 -0
  71. package/opus/celt/meson.build +64 -0
  72. package/opus/celt/mfrngcod.h +48 -0
  73. package/opus/celt/mips/celt_mipsr1.h +152 -0
  74. package/opus/celt/mips/fixed_generic_mipsr1.h +126 -0
  75. package/opus/celt/mips/kiss_fft_mipsr1.h +167 -0
  76. package/opus/celt/mips/mdct_mipsr1.h +288 -0
  77. package/opus/celt/mips/pitch_mipsr1.h +161 -0
  78. package/opus/celt/mips/vq_mipsr1.h +116 -0
  79. package/opus/celt/modes.c +450 -0
  80. package/opus/celt/modes.h +75 -0
  81. package/opus/celt/opus_custom_demo.c +451 -0
  82. package/opus/celt/os_support.h +99 -0
  83. package/opus/celt/pitch.c +555 -0
  84. package/opus/celt/pitch.h +203 -0
  85. package/opus/celt/quant_bands.c +562 -0
  86. package/opus/celt/quant_bands.h +66 -0
  87. package/opus/celt/rate.c +646 -0
  88. package/opus/celt/rate.h +101 -0
  89. package/opus/celt/stack_alloc.h +185 -0
  90. package/opus/celt/static_modes_fixed.h +1541 -0
  91. package/opus/celt/static_modes_fixed_arm_ne10.h +388 -0
  92. package/opus/celt/static_modes_float.h +888 -0
  93. package/opus/celt/static_modes_float_arm_ne10.h +404 -0
  94. package/opus/celt/tests/meson.build +19 -0
  95. package/opus/celt/tests/test_unit_cwrs32.c +162 -0
  96. package/opus/celt/tests/test_unit_dft.c +181 -0
  97. package/opus/celt/tests/test_unit_entropy.c +383 -0
  98. package/opus/celt/tests/test_unit_laplace.c +94 -0
  99. package/opus/celt/tests/test_unit_mathops.c +369 -0
  100. package/opus/celt/tests/test_unit_mdct.c +233 -0
  101. package/opus/celt/tests/test_unit_rotation.c +87 -0
  102. package/opus/celt/tests/test_unit_types.c +50 -0
  103. package/opus/celt/vq.c +442 -0
  104. package/opus/celt/vq.h +79 -0
  105. package/opus/celt/x86/celt_lpc_sse.h +67 -0
  106. package/opus/celt/x86/celt_lpc_sse4_1.c +96 -0
  107. package/opus/celt/x86/pitch_avx.c +101 -0
  108. package/opus/celt/x86/pitch_sse.c +185 -0
  109. package/opus/celt/x86/pitch_sse.h +216 -0
  110. package/opus/celt/x86/pitch_sse2.c +95 -0
  111. package/opus/celt/x86/pitch_sse4_1.c +240 -0
  112. package/opus/celt/x86/vq_sse.h +52 -0
  113. package/opus/celt/x86/vq_sse2.c +217 -0
  114. package/opus/celt/x86/x86_arch_macros.h +47 -0
  115. package/opus/celt/x86/x86_celt_map.c +187 -0
  116. package/opus/celt/x86/x86cpu.c +184 -0
  117. package/opus/celt/x86/x86cpu.h +112 -0
  118. package/opus/celt_headers.mk +54 -0
  119. package/opus/celt_sources.mk +55 -0
  120. package/opus/cmake/CFeatureCheck.cmake +39 -0
  121. package/opus/cmake/OpusBuildtype.cmake +27 -0
  122. package/opus/cmake/OpusConfig.cmake +118 -0
  123. package/opus/cmake/OpusConfig.cmake.in +20 -0
  124. package/opus/cmake/OpusFunctions.cmake +231 -0
  125. package/opus/cmake/OpusPackageVersion.cmake +70 -0
  126. package/opus/cmake/OpusSources.cmake +71 -0
  127. package/opus/cmake/README.md +132 -0
  128. package/opus/cmake/RunTest.cmake +61 -0
  129. package/opus/cmake/config.h.cmake.in +1 -0
  130. package/opus/cmake/cpu_info_by_asm.c +31 -0
  131. package/opus/cmake/cpu_info_by_c.c +9 -0
  132. package/opus/cmake/vla.c +7 -0
  133. package/opus/configure.ac +1091 -0
  134. package/opus/dnn/LPCNet.yml +24 -0
  135. package/opus/dnn/README +1 -0
  136. package/opus/dnn/README.md +126 -0
  137. package/opus/dnn/adaconvtest.c +449 -0
  138. package/opus/dnn/arm/arm_dnn_map.c +88 -0
  139. package/opus/dnn/arm/dnn_arm.h +104 -0
  140. package/opus/dnn/arm/nnet_dotprod.c +38 -0
  141. package/opus/dnn/arm/nnet_neon.c +38 -0
  142. package/opus/dnn/burg.c +246 -0
  143. package/opus/dnn/burg.h +41 -0
  144. package/opus/dnn/common.h +56 -0
  145. package/opus/dnn/datasets.txt +163 -0
  146. package/opus/dnn/download_model.bat +9 -0
  147. package/opus/dnn/download_model.sh +30 -0
  148. package/opus/dnn/dred_coding.c +44 -0
  149. package/opus/dnn/dred_coding.h +36 -0
  150. package/opus/dnn/dred_config.h +54 -0
  151. package/opus/dnn/dred_decoder.c +129 -0
  152. package/opus/dnn/dred_decoder.h +49 -0
  153. package/opus/dnn/dred_encoder.c +363 -0
  154. package/opus/dnn/dred_encoder.h +71 -0
  155. package/opus/dnn/dred_rdovae.h +42 -0
  156. package/opus/dnn/dred_rdovae_dec.c +139 -0
  157. package/opus/dnn/dred_rdovae_dec.h +53 -0
  158. package/opus/dnn/dred_rdovae_enc.c +110 -0
  159. package/opus/dnn/dred_rdovae_enc.h +52 -0
  160. package/opus/dnn/dump_data.c +238 -0
  161. package/opus/dnn/dump_lpcnet_tables.c +104 -0
  162. package/opus/dnn/fargan.c +225 -0
  163. package/opus/dnn/fargan.h +68 -0
  164. package/opus/dnn/fargan_demo.c +217 -0
  165. package/opus/dnn/freq.c +328 -0
  166. package/opus/dnn/freq.h +61 -0
  167. package/opus/dnn/fwgan.c +322 -0
  168. package/opus/dnn/fwgan.h +83 -0
  169. package/opus/dnn/kiss99.c +81 -0
  170. package/opus/dnn/kiss99.h +46 -0
  171. package/opus/dnn/lossgen.c +192 -0
  172. package/opus/dnn/lossgen.h +55 -0
  173. package/opus/dnn/lossgen_demo.c +22 -0
  174. package/opus/dnn/lpcnet.c +283 -0
  175. package/opus/dnn/lpcnet.h +183 -0
  176. package/opus/dnn/lpcnet_enc.c +230 -0
  177. package/opus/dnn/lpcnet_plc.c +211 -0
  178. package/opus/dnn/lpcnet_private.h +90 -0
  179. package/opus/dnn/lpcnet_tables.c +307 -0
  180. package/opus/dnn/meson.build +64 -0
  181. package/opus/dnn/nndsp.c +416 -0
  182. package/opus/dnn/nndsp.h +143 -0
  183. package/opus/dnn/nnet.c +149 -0
  184. package/opus/dnn/nnet.h +163 -0
  185. package/opus/dnn/nnet_arch.h +247 -0
  186. package/opus/dnn/nnet_default.c +35 -0
  187. package/opus/dnn/osce.c +1419 -0
  188. package/opus/dnn/osce.h +84 -0
  189. package/opus/dnn/osce_config.h +60 -0
  190. package/opus/dnn/osce_features.c +454 -0
  191. package/opus/dnn/osce_features.h +50 -0
  192. package/opus/dnn/osce_structs.h +125 -0
  193. package/opus/dnn/parse_lpcnet_weights.c +238 -0
  194. package/opus/dnn/pitchdnn.c +79 -0
  195. package/opus/dnn/pitchdnn.h +34 -0
  196. package/opus/dnn/tansig_table.h +50 -0
  197. package/opus/dnn/test_vec.c +128 -0
  198. package/opus/dnn/torch/dnntools/dnntools/__init__.py +2 -0
  199. package/opus/dnn/torch/dnntools/dnntools/quantization/__init__.py +1 -0
  200. package/opus/dnn/torch/dnntools/dnntools/quantization/softquant.py +113 -0
  201. package/opus/dnn/torch/dnntools/dnntools/relegance/__init__.py +2 -0
  202. package/opus/dnn/torch/dnntools/dnntools/relegance/meta_critic.py +85 -0
  203. package/opus/dnn/torch/dnntools/dnntools/relegance/relegance.py +449 -0
  204. package/opus/dnn/torch/dnntools/dnntools/sparsification/__init__.py +6 -0
  205. package/opus/dnn/torch/dnntools/dnntools/sparsification/base_sparsifier.py +58 -0
  206. package/opus/dnn/torch/dnntools/dnntools/sparsification/common.py +123 -0
  207. package/opus/dnn/torch/dnntools/dnntools/sparsification/conv1d_sparsifier.py +133 -0
  208. package/opus/dnn/torch/dnntools/dnntools/sparsification/conv_transpose1d_sparsifier.py +134 -0
  209. package/opus/dnn/torch/dnntools/dnntools/sparsification/gru_sparsifier.py +178 -0
  210. package/opus/dnn/torch/dnntools/dnntools/sparsification/linear_sparsifier.py +128 -0
  211. package/opus/dnn/torch/dnntools/dnntools/sparsification/utils.py +64 -0
  212. package/opus/dnn/torch/dnntools/requirements.txt +1 -0
  213. package/opus/dnn/torch/dnntools/setup.py +48 -0
  214. package/opus/dnn/torch/fargan/README.md +54 -0
  215. package/opus/dnn/torch/fargan/adv_train_fargan.py +277 -0
  216. package/opus/dnn/torch/fargan/dataset.py +61 -0
  217. package/opus/dnn/torch/fargan/dump_fargan_weights.py +112 -0
  218. package/opus/dnn/torch/fargan/fargan.py +322 -0
  219. package/opus/dnn/torch/fargan/filters.py +46 -0
  220. package/opus/dnn/torch/fargan/rc.py +29 -0
  221. package/opus/dnn/torch/fargan/stft_loss.py +186 -0
  222. package/opus/dnn/torch/fargan/test_fargan.py +128 -0
  223. package/opus/dnn/torch/fargan/train_fargan.py +168 -0
  224. package/opus/dnn/torch/fwgan/dump_model_weights.py +88 -0
  225. package/opus/dnn/torch/fwgan/inference.py +141 -0
  226. package/opus/dnn/torch/fwgan/models/__init__.py +7 -0
  227. package/opus/dnn/torch/fwgan/models/fwgan400.py +308 -0
  228. package/opus/dnn/torch/fwgan/models/fwgan500.py +260 -0
  229. package/opus/dnn/torch/lossgen/README.md +27 -0
  230. package/opus/dnn/torch/lossgen/export_lossgen.py +101 -0
  231. package/opus/dnn/torch/lossgen/lossgen.py +29 -0
  232. package/opus/dnn/torch/lossgen/process_data.sh +17 -0
  233. package/opus/dnn/torch/lossgen/test_lossgen.py +42 -0
  234. package/opus/dnn/torch/lossgen/train_lossgen.py +99 -0
  235. package/opus/dnn/torch/lpcnet/README.md +27 -0
  236. package/opus/dnn/torch/lpcnet/add_dataset_config.py +77 -0
  237. package/opus/dnn/torch/lpcnet/data/__init__.py +1 -0
  238. package/opus/dnn/torch/lpcnet/data/lpcnet_dataset.py +227 -0
  239. package/opus/dnn/torch/lpcnet/engine/lpcnet_engine.py +141 -0
  240. package/opus/dnn/torch/lpcnet/make_default_setup.py +56 -0
  241. package/opus/dnn/torch/lpcnet/make_test_config.py +78 -0
  242. package/opus/dnn/torch/lpcnet/models/__init__.py +8 -0
  243. package/opus/dnn/torch/lpcnet/models/lpcnet.py +303 -0
  244. package/opus/dnn/torch/lpcnet/models/multi_rate_lpcnet.py +437 -0
  245. package/opus/dnn/torch/lpcnet/print_lpcnet_complexity.py +64 -0
  246. package/opus/dnn/torch/lpcnet/scripts/collect_multi_run_results.py +190 -0
  247. package/opus/dnn/torch/lpcnet/scripts/loop_run.sh +52 -0
  248. package/opus/dnn/torch/lpcnet/scripts/make_animation.py +67 -0
  249. package/opus/dnn/torch/lpcnet/scripts/modify_dataset_target.py +17 -0
  250. package/opus/dnn/torch/lpcnet/scripts/multi_run.sh +17 -0
  251. package/opus/dnn/torch/lpcnet/scripts/run_inference_test.sh +22 -0
  252. package/opus/dnn/torch/lpcnet/scripts/update_checkpoints.py +54 -0
  253. package/opus/dnn/torch/lpcnet/scripts/update_output_folder.sh +22 -0
  254. package/opus/dnn/torch/lpcnet/scripts/update_setups.py +57 -0
  255. package/opus/dnn/torch/lpcnet/test_lpcnet.py +89 -0
  256. package/opus/dnn/torch/lpcnet/train_lpcnet.py +272 -0
  257. package/opus/dnn/torch/lpcnet/utils/__init__.py +4 -0
  258. package/opus/dnn/torch/lpcnet/utils/data.py +141 -0
  259. package/opus/dnn/torch/lpcnet/utils/endoscopy.py +234 -0
  260. package/opus/dnn/torch/lpcnet/utils/layers/__init__.py +3 -0
  261. package/opus/dnn/torch/lpcnet/utils/layers/dual_fc.py +44 -0
  262. package/opus/dnn/torch/lpcnet/utils/layers/pcm_embeddings.py +71 -0
  263. package/opus/dnn/torch/lpcnet/utils/layers/subconditioner.py +497 -0
  264. package/opus/dnn/torch/lpcnet/utils/misc.py +65 -0
  265. package/opus/dnn/torch/lpcnet/utils/pcm.py +35 -0
  266. package/opus/dnn/torch/lpcnet/utils/sample.py +44 -0
  267. package/opus/dnn/torch/lpcnet/utils/sparsification/__init__.py +2 -0
  268. package/opus/dnn/torch/lpcnet/utils/sparsification/common.py +121 -0
  269. package/opus/dnn/torch/lpcnet/utils/sparsification/gru_sparsifier.py +187 -0
  270. package/opus/dnn/torch/lpcnet/utils/templates.py +157 -0
  271. package/opus/dnn/torch/lpcnet/utils/ulaw.py +58 -0
  272. package/opus/dnn/torch/lpcnet/utils/wav.py +43 -0
  273. package/opus/dnn/torch/neural-pitch/README.md +18 -0
  274. package/opus/dnn/torch/neural-pitch/data_augmentation.py +149 -0
  275. package/opus/dnn/torch/neural-pitch/download_demand.sh +43 -0
  276. package/opus/dnn/torch/neural-pitch/evaluation.py +349 -0
  277. package/opus/dnn/torch/neural-pitch/experiments.py +38 -0
  278. package/opus/dnn/torch/neural-pitch/export_neuralpitch_weights.py +109 -0
  279. package/opus/dnn/torch/neural-pitch/models.py +178 -0
  280. package/opus/dnn/torch/neural-pitch/neural_pitch_update.py +179 -0
  281. package/opus/dnn/torch/neural-pitch/ptdb_process.sh +34 -0
  282. package/opus/dnn/torch/neural-pitch/run_crepe.py +72 -0
  283. package/opus/dnn/torch/neural-pitch/training.py +162 -0
  284. package/opus/dnn/torch/neural-pitch/utils.py +59 -0
  285. package/opus/dnn/torch/osce/README.md +66 -0
  286. package/opus/dnn/torch/osce/adv_train_model.py +462 -0
  287. package/opus/dnn/torch/osce/adv_train_vocoder.py +451 -0
  288. package/opus/dnn/torch/osce/create_testvectors.py +165 -0
  289. package/opus/dnn/torch/osce/data/__init__.py +2 -0
  290. package/opus/dnn/torch/osce/data/lpcnet_vocoding_dataset.py +225 -0
  291. package/opus/dnn/torch/osce/data/silk_conversion_set.py +132 -0
  292. package/opus/dnn/torch/osce/data/silk_enhancement_set.py +140 -0
  293. package/opus/dnn/torch/osce/engine/engine.py +103 -0
  294. package/opus/dnn/torch/osce/engine/vocoder_engine.py +101 -0
  295. package/opus/dnn/torch/osce/export_model_weights.py +174 -0
  296. package/opus/dnn/torch/osce/losses/stft_loss.py +277 -0
  297. package/opus/dnn/torch/osce/losses/td_lowpass.py +34 -0
  298. package/opus/dnn/torch/osce/make_default_setup.py +93 -0
  299. package/opus/dnn/torch/osce/models/__init__.py +42 -0
  300. package/opus/dnn/torch/osce/models/fd_discriminator.py +974 -0
  301. package/opus/dnn/torch/osce/models/lace.py +190 -0
  302. package/opus/dnn/torch/osce/models/lavoce.py +274 -0
  303. package/opus/dnn/torch/osce/models/lavoce_400.py +254 -0
  304. package/opus/dnn/torch/osce/models/lpcnet_feature_net.py +91 -0
  305. package/opus/dnn/torch/osce/models/nns_base.py +69 -0
  306. package/opus/dnn/torch/osce/models/no_lace.py +218 -0
  307. package/opus/dnn/torch/osce/models/scale_embedding.py +68 -0
  308. package/opus/dnn/torch/osce/models/shape_up_48.py +179 -0
  309. package/opus/dnn/torch/osce/models/silk_feature_net.py +86 -0
  310. package/opus/dnn/torch/osce/models/silk_feature_net_pl.py +127 -0
  311. package/opus/dnn/torch/osce/requirements.txt +9 -0
  312. package/opus/dnn/torch/osce/resources/training_files.txt +107716 -0
  313. package/opus/dnn/torch/osce/resources/validation_files.txt +26929 -0
  314. package/opus/dnn/torch/osce/scripts/concatenator.py +85 -0
  315. package/opus/dnn/torch/osce/silk_16_to_48.py +28 -0
  316. package/opus/dnn/torch/osce/stndrd/evaluation/commonvoice_clip_selection.py +123 -0
  317. package/opus/dnn/torch/osce/stndrd/evaluation/create_input_data.sh +25 -0
  318. package/opus/dnn/torch/osce/stndrd/evaluation/env.rc +7 -0
  319. package/opus/dnn/torch/osce/stndrd/evaluation/evaluate.py +113 -0
  320. package/opus/dnn/torch/osce/stndrd/evaluation/lace_loss_metric.py +330 -0
  321. package/opus/dnn/torch/osce/stndrd/evaluation/make_boxplots.py +116 -0
  322. package/opus/dnn/torch/osce/stndrd/evaluation/make_boxplots_moctest.py +109 -0
  323. package/opus/dnn/torch/osce/stndrd/evaluation/make_tables.py +124 -0
  324. package/opus/dnn/torch/osce/stndrd/evaluation/make_tables_moctest.py +121 -0
  325. package/opus/dnn/torch/osce/stndrd/evaluation/moc.py +182 -0
  326. package/opus/dnn/torch/osce/stndrd/evaluation/moc2.py +190 -0
  327. package/opus/dnn/torch/osce/stndrd/evaluation/process_dataset.sh +98 -0
  328. package/opus/dnn/torch/osce/stndrd/evaluation/run_nomad.py +138 -0
  329. package/opus/dnn/torch/osce/stndrd/evaluation/run_osce_test.py +196 -0
  330. package/opus/dnn/torch/osce/stndrd/presentation/endoscopy.py +205 -0
  331. package/opus/dnn/torch/osce/stndrd/presentation/lace_demo.ipynb +313 -0
  332. package/opus/dnn/torch/osce/stndrd/presentation/linear_prediction.ipynb +320 -0
  333. package/opus/dnn/torch/osce/stndrd/presentation/playback.py +25 -0
  334. package/opus/dnn/torch/osce/stndrd/presentation/postfilter.ipynb +275 -0
  335. package/opus/dnn/torch/osce/stndrd/presentation/spectrogram.ipynb +173 -0
  336. package/opus/dnn/torch/osce/test_model.py +96 -0
  337. package/opus/dnn/torch/osce/test_vocoder.py +103 -0
  338. package/opus/dnn/torch/osce/train_model.py +307 -0
  339. package/opus/dnn/torch/osce/train_vocoder.py +287 -0
  340. package/opus/dnn/torch/osce/utils/ada_conv.py +71 -0
  341. package/opus/dnn/torch/osce/utils/complexity.py +8 -0
  342. package/opus/dnn/torch/osce/utils/endoscopy.py +205 -0
  343. package/opus/dnn/torch/osce/utils/layers/fir.py +27 -0
  344. package/opus/dnn/torch/osce/utils/layers/limited_adaptive_comb1d.py +230 -0
  345. package/opus/dnn/torch/osce/utils/layers/limited_adaptive_conv1d.py +200 -0
  346. package/opus/dnn/torch/osce/utils/layers/noise_shaper.py +100 -0
  347. package/opus/dnn/torch/osce/utils/layers/pitch_auto_correlator.py +84 -0
  348. package/opus/dnn/torch/osce/utils/layers/silk_upsampler.py +167 -0
  349. package/opus/dnn/torch/osce/utils/layers/td_shaper.py +145 -0
  350. package/opus/dnn/torch/osce/utils/lpcnet_features.py +112 -0
  351. package/opus/dnn/torch/osce/utils/misc.py +95 -0
  352. package/opus/dnn/torch/osce/utils/moc.py +153 -0
  353. package/opus/dnn/torch/osce/utils/pitch.py +122 -0
  354. package/opus/dnn/torch/osce/utils/silk_features.py +144 -0
  355. package/opus/dnn/torch/osce/utils/softquant.py +110 -0
  356. package/opus/dnn/torch/osce/utils/spec.py +210 -0
  357. package/opus/dnn/torch/osce/utils/templates.py +347 -0
  358. package/opus/dnn/torch/plc/export_plc.py +100 -0
  359. package/opus/dnn/torch/plc/plc.py +144 -0
  360. package/opus/dnn/torch/plc/plc_dataset.py +60 -0
  361. package/opus/dnn/torch/plc/train_plc.py +145 -0
  362. package/opus/dnn/torch/rdovae/README.md +55 -0
  363. package/opus/dnn/torch/rdovae/download_datasets.sh +6 -0
  364. package/opus/dnn/torch/rdovae/export_rdovae_weights.py +365 -0
  365. package/opus/dnn/torch/rdovae/fec_encoder.py +212 -0
  366. package/opus/dnn/torch/rdovae/import_rdovae_weights.py +143 -0
  367. package/opus/dnn/torch/rdovae/packets/__init__.py +1 -0
  368. package/opus/dnn/torch/rdovae/packets/fec_packets.c +142 -0
  369. package/opus/dnn/torch/rdovae/packets/fec_packets.h +34 -0
  370. package/opus/dnn/torch/rdovae/packets/fec_packets.py +108 -0
  371. package/opus/dnn/torch/rdovae/process_speech.sh +7 -0
  372. package/opus/dnn/torch/rdovae/rdovae/__init__.py +2 -0
  373. package/opus/dnn/torch/rdovae/rdovae/dataset.py +67 -0
  374. package/opus/dnn/torch/rdovae/rdovae/rdovae.py +719 -0
  375. package/opus/dnn/torch/rdovae/requirements.txt +4 -0
  376. package/opus/dnn/torch/rdovae/train_rdovae.py +278 -0
  377. package/opus/dnn/torch/testsuite/README.md +46 -0
  378. package/opus/dnn/torch/testsuite/examples/lpcnet_c_example.yml +6 -0
  379. package/opus/dnn/torch/testsuite/examples/lpcnet_c_plc_example.yml +5 -0
  380. package/opus/dnn/torch/testsuite/examples/lpcnet_torch_example.yml +5 -0
  381. package/opus/dnn/torch/testsuite/requirements.txt +12 -0
  382. package/opus/dnn/torch/testsuite/run_test.py +375 -0
  383. package/opus/dnn/torch/testsuite/utils/__init__.py +0 -0
  384. package/opus/dnn/torch/testsuite/utils/files.py +54 -0
  385. package/opus/dnn/torch/testsuite/utils/pesq.py +43 -0
  386. package/opus/dnn/torch/testsuite/utils/pitch.py +61 -0
  387. package/opus/dnn/torch/weight-exchange/README.md +21 -0
  388. package/opus/dnn/torch/weight-exchange/requirements.txt +1 -0
  389. package/opus/dnn/torch/weight-exchange/setup.py +48 -0
  390. package/opus/dnn/torch/weight-exchange/wexchange/__init__.py +30 -0
  391. package/opus/dnn/torch/weight-exchange/wexchange/c_export/__init__.py +31 -0
  392. package/opus/dnn/torch/weight-exchange/wexchange/c_export/c_writer.py +181 -0
  393. package/opus/dnn/torch/weight-exchange/wexchange/c_export/common.py +386 -0
  394. package/opus/dnn/torch/weight-exchange/wexchange/tf/__init__.py +5 -0
  395. package/opus/dnn/torch/weight-exchange/wexchange/tf/tf.py +188 -0
  396. package/opus/dnn/torch/weight-exchange/wexchange/torch/__init__.py +37 -0
  397. package/opus/dnn/torch/weight-exchange/wexchange/torch/torch.py +433 -0
  398. package/opus/dnn/training_tf2/dataloader.py +49 -0
  399. package/opus/dnn/training_tf2/decode_rdovae.py +111 -0
  400. package/opus/dnn/training_tf2/diffembed.py +49 -0
  401. package/opus/dnn/training_tf2/dump_lpcnet.py +388 -0
  402. package/opus/dnn/training_tf2/dump_plc.py +296 -0
  403. package/opus/dnn/training_tf2/dump_rdovae.py +306 -0
  404. package/opus/dnn/training_tf2/encode_rdovae.py +125 -0
  405. package/opus/dnn/training_tf2/fec_encoder.py +256 -0
  406. package/opus/dnn/training_tf2/fec_packets.c +142 -0
  407. package/opus/dnn/training_tf2/fec_packets.h +34 -0
  408. package/opus/dnn/training_tf2/fec_packets.py +108 -0
  409. package/opus/dnn/training_tf2/keraslayerdump.py +189 -0
  410. package/opus/dnn/training_tf2/lossfuncs.py +99 -0
  411. package/opus/dnn/training_tf2/lpcnet.py +339 -0
  412. package/opus/dnn/training_tf2/lpcnet_plc.py +101 -0
  413. package/opus/dnn/training_tf2/mdense.py +95 -0
  414. package/opus/dnn/training_tf2/pade.py +70 -0
  415. package/opus/dnn/training_tf2/parameters.py +29 -0
  416. package/opus/dnn/training_tf2/plc_loader.py +73 -0
  417. package/opus/dnn/training_tf2/rdovae.py +372 -0
  418. package/opus/dnn/training_tf2/rdovae_exchange.py +138 -0
  419. package/opus/dnn/training_tf2/rdovae_import.py +123 -0
  420. package/opus/dnn/training_tf2/test_lpcnet.py +120 -0
  421. package/opus/dnn/training_tf2/test_plc.py +92 -0
  422. package/opus/dnn/training_tf2/tf_funcs.py +70 -0
  423. package/opus/dnn/training_tf2/train_lpcnet.py +214 -0
  424. package/opus/dnn/training_tf2/train_plc.py +197 -0
  425. package/opus/dnn/training_tf2/train_rdovae.py +151 -0
  426. package/opus/dnn/training_tf2/ulaw.py +19 -0
  427. package/opus/dnn/training_tf2/uniform_noise.py +78 -0
  428. package/opus/dnn/vec.h +389 -0
  429. package/opus/dnn/vec_avx.h +884 -0
  430. package/opus/dnn/vec_neon.h +473 -0
  431. package/opus/dnn/write_lpcnet_weights.c +97 -0
  432. package/opus/dnn/x86/dnn_x86.h +121 -0
  433. package/opus/dnn/x86/nnet_avx2.c +40 -0
  434. package/opus/dnn/x86/nnet_sse2.c +40 -0
  435. package/opus/dnn/x86/nnet_sse4_1.c +40 -0
  436. package/opus/dnn/x86/x86_dnn_map.c +83 -0
  437. package/opus/doc/Doxyfile.in +340 -0
  438. package/opus/doc/Makefile.am +45 -0
  439. package/opus/doc/build_draft.sh +113 -0
  440. package/opus/doc/build_isobmff.sh +50 -0
  441. package/opus/doc/build_oggdraft.sh +52 -0
  442. package/opus/doc/customdoxygen.css +1011 -0
  443. package/opus/doc/draft-ietf-codec-oggopus.xml +1873 -0
  444. package/opus/doc/draft-ietf-codec-opus-update.xml +513 -0
  445. package/opus/doc/draft-ietf-codec-opus.xml +8276 -0
  446. package/opus/doc/draft-ietf-payload-rtp-opus.xml +960 -0
  447. package/opus/doc/footer.html +32 -0
  448. package/opus/doc/header.html +61 -0
  449. package/opus/doc/meson.build +33 -0
  450. package/opus/doc/opus_in_isobmff.css +60 -0
  451. package/opus/doc/opus_in_isobmff.html +692 -0
  452. package/opus/doc/opus_logo.svg +157 -0
  453. package/opus/doc/opus_update.patch +244 -0
  454. package/opus/doc/release.txt +43 -0
  455. package/opus/doc/trivial_example.c +171 -0
  456. package/opus/include/meson.build +13 -0
  457. package/opus/include/opus.h +1172 -0
  458. package/opus/include/opus_custom.h +381 -0
  459. package/opus/include/opus_defines.h +830 -0
  460. package/opus/include/opus_multistream.h +736 -0
  461. package/opus/include/opus_projection.h +643 -0
  462. package/opus/include/opus_types.h +166 -0
  463. package/opus/lpcnet_headers.mk +44 -0
  464. package/opus/lpcnet_sources.mk +44 -0
  465. package/opus/m4/as-gcc-inline-assembly.m4 +98 -0
  466. package/opus/m4/ax_add_fortify_source.m4 +53 -0
  467. package/opus/m4/opus-intrinsics.m4 +29 -0
  468. package/opus/meson/README.md +88 -0
  469. package/opus/meson/get-version.py +86 -0
  470. package/opus/meson/read-sources-list.py +28 -0
  471. package/opus/meson.build +745 -0
  472. package/opus/meson_options.txt +27 -0
  473. package/opus/opus-uninstalled.pc.in +12 -0
  474. package/opus/opus.m4 +117 -0
  475. package/opus/opus.pc.in +16 -0
  476. package/opus/opus_headers.mk +8 -0
  477. package/opus/opus_sources.mk +17 -0
  478. package/opus/releases.sha2 +85 -0
  479. package/opus/scripts/dump_rnn.py +57 -0
  480. package/opus/scripts/local_build.py +220 -0
  481. package/opus/scripts/rnn_train.py +67 -0
  482. package/opus/scripts/shrink_model.sh +7 -0
  483. package/opus/silk/A2NLSF.c +267 -0
  484. package/opus/silk/API.h +156 -0
  485. package/opus/silk/CNG.c +188 -0
  486. package/opus/silk/HP_variable_cutoff.c +77 -0
  487. package/opus/silk/Inlines.h +188 -0
  488. package/opus/silk/LPC_analysis_filter.c +111 -0
  489. package/opus/silk/LPC_fit.c +82 -0
  490. package/opus/silk/LPC_inv_pred_gain.c +141 -0
  491. package/opus/silk/LP_variable_cutoff.c +135 -0
  492. package/opus/silk/MacroCount.h +710 -0
  493. package/opus/silk/MacroDebug.h +945 -0
  494. package/opus/silk/NLSF2A.c +141 -0
  495. package/opus/silk/NLSF_VQ.c +76 -0
  496. package/opus/silk/NLSF_VQ_weights_laroia.c +80 -0
  497. package/opus/silk/NLSF_decode.c +93 -0
  498. package/opus/silk/NLSF_del_dec_quant.c +215 -0
  499. package/opus/silk/NLSF_encode.c +124 -0
  500. package/opus/silk/NLSF_stabilize.c +142 -0
  501. package/opus/silk/NLSF_unpack.c +55 -0
  502. package/opus/silk/NSQ.c +437 -0
  503. package/opus/silk/NSQ.h +101 -0
  504. package/opus/silk/NSQ_del_dec.c +733 -0
  505. package/opus/silk/PLC.c +493 -0
  506. package/opus/silk/PLC.h +65 -0
  507. package/opus/silk/SigProc_FIX.h +643 -0
  508. package/opus/silk/VAD.c +360 -0
  509. package/opus/silk/VQ_WMat_EC.c +131 -0
  510. package/opus/silk/ana_filt_bank_1.c +74 -0
  511. package/opus/silk/arm/LPC_inv_pred_gain_arm.h +57 -0
  512. package/opus/silk/arm/LPC_inv_pred_gain_neon_intr.c +288 -0
  513. package/opus/silk/arm/NSQ_del_dec_arm.h +100 -0
  514. package/opus/silk/arm/NSQ_del_dec_neon_intr.c +1138 -0
  515. package/opus/silk/arm/NSQ_neon.c +112 -0
  516. package/opus/silk/arm/NSQ_neon.h +114 -0
  517. package/opus/silk/arm/SigProc_FIX_armv4.h +47 -0
  518. package/opus/silk/arm/SigProc_FIX_armv5e.h +61 -0
  519. package/opus/silk/arm/arm_silk_map.c +128 -0
  520. package/opus/silk/arm/biquad_alt_arm.h +68 -0
  521. package/opus/silk/arm/biquad_alt_neon_intr.c +156 -0
  522. package/opus/silk/arm/macros_arm64.h +39 -0
  523. package/opus/silk/arm/macros_armv4.h +110 -0
  524. package/opus/silk/arm/macros_armv5e.h +220 -0
  525. package/opus/silk/biquad_alt.c +121 -0
  526. package/opus/silk/bwexpander.c +51 -0
  527. package/opus/silk/bwexpander_32.c +51 -0
  528. package/opus/silk/check_control_input.c +106 -0
  529. package/opus/silk/code_signs.c +115 -0
  530. package/opus/silk/control.h +161 -0
  531. package/opus/silk/control_SNR.c +113 -0
  532. package/opus/silk/control_audio_bandwidth.c +132 -0
  533. package/opus/silk/control_codec.c +423 -0
  534. package/opus/silk/debug.c +174 -0
  535. package/opus/silk/debug.h +267 -0
  536. package/opus/silk/dec_API.c +465 -0
  537. package/opus/silk/decode_core.c +243 -0
  538. package/opus/silk/decode_frame.c +169 -0
  539. package/opus/silk/decode_indices.c +151 -0
  540. package/opus/silk/decode_parameters.c +115 -0
  541. package/opus/silk/decode_pitch.c +77 -0
  542. package/opus/silk/decode_pulses.c +115 -0
  543. package/opus/silk/decoder_set_fs.c +108 -0
  544. package/opus/silk/define.h +235 -0
  545. package/opus/silk/enc_API.c +593 -0
  546. package/opus/silk/encode_indices.c +181 -0
  547. package/opus/silk/encode_pulses.c +206 -0
  548. package/opus/silk/errors.h +98 -0
  549. package/opus/silk/fixed/LTP_analysis_filter_FIX.c +90 -0
  550. package/opus/silk/fixed/LTP_scale_ctrl_FIX.c +58 -0
  551. package/opus/silk/fixed/apply_sine_window_FIX.c +101 -0
  552. package/opus/silk/fixed/arm/warped_autocorrelation_FIX_arm.h +68 -0
  553. package/opus/silk/fixed/arm/warped_autocorrelation_FIX_neon_intr.c +265 -0
  554. package/opus/silk/fixed/autocorr_FIX.c +48 -0
  555. package/opus/silk/fixed/burg_modified_FIX.c +280 -0
  556. package/opus/silk/fixed/corrMatrix_FIX.c +150 -0
  557. package/opus/silk/fixed/encode_frame_FIX.c +444 -0
  558. package/opus/silk/fixed/find_LPC_FIX.c +151 -0
  559. package/opus/silk/fixed/find_LTP_FIX.c +99 -0
  560. package/opus/silk/fixed/find_pitch_lags_FIX.c +143 -0
  561. package/opus/silk/fixed/find_pred_coefs_FIX.c +146 -0
  562. package/opus/silk/fixed/k2a_FIX.c +54 -0
  563. package/opus/silk/fixed/k2a_Q16_FIX.c +54 -0
  564. package/opus/silk/fixed/main_FIX.h +244 -0
  565. package/opus/silk/fixed/mips/noise_shape_analysis_FIX_mipsr1.h +336 -0
  566. package/opus/silk/fixed/mips/prefilter_FIX_mipsr1.h +184 -0
  567. package/opus/silk/fixed/mips/warped_autocorrelation_FIX_mipsr1.h +165 -0
  568. package/opus/silk/fixed/noise_shape_analysis_FIX.c +407 -0
  569. package/opus/silk/fixed/pitch_analysis_core_FIX.c +721 -0
  570. package/opus/silk/fixed/process_gains_FIX.c +117 -0
  571. package/opus/silk/fixed/regularize_correlations_FIX.c +47 -0
  572. package/opus/silk/fixed/residual_energy16_FIX.c +103 -0
  573. package/opus/silk/fixed/residual_energy_FIX.c +98 -0
  574. package/opus/silk/fixed/schur64_FIX.c +93 -0
  575. package/opus/silk/fixed/schur_FIX.c +107 -0
  576. package/opus/silk/fixed/structs_FIX.h +116 -0
  577. package/opus/silk/fixed/vector_ops_FIX.c +102 -0
  578. package/opus/silk/fixed/warped_autocorrelation_FIX.c +92 -0
  579. package/opus/silk/fixed/x86/burg_modified_FIX_sse4_1.c +400 -0
  580. package/opus/silk/fixed/x86/vector_ops_FIX_sse4_1.c +93 -0
  581. package/opus/silk/float/LPC_analysis_filter_FLP.c +249 -0
  582. package/opus/silk/float/LPC_inv_pred_gain_FLP.c +73 -0
  583. package/opus/silk/float/LTP_analysis_filter_FLP.c +75 -0
  584. package/opus/silk/float/LTP_scale_ctrl_FLP.c +58 -0
  585. package/opus/silk/float/SigProc_FLP.h +205 -0
  586. package/opus/silk/float/apply_sine_window_FLP.c +81 -0
  587. package/opus/silk/float/autocorrelation_FLP.c +53 -0
  588. package/opus/silk/float/burg_modified_FLP.c +187 -0
  589. package/opus/silk/float/bwexpander_FLP.c +49 -0
  590. package/opus/silk/float/corrMatrix_FLP.c +95 -0
  591. package/opus/silk/float/encode_frame_FLP.c +432 -0
  592. package/opus/silk/float/energy_FLP.c +59 -0
  593. package/opus/silk/float/find_LPC_FLP.c +105 -0
  594. package/opus/silk/float/find_LTP_FLP.c +65 -0
  595. package/opus/silk/float/find_pitch_lags_FLP.c +132 -0
  596. package/opus/silk/float/find_pred_coefs_FLP.c +117 -0
  597. package/opus/silk/float/inner_product_FLP.c +59 -0
  598. package/opus/silk/float/k2a_FLP.c +54 -0
  599. package/opus/silk/float/main_FLP.h +290 -0
  600. package/opus/silk/float/noise_shape_analysis_FLP.c +350 -0
  601. package/opus/silk/float/pitch_analysis_core_FLP.c +630 -0
  602. package/opus/silk/float/process_gains_FLP.c +103 -0
  603. package/opus/silk/float/regularize_correlations_FLP.c +48 -0
  604. package/opus/silk/float/residual_energy_FLP.c +117 -0
  605. package/opus/silk/float/scale_copy_vector_FLP.c +57 -0
  606. package/opus/silk/float/scale_vector_FLP.c +56 -0
  607. package/opus/silk/float/schur_FLP.c +70 -0
  608. package/opus/silk/float/sort_FLP.c +83 -0
  609. package/opus/silk/float/structs_FLP.h +112 -0
  610. package/opus/silk/float/warped_autocorrelation_FLP.c +75 -0
  611. package/opus/silk/float/wrappers_FLP.c +209 -0
  612. package/opus/silk/float/x86/inner_product_FLP_avx2.c +85 -0
  613. package/opus/silk/gain_quant.c +142 -0
  614. package/opus/silk/init_decoder.c +84 -0
  615. package/opus/silk/init_encoder.c +68 -0
  616. package/opus/silk/inner_prod_aligned.c +47 -0
  617. package/opus/silk/interpolate.c +51 -0
  618. package/opus/silk/lin2log.c +46 -0
  619. package/opus/silk/log2lin.c +58 -0
  620. package/opus/silk/macros.h +151 -0
  621. package/opus/silk/main.h +486 -0
  622. package/opus/silk/meson.build +69 -0
  623. package/opus/silk/mips/NSQ_del_dec_mipsr1.h +410 -0
  624. package/opus/silk/mips/macros_mipsr1.h +92 -0
  625. package/opus/silk/mips/sigproc_fix_mipsr1.h +60 -0
  626. package/opus/silk/pitch_est_defines.h +88 -0
  627. package/opus/silk/pitch_est_tables.c +99 -0
  628. package/opus/silk/process_NLSFs.c +107 -0
  629. package/opus/silk/quant_LTP_gains.c +132 -0
  630. package/opus/silk/resampler.c +215 -0
  631. package/opus/silk/resampler_down2.c +74 -0
  632. package/opus/silk/resampler_down2_3.c +103 -0
  633. package/opus/silk/resampler_private.h +88 -0
  634. package/opus/silk/resampler_private_AR2.c +55 -0
  635. package/opus/silk/resampler_private_IIR_FIR.c +107 -0
  636. package/opus/silk/resampler_private_down_FIR.c +194 -0
  637. package/opus/silk/resampler_private_up2_HQ.c +113 -0
  638. package/opus/silk/resampler_rom.c +96 -0
  639. package/opus/silk/resampler_rom.h +68 -0
  640. package/opus/silk/resampler_structs.h +60 -0
  641. package/opus/silk/shell_coder.c +151 -0
  642. package/opus/silk/sigm_Q15.c +76 -0
  643. package/opus/silk/sort.c +154 -0
  644. package/opus/silk/stereo_LR_to_MS.c +229 -0
  645. package/opus/silk/stereo_MS_to_LR.c +85 -0
  646. package/opus/silk/stereo_decode_pred.c +73 -0
  647. package/opus/silk/stereo_encode_pred.c +62 -0
  648. package/opus/silk/stereo_find_predictor.c +79 -0
  649. package/opus/silk/stereo_quant_pred.c +73 -0
  650. package/opus/silk/structs.h +357 -0
  651. package/opus/silk/sum_sqr_shift.c +83 -0
  652. package/opus/silk/table_LSF_cos.c +70 -0
  653. package/opus/silk/tables.h +114 -0
  654. package/opus/silk/tables_LTP.c +294 -0
  655. package/opus/silk/tables_NLSF_CB_NB_MB.c +195 -0
  656. package/opus/silk/tables_NLSF_CB_WB.c +234 -0
  657. package/opus/silk/tables_gain.c +63 -0
  658. package/opus/silk/tables_other.c +124 -0
  659. package/opus/silk/tables_pitch_lag.c +69 -0
  660. package/opus/silk/tables_pulses_per_block.c +264 -0
  661. package/opus/silk/tests/meson.build +8 -0
  662. package/opus/silk/tests/test_unit_LPC_inv_pred_gain.c +130 -0
  663. package/opus/silk/tuning_parameters.h +155 -0
  664. package/opus/silk/typedef.h +81 -0
  665. package/opus/silk/x86/NSQ_del_dec_avx2.c +1075 -0
  666. package/opus/silk/x86/NSQ_del_dec_sse4_1.c +915 -0
  667. package/opus/silk/x86/NSQ_sse4_1.c +772 -0
  668. package/opus/silk/x86/SigProc_FIX_sse.h +99 -0
  669. package/opus/silk/x86/VAD_sse4_1.c +289 -0
  670. package/opus/silk/x86/VQ_WMat_EC_sse4_1.c +173 -0
  671. package/opus/silk/x86/main_sse.h +299 -0
  672. package/opus/silk/x86/x86_silk_map.c +179 -0
  673. package/opus/silk_headers.mk +44 -0
  674. package/opus/silk_sources.mk +164 -0
  675. package/opus/src/analysis.c +979 -0
  676. package/opus/src/analysis.h +103 -0
  677. package/opus/src/extensions.c +663 -0
  678. package/opus/src/mapping_matrix.c +993 -0
  679. package/opus/src/mapping_matrix.h +165 -0
  680. package/opus/src/meson.build +45 -0
  681. package/opus/src/mlp.c +132 -0
  682. package/opus/src/mlp.h +60 -0
  683. package/opus/src/mlp_data.c +672 -0
  684. package/opus/src/opus.c +362 -0
  685. package/opus/src/opus_compare.c +382 -0
  686. package/opus/src/opus_decoder.c +1579 -0
  687. package/opus/src/opus_demo.c +1194 -0
  688. package/opus/src/opus_encoder.c +3180 -0
  689. package/opus/src/opus_multistream.c +92 -0
  690. package/opus/src/opus_multistream_decoder.c +563 -0
  691. package/opus/src/opus_multistream_encoder.c +1321 -0
  692. package/opus/src/opus_private.h +263 -0
  693. package/opus/src/opus_projection_decoder.c +283 -0
  694. package/opus/src/opus_projection_encoder.c +522 -0
  695. package/opus/src/repacketizer.c +469 -0
  696. package/opus/src/repacketizer_demo.c +247 -0
  697. package/opus/src/tansig_table.h +45 -0
  698. package/opus/tar_list.txt +28 -0
  699. package/opus/tests/meson.build +39 -0
  700. package/opus/tests/opus_build_test.sh +29 -0
  701. package/opus/tests/opus_decode_fuzzer.c +124 -0
  702. package/opus/tests/opus_decode_fuzzer.options +2 -0
  703. package/opus/tests/opus_encode_regressions.c +1034 -0
  704. package/opus/tests/random_config.sh +126 -0
  705. package/opus/tests/run_vectors.sh +143 -0
  706. package/opus/tests/test_opus_api.c +1904 -0
  707. package/opus/tests/test_opus_common.h +86 -0
  708. package/opus/tests/test_opus_custom.c +694 -0
  709. package/opus/tests/test_opus_decode.c +481 -0
  710. package/opus/tests/test_opus_dred.c +107 -0
  711. package/opus/tests/test_opus_encode.c +738 -0
  712. package/opus/tests/test_opus_extensions.c +750 -0
  713. package/opus/tests/test_opus_padding.c +94 -0
  714. package/opus/tests/test_opus_projection.c +384 -0
  715. package/opus/training/rnn_dump.py +66 -0
  716. package/opus/training/rnn_train.py +177 -0
  717. package/opus/training/txt2hdf5.py +12 -0
  718. package/opus/update_version +65 -0
  719. package/package.json +2 -2
  720. package/src/build-ffmpeg-msys.sh +8 -2
@@ -0,0 +1,29 @@
1
+ import torch
2
+ from torch import nn
3
+ import torch.nn.functional as F
4
+
5
+ class LossGen(nn.Module):
6
+ def __init__(self, gru1_size=16, gru2_size=16):
7
+ super(LossGen, self).__init__()
8
+
9
+ self.gru1_size = gru1_size
10
+ self.gru2_size = gru2_size
11
+ self.dense_in = nn.Linear(2, 8)
12
+ self.gru1 = nn.GRU(8, self.gru1_size, batch_first=True)
13
+ self.gru2 = nn.GRU(self.gru1_size, self.gru2_size, batch_first=True)
14
+ self.dense_out = nn.Linear(self.gru2_size, 1)
15
+
16
+ def forward(self, loss, perc, states=None):
17
+ #print(states)
18
+ device = loss.device
19
+ batch_size = loss.size(0)
20
+ if states is None:
21
+ gru1_state = torch.zeros((1, batch_size, self.gru1_size), device=device)
22
+ gru2_state = torch.zeros((1, batch_size, self.gru2_size), device=device)
23
+ else:
24
+ gru1_state = states[0]
25
+ gru2_state = states[1]
26
+ x = torch.tanh(self.dense_in(torch.cat([loss, perc], dim=-1)))
27
+ gru1_out, gru1_state = self.gru1(x, gru1_state)
28
+ gru2_out, gru2_state = self.gru2(gru1_out, gru2_state)
29
+ return self.dense_out(gru2_out), [gru1_state, gru2_state]
@@ -0,0 +1,17 @@
1
+ #!/bin/sh
2
+
3
+ #directory containing the loss files
4
+ datadir=$1
5
+
6
+ for i in $datadir/*_is_lost.txt
7
+ do
8
+ perc=`cat $i | awk '{a+=$1}END{print a/NR}'`
9
+ echo $perc $i
10
+ done > percentage_list.txt
11
+
12
+ sort -n percentage_list.txt | awk '{print $2}' > percentage_sorted.txt
13
+
14
+ for i in `cat percentage_sorted.txt`
15
+ do
16
+ cat $i
17
+ done > loss_sorted.txt
@@ -0,0 +1,42 @@
1
+ import lossgen
2
+ import os
3
+ import argparse
4
+ import torch
5
+ import numpy as np
6
+
7
+
8
+ parser = argparse.ArgumentParser()
9
+
10
+ parser.add_argument('model', type=str, help='CELPNet model')
11
+ parser.add_argument('percentage', type=float, help='percentage loss')
12
+ parser.add_argument('output', type=str, help='path to output file (ascii)')
13
+
14
+ parser.add_argument('--length', type=int, help="length of sequence to generate", default=500)
15
+
16
+ args = parser.parse_args()
17
+
18
+
19
+
20
+ checkpoint = torch.load(args.model, map_location='cpu')
21
+ model = lossgen.LossGen(*checkpoint['model_args'], **checkpoint['model_kwargs'])
22
+ model.load_state_dict(checkpoint['state_dict'], strict=False)
23
+
24
+ states=None
25
+ last = torch.zeros((1,1,1))
26
+ perc = torch.tensor((args.percentage,))[None,None,:]
27
+ seq = torch.zeros((0,1,1))
28
+
29
+ one = torch.ones((1,1,1))
30
+ zero = torch.zeros((1,1,1))
31
+
32
+ if __name__ == '__main__':
33
+ for i in range(args.length):
34
+ prob, states = model(last, perc, states=states)
35
+ prob = torch.sigmoid(prob)
36
+ states[0] = states[0].detach()
37
+ states[1] = states[1].detach()
38
+ loss = one if np.random.rand() < prob else zero
39
+ last = loss
40
+ seq = torch.cat([seq, loss])
41
+
42
+ np.savetxt(args.output, seq[:,:,0].numpy().astype('int'), fmt='%d')
@@ -0,0 +1,99 @@
1
+ import numpy as np
2
+ import torch
3
+ from torch import nn
4
+ import torch.nn.functional as F
5
+ import tqdm
6
+ from scipy.signal import lfilter
7
+ import os
8
+ import lossgen
9
+
10
+ class LossDataset(torch.utils.data.Dataset):
11
+ def __init__(self,
12
+ loss_file,
13
+ sequence_length=997):
14
+
15
+ self.sequence_length = sequence_length
16
+
17
+ self.loss = np.loadtxt(loss_file, dtype='float32')
18
+
19
+ self.nb_sequences = self.loss.shape[0]//self.sequence_length
20
+ self.loss = self.loss[:self.nb_sequences*self.sequence_length]
21
+ self.perc = lfilter(np.array([.001], dtype='float32'), np.array([1., -.999], dtype='float32'), self.loss)
22
+
23
+ self.loss = np.reshape(self.loss, (self.nb_sequences, self.sequence_length, 1))
24
+ self.perc = np.reshape(self.perc, (self.nb_sequences, self.sequence_length, 1))
25
+
26
+ def __len__(self):
27
+ return self.nb_sequences
28
+
29
+ def __getitem__(self, index):
30
+ r0 = np.random.normal(scale=.1, size=(1,1)).astype('float32')
31
+ r1 = np.random.normal(scale=.1, size=(self.sequence_length,1)).astype('float32')
32
+ perc = self.perc[index, :, :]
33
+ perc = perc + (r0+r1)*perc*(1-perc)
34
+ return [self.loss[index, :, :], perc]
35
+
36
+
37
+ adam_betas = [0.8, 0.98]
38
+ adam_eps = 1e-8
39
+ batch_size=256
40
+ lr_decay = 0.001
41
+ lr = 0.003
42
+ epsilon = 1e-5
43
+ epochs = 2000
44
+ checkpoint_dir='checkpoint'
45
+ os.makedirs(checkpoint_dir, exist_ok=True)
46
+ checkpoint = dict()
47
+
48
+ device = torch.device("cuda") if torch.cuda.is_available() else torch.device("cpu")
49
+
50
+ checkpoint['model_args'] = ()
51
+ checkpoint['model_kwargs'] = {'gru1_size': 16, 'gru2_size': 32}
52
+ model = lossgen.LossGen(*checkpoint['model_args'], **checkpoint['model_kwargs'])
53
+ dataset = LossDataset('loss_sorted.txt')
54
+ dataloader = torch.utils.data.DataLoader(dataset, batch_size=batch_size, shuffle=True, drop_last=True, num_workers=4)
55
+
56
+
57
+ optimizer = torch.optim.AdamW(model.parameters(), lr=lr, betas=adam_betas, eps=adam_eps)
58
+
59
+
60
+ # learning rate scheduler
61
+ scheduler = torch.optim.lr_scheduler.LambdaLR(optimizer=optimizer, lr_lambda=lambda x : 1 / (1 + lr_decay * x))
62
+
63
+
64
+ if __name__ == '__main__':
65
+ model.to(device)
66
+ states = None
67
+ for epoch in range(1, epochs + 1):
68
+
69
+ running_loss = 0
70
+
71
+ print(f"training epoch {epoch}...")
72
+ with tqdm.tqdm(dataloader, unit='batch') as tepoch:
73
+ for i, (loss, perc) in enumerate(tepoch):
74
+ optimizer.zero_grad()
75
+ loss = loss.to(device)
76
+ perc = perc.to(device)
77
+
78
+ out, states = model(loss, perc, states=states)
79
+ states = [state.detach() for state in states]
80
+ out = torch.sigmoid(out[:,:-1,:])
81
+ target = loss[:,1:,:]
82
+
83
+ loss = torch.mean(-target*torch.log(out+epsilon) - (1-target)*torch.log(1-out+epsilon))
84
+
85
+ loss.backward()
86
+ optimizer.step()
87
+
88
+ scheduler.step()
89
+
90
+ running_loss += loss.detach().cpu().item()
91
+ tepoch.set_postfix(loss=f"{running_loss/(i+1):8.5f}",
92
+ )
93
+
94
+ # save checkpoint
95
+ checkpoint_path = os.path.join(checkpoint_dir, f'lossgen_{epoch}.pth')
96
+ checkpoint['state_dict'] = model.state_dict()
97
+ checkpoint['loss'] = running_loss / len(dataloader)
98
+ checkpoint['epoch'] = epoch
99
+ torch.save(checkpoint, checkpoint_path)
@@ -0,0 +1,27 @@
1
+ # LPCNet
2
+
3
+ Incomplete pytorch implementation of LPCNet
4
+
5
+ ## Data preparation
6
+ For data preparation use dump_data in github.com/xiph/LPCNet. To turn this into
7
+ a training dataset, copy data and feature file to a folder and run
8
+
9
+ python add_dataset_config.py my_dataset_folder
10
+
11
+
12
+ ## Training
13
+ To train a model, create and adjust a setup file, e.g. with
14
+
15
+ python make_default_setup.py my_setup.yml --path2dataset my_dataset_folder
16
+
17
+ Then simply run
18
+
19
+ python train_lpcnet.py my_setup.yml my_output
20
+
21
+ ## Inference
22
+ Create feature file with dump_data from github.com/xiph/LPCNet. Then run e.g.
23
+
24
+ python test_lpcnet.py features.f32 my_output/checkpoints/checkpoint_ep_10.pth out.wav
25
+
26
+ Inference runs on CPU and takes usually between 3 and 20 seconds per generated second of audio,
27
+ depending on the CPU.
@@ -0,0 +1,77 @@
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
+
33
+ import yaml
34
+
35
+
36
+ from utils.templates import dataset_template_v1, dataset_template_v2
37
+
38
+
39
+
40
+
41
+ parser = argparse.ArgumentParser("add_dataset_config.py")
42
+
43
+ parser.add_argument('path', type=str, help='path to folder containing feature and data file')
44
+ parser.add_argument('--version', type=int, help="dataset version, 1 for classic LPCNet with 55 feature slots, 2 for new format with 36 feature slots.", default=2)
45
+ parser.add_argument('--description', type=str, help='brief dataset description', default="I will add a description later")
46
+ args = parser.parse_args()
47
+
48
+
49
+ if args.version == 1:
50
+ template = dataset_template_v1
51
+ data_extension = '.u8'
52
+ elif args.version == 2:
53
+ template = dataset_template_v2
54
+ data_extension = '.s16'
55
+ else:
56
+ raise ValueError(f"unknown dataset version {args.version}")
57
+
58
+ # get folder content
59
+ content = os.listdir(args.path)
60
+
61
+ features = [c for c in content if c.endswith('.f32')]
62
+
63
+ if len(features) != 1:
64
+ print("could not determine feature file")
65
+ else:
66
+ template['feature_file'] = features[0]
67
+
68
+ data = [c for c in content if c.endswith(data_extension)]
69
+ if len(data) != 1:
70
+ print("could not determine data file")
71
+ else:
72
+ template['signal_file'] = data[0]
73
+
74
+ template['description'] = args.description
75
+
76
+ with open(os.path.join(args.path, 'info.yml'), 'w') as f:
77
+ yaml.dump(template, f)
@@ -0,0 +1 @@
1
+ from .lpcnet_dataset import LPCNetDataset
@@ -0,0 +1,227 @@
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
+ """ Dataset for LPCNet training """
31
+ import os
32
+
33
+ import yaml
34
+ import torch
35
+ import numpy as np
36
+ from torch.utils.data import Dataset
37
+
38
+
39
+ scale = 255.0/32768.0
40
+ scale_1 = 32768.0/255.0
41
+ def ulaw2lin(u):
42
+ u = u - 128
43
+ s = np.sign(u)
44
+ u = np.abs(u)
45
+ return s*scale_1*(np.exp(u/128.*np.log(256))-1)
46
+
47
+
48
+ def lin2ulaw(x):
49
+ s = np.sign(x)
50
+ x = np.abs(x)
51
+ u = (s*(128*np.log(1+scale*x)/np.log(256)))
52
+ u = np.clip(128 + np.round(u), 0, 255)
53
+ return u
54
+
55
+
56
+ def run_lpc(signal, lpcs, frame_length=160):
57
+ num_frames, lpc_order = lpcs.shape
58
+
59
+ prediction = np.concatenate(
60
+ [- np.convolve(signal[i * frame_length : (i + 1) * frame_length + lpc_order - 1], lpcs[i], mode='valid') for i in range(num_frames)]
61
+ )
62
+ error = signal[lpc_order :] - prediction
63
+
64
+ return prediction, error
65
+
66
+ class LPCNetDataset(Dataset):
67
+ def __init__(self,
68
+ path_to_dataset,
69
+ features=['cepstrum', 'periods', 'pitch_corr'],
70
+ input_signals=['last_signal', 'prediction', 'last_error'],
71
+ target='error',
72
+ frames_per_sample=15,
73
+ feature_history=2,
74
+ feature_lookahead=2,
75
+ lpc_gamma=1):
76
+
77
+ super(LPCNetDataset, self).__init__()
78
+
79
+ # load dataset info
80
+ self.path_to_dataset = path_to_dataset
81
+ with open(os.path.join(path_to_dataset, 'info.yml'), 'r') as f:
82
+ dataset = yaml.load(f, yaml.FullLoader)
83
+
84
+ # dataset version
85
+ self.version = dataset['version']
86
+ if self.version == 1:
87
+ self.getitem = self.getitem_v1
88
+ elif self.version == 2:
89
+ self.getitem = self.getitem_v2
90
+ else:
91
+ raise ValueError(f"dataset version {self.version} unknown")
92
+
93
+ # features
94
+ self.feature_history = feature_history
95
+ self.feature_lookahead = feature_lookahead
96
+ self.frame_offset = 1 + self.feature_history
97
+ self.frames_per_sample = frames_per_sample
98
+ self.input_features = features
99
+ self.feature_frame_layout = dataset['feature_frame_layout']
100
+ self.lpc_gamma = lpc_gamma
101
+
102
+ # load feature file
103
+ self.feature_file = os.path.join(path_to_dataset, dataset['feature_file'])
104
+ self.features = np.memmap(self.feature_file, dtype=dataset['feature_dtype'])
105
+ self.feature_frame_length = dataset['feature_frame_length']
106
+
107
+ assert len(self.features) % self.feature_frame_length == 0
108
+ self.features = self.features.reshape((-1, self.feature_frame_length))
109
+
110
+ # derive number of samples is dataset
111
+ self.dataset_length = (len(self.features) - self.frame_offset - self.feature_lookahead - 1) // self.frames_per_sample
112
+
113
+ # signals
114
+ self.frame_length = dataset['frame_length']
115
+ self.signal_frame_layout = dataset['signal_frame_layout']
116
+ self.input_signals = input_signals
117
+ self.target = target
118
+
119
+ # load signals
120
+ self.signal_file = os.path.join(path_to_dataset, dataset['signal_file'])
121
+ self.signals = np.memmap(self.signal_file, dtype=dataset['signal_dtype'])
122
+ self.signal_frame_length = dataset['signal_frame_length']
123
+ self.signals = self.signals.reshape((-1, self.signal_frame_length))
124
+ assert len(self.signals) == len(self.features) * self.frame_length
125
+
126
+ def __getitem__(self, index):
127
+ return self.getitem(index)
128
+
129
+ def getitem_v2(self, index):
130
+ sample = dict()
131
+
132
+ # extract features
133
+ frame_start = self.frame_offset + index * self.frames_per_sample - self.feature_history
134
+ frame_stop = self.frame_offset + (index + 1) * self.frames_per_sample + self.feature_lookahead
135
+
136
+ for feature in self.input_features:
137
+ feature_start, feature_stop = self.feature_frame_layout[feature]
138
+ sample[feature] = self.features[frame_start : frame_stop, feature_start : feature_stop]
139
+
140
+ # convert periods
141
+ if 'periods' in self.input_features:
142
+ sample['periods'] = (0.1 + 50 * sample['periods'] + 100).astype('int16')
143
+
144
+ signal_start = (self.frame_offset + index * self.frames_per_sample) * self.frame_length
145
+ signal_stop = (self.frame_offset + (index + 1) * self.frames_per_sample) * self.frame_length
146
+
147
+ # last_signal and signal are always expected to be there
148
+ sample['last_signal'] = self.signals[signal_start : signal_stop, self.signal_frame_layout['last_signal']]
149
+ sample['signal'] = self.signals[signal_start : signal_stop, self.signal_frame_layout['signal']]
150
+
151
+ # calculate prediction and error if lpc coefficients present and prediction not given
152
+ if 'lpc' in self.feature_frame_layout and 'prediction' not in self.signal_frame_layout:
153
+ # lpc coefficients with one frame lookahead
154
+ # frame positions (start one frame early for past excitation)
155
+ frame_start = self.frame_offset + self.frames_per_sample * index - 1
156
+ frame_stop = self.frame_offset + self.frames_per_sample * (index + 1)
157
+
158
+ # feature positions
159
+ lpc_start, lpc_stop = self.feature_frame_layout['lpc']
160
+ lpc_order = lpc_stop - lpc_start
161
+ lpcs = self.features[frame_start : frame_stop, lpc_start : lpc_stop]
162
+
163
+ # LPC weighting
164
+ lpc_order = lpc_stop - lpc_start
165
+ weights = np.array([self.lpc_gamma ** (i + 1) for i in range(lpc_order)])
166
+ lpcs = lpcs * weights
167
+
168
+ # signal position (lpc_order samples as history)
169
+ signal_start = frame_start * self.frame_length - lpc_order + 1
170
+ signal_stop = frame_stop * self.frame_length + 1
171
+ noisy_signal = self.signals[signal_start : signal_stop, self.signal_frame_layout['last_signal']]
172
+ clean_signal = self.signals[signal_start - 1 : signal_stop - 1, self.signal_frame_layout['signal']]
173
+
174
+ noisy_prediction, noisy_error = run_lpc(noisy_signal, lpcs, frame_length=self.frame_length)
175
+
176
+ # extract signals
177
+ offset = self.frame_length
178
+ sample['prediction'] = noisy_prediction[offset : offset + self.frame_length * self.frames_per_sample]
179
+ sample['last_error'] = noisy_error[offset - 1 : offset - 1 + self.frame_length * self.frames_per_sample]
180
+ # calculate error between real signal and noisy prediction
181
+
182
+
183
+ sample['error'] = sample['signal'] - sample['prediction']
184
+
185
+
186
+ # concatenate features
187
+ feature_keys = [key for key in self.input_features if not key.startswith("periods")]
188
+ features = torch.concat([torch.FloatTensor(sample[key]) for key in feature_keys], dim=-1)
189
+ signals = torch.cat([torch.LongTensor(lin2ulaw(sample[key])).unsqueeze(-1) for key in self.input_signals], dim=-1)
190
+ target = torch.LongTensor(lin2ulaw(sample[self.target]))
191
+ periods = torch.LongTensor(sample['periods'])
192
+
193
+ return {'features' : features, 'periods' : periods, 'signals' : signals, 'target' : target}
194
+
195
+ def getitem_v1(self, index):
196
+ sample = dict()
197
+
198
+ # extract features
199
+ frame_start = self.frame_offset + index * self.frames_per_sample - self.feature_history
200
+ frame_stop = self.frame_offset + (index + 1) * self.frames_per_sample + self.feature_lookahead
201
+
202
+ for feature in self.input_features:
203
+ feature_start, feature_stop = self.feature_frame_layout[feature]
204
+ sample[feature] = self.features[frame_start : frame_stop, feature_start : feature_stop]
205
+
206
+ # convert periods
207
+ if 'periods' in self.input_features:
208
+ sample['periods'] = (0.1 + 50 * sample['periods'] + 100).astype('int16')
209
+
210
+ signal_start = (self.frame_offset + index * self.frames_per_sample) * self.frame_length
211
+ signal_stop = (self.frame_offset + (index + 1) * self.frames_per_sample) * self.frame_length
212
+
213
+ # last_signal and signal are always expected to be there
214
+ for signal_name, index in self.signal_frame_layout.items():
215
+ sample[signal_name] = self.signals[signal_start : signal_stop, index]
216
+
217
+ # concatenate features
218
+ feature_keys = [key for key in self.input_features if not key.startswith("periods")]
219
+ features = torch.concat([torch.FloatTensor(sample[key]) for key in feature_keys], dim=-1)
220
+ signals = torch.cat([torch.LongTensor(sample[key]).unsqueeze(-1) for key in self.input_signals], dim=-1)
221
+ target = torch.LongTensor(sample[self.target])
222
+ periods = torch.LongTensor(sample['periods'])
223
+
224
+ return {'features' : features, 'periods' : periods, 'signals' : signals, 'target' : target}
225
+
226
+ def __len__(self):
227
+ return self.dataset_length
@@ -0,0 +1,141 @@
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 tqdm import tqdm
32
+ import sys
33
+
34
+ def train_one_epoch(model, criterion, optimizer, dataloader, device, scheduler, log_interval=10):
35
+
36
+ model.to(device)
37
+ model.train()
38
+
39
+ running_loss = 0
40
+ previous_running_loss = 0
41
+
42
+ # gru states
43
+ gru_a_state = torch.zeros(1, dataloader.batch_size, model.gru_a_units, device=device).to(device)
44
+ gru_b_state = torch.zeros(1, dataloader.batch_size, model.gru_b_units, device=device).to(device)
45
+ gru_states = [gru_a_state, gru_b_state]
46
+
47
+ with tqdm(dataloader, unit='batch', file=sys.stdout) as tepoch:
48
+
49
+ for i, batch in enumerate(tepoch):
50
+
51
+ # set gradients to zero
52
+ optimizer.zero_grad()
53
+
54
+ # zero out initial gru states
55
+ gru_a_state.zero_()
56
+ gru_b_state.zero_()
57
+
58
+ # push batch to device
59
+ for key in batch:
60
+ batch[key] = batch[key].to(device)
61
+
62
+ target = batch['target']
63
+
64
+ # calculate model output
65
+ output = model(batch['features'], batch['periods'], batch['signals'], gru_states)
66
+
67
+ # calculate loss
68
+ loss = criterion(output.permute(0, 2, 1), target)
69
+
70
+ # calculate gradients
71
+ loss.backward()
72
+
73
+ # update weights
74
+ optimizer.step()
75
+
76
+ # update learning rate
77
+ scheduler.step()
78
+
79
+ # call sparsifier
80
+ model.sparsify()
81
+
82
+ # update running loss
83
+ running_loss += float(loss.cpu())
84
+
85
+ # update status bar
86
+ if i % log_interval == 0:
87
+ tepoch.set_postfix(running_loss=f"{running_loss/(i + 1):8.7f}", current_loss=f"{(running_loss - previous_running_loss)/log_interval:8.7f}")
88
+ previous_running_loss = running_loss
89
+
90
+
91
+ running_loss /= len(dataloader)
92
+
93
+ return running_loss
94
+
95
+ def evaluate(model, criterion, dataloader, device, log_interval=10):
96
+
97
+ model.to(device)
98
+ model.eval()
99
+
100
+ running_loss = 0
101
+ previous_running_loss = 0
102
+
103
+ # gru states
104
+ gru_a_state = torch.zeros(1, dataloader.batch_size, model.gru_a_units, device=device).to(device)
105
+ gru_b_state = torch.zeros(1, dataloader.batch_size, model.gru_b_units, device=device).to(device)
106
+ gru_states = [gru_a_state, gru_b_state]
107
+
108
+ with torch.no_grad():
109
+ with tqdm(dataloader, unit='batch', file=sys.stdout) as tepoch:
110
+
111
+ for i, batch in enumerate(tepoch):
112
+
113
+
114
+ # zero out initial gru states
115
+ gru_a_state.zero_()
116
+ gru_b_state.zero_()
117
+
118
+ # push batch to device
119
+ for key in batch:
120
+ batch[key] = batch[key].to(device)
121
+
122
+ target = batch['target']
123
+
124
+ # calculate model output
125
+ output = model(batch['features'], batch['periods'], batch['signals'], gru_states)
126
+
127
+ # calculate loss
128
+ loss = criterion(output.permute(0, 2, 1), target)
129
+
130
+ # update running loss
131
+ running_loss += float(loss.cpu())
132
+
133
+ # update status bar
134
+ if i % log_interval == 0:
135
+ tepoch.set_postfix(running_loss=f"{running_loss/(i + 1):8.7f}", current_loss=f"{(running_loss - previous_running_loss)/log_interval:8.7f}")
136
+ previous_running_loss = running_loss
137
+
138
+
139
+ running_loss /= len(dataloader)
140
+
141
+ return running_loss