├── .gitattributes ├── .github ├── ISSUE_TEMPLATE │ ├── bug_report.md │ └── feature_request.md ├── dependabot.yml └── workflows │ └── documentation.yaml ├── .gitignore ├── 2.0.0 ├── README.md ├── SECURITY.md ├── docs ├── .buildinfo ├── .doctrees │ ├── environment.pickle │ └── index.doctree ├── _images │ ├── LoadVoices.png │ ├── output_window.png │ ├── power_spectrum.png │ ├── settings.png │ └── spectrogram.png ├── _sources │ ├── conf.py │ ├── favicon.ico │ ├── index.md │ ├── index.md.txt │ ├── index.rst │ └── index.rst.txt ├── _static │ ├── basic.css │ ├── css │ │ ├── badge_only.css │ │ ├── fonts │ │ │ ├── Roboto-Slab-Bold.woff │ │ │ ├── Roboto-Slab-Bold.woff2 │ │ │ ├── Roboto-Slab-Regular.woff │ │ │ ├── Roboto-Slab-Regular.woff2 │ │ │ ├── fontawesome-webfont.eot │ │ │ ├── fontawesome-webfont.svg │ │ │ ├── fontawesome-webfont.ttf │ │ │ ├── fontawesome-webfont.woff │ │ │ ├── fontawesome-webfont.woff2 │ │ │ ├── lato-bold-italic.woff │ │ │ ├── lato-bold-italic.woff2 │ │ │ ├── lato-bold.woff │ │ │ ├── lato-bold.woff2 │ │ │ ├── lato-normal-italic.woff │ │ │ ├── lato-normal-italic.woff2 │ │ │ ├── lato-normal.woff │ │ │ └── lato-normal.woff2 │ │ └── theme.css │ ├── doctools.js │ ├── documentation_options.js │ ├── favicon.ico │ ├── file.png │ ├── fonts │ │ ├── font-awesome.css │ │ ├── material-icons.css │ │ └── specimen │ │ │ ├── FontAwesome.ttf │ │ │ ├── FontAwesome.woff │ │ │ ├── FontAwesome.woff2 │ │ │ ├── MaterialIcons-Regular.ttf │ │ │ ├── MaterialIcons-Regular.woff │ │ │ └── MaterialIcons-Regular.woff2 │ ├── images │ │ ├── favicon.png │ │ └── icons │ │ │ ├── bitbucket.1b09e088.svg │ │ │ ├── bitbucket.svg │ │ │ ├── github.f0b8504a.svg │ │ │ ├── github.svg │ │ │ ├── gitlab.6dd19c00.svg │ │ │ └── gitlab.svg │ ├── javascripts │ │ ├── application.js │ │ ├── lunr │ │ │ ├── lunr.da.js │ │ │ ├── lunr.de.js │ │ │ ├── lunr.du.js │ │ │ ├── lunr.es.js │ │ │ ├── lunr.fi.js │ │ │ ├── lunr.fr.js │ │ │ ├── lunr.hu.js │ │ │ ├── lunr.it.js │ │ │ ├── lunr.ja.js │ │ │ ├── lunr.jp.js │ │ │ ├── lunr.multi.js │ │ │ ├── lunr.nl.js │ │ │ ├── lunr.no.js │ │ │ ├── lunr.pt.js │ │ │ ├── lunr.ro.js │ │ │ ├── lunr.ru.js │ │ │ ├── lunr.stemmer.support.js │ │ │ ├── lunr.sv.js │ │ │ ├── lunr.th.js │ │ │ ├── lunr.tr.js │ │ │ ├── tinyseg.js │ │ │ └── wordcut.js │ │ ├── modernizr.js │ │ └── version_dropdown.js │ ├── jquery.js │ ├── jquery.min.map │ ├── js │ │ ├── badge_only.js │ │ ├── html5shiv-printshiv.min.js │ │ ├── html5shiv.min.js │ │ └── theme.js │ ├── language_data.js │ ├── material.css │ ├── minus.png │ ├── plus.png │ ├── pygments.css │ ├── searchtools.js │ ├── sphinx_highlight.js │ └── stylesheets │ │ ├── application-fixes.css │ │ ├── application-palette.css │ │ └── application.css ├── genindex.html ├── index.html ├── objects.inv ├── search.html └── searchindex.js ├── long_description ├── poetry.lock ├── pyproject.toml └── voicelab ├── __init__.py ├── docs ├── .buildinfo ├── .doctrees │ ├── environment.pickle │ └── index.doctree ├── .nojekyll ├── _images │ ├── LoadVoices.png │ ├── output_window.png │ ├── power_spectrum.png │ ├── settings.png │ └── spectrogram.png ├── _sources │ ├── conf.py │ ├── favicon.ico │ ├── index.rst │ ├── index.rst.backup │ └── index.rst.txt ├── _static │ ├── LoadVoices.png │ ├── ajax-loader.gif │ ├── alabaster.css │ ├── basic.css │ ├── comment-bright.png │ ├── comment-close.png │ ├── comment.png │ ├── css │ │ ├── badge_only.css │ │ ├── darker.css │ │ ├── favicon.ico │ │ ├── fonts │ │ │ ├── Roboto-Slab-Bold.woff │ │ │ ├── Roboto-Slab-Bold.woff2 │ │ │ ├── Roboto-Slab-Regular.woff │ │ │ ├── Roboto-Slab-Regular.woff2 │ │ │ ├── fontawesome-webfont.eot │ │ │ ├── fontawesome-webfont.svg │ │ │ ├── fontawesome-webfont.ttf │ │ │ ├── fontawesome-webfont.woff │ │ │ ├── fontawesome-webfont.woff2 │ │ │ ├── lato-bold-italic.woff │ │ │ ├── lato-bold-italic.woff2 │ │ │ ├── lato-bold.woff │ │ │ ├── lato-bold.woff2 │ │ │ ├── lato-normal-italic.woff │ │ │ ├── lato-normal-italic.woff2 │ │ │ ├── lato-normal.woff │ │ │ └── lato-normal.woff2 │ │ ├── pdj.css │ │ └── theme.css │ ├── custom.css │ ├── doctools.js │ ├── documentation_options.js │ ├── down-pressed.png │ ├── down.png │ ├── favicon.ico │ ├── favicon.png │ ├── file.png │ ├── fonts │ │ ├── Inconsolata-Bold.ttf │ │ ├── Inconsolata-Regular.ttf │ │ ├── Inconsolata.ttf │ │ ├── Lato-Bold.ttf │ │ ├── Lato-Regular.ttf │ │ ├── Lato │ │ │ ├── lato-bold.eot │ │ │ ├── lato-bold.ttf │ │ │ ├── lato-bold.woff │ │ │ ├── lato-bold.woff2 │ │ │ ├── lato-bolditalic.eot │ │ │ ├── lato-bolditalic.ttf │ │ │ ├── lato-bolditalic.woff │ │ │ ├── lato-bolditalic.woff2 │ │ │ ├── lato-italic.eot │ │ │ ├── lato-italic.ttf │ │ │ ├── lato-italic.woff │ │ │ ├── lato-italic.woff2 │ │ │ ├── lato-regular.eot │ │ │ ├── lato-regular.ttf │ │ │ ├── lato-regular.woff │ │ │ └── lato-regular.woff2 │ │ ├── RobotoSlab-Bold.ttf │ │ ├── RobotoSlab-Regular.ttf │ │ ├── RobotoSlab │ │ │ ├── roboto-slab-v7-bold.eot │ │ │ ├── roboto-slab-v7-bold.ttf │ │ │ ├── roboto-slab-v7-bold.woff │ │ │ ├── roboto-slab-v7-bold.woff2 │ │ │ ├── roboto-slab-v7-regular.eot │ │ │ ├── roboto-slab-v7-regular.ttf │ │ │ ├── roboto-slab-v7-regular.woff │ │ │ └── roboto-slab-v7-regular.woff2 │ │ ├── font-awesome.css │ │ ├── fontawesome-webfont.eot │ │ ├── fontawesome-webfont.svg │ │ ├── fontawesome-webfont.ttf │ │ ├── fontawesome-webfont.woff │ │ ├── fontawesome-webfont.woff2 │ │ ├── material-icons.css │ │ └── specimen │ │ │ ├── FontAwesome.ttf │ │ │ ├── FontAwesome.woff │ │ │ ├── FontAwesome.woff2 │ │ │ ├── MaterialIcons-Regular.ttf │ │ │ ├── MaterialIcons-Regular.woff │ │ │ └── MaterialIcons-Regular.woff2 │ ├── images │ │ ├── LoadVoices.png │ │ ├── favicon.ico │ │ ├── favicon.png │ │ ├── icons │ │ │ ├── bitbucket.1b09e088.svg │ │ │ ├── bitbucket.svg │ │ │ ├── github.f0b8504a.svg │ │ │ ├── github.svg │ │ │ ├── gitlab.6dd19c00.svg │ │ │ └── gitlab.svg │ │ ├── output_window.png │ │ ├── power_spectrum.png │ │ ├── settings.png │ │ └── spectrogram.png │ ├── img │ │ ├── favicon.ico │ │ └── porao-branco.png │ ├── javascripts │ │ ├── application.js │ │ ├── lunr │ │ │ ├── lunr.da.js │ │ │ ├── lunr.de.js │ │ │ ├── lunr.du.js │ │ │ ├── lunr.es.js │ │ │ ├── lunr.fi.js │ │ │ ├── lunr.fr.js │ │ │ ├── lunr.hu.js │ │ │ ├── lunr.it.js │ │ │ ├── lunr.ja.js │ │ │ ├── lunr.jp.js │ │ │ ├── lunr.multi.js │ │ │ ├── lunr.nl.js │ │ │ ├── lunr.no.js │ │ │ ├── lunr.pt.js │ │ │ ├── lunr.ro.js │ │ │ ├── lunr.ru.js │ │ │ ├── lunr.stemmer.support.js │ │ │ ├── lunr.sv.js │ │ │ ├── lunr.th.js │ │ │ ├── lunr.tr.js │ │ │ ├── tinyseg.js │ │ │ └── wordcut.js │ │ ├── modernizr.js │ │ └── version_dropdown.js │ ├── jquery-3.2.1.js │ ├── jquery-3.4.1.js │ ├── jquery-3.5.1.js │ ├── jquery.js │ ├── jquery.min.map │ ├── js │ │ ├── badge_only.js │ │ ├── html5shiv-printshiv.min.js │ │ ├── html5shiv.min.js │ │ ├── pdj.js │ │ └── theme.js │ ├── language_data.js │ ├── material.css │ ├── minus.png │ ├── output_window.png │ ├── plus.png │ ├── power_spectrum.png │ ├── pygments.css │ ├── searchtools.js │ ├── settings.png │ ├── spectrogram.png │ ├── stylesheets │ │ ├── application-fixes.css │ │ ├── application-palette.css │ │ └── application.css │ ├── underscore-1.13.1.js │ ├── underscore-1.3.1.js │ ├── underscore.js │ ├── up-pressed.png │ ├── up.png │ └── websupport.js ├── favicon.ico ├── genindex.html ├── get-pip.py ├── index.html ├── objects.inv ├── search.html └── searchindex.js ├── src ├── LICENSE ├── Voicelab │ ├── VoicelabGUI │ │ ├── ExperimentalTab.py │ │ ├── F1F2PlotWindow.py │ │ ├── HOW-TO-GUIDE.txt │ │ ├── InputTab.py │ │ ├── ManipulationWindow.py │ │ ├── OutputTab.py │ │ ├── SettingsTab.py │ │ ├── VoicelabController.py │ │ ├── VoicelabDataModel.py │ │ ├── VoicelabTab.py │ │ └── __init__.py │ ├── __init__.py │ ├── __main__.py │ ├── default_settings.py │ ├── favicon.ico │ ├── help │ │ ├── _sources │ │ │ ├── conf.py │ │ │ └── index.rst │ │ └── builddir │ │ │ ├── .buildinfo │ │ │ ├── .doctrees │ │ │ ├── _sources │ │ │ │ └── index.doctree │ │ │ ├── conf.doctree │ │ │ ├── environment.pickle │ │ │ ├── index.doctree │ │ │ └── modules.doctree │ │ │ ├── _sources │ │ │ ├── _sources │ │ │ │ └── index.rst.txt │ │ │ ├── conf.rst.txt │ │ │ ├── index.html │ │ │ ├── index.rst.txt │ │ │ └── modules.rst.txt │ │ │ ├── _static │ │ │ ├── ajax-loader.gif │ │ │ ├── alabaster.css │ │ │ ├── basic.css │ │ │ ├── comment-bright.png │ │ │ ├── comment-close.png │ │ │ ├── comment.png │ │ │ ├── css │ │ │ │ ├── badge_only.css │ │ │ │ ├── fonts │ │ │ │ │ ├── Roboto-Slab-Bold.woff │ │ │ │ │ ├── Roboto-Slab-Bold.woff2 │ │ │ │ │ ├── Roboto-Slab-Regular.woff │ │ │ │ │ ├── Roboto-Slab-Regular.woff2 │ │ │ │ │ ├── fontawesome-webfont.eot │ │ │ │ │ ├── fontawesome-webfont.svg │ │ │ │ │ ├── fontawesome-webfont.ttf │ │ │ │ │ ├── fontawesome-webfont.woff │ │ │ │ │ ├── fontawesome-webfont.woff2 │ │ │ │ │ ├── lato-bold-italic.woff │ │ │ │ │ ├── lato-bold-italic.woff2 │ │ │ │ │ ├── lato-bold.woff │ │ │ │ │ ├── lato-bold.woff2 │ │ │ │ │ ├── lato-normal-italic.woff │ │ │ │ │ ├── lato-normal-italic.woff2 │ │ │ │ │ ├── lato-normal.woff │ │ │ │ │ └── lato-normal.woff2 │ │ │ │ └── theme.css │ │ │ ├── custom.css │ │ │ ├── doctools.js │ │ │ ├── documentation_options.js │ │ │ ├── down-pressed.png │ │ │ ├── down.png │ │ │ ├── file.png │ │ │ ├── fonts │ │ │ │ ├── Inconsolata-Bold.ttf │ │ │ │ ├── Inconsolata-Regular.ttf │ │ │ │ ├── Inconsolata.ttf │ │ │ │ ├── Lato-Bold.ttf │ │ │ │ ├── Lato-Regular.ttf │ │ │ │ ├── Lato │ │ │ │ │ ├── lato-bold.eot │ │ │ │ │ ├── lato-bold.ttf │ │ │ │ │ ├── lato-bold.woff │ │ │ │ │ ├── lato-bold.woff2 │ │ │ │ │ ├── lato-bolditalic.eot │ │ │ │ │ ├── lato-bolditalic.ttf │ │ │ │ │ ├── lato-bolditalic.woff │ │ │ │ │ ├── lato-bolditalic.woff2 │ │ │ │ │ ├── lato-italic.eot │ │ │ │ │ ├── lato-italic.ttf │ │ │ │ │ ├── lato-italic.woff │ │ │ │ │ ├── lato-italic.woff2 │ │ │ │ │ ├── lato-regular.eot │ │ │ │ │ ├── lato-regular.ttf │ │ │ │ │ ├── lato-regular.woff │ │ │ │ │ └── lato-regular.woff2 │ │ │ │ ├── RobotoSlab-Bold.ttf │ │ │ │ ├── RobotoSlab-Regular.ttf │ │ │ │ ├── RobotoSlab │ │ │ │ │ ├── roboto-slab-v7-bold.eot │ │ │ │ │ ├── roboto-slab-v7-bold.ttf │ │ │ │ │ ├── roboto-slab-v7-bold.woff │ │ │ │ │ ├── roboto-slab-v7-bold.woff2 │ │ │ │ │ ├── roboto-slab-v7-regular.eot │ │ │ │ │ ├── roboto-slab-v7-regular.ttf │ │ │ │ │ ├── roboto-slab-v7-regular.woff │ │ │ │ │ └── roboto-slab-v7-regular.woff2 │ │ │ │ ├── fontawesome-webfont.eot │ │ │ │ ├── fontawesome-webfont.svg │ │ │ │ ├── fontawesome-webfont.ttf │ │ │ │ ├── fontawesome-webfont.woff │ │ │ │ └── fontawesome-webfont.woff2 │ │ │ ├── jquery-3.2.1.js │ │ │ ├── jquery-3.4.1.js │ │ │ ├── jquery-3.5.1.js │ │ │ ├── jquery.js │ │ │ ├── js │ │ │ │ ├── badge_only.js │ │ │ │ ├── html5shiv-printshiv.min.js │ │ │ │ ├── html5shiv.min.js │ │ │ │ ├── modernizr.min.js │ │ │ │ └── theme.js │ │ │ ├── language_data.js │ │ │ ├── minus.png │ │ │ ├── plus.png │ │ │ ├── pygments.css │ │ │ ├── searchtools.js │ │ │ ├── underscore-1.13.1.js │ │ │ ├── underscore-1.3.1.js │ │ │ ├── underscore.js │ │ │ ├── up-pressed.png │ │ │ ├── up.png │ │ │ └── websupport.js │ │ │ ├── conf.html │ │ │ ├── index.html │ │ │ ├── modules.html │ │ │ ├── objects.inv │ │ │ ├── search.html │ │ │ └── searchindex.js │ ├── pipeline │ │ ├── FileWidget.py │ │ ├── New-Pipeline.py │ │ ├── Node.py │ │ ├── NodeFactory.py │ │ ├── NodzInterface.py │ │ ├── Pipeline.py │ │ ├── Pipeline.py.backup │ │ ├── QWidgetValueAccesser.py │ │ └── __init__.py │ ├── toolkits │ │ ├── Voicelab │ │ │ ├── .directory │ │ │ ├── F1F2PlotNode.py │ │ │ ├── IPA_Praat_symbols.csv │ │ │ ├── LoadVoicesNode.py │ │ │ ├── ManipulateLowerFormantsNode.py │ │ │ ├── ManipulateLowerPitchAndFormantsNode.py │ │ │ ├── ManipulatePitchHigherNode.py │ │ │ ├── ManipulatePitchLowerNode.py │ │ │ ├── ManipulateRaiseFormantsNode.py │ │ │ ├── ManipulateRaisePitchAndFormantsNode.py │ │ │ ├── ManipulateTruncateSoundsNode.py │ │ │ ├── MeasureAlphaRatioNode.py │ │ │ ├── MeasureCPPNode.py │ │ │ ├── MeasureDurationNode.py │ │ │ ├── MeasureEnergyNode.py │ │ │ ├── MeasureFormantNode.py │ │ │ ├── MeasureFormantPositionsNode.py │ │ │ ├── MeasureHNRVoiceSauceNode.py │ │ │ ├── MeasureHarmonicityNode.py │ │ │ ├── MeasureHarmonicsNode.py │ │ │ ├── MeasureIntensityNode.py │ │ │ ├── MeasureJitterNode.py │ │ │ ├── MeasureJitterPCANode.py │ │ │ ├── MeasureLTASNode.py │ │ │ ├── MeasureMFCCNode.py │ │ │ ├── MeasurePitchNode.py │ │ │ ├── MeasurePitchNodeTest.py │ │ │ ├── MeasurePitchRaptNode.py │ │ │ ├── MeasurePitchYinNode.py │ │ │ ├── MeasureSHRPNode.py │ │ │ ├── MeasureSNRNode.py │ │ │ ├── MeasureShimmerNode.py │ │ │ ├── MeasureSpectralShapeNode.py │ │ │ ├── MeasureSpectralTiltNode.py │ │ │ ├── MeasureSpeechRateNode.py │ │ │ ├── MeasureVocalTractEstimatesNode.py │ │ │ ├── ResampleSoundsNode.py │ │ │ ├── ReverseSoundsNode.py │ │ │ ├── RotateSpectrumNode.py │ │ │ ├── ScaleIntensityNode.py │ │ │ ├── VisualizeSpectrumNode.py │ │ │ ├── VisualizeVoiceNode.backup.py │ │ │ ├── VisualizeVoiceNode.py │ │ │ ├── VisualizeVoiceNodeTest.py │ │ │ ├── VoicelabNode.py │ │ │ ├── __init__.py │ │ │ ├── formanttmpfile.txt │ │ │ ├── parselmouth_cc.txt │ │ │ └── tmpfile.txt │ │ └── __init__.py │ ├── voicelab_script.backup.py │ └── voicelab_script.py ├── __init__.py ├── favicon.ico ├── tmp.wav ├── voicelab.py ├── voicelab_osx.spec ├── voicelab_ubuntu.spec └── voicelab_windows.spec └── tests ├── __init__.py ├── assets ├── audio │ ├── Prolific Data.ods │ ├── broken_file │ │ └── broken_file..wav │ ├── demographics.csv │ ├── female_mono_a.wav │ ├── female_mono_e.wav │ ├── female_mono_hi.wav │ ├── female_mono_i.wav │ ├── female_mono_o.wav │ ├── female_mono_sentence.wav │ ├── female_mono_u.wav │ ├── female_stereo_a.wav │ ├── female_stereo_e.wav │ ├── female_stereo_hi.wav │ ├── female_stereo_i.wav │ ├── female_stereo_o.wav │ ├── female_stereo_sentence.wav │ ├── female_stereo_u.wav │ ├── male_mono_a.wav │ ├── male_mono_e.wav │ ├── male_mono_hi.wav │ ├── male_mono_i.wav │ ├── male_mono_o.wav │ ├── male_mono_sentence.wav │ ├── male_mono_u.wav │ ├── male_stereo_a.wav │ ├── male_stereo_e.wav │ ├── male_stereo_hi.wav │ ├── male_stereo_i.wav │ ├── male_stereo_o.wav │ ├── male_stereo_sentence.wav │ ├── male_stereo_u.wav │ ├── max_formant.csv │ └── pitch_bounds.csv └── praat_scripts │ ├── max_formant.psc │ ├── pitch_bounds.psc │ └── praatF0.praat ├── test_ReverseSoundsNode.py └── test_VoiceLabNode.py /.gitattributes: -------------------------------------------------------------------------------- 1 | * text=auto eol=lf 2 | *.{cmd,[cC][mM][dD]} text eol=crlf 3 | *.{bat,[bB][aA][tT]} text eol=crlf -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/bug_report.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Bug report 3 | about: Create a report to help us improve 4 | title: '' 5 | labels: '' 6 | assignees: '' 7 | 8 | --- 9 | 10 | **Describe the bug** 11 | A clear and concise description of what the bug is. 12 | 13 | **To Reproduce** 14 | Steps to reproduce the behavior: 15 | 1. Go to '...' 16 | 2. Click on '....' 17 | 3. Scroll down to '....' 18 | 4. See error 19 | 20 | **Expected behavior** 21 | A clear and concise description of what you expected to happen. 22 | 23 | **Screenshots** 24 | If applicable, add screenshots to help explain your problem. 25 | 26 | **Desktop (please complete the following information):** 27 | - OS: [e.g. iOS] 28 | - Browser [e.g. chrome, safari] 29 | - Version [e.g. 22] 30 | 31 | **Smartphone (please complete the following information):** 32 | - Device: [e.g. iPhone6] 33 | - OS: [e.g. iOS8.1] 34 | - Browser [e.g. stock browser, safari] 35 | - Version [e.g. 22] 36 | 37 | **Additional context** 38 | Add any other context about the problem here. 39 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/feature_request.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Feature request 3 | about: Suggest an idea for this project 4 | title: '' 5 | labels: '' 6 | assignees: '' 7 | 8 | --- 9 | 10 | **Is your feature request related to a problem? Please describe.** 11 | A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] 12 | 13 | **Describe the solution you'd like** 14 | A clear and concise description of what you want to happen. 15 | 16 | **Describe alternatives you've considered** 17 | A clear and concise description of any alternative solutions or features you've considered. 18 | 19 | **Additional context** 20 | Add any other context or screenshots about the feature request here. 21 | -------------------------------------------------------------------------------- /.github/dependabot.yml: -------------------------------------------------------------------------------- 1 | # To get started with Dependabot version updates, you'll need to specify which 2 | # package ecosystems to update and where the package manifests are located. 3 | # Please see the documentation for all configuration options: 4 | # https://docs.github.com/github/administering-a-repository/configuration-options-for-dependency-updates 5 | 6 | version: 2 7 | updates: 8 | - package-ecosystem: "pip" # See documentation for possible values 9 | directory: "/" # Location of package manifests 10 | schedule: 11 | interval: "weekly" 12 | -------------------------------------------------------------------------------- /.github/workflows/documentation.yaml: -------------------------------------------------------------------------------- 1 | name: Docs 2 | on: [push, pull_request, workflow_dispatch] 3 | permissions: 4 | contents: write 5 | jobs: 6 | docs: 7 | runs-on: ubuntu-latest 8 | steps: 9 | - uses: actions/checkout@v3 10 | - uses: actions/setup-python@v3 11 | - name: Install dependencies 12 | run: | 13 | pip install sphinx sphinx_material 14 | - name: Upgrade dependencies 15 | run: pip install --upgrade sphinx sphinx_rtd_theme myst-parser 16 | - name: Sphinx build 17 | run: | 18 | sphinx-build docs/_sources _build 19 | - name: Deploy 20 | uses: peaceiris/actions-gh-pages@v3 21 | if: ${{ github.event_name == 'push' && github.ref == 'refs/heads/main' }} 22 | with: 23 | publish_branch: gh-pages 24 | github_token: ${{ secrets.GITHUB_TOKEN }} 25 | publish_dir: _build/ 26 | force_orphan: true 27 | -------------------------------------------------------------------------------- /2.0.0: -------------------------------------------------------------------------------- 1 | Using version ^1.2.2 for sphinx-rtd-theme 2 | 3 | Updating dependencies 4 | Resolving dependencies... 5 | -------------------------------------------------------------------------------- /SECURITY.md: -------------------------------------------------------------------------------- 1 | # Security Policy 2 | 3 | ## Supported Versions 4 | 5 | Use this section to tell people about which versions of your project are 6 | currently being supported with security updates. 7 | 8 | | Version | Supported | 9 | | ------- | ------------------ | 10 | | 2.0.0 | :white_check_mark: | 11 | 12 | ## Reporting a Vulnerability 13 | 14 | Use this section to tell people how to report a vulnerability. 15 | 16 | Tell them where to go, how often they can expect to get an update on a 17 | reported vulnerability, what to expect if the vulnerability is accepted or 18 | declined, etc. 19 | -------------------------------------------------------------------------------- /docs/.buildinfo: -------------------------------------------------------------------------------- 1 | # Sphinx build info version 1 2 | # This file hashes the configuration used when building these files. When it is not found, a full rebuild will be done. 3 | config: b0ae62c733e4c2ae6657d52e24e79abd 4 | tags: 645f666f9bcd5a90fca523b33c5a78b7 5 | -------------------------------------------------------------------------------- /docs/.doctrees/environment.pickle: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Voice-Lab/VoiceLab/7d34cac2e21803b543355bbd03d346f3ea82c5d4/docs/.doctrees/environment.pickle -------------------------------------------------------------------------------- /docs/.doctrees/index.doctree: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Voice-Lab/VoiceLab/7d34cac2e21803b543355bbd03d346f3ea82c5d4/docs/.doctrees/index.doctree -------------------------------------------------------------------------------- /docs/_images/LoadVoices.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Voice-Lab/VoiceLab/7d34cac2e21803b543355bbd03d346f3ea82c5d4/docs/_images/LoadVoices.png -------------------------------------------------------------------------------- /docs/_images/output_window.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Voice-Lab/VoiceLab/7d34cac2e21803b543355bbd03d346f3ea82c5d4/docs/_images/output_window.png -------------------------------------------------------------------------------- /docs/_images/power_spectrum.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Voice-Lab/VoiceLab/7d34cac2e21803b543355bbd03d346f3ea82c5d4/docs/_images/power_spectrum.png -------------------------------------------------------------------------------- /docs/_images/settings.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Voice-Lab/VoiceLab/7d34cac2e21803b543355bbd03d346f3ea82c5d4/docs/_images/settings.png -------------------------------------------------------------------------------- /docs/_images/spectrogram.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Voice-Lab/VoiceLab/7d34cac2e21803b543355bbd03d346f3ea82c5d4/docs/_images/spectrogram.png -------------------------------------------------------------------------------- /docs/_sources/conf.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | 3 | import sys, os 4 | import sphinx_rtd_theme 5 | #import sphinx_pdj_theme 6 | #import sphinx_material 7 | 8 | 9 | sys.path.insert(0, os.path.abspath(os.path.join('..', '..'))) 10 | 11 | extensions = [ 12 | 'sphinx_rtd_theme', 13 | 'sphinx.ext.autodoc' 14 | ] 15 | 16 | autodoc_default_flags = ['members', 'undoc-members', 'private-members', 'show-inheritance'] 17 | html_theme = 'sphinx_rtd_theme' 18 | todo_include_todos = False 19 | templates_path = ['_templates'] 20 | source_suffix = '.rst' 21 | master_doc = 'index' 22 | exclude_patterns = [] 23 | add_function_parentheses = True 24 | add_module_names = True 25 | 26 | project = u'VoiceLab' 27 | copyright = u'2023, David R Feinberg' 28 | 29 | version = '2.2.0' 30 | release = '2.2.0' 31 | 32 | 33 | html_title = "VoiceLab: Automated Reproducible Acoustic Analysis" 34 | html_favicon = 'favicon.ico' 35 | html_static_path = ['../_static', '../_static/images', '../_images'] 36 | html_domain_indices = False 37 | html_use_index = False 38 | html_show_sphinx = False 39 | htmlhelp_basename = 'VoiceLab' 40 | html_show_sourcelink = False 41 | 42 | html_theme_options = { 43 | 'collapse_navigation': True, 44 | 'sticky_navigation': True, 45 | 'navigation_depth': 3, 46 | 'includehidden': False, 47 | 'titles_only': False 48 | } 49 | 50 | 51 | -------------------------------------------------------------------------------- /docs/_sources/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Voice-Lab/VoiceLab/7d34cac2e21803b543355bbd03d346f3ea82c5d4/docs/_sources/favicon.ico -------------------------------------------------------------------------------- /docs/_static/css/badge_only.css: -------------------------------------------------------------------------------- 1 | .fa:before{-webkit-font-smoothing:antialiased}.clearfix{*zoom:1}.clearfix:after,.clearfix:before{display:table;content:""}.clearfix:after{clear:both}@font-face{font-family:FontAwesome;font-style:normal;font-weight:400;src:url(fonts/fontawesome-webfont.eot?674f50d287a8c48dc19ba404d20fe713?#iefix) format("embedded-opentype"),url(fonts/fontawesome-webfont.woff2?af7ae505a9eed503f8b8e6982036873e) format("woff2"),url(fonts/fontawesome-webfont.woff?fee66e712a8a08eef5805a46892932ad) format("woff"),url(fonts/fontawesome-webfont.ttf?b06871f281fee6b241d60582ae9369b9) format("truetype"),url(fonts/fontawesome-webfont.svg?912ec66d7572ff821749319396470bde#FontAwesome) format("svg")}.fa:before{font-family:FontAwesome;font-style:normal;font-weight:400;line-height:1}.fa:before,a .fa{text-decoration:inherit}.fa:before,a .fa,li .fa{display:inline-block}li .fa-large:before{width:1.875em}ul.fas{list-style-type:none;margin-left:2em;text-indent:-.8em}ul.fas li .fa{width:.8em}ul.fas li .fa-large:before{vertical-align:baseline}.fa-book:before,.icon-book:before{content:"\f02d"}.fa-caret-down:before,.icon-caret-down:before{content:"\f0d7"}.fa-caret-up:before,.icon-caret-up:before{content:"\f0d8"}.fa-caret-left:before,.icon-caret-left:before{content:"\f0d9"}.fa-caret-right:before,.icon-caret-right:before{content:"\f0da"}.rst-versions{position:fixed;bottom:0;left:0;width:300px;color:#fcfcfc;background:#1f1d1d;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;z-index:400}.rst-versions a{color:#2980b9;text-decoration:none}.rst-versions .rst-badge-small{display:none}.rst-versions .rst-current-version{padding:12px;background-color:#272525;display:block;text-align:right;font-size:90%;cursor:pointer;color:#27ae60}.rst-versions .rst-current-version:after{clear:both;content:"";display:block}.rst-versions .rst-current-version .fa{color:#fcfcfc}.rst-versions .rst-current-version .fa-book,.rst-versions .rst-current-version .icon-book{float:left}.rst-versions .rst-current-version.rst-out-of-date{background-color:#e74c3c;color:#fff}.rst-versions .rst-current-version.rst-active-old-version{background-color:#f1c40f;color:#000}.rst-versions.shift-up{height:auto;max-height:100%;overflow-y:scroll}.rst-versions.shift-up .rst-other-versions{display:block}.rst-versions .rst-other-versions{font-size:90%;padding:12px;color:grey;display:none}.rst-versions .rst-other-versions hr{display:block;height:1px;border:0;margin:20px 0;padding:0;border-top:1px solid #413d3d}.rst-versions .rst-other-versions dd{display:inline-block;margin:0}.rst-versions .rst-other-versions dd a{display:inline-block;padding:6px;color:#fcfcfc}.rst-versions.rst-badge{width:auto;bottom:20px;right:20px;left:auto;border:none;max-width:300px;max-height:90%}.rst-versions.rst-badge .fa-book,.rst-versions.rst-badge .icon-book{float:none;line-height:30px}.rst-versions.rst-badge.shift-up .rst-current-version{text-align:right}.rst-versions.rst-badge.shift-up .rst-current-version .fa-book,.rst-versions.rst-badge.shift-up .rst-current-version .icon-book{float:left}.rst-versions.rst-badge>.rst-current-version{width:auto;height:30px;line-height:30px;padding:0 6px;display:block;text-align:center}@media screen and (max-width:768px){.rst-versions{width:85%;display:none}.rst-versions.shift{display:block}} -------------------------------------------------------------------------------- /docs/_static/css/fonts/Roboto-Slab-Bold.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Voice-Lab/VoiceLab/7d34cac2e21803b543355bbd03d346f3ea82c5d4/docs/_static/css/fonts/Roboto-Slab-Bold.woff -------------------------------------------------------------------------------- /docs/_static/css/fonts/Roboto-Slab-Bold.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Voice-Lab/VoiceLab/7d34cac2e21803b543355bbd03d346f3ea82c5d4/docs/_static/css/fonts/Roboto-Slab-Bold.woff2 -------------------------------------------------------------------------------- /docs/_static/css/fonts/Roboto-Slab-Regular.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Voice-Lab/VoiceLab/7d34cac2e21803b543355bbd03d346f3ea82c5d4/docs/_static/css/fonts/Roboto-Slab-Regular.woff -------------------------------------------------------------------------------- /docs/_static/css/fonts/Roboto-Slab-Regular.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Voice-Lab/VoiceLab/7d34cac2e21803b543355bbd03d346f3ea82c5d4/docs/_static/css/fonts/Roboto-Slab-Regular.woff2 -------------------------------------------------------------------------------- /docs/_static/css/fonts/fontawesome-webfont.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Voice-Lab/VoiceLab/7d34cac2e21803b543355bbd03d346f3ea82c5d4/docs/_static/css/fonts/fontawesome-webfont.eot -------------------------------------------------------------------------------- /docs/_static/css/fonts/fontawesome-webfont.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Voice-Lab/VoiceLab/7d34cac2e21803b543355bbd03d346f3ea82c5d4/docs/_static/css/fonts/fontawesome-webfont.ttf -------------------------------------------------------------------------------- /docs/_static/css/fonts/fontawesome-webfont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Voice-Lab/VoiceLab/7d34cac2e21803b543355bbd03d346f3ea82c5d4/docs/_static/css/fonts/fontawesome-webfont.woff -------------------------------------------------------------------------------- /docs/_static/css/fonts/fontawesome-webfont.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Voice-Lab/VoiceLab/7d34cac2e21803b543355bbd03d346f3ea82c5d4/docs/_static/css/fonts/fontawesome-webfont.woff2 -------------------------------------------------------------------------------- /docs/_static/css/fonts/lato-bold-italic.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Voice-Lab/VoiceLab/7d34cac2e21803b543355bbd03d346f3ea82c5d4/docs/_static/css/fonts/lato-bold-italic.woff -------------------------------------------------------------------------------- /docs/_static/css/fonts/lato-bold-italic.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Voice-Lab/VoiceLab/7d34cac2e21803b543355bbd03d346f3ea82c5d4/docs/_static/css/fonts/lato-bold-italic.woff2 -------------------------------------------------------------------------------- /docs/_static/css/fonts/lato-bold.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Voice-Lab/VoiceLab/7d34cac2e21803b543355bbd03d346f3ea82c5d4/docs/_static/css/fonts/lato-bold.woff -------------------------------------------------------------------------------- /docs/_static/css/fonts/lato-bold.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Voice-Lab/VoiceLab/7d34cac2e21803b543355bbd03d346f3ea82c5d4/docs/_static/css/fonts/lato-bold.woff2 -------------------------------------------------------------------------------- /docs/_static/css/fonts/lato-normal-italic.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Voice-Lab/VoiceLab/7d34cac2e21803b543355bbd03d346f3ea82c5d4/docs/_static/css/fonts/lato-normal-italic.woff -------------------------------------------------------------------------------- /docs/_static/css/fonts/lato-normal-italic.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Voice-Lab/VoiceLab/7d34cac2e21803b543355bbd03d346f3ea82c5d4/docs/_static/css/fonts/lato-normal-italic.woff2 -------------------------------------------------------------------------------- /docs/_static/css/fonts/lato-normal.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Voice-Lab/VoiceLab/7d34cac2e21803b543355bbd03d346f3ea82c5d4/docs/_static/css/fonts/lato-normal.woff -------------------------------------------------------------------------------- /docs/_static/css/fonts/lato-normal.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Voice-Lab/VoiceLab/7d34cac2e21803b543355bbd03d346f3ea82c5d4/docs/_static/css/fonts/lato-normal.woff2 -------------------------------------------------------------------------------- /docs/_static/documentation_options.js: -------------------------------------------------------------------------------- 1 | var DOCUMENTATION_OPTIONS = { 2 | URL_ROOT: document.getElementById("documentation_options").getAttribute('data-url_root'), 3 | VERSION: '2.2.0', 4 | LANGUAGE: 'en', 5 | COLLAPSE_INDEX: false, 6 | BUILDER: 'html', 7 | FILE_SUFFIX: '.html', 8 | LINK_SUFFIX: '.html', 9 | HAS_SOURCE: true, 10 | SOURCELINK_SUFFIX: '.txt', 11 | NAVIGATION_WITH_KEYS: false, 12 | SHOW_SEARCH_SUMMARY: true, 13 | ENABLE_SEARCH_SHORTCUTS: true, 14 | }; -------------------------------------------------------------------------------- /docs/_static/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Voice-Lab/VoiceLab/7d34cac2e21803b543355bbd03d346f3ea82c5d4/docs/_static/favicon.ico -------------------------------------------------------------------------------- /docs/_static/file.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Voice-Lab/VoiceLab/7d34cac2e21803b543355bbd03d346f3ea82c5d4/docs/_static/file.png -------------------------------------------------------------------------------- /docs/_static/fonts/material-icons.css: -------------------------------------------------------------------------------- 1 | /*! 2 | * Licensed under the Apache License, Version 2.0 (the "License"); you may not 3 | * use this file except in compliance with the License. You may obtain a copy 4 | * of the License at: 5 | * 6 | * http://www.apache.org/licenses/LICENSE-2.0 7 | * 8 | * UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING, SOFTWARE 9 | * DISTRIBUTED UNDER THE LICENSE IS DISTRIBUTED ON AN "AS IS" BASIS, 10 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. 11 | * SEE THE LICENSE FOR THE SPECIFIC LANGUAGE GOVERNING PERMISSIONS AND 12 | * LIMITATIONS UNDER THE LICENSE. 13 | */@font-face{font-display:swap;font-family:"Material Icons";font-style:normal;font-weight:400;src:local("Material Icons"),local("MaterialIcons-Regular"),url("specimen/MaterialIcons-Regular.woff2") format("woff2"),url("specimen/MaterialIcons-Regular.woff") format("woff"),url("specimen/MaterialIcons-Regular.ttf") format("truetype")} -------------------------------------------------------------------------------- /docs/_static/fonts/specimen/FontAwesome.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Voice-Lab/VoiceLab/7d34cac2e21803b543355bbd03d346f3ea82c5d4/docs/_static/fonts/specimen/FontAwesome.ttf -------------------------------------------------------------------------------- /docs/_static/fonts/specimen/FontAwesome.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Voice-Lab/VoiceLab/7d34cac2e21803b543355bbd03d346f3ea82c5d4/docs/_static/fonts/specimen/FontAwesome.woff -------------------------------------------------------------------------------- /docs/_static/fonts/specimen/FontAwesome.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Voice-Lab/VoiceLab/7d34cac2e21803b543355bbd03d346f3ea82c5d4/docs/_static/fonts/specimen/FontAwesome.woff2 -------------------------------------------------------------------------------- /docs/_static/fonts/specimen/MaterialIcons-Regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Voice-Lab/VoiceLab/7d34cac2e21803b543355bbd03d346f3ea82c5d4/docs/_static/fonts/specimen/MaterialIcons-Regular.ttf -------------------------------------------------------------------------------- /docs/_static/fonts/specimen/MaterialIcons-Regular.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Voice-Lab/VoiceLab/7d34cac2e21803b543355bbd03d346f3ea82c5d4/docs/_static/fonts/specimen/MaterialIcons-Regular.woff -------------------------------------------------------------------------------- /docs/_static/fonts/specimen/MaterialIcons-Regular.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Voice-Lab/VoiceLab/7d34cac2e21803b543355bbd03d346f3ea82c5d4/docs/_static/fonts/specimen/MaterialIcons-Regular.woff2 -------------------------------------------------------------------------------- /docs/_static/images/favicon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Voice-Lab/VoiceLab/7d34cac2e21803b543355bbd03d346f3ea82c5d4/docs/_static/images/favicon.png -------------------------------------------------------------------------------- /docs/_static/images/icons/bitbucket.1b09e088.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /docs/_static/images/icons/bitbucket.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /docs/_static/images/icons/github.f0b8504a.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /docs/_static/images/icons/github.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /docs/_static/images/icons/gitlab.6dd19c00.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /docs/_static/images/icons/gitlab.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /docs/_static/javascripts/lunr/lunr.ja.js: -------------------------------------------------------------------------------- 1 | !function(e,r){"function"==typeof define&&define.amd?define(r):"object"==typeof exports?module.exports=r():r()(e.lunr)}(this,function(){return function(m){if(void 0===m)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===m.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");var l="2"==m.version[0];m.ja=function(){this.pipeline.reset(),this.pipeline.add(m.ja.trimmer,m.ja.stopWordFilter,m.ja.stemmer),l?this.tokenizer=m.ja.tokenizer:(m.tokenizer&&(m.tokenizer=m.ja.tokenizer),this.tokenizerFn&&(this.tokenizerFn=m.ja.tokenizer))};var j=new m.TinySegmenter;m.ja.tokenizer=function(e){var r,t,i,n,o,s,p,a,u;if(!arguments.length||null==e||null==e)return[];if(Array.isArray(e))return e.map(function(e){return l?new m.Token(e.toLowerCase()):e.toLowerCase()});for(r=(t=e.toString().toLowerCase().replace(/^\s+/,"")).length-1;0<=r;r--)if(/\S/.test(t.charAt(r))){t=t.substring(0,r+1);break}for(o=[],i=t.length,p=a=0;a<=i;a++)if(s=a-p,t.charAt(a).match(/\s/)||a==i){if(0",d.insertBefore(c.lastChild,d.firstChild)}function d(){var a=t.elements;return"string"==typeof a?a.split(" "):a}function e(a,b){var c=t.elements;"string"!=typeof c&&(c=c.join(" ")),"string"!=typeof a&&(a=a.join(" ")),t.elements=c+" "+a,j(b)}function f(a){var b=s[a[q]];return b||(b={},r++,a[q]=r,s[r]=b),b}function g(a,c,d){if(c||(c=b),l)return c.createElement(a);d||(d=f(c));var e;return e=d.cache[a]?d.cache[a].cloneNode():p.test(a)?(d.cache[a]=d.createElem(a)).cloneNode():d.createElem(a),!e.canHaveChildren||o.test(a)||e.tagUrn?e:d.frag.appendChild(e)}function h(a,c){if(a||(a=b),l)return a.createDocumentFragment();c=c||f(a);for(var e=c.frag.cloneNode(),g=0,h=d(),i=h.length;i>g;g++)e.createElement(h[g]);return e}function i(a,b){b.cache||(b.cache={},b.createElem=a.createElement,b.createFrag=a.createDocumentFragment,b.frag=b.createFrag()),a.createElement=function(c){return t.shivMethods?g(c,a,b):b.createElem(c)},a.createDocumentFragment=Function("h,f","return function(){var n=f.cloneNode(),c=n.createElement;h.shivMethods&&("+d().join().replace(/[\w\-:]+/g,function(a){return b.createElem(a),b.frag.createElement(a),'c("'+a+'")'})+");return n}")(t,b.frag)}function j(a){a||(a=b);var d=f(a);return!t.shivCSS||k||d.hasCSS||(d.hasCSS=!!c(a,"article,aside,dialog,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}mark{background:#FF0;color:#000}template{display:none}")),l||i(a,d),a}var k,l,m="3.7.3-pre",n=a.html5||{},o=/^<|^(?:button|map|select|textarea|object|iframe|option|optgroup)$/i,p=/^(?:a|b|code|div|fieldset|h1|h2|h3|h4|h5|h6|i|label|li|ol|p|q|span|strong|style|table|tbody|td|th|tr|ul)$/i,q="_html5shiv",r=0,s={};!function(){try{var a=b.createElement("a");a.innerHTML="",k="hidden"in a,l=1==a.childNodes.length||function(){b.createElement("a");var a=b.createDocumentFragment();return"undefined"==typeof a.cloneNode||"undefined"==typeof a.createDocumentFragment||"undefined"==typeof a.createElement}()}catch(c){k=!0,l=!0}}();var t={elements:n.elements||"abbr article aside audio bdi canvas data datalist details dialog figcaption figure footer header hgroup main mark meter nav output picture progress section summary template time video",version:m,shivCSS:n.shivCSS!==!1,supportsUnknownElements:l,shivMethods:n.shivMethods!==!1,type:"default",shivDocument:j,createElement:g,createDocumentFragment:h,addElements:e};a.html5=t,j(b),"object"==typeof module&&module.exports&&(module.exports=t)}("undefined"!=typeof window?window:this,document); -------------------------------------------------------------------------------- /docs/_static/material.css: -------------------------------------------------------------------------------- 1 | .dropdown { 2 | width: 125px; 3 | vertical-align: middle; 4 | } 5 | 6 | .dropdownbutton { 7 | color: inherit; 8 | font-weight: 700; 9 | font-size: .65rem; 10 | 11 | } 12 | 13 | .dropdown-content { 14 | display: none; 15 | position: absolute; 16 | z-index: 1; 17 | background-color: inherit; 18 | } 19 | 20 | .dropdown-content a { 21 | display: block; 22 | width: 125px; 23 | margin: 8px; 24 | font-size: .65rem; 25 | font-weight: 200; 26 | } 27 | 28 | /* Change color of dropdown links on hover */ 29 | .dropdown-content a:hover {} 30 | 31 | /* Show the dropdown menu on hover */ 32 | .dropdown:hover .dropdown-content {display: block;} 33 | 34 | /* Change the background color of the dropdown button when the dropdown content is shown */ 35 | .dropdown:hover .dropbtn {} -------------------------------------------------------------------------------- /docs/_static/minus.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Voice-Lab/VoiceLab/7d34cac2e21803b543355bbd03d346f3ea82c5d4/docs/_static/minus.png -------------------------------------------------------------------------------- /docs/_static/plus.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Voice-Lab/VoiceLab/7d34cac2e21803b543355bbd03d346f3ea82c5d4/docs/_static/plus.png -------------------------------------------------------------------------------- /docs/objects.inv: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Voice-Lab/VoiceLab/7d34cac2e21803b543355bbd03d346f3ea82c5d4/docs/objects.inv -------------------------------------------------------------------------------- /long_description: -------------------------------------------------------------------------------- 1 | #VoiceLab: Fully Automated Reproducible Acoustical Analysis 2 | VoiceLab is an automated voice analysis software. 3 | What this software does is allow you to measure, 4 | manipulate, and visualize many voices at once, without messing with 5 | analysis parameters. You can also save all of 6 | your data, analysis parameters, manipulated voices, and full colour 7 | spectrograms and power spectra, with the press of one button. 8 | 9 | 10 | # VoiceLab 11 | VoiceLab is written in Python and relies heavily on a package called 12 | parselmouth-praat. parselmouth-praat is a Python package that 13 | essentially turns Praat\'s source code written in C and C++ into a 14 | Pythonic interface. What that means is that any praat measurement in 15 | this software is using actual Praat source code, so you can trust the 16 | underlying algorithms. VoiceLab also contains several features from 17 | Voice Sauce, another amazing acoustic analysis software. 18 | 19 | Voice Lab figures out all of the analysis 20 | parameters for you, but you can always use your own, and these are the 21 | same parameters as in Praat, and they do the exact same thing because it 22 | is Praat\'s source code powering everything. That means if you are a 23 | beginner an expert, or anything in-between, you can use this software to 24 | automate your acoustical analyses. 25 | 26 | All of the code is open source and available on our GitHub repository, 27 | so if this manual isn\'t in-depth enough, and you want to see exactly 28 | what\'s going on, go for it. It is under the MIT license, so you are 29 | free to do what you like with the software as long as you give us 30 | credit. 31 | -------------------------------------------------------------------------------- /pyproject.toml: -------------------------------------------------------------------------------- 1 | [tool.poetry] 2 | name = "voicelab" 3 | version = "2.0.0" 4 | description = "Automated Reproducible Voice Analysis" 5 | authors = ["David Feinberg "] 6 | license = "MIT" 7 | readme = "README.md" 8 | 9 | [tool.poetry.dependencies] 10 | python = ">=3.9, <=3.11.10" 11 | llvmlite = "=0.42.0" 12 | numpy = ">=1.22" 13 | pyqt5-qt5 = ">=5.15.3" 14 | QDarkStyle = "3.2.3" 15 | praat-parselmouth = ">=0.4.1" 16 | librosa = ">=0.10.1" 17 | openpyxl = ">=3.1.2" 18 | seaborn = ">=0.13.2" 19 | 20 | [tool.poetry.group.dev.dependencies] 21 | PyInstaller = ">=5.10,<7.0" 22 | Sphinx = "<8.0.0" 23 | sphinx-autodoc2 = ">=0.4.2" 24 | sphinx_rtd_theme = ">=0.1.0" 25 | pytest = ">=7.3.0" 26 | myst = "^1.0.4" 27 | myst-parser = ">=2,<4" 28 | 29 | [build-system] 30 | requires = ["poetry-core"] 31 | build-backend = "poetry.core.masonry.api" 32 | 33 | [tool.poetry.scripts] 34 | voicelab = "voicelab.src.Voicelab.voicelab_script:main" 35 | -------------------------------------------------------------------------------- /voicelab/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Voice-Lab/VoiceLab/7d34cac2e21803b543355bbd03d346f3ea82c5d4/voicelab/__init__.py -------------------------------------------------------------------------------- /voicelab/docs/.buildinfo: -------------------------------------------------------------------------------- 1 | # Sphinx build info version 1 2 | # This file hashes the configuration used when building these files. When it is not found, a full rebuild will be done. 3 | config: 1f514f057857f75568762f21eec1bbf5 4 | tags: 645f666f9bcd5a90fca523b33c5a78b7 5 | -------------------------------------------------------------------------------- /voicelab/docs/.doctrees/environment.pickle: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Voice-Lab/VoiceLab/7d34cac2e21803b543355bbd03d346f3ea82c5d4/voicelab/docs/.doctrees/environment.pickle -------------------------------------------------------------------------------- /voicelab/docs/.doctrees/index.doctree: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Voice-Lab/VoiceLab/7d34cac2e21803b543355bbd03d346f3ea82c5d4/voicelab/docs/.doctrees/index.doctree -------------------------------------------------------------------------------- /voicelab/docs/.nojekyll: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /voicelab/docs/_images/LoadVoices.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Voice-Lab/VoiceLab/7d34cac2e21803b543355bbd03d346f3ea82c5d4/voicelab/docs/_images/LoadVoices.png -------------------------------------------------------------------------------- /voicelab/docs/_images/output_window.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Voice-Lab/VoiceLab/7d34cac2e21803b543355bbd03d346f3ea82c5d4/voicelab/docs/_images/output_window.png -------------------------------------------------------------------------------- /voicelab/docs/_images/power_spectrum.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Voice-Lab/VoiceLab/7d34cac2e21803b543355bbd03d346f3ea82c5d4/voicelab/docs/_images/power_spectrum.png -------------------------------------------------------------------------------- /voicelab/docs/_images/settings.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Voice-Lab/VoiceLab/7d34cac2e21803b543355bbd03d346f3ea82c5d4/voicelab/docs/_images/settings.png -------------------------------------------------------------------------------- /voicelab/docs/_images/spectrogram.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Voice-Lab/VoiceLab/7d34cac2e21803b543355bbd03d346f3ea82c5d4/voicelab/docs/_images/spectrogram.png -------------------------------------------------------------------------------- /voicelab/docs/_sources/conf.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | 3 | import sys, os 4 | #import sphinx_rtd_theme 5 | #import sphinx_pdj_theme 6 | import sphinx_material 7 | 8 | 9 | sys.path.insert(0, os.path.abspath(os.path.join('..', '..'))) 10 | 11 | extensions = [ 12 | #'sphinx_rtd_theme', 13 | 'sphinx.ext.autodoc' 14 | ] 15 | 16 | #html_theme = "sphinx_rtd_theme" 17 | #html_theme = 'sphinx_pdj_theme' 18 | html_theme = 'sphinx_material' 19 | #htm_theme_path = [sphinx_pdj_theme.get_html_theme_path()] 20 | 21 | 22 | todo_include_todos = True 23 | templates_path = ['_templates'] 24 | source_suffix = '.rst' 25 | master_doc = 'index' 26 | exclude_patterns = [] 27 | add_function_parentheses = True 28 | add_module_names = True 29 | # A list of ignored prefixes for module index sorting. 30 | #modindex_common_prefix = [] 31 | 32 | project = u'VoiceLab' 33 | copyright = u'2022, David R Feinberg' 34 | 35 | version = '1.3.0' 36 | release = '1.3.0' 37 | 38 | # -- Options for HTML output --------------------------------------------------- 39 | 40 | #html_theme = "sphinx_rtd_theme" 41 | html_title = "VoiceLab: Automated Reproducible Acoustic Analysis" 42 | #html_short_title = None 43 | #html_logo = None 44 | html_favicon = 'favicon.ico' 45 | html_static_path = ['_static', '_static/images', '_images'] 46 | html_domain_indices = False 47 | html_use_index = False 48 | html_show_sphinx = False 49 | htmlhelp_basename = 'VoiceLab' 50 | html_show_sourcelink = False 51 | 52 | html_theme_options = { 53 | 'collapse_navigation': True, 54 | 'sticky_navigation': True, 55 | 'navigation_depth': 3, 56 | 'includehidden': False, 57 | 'titles_only': False 58 | } 59 | -------------------------------------------------------------------------------- /voicelab/docs/_sources/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Voice-Lab/VoiceLab/7d34cac2e21803b543355bbd03d346f3ea82c5d4/voicelab/docs/_sources/favicon.ico -------------------------------------------------------------------------------- /voicelab/docs/_static/LoadVoices.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Voice-Lab/VoiceLab/7d34cac2e21803b543355bbd03d346f3ea82c5d4/voicelab/docs/_static/LoadVoices.png -------------------------------------------------------------------------------- /voicelab/docs/_static/ajax-loader.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Voice-Lab/VoiceLab/7d34cac2e21803b543355bbd03d346f3ea82c5d4/voicelab/docs/_static/ajax-loader.gif -------------------------------------------------------------------------------- /voicelab/docs/_static/comment-bright.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Voice-Lab/VoiceLab/7d34cac2e21803b543355bbd03d346f3ea82c5d4/voicelab/docs/_static/comment-bright.png -------------------------------------------------------------------------------- /voicelab/docs/_static/comment-close.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Voice-Lab/VoiceLab/7d34cac2e21803b543355bbd03d346f3ea82c5d4/voicelab/docs/_static/comment-close.png -------------------------------------------------------------------------------- /voicelab/docs/_static/comment.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Voice-Lab/VoiceLab/7d34cac2e21803b543355bbd03d346f3ea82c5d4/voicelab/docs/_static/comment.png -------------------------------------------------------------------------------- /voicelab/docs/_static/css/badge_only.css: -------------------------------------------------------------------------------- 1 | .fa:before{-webkit-font-smoothing:antialiased}.clearfix{*zoom:1}.clearfix:before,.clearfix:after{display:table;content:""}.clearfix:after{clear:both}@font-face{font-family:FontAwesome;font-weight:normal;font-style:normal;src:url("../font/fontawesome_webfont.eot");src:url("../font/fontawesome_webfont.eot?#iefix") format("embedded-opentype"),url("../font/fontawesome_webfont.woff") format("woff"),url("../font/fontawesome_webfont.ttf") format("truetype"),url("../font/fontawesome_webfont.svg#FontAwesome") format("svg")}.fa:before{display:inline-block;font-family:FontAwesome;font-style:normal;font-weight:normal;line-height:1;text-decoration:inherit}a .fa{display:inline-block;text-decoration:inherit}li .fa{display:inline-block}li .fa-large:before,li .fa-large:before{width:1.875em}ul.fas{list-style-type:none;margin-left:2em;text-indent:-0.8em}ul.fas li .fa{width:0.8em}ul.fas li .fa-large:before,ul.fas li .fa-large:before{vertical-align:baseline}.fa-book:before{content:""}.icon-book:before{content:""}.fa-caret-down:before{content:""}.icon-caret-down:before{content:""}.fa-caret-up:before{content:""}.icon-caret-up:before{content:""}.fa-caret-left:before{content:""}.icon-caret-left:before{content:""}.fa-caret-right:before{content:""}.icon-caret-right:before{content:""}.rst-versions{position:fixed;bottom:0;left:0;width:300px;color:#fcfcfc;background:#1f1d1d;border-top:solid 10px #343131;font-family:"Lato","proxima-nova","Helvetica Neue",Arial,sans-serif;z-index:400}.rst-versions a{color:#2980B9;text-decoration:none}.rst-versions .rst-badge-small{display:none}.rst-versions .rst-current-version{padding:12px;background-color:#272525;display:block;text-align:right;font-size:90%;cursor:pointer;color:#27AE60;*zoom:1}.rst-versions .rst-current-version:before,.rst-versions .rst-current-version:after{display:table;content:""}.rst-versions .rst-current-version:after{clear:both}.rst-versions .rst-current-version .fa{color:#fcfcfc}.rst-versions .rst-current-version .fa-book{float:left}.rst-versions .rst-current-version .icon-book{float:left}.rst-versions .rst-current-version.rst-out-of-date{background-color:#E74C3C;color:#fff}.rst-versions .rst-current-version.rst-active-old-version{background-color:#F1C40F;color:#000}.rst-versions.shift-up .rst-other-versions{display:block}.rst-versions .rst-other-versions{font-size:90%;padding:12px;color:gray;display:none}.rst-versions .rst-other-versions hr{display:block;height:1px;border:0;margin:20px 0;padding:0;border-top:solid 1px #413d3d}.rst-versions .rst-other-versions dd{display:inline-block;margin:0}.rst-versions .rst-other-versions dd a{display:inline-block;padding:6px;color:#fcfcfc}.rst-versions.rst-badge{width:auto;bottom:20px;right:20px;left:auto;border:none;max-width:300px}.rst-versions.rst-badge .icon-book{float:none}.rst-versions.rst-badge .fa-book{float:none}.rst-versions.rst-badge.shift-up .rst-current-version{text-align:right}.rst-versions.rst-badge.shift-up .rst-current-version .fa-book{float:left}.rst-versions.rst-badge.shift-up .rst-current-version .icon-book{float:left}.rst-versions.rst-badge .rst-current-version{width:auto;height:30px;line-height:30px;padding:0 6px;display:block;text-align:center}@media screen and (max-width: 768px){.rst-versions{width:85%;display:none}.rst-versions.shift{display:block}img{width:100%;height:auto}} 2 | /*# sourceMappingURL=badge_only.css.map */ 3 | -------------------------------------------------------------------------------- /voicelab/docs/_static/css/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Voice-Lab/VoiceLab/7d34cac2e21803b543355bbd03d346f3ea82c5d4/voicelab/docs/_static/css/favicon.ico -------------------------------------------------------------------------------- /voicelab/docs/_static/css/fonts/Roboto-Slab-Bold.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Voice-Lab/VoiceLab/7d34cac2e21803b543355bbd03d346f3ea82c5d4/voicelab/docs/_static/css/fonts/Roboto-Slab-Bold.woff -------------------------------------------------------------------------------- /voicelab/docs/_static/css/fonts/Roboto-Slab-Bold.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Voice-Lab/VoiceLab/7d34cac2e21803b543355bbd03d346f3ea82c5d4/voicelab/docs/_static/css/fonts/Roboto-Slab-Bold.woff2 -------------------------------------------------------------------------------- /voicelab/docs/_static/css/fonts/Roboto-Slab-Regular.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Voice-Lab/VoiceLab/7d34cac2e21803b543355bbd03d346f3ea82c5d4/voicelab/docs/_static/css/fonts/Roboto-Slab-Regular.woff -------------------------------------------------------------------------------- /voicelab/docs/_static/css/fonts/Roboto-Slab-Regular.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Voice-Lab/VoiceLab/7d34cac2e21803b543355bbd03d346f3ea82c5d4/voicelab/docs/_static/css/fonts/Roboto-Slab-Regular.woff2 -------------------------------------------------------------------------------- /voicelab/docs/_static/css/fonts/fontawesome-webfont.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Voice-Lab/VoiceLab/7d34cac2e21803b543355bbd03d346f3ea82c5d4/voicelab/docs/_static/css/fonts/fontawesome-webfont.eot -------------------------------------------------------------------------------- /voicelab/docs/_static/css/fonts/fontawesome-webfont.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Voice-Lab/VoiceLab/7d34cac2e21803b543355bbd03d346f3ea82c5d4/voicelab/docs/_static/css/fonts/fontawesome-webfont.ttf -------------------------------------------------------------------------------- /voicelab/docs/_static/css/fonts/fontawesome-webfont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Voice-Lab/VoiceLab/7d34cac2e21803b543355bbd03d346f3ea82c5d4/voicelab/docs/_static/css/fonts/fontawesome-webfont.woff -------------------------------------------------------------------------------- /voicelab/docs/_static/css/fonts/fontawesome-webfont.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Voice-Lab/VoiceLab/7d34cac2e21803b543355bbd03d346f3ea82c5d4/voicelab/docs/_static/css/fonts/fontawesome-webfont.woff2 -------------------------------------------------------------------------------- /voicelab/docs/_static/css/fonts/lato-bold-italic.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Voice-Lab/VoiceLab/7d34cac2e21803b543355bbd03d346f3ea82c5d4/voicelab/docs/_static/css/fonts/lato-bold-italic.woff -------------------------------------------------------------------------------- /voicelab/docs/_static/css/fonts/lato-bold-italic.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Voice-Lab/VoiceLab/7d34cac2e21803b543355bbd03d346f3ea82c5d4/voicelab/docs/_static/css/fonts/lato-bold-italic.woff2 -------------------------------------------------------------------------------- /voicelab/docs/_static/css/fonts/lato-bold.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Voice-Lab/VoiceLab/7d34cac2e21803b543355bbd03d346f3ea82c5d4/voicelab/docs/_static/css/fonts/lato-bold.woff -------------------------------------------------------------------------------- /voicelab/docs/_static/css/fonts/lato-bold.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Voice-Lab/VoiceLab/7d34cac2e21803b543355bbd03d346f3ea82c5d4/voicelab/docs/_static/css/fonts/lato-bold.woff2 -------------------------------------------------------------------------------- /voicelab/docs/_static/css/fonts/lato-normal-italic.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Voice-Lab/VoiceLab/7d34cac2e21803b543355bbd03d346f3ea82c5d4/voicelab/docs/_static/css/fonts/lato-normal-italic.woff -------------------------------------------------------------------------------- /voicelab/docs/_static/css/fonts/lato-normal-italic.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Voice-Lab/VoiceLab/7d34cac2e21803b543355bbd03d346f3ea82c5d4/voicelab/docs/_static/css/fonts/lato-normal-italic.woff2 -------------------------------------------------------------------------------- /voicelab/docs/_static/css/fonts/lato-normal.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Voice-Lab/VoiceLab/7d34cac2e21803b543355bbd03d346f3ea82c5d4/voicelab/docs/_static/css/fonts/lato-normal.woff -------------------------------------------------------------------------------- /voicelab/docs/_static/css/fonts/lato-normal.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Voice-Lab/VoiceLab/7d34cac2e21803b543355bbd03d346f3ea82c5d4/voicelab/docs/_static/css/fonts/lato-normal.woff2 -------------------------------------------------------------------------------- /voicelab/docs/_static/custom.css: -------------------------------------------------------------------------------- 1 | /* This file intentionally left blank. */ 2 | -------------------------------------------------------------------------------- /voicelab/docs/_static/documentation_options.js: -------------------------------------------------------------------------------- 1 | var DOCUMENTATION_OPTIONS = { 2 | URL_ROOT: document.getElementById("documentation_options").getAttribute('data-url_root'), 3 | VERSION: '1.3.0', 4 | LANGUAGE: 'None', 5 | COLLAPSE_INDEX: false, 6 | BUILDER: 'html', 7 | FILE_SUFFIX: '.html', 8 | LINK_SUFFIX: '.html', 9 | HAS_SOURCE: true, 10 | SOURCELINK_SUFFIX: '.txt', 11 | NAVIGATION_WITH_KEYS: false 12 | }; -------------------------------------------------------------------------------- /voicelab/docs/_static/down-pressed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Voice-Lab/VoiceLab/7d34cac2e21803b543355bbd03d346f3ea82c5d4/voicelab/docs/_static/down-pressed.png -------------------------------------------------------------------------------- /voicelab/docs/_static/down.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Voice-Lab/VoiceLab/7d34cac2e21803b543355bbd03d346f3ea82c5d4/voicelab/docs/_static/down.png -------------------------------------------------------------------------------- /voicelab/docs/_static/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Voice-Lab/VoiceLab/7d34cac2e21803b543355bbd03d346f3ea82c5d4/voicelab/docs/_static/favicon.ico -------------------------------------------------------------------------------- /voicelab/docs/_static/favicon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Voice-Lab/VoiceLab/7d34cac2e21803b543355bbd03d346f3ea82c5d4/voicelab/docs/_static/favicon.png -------------------------------------------------------------------------------- /voicelab/docs/_static/file.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Voice-Lab/VoiceLab/7d34cac2e21803b543355bbd03d346f3ea82c5d4/voicelab/docs/_static/file.png -------------------------------------------------------------------------------- /voicelab/docs/_static/fonts/Inconsolata-Bold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Voice-Lab/VoiceLab/7d34cac2e21803b543355bbd03d346f3ea82c5d4/voicelab/docs/_static/fonts/Inconsolata-Bold.ttf -------------------------------------------------------------------------------- /voicelab/docs/_static/fonts/Inconsolata-Regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Voice-Lab/VoiceLab/7d34cac2e21803b543355bbd03d346f3ea82c5d4/voicelab/docs/_static/fonts/Inconsolata-Regular.ttf -------------------------------------------------------------------------------- /voicelab/docs/_static/fonts/Inconsolata.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Voice-Lab/VoiceLab/7d34cac2e21803b543355bbd03d346f3ea82c5d4/voicelab/docs/_static/fonts/Inconsolata.ttf -------------------------------------------------------------------------------- /voicelab/docs/_static/fonts/Lato-Bold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Voice-Lab/VoiceLab/7d34cac2e21803b543355bbd03d346f3ea82c5d4/voicelab/docs/_static/fonts/Lato-Bold.ttf -------------------------------------------------------------------------------- /voicelab/docs/_static/fonts/Lato-Regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Voice-Lab/VoiceLab/7d34cac2e21803b543355bbd03d346f3ea82c5d4/voicelab/docs/_static/fonts/Lato-Regular.ttf -------------------------------------------------------------------------------- /voicelab/docs/_static/fonts/Lato/lato-bold.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Voice-Lab/VoiceLab/7d34cac2e21803b543355bbd03d346f3ea82c5d4/voicelab/docs/_static/fonts/Lato/lato-bold.eot -------------------------------------------------------------------------------- /voicelab/docs/_static/fonts/Lato/lato-bold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Voice-Lab/VoiceLab/7d34cac2e21803b543355bbd03d346f3ea82c5d4/voicelab/docs/_static/fonts/Lato/lato-bold.ttf -------------------------------------------------------------------------------- /voicelab/docs/_static/fonts/Lato/lato-bold.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Voice-Lab/VoiceLab/7d34cac2e21803b543355bbd03d346f3ea82c5d4/voicelab/docs/_static/fonts/Lato/lato-bold.woff -------------------------------------------------------------------------------- /voicelab/docs/_static/fonts/Lato/lato-bold.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Voice-Lab/VoiceLab/7d34cac2e21803b543355bbd03d346f3ea82c5d4/voicelab/docs/_static/fonts/Lato/lato-bold.woff2 -------------------------------------------------------------------------------- /voicelab/docs/_static/fonts/Lato/lato-bolditalic.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Voice-Lab/VoiceLab/7d34cac2e21803b543355bbd03d346f3ea82c5d4/voicelab/docs/_static/fonts/Lato/lato-bolditalic.eot -------------------------------------------------------------------------------- /voicelab/docs/_static/fonts/Lato/lato-bolditalic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Voice-Lab/VoiceLab/7d34cac2e21803b543355bbd03d346f3ea82c5d4/voicelab/docs/_static/fonts/Lato/lato-bolditalic.ttf -------------------------------------------------------------------------------- /voicelab/docs/_static/fonts/Lato/lato-bolditalic.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Voice-Lab/VoiceLab/7d34cac2e21803b543355bbd03d346f3ea82c5d4/voicelab/docs/_static/fonts/Lato/lato-bolditalic.woff -------------------------------------------------------------------------------- /voicelab/docs/_static/fonts/Lato/lato-bolditalic.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Voice-Lab/VoiceLab/7d34cac2e21803b543355bbd03d346f3ea82c5d4/voicelab/docs/_static/fonts/Lato/lato-bolditalic.woff2 -------------------------------------------------------------------------------- /voicelab/docs/_static/fonts/Lato/lato-italic.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Voice-Lab/VoiceLab/7d34cac2e21803b543355bbd03d346f3ea82c5d4/voicelab/docs/_static/fonts/Lato/lato-italic.eot -------------------------------------------------------------------------------- /voicelab/docs/_static/fonts/Lato/lato-italic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Voice-Lab/VoiceLab/7d34cac2e21803b543355bbd03d346f3ea82c5d4/voicelab/docs/_static/fonts/Lato/lato-italic.ttf -------------------------------------------------------------------------------- /voicelab/docs/_static/fonts/Lato/lato-italic.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Voice-Lab/VoiceLab/7d34cac2e21803b543355bbd03d346f3ea82c5d4/voicelab/docs/_static/fonts/Lato/lato-italic.woff -------------------------------------------------------------------------------- /voicelab/docs/_static/fonts/Lato/lato-italic.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Voice-Lab/VoiceLab/7d34cac2e21803b543355bbd03d346f3ea82c5d4/voicelab/docs/_static/fonts/Lato/lato-italic.woff2 -------------------------------------------------------------------------------- /voicelab/docs/_static/fonts/Lato/lato-regular.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Voice-Lab/VoiceLab/7d34cac2e21803b543355bbd03d346f3ea82c5d4/voicelab/docs/_static/fonts/Lato/lato-regular.eot -------------------------------------------------------------------------------- /voicelab/docs/_static/fonts/Lato/lato-regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Voice-Lab/VoiceLab/7d34cac2e21803b543355bbd03d346f3ea82c5d4/voicelab/docs/_static/fonts/Lato/lato-regular.ttf -------------------------------------------------------------------------------- /voicelab/docs/_static/fonts/Lato/lato-regular.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Voice-Lab/VoiceLab/7d34cac2e21803b543355bbd03d346f3ea82c5d4/voicelab/docs/_static/fonts/Lato/lato-regular.woff -------------------------------------------------------------------------------- /voicelab/docs/_static/fonts/Lato/lato-regular.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Voice-Lab/VoiceLab/7d34cac2e21803b543355bbd03d346f3ea82c5d4/voicelab/docs/_static/fonts/Lato/lato-regular.woff2 -------------------------------------------------------------------------------- /voicelab/docs/_static/fonts/RobotoSlab-Bold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Voice-Lab/VoiceLab/7d34cac2e21803b543355bbd03d346f3ea82c5d4/voicelab/docs/_static/fonts/RobotoSlab-Bold.ttf -------------------------------------------------------------------------------- /voicelab/docs/_static/fonts/RobotoSlab-Regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Voice-Lab/VoiceLab/7d34cac2e21803b543355bbd03d346f3ea82c5d4/voicelab/docs/_static/fonts/RobotoSlab-Regular.ttf -------------------------------------------------------------------------------- /voicelab/docs/_static/fonts/RobotoSlab/roboto-slab-v7-bold.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Voice-Lab/VoiceLab/7d34cac2e21803b543355bbd03d346f3ea82c5d4/voicelab/docs/_static/fonts/RobotoSlab/roboto-slab-v7-bold.eot -------------------------------------------------------------------------------- /voicelab/docs/_static/fonts/RobotoSlab/roboto-slab-v7-bold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Voice-Lab/VoiceLab/7d34cac2e21803b543355bbd03d346f3ea82c5d4/voicelab/docs/_static/fonts/RobotoSlab/roboto-slab-v7-bold.ttf -------------------------------------------------------------------------------- /voicelab/docs/_static/fonts/RobotoSlab/roboto-slab-v7-bold.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Voice-Lab/VoiceLab/7d34cac2e21803b543355bbd03d346f3ea82c5d4/voicelab/docs/_static/fonts/RobotoSlab/roboto-slab-v7-bold.woff -------------------------------------------------------------------------------- /voicelab/docs/_static/fonts/RobotoSlab/roboto-slab-v7-bold.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Voice-Lab/VoiceLab/7d34cac2e21803b543355bbd03d346f3ea82c5d4/voicelab/docs/_static/fonts/RobotoSlab/roboto-slab-v7-bold.woff2 -------------------------------------------------------------------------------- /voicelab/docs/_static/fonts/RobotoSlab/roboto-slab-v7-regular.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Voice-Lab/VoiceLab/7d34cac2e21803b543355bbd03d346f3ea82c5d4/voicelab/docs/_static/fonts/RobotoSlab/roboto-slab-v7-regular.eot -------------------------------------------------------------------------------- /voicelab/docs/_static/fonts/RobotoSlab/roboto-slab-v7-regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Voice-Lab/VoiceLab/7d34cac2e21803b543355bbd03d346f3ea82c5d4/voicelab/docs/_static/fonts/RobotoSlab/roboto-slab-v7-regular.ttf -------------------------------------------------------------------------------- /voicelab/docs/_static/fonts/RobotoSlab/roboto-slab-v7-regular.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Voice-Lab/VoiceLab/7d34cac2e21803b543355bbd03d346f3ea82c5d4/voicelab/docs/_static/fonts/RobotoSlab/roboto-slab-v7-regular.woff -------------------------------------------------------------------------------- /voicelab/docs/_static/fonts/RobotoSlab/roboto-slab-v7-regular.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Voice-Lab/VoiceLab/7d34cac2e21803b543355bbd03d346f3ea82c5d4/voicelab/docs/_static/fonts/RobotoSlab/roboto-slab-v7-regular.woff2 -------------------------------------------------------------------------------- /voicelab/docs/_static/fonts/fontawesome-webfont.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Voice-Lab/VoiceLab/7d34cac2e21803b543355bbd03d346f3ea82c5d4/voicelab/docs/_static/fonts/fontawesome-webfont.eot -------------------------------------------------------------------------------- /voicelab/docs/_static/fonts/fontawesome-webfont.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Voice-Lab/VoiceLab/7d34cac2e21803b543355bbd03d346f3ea82c5d4/voicelab/docs/_static/fonts/fontawesome-webfont.ttf -------------------------------------------------------------------------------- /voicelab/docs/_static/fonts/fontawesome-webfont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Voice-Lab/VoiceLab/7d34cac2e21803b543355bbd03d346f3ea82c5d4/voicelab/docs/_static/fonts/fontawesome-webfont.woff -------------------------------------------------------------------------------- /voicelab/docs/_static/fonts/fontawesome-webfont.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Voice-Lab/VoiceLab/7d34cac2e21803b543355bbd03d346f3ea82c5d4/voicelab/docs/_static/fonts/fontawesome-webfont.woff2 -------------------------------------------------------------------------------- /voicelab/docs/_static/fonts/material-icons.css: -------------------------------------------------------------------------------- 1 | /*! 2 | * Licensed under the Apache License, Version 2.0 (the "License"); you may not 3 | * use this file except in compliance with the License. You may obtain a copy 4 | * of the License at: 5 | * 6 | * http://www.apache.org/licenses/LICENSE-2.0 7 | * 8 | * UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING, SOFTWARE 9 | * DISTRIBUTED UNDER THE LICENSE IS DISTRIBUTED ON AN "AS IS" BASIS, 10 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. 11 | * SEE THE LICENSE FOR THE SPECIFIC LANGUAGE GOVERNING PERMISSIONS AND 12 | * LIMITATIONS UNDER THE LICENSE. 13 | */@font-face{font-display:swap;font-family:"Material Icons";font-style:normal;font-weight:400;src:local("Material Icons"),local("MaterialIcons-Regular"),url("specimen/MaterialIcons-Regular.woff2") format("woff2"),url("specimen/MaterialIcons-Regular.woff") format("woff"),url("specimen/MaterialIcons-Regular.ttf") format("truetype")} -------------------------------------------------------------------------------- /voicelab/docs/_static/fonts/specimen/FontAwesome.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Voice-Lab/VoiceLab/7d34cac2e21803b543355bbd03d346f3ea82c5d4/voicelab/docs/_static/fonts/specimen/FontAwesome.ttf -------------------------------------------------------------------------------- /voicelab/docs/_static/fonts/specimen/FontAwesome.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Voice-Lab/VoiceLab/7d34cac2e21803b543355bbd03d346f3ea82c5d4/voicelab/docs/_static/fonts/specimen/FontAwesome.woff -------------------------------------------------------------------------------- /voicelab/docs/_static/fonts/specimen/FontAwesome.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Voice-Lab/VoiceLab/7d34cac2e21803b543355bbd03d346f3ea82c5d4/voicelab/docs/_static/fonts/specimen/FontAwesome.woff2 -------------------------------------------------------------------------------- /voicelab/docs/_static/fonts/specimen/MaterialIcons-Regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Voice-Lab/VoiceLab/7d34cac2e21803b543355bbd03d346f3ea82c5d4/voicelab/docs/_static/fonts/specimen/MaterialIcons-Regular.ttf -------------------------------------------------------------------------------- /voicelab/docs/_static/fonts/specimen/MaterialIcons-Regular.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Voice-Lab/VoiceLab/7d34cac2e21803b543355bbd03d346f3ea82c5d4/voicelab/docs/_static/fonts/specimen/MaterialIcons-Regular.woff -------------------------------------------------------------------------------- /voicelab/docs/_static/fonts/specimen/MaterialIcons-Regular.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Voice-Lab/VoiceLab/7d34cac2e21803b543355bbd03d346f3ea82c5d4/voicelab/docs/_static/fonts/specimen/MaterialIcons-Regular.woff2 -------------------------------------------------------------------------------- /voicelab/docs/_static/images/LoadVoices.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Voice-Lab/VoiceLab/7d34cac2e21803b543355bbd03d346f3ea82c5d4/voicelab/docs/_static/images/LoadVoices.png -------------------------------------------------------------------------------- /voicelab/docs/_static/images/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Voice-Lab/VoiceLab/7d34cac2e21803b543355bbd03d346f3ea82c5d4/voicelab/docs/_static/images/favicon.ico -------------------------------------------------------------------------------- /voicelab/docs/_static/images/favicon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Voice-Lab/VoiceLab/7d34cac2e21803b543355bbd03d346f3ea82c5d4/voicelab/docs/_static/images/favicon.png -------------------------------------------------------------------------------- /voicelab/docs/_static/images/icons/bitbucket.1b09e088.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /voicelab/docs/_static/images/icons/bitbucket.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /voicelab/docs/_static/images/icons/github.f0b8504a.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /voicelab/docs/_static/images/icons/github.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /voicelab/docs/_static/images/icons/gitlab.6dd19c00.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /voicelab/docs/_static/images/icons/gitlab.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /voicelab/docs/_static/images/output_window.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Voice-Lab/VoiceLab/7d34cac2e21803b543355bbd03d346f3ea82c5d4/voicelab/docs/_static/images/output_window.png -------------------------------------------------------------------------------- /voicelab/docs/_static/images/power_spectrum.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Voice-Lab/VoiceLab/7d34cac2e21803b543355bbd03d346f3ea82c5d4/voicelab/docs/_static/images/power_spectrum.png -------------------------------------------------------------------------------- /voicelab/docs/_static/images/settings.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Voice-Lab/VoiceLab/7d34cac2e21803b543355bbd03d346f3ea82c5d4/voicelab/docs/_static/images/settings.png -------------------------------------------------------------------------------- /voicelab/docs/_static/images/spectrogram.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Voice-Lab/VoiceLab/7d34cac2e21803b543355bbd03d346f3ea82c5d4/voicelab/docs/_static/images/spectrogram.png -------------------------------------------------------------------------------- /voicelab/docs/_static/img/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Voice-Lab/VoiceLab/7d34cac2e21803b543355bbd03d346f3ea82c5d4/voicelab/docs/_static/img/favicon.ico -------------------------------------------------------------------------------- /voicelab/docs/_static/img/porao-branco.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Voice-Lab/VoiceLab/7d34cac2e21803b543355bbd03d346f3ea82c5d4/voicelab/docs/_static/img/porao-branco.png -------------------------------------------------------------------------------- /voicelab/docs/_static/javascripts/lunr/lunr.ja.js: -------------------------------------------------------------------------------- 1 | !function(e,r){"function"==typeof define&&define.amd?define(r):"object"==typeof exports?module.exports=r():r()(e.lunr)}(this,function(){return function(m){if(void 0===m)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===m.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");var l="2"==m.version[0];m.ja=function(){this.pipeline.reset(),this.pipeline.add(m.ja.trimmer,m.ja.stopWordFilter,m.ja.stemmer),l?this.tokenizer=m.ja.tokenizer:(m.tokenizer&&(m.tokenizer=m.ja.tokenizer),this.tokenizerFn&&(this.tokenizerFn=m.ja.tokenizer))};var j=new m.TinySegmenter;m.ja.tokenizer=function(e){var r,t,i,n,o,s,p,a,u;if(!arguments.length||null==e||null==e)return[];if(Array.isArray(e))return e.map(function(e){return l?new m.Token(e.toLowerCase()):e.toLowerCase()});for(r=(t=e.toString().toLowerCase().replace(/^\s+/,"")).length-1;0<=r;r--)if(/\S/.test(t.charAt(r))){t=t.substring(0,r+1);break}for(o=[],i=t.length,p=a=0;a<=i;a++)if(s=a-p,t.charAt(a).match(/\s/)||a==i){if(0",d.insertBefore(c.lastChild,d.firstChild)}function d(){var a=t.elements;return"string"==typeof a?a.split(" "):a}function e(a,b){var c=t.elements;"string"!=typeof c&&(c=c.join(" ")),"string"!=typeof a&&(a=a.join(" ")),t.elements=c+" "+a,j(b)}function f(a){var b=s[a[q]];return b||(b={},r++,a[q]=r,s[r]=b),b}function g(a,c,d){if(c||(c=b),l)return c.createElement(a);d||(d=f(c));var e;return e=d.cache[a]?d.cache[a].cloneNode():p.test(a)?(d.cache[a]=d.createElem(a)).cloneNode():d.createElem(a),!e.canHaveChildren||o.test(a)||e.tagUrn?e:d.frag.appendChild(e)}function h(a,c){if(a||(a=b),l)return a.createDocumentFragment();c=c||f(a);for(var e=c.frag.cloneNode(),g=0,h=d(),i=h.length;i>g;g++)e.createElement(h[g]);return e}function i(a,b){b.cache||(b.cache={},b.createElem=a.createElement,b.createFrag=a.createDocumentFragment,b.frag=b.createFrag()),a.createElement=function(c){return t.shivMethods?g(c,a,b):b.createElem(c)},a.createDocumentFragment=Function("h,f","return function(){var n=f.cloneNode(),c=n.createElement;h.shivMethods&&("+d().join().replace(/[\w\-:]+/g,function(a){return b.createElem(a),b.frag.createElement(a),'c("'+a+'")'})+");return n}")(t,b.frag)}function j(a){a||(a=b);var d=f(a);return!t.shivCSS||k||d.hasCSS||(d.hasCSS=!!c(a,"article,aside,dialog,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}mark{background:#FF0;color:#000}template{display:none}")),l||i(a,d),a}var k,l,m="3.7.3-pre",n=a.html5||{},o=/^<|^(?:button|map|select|textarea|object|iframe|option|optgroup)$/i,p=/^(?:a|b|code|div|fieldset|h1|h2|h3|h4|h5|h6|i|label|li|ol|p|q|span|strong|style|table|tbody|td|th|tr|ul)$/i,q="_html5shiv",r=0,s={};!function(){try{var a=b.createElement("a");a.innerHTML="",k="hidden"in a,l=1==a.childNodes.length||function(){b.createElement("a");var a=b.createDocumentFragment();return"undefined"==typeof a.cloneNode||"undefined"==typeof a.createDocumentFragment||"undefined"==typeof a.createElement}()}catch(c){k=!0,l=!0}}();var t={elements:n.elements||"abbr article aside audio bdi canvas data datalist details dialog figcaption figure footer header hgroup main mark meter nav output picture progress section summary template time video",version:m,shivCSS:n.shivCSS!==!1,supportsUnknownElements:l,shivMethods:n.shivMethods!==!1,type:"default",shivDocument:j,createElement:g,createDocumentFragment:h,addElements:e};a.html5=t,j(b),"object"==typeof module&&module.exports&&(module.exports=t)}("undefined"!=typeof window?window:this,document); -------------------------------------------------------------------------------- /voicelab/docs/_static/js/pdj.js: -------------------------------------------------------------------------------- 1 | // setting highlight for async stuff in python 2 | var async_kw = ['async', 'await']; 3 | jQuery.each(async_kw, function(i, kw){ 4 | var elements = jQuery(".highlight-python .n:contains('" + kw + "')"); 5 | 6 | jQuery.each(elements, function(j, el){ 7 | el = jQuery(el); 8 | if (el.text() == kw){ 9 | el.removeClass('n'); 10 | el.addClass('kn'); 11 | }; 12 | }); 13 | }); 14 | -------------------------------------------------------------------------------- /voicelab/docs/_static/js/theme.js: -------------------------------------------------------------------------------- 1 | $( document ).ready(function() { 2 | // Shift nav in mobile when clicking the menu. 3 | $(document).on('click', "[data-toggle='wy-nav-top']", function() { 4 | $("[data-toggle='wy-nav-shift']").toggleClass("shift"); 5 | $("[data-toggle='rst-versions']").toggleClass("shift"); 6 | }); 7 | // Close menu when you click a link. 8 | $(document).on('click', ".wy-menu-vertical .current ul li a", function() { 9 | $("[data-toggle='wy-nav-shift']").removeClass("shift"); 10 | $("[data-toggle='rst-versions']").toggleClass("shift"); 11 | }); 12 | $(document).on('click', "[data-toggle='rst-current-version']", function() { 13 | $("[data-toggle='rst-versions']").toggleClass("shift-up"); 14 | }); 15 | // Make tables responsive 16 | $("table.docutils:not(.field-list)").wrap(""); 17 | }); 18 | 19 | window.SphinxRtdTheme = (function (jquery) { 20 | var stickyNav = (function () { 21 | var navBar, 22 | win, 23 | stickyNavCssClass = 'stickynav', 24 | applyStickNav = function () { 25 | if (navBar.height() <= win.height()) { 26 | navBar.addClass(stickyNavCssClass); 27 | } else { 28 | navBar.removeClass(stickyNavCssClass); 29 | } 30 | }, 31 | enable = function () { 32 | applyStickNav(); 33 | win.on('resize', applyStickNav); 34 | }, 35 | init = function () { 36 | navBar = jquery('nav.wy-nav-side:first'); 37 | win = jquery(window); 38 | }; 39 | jquery(init); 40 | return { 41 | enable : enable 42 | }; 43 | }()); 44 | return { 45 | StickyNav : stickyNav 46 | }; 47 | }($)); 48 | -------------------------------------------------------------------------------- /voicelab/docs/_static/material.css: -------------------------------------------------------------------------------- 1 | .dropdown { 2 | width: 125px; 3 | vertical-align: middle; 4 | } 5 | 6 | .dropdownbutton { 7 | color: inherit; 8 | font-weight: 700; 9 | font-size: .65rem; 10 | 11 | } 12 | 13 | .dropdown-content { 14 | display: none; 15 | position: absolute; 16 | z-index: 1; 17 | background-color: inherit; 18 | } 19 | 20 | .dropdown-content a { 21 | display: block; 22 | width: 125px; 23 | margin: 8px; 24 | font-size: .65rem; 25 | font-weight: 200; 26 | } 27 | 28 | /* Change color of dropdown links on hover */ 29 | .dropdown-content a:hover {} 30 | 31 | /* Show the dropdown menu on hover */ 32 | .dropdown:hover .dropdown-content {display: block;} 33 | 34 | /* Change the background color of the dropdown button when the dropdown content is shown */ 35 | .dropdown:hover .dropbtn {} -------------------------------------------------------------------------------- /voicelab/docs/_static/minus.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Voice-Lab/VoiceLab/7d34cac2e21803b543355bbd03d346f3ea82c5d4/voicelab/docs/_static/minus.png -------------------------------------------------------------------------------- /voicelab/docs/_static/output_window.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Voice-Lab/VoiceLab/7d34cac2e21803b543355bbd03d346f3ea82c5d4/voicelab/docs/_static/output_window.png -------------------------------------------------------------------------------- /voicelab/docs/_static/plus.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Voice-Lab/VoiceLab/7d34cac2e21803b543355bbd03d346f3ea82c5d4/voicelab/docs/_static/plus.png -------------------------------------------------------------------------------- /voicelab/docs/_static/power_spectrum.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Voice-Lab/VoiceLab/7d34cac2e21803b543355bbd03d346f3ea82c5d4/voicelab/docs/_static/power_spectrum.png -------------------------------------------------------------------------------- /voicelab/docs/_static/settings.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Voice-Lab/VoiceLab/7d34cac2e21803b543355bbd03d346f3ea82c5d4/voicelab/docs/_static/settings.png -------------------------------------------------------------------------------- /voicelab/docs/_static/spectrogram.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Voice-Lab/VoiceLab/7d34cac2e21803b543355bbd03d346f3ea82c5d4/voicelab/docs/_static/spectrogram.png -------------------------------------------------------------------------------- /voicelab/docs/_static/up-pressed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Voice-Lab/VoiceLab/7d34cac2e21803b543355bbd03d346f3ea82c5d4/voicelab/docs/_static/up-pressed.png -------------------------------------------------------------------------------- /voicelab/docs/_static/up.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Voice-Lab/VoiceLab/7d34cac2e21803b543355bbd03d346f3ea82c5d4/voicelab/docs/_static/up.png -------------------------------------------------------------------------------- /voicelab/docs/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Voice-Lab/VoiceLab/7d34cac2e21803b543355bbd03d346f3ea82c5d4/voicelab/docs/favicon.ico -------------------------------------------------------------------------------- /voicelab/docs/genindex.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | Index — VoiceLab documentation 7 | 8 | 9 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | VoiceLab 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | VoiceLab 46 | 47 | 48 | 49 | 50 | 51 | 52 | » 53 | Index 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | Index 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 86 | 87 | 88 | 89 | 90 | 95 | 96 | 97 | -------------------------------------------------------------------------------- /voicelab/docs/objects.inv: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Voice-Lab/VoiceLab/7d34cac2e21803b543355bbd03d346f3ea82c5d4/voicelab/docs/objects.inv -------------------------------------------------------------------------------- /voicelab/src/LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2023 David R. Feinberg 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /voicelab/src/Voicelab/VoicelabGUI/ExperimentalTab.py: -------------------------------------------------------------------------------- 1 | from PyQt5.QtGui import * 2 | from PyQt5.QtWidgets import * 3 | from PyQt5.QtCore import * 4 | 5 | from Voicelab.VoicelabWizard.VoicelabTab import VoicelabTab 6 | 7 | 8 | ################################################################################################### 9 | # OutputTab(VoicelabTab) : presentation widget for displaying and the results of our pipeline process 10 | ################################################################################################### 11 | class F1F2PlotWindow(QMainWindow): 12 | def __init__(self): 13 | super().__init__() 14 | self.setWindowTitle("F1 F2 Plot") 15 | self.setMinimumSize(400, 400) 16 | self.label = QLabel(self) 17 | self.pixmap = QPixmap('f1f2.png') 18 | #self.selected_tab = 0 19 | self.container_layout = QVBoxLayout(self) 20 | self.setLayout(self.container_layout) 21 | # Display image 22 | print("label size: ", self.label.size()) 23 | self.label.setPixmap(self.pixmap.scaled(self.label.size(), Qt.KeepAspectRatio, Qt.SmoothTransformation)) 24 | 25 | self.label.setSizePolicy(QSizePolicy.Expanding, 26 | QSizePolicy.Expanding) 27 | self.label.setAlignment(Qt.AlignCenter) 28 | self.label.setMinimumSize(400, 400) 29 | 30 | self.container_layout.addWidget(self.label) 31 | self.show() 32 | 33 | def resizeEvent(self, a0: QResizeEvent) -> None: 34 | pixmap1 = QPixmap("f1f2.png") 35 | self.pixmap = pixmap1.scaled(self.width(), self.height(), 36 | Qt.KeepAspectRatio, Qt.SmoothTransformation 37 | ) 38 | self.label.setPixmap(self.pixmap) 39 | self.label.resize(self.width(), self.height()) 40 | 41 | #def resizeEvent(self, event): 42 | # scaledSize = self.label.size() 43 | # scaledSize.scale(self.label.size(), Qt.KeepAspectRatio) 44 | # if not self.label.pixmap() or scaledSize != self.label.pixmap().size(): 45 | # self.updateLabel() 46 | # 47 | #def updateLabel(self): 48 | # self.label.setPixmap(self.pixmap.scaled( 49 | # self.label.size(), Qt.KeepAspectRatio, 50 | # Qt.SmoothTransformation)) 51 | 52 | 53 | class ExperimentalTab(VoicelabTab): 54 | def __init__(self, data_controller, signals, tabs, *args, **kwargs): 55 | """ 56 | Args: 57 | data_controller: 58 | signals: 59 | tabs: 60 | *args: 61 | **kwargs: 62 | """ 63 | super().__init__(data_controller, signals, tabs, *args, **kwargs) 64 | 65 | self.f1f2button = QPushButton("Click to View F1 F2 Plot.") 66 | self.layout = QVBoxLayout() 67 | self.layout.addWidget(self.f1f2button) 68 | self.setLayout(self.layout) 69 | self.f1f2button.clicked.connect(self.on_click) 70 | #self.tabs = tabs 71 | 72 | @pyqtSlot() 73 | def on_click(self): 74 | self.f1f2button.clicked.connect(self.popupwindow) 75 | 76 | def popupwindow(self): 77 | self.plotwindow = F1F2PlotWindow() 78 | self.plotwindow.show() 79 | self.hide() 80 | 81 | -------------------------------------------------------------------------------- /voicelab/src/Voicelab/VoicelabGUI/F1F2PlotWindow.py: -------------------------------------------------------------------------------- 1 | from PyQt5.QtGui import * 2 | from PyQt5.QtGui import QPixmap 3 | from PyQt5.QtWidgets import * 4 | from PyQt5.QtCore import * 5 | 6 | 7 | ################################################################################################### 8 | # Displays the F1F2 Plot in a new window 9 | ################################################################################################### 10 | class F1F2PlotWindow(QMainWindow): 11 | """This class creates a new window to display F1 F2 Plot. It is to be called from F1F2PlotNode.""" 12 | def __init__(self): 13 | super().__init__() 14 | self.setWindowTitle("View F1 F2 Plot") 15 | # self.setMinimumSize() has to match self.label.setMinimumSize() 16 | self.setMinimumSize(600, 600) 17 | # create a label object inside the new window 18 | self.label = QLabel(self) 19 | # set the image file 20 | self.pixmap = QPixmap('f1f2.png') 21 | 22 | # TODO fix this so we don't get the warning anymore 23 | # set the central widget 24 | #self.central_widget = QWidget(self) 25 | #self.setCentralWidget(self.central_widget) 26 | 27 | 28 | # Create a container in the label to put image 29 | self.container_layout = QVBoxLayout(self) 30 | # set the layout of the container 31 | self.setLayout(self.container_layout) 32 | # resize the image 33 | self.label.setPixmap(self.pixmap.scaled(self.label.size(), Qt.KeepAspectRatio, Qt.SmoothTransformation)) 34 | self.label.setSizePolicy(QSizePolicy.Expanding, 35 | QSizePolicy.Expanding) 36 | self.label.setAlignment(Qt.AlignCenter) 37 | self.label.setMinimumSize(600, 600) 38 | # add the image widget to the window 39 | self.container_layout.addWidget(self.label) 40 | # display the widget 41 | self.show() 42 | 43 | def resizeEvent(self, a0: QResizeEvent) -> None: 44 | """Resizes the image when you resize the window""" 45 | newpixmap: QPixmap = QPixmap("f1f2.png") 46 | self.pixmap = newpixmap.scaled(self.width(), self.height(), Qt.KeepAspectRatio, Qt.SmoothTransformation) 47 | self.label.setPixmap(self.pixmap) 48 | self.label.resize(self.width(), self.height()) 49 | -------------------------------------------------------------------------------- /voicelab/src/Voicelab/VoicelabGUI/HOW-TO-GUIDE.txt: -------------------------------------------------------------------------------- 1 | HOW-TO GUIDE: 2 | To add a new function: 3 | 1. Create a node class with a process function containing the required functionality 4 | 2. Import the class in default_settings.py or in the Voicelab __init__.py file 5 | 3. Add an instance of it to the available_functions dictionary with a human readable key (this 6 | will become the label for it used throughout) 7 | OPTIONALLY IN default_settings.py 8 | 4. (Make it run by default) Add the name of the function to the default_functions dict 9 | 5. (Visualize data on the spectrogram plot) Add the name of the function to the visualize_list 10 | along with the label of the return variable that will be visualized. Data returned from that function 11 | on that label will be passed into the VisualizeVoices node during run time. The VisualizeVoices node 12 | will have to be updated to reflect these changes and define behaviour for displaying this data. 13 | 6. (Recieve data from other nodes) The nodes run as a graph of sequentially connected function nodes 14 | To link a node downstream (that is, pass data in from another node during run-time) add the node to 15 | the function_requirements dictionary along with a list of tuples defining where to find the data 16 | This is in the form of 'CHILD_FUNCTION_NAME': [('PARENT_FUNCTION_NAME', 'VARIABLE_NAME'), ...] 17 | Each tuple in the list only defines the data path for one parent, one child, and on one labeled return variable, 18 | but each parent and variable can be represented any number of times in the list. 19 | Allow displaying additional variable types: 20 | 1. Add the variable type to the display_whitelist 21 | 2. Write functionality for displaying this data type into ResultsTab.py 22 | -------------------------------------------------------------------------------- /voicelab/src/Voicelab/VoicelabGUI/VoicelabTab.py: -------------------------------------------------------------------------------- 1 | from PyQt5.QtGui import * 2 | from PyQt5.QtWidgets import * 3 | from PyQt5.QtCore import * 4 | 5 | 6 | class VoicelabTab(QWidget): 7 | def __init__(self, data_controller, signals, tabs, *args, **kwargs): 8 | """ 9 | Args: 10 | data_controller: 11 | signals: 12 | tabs: 13 | *args: 14 | **kwargs: 15 | """ 16 | super().__init__(*args, **kwargs) 17 | self.data_controller = data_controller 18 | self.signals = signals 19 | self.tabs = tabs 20 | 21 | ############################################################################################### 22 | # start_process: start processing the data through the pipeline 23 | ############################################################################################### 24 | def start_process(self): 25 | """start_process -tells the data controller to start processing""" 26 | pipeline_results = self.data_controller.start_processing( 27 | self.data_controller.active_voices, 28 | self.data_controller.active_functions, 29 | self.data_controller.active_settings, 30 | 31 | ) 32 | 33 | # todo figure out where pipeline_results ends up 34 | # notify all those listening that the processing has completed 35 | self.signals["on_processing_completed"].emit( 36 | self.data_controller.active_results 37 | ) 38 | 39 | ############################################################################################### 40 | # on_completed: default callback function for when data processing is complete 41 | ############################################################################################### 42 | def on_completed(self, pipeline_results): 43 | """ 44 | Args: 45 | pipeline_results: 46 | """ 47 | print("test", pipeline_results) 48 | -------------------------------------------------------------------------------- /voicelab/src/Voicelab/VoicelabGUI/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Voice-Lab/VoiceLab/7d34cac2e21803b543355bbd03d346f3ea82c5d4/voicelab/src/Voicelab/VoicelabGUI/__init__.py -------------------------------------------------------------------------------- /voicelab/src/Voicelab/__init__.py: -------------------------------------------------------------------------------- 1 | #from .VoicelabGUI.InputTab import InputTab 2 | #from .VoicelabGUI.SettingsTab import SettingsTab 3 | #from .VoicelabGUI.OutputTab import OutputTab 4 | #from .VoicelabGUI.VoicelabController import VoicelabController 5 | #from .VoicelabGUI.VoicelabDataModel import VoicelabDataModel -------------------------------------------------------------------------------- /voicelab/src/Voicelab/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Voice-Lab/VoiceLab/7d34cac2e21803b543355bbd03d346f3ea82c5d4/voicelab/src/Voicelab/favicon.ico -------------------------------------------------------------------------------- /voicelab/src/Voicelab/help/_sources/conf.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | 3 | import sys, os 4 | import sphinx_rtd_theme 5 | 6 | extensions = [ 7 | 'sphinx_rtd_theme', 8 | ] 9 | 10 | html_theme = "sphinx_rtd_theme" 11 | 12 | todo_include_todos = True 13 | templates_path = ['_templates'] 14 | source_suffix = '.rst' 15 | master_doc = 'index' 16 | exclude_patterns = [] 17 | add_function_parentheses = True 18 | #add_module_names = True 19 | # A list of ignored prefixes for module index sorting. 20 | #modindex_common_prefix = [] 21 | 22 | project = u'VoiceLab' 23 | copyright = u'2022, David R Feinberg' 24 | 25 | version = '' 26 | release = '' 27 | 28 | # -- Options for HTML output --------------------------------------------------- 29 | 30 | html_theme = "sphinx_rtd_theme" 31 | html_title = "VoiceLab: Automated Reproducible Acoustic Analysis" 32 | #html_short_title = None 33 | #html_logo = None 34 | #html_favicon = None 35 | html_static_path = ['_static'] 36 | html_domain_indices = False 37 | html_use_index = False 38 | html_show_sphinx = False 39 | htmlhelp_basename = 'VoiceLab' 40 | html_show_sourcelink = False 41 | -------------------------------------------------------------------------------- /voicelab/src/Voicelab/help/builddir/.buildinfo: -------------------------------------------------------------------------------- 1 | # Sphinx build info version 1 2 | # This file hashes the configuration used when building these files. When it is not found, a full rebuild will be done. 3 | config: a284847c28810c0b613a2308ea5a266e 4 | tags: 645f666f9bcd5a90fca523b33c5a78b7 5 | -------------------------------------------------------------------------------- /voicelab/src/Voicelab/help/builddir/.doctrees/_sources/index.doctree: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Voice-Lab/VoiceLab/7d34cac2e21803b543355bbd03d346f3ea82c5d4/voicelab/src/Voicelab/help/builddir/.doctrees/_sources/index.doctree -------------------------------------------------------------------------------- /voicelab/src/Voicelab/help/builddir/.doctrees/conf.doctree: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Voice-Lab/VoiceLab/7d34cac2e21803b543355bbd03d346f3ea82c5d4/voicelab/src/Voicelab/help/builddir/.doctrees/conf.doctree -------------------------------------------------------------------------------- /voicelab/src/Voicelab/help/builddir/.doctrees/environment.pickle: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Voice-Lab/VoiceLab/7d34cac2e21803b543355bbd03d346f3ea82c5d4/voicelab/src/Voicelab/help/builddir/.doctrees/environment.pickle -------------------------------------------------------------------------------- /voicelab/src/Voicelab/help/builddir/.doctrees/index.doctree: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Voice-Lab/VoiceLab/7d34cac2e21803b543355bbd03d346f3ea82c5d4/voicelab/src/Voicelab/help/builddir/.doctrees/index.doctree -------------------------------------------------------------------------------- /voicelab/src/Voicelab/help/builddir/.doctrees/modules.doctree: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Voice-Lab/VoiceLab/7d34cac2e21803b543355bbd03d346f3ea82c5d4/voicelab/src/Voicelab/help/builddir/.doctrees/modules.doctree -------------------------------------------------------------------------------- /voicelab/src/Voicelab/help/builddir/_sources/conf.rst.txt: -------------------------------------------------------------------------------- 1 | conf module 2 | =========== 3 | 4 | .. automodule:: conf 5 | :members: 6 | :undoc-members: 7 | :show-inheritance: 8 | -------------------------------------------------------------------------------- /voicelab/src/Voicelab/help/builddir/_sources/modules.rst.txt: -------------------------------------------------------------------------------- 1 | source 2 | ====== 3 | 4 | .. toctree:: 5 | :maxdepth: 4 6 | 7 | conf 8 | -------------------------------------------------------------------------------- /voicelab/src/Voicelab/help/builddir/_static/ajax-loader.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Voice-Lab/VoiceLab/7d34cac2e21803b543355bbd03d346f3ea82c5d4/voicelab/src/Voicelab/help/builddir/_static/ajax-loader.gif -------------------------------------------------------------------------------- /voicelab/src/Voicelab/help/builddir/_static/comment-bright.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Voice-Lab/VoiceLab/7d34cac2e21803b543355bbd03d346f3ea82c5d4/voicelab/src/Voicelab/help/builddir/_static/comment-bright.png -------------------------------------------------------------------------------- /voicelab/src/Voicelab/help/builddir/_static/comment-close.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Voice-Lab/VoiceLab/7d34cac2e21803b543355bbd03d346f3ea82c5d4/voicelab/src/Voicelab/help/builddir/_static/comment-close.png -------------------------------------------------------------------------------- /voicelab/src/Voicelab/help/builddir/_static/comment.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Voice-Lab/VoiceLab/7d34cac2e21803b543355bbd03d346f3ea82c5d4/voicelab/src/Voicelab/help/builddir/_static/comment.png -------------------------------------------------------------------------------- /voicelab/src/Voicelab/help/builddir/_static/css/badge_only.css: -------------------------------------------------------------------------------- 1 | .fa:before{-webkit-font-smoothing:antialiased}.clearfix{*zoom:1}.clearfix:after,.clearfix:before{display:table;content:""}.clearfix:after{clear:both}@font-face{font-family:FontAwesome;font-style:normal;font-weight:400;src:url(fonts/fontawesome-webfont.eot?674f50d287a8c48dc19ba404d20fe713?#iefix) format("embedded-opentype"),url(fonts/fontawesome-webfont.woff2?af7ae505a9eed503f8b8e6982036873e) format("woff2"),url(fonts/fontawesome-webfont.woff?fee66e712a8a08eef5805a46892932ad) format("woff"),url(fonts/fontawesome-webfont.ttf?b06871f281fee6b241d60582ae9369b9) format("truetype"),url(fonts/fontawesome-webfont.svg?912ec66d7572ff821749319396470bde#FontAwesome) format("svg")}.fa:before{font-family:FontAwesome;font-style:normal;font-weight:400;line-height:1}.fa:before,a .fa{text-decoration:inherit}.fa:before,a .fa,li .fa{display:inline-block}li .fa-large:before{width:1.875em}ul.fas{list-style-type:none;margin-left:2em;text-indent:-.8em}ul.fas li .fa{width:.8em}ul.fas li .fa-large:before{vertical-align:baseline}.fa-book:before,.icon-book:before{content:"\f02d"}.fa-caret-down:before,.icon-caret-down:before{content:"\f0d7"}.fa-caret-up:before,.icon-caret-up:before{content:"\f0d8"}.fa-caret-left:before,.icon-caret-left:before{content:"\f0d9"}.fa-caret-right:before,.icon-caret-right:before{content:"\f0da"}.rst-versions{position:fixed;bottom:0;left:0;width:300px;color:#fcfcfc;background:#1f1d1d;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;z-index:400}.rst-versions a{color:#2980b9;text-decoration:none}.rst-versions .rst-badge-small{display:none}.rst-versions .rst-current-version{padding:12px;background-color:#272525;display:block;text-align:right;font-size:90%;cursor:pointer;color:#27ae60}.rst-versions .rst-current-version:after{clear:both;content:"";display:block}.rst-versions .rst-current-version .fa{color:#fcfcfc}.rst-versions .rst-current-version .fa-book,.rst-versions .rst-current-version .icon-book{float:left}.rst-versions .rst-current-version.rst-out-of-date{background-color:#e74c3c;color:#fff}.rst-versions .rst-current-version.rst-active-old-version{background-color:#f1c40f;color:#000}.rst-versions.shift-up{height:auto;max-height:100%;overflow-y:scroll}.rst-versions.shift-up .rst-other-versions{display:block}.rst-versions .rst-other-versions{font-size:90%;padding:12px;color:grey;display:none}.rst-versions .rst-other-versions hr{display:block;height:1px;border:0;margin:20px 0;padding:0;border-top:1px solid #413d3d}.rst-versions .rst-other-versions dd{display:inline-block;margin:0}.rst-versions .rst-other-versions dd a{display:inline-block;padding:6px;color:#fcfcfc}.rst-versions.rst-badge{width:auto;bottom:20px;right:20px;left:auto;border:none;max-width:300px;max-height:90%}.rst-versions.rst-badge .fa-book,.rst-versions.rst-badge .icon-book{float:none;line-height:30px}.rst-versions.rst-badge.shift-up .rst-current-version{text-align:right}.rst-versions.rst-badge.shift-up .rst-current-version .fa-book,.rst-versions.rst-badge.shift-up .rst-current-version .icon-book{float:left}.rst-versions.rst-badge>.rst-current-version{width:auto;height:30px;line-height:30px;padding:0 6px;display:block;text-align:center}@media screen and (max-width:768px){.rst-versions{width:85%;display:none}.rst-versions.shift{display:block}} -------------------------------------------------------------------------------- /voicelab/src/Voicelab/help/builddir/_static/css/fonts/Roboto-Slab-Bold.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Voice-Lab/VoiceLab/7d34cac2e21803b543355bbd03d346f3ea82c5d4/voicelab/src/Voicelab/help/builddir/_static/css/fonts/Roboto-Slab-Bold.woff -------------------------------------------------------------------------------- /voicelab/src/Voicelab/help/builddir/_static/css/fonts/Roboto-Slab-Bold.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Voice-Lab/VoiceLab/7d34cac2e21803b543355bbd03d346f3ea82c5d4/voicelab/src/Voicelab/help/builddir/_static/css/fonts/Roboto-Slab-Bold.woff2 -------------------------------------------------------------------------------- /voicelab/src/Voicelab/help/builddir/_static/css/fonts/Roboto-Slab-Regular.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Voice-Lab/VoiceLab/7d34cac2e21803b543355bbd03d346f3ea82c5d4/voicelab/src/Voicelab/help/builddir/_static/css/fonts/Roboto-Slab-Regular.woff -------------------------------------------------------------------------------- /voicelab/src/Voicelab/help/builddir/_static/css/fonts/Roboto-Slab-Regular.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Voice-Lab/VoiceLab/7d34cac2e21803b543355bbd03d346f3ea82c5d4/voicelab/src/Voicelab/help/builddir/_static/css/fonts/Roboto-Slab-Regular.woff2 -------------------------------------------------------------------------------- /voicelab/src/Voicelab/help/builddir/_static/css/fonts/fontawesome-webfont.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Voice-Lab/VoiceLab/7d34cac2e21803b543355bbd03d346f3ea82c5d4/voicelab/src/Voicelab/help/builddir/_static/css/fonts/fontawesome-webfont.eot -------------------------------------------------------------------------------- /voicelab/src/Voicelab/help/builddir/_static/css/fonts/fontawesome-webfont.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Voice-Lab/VoiceLab/7d34cac2e21803b543355bbd03d346f3ea82c5d4/voicelab/src/Voicelab/help/builddir/_static/css/fonts/fontawesome-webfont.ttf -------------------------------------------------------------------------------- /voicelab/src/Voicelab/help/builddir/_static/css/fonts/fontawesome-webfont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Voice-Lab/VoiceLab/7d34cac2e21803b543355bbd03d346f3ea82c5d4/voicelab/src/Voicelab/help/builddir/_static/css/fonts/fontawesome-webfont.woff -------------------------------------------------------------------------------- /voicelab/src/Voicelab/help/builddir/_static/css/fonts/fontawesome-webfont.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Voice-Lab/VoiceLab/7d34cac2e21803b543355bbd03d346f3ea82c5d4/voicelab/src/Voicelab/help/builddir/_static/css/fonts/fontawesome-webfont.woff2 -------------------------------------------------------------------------------- /voicelab/src/Voicelab/help/builddir/_static/css/fonts/lato-bold-italic.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Voice-Lab/VoiceLab/7d34cac2e21803b543355bbd03d346f3ea82c5d4/voicelab/src/Voicelab/help/builddir/_static/css/fonts/lato-bold-italic.woff -------------------------------------------------------------------------------- /voicelab/src/Voicelab/help/builddir/_static/css/fonts/lato-bold-italic.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Voice-Lab/VoiceLab/7d34cac2e21803b543355bbd03d346f3ea82c5d4/voicelab/src/Voicelab/help/builddir/_static/css/fonts/lato-bold-italic.woff2 -------------------------------------------------------------------------------- /voicelab/src/Voicelab/help/builddir/_static/css/fonts/lato-bold.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Voice-Lab/VoiceLab/7d34cac2e21803b543355bbd03d346f3ea82c5d4/voicelab/src/Voicelab/help/builddir/_static/css/fonts/lato-bold.woff -------------------------------------------------------------------------------- /voicelab/src/Voicelab/help/builddir/_static/css/fonts/lato-bold.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Voice-Lab/VoiceLab/7d34cac2e21803b543355bbd03d346f3ea82c5d4/voicelab/src/Voicelab/help/builddir/_static/css/fonts/lato-bold.woff2 -------------------------------------------------------------------------------- /voicelab/src/Voicelab/help/builddir/_static/css/fonts/lato-normal-italic.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Voice-Lab/VoiceLab/7d34cac2e21803b543355bbd03d346f3ea82c5d4/voicelab/src/Voicelab/help/builddir/_static/css/fonts/lato-normal-italic.woff -------------------------------------------------------------------------------- /voicelab/src/Voicelab/help/builddir/_static/css/fonts/lato-normal-italic.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Voice-Lab/VoiceLab/7d34cac2e21803b543355bbd03d346f3ea82c5d4/voicelab/src/Voicelab/help/builddir/_static/css/fonts/lato-normal-italic.woff2 -------------------------------------------------------------------------------- /voicelab/src/Voicelab/help/builddir/_static/css/fonts/lato-normal.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Voice-Lab/VoiceLab/7d34cac2e21803b543355bbd03d346f3ea82c5d4/voicelab/src/Voicelab/help/builddir/_static/css/fonts/lato-normal.woff -------------------------------------------------------------------------------- /voicelab/src/Voicelab/help/builddir/_static/css/fonts/lato-normal.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Voice-Lab/VoiceLab/7d34cac2e21803b543355bbd03d346f3ea82c5d4/voicelab/src/Voicelab/help/builddir/_static/css/fonts/lato-normal.woff2 -------------------------------------------------------------------------------- /voicelab/src/Voicelab/help/builddir/_static/custom.css: -------------------------------------------------------------------------------- 1 | /* This file intentionally left blank. */ 2 | -------------------------------------------------------------------------------- /voicelab/src/Voicelab/help/builddir/_static/documentation_options.js: -------------------------------------------------------------------------------- 1 | var DOCUMENTATION_OPTIONS = { 2 | URL_ROOT: document.getElementById("documentation_options").getAttribute('data-url_root'), 3 | VERSION: '', 4 | LANGUAGE: 'None', 5 | COLLAPSE_INDEX: false, 6 | BUILDER: 'html', 7 | FILE_SUFFIX: '.html', 8 | LINK_SUFFIX: '.html', 9 | HAS_SOURCE: true, 10 | SOURCELINK_SUFFIX: '.txt', 11 | NAVIGATION_WITH_KEYS: false 12 | }; -------------------------------------------------------------------------------- /voicelab/src/Voicelab/help/builddir/_static/down-pressed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Voice-Lab/VoiceLab/7d34cac2e21803b543355bbd03d346f3ea82c5d4/voicelab/src/Voicelab/help/builddir/_static/down-pressed.png -------------------------------------------------------------------------------- /voicelab/src/Voicelab/help/builddir/_static/down.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Voice-Lab/VoiceLab/7d34cac2e21803b543355bbd03d346f3ea82c5d4/voicelab/src/Voicelab/help/builddir/_static/down.png -------------------------------------------------------------------------------- /voicelab/src/Voicelab/help/builddir/_static/file.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Voice-Lab/VoiceLab/7d34cac2e21803b543355bbd03d346f3ea82c5d4/voicelab/src/Voicelab/help/builddir/_static/file.png -------------------------------------------------------------------------------- /voicelab/src/Voicelab/help/builddir/_static/fonts/Inconsolata-Bold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Voice-Lab/VoiceLab/7d34cac2e21803b543355bbd03d346f3ea82c5d4/voicelab/src/Voicelab/help/builddir/_static/fonts/Inconsolata-Bold.ttf -------------------------------------------------------------------------------- /voicelab/src/Voicelab/help/builddir/_static/fonts/Inconsolata-Regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Voice-Lab/VoiceLab/7d34cac2e21803b543355bbd03d346f3ea82c5d4/voicelab/src/Voicelab/help/builddir/_static/fonts/Inconsolata-Regular.ttf -------------------------------------------------------------------------------- /voicelab/src/Voicelab/help/builddir/_static/fonts/Inconsolata.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Voice-Lab/VoiceLab/7d34cac2e21803b543355bbd03d346f3ea82c5d4/voicelab/src/Voicelab/help/builddir/_static/fonts/Inconsolata.ttf -------------------------------------------------------------------------------- /voicelab/src/Voicelab/help/builddir/_static/fonts/Lato-Bold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Voice-Lab/VoiceLab/7d34cac2e21803b543355bbd03d346f3ea82c5d4/voicelab/src/Voicelab/help/builddir/_static/fonts/Lato-Bold.ttf -------------------------------------------------------------------------------- /voicelab/src/Voicelab/help/builddir/_static/fonts/Lato-Regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Voice-Lab/VoiceLab/7d34cac2e21803b543355bbd03d346f3ea82c5d4/voicelab/src/Voicelab/help/builddir/_static/fonts/Lato-Regular.ttf -------------------------------------------------------------------------------- /voicelab/src/Voicelab/help/builddir/_static/fonts/Lato/lato-bold.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Voice-Lab/VoiceLab/7d34cac2e21803b543355bbd03d346f3ea82c5d4/voicelab/src/Voicelab/help/builddir/_static/fonts/Lato/lato-bold.eot -------------------------------------------------------------------------------- /voicelab/src/Voicelab/help/builddir/_static/fonts/Lato/lato-bold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Voice-Lab/VoiceLab/7d34cac2e21803b543355bbd03d346f3ea82c5d4/voicelab/src/Voicelab/help/builddir/_static/fonts/Lato/lato-bold.ttf -------------------------------------------------------------------------------- /voicelab/src/Voicelab/help/builddir/_static/fonts/Lato/lato-bold.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Voice-Lab/VoiceLab/7d34cac2e21803b543355bbd03d346f3ea82c5d4/voicelab/src/Voicelab/help/builddir/_static/fonts/Lato/lato-bold.woff -------------------------------------------------------------------------------- /voicelab/src/Voicelab/help/builddir/_static/fonts/Lato/lato-bold.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Voice-Lab/VoiceLab/7d34cac2e21803b543355bbd03d346f3ea82c5d4/voicelab/src/Voicelab/help/builddir/_static/fonts/Lato/lato-bold.woff2 -------------------------------------------------------------------------------- /voicelab/src/Voicelab/help/builddir/_static/fonts/Lato/lato-bolditalic.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Voice-Lab/VoiceLab/7d34cac2e21803b543355bbd03d346f3ea82c5d4/voicelab/src/Voicelab/help/builddir/_static/fonts/Lato/lato-bolditalic.eot -------------------------------------------------------------------------------- /voicelab/src/Voicelab/help/builddir/_static/fonts/Lato/lato-bolditalic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Voice-Lab/VoiceLab/7d34cac2e21803b543355bbd03d346f3ea82c5d4/voicelab/src/Voicelab/help/builddir/_static/fonts/Lato/lato-bolditalic.ttf -------------------------------------------------------------------------------- /voicelab/src/Voicelab/help/builddir/_static/fonts/Lato/lato-bolditalic.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Voice-Lab/VoiceLab/7d34cac2e21803b543355bbd03d346f3ea82c5d4/voicelab/src/Voicelab/help/builddir/_static/fonts/Lato/lato-bolditalic.woff -------------------------------------------------------------------------------- /voicelab/src/Voicelab/help/builddir/_static/fonts/Lato/lato-bolditalic.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Voice-Lab/VoiceLab/7d34cac2e21803b543355bbd03d346f3ea82c5d4/voicelab/src/Voicelab/help/builddir/_static/fonts/Lato/lato-bolditalic.woff2 -------------------------------------------------------------------------------- /voicelab/src/Voicelab/help/builddir/_static/fonts/Lato/lato-italic.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Voice-Lab/VoiceLab/7d34cac2e21803b543355bbd03d346f3ea82c5d4/voicelab/src/Voicelab/help/builddir/_static/fonts/Lato/lato-italic.eot -------------------------------------------------------------------------------- /voicelab/src/Voicelab/help/builddir/_static/fonts/Lato/lato-italic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Voice-Lab/VoiceLab/7d34cac2e21803b543355bbd03d346f3ea82c5d4/voicelab/src/Voicelab/help/builddir/_static/fonts/Lato/lato-italic.ttf -------------------------------------------------------------------------------- /voicelab/src/Voicelab/help/builddir/_static/fonts/Lato/lato-italic.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Voice-Lab/VoiceLab/7d34cac2e21803b543355bbd03d346f3ea82c5d4/voicelab/src/Voicelab/help/builddir/_static/fonts/Lato/lato-italic.woff -------------------------------------------------------------------------------- /voicelab/src/Voicelab/help/builddir/_static/fonts/Lato/lato-italic.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Voice-Lab/VoiceLab/7d34cac2e21803b543355bbd03d346f3ea82c5d4/voicelab/src/Voicelab/help/builddir/_static/fonts/Lato/lato-italic.woff2 -------------------------------------------------------------------------------- /voicelab/src/Voicelab/help/builddir/_static/fonts/Lato/lato-regular.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Voice-Lab/VoiceLab/7d34cac2e21803b543355bbd03d346f3ea82c5d4/voicelab/src/Voicelab/help/builddir/_static/fonts/Lato/lato-regular.eot -------------------------------------------------------------------------------- /voicelab/src/Voicelab/help/builddir/_static/fonts/Lato/lato-regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Voice-Lab/VoiceLab/7d34cac2e21803b543355bbd03d346f3ea82c5d4/voicelab/src/Voicelab/help/builddir/_static/fonts/Lato/lato-regular.ttf -------------------------------------------------------------------------------- /voicelab/src/Voicelab/help/builddir/_static/fonts/Lato/lato-regular.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Voice-Lab/VoiceLab/7d34cac2e21803b543355bbd03d346f3ea82c5d4/voicelab/src/Voicelab/help/builddir/_static/fonts/Lato/lato-regular.woff -------------------------------------------------------------------------------- /voicelab/src/Voicelab/help/builddir/_static/fonts/Lato/lato-regular.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Voice-Lab/VoiceLab/7d34cac2e21803b543355bbd03d346f3ea82c5d4/voicelab/src/Voicelab/help/builddir/_static/fonts/Lato/lato-regular.woff2 -------------------------------------------------------------------------------- /voicelab/src/Voicelab/help/builddir/_static/fonts/RobotoSlab-Bold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Voice-Lab/VoiceLab/7d34cac2e21803b543355bbd03d346f3ea82c5d4/voicelab/src/Voicelab/help/builddir/_static/fonts/RobotoSlab-Bold.ttf -------------------------------------------------------------------------------- /voicelab/src/Voicelab/help/builddir/_static/fonts/RobotoSlab-Regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Voice-Lab/VoiceLab/7d34cac2e21803b543355bbd03d346f3ea82c5d4/voicelab/src/Voicelab/help/builddir/_static/fonts/RobotoSlab-Regular.ttf -------------------------------------------------------------------------------- /voicelab/src/Voicelab/help/builddir/_static/fonts/RobotoSlab/roboto-slab-v7-bold.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Voice-Lab/VoiceLab/7d34cac2e21803b543355bbd03d346f3ea82c5d4/voicelab/src/Voicelab/help/builddir/_static/fonts/RobotoSlab/roboto-slab-v7-bold.eot -------------------------------------------------------------------------------- /voicelab/src/Voicelab/help/builddir/_static/fonts/RobotoSlab/roboto-slab-v7-bold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Voice-Lab/VoiceLab/7d34cac2e21803b543355bbd03d346f3ea82c5d4/voicelab/src/Voicelab/help/builddir/_static/fonts/RobotoSlab/roboto-slab-v7-bold.ttf -------------------------------------------------------------------------------- /voicelab/src/Voicelab/help/builddir/_static/fonts/RobotoSlab/roboto-slab-v7-bold.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Voice-Lab/VoiceLab/7d34cac2e21803b543355bbd03d346f3ea82c5d4/voicelab/src/Voicelab/help/builddir/_static/fonts/RobotoSlab/roboto-slab-v7-bold.woff -------------------------------------------------------------------------------- /voicelab/src/Voicelab/help/builddir/_static/fonts/RobotoSlab/roboto-slab-v7-bold.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Voice-Lab/VoiceLab/7d34cac2e21803b543355bbd03d346f3ea82c5d4/voicelab/src/Voicelab/help/builddir/_static/fonts/RobotoSlab/roboto-slab-v7-bold.woff2 -------------------------------------------------------------------------------- /voicelab/src/Voicelab/help/builddir/_static/fonts/RobotoSlab/roboto-slab-v7-regular.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Voice-Lab/VoiceLab/7d34cac2e21803b543355bbd03d346f3ea82c5d4/voicelab/src/Voicelab/help/builddir/_static/fonts/RobotoSlab/roboto-slab-v7-regular.eot -------------------------------------------------------------------------------- /voicelab/src/Voicelab/help/builddir/_static/fonts/RobotoSlab/roboto-slab-v7-regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Voice-Lab/VoiceLab/7d34cac2e21803b543355bbd03d346f3ea82c5d4/voicelab/src/Voicelab/help/builddir/_static/fonts/RobotoSlab/roboto-slab-v7-regular.ttf -------------------------------------------------------------------------------- /voicelab/src/Voicelab/help/builddir/_static/fonts/RobotoSlab/roboto-slab-v7-regular.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Voice-Lab/VoiceLab/7d34cac2e21803b543355bbd03d346f3ea82c5d4/voicelab/src/Voicelab/help/builddir/_static/fonts/RobotoSlab/roboto-slab-v7-regular.woff -------------------------------------------------------------------------------- /voicelab/src/Voicelab/help/builddir/_static/fonts/RobotoSlab/roboto-slab-v7-regular.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Voice-Lab/VoiceLab/7d34cac2e21803b543355bbd03d346f3ea82c5d4/voicelab/src/Voicelab/help/builddir/_static/fonts/RobotoSlab/roboto-slab-v7-regular.woff2 -------------------------------------------------------------------------------- /voicelab/src/Voicelab/help/builddir/_static/fonts/fontawesome-webfont.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Voice-Lab/VoiceLab/7d34cac2e21803b543355bbd03d346f3ea82c5d4/voicelab/src/Voicelab/help/builddir/_static/fonts/fontawesome-webfont.eot -------------------------------------------------------------------------------- /voicelab/src/Voicelab/help/builddir/_static/fonts/fontawesome-webfont.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Voice-Lab/VoiceLab/7d34cac2e21803b543355bbd03d346f3ea82c5d4/voicelab/src/Voicelab/help/builddir/_static/fonts/fontawesome-webfont.ttf -------------------------------------------------------------------------------- /voicelab/src/Voicelab/help/builddir/_static/fonts/fontawesome-webfont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Voice-Lab/VoiceLab/7d34cac2e21803b543355bbd03d346f3ea82c5d4/voicelab/src/Voicelab/help/builddir/_static/fonts/fontawesome-webfont.woff -------------------------------------------------------------------------------- /voicelab/src/Voicelab/help/builddir/_static/fonts/fontawesome-webfont.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Voice-Lab/VoiceLab/7d34cac2e21803b543355bbd03d346f3ea82c5d4/voicelab/src/Voicelab/help/builddir/_static/fonts/fontawesome-webfont.woff2 -------------------------------------------------------------------------------- /voicelab/src/Voicelab/help/builddir/_static/js/badge_only.js: -------------------------------------------------------------------------------- 1 | !function(e){var t={};function r(n){if(t[n])return t[n].exports;var o=t[n]={i:n,l:!1,exports:{}};return e[n].call(o.exports,o,o.exports,r),o.l=!0,o.exports}r.m=e,r.c=t,r.d=function(e,t,n){r.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n})},r.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.t=function(e,t){if(1&t&&(e=r(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(r.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)r.d(n,o,function(t){return e[t]}.bind(null,o));return n},r.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return r.d(t,"a",t),t},r.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},r.p="",r(r.s=4)}({4:function(e,t,r){}}); -------------------------------------------------------------------------------- /voicelab/src/Voicelab/help/builddir/_static/js/html5shiv.min.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @preserve HTML5 Shiv 3.7.3 | @afarkas @jdalton @jon_neal @rem | MIT/GPL2 Licensed 3 | */ 4 | !function(a,b){function c(a,b){var c=a.createElement("p"),d=a.getElementsByTagName("head")[0]||a.documentElement;return c.innerHTML="x",d.insertBefore(c.lastChild,d.firstChild)}function d(){var a=t.elements;return"string"==typeof a?a.split(" "):a}function e(a,b){var c=t.elements;"string"!=typeof c&&(c=c.join(" ")),"string"!=typeof a&&(a=a.join(" ")),t.elements=c+" "+a,j(b)}function f(a){var b=s[a[q]];return b||(b={},r++,a[q]=r,s[r]=b),b}function g(a,c,d){if(c||(c=b),l)return c.createElement(a);d||(d=f(c));var e;return e=d.cache[a]?d.cache[a].cloneNode():p.test(a)?(d.cache[a]=d.createElem(a)).cloneNode():d.createElem(a),!e.canHaveChildren||o.test(a)||e.tagUrn?e:d.frag.appendChild(e)}function h(a,c){if(a||(a=b),l)return a.createDocumentFragment();c=c||f(a);for(var e=c.frag.cloneNode(),g=0,h=d(),i=h.length;i>g;g++)e.createElement(h[g]);return e}function i(a,b){b.cache||(b.cache={},b.createElem=a.createElement,b.createFrag=a.createDocumentFragment,b.frag=b.createFrag()),a.createElement=function(c){return t.shivMethods?g(c,a,b):b.createElem(c)},a.createDocumentFragment=Function("h,f","return function(){var n=f.cloneNode(),c=n.createElement;h.shivMethods&&("+d().join().replace(/[\w\-:]+/g,function(a){return b.createElem(a),b.frag.createElement(a),'c("'+a+'")'})+");return n}")(t,b.frag)}function j(a){a||(a=b);var d=f(a);return!t.shivCSS||k||d.hasCSS||(d.hasCSS=!!c(a,"article,aside,dialog,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}mark{background:#FF0;color:#000}template{display:none}")),l||i(a,d),a}var k,l,m="3.7.3-pre",n=a.html5||{},o=/^<|^(?:button|map|select|textarea|object|iframe|option|optgroup)$/i,p=/^(?:a|b|code|div|fieldset|h1|h2|h3|h4|h5|h6|i|label|li|ol|p|q|span|strong|style|table|tbody|td|th|tr|ul)$/i,q="_html5shiv",r=0,s={};!function(){try{var a=b.createElement("a");a.innerHTML="",k="hidden"in a,l=1==a.childNodes.length||function(){b.createElement("a");var a=b.createDocumentFragment();return"undefined"==typeof a.cloneNode||"undefined"==typeof a.createDocumentFragment||"undefined"==typeof a.createElement}()}catch(c){k=!0,l=!0}}();var t={elements:n.elements||"abbr article aside audio bdi canvas data datalist details dialog figcaption figure footer header hgroup main mark meter nav output picture progress section summary template time video",version:m,shivCSS:n.shivCSS!==!1,supportsUnknownElements:l,shivMethods:n.shivMethods!==!1,type:"default",shivDocument:j,createElement:g,createDocumentFragment:h,addElements:e};a.html5=t,j(b),"object"==typeof module&&module.exports&&(module.exports=t)}("undefined"!=typeof window?window:this,document); -------------------------------------------------------------------------------- /voicelab/src/Voicelab/help/builddir/_static/minus.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Voice-Lab/VoiceLab/7d34cac2e21803b543355bbd03d346f3ea82c5d4/voicelab/src/Voicelab/help/builddir/_static/minus.png -------------------------------------------------------------------------------- /voicelab/src/Voicelab/help/builddir/_static/plus.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Voice-Lab/VoiceLab/7d34cac2e21803b543355bbd03d346f3ea82c5d4/voicelab/src/Voicelab/help/builddir/_static/plus.png -------------------------------------------------------------------------------- /voicelab/src/Voicelab/help/builddir/_static/up-pressed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Voice-Lab/VoiceLab/7d34cac2e21803b543355bbd03d346f3ea82c5d4/voicelab/src/Voicelab/help/builddir/_static/up-pressed.png -------------------------------------------------------------------------------- /voicelab/src/Voicelab/help/builddir/_static/up.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Voice-Lab/VoiceLab/7d34cac2e21803b543355bbd03d346f3ea82c5d4/voicelab/src/Voicelab/help/builddir/_static/up.png -------------------------------------------------------------------------------- /voicelab/src/Voicelab/help/builddir/objects.inv: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Voice-Lab/VoiceLab/7d34cac2e21803b543355bbd03d346f3ea82c5d4/voicelab/src/Voicelab/help/builddir/objects.inv -------------------------------------------------------------------------------- /voicelab/src/Voicelab/pipeline/FileWidget.py: -------------------------------------------------------------------------------- 1 | import sys 2 | from PyQt5.QtWidgets import QApplication, QWidget, QInputDialog, QLineEdit, QFileDialog 3 | from PyQt5.QtGui import QIcon 4 | 5 | app = QApplication(sys.argv) 6 | 7 | 8 | class FileWidget(QWidget): 9 | def __init__(self): 10 | super().__init__() 11 | self.title = "Select Some Files" 12 | self.left = 10 13 | self.top = 10 14 | self.width = 640 15 | self.height = 480 16 | self.setWindowTitle(self.title) 17 | self.setGeometry(self.left, self.top, self.width, self.height) 18 | 19 | def openFileNamesDialog(self): 20 | options = QFileDialog.Options() 21 | options |= QFileDialog.DontUseNativeDialog 22 | files, _ = QFileDialog.getOpenFileNames( 23 | self, 24 | "QFileDialog.getOpenFileNames()", 25 | "", 26 | "All Files (*);;Python Files (*.py)", 27 | options=options, 28 | ) 29 | self.show() 30 | return files 31 | 32 | def saveFileDialog(self): 33 | options = QFileDialog.Options() 34 | options |= QFileDialog.DontUseNativeDialog 35 | fileName, _ = QFileDialog.getSaveFileName( 36 | self, 37 | "QFileDialog.getSaveFileName()", 38 | "", 39 | "All Files (*);;Text Files (*.txt)", 40 | options=options, 41 | ) 42 | self.show() 43 | return fileName 44 | -------------------------------------------------------------------------------- /voicelab/src/Voicelab/pipeline/NodeFactory.py: -------------------------------------------------------------------------------- 1 | import importlib 2 | 3 | # Task Factories know about all types of tasks that can be created and creates the appropriate instance when called 4 | # Abstracts the creation logic, and all of the library importing away from the user 5 | 6 | ################################################################################################### 7 | # NodeFactory: Abstracts the creation logic for new nodes 8 | # Singleton Factory pattern, so no instantiation needed 9 | ################################################################################################### 10 | class NodeFactory: 11 | """Create new nodes based on a type id""" 12 | 13 | registered_nodes = {} 14 | 15 | ############################################################################################### 16 | # Register Node (Class Method) : Registers a new node under a specified name/id 17 | ############################################################################################### 18 | @classmethod 19 | def register_node(cls, type_id, type_class): 20 | """register a new node into the factory 21 | 22 | Args: 23 | type_id: 24 | type_class: 25 | """ 26 | cls.registered_nodes[type_id] = type_class 27 | 28 | ############################################################################################### 29 | # Create Node (Class Method) : Returns a new instance of the specifed node 30 | ############################################################################################### 31 | @classmethod 32 | def create_node(cls, node_id, type_id): 33 | """create a new node based on type id 34 | 35 | Args: 36 | node_id: 37 | type_id: 38 | """ 39 | node = cls.registered_nodes[type_id](node_id) 40 | return node 41 | 42 | ############################################################################################### 43 | # Import Node (Class Method) : Imports the python class associated with a node and register it 44 | ############################################################################################### 45 | @classmethod 46 | def import_node(cls, type_id, toolkit_id, class_name): 47 | """import the class for a new node and register it 48 | 49 | Args: 50 | type_id: 51 | toolkit_id: 52 | class_name: 53 | """ 54 | if type_id not in cls.registered_nodes: 55 | module_name = "toolkits." + toolkit_id + "." + class_name 56 | module = importlib.import_module(module_name) 57 | cls.register_node(type_id, getattr(module, class_name)) 58 | 59 | return cls.registered_nodes[type_id] 60 | -------------------------------------------------------------------------------- /voicelab/src/Voicelab/pipeline/NodzInterface.py: -------------------------------------------------------------------------------- 1 | import json 2 | from Voicelab.pipeline.NodeFactory import NodeFactory 3 | 4 | NODZ_SAVE_LOCATION = "./pipeline/saves/sample.json" 5 | 6 | ################################################################################################## 7 | # NodzInterface: Compartmentalizes the importing of a save file from the nodz library. Singleton 8 | ################################################################################################## 9 | class NodzInterface: 10 | 11 | ############################################################################################### 12 | # Load (static): loads a well formatted json save from nodz and returns an array of nodes and 13 | # the connections 14 | ############################################################################################### 15 | @staticmethod 16 | def load(file_location): 17 | 18 | """ 19 | Args: 20 | file_location: 21 | """ 22 | nodes_mapping = {} 23 | nodes = [] 24 | connections = [] 25 | global_vars = {} 26 | 27 | with open(file_location, "r") as f: 28 | data = json.load(f) 29 | 30 | if "NODES" in data: 31 | for node_id in data["NODES"]: 32 | node = data["NODES"][node_id] 33 | class_name = node["file"].split(".")[ 34 | 0 35 | ] # extract the name of the class stored here as XXXX.py 36 | NodeFactory.import_node( 37 | node["type"], node["toolkit"], class_name 38 | ) # uses the Nodefactory to do the import logic, this also registers it with the factory for creating new versions 39 | node_instance = NodeFactory.create_node( 40 | node_id, node["type"] 41 | ) # Create a new instance of this node 42 | node_instance.args = { 43 | **node["variables"] 44 | } # Copies the variables into the node as default arguments/configurations 45 | nodes.append( 46 | [node_id, node_instance] 47 | ) # Compact the id and instance for access later 48 | nodes_mapping[ 49 | node_id 50 | ] = ( 51 | node_instance 52 | ) # we use a mapping of id to instance for use parsing connections later 53 | 54 | if "CONNECTIONS" in data: 55 | for connection in data["CONNECTIONS"]: 56 | parent_id, parent_terminal = connection[0].split( 57 | "." 58 | ) # Stored in json as id.terminal 59 | child_id, child_terminal = connection[1].split(".") 60 | parent = nodes_mapping[parent_id] 61 | child = nodes_mapping[child_id] 62 | connections.append( 63 | [(parent, parent_terminal), (child, child_terminal)] 64 | ) # stores the nodes and terminals all together 65 | 66 | # TODO: parse the global variables contained in nodz 67 | if "GLOBALS" in data: 68 | for global_var in data["GLOBALS"]: 69 | print(global_var) 70 | 71 | return nodes, connections, global_vars 72 | -------------------------------------------------------------------------------- /voicelab/src/Voicelab/pipeline/QWidgetValueAccesser.py: -------------------------------------------------------------------------------- 1 | from PyQt5.QtWidgets import * 2 | 3 | 4 | class QWidgetValueAccesser: 5 | def get_value(self, widget): 6 | """ 7 | Args: 8 | widget: 9 | """ 10 | if isinstance(widget, QComboBox): 11 | return widget.currentText() 12 | elif isinstance(widget, QLineEdit): 13 | return widget.text() 14 | elif isinstance(widget, QCheckBox): 15 | return widget.isChecked() 16 | 17 | def set_value(self, widget, value): 18 | """ 19 | Args: 20 | widget: 21 | value: 22 | """ 23 | if isinstance(widget, QComboBox): 24 | widget.setCurrentText(value) 25 | elif isinstance(widget, QLineEdit): 26 | widget.setText(value) 27 | elif isinstance(widget, QCheckBox): 28 | widget.setChecked(value) 29 | -------------------------------------------------------------------------------- /voicelab/src/Voicelab/pipeline/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Voice-Lab/VoiceLab/7d34cac2e21803b543355bbd03d346f3ea82c5d4/voicelab/src/Voicelab/pipeline/__init__.py -------------------------------------------------------------------------------- /voicelab/src/Voicelab/toolkits/Voicelab/.directory: -------------------------------------------------------------------------------- 1 | [Dolphin] 2 | SortRole=type 3 | Timestamp=2020,12,16,15,19,46 4 | Version=4 5 | ViewMode=1 6 | VisibleRoles=Details_text,Details_size,Details_modificationtime,Details_type,CustomizedDetails 7 | -------------------------------------------------------------------------------- /voicelab/src/Voicelab/toolkits/Voicelab/IPA_Praat_symbols.csv: -------------------------------------------------------------------------------- 1 | IPA,Praat 2 | χ,\cf 3 | θ,\tf 4 | β,\bf 5 | ʘ,\O. 6 | ǃ,! 7 | ǂ,\|- 8 | ǁ,\|2 9 | ǀ,\|1 10 | ʢ,\9- 11 | ʡ,\?- 12 | ˤ,\^9 13 | ʕ,\9e 14 | ʔ,\?g 15 | ʒ,\zh 16 | ʑ,\zc 17 | ʐ,\z. 18 | z,z 19 | ʏ,\yc 20 | y,y 21 | x,x 22 | ʍ,\wt 23 | ʷ,\^w 24 | w,w 25 | ʌ,\vt 26 | ⱱ, 27 | ʋ,\vs 28 | v,v 29 | ʊ,\hs 30 | ɰ,\ml 31 | ɯ,\mt 32 | ɥ,\ht 33 | ʉ,\u- 34 | u,u 35 | ʈ,\t. 36 | t,t 37 | ʃ,\sh 38 | ʂ,\s. 39 | s,s 40 | ʁ,\ri 41 | ɾ,\fh 42 | ɽ,\f. 43 | ɻ,\r. 44 | ɺ,\rl 45 | ɹ,\rt 46 | ʀ,\rc 47 | r,r 48 | q,q 49 | ɸ,\ff 50 | p,p 51 | ɵ,\o- 52 | ɔ,\ct 53 | ɶ,\Oe 54 | œ,\oe 55 | ø,\o/ 56 | o,o 57 | ŋ,\ng 58 | ɳ,\n. 59 | ɲ,\nj 60 | ɴ,\nc 61 | ⁿ,\^n 62 | n,n 63 | ɱ,\mj 64 | m,m 65 | ʎ,\yt 66 | ɮ,\lz 67 | ɭ,\l. 68 | ɬ,\l- 69 | ɫ,\l~ 70 | ʟ,\lc 71 | ˡ,\^l 72 | l,l 73 | k,k 74 | ʄ,\j^ 75 | ɟ,\j- 76 | ʝ,\jc 77 | ʲ,\^j 78 | j,j 79 | ɨ,\i- 80 | ɪ,\ic 81 | i,i 82 | ɧ,\hj 83 | ɦ,\h^ 84 | ʜ,\hc 85 | ħ,\h- 86 | ʰ,\^h 87 | h,h 88 | ˠ,\^G 89 | ɣ,\gf 90 | ʛ,\G^ 91 | ɠ,\g^ 92 | ɢ,\gc 93 | ɡ,\gs 94 | f,f 95 | ɤ,\rh 96 | ɞ,\kb 97 | ɜ,\er 98 | ɚ,\sr 99 | ɘ,\e- 100 | ɛ,\ef 101 | ə,\sw 102 | e,e 103 | ɗ,\d^ 104 | ɖ,\d. 105 | ð,\dh 106 | d,d 107 | ɕ,\cc 108 | ç,"\c," 109 | c,c 110 | ɓ,\b^ 111 | ʙ,\bc 112 | b,b 113 | ɒ,\ab 114 | ɑ,\as 115 | ɐ,\at 116 | æ,\ae 117 | a,a 118 | ˑ,\.f 119 | ː,\:f 120 | ◌ʼ,\ap 121 | ◌͡◌,\lip 122 | ◌͜◌, 123 | ◌˞,\hr 124 | ◌̹,\3v 125 | ◌̴, 126 | ◌̰,\~v 127 | ◌̥,\0v 128 | ◌̤,\:v 129 | ◌̏, 130 | ◌̬, 131 | ◌̼, 132 | ◌̪,\Nv 133 | ◌̺,\Uv 134 | ◌̻,\Dv 135 | ◌̜,\cv 136 | ◌̟,\+v 137 | ◌̠,\-v 138 | ◌̘,\T( 139 | ◌̙,\T) 140 | ◌̝,\T^ 141 | ◌̞,\Tv 142 | ◌̩,\|v 143 | ◌̯,\nv 144 | ◌̽, 145 | ◌̚,\cn 146 | ◌᷄, 147 | ◌᷅, 148 | ◌᷈, 149 | ◌̄,\-^ 150 | ◌̃,\~^ 151 | ◌̋, 152 | ◌̈,\:^ 153 | ◌̊,\0^ 154 | ◌̌,\v^ 155 | ◌̂,\^^ 156 | ◌̆,\N^ 157 | ◌̀,\`^ 158 | ◌́,\'^ 159 | |,| 160 | ↘, 161 | ↗, 162 | ꜜ, 163 | ꜛ, 164 | ˩, 165 | ˨, 166 | ˧, 167 | ˦, 168 | ˥, 169 | ˌ,\'2 170 | ˈ,\'1 171 | ‿,\_ub 172 | ‖,|| 173 | .,. 174 | -------------------------------------------------------------------------------- /voicelab/src/Voicelab/toolkits/Voicelab/LoadVoicesNode.py: -------------------------------------------------------------------------------- 1 | import parselmouth 2 | from ...pipeline.Node import Node 3 | from parselmouth.praat import call 4 | from ...pipeline.FileWidget import FileWidget 5 | 6 | 7 | """ 8 | LOAD VOICES NODE 9 | WARIO pipeline node for loading voice files. 10 | ################################################################################################### 11 | ARGUMENTS 12 | 'file_locations' : list of filesystem locations for where to find the voice files 13 | ################################################################################################### 14 | RETURNS 15 | 'voice' [batch] : return a parselmouth voice object for each file loaded 16 | ################################################################################################### 17 | """ 18 | 19 | 20 | class LoadVoicesNode(Node): 21 | def __init__(self, name): 22 | """ 23 | Args: 24 | name: 25 | """ 26 | super().__init__(name) 27 | self.done = False 28 | 29 | 30 | def process(self): 31 | """ 32 | process: Retrieve the next file location and return it 33 | """ 34 | #item, file_path = self.get_next(self.state["voices"]) 35 | #return {"voice": item, "file_path": file_path} 36 | (signal, sampling_rate), file_path = self.get_next(self.state["voices"]) 37 | return {"voice": (signal, sampling_rate), "file_path": file_path} 38 | 39 | 40 | def start(self): 41 | """ 42 | start: WARIO hook, run before any data is processed to load the data in 43 | """ 44 | self.state["voices"] = [] 45 | 46 | # If a collection of file locations are present use those, otherwise prompt for them 47 | if len(self.args["file_locations"]) == 0: 48 | ex = FileWidget() 49 | self.state["files"] = ex.openFileNamesDialog() 50 | else: 51 | self.state["files"] = self.args["file_locations"] 52 | 53 | for file_path in self.state["files"]: 54 | # This is where we load files 55 | # Select Load None if we want to load nothing 56 | # Append the parselmouth.Sound object if you don't need multiprocessing 57 | # We are going to try passing the data and sampling rate through nodes instead of sound objects. 58 | sound = parselmouth.Sound(file_path) 59 | signal = sound.values 60 | sampling_rate = sound.sampling_frequency 61 | voice = (signal, sampling_rate) 62 | self.state["voices"].append((voice, file_path)) 63 | #self.state["voices"].append((None, file_path)) 64 | 65 | # return how many files have been loaded 66 | return len(self.state["voices"]) 67 | 68 | """ 69 | get_next: Retrieve the next file location by simply popping off the stack 70 | """ 71 | def get_next(self, collection): 72 | """ 73 | Args: 74 | collection: 75 | """ 76 | item = collection.pop() 77 | if len(collection) <= 0: 78 | self.done = True 79 | return item 80 | -------------------------------------------------------------------------------- /voicelab/src/Voicelab/toolkits/Voicelab/ManipulateRaisePitchAndFormantsNode.py: -------------------------------------------------------------------------------- 1 | from __future__ import annotations 2 | 3 | import parselmouth 4 | from parselmouth.praat import call 5 | from typing import Union 6 | from ...pipeline.Node import Node 7 | from .VoicelabNode import VoicelabNode 8 | 9 | 10 | 11 | class ManipulateRaisePitchAndFormantsNode(VoicelabNode): 12 | """Manipulate raise pitch and formants 13 | 14 | Arguments 15 | ---------- 16 | self.args : dict 17 | Arguments for the node 18 | self.args['formant_factor'] : float, default=1.15 19 | Factor to multiply formants by. Use a number >1. For lower values, use ManipulateLowerPitchAndFormantsNode 20 | self.args['pitch_factor'] : float 21 | Factor to multiply pitch by 22 | self.args['normalize amplitude'] : bool, default=True 23 | Normalize amplitude to 70 dB RMS 24 | """ 25 | def __init__(self, *args, **kwargs): 26 | super().__init__(*args, **kwargs) 27 | 28 | self.args = { 29 | "formant_factor": 1.15, 30 | "pitch_factor": 1.15, 31 | "normalize amplitude": True, 32 | } 33 | 34 | # These are default settings for praat that we are hiding from the GUI and API 35 | self.pitch_range_factor = 1 36 | self.duration_factor = 1 37 | 38 | def process(self) -> dict[Union[str, parselmouth.Sound]]: 39 | """Raise pitch and formants 40 | 41 | :return: Dictionary of manipulated sound 42 | :rtype: dict of [str, parselmouth.Sound] 43 | """ 44 | 45 | file_path = self.args["file_path"] 46 | signal, sampling_rate = self.args['voice'] 47 | sound: parselmouth.Sound = parselmouth.Sound(signal, sampling_rate) 48 | formant_factor = self.args["formant_factor"] 49 | pitch_factor = self.args["pitch_factor"] 50 | pitch_range_factor = self.pitch_range_factor 51 | duration_factor = self.duration_factor 52 | f0min, f0max = self.pitch_bounds(file_path) 53 | self.args['f0min'], self.args['f0max'] = f0min, f0max 54 | pitch = sound.to_pitch() 55 | print(f0min, f0max) 56 | median_pitch = call(pitch, "Get quantile", sound.xmin, sound.xmax, 0.5, "Hertz") 57 | 58 | new_pitch_median = pitch_factor * median_pitch 59 | 60 | output_file_name = file_path.split("/")[-1].split(".wav")[0] 61 | output_file_name = ( 62 | f"{output_file_name}_raise_pitch_and_formants_{pitch_factor}_{formant_factor}" 63 | ) 64 | number_of_channels = call(sound, 'Get number of channels') 65 | if number_of_channels == 2: 66 | sound = call(sound, 'Convert to mono') 67 | 68 | manipulated_sound = call( 69 | sound, 70 | "Change gender", 71 | f0min, 72 | f0max, 73 | formant_factor, 74 | new_pitch_median, 75 | pitch_range_factor, 76 | duration_factor, 77 | ) 78 | 79 | if self.args["normalize amplitude"]: 80 | manipulated_sound.scale_intensity(70) 81 | 82 | manipulated_sound.name = output_file_name 83 | 84 | return {"voice": manipulated_sound} 85 | -------------------------------------------------------------------------------- /voicelab/src/Voicelab/toolkits/Voicelab/MeasureDurationNode.py: -------------------------------------------------------------------------------- 1 | from __future__ import annotations 2 | import parselmouth 3 | from parselmouth.praat import call 4 | from typing import Union 5 | from ...pipeline.Node import Node 6 | from .VoicelabNode import VoicelabNode 7 | 8 | 9 | class MeasureDurationNode(VoicelabNode): 10 | """Measure the duration of the sound file.""" 11 | def process(self) -> dict[str | Union[float, str]]: 12 | try: 13 | """Returns the total duration of a sound file.""" 14 | file_path: str = self.args["file_path"] 15 | signal, sampling_rate = self.args['voice'] 16 | sound: parselmouth.Sound = parselmouth.Sound(signal, sampling_rate) 17 | return {"Voice Duration": sound.duration} 18 | except Exception as e: 19 | return {"Voice Duration": str(e)} 20 | -------------------------------------------------------------------------------- /voicelab/src/Voicelab/toolkits/Voicelab/MeasureHarmonicityNode.py: -------------------------------------------------------------------------------- 1 | from __future__ import annotations 2 | 3 | from typing import Union 4 | from ...pipeline.Node import Node 5 | import parselmouth 6 | from parselmouth.praat import call 7 | from .VoicelabNode import VoicelabNode 8 | 9 | 10 | class MeasureHarmonicityNode(VoicelabNode): 11 | """Measure the harmonics-to-noise ratio of a sound. This is effetively the Signal-to-Noise Ratio (SNR) of a periodic sound. 12 | 13 | Arguments: 14 | --------- 15 | self.args: dict 16 | Dictionary of arguments for the node. 17 | self.args['Algorithm'] : str, default=To Harmonicity (cc)' 18 | Which pitch algorithm to use. Default is Cross Correlation, alternate is Auto Correlation. 19 | self.args['Timestep'] : float, default 0.01 20 | The timestep (hop length/time between windows) to use for the analysis. 21 | self.args["Silence Threshold"]: float, default=0.1, 22 | The threshold below which a frame is considered silent. 23 | self.args["Periods per Window"]: float, default=4.5, 24 | The number of periods per window. 25 | """ 26 | def __init__(self, *args, **kwargs): 27 | 28 | """ 29 | Args: 30 | *args: 31 | **kwargs: 32 | """ 33 | super().__init__(*args, **kwargs) 34 | 35 | self.args = { 36 | "Algorithm": ( 37 | "To Harmonicity (cc)", 38 | ["To Harmonicity (cc)", "To Harmonicity (ac)"], 39 | ), 40 | "Timestep": 0.01, 41 | "Silence Threshold": 0.1, 42 | "Periods per Window": 4.5, # This is a new change from 1.0 43 | } 44 | 45 | def process(self): 46 | """This function measures Harmonics to Noise Ratio 47 | 48 | :return: A dictionary of the results or an error message. 49 | :rtype: dict[str, Union[str, float]] 50 | """ 51 | 52 | try: 53 | file_path: str = self.args["file_path"] 54 | sound: parselmouth.Sound = parselmouth.Sound(file_path) 55 | algorithm: str = self.args["Algorithm"][0] 56 | timestep: float = self.args["Timestep"] 57 | silence_threshold: float = self.args["Silence Threshold"] 58 | periods_per_window: float = self.args["Periods per Window"] 59 | pitch_floor: float = self.pitch_floor(sound) 60 | harmonicity: float = call(sound, algorithm, timestep, pitch_floor, silence_threshold, periods_per_window,) 61 | hnr: float = call(harmonicity, "Get mean", 0, 0) 62 | return {"Harmonics to Noise Ratio": hnr} 63 | except Exception as e: 64 | return {"Harmonics to Noise Ratio": str(e)} 65 | -------------------------------------------------------------------------------- /voicelab/src/Voicelab/toolkits/Voicelab/MeasureIntensityNode.py: -------------------------------------------------------------------------------- 1 | from __future__ import annotations 2 | from typing import Union 3 | 4 | import parselmouth 5 | 6 | from ...pipeline.Node import Node 7 | from parselmouth.praat import call 8 | from .VoicelabNode import VoicelabNode 9 | 10 | 11 | class MeasureIntensityNode(VoicelabNode): 12 | """Measure Intensity (dB) of sound 13 | Arguments: 14 | self.args: dict of arguments 15 | These are the Intensity options from Praat: 16 | minimum_pitch Union[float, int], default 100.0 17 | The minimum pitch for the analysis. This sets the analysis window to 0.8 / minimum pitch 18 | time step: float, default 0.0 (Automatic) 19 | The time step (hop length) for the analysis 20 | Subtract Mean: bool, default True 21 | Subtract the mean intensity from the intensity 22 | """ 23 | def __init__(self, *args, **kwargs): 24 | """ 25 | Args: 26 | *args: 27 | **kwargs: 28 | """ 29 | super().__init__(*args, **kwargs) 30 | 31 | self.args = { 32 | "minimum_pitch": 100.0, 33 | "time step": 0.0, 34 | "Subtract Mean": True 35 | } 36 | 37 | def process(self): 38 | """Run the intensity analysis 39 | 40 | :argument self.args['file_path']: the path to the file to be analysed 41 | :type self.args['file_path']: str 42 | 43 | :return: dict of results 44 | :rtype: dict[str, Union[int, float, str, list]] 45 | """ 46 | file_path = self.args['file_path'] 47 | voice = parselmouth.Sound(file_path) 48 | try: 49 | minimum_pitch = self.args["minimum_pitch"] 50 | intensity = voice.to_intensity(minimum_pitch) 51 | mean_intensity = intensity.get_average() 52 | return { 53 | "Intensity": intensity, 54 | "Mean Intensity (dB)": mean_intensity 55 | } 56 | except Exception as e: 57 | return { 58 | "Intensity": str(e), 59 | "Mean Intensity (dB)": str(e) 60 | } 61 | -------------------------------------------------------------------------------- /voicelab/src/Voicelab/toolkits/Voicelab/MeasureMFCCNode.py: -------------------------------------------------------------------------------- 1 | from __future__ import annotations 2 | import parselmouth 3 | from typing import Union 4 | 5 | from ...pipeline.Node import Node 6 | from parselmouth.praat import call 7 | from .VoicelabNode import VoicelabNode 8 | 9 | 10 | class MeasureMFCCNode(VoicelabNode): 11 | """Measure 24 MFCCs of a sound 12 | 13 | :argument self.args['file_path']: the path to the file to be analysed 14 | :type self.args['file_path']: str 15 | 16 | :return: dict of results 17 | :rtype: dict[str, Union[int, float, str, list]] 18 | """ 19 | def __init__(self, *args, **kwargs): 20 | super().__init__(*args, **kwargs) 21 | 22 | # initialize with default arguments 23 | self.args = { 24 | } 25 | 26 | # process: WARIO hook called once for each voice file. 27 | def process(self): 28 | """Run the MFCC analysis 29 | 30 | :argument self.args['file_path']: the path to the file to be analysed 31 | :type self.args['file_path']: str 32 | 33 | :return: dict of results 34 | :rtype: dict[str, Union[int, float, str, list]] 35 | """ 36 | file_path = self.args['file_path'] 37 | sound = parselmouth.Sound(file_path) 38 | try: 39 | mfcc = sound.to_mfcc(number_of_coefficients=24) 40 | return { 41 | "mfcc": mfcc.extract_features().values.tolist() 42 | } 43 | except Exception as e: 44 | return { 45 | "mfcc": str(e) 46 | } 47 | 48 | -------------------------------------------------------------------------------- /voicelab/src/Voicelab/toolkits/Voicelab/MeasurePitchNodeTest.py: -------------------------------------------------------------------------------- 1 | from ...pipeline.Node import Node 2 | from parselmouth.praat import call 3 | import parselmouth 4 | import numpy as np 5 | from .VoicelabNode import VoicelabNode 6 | 7 | from Voicelab.toolkits.Voicelab.MeasurePitchNode import MeasurePitchNode 8 | from pprint import pprint 9 | 10 | def run_node(filename): 11 | node = MeasurePitchNode() 12 | node.args['file_path'] = filename 13 | node.args['voice'] = parselmouth.Sound(node.args['file_path']) 14 | results = node.process() 15 | return node, results 16 | 17 | 18 | def test_results(results): 19 | # Check if pitch object is a valid pitch object 20 | assert isinstance(results['Pitch'], parselmouth.Pitch) 21 | 22 | # Check that we get expected results for the sound file 23 | assert results['Pitch Ceiling'] == 300 24 | assert results['Pitch Floor'] == 50 25 | assert results['Pitch Max (F0)'] == 110.62170729714686 26 | assert results['Pitch Min (F0)'] == 63.73360992459041 27 | assert results['Standard Deviation Pitch (F0)'] == 11.64020748154102 28 | 29 | # Check that the pitch values are a list of floats 30 | assert isinstance(results['Pitches'], list) 31 | assert all(isinstance(pitch, float) for pitch in results['Pitches']) 32 | 33 | 34 | filename = '/home/david/Desktop/Sderfahrer_mHK66.wav' 35 | node, results = run_node(filename) 36 | test_results(results) -------------------------------------------------------------------------------- /voicelab/src/Voicelab/toolkits/Voicelab/MeasurePitchRaptNode.py: -------------------------------------------------------------------------------- 1 | from ...pipeline.Node import Node 2 | from .VoicelabNode import VoicelabNode 3 | 4 | from parselmouth.praat import call 5 | import parselmouth 6 | 7 | import numpy as np 8 | import pysptk 9 | from scipy.io.wavfile import read as wavread 10 | 11 | 12 | class MeasurePitchRaptNode(VoicelabNode): 13 | 14 | def __init__(self, *args, **kwargs): 15 | """ 16 | Args: 17 | *args: 18 | **kwargs: 19 | """ 20 | super().__init__(*args, **kwargs) 21 | 22 | # initialize with default arguments 23 | 24 | self.args = { 25 | "hopsize": 0.01, # sampling rate times this number 26 | "min": 40, # minimum frequency 27 | "max": 500, # maximum frequency 28 | "Voiced/unvoiced threshold": 0.0, # voice_bias 29 | } 30 | 31 | def process(self): 32 | try: 33 | audioFilePath = self.args["file_path"] 34 | fs, x = wavread(audioFilePath) 35 | x = x.astype(np.float32) 36 | hopsize = int(fs * self.args['hopsize']) 37 | min = self.args['min'] 38 | max = self.args['max'] 39 | voice_bias = self.args["Voiced/unvoiced threshold"] 40 | f0 = pysptk.sptk.rapt(x, fs, hopsize, min, max, voice_bias, otype='f0') 41 | f0_nozero = f0[f0 > 0] 42 | mean_f0 = np.nanmean(f0_nozero).item() 43 | min_f0 = np.nanmin(f0_nozero).item() 44 | max_f0 = np.nanmax(f0_nozero).item() 45 | return { 46 | 'Mean Pitch RAPT': mean_f0, 47 | 'Min Pitch RAPT': min_f0, 48 | 'Max Pitch RAPT': max_f0, 49 | 'Pitch Values RAPT': f0.tolist(), 50 | } 51 | 52 | except: 53 | return { 54 | 'Mean Pitch RAPT': "Measure Pitch RAPT Failed", 55 | 'Min Pitch RAPT': "Measure Pitch RAPT Failed", 56 | 'Max Pitch RAPT': "Measure Pitch RAPT Failed", 57 | 'Pitch Values RAPT': "Measure Pitch RAPT Failed", 58 | } 59 | -------------------------------------------------------------------------------- /voicelab/src/Voicelab/toolkits/Voicelab/MeasurePitchYinNode.py: -------------------------------------------------------------------------------- 1 | from ...pipeline.Node import Node 2 | from .VoicelabNode import VoicelabNode 3 | from parselmouth.praat import call 4 | import parselmouth 5 | import inspect 6 | import numpy as np 7 | # from scipy.io.wavfile import read as wavread 8 | # from scipy.signal import resample 9 | # import statistics 10 | import librosa 11 | 12 | 13 | class MeasurePitchYinNode(VoicelabNode): 14 | 15 | def __init__(self, *args, **kwargs): 16 | """ 17 | Args: 18 | *args: 19 | **kwargs: 20 | """ 21 | super().__init__(*args, **kwargs) 22 | 23 | 24 | # initialize with default arguments 25 | self.args = { 26 | 'min f0': 40, 27 | 'max f0': 600, 28 | } 29 | 30 | def process(self, audioFilePath=None, *args, **kwargs): 31 | try: 32 | if audioFilePath[-3:].lower() != "wav": 33 | tmp_praat_object = parselmouth.Sound(audioFilePath) 34 | tmp_praat_object.save("tmp.wav", "WAV") 35 | audioFilePath = 'tmp.wav' 36 | y, sr = librosa.load(audioFilePath) 37 | fmin = self.args["min f0"] 38 | fmax = self.args["max f0"] 39 | pitches_full = librosa.yin(y, fmin=fmin, fmax=fmax, sr=sr) # This changed to keyword arguments to future proof incoming Librosa changes 40 | pitches = pitches_full[pitches_full != 0] 41 | yin_min_pitch = np.nanmin(pitches).item() 42 | yin_max_pitch = np.nanmax(pitches).item() 43 | yin_mean_pitch = np.nanmean(pitches).item() 44 | yin_median_pitch = np.nanmedian(pitches).item() 45 | yin_standard_deviation_pitch = np.nanstd(pitches).item() 46 | return { 47 | 'Min Pitch (Yin)': yin_min_pitch, 48 | 'Max Pitch (Yin)': yin_max_pitch, 49 | 'Mean Pitch (Yin)': yin_mean_pitch, 50 | 'Median Pitch (Yin)': yin_median_pitch, 51 | 'Standard Deviation Pitch (Yin)': yin_standard_deviation_pitch, 52 | 'Pitch Values (Yin)': pitches_full.tolist() 53 | } 54 | 55 | except Exception as e: 56 | return { 57 | 'Min Pitch (Yin)': str(e), 58 | 'Max Pitch (Yin)': str(e), 59 | 'Mean Pitch (Yin)': str(e), 60 | 'Median Pitch (Yin)': str(e), 61 | 'Pitch Values (Yin)': str(e), 62 | } 63 | -------------------------------------------------------------------------------- /voicelab/src/Voicelab/toolkits/Voicelab/ResampleSoundsNode.py: -------------------------------------------------------------------------------- 1 | from __future__ import annotations 2 | 3 | import parselmouth 4 | from parselmouth.praat import call 5 | 6 | from typing import Union 7 | 8 | from ...pipeline.Node import Node 9 | from .VoicelabNode import VoicelabNode 10 | 11 | 12 | 13 | class ResampleSoundsNode(VoicelabNode): 14 | """ 15 | Attributes 16 | ---------- 17 | self.args: dict 18 | Dictionary of parameters to pass into the node. 19 | 20 | self.args['Sampling Rate']: Union[float, int], default = 44100.0 21 | The target sampling rate. 22 | self.args['Precision']: Union[float, int], default=50 23 | - If Precision is 1, the method is linear interpolation, which is inaccurate but fast. 24 | - If Precision is greater than 1, the method is sin(x)/x ("sinc") interpolation, with a depth equal to Precision. For higher Precision, the algorithm is slower but more accurate. 25 | - If Sampling frequency is less than the sampling frequency of the selected sound, an anti-aliasing low-pass filtering is performed prior to resampling. 26 | - ``_ 27 | 28 | """ 29 | def __init__(self, *args, **kwargs): 30 | super().__init__(*args, **kwargs) 31 | 32 | self.args = {"Sampling Rate": 44100.0, # Positive number 33 | "Precision": 50 # Positive integer 34 | } 35 | # process: WARIO hook called once for each voice file. 36 | 37 | def process(self): 38 | """Resample sounds. This returns a parselmouth.Sound object which is saved later by the Voicelab interface. 39 | 40 | :return : dictionary with note of success and the resampled parselmouth.Sound object 41 | :rtype: dict{ 42 | str|str, 43 | str|Union[parselmouth.Sound, str] 44 | } 45 | 46 | """ 47 | try: 48 | # Load arguments 49 | file_path = self.args['file_path'] 50 | signal, sampling_rate = self.args['voice'] 51 | sound: parselmouth.Sound = parselmouth.Sound(signal, sampling_rate) 52 | sampling_rate = self.args["Sampling Rate"] 53 | precision = self.args["Precision"] 54 | file_path = self.args["file_path"] 55 | 56 | # resample sound 57 | sound = sound.resample(sampling_rate, precision) 58 | 59 | # set up file name 60 | output_file_name: str = file_path.split("/")[-1].split(".wav")[0] 61 | output_file_name = f"{output_file_name}_resampled_to_{sampling_rate}_Hz" 62 | sound.name = output_file_name 63 | success = "Sound resampled successfully" 64 | 65 | except Exception as e: 66 | sound = str(e) 67 | success = "Sound not resampled" 68 | 69 | return { 70 | "result": success, 71 | "voice": sound 72 | } 73 | -------------------------------------------------------------------------------- /voicelab/src/Voicelab/toolkits/Voicelab/ReverseSoundsNode.py: -------------------------------------------------------------------------------- 1 | from ...pipeline.Node import Node 2 | from parselmouth.praat import call 3 | from .VoicelabNode import VoicelabNode 4 | 5 | import parselmouth 6 | from typing import Union 7 | 8 | 9 | class ReverseSoundsNode(VoicelabNode): 10 | """A Class to reverse voice file temporally.""" 11 | 12 | def __init__(self, *args, **kwargs): 13 | super().__init__(*args, **kwargs) 14 | 15 | self.args = {} 16 | 17 | def process(self) -> dict[str, Union[parselmouth.Sound, str]]: 18 | """Run the node\nReverse the time of the voice file. 19 | :return: The reversed sound file or an error message 20 | :rtype: dict of {str, [parselmouth.Sound, str]} 21 | """ 22 | 23 | try: 24 | file_path = self.args['file_path'] 25 | """The path to the file to be reversed""" 26 | signal, sampling_rate = self.args['voice'] 27 | sound: parselmouth.Sound = parselmouth.Sound(signal, sampling_rate) 28 | 29 | """The parselmouth sound object to be reversed""" 30 | sound.reverse() 31 | output_file_name: str = file_path.split("/")[-1].split(".wav")[0] 32 | """The output file name""" 33 | output_file_name:str = f"{output_file_name}_reversed" 34 | sound.name = output_file_name 35 | except Exception as e: 36 | sound = str(e) 37 | return {"voice": sound} 38 | -------------------------------------------------------------------------------- /voicelab/src/Voicelab/toolkits/Voicelab/ScaleIntensityNode.py: -------------------------------------------------------------------------------- 1 | from __future__ import annotations 2 | 3 | import parselmouth 4 | from parselmouth.praat import call 5 | 6 | from typing import Union 7 | 8 | from ...pipeline.Node import Node 9 | from .VoicelabNode import VoicelabNode 10 | 11 | 12 | 13 | class ScaleIntensityNode(VoicelabNode): 14 | """Scale intensity. 15 | 16 | Options include RMS or peak method, and a value to scale to 17 | 18 | self.args: dict 19 | dictionary of values to be passed into the node 20 | 21 | self.args['value']: Union[float, int], default=70.0 22 | The value to scale intensity to. For RMS, this is a positive number between 1 and 90.9691. For Peak (-1, 1), pick a number between -1 and 1. 23 | self.args['method']: str, default='RMS (dB)' 24 | Choose between RMS and peak. 25 | """ 26 | def __init__(self, *args, **kwargs): 27 | super().__init__(*args, **kwargs) 28 | 29 | self.args = { 30 | "value": 70.0, # positive float 31 | "method": ("RMS (dB)", ["RMS (dB)", "Peak (-1, 1)"]) 32 | } 33 | # process: WARIO hook called once for each voice file. 34 | 35 | def process(self): 36 | """Process the Scale Intensity Node 37 | 38 | :return {"voice": sound} : Dictionary with the manipulated praat sound object 39 | :rtype parselmouth.Sound: 40 | """ 41 | value = self.args["value"] 42 | signal, sampling_rate = self.args['voice'] 43 | sound: parselmouth.Sound = parselmouth.Sound(signal, sampling_rate) 44 | file_path = self.args['file_path'] 45 | #sound = parselmouth.Sound(file_path) 46 | method = self.args["method"] 47 | if method == "RMS": 48 | sound.scale_intensity(value) 49 | elif method == "Peak": 50 | call(sound, "Scale peak", value) 51 | else: 52 | sound.scale_intensity(value) 53 | output_file_name: str = file_path.split("/")[-1].split(".wav")[0] 54 | output_file_name = f"{output_file_name}_intensity_{value}_{method[0]}" 55 | sound.name = output_file_name 56 | 57 | return {"voice": sound} 58 | -------------------------------------------------------------------------------- /voicelab/src/Voicelab/toolkits/Voicelab/VisualizeVoiceNodeTest.py: -------------------------------------------------------------------------------- 1 | from ...pipeline.Node import Node 2 | import numpy as np 3 | import seaborn as sns 4 | import parselmouth 5 | from parselmouth.praat import call 6 | import matplotlib.pyplot as plt 7 | 8 | from .VoicelabNode import VoicelabNode 9 | 10 | from Voicelab.toolkits.Voicelab.VisualizeVoiceNode import VisualizeVoiceNode 11 | 12 | 13 | ################################################################################################### 14 | # VISUALIZE VOICE NODE 15 | # WARIO pipeline node for visualizing a voice as a spectrogram. 16 | ################################################################################################### 17 | # ARGUMENTS 18 | # 'voice' : sound file generated by parselmouth praat 19 | ################################################################################################### 20 | # RETURNS 21 | ################################################################################################### 22 | 23 | node = VisualizeVoiceNode() 24 | node.args['file_path'] = '/home/david/Desktop/Sderfahrer_mHK66.wav' 25 | node.args['voice'] = parselmouth.Sound(node.args['file_path']) 26 | node.args['window_length'] = 0.05 27 | node.args['colour_map'] = 'afmhot' # gist_yarg, gist_heat, gist_rainbow, gist_stern, jet, nipy_spectral, rainbow, prism, gist_ncar 28 | node.show_figure = True 29 | # self.plot_formants(formants_axis, formants, voice) 30 | results = node.process() 31 | axis = results['figure'].get_axes()[0] 32 | voice = node.args["voice"] 33 | pitch = voice.to_pitch() 34 | pad_distance = 10 35 | formants = node.args['voice'].to_formant_burg() 36 | intensity = voice.to_intensity() 37 | node.plot_formants(axis, formants, voice) 38 | node.plot_pitch(axis, pitch, voice, pad_distance) 39 | node.plot_intensity(axis, intensity, pad_distance) 40 | results['figure'].show() -------------------------------------------------------------------------------- /voicelab/src/Voicelab/toolkits/Voicelab/__init__.py: -------------------------------------------------------------------------------- 1 | # Input Nodes 2 | from .LoadVoicesNode import LoadVoicesNode 3 | 4 | # TODO: Output Nodes 5 | 6 | # Measure Nodes 7 | from .VisualizeSpectrumNode import VisualizeSpectrumNode 8 | from .MeasureSHRPNode import MeasureSHRPNode 9 | from .MeasurePitchYinNode import MeasurePitchYinNode 10 | from .MeasureDurationNode import MeasureDurationNode 11 | from .MeasureIntensityNode import MeasureIntensityNode 12 | from .MeasureFormantNode import MeasureFormantNode 13 | from .MeasureHarmonicityNode import MeasureHarmonicityNode 14 | from .MeasureAlphaRatioNode import MeasureAlphaRatioNode 15 | #from .MeasureHarmonicsNode import MeasureHarmonicsNode 16 | from .MeasureJitterNode import MeasureJitterNode 17 | from .MeasurePitchNode import MeasurePitchNode 18 | from .MeasureShimmerNode import MeasureShimmerNode 19 | from .MeasureMFCCNode import MeasureMFCCNode 20 | from .MeasureVocalTractEstimatesNode import MeasureVocalTractEstimatesNode 21 | from .MeasureSpeechRateNode import MeasureSpeechRateNode 22 | from .MeasureCPPNode import MeasureCPPNode 23 | from .MeasureSpectralTiltNode import MeasureSpectralTiltNode 24 | from .MeasureEnergyNode import MeasureEnergyNode 25 | from .MeasureFormantPositionsNode import MeasureFormantPositionsNode 26 | from .MeasureLTASNode import MeasureLTASNode 27 | from .MeasureSpectralShapeNode import MeasureSpectralShapeNode 28 | from .ManipulateTruncateSoundsNode import ManipulateTruncateSoundsNode 29 | #from .TEVANode import TEVANode 30 | #from .MeasurePitchYinNode import MeasurePitchYinNode 31 | #from .MeasurePitchCrepeNode import MeasurePitchCrepeNode 32 | 33 | # Manipulate Nodes 34 | from .ManipulateLowerPitchAndFormantsNode import ManipulateLowerPitchAndFormantsNode 35 | from .ManipulateRaisePitchAndFormantsNode import ManipulateRaisePitchAndFormantsNode 36 | from .ManipulateLowerFormantsNode import ManipulateLowerFormantsNode 37 | from .ManipulateRaiseFormantsNode import ManipulateRaiseFormantsNode 38 | from .ManipulatePitchLowerNode import ManipulatePitchLowerNode 39 | from .ManipulatePitchHigherNode import ManipulatePitchHigherNode 40 | from .ScaleIntensityNode import ScaleIntensityNode 41 | from .ResampleSoundsNode import ResampleSoundsNode 42 | from .ReverseSoundsNode import ReverseSoundsNode 43 | from .RotateSpectrumNode import RotateSpectrumNode 44 | 45 | # Visualization Nodes 46 | from .VisualizeVoiceNode import VisualizeVoiceNode 47 | from .VisualizeSpectrumNode import VisualizeSpectrumNode 48 | 49 | # Experimental Nodes 50 | from .F1F2PlotNode import F1F2PlotNode 51 | -------------------------------------------------------------------------------- /voicelab/src/Voicelab/toolkits/Voicelab/tmpfile.txt: -------------------------------------------------------------------------------- 1 | 0.042328124999999987 257.69764631745363 2 | 0.052328124999999989 257.95446843396542 3 | 0.062328124999999984 256.69257427097671 4 | 0.072328124999999993 254.97951680862928 5 | 0.082328124999999988 254.81976702623595 6 | 0.092328124999999983 254.61770093180863 7 | 0.10232812499999999 254.98634055862007 8 | 0.112328125 254.90958426619713 9 | 0.12232812499999998 254.64614218944092 10 | 0.13232812499999999 254.52447993040636 11 | 0.142328125 254.25993804137096 12 | 0.15232812499999998 253.75186793907338 13 | 0.16232812499999999 252.83962999215692 14 | 0.172328125 251.96766378341545 15 | 0.18232812500000001 251.43109697739069 16 | 0.19232812499999999 250.91592824710037 17 | 0.202328125 250.31108476390352 18 | 0.21232812500000001 249.63519915231078 19 | 0.22232812499999999 249.22101696052187 20 | 0.232328125 248.55820522347744 21 | 0.24232812500000001 247.99581861286481 22 | 0.25232812499999996 247.12026061651275 23 | 0.26232812499999997 246.26646334322092 24 | 0.27232812499999998 245.48750337653368 25 | 0.28232812499999999 245.09822956091566 26 | 0.29232812499999999 244.70058087822929 27 | 0.302328125 244.18409497159675 28 | 0.31232812500000001 243.18330240784783 29 | 0.32232812500000002 242.0801307969667 30 | 0.33232812499999997 241.28367410807459 31 | 0.34232812499999998 241.54155375853895 32 | 0.35232812499999999 241.99764153085749 33 | 0.362328125 242.29423552968771 34 | 0.37232812500000001 242.82087023039537 35 | 0.38232812500000002 244.0436851146352 36 | 0.39232812500000003 244.48027532375997 37 | 0.40232812499999998 244.02368174965116 38 | -------------------------------------------------------------------------------- /voicelab/src/Voicelab/toolkits/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Voice-Lab/VoiceLab/7d34cac2e21803b543355bbd03d346f3ea82c5d4/voicelab/src/Voicelab/toolkits/__init__.py -------------------------------------------------------------------------------- /voicelab/src/Voicelab/voicelab_script.backup.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | 3 | import sys 4 | import os 5 | THIS_DIR = os.path.dirname(os.path.realpath(__file__)) 6 | PARENT_DIR = os.path.dirname(THIS_DIR) 7 | print(PARENT_DIR) 8 | VOICELAB_DIR = os.path.join(PARENT_DIR, '/voicelab/src') 9 | sys.path.insert(0, ''.join([VOICELAB_DIR, "/Voicelab/toolkits/Voicelab"])) 10 | 11 | sys.path.insert(0, PARENT_DIR) 12 | sys.path.insert(0, VOICELAB_DIR) 13 | import qdarkstyle 14 | import sys 15 | 16 | 17 | #from PyQt5.QtGui import * 18 | from PyQt5.QtWidgets import * 19 | #from PyQt5.QtCore import * 20 | #from voicelab.src.Voicelab.VoicelabGUI.InputTab import InputTab 21 | #from voicelab.src.Voicelab.VoicelabGUI.OutputTab import OutputTab 22 | #from voicelab.src.Voicelab.VoicelabGUI.SettingsTab import SettingsTab 23 | #from voicelab.src.Voicelab.VoicelabGUI.VoicelabController import VoicelabController 24 | #from voicelab.src.Voicelab.default_settings import available_functions, default_functions 25 | 26 | from __main__ import VoicelabWizard 27 | 28 | def main(): 29 | # boilerplate pyqt window creation 30 | app = QApplication(sys.argv) 31 | # setup stylesheet 32 | app.setStyleSheet(qdarkstyle.load_stylesheet_pyqt5()) 33 | 34 | # Create an instance of VoiceLab 35 | w = VoicelabWizard() 36 | # Show the GUI 37 | w.show() 38 | # Exit gracefully 39 | sys.exit(app.exec_()) 40 | 41 | 42 | if __name__ == "__main__": 43 | main() -------------------------------------------------------------------------------- /voicelab/src/Voicelab/voicelab_script.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | 3 | from voicelab.src.Voicelab.__main__ import main 4 | 5 | if __name__ == "__main__": 6 | main() -------------------------------------------------------------------------------- /voicelab/src/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Voice-Lab/VoiceLab/7d34cac2e21803b543355bbd03d346f3ea82c5d4/voicelab/src/__init__.py -------------------------------------------------------------------------------- /voicelab/src/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Voice-Lab/VoiceLab/7d34cac2e21803b543355bbd03d346f3ea82c5d4/voicelab/src/favicon.ico -------------------------------------------------------------------------------- /voicelab/src/tmp.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Voice-Lab/VoiceLab/7d34cac2e21803b543355bbd03d346f3ea82c5d4/voicelab/src/tmp.wav -------------------------------------------------------------------------------- /voicelab/src/voicelab_osx.spec: -------------------------------------------------------------------------------- 1 | # -*- mode: python ; coding: utf-8 -*- 2 | from PyInstaller.utils.hooks import collect_data_files 3 | 4 | block_cipher = None 5 | 6 | 7 | a = Analysis(['voicelab.py'], 8 | pathex=['VoiceLab'], 9 | binaries=[], 10 | datas=collect_data_files('librosa'), 11 | hiddenimports=['cmath', 12 | 'sklearn.utils._weight_vector', 13 | 'sklearn.neighbors._partition_nodes', 14 | 'sklearn.metrics._pairwise_distances_reduction._datasets_pair', 15 | 'sklearn.metrics._pairwise_distances_reduction._middle_term_computer' 16 | ], 17 | hookspath=[], 18 | runtime_hooks=[], 19 | excludes=[], 20 | win_no_prefer_redirects=False, 21 | win_private_assemblies=False, 22 | cipher=block_cipher, 23 | noarchive=False) 24 | pyz = PYZ(a.pure, a.zipped_data, 25 | cipher=block_cipher) 26 | exe = EXE(pyz, 27 | a.scripts, 28 | [], 29 | exclude_binaries=True, 30 | name='VoiceLab', 31 | debug=False, 32 | bootloader_ignore_signals=False, 33 | strip=False, 34 | upx=True, 35 | console=False , 36 | icon='favicon.ico') 37 | coll = COLLECT(exe, 38 | a.binaries, 39 | a.zipfiles, 40 | a.datas, 41 | strip=False, 42 | upx=True, 43 | upx_exclude=[], 44 | name='VoiceLab') 45 | app = BUNDLE(coll, 46 | name='VoiceLab.app', 47 | icon='Voicelab/favicon.ico', 48 | bundle_identifier=None) 49 | -------------------------------------------------------------------------------- /voicelab/src/voicelab_ubuntu.spec: -------------------------------------------------------------------------------- 1 | # -*- mode: python ; coding: utf-8 -*- 2 | 3 | block_cipher = None 4 | 5 | 6 | a = Analysis(['voicelab.py'], 7 | pathex=['VoiceLab'], 8 | binaries=[], 9 | datas=[], 10 | hiddenimports=[], 11 | hookspath=[], 12 | runtime_hooks=[], 13 | excludes=[], 14 | win_no_prefer_redirects=False, 15 | win_private_assemblies=False, 16 | cipher=block_cipher, 17 | noarchive=False) 18 | pyz = PYZ(a.pure, a.zipped_data, 19 | cipher=block_cipher) 20 | exe = EXE(pyz, 21 | a.scripts, 22 | a.binaries, 23 | a.zipfiles, 24 | a.datas, 25 | [], 26 | name='voicelab', 27 | debug=False, 28 | bootloader_ignore_signals=False, 29 | strip=False, 30 | upx=True, 31 | upx_exclude=[], 32 | runtime_tmpdir=None, 33 | console=False, 34 | icon='favicon.ico' ) 35 | -------------------------------------------------------------------------------- /voicelab/src/voicelab_windows.spec: -------------------------------------------------------------------------------- 1 | # -*- mode: python ; coding: utf-8 -*- 2 | from PyInstaller.utils.hooks import collect_data_files 3 | 4 | 5 | block_cipher = None 6 | 7 | 8 | a = Analysis(['Voicelab/voicelab_script.py'], 9 | pathex=['VoiceLab'], 10 | binaries=[], 11 | datas=collect_data_files('librosa'), 12 | hiddenimports=['qdarkstyle', 13 | 'PyQt5.sip', 14 | 'sklearn.neighbors._partition_nodes',], 15 | hookspath=[], 16 | runtime_hooks=[], 17 | excludes=[], 18 | win_no_prefer_redirects=False, 19 | win_private_assemblies=False, 20 | cipher=block_cipher, 21 | noarchive=False) 22 | pyz = PYZ(a.pure, a.zipped_data, 23 | cipher=block_cipher) 24 | exe = EXE(pyz, 25 | a.scripts, 26 | a.binaries, 27 | a.zipfiles, 28 | a.datas, 29 | [], 30 | name='voicelab', 31 | debug=False, 32 | bootloader_ignore_signals=False, 33 | strip=False, 34 | upx=True, 35 | upx_exclude=[], 36 | runtime_tmpdir=None, 37 | console=False, 38 | icon='favicon.ico') 39 | -------------------------------------------------------------------------------- /voicelab/tests/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Voice-Lab/VoiceLab/7d34cac2e21803b543355bbd03d346f3ea82c5d4/voicelab/tests/__init__.py -------------------------------------------------------------------------------- /voicelab/tests/assets/audio/Prolific Data.ods: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Voice-Lab/VoiceLab/7d34cac2e21803b543355bbd03d346f3ea82c5d4/voicelab/tests/assets/audio/Prolific Data.ods -------------------------------------------------------------------------------- /voicelab/tests/assets/audio/broken_file/broken_file..wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Voice-Lab/VoiceLab/7d34cac2e21803b543355bbd03d346f3ea82c5d4/voicelab/tests/assets/audio/broken_file/broken_file..wav -------------------------------------------------------------------------------- /voicelab/tests/assets/audio/female_mono_a.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Voice-Lab/VoiceLab/7d34cac2e21803b543355bbd03d346f3ea82c5d4/voicelab/tests/assets/audio/female_mono_a.wav -------------------------------------------------------------------------------- /voicelab/tests/assets/audio/female_mono_e.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Voice-Lab/VoiceLab/7d34cac2e21803b543355bbd03d346f3ea82c5d4/voicelab/tests/assets/audio/female_mono_e.wav -------------------------------------------------------------------------------- /voicelab/tests/assets/audio/female_mono_hi.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Voice-Lab/VoiceLab/7d34cac2e21803b543355bbd03d346f3ea82c5d4/voicelab/tests/assets/audio/female_mono_hi.wav -------------------------------------------------------------------------------- /voicelab/tests/assets/audio/female_mono_i.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Voice-Lab/VoiceLab/7d34cac2e21803b543355bbd03d346f3ea82c5d4/voicelab/tests/assets/audio/female_mono_i.wav -------------------------------------------------------------------------------- /voicelab/tests/assets/audio/female_mono_o.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Voice-Lab/VoiceLab/7d34cac2e21803b543355bbd03d346f3ea82c5d4/voicelab/tests/assets/audio/female_mono_o.wav -------------------------------------------------------------------------------- /voicelab/tests/assets/audio/female_mono_sentence.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Voice-Lab/VoiceLab/7d34cac2e21803b543355bbd03d346f3ea82c5d4/voicelab/tests/assets/audio/female_mono_sentence.wav -------------------------------------------------------------------------------- /voicelab/tests/assets/audio/female_mono_u.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Voice-Lab/VoiceLab/7d34cac2e21803b543355bbd03d346f3ea82c5d4/voicelab/tests/assets/audio/female_mono_u.wav -------------------------------------------------------------------------------- /voicelab/tests/assets/audio/female_stereo_a.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Voice-Lab/VoiceLab/7d34cac2e21803b543355bbd03d346f3ea82c5d4/voicelab/tests/assets/audio/female_stereo_a.wav -------------------------------------------------------------------------------- /voicelab/tests/assets/audio/female_stereo_e.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Voice-Lab/VoiceLab/7d34cac2e21803b543355bbd03d346f3ea82c5d4/voicelab/tests/assets/audio/female_stereo_e.wav -------------------------------------------------------------------------------- /voicelab/tests/assets/audio/female_stereo_hi.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Voice-Lab/VoiceLab/7d34cac2e21803b543355bbd03d346f3ea82c5d4/voicelab/tests/assets/audio/female_stereo_hi.wav -------------------------------------------------------------------------------- /voicelab/tests/assets/audio/female_stereo_i.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Voice-Lab/VoiceLab/7d34cac2e21803b543355bbd03d346f3ea82c5d4/voicelab/tests/assets/audio/female_stereo_i.wav -------------------------------------------------------------------------------- /voicelab/tests/assets/audio/female_stereo_o.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Voice-Lab/VoiceLab/7d34cac2e21803b543355bbd03d346f3ea82c5d4/voicelab/tests/assets/audio/female_stereo_o.wav -------------------------------------------------------------------------------- /voicelab/tests/assets/audio/female_stereo_sentence.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Voice-Lab/VoiceLab/7d34cac2e21803b543355bbd03d346f3ea82c5d4/voicelab/tests/assets/audio/female_stereo_sentence.wav -------------------------------------------------------------------------------- /voicelab/tests/assets/audio/female_stereo_u.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Voice-Lab/VoiceLab/7d34cac2e21803b543355bbd03d346f3ea82c5d4/voicelab/tests/assets/audio/female_stereo_u.wav -------------------------------------------------------------------------------- /voicelab/tests/assets/audio/male_mono_a.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Voice-Lab/VoiceLab/7d34cac2e21803b543355bbd03d346f3ea82c5d4/voicelab/tests/assets/audio/male_mono_a.wav -------------------------------------------------------------------------------- /voicelab/tests/assets/audio/male_mono_e.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Voice-Lab/VoiceLab/7d34cac2e21803b543355bbd03d346f3ea82c5d4/voicelab/tests/assets/audio/male_mono_e.wav -------------------------------------------------------------------------------- /voicelab/tests/assets/audio/male_mono_hi.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Voice-Lab/VoiceLab/7d34cac2e21803b543355bbd03d346f3ea82c5d4/voicelab/tests/assets/audio/male_mono_hi.wav -------------------------------------------------------------------------------- /voicelab/tests/assets/audio/male_mono_i.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Voice-Lab/VoiceLab/7d34cac2e21803b543355bbd03d346f3ea82c5d4/voicelab/tests/assets/audio/male_mono_i.wav -------------------------------------------------------------------------------- /voicelab/tests/assets/audio/male_mono_o.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Voice-Lab/VoiceLab/7d34cac2e21803b543355bbd03d346f3ea82c5d4/voicelab/tests/assets/audio/male_mono_o.wav -------------------------------------------------------------------------------- /voicelab/tests/assets/audio/male_mono_sentence.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Voice-Lab/VoiceLab/7d34cac2e21803b543355bbd03d346f3ea82c5d4/voicelab/tests/assets/audio/male_mono_sentence.wav -------------------------------------------------------------------------------- /voicelab/tests/assets/audio/male_mono_u.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Voice-Lab/VoiceLab/7d34cac2e21803b543355bbd03d346f3ea82c5d4/voicelab/tests/assets/audio/male_mono_u.wav -------------------------------------------------------------------------------- /voicelab/tests/assets/audio/male_stereo_a.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Voice-Lab/VoiceLab/7d34cac2e21803b543355bbd03d346f3ea82c5d4/voicelab/tests/assets/audio/male_stereo_a.wav -------------------------------------------------------------------------------- /voicelab/tests/assets/audio/male_stereo_e.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Voice-Lab/VoiceLab/7d34cac2e21803b543355bbd03d346f3ea82c5d4/voicelab/tests/assets/audio/male_stereo_e.wav -------------------------------------------------------------------------------- /voicelab/tests/assets/audio/male_stereo_hi.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Voice-Lab/VoiceLab/7d34cac2e21803b543355bbd03d346f3ea82c5d4/voicelab/tests/assets/audio/male_stereo_hi.wav -------------------------------------------------------------------------------- /voicelab/tests/assets/audio/male_stereo_i.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Voice-Lab/VoiceLab/7d34cac2e21803b543355bbd03d346f3ea82c5d4/voicelab/tests/assets/audio/male_stereo_i.wav -------------------------------------------------------------------------------- /voicelab/tests/assets/audio/male_stereo_o.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Voice-Lab/VoiceLab/7d34cac2e21803b543355bbd03d346f3ea82c5d4/voicelab/tests/assets/audio/male_stereo_o.wav -------------------------------------------------------------------------------- /voicelab/tests/assets/audio/male_stereo_sentence.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Voice-Lab/VoiceLab/7d34cac2e21803b543355bbd03d346f3ea82c5d4/voicelab/tests/assets/audio/male_stereo_sentence.wav -------------------------------------------------------------------------------- /voicelab/tests/assets/audio/male_stereo_u.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Voice-Lab/VoiceLab/7d34cac2e21803b543355bbd03d346f3ea82c5d4/voicelab/tests/assets/audio/male_stereo_u.wav -------------------------------------------------------------------------------- /voicelab/tests/assets/audio/max_formant.csv: -------------------------------------------------------------------------------- 1 | Filename,max_formant 2 | female_mono_a.wav ,5500 3 | female_mono_e.wav ,5500 4 | female_mono_hi.wav ,5500 5 | female_mono_i.wav ,5500 6 | female_mono_o.wav ,5500 7 | female_mono_sentence.wav ,5500 8 | female_mono_u.wav ,5500 9 | female_stereo_a.wav ,5500 10 | female_stereo_e.wav ,5500 11 | female_stereo_hi.wav ,5500 12 | female_stereo_i.wav ,5500 13 | female_stereo_o.wav ,5500 14 | female_stereo_sentence.wav ,5500 15 | female_stereo_u.wav ,5500 16 | male_mono_a.wav ,5000 17 | male_mono_e.wav ,5000 18 | male_mono_hi.wav ,5500 19 | male_mono_i.wav ,5000 20 | male_mono_o.wav ,5000 21 | male_mono_sentence.wav ,5000 22 | male_mono_u.wav ,5000 23 | male_stereo_a.wav ,5000 24 | male_stereo_e.wav ,5000 25 | male_stereo_hi.wav ,5500 26 | male_stereo_i.wav ,5000 27 | male_stereo_o.wav ,5000 28 | male_stereo_sentence.wav ,5000 29 | male_stereo_u.wav ,5000 30 | -------------------------------------------------------------------------------- /voicelab/tests/assets/audio/pitch_bounds.csv: -------------------------------------------------------------------------------- 1 | Filename floor ceiling 2 | female_mono_a.wav 100 500 3 | female_mono_e.wav 100 500 4 | female_mono_hi.wav 100 500 5 | female_mono_i.wav 100 500 6 | female_mono_o.wav 100 500 7 | female_mono_sentence.wav 100 500 8 | female_mono_u.wav 100 500 9 | female_stereo_a.wav 100 500 10 | female_stereo_e.wav 100 500 11 | female_stereo_hi.wav 100 500 12 | female_stereo_i.wav 100 500 13 | female_stereo_o.wav 100 500 14 | female_stereo_sentence.wav 100 500 15 | female_stereo_u.wav 100 500 16 | male_mono_a.wav 50 300 17 | male_mono_e.wav 50 300 18 | male_mono_hi.wav 50 300 19 | male_mono_i.wav 50 300 20 | male_mono_o.wav 50 300 21 | male_mono_sentence.wav 50 300 22 | male_mono_u.wav 50 300 23 | male_stereo_a.wav 50 300 24 | male_stereo_e.wav 50 300 25 | male_stereo_hi.wav 50 300 26 | male_stereo_i.wav 50 300 27 | male_stereo_o.wav 50 300 28 | male_stereo_sentence.wav 50 300 29 | male_stereo_u.wav 50 300 30 | -------------------------------------------------------------------------------- /voicelab/tests/assets/praat_scripts/max_formant.psc: -------------------------------------------------------------------------------- 1 | 2 | #Asks user for the directory of files to be worked on 3 | 4 | directory$ = "/home/david/Dropbox/voicelab-poetry/voicelab/tests/assets/audio/" 5 | 6 | #Sets up Data File - erases existing file with same name 7 | filedelete 'directory$''name$'max_formant.csv 8 | header_row$ = "Filename" + tab$ + "max_formant" + newline$ 9 | header_row$ > 'directory$'max_formant.csv 10 | 11 | 12 | #Sets up array of files to run batch process on 13 | Create Strings as file list... list 'directory$'*.wav 14 | number_files = Get number of strings 15 | for j from 1 to number_files 16 | select Strings list 17 | current_token$ = Get string... 'j' 18 | name$ = current_token$ - ".wav" 19 | Read from file... 'directory$''current_token$' 20 | 21 | 22 | #This part measures pitch with broad parameters 23 | select Sound 'name$' 24 | nowarn To Pitch (ac): 0, 50, 15, "yes", 0.03, 0.45, 0.01, 0.35, 0.14, 600 25 | broad = Get mean... 0 0 Hertz 26 | if (170 <= broad) and (broad <= 300) 27 | max_formant = 5500 28 | elif broad < 170 29 | max_formant = 5000 30 | else 31 | max_formant = 5500 32 | endif 33 | 34 | fileappend "'directory$'max_formant.csv" 'current_token$' 'tab$' 'max_formant' 'newline$' 35 | 36 | endfor 37 | select all 38 | minus Strings list 39 | Remove 40 | 41 | -------------------------------------------------------------------------------- /voicelab/tests/assets/praat_scripts/pitch_bounds.psc: -------------------------------------------------------------------------------- 1 | 2 | #Asks user for the directory of files to be worked on 3 | 4 | directory$ = "/home/david/Dropbox/voicelab-poetry/voicelab/tests/assets/audio/" 5 | 6 | #Sets up Data File - erases existing file with same name 7 | filedelete 'directory$''name$'pitch_bounds.csv 8 | header_row$ = "Filename" + tab$ + "floor" + tab$ + "ceiling"+ newline$ 9 | header_row$ > 'directory$'pitch_bounds.csv 10 | 11 | 12 | #Sets up array of files to run batch process on 13 | Create Strings as file list... list 'directory$'*.wav 14 | number_files = Get number of strings 15 | for j from 1 to number_files 16 | select Strings list 17 | current_token$ = Get string... 'j' 18 | name$ = current_token$ - ".wav" 19 | Read from file... 'directory$''current_token$' 20 | 21 | 22 | #This part measures pitch with broad parameters 23 | select Sound 'name$' 24 | nowarn To Pitch (ac): 0, 50, 15, "yes", 0.03, 0.45, 0.01, 0.35, 0.14, 500 25 | broad = Get mean... 0 0 Hertz 26 | if broad > 170 27 | floor = 100 28 | ceiling = 500 29 | elif broad < 170 30 | floor = 50 31 | ceiling = 300 32 | #else 33 | # floor = 50 34 | # ceiling = 500 35 | endif 36 | 37 | fileappend "'directory$'pitch_bounds.csv" 'current_token$' 'tab$' 'floor' 'tab$' 'ceiling' 'newline$' 38 | 39 | endfor 40 | select all 41 | minus Strings list 42 | Remove 43 | 44 | -------------------------------------------------------------------------------- /voicelab/tests/assets/praat_scripts/praatF0.praat: -------------------------------------------------------------------------------- 1 | ############################# 2 | # 3 | # This script makes pitch tracks of the requested wav file and allows post-processing of the pitch tracks for smoothing/stylization. 4 | 5 | # Currently, only *.wav files are read. Textgrids are ignored. 6 | # 7 | # Input parameters include (in this order): 8 | # Input file, Time step, Minimum Pitch, Maximum Pitch, Silence Threshold, 9 | # Voicing Threshold, Octave cost, octave-Jump Cost, Voiced/unvoiced cost, Kill octave jumps, Smooth, Interpolate, Method (ac or cc) 10 | # 11 | # For each input, it creates a tab delimited text file with 12 | # measurement results in the same folder. The file consists 13 | # of a pitch track created by the cross-correlation method (cc) or autocorrelation method. Results are saved as a *.cc or *.ac file 14 | ############################# 15 | 16 | form Create Pitch Tracks 17 | comment See header of script for details. 18 | 19 | comment Directory of input sound files 20 | text wavfile D:\tmp\ 21 | 22 | # sentence Sound_file_extension .wav 23 | # comment Directory of TextGrid files 24 | # text textGrid_directory D:\tmp\ 25 | # sentence TextGrid_file_extension .TextGrid 26 | # comment Full path of the resulting text file: 27 | # text resultfile D:\tmp\pitchresults.txt 28 | 29 | # KY 20101013: edited to allow user input for all parameters and for ultrasmoothed (stylized) f0 contours 30 | 31 | # kill octave jumps tries to remove pitch halving/doubling 32 | # smoothing allows smoothing at a given bandwidth in Hz 33 | # interpolation allows interpolation over missing values (it is not clear to me if this linear, cubic spline, or what) 34 | 35 | comment F0 Measurement Parameters 36 | positive time_step 0.005 37 | positive minimum_pitch 50 38 | positive maximum_pitch 500 39 | positive silence_threshold 0.03 40 | positive voicing_threshold 0.45 41 | positive octave_cost 0.01 42 | positive octave_jump_cost 0.35 43 | positive voiced_unvoiced_cost 0.14 44 | boolean kill_octave_jumps no 45 | boolean smooth no 46 | positive smooth_bandwidth 5 47 | boolean interpolate no 48 | sentence Method cc 49 | endform 50 | 51 | 52 | # A sound file is opened 53 | Read from file... 'wavfile$' 54 | soundname$ = selected$ ("Sound", 1) 55 | 56 | # KY 20101013: edited to allow user input for all parameters 57 | 58 | # Allow cross or auto correlation 59 | if method$ = "cc" 60 | To Pitch (cc)... 'time_step' 'minimum_pitch' 15 no 'silence_threshold' 'voicing_threshold' 'octave_cost' 'octave_jump_cost' 'voiced_unvoiced_cost' 'maximum_pitch' 61 | else 62 | To Pitch (ac)... 'time_step' 'minimum_pitch' 15 no 'silence_threshold' 'voicing_threshold' 'octave_cost' 'octave_jump_cost' 'voiced_unvoiced_cost' 'maximum_pitch' 63 | endif 64 | 65 | # KY 20101013:Postprocessing for smoothing/stylization 66 | 67 | if 'kill_octave_jumps' = 1 68 | Kill octave jumps 69 | endif 70 | 71 | # Smooth 72 | if 'smooth' = 1 73 | Smooth... smooth_bandwidth 74 | endif 75 | 76 | # Interpolate over missing values 77 | 78 | if 'interpolate' = 1 79 | Interpolate 80 | endif 81 | 82 | Down to PitchTier 83 | 84 | # Write to file 85 | if method$ = "cc" 86 | resultfile$ = "'wavfile$'.praatcc" 87 | else 88 | resultfile$ = "'wavfile$'.praatac" 89 | endif 90 | 91 | # Check if the result file exists: 92 | if fileReadable (resultfile$) 93 | filedelete 'resultfile$' 94 | endif 95 | 96 | Write to headerless spreadsheet file... 'resultfile$' 97 | -------------------------------------------------------------------------------- /voicelab/tests/test_ReverseSoundsNode.py: -------------------------------------------------------------------------------- 1 | import sys 2 | import os 3 | import parselmouth 4 | import numpy as np 5 | import pytest 6 | 7 | # Set up paths 8 | TEST_DIR = os.path.dirname(os.path.realpath(__file__)) 9 | VOICELAB_DIR = os.path.dirname(TEST_DIR) 10 | AUDIO_DIR = os.path.join(VOICELAB_DIR, 'tests/assets/audio') 11 | 12 | # in order for the relative imports in the files we are testing to run correctly, 13 | # we need to add these directories to the path 14 | sys.path.insert(0, ''.join([VOICELAB_DIR, "/src/Voicelab/toolkits/Voicelab"])) 15 | sys.path.insert(0, ''.join([VOICELAB_DIR, "/src"])) 16 | import ReverseSoundsNode # Pycharm doesn't like this, but it works 17 | 18 | 19 | # Arrange 20 | def get_test_files(): 21 | number_of_test_files = len(os.listdir(AUDIO_DIR)) - 1 # -1 because the first file is a broken sound 22 | test_files = sorted(os.listdir(AUDIO_DIR))[1:] 23 | return number_of_test_files, test_files 24 | 25 | # Arrange 26 | def prepare_node(test_file): 27 | file_path = os.path.join(AUDIO_DIR, test_file) 28 | node = ReverseSoundsNode.ReverseSoundsNode() 29 | node.args['file_path'] = file_path 30 | # Load the sound and setup the node 31 | try: 32 | sound: parselmouth.Sound = parselmouth.Sound(file_path) 33 | signal = sound.values 34 | sampling_rate = sound.sampling_frequency 35 | except: 36 | signal = None 37 | sampling_rate = None 38 | node.voice = (signal, sampling_rate) 39 | node.args['voice'] = (signal, sampling_rate) 40 | print((f"{file_path=}..{sampling_rate=}")) 41 | return node 42 | 43 | # Arrange 44 | def get_reversed_test_sound(test_file): 45 | file_path = os.path.join(AUDIO_DIR, test_file) 46 | validation_sound = parselmouth.Sound(file_path) 47 | validation_sound.reverse() 48 | return validation_sound.values 49 | 50 | # Arrange 51 | def get_number_of_test_files(): 52 | number_of_test_files, _ = get_test_files() 53 | return number_of_test_files 54 | 55 | def generate_numpy_arrays(execution_number): 56 | number_of_test_files, test_files = get_test_files() 57 | filename = test_files[execution_number] 58 | node = prepare_node(filename) 59 | # Run the node 60 | results = node.process() 61 | print(results) 62 | # Validate the results 63 | validation_sound = get_reversed_test_sound(filename) 64 | test_sound = results['voice'].values 65 | return test_sound, validation_sound 66 | 67 | # Act 68 | @pytest.mark.parametrize('execution_number', range(len(os.listdir(AUDIO_DIR)) - 1)) 69 | def test_ReverseSoundsNode(execution_number): 70 | test_sound, validation_sound = generate_numpy_arrays(execution_number) 71 | assert np.array_equal(test_sound, validation_sound) 72 | --------------------------------------------------------------------------------