@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.
- package/opus/.gitattributes +10 -0
- package/opus/.gitlab-ci.yml +122 -0
- package/opus/AUTHORS +6 -0
- package/opus/CMakeLists.txt +755 -0
- package/opus/COPYING +44 -0
- package/opus/ChangeLog +0 -0
- package/opus/LICENSE_PLEASE_READ.txt +22 -0
- package/opus/Makefile.am +497 -0
- package/opus/Makefile.mips +169 -0
- package/opus/Makefile.unix +167 -0
- package/opus/NEWS +0 -0
- package/opus/README +189 -0
- package/opus/README.draft +54 -0
- package/opus/autogen.bat +13 -0
- package/opus/autogen.sh +16 -0
- package/opus/celt/_kiss_fft_guts.h +188 -0
- package/opus/celt/arch.h +390 -0
- package/opus/celt/arm/arm2gnu.pl +353 -0
- package/opus/celt/arm/arm_celt_map.c +171 -0
- package/opus/celt/arm/armcpu.c +291 -0
- package/opus/celt/arm/armcpu.h +90 -0
- package/opus/celt/arm/armopts.s.in +37 -0
- package/opus/celt/arm/celt_fft_ne10.c +173 -0
- package/opus/celt/arm/celt_mdct_ne10.c +258 -0
- package/opus/celt/arm/celt_neon_intr.c +272 -0
- package/opus/celt/arm/celt_pitch_xcorr_arm.s +551 -0
- package/opus/celt/arm/fft_arm.h +71 -0
- package/opus/celt/arm/fixed_arm64.h +35 -0
- package/opus/celt/arm/fixed_armv4.h +80 -0
- package/opus/celt/arm/fixed_armv5e.h +151 -0
- package/opus/celt/arm/kiss_fft_armv4.h +121 -0
- package/opus/celt/arm/kiss_fft_armv5e.h +118 -0
- package/opus/celt/arm/mdct_arm.h +59 -0
- package/opus/celt/arm/meson.build +12 -0
- package/opus/celt/arm/pitch_arm.h +160 -0
- package/opus/celt/arm/pitch_neon_intr.c +288 -0
- package/opus/celt/bands.c +1686 -0
- package/opus/celt/bands.h +123 -0
- package/opus/celt/celt.c +317 -0
- package/opus/celt/celt.h +255 -0
- package/opus/celt/celt_decoder.c +1616 -0
- package/opus/celt/celt_encoder.c +2854 -0
- package/opus/celt/celt_lpc.c +364 -0
- package/opus/celt/celt_lpc.h +66 -0
- package/opus/celt/cpu_support.h +72 -0
- package/opus/celt/cwrs.c +715 -0
- package/opus/celt/cwrs.h +48 -0
- package/opus/celt/dump_modes/dump_modes.c +400 -0
- package/opus/celt/dump_modes/dump_modes_arch.h +45 -0
- package/opus/celt/dump_modes/dump_modes_arm_ne10.c +152 -0
- package/opus/celt/ecintrin.h +91 -0
- package/opus/celt/entcode.c +153 -0
- package/opus/celt/entcode.h +152 -0
- package/opus/celt/entdec.c +266 -0
- package/opus/celt/entdec.h +110 -0
- package/opus/celt/entenc.c +305 -0
- package/opus/celt/entenc.h +119 -0
- package/opus/celt/fixed_c5x.h +79 -0
- package/opus/celt/fixed_c6x.h +70 -0
- package/opus/celt/fixed_debug.h +839 -0
- package/opus/celt/fixed_generic.h +201 -0
- package/opus/celt/float_cast.h +152 -0
- package/opus/celt/kiss_fft.c +648 -0
- package/opus/celt/kiss_fft.h +217 -0
- package/opus/celt/laplace.c +235 -0
- package/opus/celt/laplace.h +57 -0
- package/opus/celt/mathops.c +217 -0
- package/opus/celt/mathops.h +479 -0
- package/opus/celt/mdct.c +372 -0
- package/opus/celt/mdct.h +115 -0
- package/opus/celt/meson.build +64 -0
- package/opus/celt/mfrngcod.h +48 -0
- package/opus/celt/mips/celt_mipsr1.h +152 -0
- package/opus/celt/mips/fixed_generic_mipsr1.h +126 -0
- package/opus/celt/mips/kiss_fft_mipsr1.h +167 -0
- package/opus/celt/mips/mdct_mipsr1.h +288 -0
- package/opus/celt/mips/pitch_mipsr1.h +161 -0
- package/opus/celt/mips/vq_mipsr1.h +116 -0
- package/opus/celt/modes.c +450 -0
- package/opus/celt/modes.h +75 -0
- package/opus/celt/opus_custom_demo.c +451 -0
- package/opus/celt/os_support.h +99 -0
- package/opus/celt/pitch.c +555 -0
- package/opus/celt/pitch.h +203 -0
- package/opus/celt/quant_bands.c +562 -0
- package/opus/celt/quant_bands.h +66 -0
- package/opus/celt/rate.c +646 -0
- package/opus/celt/rate.h +101 -0
- package/opus/celt/stack_alloc.h +185 -0
- package/opus/celt/static_modes_fixed.h +1541 -0
- package/opus/celt/static_modes_fixed_arm_ne10.h +388 -0
- package/opus/celt/static_modes_float.h +888 -0
- package/opus/celt/static_modes_float_arm_ne10.h +404 -0
- package/opus/celt/tests/meson.build +19 -0
- package/opus/celt/tests/test_unit_cwrs32.c +162 -0
- package/opus/celt/tests/test_unit_dft.c +181 -0
- package/opus/celt/tests/test_unit_entropy.c +383 -0
- package/opus/celt/tests/test_unit_laplace.c +94 -0
- package/opus/celt/tests/test_unit_mathops.c +369 -0
- package/opus/celt/tests/test_unit_mdct.c +233 -0
- package/opus/celt/tests/test_unit_rotation.c +87 -0
- package/opus/celt/tests/test_unit_types.c +50 -0
- package/opus/celt/vq.c +442 -0
- package/opus/celt/vq.h +79 -0
- package/opus/celt/x86/celt_lpc_sse.h +67 -0
- package/opus/celt/x86/celt_lpc_sse4_1.c +96 -0
- package/opus/celt/x86/pitch_avx.c +101 -0
- package/opus/celt/x86/pitch_sse.c +185 -0
- package/opus/celt/x86/pitch_sse.h +216 -0
- package/opus/celt/x86/pitch_sse2.c +95 -0
- package/opus/celt/x86/pitch_sse4_1.c +240 -0
- package/opus/celt/x86/vq_sse.h +52 -0
- package/opus/celt/x86/vq_sse2.c +217 -0
- package/opus/celt/x86/x86_arch_macros.h +47 -0
- package/opus/celt/x86/x86_celt_map.c +187 -0
- package/opus/celt/x86/x86cpu.c +184 -0
- package/opus/celt/x86/x86cpu.h +112 -0
- package/opus/celt_headers.mk +54 -0
- package/opus/celt_sources.mk +55 -0
- package/opus/cmake/CFeatureCheck.cmake +39 -0
- package/opus/cmake/OpusBuildtype.cmake +27 -0
- package/opus/cmake/OpusConfig.cmake +118 -0
- package/opus/cmake/OpusConfig.cmake.in +20 -0
- package/opus/cmake/OpusFunctions.cmake +231 -0
- package/opus/cmake/OpusPackageVersion.cmake +70 -0
- package/opus/cmake/OpusSources.cmake +71 -0
- package/opus/cmake/README.md +132 -0
- package/opus/cmake/RunTest.cmake +61 -0
- package/opus/cmake/config.h.cmake.in +1 -0
- package/opus/cmake/cpu_info_by_asm.c +31 -0
- package/opus/cmake/cpu_info_by_c.c +9 -0
- package/opus/cmake/vla.c +7 -0
- package/opus/configure.ac +1091 -0
- package/opus/dnn/LPCNet.yml +24 -0
- package/opus/dnn/README +1 -0
- package/opus/dnn/README.md +126 -0
- package/opus/dnn/adaconvtest.c +449 -0
- package/opus/dnn/arm/arm_dnn_map.c +88 -0
- package/opus/dnn/arm/dnn_arm.h +104 -0
- package/opus/dnn/arm/nnet_dotprod.c +38 -0
- package/opus/dnn/arm/nnet_neon.c +38 -0
- package/opus/dnn/burg.c +246 -0
- package/opus/dnn/burg.h +41 -0
- package/opus/dnn/common.h +56 -0
- package/opus/dnn/datasets.txt +163 -0
- package/opus/dnn/download_model.bat +9 -0
- package/opus/dnn/download_model.sh +30 -0
- package/opus/dnn/dred_coding.c +44 -0
- package/opus/dnn/dred_coding.h +36 -0
- package/opus/dnn/dred_config.h +54 -0
- package/opus/dnn/dred_decoder.c +129 -0
- package/opus/dnn/dred_decoder.h +49 -0
- package/opus/dnn/dred_encoder.c +363 -0
- package/opus/dnn/dred_encoder.h +71 -0
- package/opus/dnn/dred_rdovae.h +42 -0
- package/opus/dnn/dred_rdovae_dec.c +139 -0
- package/opus/dnn/dred_rdovae_dec.h +53 -0
- package/opus/dnn/dred_rdovae_enc.c +110 -0
- package/opus/dnn/dred_rdovae_enc.h +52 -0
- package/opus/dnn/dump_data.c +238 -0
- package/opus/dnn/dump_lpcnet_tables.c +104 -0
- package/opus/dnn/fargan.c +225 -0
- package/opus/dnn/fargan.h +68 -0
- package/opus/dnn/fargan_demo.c +217 -0
- package/opus/dnn/freq.c +328 -0
- package/opus/dnn/freq.h +61 -0
- package/opus/dnn/fwgan.c +322 -0
- package/opus/dnn/fwgan.h +83 -0
- package/opus/dnn/kiss99.c +81 -0
- package/opus/dnn/kiss99.h +46 -0
- package/opus/dnn/lossgen.c +192 -0
- package/opus/dnn/lossgen.h +55 -0
- package/opus/dnn/lossgen_demo.c +22 -0
- package/opus/dnn/lpcnet.c +283 -0
- package/opus/dnn/lpcnet.h +183 -0
- package/opus/dnn/lpcnet_enc.c +230 -0
- package/opus/dnn/lpcnet_plc.c +211 -0
- package/opus/dnn/lpcnet_private.h +90 -0
- package/opus/dnn/lpcnet_tables.c +307 -0
- package/opus/dnn/meson.build +64 -0
- package/opus/dnn/nndsp.c +416 -0
- package/opus/dnn/nndsp.h +143 -0
- package/opus/dnn/nnet.c +149 -0
- package/opus/dnn/nnet.h +163 -0
- package/opus/dnn/nnet_arch.h +247 -0
- package/opus/dnn/nnet_default.c +35 -0
- package/opus/dnn/osce.c +1419 -0
- package/opus/dnn/osce.h +84 -0
- package/opus/dnn/osce_config.h +60 -0
- package/opus/dnn/osce_features.c +454 -0
- package/opus/dnn/osce_features.h +50 -0
- package/opus/dnn/osce_structs.h +125 -0
- package/opus/dnn/parse_lpcnet_weights.c +238 -0
- package/opus/dnn/pitchdnn.c +79 -0
- package/opus/dnn/pitchdnn.h +34 -0
- package/opus/dnn/tansig_table.h +50 -0
- package/opus/dnn/test_vec.c +128 -0
- package/opus/dnn/torch/dnntools/dnntools/__init__.py +2 -0
- package/opus/dnn/torch/dnntools/dnntools/quantization/__init__.py +1 -0
- package/opus/dnn/torch/dnntools/dnntools/quantization/softquant.py +113 -0
- package/opus/dnn/torch/dnntools/dnntools/relegance/__init__.py +2 -0
- package/opus/dnn/torch/dnntools/dnntools/relegance/meta_critic.py +85 -0
- package/opus/dnn/torch/dnntools/dnntools/relegance/relegance.py +449 -0
- package/opus/dnn/torch/dnntools/dnntools/sparsification/__init__.py +6 -0
- package/opus/dnn/torch/dnntools/dnntools/sparsification/base_sparsifier.py +58 -0
- package/opus/dnn/torch/dnntools/dnntools/sparsification/common.py +123 -0
- package/opus/dnn/torch/dnntools/dnntools/sparsification/conv1d_sparsifier.py +133 -0
- package/opus/dnn/torch/dnntools/dnntools/sparsification/conv_transpose1d_sparsifier.py +134 -0
- package/opus/dnn/torch/dnntools/dnntools/sparsification/gru_sparsifier.py +178 -0
- package/opus/dnn/torch/dnntools/dnntools/sparsification/linear_sparsifier.py +128 -0
- package/opus/dnn/torch/dnntools/dnntools/sparsification/utils.py +64 -0
- package/opus/dnn/torch/dnntools/requirements.txt +1 -0
- package/opus/dnn/torch/dnntools/setup.py +48 -0
- package/opus/dnn/torch/fargan/README.md +54 -0
- package/opus/dnn/torch/fargan/adv_train_fargan.py +277 -0
- package/opus/dnn/torch/fargan/dataset.py +61 -0
- package/opus/dnn/torch/fargan/dump_fargan_weights.py +112 -0
- package/opus/dnn/torch/fargan/fargan.py +322 -0
- package/opus/dnn/torch/fargan/filters.py +46 -0
- package/opus/dnn/torch/fargan/rc.py +29 -0
- package/opus/dnn/torch/fargan/stft_loss.py +186 -0
- package/opus/dnn/torch/fargan/test_fargan.py +128 -0
- package/opus/dnn/torch/fargan/train_fargan.py +168 -0
- package/opus/dnn/torch/fwgan/dump_model_weights.py +88 -0
- package/opus/dnn/torch/fwgan/inference.py +141 -0
- package/opus/dnn/torch/fwgan/models/__init__.py +7 -0
- package/opus/dnn/torch/fwgan/models/fwgan400.py +308 -0
- package/opus/dnn/torch/fwgan/models/fwgan500.py +260 -0
- package/opus/dnn/torch/lossgen/README.md +27 -0
- package/opus/dnn/torch/lossgen/export_lossgen.py +101 -0
- package/opus/dnn/torch/lossgen/lossgen.py +29 -0
- package/opus/dnn/torch/lossgen/process_data.sh +17 -0
- package/opus/dnn/torch/lossgen/test_lossgen.py +42 -0
- package/opus/dnn/torch/lossgen/train_lossgen.py +99 -0
- package/opus/dnn/torch/lpcnet/README.md +27 -0
- package/opus/dnn/torch/lpcnet/add_dataset_config.py +77 -0
- package/opus/dnn/torch/lpcnet/data/__init__.py +1 -0
- package/opus/dnn/torch/lpcnet/data/lpcnet_dataset.py +227 -0
- package/opus/dnn/torch/lpcnet/engine/lpcnet_engine.py +141 -0
- package/opus/dnn/torch/lpcnet/make_default_setup.py +56 -0
- package/opus/dnn/torch/lpcnet/make_test_config.py +78 -0
- package/opus/dnn/torch/lpcnet/models/__init__.py +8 -0
- package/opus/dnn/torch/lpcnet/models/lpcnet.py +303 -0
- package/opus/dnn/torch/lpcnet/models/multi_rate_lpcnet.py +437 -0
- package/opus/dnn/torch/lpcnet/print_lpcnet_complexity.py +64 -0
- package/opus/dnn/torch/lpcnet/scripts/collect_multi_run_results.py +190 -0
- package/opus/dnn/torch/lpcnet/scripts/loop_run.sh +52 -0
- package/opus/dnn/torch/lpcnet/scripts/make_animation.py +67 -0
- package/opus/dnn/torch/lpcnet/scripts/modify_dataset_target.py +17 -0
- package/opus/dnn/torch/lpcnet/scripts/multi_run.sh +17 -0
- package/opus/dnn/torch/lpcnet/scripts/run_inference_test.sh +22 -0
- package/opus/dnn/torch/lpcnet/scripts/update_checkpoints.py +54 -0
- package/opus/dnn/torch/lpcnet/scripts/update_output_folder.sh +22 -0
- package/opus/dnn/torch/lpcnet/scripts/update_setups.py +57 -0
- package/opus/dnn/torch/lpcnet/test_lpcnet.py +89 -0
- package/opus/dnn/torch/lpcnet/train_lpcnet.py +272 -0
- package/opus/dnn/torch/lpcnet/utils/__init__.py +4 -0
- package/opus/dnn/torch/lpcnet/utils/data.py +141 -0
- package/opus/dnn/torch/lpcnet/utils/endoscopy.py +234 -0
- package/opus/dnn/torch/lpcnet/utils/layers/__init__.py +3 -0
- package/opus/dnn/torch/lpcnet/utils/layers/dual_fc.py +44 -0
- package/opus/dnn/torch/lpcnet/utils/layers/pcm_embeddings.py +71 -0
- package/opus/dnn/torch/lpcnet/utils/layers/subconditioner.py +497 -0
- package/opus/dnn/torch/lpcnet/utils/misc.py +65 -0
- package/opus/dnn/torch/lpcnet/utils/pcm.py +35 -0
- package/opus/dnn/torch/lpcnet/utils/sample.py +44 -0
- package/opus/dnn/torch/lpcnet/utils/sparsification/__init__.py +2 -0
- package/opus/dnn/torch/lpcnet/utils/sparsification/common.py +121 -0
- package/opus/dnn/torch/lpcnet/utils/sparsification/gru_sparsifier.py +187 -0
- package/opus/dnn/torch/lpcnet/utils/templates.py +157 -0
- package/opus/dnn/torch/lpcnet/utils/ulaw.py +58 -0
- package/opus/dnn/torch/lpcnet/utils/wav.py +43 -0
- package/opus/dnn/torch/neural-pitch/README.md +18 -0
- package/opus/dnn/torch/neural-pitch/data_augmentation.py +149 -0
- package/opus/dnn/torch/neural-pitch/download_demand.sh +43 -0
- package/opus/dnn/torch/neural-pitch/evaluation.py +349 -0
- package/opus/dnn/torch/neural-pitch/experiments.py +38 -0
- package/opus/dnn/torch/neural-pitch/export_neuralpitch_weights.py +109 -0
- package/opus/dnn/torch/neural-pitch/models.py +178 -0
- package/opus/dnn/torch/neural-pitch/neural_pitch_update.py +179 -0
- package/opus/dnn/torch/neural-pitch/ptdb_process.sh +34 -0
- package/opus/dnn/torch/neural-pitch/run_crepe.py +72 -0
- package/opus/dnn/torch/neural-pitch/training.py +162 -0
- package/opus/dnn/torch/neural-pitch/utils.py +59 -0
- package/opus/dnn/torch/osce/README.md +66 -0
- package/opus/dnn/torch/osce/adv_train_model.py +462 -0
- package/opus/dnn/torch/osce/adv_train_vocoder.py +451 -0
- package/opus/dnn/torch/osce/create_testvectors.py +165 -0
- package/opus/dnn/torch/osce/data/__init__.py +2 -0
- package/opus/dnn/torch/osce/data/lpcnet_vocoding_dataset.py +225 -0
- package/opus/dnn/torch/osce/data/silk_conversion_set.py +132 -0
- package/opus/dnn/torch/osce/data/silk_enhancement_set.py +140 -0
- package/opus/dnn/torch/osce/engine/engine.py +103 -0
- package/opus/dnn/torch/osce/engine/vocoder_engine.py +101 -0
- package/opus/dnn/torch/osce/export_model_weights.py +174 -0
- package/opus/dnn/torch/osce/losses/stft_loss.py +277 -0
- package/opus/dnn/torch/osce/losses/td_lowpass.py +34 -0
- package/opus/dnn/torch/osce/make_default_setup.py +93 -0
- package/opus/dnn/torch/osce/models/__init__.py +42 -0
- package/opus/dnn/torch/osce/models/fd_discriminator.py +974 -0
- package/opus/dnn/torch/osce/models/lace.py +190 -0
- package/opus/dnn/torch/osce/models/lavoce.py +274 -0
- package/opus/dnn/torch/osce/models/lavoce_400.py +254 -0
- package/opus/dnn/torch/osce/models/lpcnet_feature_net.py +91 -0
- package/opus/dnn/torch/osce/models/nns_base.py +69 -0
- package/opus/dnn/torch/osce/models/no_lace.py +218 -0
- package/opus/dnn/torch/osce/models/scale_embedding.py +68 -0
- package/opus/dnn/torch/osce/models/shape_up_48.py +179 -0
- package/opus/dnn/torch/osce/models/silk_feature_net.py +86 -0
- package/opus/dnn/torch/osce/models/silk_feature_net_pl.py +127 -0
- package/opus/dnn/torch/osce/requirements.txt +9 -0
- package/opus/dnn/torch/osce/resources/training_files.txt +107716 -0
- package/opus/dnn/torch/osce/resources/validation_files.txt +26929 -0
- package/opus/dnn/torch/osce/scripts/concatenator.py +85 -0
- package/opus/dnn/torch/osce/silk_16_to_48.py +28 -0
- package/opus/dnn/torch/osce/stndrd/evaluation/commonvoice_clip_selection.py +123 -0
- package/opus/dnn/torch/osce/stndrd/evaluation/create_input_data.sh +25 -0
- package/opus/dnn/torch/osce/stndrd/evaluation/env.rc +7 -0
- package/opus/dnn/torch/osce/stndrd/evaluation/evaluate.py +113 -0
- package/opus/dnn/torch/osce/stndrd/evaluation/lace_loss_metric.py +330 -0
- package/opus/dnn/torch/osce/stndrd/evaluation/make_boxplots.py +116 -0
- package/opus/dnn/torch/osce/stndrd/evaluation/make_boxplots_moctest.py +109 -0
- package/opus/dnn/torch/osce/stndrd/evaluation/make_tables.py +124 -0
- package/opus/dnn/torch/osce/stndrd/evaluation/make_tables_moctest.py +121 -0
- package/opus/dnn/torch/osce/stndrd/evaluation/moc.py +182 -0
- package/opus/dnn/torch/osce/stndrd/evaluation/moc2.py +190 -0
- package/opus/dnn/torch/osce/stndrd/evaluation/process_dataset.sh +98 -0
- package/opus/dnn/torch/osce/stndrd/evaluation/run_nomad.py +138 -0
- package/opus/dnn/torch/osce/stndrd/evaluation/run_osce_test.py +196 -0
- package/opus/dnn/torch/osce/stndrd/presentation/endoscopy.py +205 -0
- package/opus/dnn/torch/osce/stndrd/presentation/lace_demo.ipynb +313 -0
- package/opus/dnn/torch/osce/stndrd/presentation/linear_prediction.ipynb +320 -0
- package/opus/dnn/torch/osce/stndrd/presentation/playback.py +25 -0
- package/opus/dnn/torch/osce/stndrd/presentation/postfilter.ipynb +275 -0
- package/opus/dnn/torch/osce/stndrd/presentation/spectrogram.ipynb +173 -0
- package/opus/dnn/torch/osce/test_model.py +96 -0
- package/opus/dnn/torch/osce/test_vocoder.py +103 -0
- package/opus/dnn/torch/osce/train_model.py +307 -0
- package/opus/dnn/torch/osce/train_vocoder.py +287 -0
- package/opus/dnn/torch/osce/utils/ada_conv.py +71 -0
- package/opus/dnn/torch/osce/utils/complexity.py +8 -0
- package/opus/dnn/torch/osce/utils/endoscopy.py +205 -0
- package/opus/dnn/torch/osce/utils/layers/fir.py +27 -0
- package/opus/dnn/torch/osce/utils/layers/limited_adaptive_comb1d.py +230 -0
- package/opus/dnn/torch/osce/utils/layers/limited_adaptive_conv1d.py +200 -0
- package/opus/dnn/torch/osce/utils/layers/noise_shaper.py +100 -0
- package/opus/dnn/torch/osce/utils/layers/pitch_auto_correlator.py +84 -0
- package/opus/dnn/torch/osce/utils/layers/silk_upsampler.py +167 -0
- package/opus/dnn/torch/osce/utils/layers/td_shaper.py +145 -0
- package/opus/dnn/torch/osce/utils/lpcnet_features.py +112 -0
- package/opus/dnn/torch/osce/utils/misc.py +95 -0
- package/opus/dnn/torch/osce/utils/moc.py +153 -0
- package/opus/dnn/torch/osce/utils/pitch.py +122 -0
- package/opus/dnn/torch/osce/utils/silk_features.py +144 -0
- package/opus/dnn/torch/osce/utils/softquant.py +110 -0
- package/opus/dnn/torch/osce/utils/spec.py +210 -0
- package/opus/dnn/torch/osce/utils/templates.py +347 -0
- package/opus/dnn/torch/plc/export_plc.py +100 -0
- package/opus/dnn/torch/plc/plc.py +144 -0
- package/opus/dnn/torch/plc/plc_dataset.py +60 -0
- package/opus/dnn/torch/plc/train_plc.py +145 -0
- package/opus/dnn/torch/rdovae/README.md +55 -0
- package/opus/dnn/torch/rdovae/download_datasets.sh +6 -0
- package/opus/dnn/torch/rdovae/export_rdovae_weights.py +365 -0
- package/opus/dnn/torch/rdovae/fec_encoder.py +212 -0
- package/opus/dnn/torch/rdovae/import_rdovae_weights.py +143 -0
- package/opus/dnn/torch/rdovae/packets/__init__.py +1 -0
- package/opus/dnn/torch/rdovae/packets/fec_packets.c +142 -0
- package/opus/dnn/torch/rdovae/packets/fec_packets.h +34 -0
- package/opus/dnn/torch/rdovae/packets/fec_packets.py +108 -0
- package/opus/dnn/torch/rdovae/process_speech.sh +7 -0
- package/opus/dnn/torch/rdovae/rdovae/__init__.py +2 -0
- package/opus/dnn/torch/rdovae/rdovae/dataset.py +67 -0
- package/opus/dnn/torch/rdovae/rdovae/rdovae.py +719 -0
- package/opus/dnn/torch/rdovae/requirements.txt +4 -0
- package/opus/dnn/torch/rdovae/train_rdovae.py +278 -0
- package/opus/dnn/torch/testsuite/README.md +46 -0
- package/opus/dnn/torch/testsuite/examples/lpcnet_c_example.yml +6 -0
- package/opus/dnn/torch/testsuite/examples/lpcnet_c_plc_example.yml +5 -0
- package/opus/dnn/torch/testsuite/examples/lpcnet_torch_example.yml +5 -0
- package/opus/dnn/torch/testsuite/requirements.txt +12 -0
- package/opus/dnn/torch/testsuite/run_test.py +375 -0
- package/opus/dnn/torch/testsuite/utils/__init__.py +0 -0
- package/opus/dnn/torch/testsuite/utils/files.py +54 -0
- package/opus/dnn/torch/testsuite/utils/pesq.py +43 -0
- package/opus/dnn/torch/testsuite/utils/pitch.py +61 -0
- package/opus/dnn/torch/weight-exchange/README.md +21 -0
- package/opus/dnn/torch/weight-exchange/requirements.txt +1 -0
- package/opus/dnn/torch/weight-exchange/setup.py +48 -0
- package/opus/dnn/torch/weight-exchange/wexchange/__init__.py +30 -0
- package/opus/dnn/torch/weight-exchange/wexchange/c_export/__init__.py +31 -0
- package/opus/dnn/torch/weight-exchange/wexchange/c_export/c_writer.py +181 -0
- package/opus/dnn/torch/weight-exchange/wexchange/c_export/common.py +386 -0
- package/opus/dnn/torch/weight-exchange/wexchange/tf/__init__.py +5 -0
- package/opus/dnn/torch/weight-exchange/wexchange/tf/tf.py +188 -0
- package/opus/dnn/torch/weight-exchange/wexchange/torch/__init__.py +37 -0
- package/opus/dnn/torch/weight-exchange/wexchange/torch/torch.py +433 -0
- package/opus/dnn/training_tf2/dataloader.py +49 -0
- package/opus/dnn/training_tf2/decode_rdovae.py +111 -0
- package/opus/dnn/training_tf2/diffembed.py +49 -0
- package/opus/dnn/training_tf2/dump_lpcnet.py +388 -0
- package/opus/dnn/training_tf2/dump_plc.py +296 -0
- package/opus/dnn/training_tf2/dump_rdovae.py +306 -0
- package/opus/dnn/training_tf2/encode_rdovae.py +125 -0
- package/opus/dnn/training_tf2/fec_encoder.py +256 -0
- package/opus/dnn/training_tf2/fec_packets.c +142 -0
- package/opus/dnn/training_tf2/fec_packets.h +34 -0
- package/opus/dnn/training_tf2/fec_packets.py +108 -0
- package/opus/dnn/training_tf2/keraslayerdump.py +189 -0
- package/opus/dnn/training_tf2/lossfuncs.py +99 -0
- package/opus/dnn/training_tf2/lpcnet.py +339 -0
- package/opus/dnn/training_tf2/lpcnet_plc.py +101 -0
- package/opus/dnn/training_tf2/mdense.py +95 -0
- package/opus/dnn/training_tf2/pade.py +70 -0
- package/opus/dnn/training_tf2/parameters.py +29 -0
- package/opus/dnn/training_tf2/plc_loader.py +73 -0
- package/opus/dnn/training_tf2/rdovae.py +372 -0
- package/opus/dnn/training_tf2/rdovae_exchange.py +138 -0
- package/opus/dnn/training_tf2/rdovae_import.py +123 -0
- package/opus/dnn/training_tf2/test_lpcnet.py +120 -0
- package/opus/dnn/training_tf2/test_plc.py +92 -0
- package/opus/dnn/training_tf2/tf_funcs.py +70 -0
- package/opus/dnn/training_tf2/train_lpcnet.py +214 -0
- package/opus/dnn/training_tf2/train_plc.py +197 -0
- package/opus/dnn/training_tf2/train_rdovae.py +151 -0
- package/opus/dnn/training_tf2/ulaw.py +19 -0
- package/opus/dnn/training_tf2/uniform_noise.py +78 -0
- package/opus/dnn/vec.h +389 -0
- package/opus/dnn/vec_avx.h +884 -0
- package/opus/dnn/vec_neon.h +473 -0
- package/opus/dnn/write_lpcnet_weights.c +97 -0
- package/opus/dnn/x86/dnn_x86.h +121 -0
- package/opus/dnn/x86/nnet_avx2.c +40 -0
- package/opus/dnn/x86/nnet_sse2.c +40 -0
- package/opus/dnn/x86/nnet_sse4_1.c +40 -0
- package/opus/dnn/x86/x86_dnn_map.c +83 -0
- package/opus/doc/Doxyfile.in +340 -0
- package/opus/doc/Makefile.am +45 -0
- package/opus/doc/build_draft.sh +113 -0
- package/opus/doc/build_isobmff.sh +50 -0
- package/opus/doc/build_oggdraft.sh +52 -0
- package/opus/doc/customdoxygen.css +1011 -0
- package/opus/doc/draft-ietf-codec-oggopus.xml +1873 -0
- package/opus/doc/draft-ietf-codec-opus-update.xml +513 -0
- package/opus/doc/draft-ietf-codec-opus.xml +8276 -0
- package/opus/doc/draft-ietf-payload-rtp-opus.xml +960 -0
- package/opus/doc/footer.html +32 -0
- package/opus/doc/header.html +61 -0
- package/opus/doc/meson.build +33 -0
- package/opus/doc/opus_in_isobmff.css +60 -0
- package/opus/doc/opus_in_isobmff.html +692 -0
- package/opus/doc/opus_logo.svg +157 -0
- package/opus/doc/opus_update.patch +244 -0
- package/opus/doc/release.txt +43 -0
- package/opus/doc/trivial_example.c +171 -0
- package/opus/include/meson.build +13 -0
- package/opus/include/opus.h +1172 -0
- package/opus/include/opus_custom.h +381 -0
- package/opus/include/opus_defines.h +830 -0
- package/opus/include/opus_multistream.h +736 -0
- package/opus/include/opus_projection.h +643 -0
- package/opus/include/opus_types.h +166 -0
- package/opus/lpcnet_headers.mk +44 -0
- package/opus/lpcnet_sources.mk +44 -0
- package/opus/m4/as-gcc-inline-assembly.m4 +98 -0
- package/opus/m4/ax_add_fortify_source.m4 +53 -0
- package/opus/m4/opus-intrinsics.m4 +29 -0
- package/opus/meson/README.md +88 -0
- package/opus/meson/get-version.py +86 -0
- package/opus/meson/read-sources-list.py +28 -0
- package/opus/meson.build +745 -0
- package/opus/meson_options.txt +27 -0
- package/opus/opus-uninstalled.pc.in +12 -0
- package/opus/opus.m4 +117 -0
- package/opus/opus.pc.in +16 -0
- package/opus/opus_headers.mk +8 -0
- package/opus/opus_sources.mk +17 -0
- package/opus/releases.sha2 +85 -0
- package/opus/scripts/dump_rnn.py +57 -0
- package/opus/scripts/local_build.py +220 -0
- package/opus/scripts/rnn_train.py +67 -0
- package/opus/scripts/shrink_model.sh +7 -0
- package/opus/silk/A2NLSF.c +267 -0
- package/opus/silk/API.h +156 -0
- package/opus/silk/CNG.c +188 -0
- package/opus/silk/HP_variable_cutoff.c +77 -0
- package/opus/silk/Inlines.h +188 -0
- package/opus/silk/LPC_analysis_filter.c +111 -0
- package/opus/silk/LPC_fit.c +82 -0
- package/opus/silk/LPC_inv_pred_gain.c +141 -0
- package/opus/silk/LP_variable_cutoff.c +135 -0
- package/opus/silk/MacroCount.h +710 -0
- package/opus/silk/MacroDebug.h +945 -0
- package/opus/silk/NLSF2A.c +141 -0
- package/opus/silk/NLSF_VQ.c +76 -0
- package/opus/silk/NLSF_VQ_weights_laroia.c +80 -0
- package/opus/silk/NLSF_decode.c +93 -0
- package/opus/silk/NLSF_del_dec_quant.c +215 -0
- package/opus/silk/NLSF_encode.c +124 -0
- package/opus/silk/NLSF_stabilize.c +142 -0
- package/opus/silk/NLSF_unpack.c +55 -0
- package/opus/silk/NSQ.c +437 -0
- package/opus/silk/NSQ.h +101 -0
- package/opus/silk/NSQ_del_dec.c +733 -0
- package/opus/silk/PLC.c +493 -0
- package/opus/silk/PLC.h +65 -0
- package/opus/silk/SigProc_FIX.h +643 -0
- package/opus/silk/VAD.c +360 -0
- package/opus/silk/VQ_WMat_EC.c +131 -0
- package/opus/silk/ana_filt_bank_1.c +74 -0
- package/opus/silk/arm/LPC_inv_pred_gain_arm.h +57 -0
- package/opus/silk/arm/LPC_inv_pred_gain_neon_intr.c +288 -0
- package/opus/silk/arm/NSQ_del_dec_arm.h +100 -0
- package/opus/silk/arm/NSQ_del_dec_neon_intr.c +1138 -0
- package/opus/silk/arm/NSQ_neon.c +112 -0
- package/opus/silk/arm/NSQ_neon.h +114 -0
- package/opus/silk/arm/SigProc_FIX_armv4.h +47 -0
- package/opus/silk/arm/SigProc_FIX_armv5e.h +61 -0
- package/opus/silk/arm/arm_silk_map.c +128 -0
- package/opus/silk/arm/biquad_alt_arm.h +68 -0
- package/opus/silk/arm/biquad_alt_neon_intr.c +156 -0
- package/opus/silk/arm/macros_arm64.h +39 -0
- package/opus/silk/arm/macros_armv4.h +110 -0
- package/opus/silk/arm/macros_armv5e.h +220 -0
- package/opus/silk/biquad_alt.c +121 -0
- package/opus/silk/bwexpander.c +51 -0
- package/opus/silk/bwexpander_32.c +51 -0
- package/opus/silk/check_control_input.c +106 -0
- package/opus/silk/code_signs.c +115 -0
- package/opus/silk/control.h +161 -0
- package/opus/silk/control_SNR.c +113 -0
- package/opus/silk/control_audio_bandwidth.c +132 -0
- package/opus/silk/control_codec.c +423 -0
- package/opus/silk/debug.c +174 -0
- package/opus/silk/debug.h +267 -0
- package/opus/silk/dec_API.c +465 -0
- package/opus/silk/decode_core.c +243 -0
- package/opus/silk/decode_frame.c +169 -0
- package/opus/silk/decode_indices.c +151 -0
- package/opus/silk/decode_parameters.c +115 -0
- package/opus/silk/decode_pitch.c +77 -0
- package/opus/silk/decode_pulses.c +115 -0
- package/opus/silk/decoder_set_fs.c +108 -0
- package/opus/silk/define.h +235 -0
- package/opus/silk/enc_API.c +593 -0
- package/opus/silk/encode_indices.c +181 -0
- package/opus/silk/encode_pulses.c +206 -0
- package/opus/silk/errors.h +98 -0
- package/opus/silk/fixed/LTP_analysis_filter_FIX.c +90 -0
- package/opus/silk/fixed/LTP_scale_ctrl_FIX.c +58 -0
- package/opus/silk/fixed/apply_sine_window_FIX.c +101 -0
- package/opus/silk/fixed/arm/warped_autocorrelation_FIX_arm.h +68 -0
- package/opus/silk/fixed/arm/warped_autocorrelation_FIX_neon_intr.c +265 -0
- package/opus/silk/fixed/autocorr_FIX.c +48 -0
- package/opus/silk/fixed/burg_modified_FIX.c +280 -0
- package/opus/silk/fixed/corrMatrix_FIX.c +150 -0
- package/opus/silk/fixed/encode_frame_FIX.c +444 -0
- package/opus/silk/fixed/find_LPC_FIX.c +151 -0
- package/opus/silk/fixed/find_LTP_FIX.c +99 -0
- package/opus/silk/fixed/find_pitch_lags_FIX.c +143 -0
- package/opus/silk/fixed/find_pred_coefs_FIX.c +146 -0
- package/opus/silk/fixed/k2a_FIX.c +54 -0
- package/opus/silk/fixed/k2a_Q16_FIX.c +54 -0
- package/opus/silk/fixed/main_FIX.h +244 -0
- package/opus/silk/fixed/mips/noise_shape_analysis_FIX_mipsr1.h +336 -0
- package/opus/silk/fixed/mips/prefilter_FIX_mipsr1.h +184 -0
- package/opus/silk/fixed/mips/warped_autocorrelation_FIX_mipsr1.h +165 -0
- package/opus/silk/fixed/noise_shape_analysis_FIX.c +407 -0
- package/opus/silk/fixed/pitch_analysis_core_FIX.c +721 -0
- package/opus/silk/fixed/process_gains_FIX.c +117 -0
- package/opus/silk/fixed/regularize_correlations_FIX.c +47 -0
- package/opus/silk/fixed/residual_energy16_FIX.c +103 -0
- package/opus/silk/fixed/residual_energy_FIX.c +98 -0
- package/opus/silk/fixed/schur64_FIX.c +93 -0
- package/opus/silk/fixed/schur_FIX.c +107 -0
- package/opus/silk/fixed/structs_FIX.h +116 -0
- package/opus/silk/fixed/vector_ops_FIX.c +102 -0
- package/opus/silk/fixed/warped_autocorrelation_FIX.c +92 -0
- package/opus/silk/fixed/x86/burg_modified_FIX_sse4_1.c +400 -0
- package/opus/silk/fixed/x86/vector_ops_FIX_sse4_1.c +93 -0
- package/opus/silk/float/LPC_analysis_filter_FLP.c +249 -0
- package/opus/silk/float/LPC_inv_pred_gain_FLP.c +73 -0
- package/opus/silk/float/LTP_analysis_filter_FLP.c +75 -0
- package/opus/silk/float/LTP_scale_ctrl_FLP.c +58 -0
- package/opus/silk/float/SigProc_FLP.h +205 -0
- package/opus/silk/float/apply_sine_window_FLP.c +81 -0
- package/opus/silk/float/autocorrelation_FLP.c +53 -0
- package/opus/silk/float/burg_modified_FLP.c +187 -0
- package/opus/silk/float/bwexpander_FLP.c +49 -0
- package/opus/silk/float/corrMatrix_FLP.c +95 -0
- package/opus/silk/float/encode_frame_FLP.c +432 -0
- package/opus/silk/float/energy_FLP.c +59 -0
- package/opus/silk/float/find_LPC_FLP.c +105 -0
- package/opus/silk/float/find_LTP_FLP.c +65 -0
- package/opus/silk/float/find_pitch_lags_FLP.c +132 -0
- package/opus/silk/float/find_pred_coefs_FLP.c +117 -0
- package/opus/silk/float/inner_product_FLP.c +59 -0
- package/opus/silk/float/k2a_FLP.c +54 -0
- package/opus/silk/float/main_FLP.h +290 -0
- package/opus/silk/float/noise_shape_analysis_FLP.c +350 -0
- package/opus/silk/float/pitch_analysis_core_FLP.c +630 -0
- package/opus/silk/float/process_gains_FLP.c +103 -0
- package/opus/silk/float/regularize_correlations_FLP.c +48 -0
- package/opus/silk/float/residual_energy_FLP.c +117 -0
- package/opus/silk/float/scale_copy_vector_FLP.c +57 -0
- package/opus/silk/float/scale_vector_FLP.c +56 -0
- package/opus/silk/float/schur_FLP.c +70 -0
- package/opus/silk/float/sort_FLP.c +83 -0
- package/opus/silk/float/structs_FLP.h +112 -0
- package/opus/silk/float/warped_autocorrelation_FLP.c +75 -0
- package/opus/silk/float/wrappers_FLP.c +209 -0
- package/opus/silk/float/x86/inner_product_FLP_avx2.c +85 -0
- package/opus/silk/gain_quant.c +142 -0
- package/opus/silk/init_decoder.c +84 -0
- package/opus/silk/init_encoder.c +68 -0
- package/opus/silk/inner_prod_aligned.c +47 -0
- package/opus/silk/interpolate.c +51 -0
- package/opus/silk/lin2log.c +46 -0
- package/opus/silk/log2lin.c +58 -0
- package/opus/silk/macros.h +151 -0
- package/opus/silk/main.h +486 -0
- package/opus/silk/meson.build +69 -0
- package/opus/silk/mips/NSQ_del_dec_mipsr1.h +410 -0
- package/opus/silk/mips/macros_mipsr1.h +92 -0
- package/opus/silk/mips/sigproc_fix_mipsr1.h +60 -0
- package/opus/silk/pitch_est_defines.h +88 -0
- package/opus/silk/pitch_est_tables.c +99 -0
- package/opus/silk/process_NLSFs.c +107 -0
- package/opus/silk/quant_LTP_gains.c +132 -0
- package/opus/silk/resampler.c +215 -0
- package/opus/silk/resampler_down2.c +74 -0
- package/opus/silk/resampler_down2_3.c +103 -0
- package/opus/silk/resampler_private.h +88 -0
- package/opus/silk/resampler_private_AR2.c +55 -0
- package/opus/silk/resampler_private_IIR_FIR.c +107 -0
- package/opus/silk/resampler_private_down_FIR.c +194 -0
- package/opus/silk/resampler_private_up2_HQ.c +113 -0
- package/opus/silk/resampler_rom.c +96 -0
- package/opus/silk/resampler_rom.h +68 -0
- package/opus/silk/resampler_structs.h +60 -0
- package/opus/silk/shell_coder.c +151 -0
- package/opus/silk/sigm_Q15.c +76 -0
- package/opus/silk/sort.c +154 -0
- package/opus/silk/stereo_LR_to_MS.c +229 -0
- package/opus/silk/stereo_MS_to_LR.c +85 -0
- package/opus/silk/stereo_decode_pred.c +73 -0
- package/opus/silk/stereo_encode_pred.c +62 -0
- package/opus/silk/stereo_find_predictor.c +79 -0
- package/opus/silk/stereo_quant_pred.c +73 -0
- package/opus/silk/structs.h +357 -0
- package/opus/silk/sum_sqr_shift.c +83 -0
- package/opus/silk/table_LSF_cos.c +70 -0
- package/opus/silk/tables.h +114 -0
- package/opus/silk/tables_LTP.c +294 -0
- package/opus/silk/tables_NLSF_CB_NB_MB.c +195 -0
- package/opus/silk/tables_NLSF_CB_WB.c +234 -0
- package/opus/silk/tables_gain.c +63 -0
- package/opus/silk/tables_other.c +124 -0
- package/opus/silk/tables_pitch_lag.c +69 -0
- package/opus/silk/tables_pulses_per_block.c +264 -0
- package/opus/silk/tests/meson.build +8 -0
- package/opus/silk/tests/test_unit_LPC_inv_pred_gain.c +130 -0
- package/opus/silk/tuning_parameters.h +155 -0
- package/opus/silk/typedef.h +81 -0
- package/opus/silk/x86/NSQ_del_dec_avx2.c +1075 -0
- package/opus/silk/x86/NSQ_del_dec_sse4_1.c +915 -0
- package/opus/silk/x86/NSQ_sse4_1.c +772 -0
- package/opus/silk/x86/SigProc_FIX_sse.h +99 -0
- package/opus/silk/x86/VAD_sse4_1.c +289 -0
- package/opus/silk/x86/VQ_WMat_EC_sse4_1.c +173 -0
- package/opus/silk/x86/main_sse.h +299 -0
- package/opus/silk/x86/x86_silk_map.c +179 -0
- package/opus/silk_headers.mk +44 -0
- package/opus/silk_sources.mk +164 -0
- package/opus/src/analysis.c +979 -0
- package/opus/src/analysis.h +103 -0
- package/opus/src/extensions.c +663 -0
- package/opus/src/mapping_matrix.c +993 -0
- package/opus/src/mapping_matrix.h +165 -0
- package/opus/src/meson.build +45 -0
- package/opus/src/mlp.c +132 -0
- package/opus/src/mlp.h +60 -0
- package/opus/src/mlp_data.c +672 -0
- package/opus/src/opus.c +362 -0
- package/opus/src/opus_compare.c +382 -0
- package/opus/src/opus_decoder.c +1579 -0
- package/opus/src/opus_demo.c +1194 -0
- package/opus/src/opus_encoder.c +3180 -0
- package/opus/src/opus_multistream.c +92 -0
- package/opus/src/opus_multistream_decoder.c +563 -0
- package/opus/src/opus_multistream_encoder.c +1321 -0
- package/opus/src/opus_private.h +263 -0
- package/opus/src/opus_projection_decoder.c +283 -0
- package/opus/src/opus_projection_encoder.c +522 -0
- package/opus/src/repacketizer.c +469 -0
- package/opus/src/repacketizer_demo.c +247 -0
- package/opus/src/tansig_table.h +45 -0
- package/opus/tar_list.txt +28 -0
- package/opus/tests/meson.build +39 -0
- package/opus/tests/opus_build_test.sh +29 -0
- package/opus/tests/opus_decode_fuzzer.c +124 -0
- package/opus/tests/opus_decode_fuzzer.options +2 -0
- package/opus/tests/opus_encode_regressions.c +1034 -0
- package/opus/tests/random_config.sh +126 -0
- package/opus/tests/run_vectors.sh +143 -0
- package/opus/tests/test_opus_api.c +1904 -0
- package/opus/tests/test_opus_common.h +86 -0
- package/opus/tests/test_opus_custom.c +694 -0
- package/opus/tests/test_opus_decode.c +481 -0
- package/opus/tests/test_opus_dred.c +107 -0
- package/opus/tests/test_opus_encode.c +738 -0
- package/opus/tests/test_opus_extensions.c +750 -0
- package/opus/tests/test_opus_padding.c +94 -0
- package/opus/tests/test_opus_projection.c +384 -0
- package/opus/training/rnn_dump.py +66 -0
- package/opus/training/rnn_train.py +177 -0
- package/opus/training/txt2hdf5.py +12 -0
- package/opus/update_version +65 -0
- package/package.json +2 -2
- package/src/build-ffmpeg-msys.sh +8 -2
|
@@ -0,0 +1,230 @@
|
|
|
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
|
+
import torch.nn.functional as F
|
|
33
|
+
|
|
34
|
+
from utils.endoscopy import write_data
|
|
35
|
+
from utils.softquant import soft_quant
|
|
36
|
+
|
|
37
|
+
class LimitedAdaptiveComb1d(nn.Module):
|
|
38
|
+
COUNTER = 1
|
|
39
|
+
|
|
40
|
+
def __init__(self,
|
|
41
|
+
kernel_size,
|
|
42
|
+
feature_dim,
|
|
43
|
+
frame_size=160,
|
|
44
|
+
overlap_size=40,
|
|
45
|
+
padding=None,
|
|
46
|
+
max_lag=256,
|
|
47
|
+
name=None,
|
|
48
|
+
gain_limit_db=10,
|
|
49
|
+
global_gain_limits_db=[-6, 6],
|
|
50
|
+
norm_p=2,
|
|
51
|
+
softquant=False,
|
|
52
|
+
apply_weight_norm=False,
|
|
53
|
+
**kwargs):
|
|
54
|
+
"""
|
|
55
|
+
|
|
56
|
+
Parameters:
|
|
57
|
+
-----------
|
|
58
|
+
|
|
59
|
+
feature_dim : int
|
|
60
|
+
dimension of features from which kernels, biases and gains are computed
|
|
61
|
+
|
|
62
|
+
frame_size : int, optional
|
|
63
|
+
frame size, defaults to 160
|
|
64
|
+
|
|
65
|
+
overlap_size : int, optional
|
|
66
|
+
overlap size for filter cross-fade. Cross-fade is done on the first overlap_size samples of every frame, defaults to 40
|
|
67
|
+
|
|
68
|
+
use_bias : bool, optional
|
|
69
|
+
if true, biases will be added to output channels. Defaults to True
|
|
70
|
+
|
|
71
|
+
padding : List[int, int], optional
|
|
72
|
+
left and right padding. Defaults to [(kernel_size - 1) // 2, kernel_size - 1 - (kernel_size - 1) // 2]
|
|
73
|
+
|
|
74
|
+
max_lag : int, optional
|
|
75
|
+
maximal pitch lag, defaults to 256
|
|
76
|
+
|
|
77
|
+
have_a0 : bool, optional
|
|
78
|
+
If true, the filter coefficient a0 will be learned as a positive gain (requires in_channels == out_channels). Otherwise, a0 is set to 0. Defaults to False
|
|
79
|
+
|
|
80
|
+
name: str or None, optional
|
|
81
|
+
specifies a name attribute for the module. If None the name is auto generated as comb_1d_COUNT, where COUNT is an instance counter for LimitedAdaptiveComb1d
|
|
82
|
+
|
|
83
|
+
"""
|
|
84
|
+
|
|
85
|
+
super(LimitedAdaptiveComb1d, self).__init__()
|
|
86
|
+
|
|
87
|
+
self.in_channels = 1
|
|
88
|
+
self.out_channels = 1
|
|
89
|
+
self.feature_dim = feature_dim
|
|
90
|
+
self.kernel_size = kernel_size
|
|
91
|
+
self.frame_size = frame_size
|
|
92
|
+
self.overlap_size = overlap_size
|
|
93
|
+
self.max_lag = max_lag
|
|
94
|
+
self.limit_db = gain_limit_db
|
|
95
|
+
self.norm_p = norm_p
|
|
96
|
+
|
|
97
|
+
if name is None:
|
|
98
|
+
self.name = "limited_adaptive_comb1d_" + str(LimitedAdaptiveComb1d.COUNTER)
|
|
99
|
+
LimitedAdaptiveComb1d.COUNTER += 1
|
|
100
|
+
else:
|
|
101
|
+
self.name = name
|
|
102
|
+
|
|
103
|
+
norm = torch.nn.utils.weight_norm if apply_weight_norm else lambda x, name=None: x
|
|
104
|
+
|
|
105
|
+
# network for generating convolution weights
|
|
106
|
+
self.conv_kernel = norm(nn.Linear(feature_dim, kernel_size))
|
|
107
|
+
|
|
108
|
+
if softquant:
|
|
109
|
+
self.conv_kernel = soft_quant(self.conv_kernel)
|
|
110
|
+
|
|
111
|
+
|
|
112
|
+
# comb filter gain
|
|
113
|
+
self.filter_gain = norm(nn.Linear(feature_dim, 1))
|
|
114
|
+
self.log_gain_limit = gain_limit_db * 0.11512925464970229
|
|
115
|
+
with torch.no_grad():
|
|
116
|
+
self.filter_gain.bias[:] = max(0.1, 4 + self.log_gain_limit)
|
|
117
|
+
|
|
118
|
+
self.global_filter_gain = norm(nn.Linear(feature_dim, 1))
|
|
119
|
+
log_min, log_max = global_gain_limits_db[0] * 0.11512925464970229, global_gain_limits_db[1] * 0.11512925464970229
|
|
120
|
+
self.filter_gain_a = (log_max - log_min) / 2
|
|
121
|
+
self.filter_gain_b = (log_max + log_min) / 2
|
|
122
|
+
|
|
123
|
+
if type(padding) == type(None):
|
|
124
|
+
self.padding = [kernel_size // 2, kernel_size - 1 - kernel_size // 2]
|
|
125
|
+
else:
|
|
126
|
+
self.padding = padding
|
|
127
|
+
|
|
128
|
+
self.overlap_win = nn.Parameter(.5 + .5 * torch.cos((torch.arange(self.overlap_size) + 0.5) * torch.pi / overlap_size), requires_grad=False)
|
|
129
|
+
|
|
130
|
+
def forward(self, x, features, lags, debug=False):
|
|
131
|
+
""" adaptive 1d convolution
|
|
132
|
+
|
|
133
|
+
|
|
134
|
+
Parameters:
|
|
135
|
+
-----------
|
|
136
|
+
x : torch.tensor
|
|
137
|
+
input signal of shape (batch_size, in_channels, num_samples)
|
|
138
|
+
|
|
139
|
+
feathres : torch.tensor
|
|
140
|
+
frame-wise features of shape (batch_size, num_frames, feature_dim)
|
|
141
|
+
|
|
142
|
+
lags: torch.LongTensor
|
|
143
|
+
frame-wise lags for comb-filtering
|
|
144
|
+
|
|
145
|
+
"""
|
|
146
|
+
|
|
147
|
+
batch_size = x.size(0)
|
|
148
|
+
num_frames = features.size(1)
|
|
149
|
+
num_samples = x.size(2)
|
|
150
|
+
frame_size = self.frame_size
|
|
151
|
+
overlap_size = self.overlap_size
|
|
152
|
+
kernel_size = self.kernel_size
|
|
153
|
+
win1 = torch.flip(self.overlap_win, [0])
|
|
154
|
+
win2 = self.overlap_win
|
|
155
|
+
|
|
156
|
+
if num_samples // self.frame_size != num_frames:
|
|
157
|
+
raise ValueError('non matching sizes in AdaptiveConv1d.forward')
|
|
158
|
+
|
|
159
|
+
conv_kernels = self.conv_kernel(features).reshape((batch_size, num_frames, self.out_channels, self.in_channels, self.kernel_size))
|
|
160
|
+
conv_kernels = conv_kernels / (1e-6 + torch.norm(conv_kernels, p=self.norm_p, dim=-1, keepdim=True))
|
|
161
|
+
|
|
162
|
+
conv_gains = torch.exp(- torch.relu(self.filter_gain(features).permute(0, 2, 1)) + self.log_gain_limit)
|
|
163
|
+
# calculate gains
|
|
164
|
+
global_conv_gains = torch.exp(self.filter_gain_a * torch.tanh(self.global_filter_gain(features).permute(0, 2, 1)) + self.filter_gain_b)
|
|
165
|
+
|
|
166
|
+
if debug and batch_size == 1:
|
|
167
|
+
key = self.name + "_gains"
|
|
168
|
+
write_data(key, conv_gains.detach().squeeze().cpu().numpy(), 16000 // self.frame_size)
|
|
169
|
+
key = self.name + "_kernels"
|
|
170
|
+
write_data(key, conv_kernels.detach().squeeze().cpu().numpy(), 16000 // self.frame_size)
|
|
171
|
+
key = self.name + "_lags"
|
|
172
|
+
write_data(key, lags.detach().squeeze().cpu().numpy(), 16000 // self.frame_size)
|
|
173
|
+
key = self.name + "_global_conv_gains"
|
|
174
|
+
write_data(key, global_conv_gains.detach().squeeze().cpu().numpy(), 16000 // self.frame_size)
|
|
175
|
+
|
|
176
|
+
|
|
177
|
+
# frame-wise convolution with overlap-add
|
|
178
|
+
output_frames = []
|
|
179
|
+
overlap_mem = torch.zeros((batch_size, self.out_channels, self.overlap_size), device=x.device)
|
|
180
|
+
x = F.pad(x, self.padding)
|
|
181
|
+
x = F.pad(x, [self.max_lag, self.overlap_size])
|
|
182
|
+
|
|
183
|
+
idx = torch.arange(frame_size + kernel_size - 1 + overlap_size).to(x.device).view(1, 1, -1)
|
|
184
|
+
idx = torch.repeat_interleave(idx, batch_size, 0)
|
|
185
|
+
idx = torch.repeat_interleave(idx, self.in_channels, 1)
|
|
186
|
+
|
|
187
|
+
|
|
188
|
+
for i in range(num_frames):
|
|
189
|
+
|
|
190
|
+
cidx = idx + i * frame_size + self.max_lag - lags[..., i].view(batch_size, 1, 1)
|
|
191
|
+
xx = torch.gather(x, -1, cidx).reshape((1, batch_size * self.in_channels, -1))
|
|
192
|
+
|
|
193
|
+
new_chunk = torch.conv1d(xx, conv_kernels[:, i, ...].reshape((batch_size * self.out_channels, self.in_channels, self.kernel_size)), groups=batch_size).reshape(batch_size, self.out_channels, -1)
|
|
194
|
+
|
|
195
|
+
offset = self.max_lag + self.padding[0]
|
|
196
|
+
new_chunk = global_conv_gains[:, :, i : i + 1] * (new_chunk * conv_gains[:, :, i : i + 1] + x[..., offset + i * frame_size : offset + (i + 1) * frame_size + overlap_size])
|
|
197
|
+
|
|
198
|
+
# overlapping part
|
|
199
|
+
output_frames.append(new_chunk[:, :, : overlap_size] * win1 + overlap_mem * win2)
|
|
200
|
+
|
|
201
|
+
# non-overlapping part
|
|
202
|
+
output_frames.append(new_chunk[:, :, overlap_size : frame_size])
|
|
203
|
+
|
|
204
|
+
# mem for next frame
|
|
205
|
+
overlap_mem = new_chunk[:, :, frame_size :]
|
|
206
|
+
|
|
207
|
+
# concatenate chunks
|
|
208
|
+
output = torch.cat(output_frames, dim=-1)
|
|
209
|
+
|
|
210
|
+
return output
|
|
211
|
+
|
|
212
|
+
def flop_count(self, rate):
|
|
213
|
+
frame_rate = rate / self.frame_size
|
|
214
|
+
overlap = self.overlap_size
|
|
215
|
+
overhead = overlap / self.frame_size
|
|
216
|
+
|
|
217
|
+
count = 0
|
|
218
|
+
|
|
219
|
+
# kernel computation and filtering
|
|
220
|
+
count += 2 * (frame_rate * self.feature_dim * self.kernel_size)
|
|
221
|
+
count += 2 * (self.in_channels * self.out_channels * self.kernel_size * (1 + overhead) * rate)
|
|
222
|
+
count += 2 * (frame_rate * self.feature_dim * self.out_channels) + rate * (1 + overhead) * self.out_channels
|
|
223
|
+
|
|
224
|
+
# a0 computation
|
|
225
|
+
count += 2 * (frame_rate * self.feature_dim * self.out_channels) + rate * (1 + overhead) * self.out_channels
|
|
226
|
+
|
|
227
|
+
# windowing
|
|
228
|
+
count += overlap * frame_rate * 3 * self.out_channels
|
|
229
|
+
|
|
230
|
+
return count
|
|
@@ -0,0 +1,200 @@
|
|
|
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
|
+
import torch.nn.functional as F
|
|
33
|
+
|
|
34
|
+
from utils.endoscopy import write_data
|
|
35
|
+
|
|
36
|
+
from utils.ada_conv import adaconv_kernel
|
|
37
|
+
from utils.softquant import soft_quant
|
|
38
|
+
|
|
39
|
+
class LimitedAdaptiveConv1d(nn.Module):
|
|
40
|
+
COUNTER = 1
|
|
41
|
+
|
|
42
|
+
def __init__(self,
|
|
43
|
+
in_channels,
|
|
44
|
+
out_channels,
|
|
45
|
+
kernel_size,
|
|
46
|
+
feature_dim,
|
|
47
|
+
frame_size=160,
|
|
48
|
+
overlap_size=40,
|
|
49
|
+
padding=None,
|
|
50
|
+
name=None,
|
|
51
|
+
gain_limits_db=[-6, 6],
|
|
52
|
+
shape_gain_db=0,
|
|
53
|
+
norm_p=2,
|
|
54
|
+
softquant=False,
|
|
55
|
+
apply_weight_norm=False,
|
|
56
|
+
**kwargs):
|
|
57
|
+
"""
|
|
58
|
+
|
|
59
|
+
Parameters:
|
|
60
|
+
-----------
|
|
61
|
+
|
|
62
|
+
in_channels : int
|
|
63
|
+
number of input channels
|
|
64
|
+
|
|
65
|
+
out_channels : int
|
|
66
|
+
number of output channels
|
|
67
|
+
|
|
68
|
+
feature_dim : int
|
|
69
|
+
dimension of features from which kernels, biases and gains are computed
|
|
70
|
+
|
|
71
|
+
frame_size : int
|
|
72
|
+
frame size
|
|
73
|
+
|
|
74
|
+
overlap_size : int
|
|
75
|
+
overlap size for filter cross-fade. Cross-fade is done on the first overlap_size samples of every frame
|
|
76
|
+
|
|
77
|
+
use_bias : bool
|
|
78
|
+
if true, biases will be added to output channels
|
|
79
|
+
|
|
80
|
+
|
|
81
|
+
padding : List[int, int]
|
|
82
|
+
|
|
83
|
+
"""
|
|
84
|
+
|
|
85
|
+
super(LimitedAdaptiveConv1d, self).__init__()
|
|
86
|
+
|
|
87
|
+
|
|
88
|
+
|
|
89
|
+
self.in_channels = in_channels
|
|
90
|
+
self.out_channels = out_channels
|
|
91
|
+
self.feature_dim = feature_dim
|
|
92
|
+
self.kernel_size = kernel_size
|
|
93
|
+
self.frame_size = frame_size
|
|
94
|
+
self.overlap_size = overlap_size
|
|
95
|
+
self.gain_limits_db = gain_limits_db
|
|
96
|
+
self.shape_gain_db = shape_gain_db
|
|
97
|
+
self.norm_p = norm_p
|
|
98
|
+
|
|
99
|
+
if name is None:
|
|
100
|
+
self.name = "limited_adaptive_conv1d_" + str(LimitedAdaptiveConv1d.COUNTER)
|
|
101
|
+
LimitedAdaptiveConv1d.COUNTER += 1
|
|
102
|
+
else:
|
|
103
|
+
self.name = name
|
|
104
|
+
|
|
105
|
+
norm = torch.nn.utils.weight_norm if apply_weight_norm else lambda x, name=None: x
|
|
106
|
+
|
|
107
|
+
# network for generating convolution weights
|
|
108
|
+
self.conv_kernel = norm(nn.Linear(feature_dim, in_channels * out_channels * kernel_size))
|
|
109
|
+
if softquant:
|
|
110
|
+
self.conv_kernel = soft_quant(self.conv_kernel)
|
|
111
|
+
|
|
112
|
+
self.shape_gain = min(1, 10**(shape_gain_db / 20))
|
|
113
|
+
|
|
114
|
+
self.filter_gain = norm(nn.Linear(feature_dim, out_channels))
|
|
115
|
+
log_min, log_max = gain_limits_db[0] * 0.11512925464970229, gain_limits_db[1] * 0.11512925464970229
|
|
116
|
+
self.filter_gain_a = (log_max - log_min) / 2
|
|
117
|
+
self.filter_gain_b = (log_max + log_min) / 2
|
|
118
|
+
|
|
119
|
+
if type(padding) == type(None):
|
|
120
|
+
self.padding = [kernel_size // 2, kernel_size - 1 - kernel_size // 2]
|
|
121
|
+
else:
|
|
122
|
+
self.padding = padding
|
|
123
|
+
|
|
124
|
+
self.overlap_win = nn.Parameter(.5 + .5 * torch.cos((torch.arange(self.overlap_size) + 0.5) * torch.pi / overlap_size), requires_grad=False)
|
|
125
|
+
|
|
126
|
+
|
|
127
|
+
def flop_count(self, rate):
|
|
128
|
+
frame_rate = rate / self.frame_size
|
|
129
|
+
overlap = self.overlap_size
|
|
130
|
+
overhead = overlap / self.frame_size
|
|
131
|
+
|
|
132
|
+
count = 0
|
|
133
|
+
|
|
134
|
+
# kernel computation and filtering
|
|
135
|
+
count += 2 * (frame_rate * self.feature_dim * self.kernel_size)
|
|
136
|
+
count += 2 * (self.in_channels * self.out_channels * self.kernel_size * (1 + overhead) * rate)
|
|
137
|
+
|
|
138
|
+
# gain computation
|
|
139
|
+
|
|
140
|
+
count += 2 * (frame_rate * self.feature_dim * self.out_channels) + rate * (1 + overhead) * self.out_channels
|
|
141
|
+
|
|
142
|
+
# windowing
|
|
143
|
+
count += 3 * overlap * frame_rate * self.out_channels
|
|
144
|
+
|
|
145
|
+
return count
|
|
146
|
+
|
|
147
|
+
def forward(self, x, features, debug=False):
|
|
148
|
+
""" adaptive 1d convolution
|
|
149
|
+
|
|
150
|
+
|
|
151
|
+
Parameters:
|
|
152
|
+
-----------
|
|
153
|
+
x : torch.tensor
|
|
154
|
+
input signal of shape (batch_size, in_channels, num_samples)
|
|
155
|
+
|
|
156
|
+
feathres : torch.tensor
|
|
157
|
+
frame-wise features of shape (batch_size, num_frames, feature_dim)
|
|
158
|
+
|
|
159
|
+
"""
|
|
160
|
+
|
|
161
|
+
batch_size = x.size(0)
|
|
162
|
+
num_frames = features.size(1)
|
|
163
|
+
num_samples = x.size(2)
|
|
164
|
+
frame_size = self.frame_size
|
|
165
|
+
overlap_size = self.overlap_size
|
|
166
|
+
kernel_size = self.kernel_size
|
|
167
|
+
win1 = torch.flip(self.overlap_win, [0])
|
|
168
|
+
win2 = self.overlap_win
|
|
169
|
+
|
|
170
|
+
if num_samples // self.frame_size != num_frames:
|
|
171
|
+
raise ValueError('non matching sizes in AdaptiveConv1d.forward')
|
|
172
|
+
|
|
173
|
+
conv_kernels = self.conv_kernel(features).reshape((batch_size, num_frames, self.out_channels, self.in_channels, self.kernel_size))
|
|
174
|
+
|
|
175
|
+
# normalize kernels (TODO: switch to L1 and normalize over kernel and input channel dimension)
|
|
176
|
+
conv_kernels = conv_kernels / (1e-6 + torch.norm(conv_kernels, p=self.norm_p, dim=[-2, -1], keepdim=True))
|
|
177
|
+
|
|
178
|
+
# limit shape
|
|
179
|
+
id_kernels = torch.zeros_like(conv_kernels)
|
|
180
|
+
id_kernels[..., self.padding[1]] = 1
|
|
181
|
+
|
|
182
|
+
conv_kernels = self.shape_gain * conv_kernels + (1 - self.shape_gain) * id_kernels
|
|
183
|
+
|
|
184
|
+
# calculate gains
|
|
185
|
+
conv_gains = torch.exp(self.filter_gain_a * torch.tanh(self.filter_gain(features)) + self.filter_gain_b)
|
|
186
|
+
if debug and batch_size == 1:
|
|
187
|
+
key = self.name + "_gains"
|
|
188
|
+
write_data(key, conv_gains.permute(0, 2, 1).detach().squeeze().cpu().numpy(), 16000 // self.frame_size)
|
|
189
|
+
key = self.name + "_kernels"
|
|
190
|
+
write_data(key, conv_kernels.detach().squeeze().cpu().numpy(), 16000 // self.frame_size)
|
|
191
|
+
|
|
192
|
+
|
|
193
|
+
conv_kernels = conv_kernels * conv_gains.view(batch_size, num_frames, self.out_channels, 1, 1)
|
|
194
|
+
|
|
195
|
+
conv_kernels = conv_kernels.permute(0, 2, 3, 1, 4)
|
|
196
|
+
|
|
197
|
+
output = adaconv_kernel(x, conv_kernels, win1, fft_size=256)
|
|
198
|
+
|
|
199
|
+
|
|
200
|
+
return output
|
|
@@ -0,0 +1,100 @@
|
|
|
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
|
+
import torch.nn.functional as F
|
|
33
|
+
|
|
34
|
+
from utils.complexity import _conv1d_flop_count
|
|
35
|
+
|
|
36
|
+
class NoiseShaper(nn.Module):
|
|
37
|
+
|
|
38
|
+
def __init__(self,
|
|
39
|
+
feature_dim,
|
|
40
|
+
frame_size=160
|
|
41
|
+
):
|
|
42
|
+
"""
|
|
43
|
+
|
|
44
|
+
Parameters:
|
|
45
|
+
-----------
|
|
46
|
+
|
|
47
|
+
feature_dim : int
|
|
48
|
+
dimension of input features
|
|
49
|
+
|
|
50
|
+
frame_size : int
|
|
51
|
+
frame size
|
|
52
|
+
|
|
53
|
+
"""
|
|
54
|
+
|
|
55
|
+
super().__init__()
|
|
56
|
+
|
|
57
|
+
self.feature_dim = feature_dim
|
|
58
|
+
self.frame_size = frame_size
|
|
59
|
+
|
|
60
|
+
# feature transform
|
|
61
|
+
self.feature_alpha1 = nn.Conv1d(self.feature_dim, frame_size, 2)
|
|
62
|
+
self.feature_alpha2 = nn.Conv1d(frame_size, frame_size, 2)
|
|
63
|
+
|
|
64
|
+
|
|
65
|
+
def flop_count(self, rate):
|
|
66
|
+
|
|
67
|
+
frame_rate = rate / self.frame_size
|
|
68
|
+
|
|
69
|
+
shape_flops = sum([_conv1d_flop_count(x, frame_rate) for x in (self.feature_alpha1, self.feature_alpha2)]) + 11 * frame_rate * self.frame_size
|
|
70
|
+
|
|
71
|
+
return shape_flops
|
|
72
|
+
|
|
73
|
+
|
|
74
|
+
def forward(self, features):
|
|
75
|
+
""" creates temporally shaped noise
|
|
76
|
+
|
|
77
|
+
|
|
78
|
+
Parameters:
|
|
79
|
+
-----------
|
|
80
|
+
features : torch.tensor
|
|
81
|
+
frame-wise features of shape (batch_size, num_frames, feature_dim)
|
|
82
|
+
|
|
83
|
+
"""
|
|
84
|
+
|
|
85
|
+
batch_size = features.size(0)
|
|
86
|
+
num_frames = features.size(1)
|
|
87
|
+
frame_size = self.frame_size
|
|
88
|
+
num_samples = num_frames * frame_size
|
|
89
|
+
|
|
90
|
+
# feature path
|
|
91
|
+
f = F.pad(features.permute(0, 2, 1), [1, 0])
|
|
92
|
+
alpha = F.leaky_relu(self.feature_alpha1(f), 0.2)
|
|
93
|
+
alpha = torch.exp(self.feature_alpha2(F.pad(alpha, [1, 0])))
|
|
94
|
+
alpha = alpha.permute(0, 2, 1)
|
|
95
|
+
|
|
96
|
+
# signal generation
|
|
97
|
+
y = torch.randn((batch_size, num_frames, frame_size), dtype=features.dtype, device=features.device)
|
|
98
|
+
y = alpha * y
|
|
99
|
+
|
|
100
|
+
return y.reshape(batch_size, 1, num_samples)
|
|
@@ -0,0 +1,84 @@
|
|
|
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
|
+
import torch.nn.functional as F
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
class PitchAutoCorrelator(nn.Module):
|
|
36
|
+
def __init__(self,
|
|
37
|
+
frame_size=80,
|
|
38
|
+
pitch_min=32,
|
|
39
|
+
pitch_max=300,
|
|
40
|
+
radius=2):
|
|
41
|
+
|
|
42
|
+
super().__init__()
|
|
43
|
+
|
|
44
|
+
self.frame_size = frame_size
|
|
45
|
+
self.pitch_min = pitch_min
|
|
46
|
+
self.pitch_max = pitch_max
|
|
47
|
+
self.radius = radius
|
|
48
|
+
|
|
49
|
+
|
|
50
|
+
def forward(self, x, periods):
|
|
51
|
+
# x of shape (batch_size, channels, num_samples)
|
|
52
|
+
# periods of shape (batch_size, num_frames)
|
|
53
|
+
|
|
54
|
+
num_frames = periods.size(1)
|
|
55
|
+
batch_size = periods.size(0)
|
|
56
|
+
num_samples = self.frame_size * num_frames
|
|
57
|
+
channels = x.size(1)
|
|
58
|
+
|
|
59
|
+
assert num_samples == x.size(-1)
|
|
60
|
+
|
|
61
|
+
range = torch.arange(-self.radius, self.radius + 1, device=x.device)
|
|
62
|
+
idx = torch.arange(self.frame_size * num_frames, device=x.device)
|
|
63
|
+
p_up = torch.repeat_interleave(periods, self.frame_size, 1)
|
|
64
|
+
lookup = idx + self.pitch_max - p_up
|
|
65
|
+
lookup = lookup.unsqueeze(-1) + range
|
|
66
|
+
lookup = lookup.unsqueeze(1)
|
|
67
|
+
|
|
68
|
+
# padding
|
|
69
|
+
x_pad = F.pad(x, [self.pitch_max, 0])
|
|
70
|
+
x_ext = torch.repeat_interleave(x_pad.unsqueeze(-1), 2 * self.radius + 1, -1)
|
|
71
|
+
|
|
72
|
+
# framing
|
|
73
|
+
x_select = torch.gather(x_ext, 2, lookup)
|
|
74
|
+
x_frames = x_pad[..., self.pitch_max : ].reshape(batch_size, channels, num_frames, self.frame_size, 1)
|
|
75
|
+
lag_frames = x_select.reshape(batch_size, 1, num_frames, self.frame_size, -1)
|
|
76
|
+
|
|
77
|
+
# calculate auto-correlation
|
|
78
|
+
dotp = torch.sum(x_frames * lag_frames, dim=-2)
|
|
79
|
+
frame_nrg = torch.sum(x_frames * x_frames, dim=-2)
|
|
80
|
+
lag_frame_nrg = torch.sum(lag_frames * lag_frames, dim=-2)
|
|
81
|
+
|
|
82
|
+
acorr = dotp / torch.sqrt(frame_nrg * lag_frame_nrg + 1e-9)
|
|
83
|
+
|
|
84
|
+
return acorr
|