nkululeko 0.81.2__tar.gz → 0.81.3__tar.gz
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.
- {nkululeko-0.81.2 → nkululeko-0.81.3}/CHANGELOG.md +4 -0
- {nkululeko-0.81.2/nkululeko.egg-info → nkululeko-0.81.3}/PKG-INFO +7 -1
- {nkululeko-0.81.2 → nkululeko-0.81.3}/nkululeko/constants.py +1 -1
- {nkululeko-0.81.2 → nkululeko-0.81.3}/nkululeko/feat_extract/feats_agender_agender.py +5 -4
- {nkululeko-0.81.2 → nkululeko-0.81.3}/nkululeko/feat_extract/feinberg_praat.py +114 -116
- {nkululeko-0.81.2 → nkululeko-0.81.3}/nkululeko/models/model.py +1 -1
- {nkululeko-0.81.2 → nkululeko-0.81.3}/nkululeko/models/model_cnn.py +1 -1
- {nkululeko-0.81.2 → nkululeko-0.81.3}/nkululeko/models/model_mlp.py +1 -1
- {nkululeko-0.81.2 → nkululeko-0.81.3}/nkululeko/models/model_mlp_regression.py +13 -9
- {nkululeko-0.81.2/nkululeko → nkululeko-0.81.3/nkululeko/reporting}/reporter.py +86 -51
- {nkululeko-0.81.2/nkululeko → nkululeko-0.81.3/nkululeko/reporting}/result.py +5 -0
- {nkululeko-0.81.2 → nkululeko-0.81.3}/nkululeko/runmanager.py +1 -1
- {nkululeko-0.81.2 → nkululeko-0.81.3/nkululeko.egg-info}/PKG-INFO +7 -1
- {nkululeko-0.81.2 → nkululeko-0.81.3}/nkululeko.egg-info/SOURCES.txt +2 -2
- {nkululeko-0.81.2 → nkululeko-0.81.3}/nkululeko.egg-info/requires.txt +2 -0
- {nkululeko-0.81.2 → nkululeko-0.81.3}/setup.cfg +2 -0
- {nkululeko-0.81.2 → nkululeko-0.81.3}/LICENSE +0 -0
- {nkululeko-0.81.2 → nkululeko-0.81.3}/README.md +0 -0
- {nkululeko-0.81.2 → nkululeko-0.81.3}/data/aesdd/process_database.py +0 -0
- {nkululeko-0.81.2 → nkululeko-0.81.3}/data/androids/process_database.py +0 -0
- {nkululeko-0.81.2 → nkululeko-0.81.3}/data/androids_orig/process_database.py +0 -0
- {nkululeko-0.81.2 → nkululeko-0.81.3}/data/androids_test/process_database.py +0 -0
- {nkululeko-0.81.2 → nkululeko-0.81.3}/data/ased/process_database.py +0 -0
- {nkululeko-0.81.2 → nkululeko-0.81.3}/data/asvp-esd/process_database.py +0 -0
- {nkululeko-0.81.2 → nkululeko-0.81.3}/data/baved/process_database.py +0 -0
- {nkululeko-0.81.2 → nkululeko-0.81.3}/data/cafe/process_database.py +0 -0
- {nkululeko-0.81.2 → nkululeko-0.81.3}/data/clac/process_database.py +0 -0
- {nkululeko-0.81.2 → nkululeko-0.81.3}/data/cmu-mosei/process_database.py +0 -0
- {nkululeko-0.81.2 → nkululeko-0.81.3}/data/crema-d/process_database.py +0 -0
- {nkululeko-0.81.2 → nkululeko-0.81.3}/data/demos/process_database.py +0 -0
- {nkululeko-0.81.2 → nkululeko-0.81.3}/data/ekorpus/process_database.py +0 -0
- {nkululeko-0.81.2 → nkululeko-0.81.3}/data/emns/process_database.py +0 -0
- {nkululeko-0.81.2 → nkululeko-0.81.3}/data/emofilm/convert_to_16k.py +0 -0
- {nkululeko-0.81.2 → nkululeko-0.81.3}/data/emofilm/process_database.py +0 -0
- {nkululeko-0.81.2 → nkululeko-0.81.3}/data/emorynlp/process_database.py +0 -0
- {nkululeko-0.81.2 → nkululeko-0.81.3}/data/emov-db/process_database.py +0 -0
- {nkululeko-0.81.2 → nkululeko-0.81.3}/data/emovo/process_database.py +0 -0
- {nkululeko-0.81.2 → nkululeko-0.81.3}/data/emozionalmente/create.py +0 -0
- {nkululeko-0.81.2 → nkululeko-0.81.3}/data/enterface/process_database.py +0 -0
- {nkululeko-0.81.2 → nkululeko-0.81.3}/data/esd/process_database.py +0 -0
- {nkululeko-0.81.2 → nkululeko-0.81.3}/data/gerparas/process_database.py +0 -0
- {nkululeko-0.81.2 → nkululeko-0.81.3}/data/iemocap/process_database.py +0 -0
- {nkululeko-0.81.2 → nkululeko-0.81.3}/data/jl/process_database.py +0 -0
- {nkululeko-0.81.2 → nkululeko-0.81.3}/data/jtes/process_database.py +0 -0
- {nkululeko-0.81.2 → nkululeko-0.81.3}/data/meld/process_database.py +0 -0
- {nkululeko-0.81.2 → nkululeko-0.81.3}/data/mesd/process_database.py +0 -0
- {nkululeko-0.81.2 → nkululeko-0.81.3}/data/mess/process_database.py +0 -0
- {nkululeko-0.81.2 → nkululeko-0.81.3}/data/mlendsnd/process_database.py +0 -0
- {nkululeko-0.81.2 → nkululeko-0.81.3}/data/msp-improv/process_database2.py +0 -0
- {nkululeko-0.81.2 → nkululeko-0.81.3}/data/msp-podcast/process_database.py +0 -0
- {nkululeko-0.81.2 → nkululeko-0.81.3}/data/oreau2/process_database.py +0 -0
- {nkululeko-0.81.2 → nkululeko-0.81.3}/data/portuguese/process_database.py +0 -0
- {nkululeko-0.81.2 → nkululeko-0.81.3}/data/ravdess/process_database.py +0 -0
- {nkululeko-0.81.2 → nkululeko-0.81.3}/data/ravdess/process_database_speaker.py +0 -0
- {nkululeko-0.81.2 → nkululeko-0.81.3}/data/savee/process_database.py +0 -0
- {nkululeko-0.81.2 → nkululeko-0.81.3}/data/shemo/process_database.py +0 -0
- {nkululeko-0.81.2 → nkululeko-0.81.3}/data/subesco/process_database.py +0 -0
- {nkululeko-0.81.2 → nkululeko-0.81.3}/data/tess/process_database.py +0 -0
- {nkululeko-0.81.2 → nkululeko-0.81.3}/data/thorsten-emotional/process_database.py +0 -0
- {nkululeko-0.81.2 → nkululeko-0.81.3}/data/urdu/process_database.py +0 -0
- {nkululeko-0.81.2 → nkululeko-0.81.3}/data/vivae/process_database.py +0 -0
- {nkululeko-0.81.2 → nkululeko-0.81.3}/docs/source/conf.py +0 -0
- {nkululeko-0.81.2 → nkululeko-0.81.3}/meta/demos/demo_best_model.py +0 -0
- {nkululeko-0.81.2 → nkululeko-0.81.3}/meta/demos/multiple_exeriments/do_experiments.py +0 -0
- {nkululeko-0.81.2 → nkululeko-0.81.3}/meta/demos/multiple_exeriments/parse_nkulu.py +0 -0
- {nkululeko-0.81.2 → nkululeko-0.81.3}/meta/demos/my_experiment.py +0 -0
- {nkululeko-0.81.2 → nkululeko-0.81.3}/meta/demos/my_experiment_local.py +0 -0
- {nkululeko-0.81.2 → nkululeko-0.81.3}/meta/demos/plot_faster_anim.py +0 -0
- {nkululeko-0.81.2 → nkululeko-0.81.3}/nkululeko/__init__.py +0 -0
- {nkululeko-0.81.2 → nkululeko-0.81.3}/nkululeko/aug_train.py +0 -0
- {nkululeko-0.81.2 → nkululeko-0.81.3}/nkululeko/augment.py +0 -0
- {nkululeko-0.81.2 → nkululeko-0.81.3}/nkululeko/augmenting/__init__.py +0 -0
- {nkululeko-0.81.2 → nkululeko-0.81.3}/nkululeko/augmenting/augmenter.py +0 -0
- {nkululeko-0.81.2 → nkululeko-0.81.3}/nkululeko/augmenting/randomsplicer.py +0 -0
- {nkululeko-0.81.2 → nkululeko-0.81.3}/nkululeko/augmenting/randomsplicing.py +0 -0
- {nkululeko-0.81.2 → nkululeko-0.81.3}/nkululeko/augmenting/resampler.py +0 -0
- {nkululeko-0.81.2 → nkululeko-0.81.3}/nkululeko/autopredict/__init__.py +0 -0
- {nkululeko-0.81.2 → nkululeko-0.81.3}/nkululeko/autopredict/ap_age.py +0 -0
- {nkululeko-0.81.2 → nkululeko-0.81.3}/nkululeko/autopredict/ap_arousal.py +0 -0
- {nkululeko-0.81.2 → nkululeko-0.81.3}/nkululeko/autopredict/ap_dominance.py +0 -0
- {nkululeko-0.81.2 → nkululeko-0.81.3}/nkululeko/autopredict/ap_gender.py +0 -0
- {nkululeko-0.81.2 → nkululeko-0.81.3}/nkululeko/autopredict/ap_mos.py +0 -0
- {nkululeko-0.81.2 → nkululeko-0.81.3}/nkululeko/autopredict/ap_pesq.py +0 -0
- {nkululeko-0.81.2 → nkululeko-0.81.3}/nkululeko/autopredict/ap_sdr.py +0 -0
- {nkululeko-0.81.2 → nkululeko-0.81.3}/nkululeko/autopredict/ap_snr.py +0 -0
- {nkululeko-0.81.2 → nkululeko-0.81.3}/nkululeko/autopredict/ap_stoi.py +0 -0
- {nkululeko-0.81.2 → nkululeko-0.81.3}/nkululeko/autopredict/ap_valence.py +0 -0
- {nkululeko-0.81.2 → nkululeko-0.81.3}/nkululeko/autopredict/estimate_snr.py +0 -0
- {nkululeko-0.81.2 → nkululeko-0.81.3}/nkululeko/cacheddataset.py +0 -0
- {nkululeko-0.81.2 → nkululeko-0.81.3}/nkululeko/data/__init__.py +0 -0
- {nkululeko-0.81.2 → nkululeko-0.81.3}/nkululeko/data/dataset.py +0 -0
- {nkululeko-0.81.2 → nkululeko-0.81.3}/nkululeko/data/dataset_csv.py +0 -0
- {nkululeko-0.81.2 → nkululeko-0.81.3}/nkululeko/demo.py +0 -0
- {nkululeko-0.81.2 → nkululeko-0.81.3}/nkululeko/demo_feats.py +0 -0
- {nkululeko-0.81.2 → nkululeko-0.81.3}/nkululeko/demo_predictor.py +0 -0
- {nkululeko-0.81.2 → nkululeko-0.81.3}/nkululeko/experiment.py +0 -0
- {nkululeko-0.81.2 → nkululeko-0.81.3}/nkululeko/explore.py +0 -0
- {nkululeko-0.81.2 → nkululeko-0.81.3}/nkululeko/export.py +0 -0
- {nkululeko-0.81.2 → nkululeko-0.81.3}/nkululeko/feat_extract/__init__.py +0 -0
- {nkululeko-0.81.2 → nkululeko-0.81.3}/nkululeko/feat_extract/feats_agender.py +0 -0
- {nkululeko-0.81.2 → nkululeko-0.81.3}/nkululeko/feat_extract/feats_analyser.py +0 -0
- {nkululeko-0.81.2 → nkululeko-0.81.3}/nkululeko/feat_extract/feats_audmodel.py +0 -0
- {nkululeko-0.81.2 → nkululeko-0.81.3}/nkululeko/feat_extract/feats_audmodel_dim.py +0 -0
- {nkululeko-0.81.2 → nkululeko-0.81.3}/nkululeko/feat_extract/feats_clap.py +0 -0
- {nkululeko-0.81.2 → nkululeko-0.81.3}/nkululeko/feat_extract/feats_hubert.py +0 -0
- {nkululeko-0.81.2 → nkululeko-0.81.3}/nkululeko/feat_extract/feats_import.py +0 -0
- {nkululeko-0.81.2 → nkululeko-0.81.3}/nkululeko/feat_extract/feats_mld.py +0 -0
- {nkululeko-0.81.2 → nkululeko-0.81.3}/nkululeko/feat_extract/feats_mos.py +0 -0
- {nkululeko-0.81.2 → nkululeko-0.81.3}/nkululeko/feat_extract/feats_opensmile.py +0 -0
- {nkululeko-0.81.2 → nkululeko-0.81.3}/nkululeko/feat_extract/feats_oxbow.py +0 -0
- {nkululeko-0.81.2 → nkululeko-0.81.3}/nkululeko/feat_extract/feats_praat.py +0 -0
- {nkululeko-0.81.2 → nkululeko-0.81.3}/nkululeko/feat_extract/feats_snr.py +0 -0
- {nkululeko-0.81.2 → nkululeko-0.81.3}/nkululeko/feat_extract/feats_spectra.py +0 -0
- {nkululeko-0.81.2 → nkululeko-0.81.3}/nkululeko/feat_extract/feats_spkrec.py +0 -0
- {nkululeko-0.81.2 → nkululeko-0.81.3}/nkululeko/feat_extract/feats_squim.py +0 -0
- {nkululeko-0.81.2 → nkululeko-0.81.3}/nkululeko/feat_extract/feats_trill.py +0 -0
- {nkululeko-0.81.2 → nkululeko-0.81.3}/nkululeko/feat_extract/feats_wav2vec2.py +0 -0
- {nkululeko-0.81.2 → nkululeko-0.81.3}/nkululeko/feat_extract/feats_wavlm.py +0 -0
- {nkululeko-0.81.2 → nkululeko-0.81.3}/nkululeko/feat_extract/featureset.py +0 -0
- {nkululeko-0.81.2 → nkululeko-0.81.3}/nkululeko/feature_extractor.py +0 -0
- {nkululeko-0.81.2 → nkululeko-0.81.3}/nkululeko/file_checker.py +0 -0
- {nkululeko-0.81.2 → nkululeko-0.81.3}/nkululeko/filter_data.py +0 -0
- {nkululeko-0.81.2 → nkululeko-0.81.3}/nkululeko/glob_conf.py +0 -0
- {nkululeko-0.81.2 → nkululeko-0.81.3}/nkululeko/losses/__init__.py +0 -0
- {nkululeko-0.81.2 → nkululeko-0.81.3}/nkululeko/losses/loss_ccc.py +0 -0
- {nkululeko-0.81.2 → nkululeko-0.81.3}/nkululeko/losses/loss_softf1loss.py +0 -0
- {nkululeko-0.81.2 → nkululeko-0.81.3}/nkululeko/modelrunner.py +0 -0
- {nkululeko-0.81.2 → nkululeko-0.81.3}/nkululeko/models/__init__.py +0 -0
- {nkululeko-0.81.2 → nkululeko-0.81.3}/nkululeko/models/model_bayes.py +0 -0
- {nkululeko-0.81.2 → nkululeko-0.81.3}/nkululeko/models/model_gmm.py +0 -0
- {nkululeko-0.81.2 → nkululeko-0.81.3}/nkululeko/models/model_knn.py +0 -0
- {nkululeko-0.81.2 → nkululeko-0.81.3}/nkululeko/models/model_knn_reg.py +0 -0
- {nkululeko-0.81.2 → nkululeko-0.81.3}/nkululeko/models/model_lin_reg.py +0 -0
- {nkululeko-0.81.2 → nkululeko-0.81.3}/nkululeko/models/model_svm.py +0 -0
- {nkululeko-0.81.2 → nkululeko-0.81.3}/nkululeko/models/model_svr.py +0 -0
- {nkululeko-0.81.2 → nkululeko-0.81.3}/nkululeko/models/model_tree.py +0 -0
- {nkululeko-0.81.2 → nkululeko-0.81.3}/nkululeko/models/model_tree_reg.py +0 -0
- {nkululeko-0.81.2 → nkululeko-0.81.3}/nkululeko/models/model_xgb.py +0 -0
- {nkululeko-0.81.2 → nkululeko-0.81.3}/nkululeko/models/model_xgr.py +0 -0
- {nkululeko-0.81.2 → nkululeko-0.81.3}/nkululeko/multidb.py +0 -0
- {nkululeko-0.81.2 → nkululeko-0.81.3}/nkululeko/nkululeko.py +0 -0
- {nkululeko-0.81.2 → nkululeko-0.81.3}/nkululeko/plots.py +0 -0
- {nkululeko-0.81.2 → nkululeko-0.81.3}/nkululeko/predict.py +0 -0
- {nkululeko-0.81.2 → nkululeko-0.81.3}/nkululeko/reporting/__init__.py +0 -0
- {nkululeko-0.81.2 → nkululeko-0.81.3}/nkululeko/reporting/defines.py +0 -0
- {nkululeko-0.81.2 → nkululeko-0.81.3}/nkululeko/reporting/latex_writer.py +0 -0
- {nkululeko-0.81.2 → nkululeko-0.81.3}/nkululeko/reporting/report.py +0 -0
- {nkululeko-0.81.2 → nkululeko-0.81.3}/nkululeko/reporting/report_item.py +0 -0
- {nkululeko-0.81.2 → nkululeko-0.81.3}/nkululeko/resample.py +0 -0
- {nkululeko-0.81.2 → nkululeko-0.81.3}/nkululeko/scaler.py +0 -0
- {nkululeko-0.81.2 → nkululeko-0.81.3}/nkululeko/segment.py +0 -0
- {nkululeko-0.81.2 → nkululeko-0.81.3}/nkululeko/segmenting/__init__.py +0 -0
- {nkululeko-0.81.2 → nkululeko-0.81.3}/nkululeko/segmenting/seg_inaspeechsegmenter.py +0 -0
- {nkululeko-0.81.2 → nkululeko-0.81.3}/nkululeko/segmenting/seg_silero.py +0 -0
- {nkululeko-0.81.2 → nkululeko-0.81.3}/nkululeko/syllable_nuclei.py +0 -0
- {nkululeko-0.81.2 → nkululeko-0.81.3}/nkululeko/test.py +0 -0
- {nkululeko-0.81.2 → nkululeko-0.81.3}/nkululeko/test_predictor.py +0 -0
- {nkululeko-0.81.2 → nkululeko-0.81.3}/nkululeko/utils/__init__.py +0 -0
- {nkululeko-0.81.2 → nkululeko-0.81.3}/nkululeko/utils/files.py +0 -0
- {nkululeko-0.81.2 → nkululeko-0.81.3}/nkululeko/utils/stats.py +0 -0
- {nkululeko-0.81.2 → nkululeko-0.81.3}/nkululeko/utils/util.py +0 -0
- {nkululeko-0.81.2 → nkululeko-0.81.3}/nkululeko.egg-info/dependency_links.txt +0 -0
- {nkululeko-0.81.2 → nkululeko-0.81.3}/nkululeko.egg-info/top_level.txt +0 -0
- {nkululeko-0.81.2 → nkululeko-0.81.3}/pyproject.toml +0 -0
- {nkululeko-0.81.2 → nkululeko-0.81.3}/setup.py +0 -0
- {nkululeko-0.81.2 → nkululeko-0.81.3}/venv/bin/activate_this.py +0 -0
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: nkululeko
|
3
|
-
Version: 0.81.
|
3
|
+
Version: 0.81.3
|
4
4
|
Summary: Machine learning audio prediction experiments based on templates
|
5
5
|
Home-page: https://github.com/felixbur/nkululeko
|
6
6
|
Author: Felix Burkhardt
|
@@ -18,7 +18,9 @@ Requires-Dist: audformat
|
|
18
18
|
Requires-Dist: audinterface
|
19
19
|
Requires-Dist: audiofile
|
20
20
|
Requires-Dist: audiomentations
|
21
|
+
Requires-Dist: audmetric
|
21
22
|
Requires-Dist: audonnx
|
23
|
+
Requires-Dist: confidence_intervals
|
22
24
|
Requires-Dist: datasets
|
23
25
|
Requires-Dist: imageio
|
24
26
|
Requires-Dist: laion-clap
|
@@ -321,6 +323,10 @@ F. Burkhardt, Johannes Wagner, Hagen Wierstorf, Florian Eyben and Björn Schulle
|
|
321
323
|
Changelog
|
322
324
|
=========
|
323
325
|
|
326
|
+
Version 0.81.3
|
327
|
+
--------------
|
328
|
+
* added confidence intervals to result reporting
|
329
|
+
|
324
330
|
Version 0.81.2
|
325
331
|
--------------
|
326
332
|
* added a parselmouth.Praat error if pitch out of range
|
@@ -1,2 +1,2 @@
|
|
1
|
-
VERSION="0.81.
|
1
|
+
VERSION="0.81.3"
|
2
2
|
SAMPLING_RATE = 16000
|
@@ -32,10 +32,11 @@ class AgenderAgenderSet(Featureset):
|
|
32
32
|
audeer.extract_archive(archive_path, model_root)
|
33
33
|
device = self.util.config_val("MODEL", "device", "cpu")
|
34
34
|
self.model = audonnx.load(model_root, device=device)
|
35
|
-
pytorch_total_params = sum(p.numel() for p in self.model.parameters())
|
36
|
-
self.util.debug(
|
37
|
-
|
38
|
-
)
|
35
|
+
# pytorch_total_params = sum(p.numel() for p in self.model.parameters())
|
36
|
+
# self.util.debug(
|
37
|
+
# f"initialized agender model with {pytorch_total_params} parameters in total"
|
38
|
+
# )
|
39
|
+
self.util.debug("initialized agender model")
|
39
40
|
self.model_loaded = True
|
40
41
|
|
41
42
|
def extract(self):
|
@@ -1,47 +1,46 @@
|
|
1
|
-
"""
|
2
|
-
This is a copy of David R. Feinberg's Praat scripts
|
1
|
+
"""This is a copy of David R. Feinberg's Praat scripts.
|
3
2
|
https://github.com/drfeinberg/PraatScripts
|
4
|
-
taken June 23rd 2022
|
3
|
+
taken June 23rd 2022.
|
5
4
|
"""
|
6
5
|
|
7
6
|
#!/usr/bin/env python3
|
7
|
+
import math
|
8
|
+
import statistics
|
9
|
+
|
8
10
|
import numpy as np
|
9
11
|
import pandas as pd
|
10
|
-
import math
|
11
|
-
from tqdm import tqdm
|
12
12
|
import parselmouth
|
13
|
-
import statistics
|
14
|
-
from nkululeko.utils.util import Util
|
15
|
-
import audiofile
|
16
13
|
from parselmouth.praat import call
|
17
14
|
from scipy.stats.mstats import zscore
|
18
15
|
from sklearn.decomposition import PCA
|
19
|
-
from
|
16
|
+
from tqdm import tqdm
|
17
|
+
|
18
|
+
import audiofile
|
20
19
|
|
21
20
|
|
22
21
|
# This is the function to measure source acoustics using default male parameters.
|
23
22
|
|
24
23
|
|
25
|
-
def
|
26
|
-
sound = parselmouth.Sound(
|
24
|
+
def measure_pitch(voice_id, f0min, f0max, unit):
|
25
|
+
sound = parselmouth.Sound(voice_id) # read the sound
|
27
26
|
duration = call(sound, "Get total duration") # duration
|
28
27
|
pitch = call(sound, "To Pitch", 0.0, f0min, f0max) # create a praat pitch object
|
29
|
-
|
30
|
-
|
28
|
+
mean_f0 = call(pitch, "Get mean", 0, 0, unit) # get mean pitch
|
29
|
+
stdev_f0 = call(
|
31
30
|
pitch, "Get standard deviation", 0, 0, unit
|
32
31
|
) # get standard deviation
|
33
32
|
harmonicity = call(sound, "To Harmonicity (cc)", 0.01, f0min, 0.1, 1.0)
|
34
33
|
hnr = call(harmonicity, "Get mean", 0, 0)
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
34
|
+
point_process = call(sound, "To PointProcess (periodic, cc)", f0min, f0max)
|
35
|
+
local_jitter = call(point_process, "Get jitter (local)", 0, 0, 0.0001, 0.02, 1.3)
|
36
|
+
localabsolute_jitter = call(
|
37
|
+
point_process, "Get jitter (local, absolute)", 0, 0, 0.0001, 0.02, 1.3
|
39
38
|
)
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
[sound,
|
39
|
+
rap_jitter = call(point_process, "Get jitter (rap)", 0, 0, 0.0001, 0.02, 1.3)
|
40
|
+
ppq5_jitter = call(point_process, "Get jitter (ppq5)", 0, 0, 0.0001, 0.02, 1.3)
|
41
|
+
ddp_jitter = call(point_process, "Get jitter (ddp)", 0, 0, 0.0001, 0.02, 1.3)
|
42
|
+
local_shimmer = call(
|
43
|
+
[sound, point_process],
|
45
44
|
"Get shimmer (local)",
|
46
45
|
0,
|
47
46
|
0,
|
@@ -50,8 +49,8 @@ def measurePitch(voiceID, f0min, f0max, unit):
|
|
50
49
|
1.3,
|
51
50
|
1.6,
|
52
51
|
)
|
53
|
-
|
54
|
-
[sound,
|
52
|
+
localdb_shimmer = call(
|
53
|
+
[sound, point_process],
|
55
54
|
"Get shimmer (local_dB)",
|
56
55
|
0,
|
57
56
|
0,
|
@@ -60,8 +59,8 @@ def measurePitch(voiceID, f0min, f0max, unit):
|
|
60
59
|
1.3,
|
61
60
|
1.6,
|
62
61
|
)
|
63
|
-
|
64
|
-
[sound,
|
62
|
+
apq3_shimmer = call(
|
63
|
+
[sound, point_process],
|
65
64
|
"Get shimmer (apq3)",
|
66
65
|
0,
|
67
66
|
0,
|
@@ -70,8 +69,8 @@ def measurePitch(voiceID, f0min, f0max, unit):
|
|
70
69
|
1.3,
|
71
70
|
1.6,
|
72
71
|
)
|
73
|
-
|
74
|
-
[sound,
|
72
|
+
aqpq5_shimmer = call(
|
73
|
+
[sound, point_process],
|
75
74
|
"Get shimmer (apq5)",
|
76
75
|
0,
|
77
76
|
0,
|
@@ -80,8 +79,8 @@ def measurePitch(voiceID, f0min, f0max, unit):
|
|
80
79
|
1.3,
|
81
80
|
1.6,
|
82
81
|
)
|
83
|
-
|
84
|
-
[sound,
|
82
|
+
apq11_shimmer = call(
|
83
|
+
[sound, point_process],
|
85
84
|
"Get shimmer (apq11)",
|
86
85
|
0,
|
87
86
|
0,
|
@@ -90,26 +89,26 @@ def measurePitch(voiceID, f0min, f0max, unit):
|
|
90
89
|
1.3,
|
91
90
|
1.6,
|
92
91
|
)
|
93
|
-
|
94
|
-
[sound,
|
92
|
+
dda_shimmer = call(
|
93
|
+
[sound, point_process], "Get shimmer (dda)", 0, 0, 0.0001, 0.02, 1.3, 1.6
|
95
94
|
)
|
96
95
|
|
97
96
|
return (
|
98
97
|
duration,
|
99
|
-
|
100
|
-
|
98
|
+
mean_f0,
|
99
|
+
stdev_f0,
|
101
100
|
hnr,
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
101
|
+
local_jitter,
|
102
|
+
localabsolute_jitter,
|
103
|
+
rap_jitter,
|
104
|
+
ppq5_jitter,
|
105
|
+
ddp_jitter,
|
106
|
+
local_shimmer,
|
107
|
+
localdb_shimmer,
|
108
|
+
apq3_shimmer,
|
109
|
+
aqpq5_shimmer,
|
110
|
+
apq11_shimmer,
|
111
|
+
dda_shimmer,
|
113
112
|
)
|
114
113
|
|
115
114
|
|
@@ -120,13 +119,13 @@ def measurePitch(voiceID, f0min, f0max, unit):
|
|
120
119
|
# Adapted from: DOI 10.17605/OSF.IO/K2BHS
|
121
120
|
# This function measures formants using Formant Position formula
|
122
121
|
# def measureFormants(sound, wave_file, f0min,f0max):
|
123
|
-
def
|
122
|
+
def measure_formants(sound, f0min, f0max):
|
124
123
|
sound = parselmouth.Sound(sound) # read the sound
|
125
124
|
# pitch = call(sound, "To Pitch (cc)", 0, f0min, 15, 'no', 0.03, 0.45, 0.01, 0.35, 0.14, f0max)
|
126
|
-
|
125
|
+
point_process = call(sound, "To PointProcess (periodic, cc)", f0min, f0max)
|
127
126
|
|
128
127
|
formants = call(sound, "To Formant (burg)", 0.0025, 5, 5000, 0.025, 50)
|
129
|
-
|
128
|
+
num_points = call(point_process, "Get number of points")
|
130
129
|
|
131
130
|
f1_list = []
|
132
131
|
f2_list = []
|
@@ -134,9 +133,9 @@ def measureFormants(sound, f0min, f0max):
|
|
134
133
|
f4_list = []
|
135
134
|
|
136
135
|
# Measure formants only at glottal pulses
|
137
|
-
for point in range(0,
|
136
|
+
for point in range(0, num_points):
|
138
137
|
point += 1
|
139
|
-
t = call(
|
138
|
+
t = call(point_process, "Get time from index", point)
|
140
139
|
f1 = call(formants, "Get value at time", 1, t, "Hertz", "Linear")
|
141
140
|
f2 = call(formants, "Get value at time", 2, t, "Hertz", "Linear")
|
142
141
|
f3 = call(formants, "Get value at time", 3, t, "Hertz", "Linear")
|
@@ -179,7 +178,7 @@ def measureFormants(sound, f0min, f0max):
|
|
179
178
|
# ## This function runs a 2-factor Principle Components Analysis (PCA) on Jitter and Shimmer
|
180
179
|
|
181
180
|
|
182
|
-
def
|
181
|
+
def run_pca(df):
|
183
182
|
# z-score the Jitter and Shimmer measurements
|
184
183
|
measures = [
|
185
184
|
"localJitter",
|
@@ -211,19 +210,19 @@ def runPCA(df):
|
|
211
210
|
# PCA
|
212
211
|
pca = PCA(n_components=2)
|
213
212
|
try:
|
214
|
-
|
215
|
-
if np.any(np.isnan(
|
213
|
+
principal_components = pca.fit_transform(x)
|
214
|
+
if np.any(np.isnan(principal_components)):
|
216
215
|
print("pc is nan")
|
217
|
-
print(f"count: {np.count_nonzero(np.isnan(
|
218
|
-
print(
|
219
|
-
|
216
|
+
print(f"count: {np.count_nonzero(np.isnan(principal_components))}")
|
217
|
+
print(principal_components)
|
218
|
+
principal_components = np.nan_to_num(principal_components)
|
220
219
|
except ValueError:
|
221
220
|
print("need more than one file for pca")
|
222
|
-
|
223
|
-
|
224
|
-
data=
|
221
|
+
principal_components = [[0, 0]]
|
222
|
+
principal_df = pd.DataFrame(
|
223
|
+
data=principal_components, columns=["JitterPCA", "ShimmerPCA"]
|
225
224
|
)
|
226
|
-
return
|
225
|
+
return principal_df
|
227
226
|
|
228
227
|
|
229
228
|
# ## This block of code runs the above functions on all of the '.wav' files in the /audio folder
|
@@ -231,22 +230,21 @@ def runPCA(df):
|
|
231
230
|
|
232
231
|
def compute_features(file_index):
|
233
232
|
# create lists to put the results
|
234
|
-
file_list = []
|
235
233
|
duration_list = []
|
236
|
-
|
237
|
-
|
234
|
+
mean_f0_list = []
|
235
|
+
sd_f0_list = []
|
238
236
|
hnr_list = []
|
239
|
-
|
240
|
-
|
241
|
-
|
242
|
-
|
243
|
-
|
244
|
-
|
245
|
-
|
246
|
-
|
247
|
-
|
248
|
-
|
249
|
-
|
237
|
+
local_jitter_list = []
|
238
|
+
localabsolute_jitter_list = []
|
239
|
+
rap_jitter_list = []
|
240
|
+
ppq5_jitter_list = []
|
241
|
+
ddp_jitter_list = []
|
242
|
+
local_shimmer_list = []
|
243
|
+
localdb_shimmer_list = []
|
244
|
+
apq3_shimmer_list = []
|
245
|
+
aqpq5_shimmer_list = []
|
246
|
+
apq11_shimmer_list = []
|
247
|
+
dda_shimmer_list = []
|
250
248
|
f1_mean_list = []
|
251
249
|
f2_mean_list = []
|
252
250
|
f3_mean_list = []
|
@@ -268,21 +266,21 @@ def compute_features(file_index):
|
|
268
266
|
sound = parselmouth.Sound(values=signal, sampling_frequency=sampling_rate)
|
269
267
|
(
|
270
268
|
duration,
|
271
|
-
|
272
|
-
|
269
|
+
mean_f0,
|
270
|
+
stdev_f0,
|
273
271
|
hnr,
|
274
|
-
|
275
|
-
|
276
|
-
|
277
|
-
|
278
|
-
|
279
|
-
|
280
|
-
|
281
|
-
|
282
|
-
|
283
|
-
|
284
|
-
|
285
|
-
) =
|
272
|
+
local_jitter,
|
273
|
+
localabsolute_jitter,
|
274
|
+
rap_jitter,
|
275
|
+
ppq5_jitter,
|
276
|
+
ddp_jitter,
|
277
|
+
local_shimmer,
|
278
|
+
localdb_shimmer,
|
279
|
+
apq3_shimmer,
|
280
|
+
aqpq5_shimmer,
|
281
|
+
apq11_shimmer,
|
282
|
+
dda_shimmer,
|
283
|
+
) = measure_pitch(sound, 75, 300, "Hertz")
|
286
284
|
(
|
287
285
|
f1_mean,
|
288
286
|
f2_mean,
|
@@ -292,28 +290,28 @@ def compute_features(file_index):
|
|
292
290
|
f2_median,
|
293
291
|
f3_median,
|
294
292
|
f4_median,
|
295
|
-
) =
|
293
|
+
) = measure_formants(sound, 75, 300)
|
296
294
|
# file_list.append(wave_file) # make an ID list
|
297
295
|
except (statistics.StatisticsError, parselmouth.PraatError) as errors:
|
298
296
|
print(f"error on file {wave_file}: {errors}")
|
299
297
|
|
300
298
|
duration_list.append(duration) # make duration list
|
301
|
-
|
302
|
-
|
299
|
+
mean_f0_list.append(mean_f0) # make a mean F0 list
|
300
|
+
sd_f0_list.append(stdev_f0) # make a sd F0 list
|
303
301
|
hnr_list.append(hnr) # add HNR data
|
304
302
|
|
305
303
|
# add raw jitter and shimmer measures
|
306
|
-
|
307
|
-
|
308
|
-
|
309
|
-
|
310
|
-
|
311
|
-
|
312
|
-
|
313
|
-
|
314
|
-
|
315
|
-
|
316
|
-
|
304
|
+
local_jitter_list.append(local_jitter)
|
305
|
+
localabsolute_jitter_list.append(localabsolute_jitter)
|
306
|
+
rap_jitter_list.append(rap_jitter)
|
307
|
+
ppq5_jitter_list.append(ppq5_jitter)
|
308
|
+
ddp_jitter_list.append(ddp_jitter)
|
309
|
+
local_shimmer_list.append(local_shimmer)
|
310
|
+
localdb_shimmer_list.append(localdb_shimmer)
|
311
|
+
apq3_shimmer_list.append(apq3_shimmer)
|
312
|
+
aqpq5_shimmer_list.append(aqpq5_shimmer)
|
313
|
+
apq11_shimmer_list.append(apq11_shimmer)
|
314
|
+
dda_shimmer_list.append(dda_shimmer)
|
317
315
|
|
318
316
|
# add the formant data
|
319
317
|
f1_mean_list.append(f1_mean)
|
@@ -330,20 +328,20 @@ def compute_features(file_index):
|
|
330
328
|
np.column_stack(
|
331
329
|
[
|
332
330
|
duration_list,
|
333
|
-
|
334
|
-
|
331
|
+
mean_f0_list,
|
332
|
+
sd_f0_list,
|
335
333
|
hnr_list,
|
336
|
-
|
337
|
-
|
338
|
-
|
339
|
-
|
340
|
-
|
341
|
-
|
342
|
-
|
343
|
-
|
344
|
-
|
345
|
-
|
346
|
-
|
334
|
+
local_jitter_list,
|
335
|
+
localabsolute_jitter_list,
|
336
|
+
rap_jitter_list,
|
337
|
+
ppq5_jitter_list,
|
338
|
+
ddp_jitter_list,
|
339
|
+
local_shimmer_list,
|
340
|
+
localdb_shimmer_list,
|
341
|
+
apq3_shimmer_list,
|
342
|
+
aqpq5_shimmer_list,
|
343
|
+
apq11_shimmer_list,
|
344
|
+
dda_shimmer_list,
|
347
345
|
f1_mean_list,
|
348
346
|
f2_mean_list,
|
349
347
|
f3_mean_list,
|
@@ -382,7 +380,7 @@ def compute_features(file_index):
|
|
382
380
|
)
|
383
381
|
|
384
382
|
# add pca data
|
385
|
-
pcaData =
|
383
|
+
pcaData = run_pca(df) # Run jitter and shimmer PCA
|
386
384
|
df = pd.concat([df, pcaData], axis=1) # Add PCA data
|
387
385
|
# reload the data so it's all numbers
|
388
386
|
df.to_csv("processed_results.csv", index=False)
|
@@ -4,7 +4,7 @@ import pandas as pd
|
|
4
4
|
import numpy as np
|
5
5
|
import nkululeko.glob_conf as glob_conf
|
6
6
|
import sklearn.utils
|
7
|
-
from nkululeko.reporter import Reporter
|
7
|
+
from nkululeko.reporting.reporter import Reporter
|
8
8
|
import ast
|
9
9
|
from sklearn.model_selection import GridSearchCV
|
10
10
|
import pickle
|
@@ -20,7 +20,7 @@ from PIL import Image
|
|
20
20
|
from nkululeko.utils.util import Util
|
21
21
|
import nkululeko.glob_conf as glob_conf
|
22
22
|
from nkululeko.models.model import Model
|
23
|
-
from nkululeko.reporter import Reporter
|
23
|
+
from nkululeko.reporting.reporter import Reporter
|
24
24
|
from nkululeko.losses.loss_softf1loss import SoftF1Loss
|
25
25
|
|
26
26
|
|
@@ -1,16 +1,20 @@
|
|
1
1
|
# model_mlp.py
|
2
|
-
from nkululeko.utils.util import Util
|
3
|
-
import nkululeko.glob_conf as glob_conf
|
4
|
-
from nkululeko.models.model import Model
|
5
|
-
from nkululeko.reporter import Reporter
|
6
|
-
import torch
|
7
2
|
import ast
|
8
|
-
import numpy as np
|
9
|
-
from sklearn.metrics import mean_squared_error, mean_absolute_error
|
10
3
|
from collections import OrderedDict
|
11
|
-
from nkululeko.losses.loss_ccc import ConcordanceCorCoeff
|
12
4
|
import os
|
13
5
|
|
6
|
+
import numpy as np
|
7
|
+
import torch
|
8
|
+
|
9
|
+
from audmetric import concordance_cc
|
10
|
+
from audmetric import mean_absolute_error
|
11
|
+
from audmetric import mean_squared_error
|
12
|
+
|
13
|
+
import nkululeko.glob_conf as glob_conf
|
14
|
+
from nkululeko.losses.loss_ccc import ConcordanceCorCoeff
|
15
|
+
from nkululeko.models.model import Model
|
16
|
+
from nkululeko.reporting.reporter import Reporter
|
17
|
+
|
14
18
|
|
15
19
|
class MLP_Reg_model(Model):
|
16
20
|
"""MLP = multi layer perceptron"""
|
@@ -201,7 +205,7 @@ class MLP_Reg_model(Model):
|
|
201
205
|
elif measure == "mae":
|
202
206
|
result = mean_absolute_error(targets.numpy(), predictions.numpy())
|
203
207
|
elif measure == "ccc":
|
204
|
-
result =
|
208
|
+
result = concordance_cc(targets.numpy(), predictions.numpy())
|
205
209
|
else:
|
206
210
|
self.util.error(f"unknown measure: {measure}")
|
207
211
|
return result, targets, predictions
|