Compare commits

...
28 Commits
Author SHA1 Message Date
seyffejn 4f6f99d64c Exe gebaut 2020-10-06 18:05:27 +02:00
ommerthe69431 92d869023a kleinen Bug behoben und Abfrage für mono/stereo eingebaut 2020-10-06 14:04:41 +02:00
ommerthe69431 c32668034f Code aufgeräumt + kleine Verbesserungen 2020-10-05 18:00:09 +02:00
ommerthe69431 fbffb7b56a Filter-Feedback repariert 2020-10-05 13:23:02 +02:00
seyffejn 54f34ef962 Projektbericht ToDo hinzugefügt 2020-10-03 20:38:13 +02:00
seyffejn 0894325737 FIR Filter implementierrt 2020-10-03 20:18:47 +02:00
ommerthe69431 aa13d8128f Projektbericht: Fehler ausgebessert und neue Absätze geschrieben 2020-10-01 19:24:33 +02:00
seyffejn 2a9d8b8e7b Projektbericht viele Quellen in Stand der Technik 2020-09-30 22:01:34 +02:00
seyffejn bcc77e4544 Projektbericht erweitert 2020-09-29 22:57:20 +02:00
seyffejn f05fa4faee Projektbericht hinzugefügt und % Fortschritt Anzeige grober gemacht 2020-09-28 21:00:25 +02:00
ommerthe69431 7971322755 Bug im Feedback beseitigt 2020-09-25 12:09:32 +02:00
ommerthe69431 23784cc6f7 kleine Aenderungen:
-Die samples werden nach dem Filtern jetzt auf einen maximalen wert von 1 normiert
 -Layout der GUI verbessert
 -Feedback verbessert (v. a. Filterstatus)

ACHTUNG: Der Filter liefert bei niedrigen Filterfrequenzen unendlich hohe Werte, was das Filtern unmoeglich macht
Fehlt: Filter fuers Rauschen
2020-09-24 22:23:25 +02:00
ommerthe69431 14394db487 3 Aenderungen:
-Erstellte Musik hat jetzt dynamische Laenge
-Funktion sound.wav_speichern() funktioniert jetzt mit der schnelleren Technik
-Filterfunktion in einen Thread ausgelagert und einen "Ladebalken" im Feedback eingefuegt
2020-09-24 15:45:46 +02:00
seyffejn 5278521046 Speichervorgang schneller + IIR-Notch 5ter Ordnung
Eigentlich müsste jetzt alles so programmiert sein, wie Herr Zwanger es nach dem 11ten Meeting wollte.

IIR Filter 5ter Ordnung und der Speichrvorgang ist wesentlich schneller
2020-09-20 21:02:55 +02:00
ommerthe69431 dda42f6bc4 Ladestatus beim Datei-Erstellen wird auf der Kommandozeile ausgegeben 2020-09-18 13:32:01 +02:00
ommerthe69431 299f82da2f Nochmal pushen 2020-09-18 12:14:46 +02:00
ommerthe69431 d2a17f779f Funktioniert so grob.
Der Filter erhoeht manche Werte, deswegen kann es zu Errors kommen, evtl. muss die gesamte Musik etwas leiser gedreht werden.

To Do:
- Filter fürs Rauschen
- Filterqualitäaet ueberdenken
- GUI Benutzerfreundlicher machen: Feedback verbessern, Filterfunktion koennte in einen thread ausgelagert werden, weil sie ziemlich lange dauert bei einem ganzen Song,
  evtl. mit einer Art Ladebalken
2020-09-16 15:39:52 +02:00
seyffejn 5260a615d5 Musik Nochtfilter
Musikfilter funktion noch fixen
2020-09-15 14:05:50 +02:00
seyffejn a3c3c34936 Gefilterte Musikdatei erstellen update
Die Tkinter Buttons hinzugefügt zur Auswahl der Musikdatei(.mp3 oder .wav bisher) und seiner eigenen Tinnitus.wav Datei. Bisher sind die Buttons noch leer also ohne viel Funktionalität hintendran.

Einige Biespiel Musikdateien zum versuchen hinzugefügt (siehe Unterordner "BiespielMusikDateien")
2020-09-10 14:21:21 +02:00
seyffejn ef9ec4fe3f Executable gemacht
Im Ordner Output:
TinnitusAnalyser.exe
2020-06-29 14:51:33 +02:00
ommerthe69431 4e63ebc564 Code aufgeraeumt
Kommentare ueberarbeitet
unnoetigen Code geloescht/zusammengefasst
2020-06-26 13:24:25 +02:00
ommerthe69431 521b5d3ea3 Aenderungen an: wav_speichern, speichern-button und tinnitus.__init__
wav-Datei funktioniert jetzt stereo und speichert 3 Sekunden
der Speichern-button beendet jetzt die Wiedergabee, was Leistung fÃuerSpeichern frei gibt
Grenzwerte des Rauschens bei tinnitus.__init__ auf weisses Rauschen eingestellt
2020-06-26 12:43:00 +02:00
seyffejn 7fed3e630e Savety update (Rauschen scales safer)
Ein paar restriktionen für die Rauschen scale widgets eingebaut (Untere, Obere Rauschgrenzen) so dass die digitale Bandpass Funktion hintendran keine Fehler mehr geben kann. Das sollte die GUI robuster machen.
2020-06-26 11:20:32 +02:00
ommerthe69431 2650b77806 sound.wav_speichern() angepasst
Holt die Audio-Daten jetzt aus der callback-Funktion
  Bisher nur Monosound (nutzt Daten des linken Ohrs)
  CDafer waren kleine Aenderungen an der callback-Funktion noetig
2020-06-24 20:01:23 +02:00
seyffejn 2f3d0366d1 Bandpass Implemtiert! yay
Digitalen Bandpass mittels Modul "Scipy" implementiert in SoundGenerator.py.

GUI nochmal abgeändert und statt Mittelfreq & Bandbreite --> Untere Grenzfreq & obere Grenzfreq

Die GUI ist momentan nicht stabil! Es fehlen noch einige if Abfragen um sichern zu gehen, dass die Grenzfrequenzen nicht unlogisch/fehlerhaft gewählt werden.
2020-06-24 17:18:51 +02:00
seyffejn 4f72924cb8 Update NEU: (DigitalFilterTest.py)
DigitalFilterTest.py hinzugefügt.
Dieses Skript beinhaltet die Differenzengleichung eines Bandpass nach Tobola MEM_C Vorlesung. Außerdem plottet es schnell die Frequenzen um zu testen ob der Filter funktioniert.
2020-06-19 15:58:09 +02:00
seyffejn e72a61c0c2 Merge branch 'master' of https://git.efi.th-nuernberg.de/gitea/seyfferju74439/Tinnitus_Musik_Therapie_Projektarbeit_Repo 2020-06-19 15:47:22 +02:00
seyffejn 5156b36051 nichts wichtiges 2020-06-19 15:47:17 +02:00
36 changed files with 55301 additions and 230 deletions

No files matched your search

+3
View File
@@ -14,3 +14,6 @@ TinnitusAnalyse/MeinTinnitus.wav
*.pyc
TinnitusAnalyse/.idea/dictionaries/Julian.xml
*.csv
TinnitusAnalyse/.idea/workspace.xml
TinnitusAnalyse/.idea/workspace.xml
TinnitusAnalyse/__pycache__/SoundGenerator.cpython-35.pyc
+3
View File
@@ -7,6 +7,7 @@
<w>beide</w>
<w>beiden</w>
<w>definieren</w>
<w>filterordnung</w>
<w>fontcolor</w>
<w>frequenz</w>
<w>kommentar</w>
@@ -21,6 +22,7 @@
<w>mittelfrequenz</w>
<w>nachname</w>
<w>ohren</w>
<w>passband</w>
<w>rauschen</w>
<w>rauschens</w>
<w>rechtem</w>
@@ -30,6 +32,7 @@
<w>rechts</w>
<w>speichere</w>
<w>speicherversuch</w>
<w>sperrbereichs</w>
<w>variablen</w>
<w>vorname</w>
<w>zwischen</w>
+131 -98
View File
@@ -2,12 +2,11 @@
<project version="4">
<component name="ChangeListManager">
<list default="true" id="5b3f2136-e422-4072-84be-e86e40fa2d55" name="Default Changelist" comment="">
<change beforePath="$PROJECT_DIR$/.idea/dictionaries/Julian.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/dictionaries/Julian.xml" afterDir="false" />
<change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" />
<change beforePath="$PROJECT_DIR$/SoundGenerator.py" beforeDir="false" afterPath="$PROJECT_DIR$/SoundGenerator.py" afterDir="false" />
<change beforePath="$PROJECT_DIR$/TinnitusAnalyse_GUI.py" beforeDir="false" afterPath="$PROJECT_DIR$/TinnitusAnalyse_GUI.py" afterDir="false" />
<change beforePath="$PROJECT_DIR$/TinnitusDaten.csv" beforeDir="false" afterPath="$PROJECT_DIR$/TinnitusDaten.csv" afterDir="false" />
<change beforePath="$PROJECT_DIR$/dist/TinnitusAnalyse_GUI.exe" beforeDir="false" afterPath="$PROJECT_DIR$/dist/TinnitusAnalyse_GUI.exe" afterDir="false" />
<change beforePath="$PROJECT_DIR$/musikTest.wav" beforeDir="false" />
</list>
<ignored path="$PROJECT_DIR$/venv/" />
<option name="EXCLUDED_CONVERTED_TO_IGNORED" value="true" />
<option name="SHOW_DIALOG" value="false" />
<option name="HIGHLIGHT_CONFLICTS" value="true" />
@@ -16,53 +15,53 @@
</component>
<component name="FileEditorManager">
<leaf SIDE_TABS_SIZE_LIMIT_KEY="300">
<file pinned="false" current-in-tab="true">
<file pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/TinnitusAnalyse_GUI.py">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="248">
<caret line="155" lean-forward="true" selection-start-line="155" selection-end-line="155" />
<state relative-caret-position="500">
<caret line="215" lean-forward="true" selection-start-line="215" selection-end-line="215" />
<folding>
<element signature="e#0#117#0" expanded="true" />
<element signature="e#0#30#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
</file>
<file pinned="false" current-in-tab="false">
<entry file="file://$USER_HOME$/AppData/Local/Programs/Python/Python35/Lib/tkinter/__init__.py">
<entry file="file://$USER_HOME$/AppData/Local/Programs/Python/Python35/Lib/site-packages/scipy/signal/fir_filter_design.py">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="874">
<caret line="1557" selection-start-line="1557" selection-end-line="1557" />
<state relative-caret-position="6562">
<caret line="399" selection-start-line="399" selection-end-line="399" />
</state>
</provider>
</entry>
</file>
<file pinned="false" current-in-tab="false">
<entry file="file://$USER_HOME$/AppData/Local/Programs/Python/Python35/Lib/threading.py">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="15419">
<caret line="913" selection-start-line="913" selection-end-line="913" />
</state>
</provider>
</entry>
</file>
<file pinned="false" current-in-tab="true">
<entry file="file://$PROJECT_DIR$/SoundGenerator.py">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="729">
<caret line="96" column="24" lean-forward="true" selection-start-line="96" selection-start-column="24" selection-end-line="96" selection-end-column="24" />
<state relative-caret-position="504">
<caret line="298" lean-forward="true" selection-start-line="298" selection-end-line="298" />
<folding>
<element signature="e#0#11#0" expanded="true" />
<element signature="e#0#42#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
</file>
<file pinned="false" current-in-tab="false">
<entry file="file://$USER_HOME$/AppData/Local/Programs/Python/Python35/Lib/site-packages/matplotlib/axes/_base.py">
<entry file="file://$USER_HOME$/AppData/Local/Programs/Python/Python35/Lib/site-packages/scipy/signal/signaltools.py">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="3349">
<caret line="230" selection-start-line="230" selection-end-line="230" />
</state>
</provider>
</entry>
</file>
<file pinned="false" current-in-tab="false">
<entry file="file://$USER_HOME$/AppData/Local/Programs/Python/Python35/Lib/tkinter/ttk.py">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="9367">
<caret line="552" selection-start-line="552" selection-end-line="552" />
<state relative-caret-position="28492">
<caret line="1694" column="4" selection-start-line="1694" selection-start-column="4" selection-end-line="1694" selection-end-column="4" />
</state>
</provider>
</entry>
@@ -96,6 +95,18 @@
<find>500</find>
<find>Text</find>
<find>name</find>
<find>unten_button_play_press</find>
<find>StringVar</find>
<find>Speichern</find>
<find>csv</find>
<find>musikTest</find>
<find>Daten er</find>
<find>samples</find>
<find>framerate</find>
<find>sample</find>
<find>samplerate</find>
<find>order</find>
<find>feedback</find>
</findStrings>
<dirStrings>
<dir>C:\Users\Julian\PycharmProjects\TinnitusAnalyse</dir>
@@ -107,21 +118,18 @@
<component name="IdeDocumentHistory">
<option name="CHANGED_PATHS">
<list>
<option value="$PROJECT_DIR$/WriteToCSV.py" />
<option value="$PROJECT_DIR$/DigitalFilter1.py" />
<option value="$PROJECT_DIR$/Noise Experiment.py" />
<option value="$PROJECT_DIR$/DigitalFilter.py" />
<option value="$PROJECT_DIR$/SoundGenerator.py" />
<option value="$PROJECT_DIR$/TinnitusAnalyse_GUI.py" />
</list>
</option>
</component>
<component name="ProjectFrameBounds" extendedState="6">
<option name="x" value="-8" />
<option name="y" value="-8" />
<option name="width" value="1696" />
<option name="height" value="1066" />
<component name="ProjectFrameBounds" extendedState="7">
<option name="x" value="313" />
<option name="y" value="-25" />
<option name="width" value="1294" />
<option name="height" value="1407" />
</component>
<component name="ProjectId" id="1hYkQMnWccTfUN5kAX3DpaPGeCX" />
<component name="ProjectLevelVcsManager" settingsEditedManually="true" />
<component name="ProjectView">
<navigator proportions="" version="1">
@@ -137,6 +145,7 @@
</component>
<component name="RecentsManager">
<key name="CopyFile.RECENT_KEYS">
<recent name="C:\Users\Julian\Desktop\Tinnitus GITHUB\Tinnitus_Musik_Therapie_Projektarbeit_Repo\TinnitusAnalyse" />
<recent name="C:\Users\Julian\PycharmProjects\TinnitusAnalyse" />
</key>
</component>
@@ -153,7 +162,7 @@
</option>
</component>
<component name="RunManager" selected="Python.TinnitusAnalyse_GUI">
<configuration name="DigitalFilter" type="PythonConfigurationType" factoryName="Python" temporary="true">
<configuration name="DigitalFilter (1)" type="PythonConfigurationType" factoryName="Python" temporary="true">
<module name="TinnitusAnalyse" />
<option name="INTERPRETER_OPTIONS" value="" />
<option name="PARENT_ENVS" value="true" />
@@ -161,11 +170,11 @@
<env name="PYTHONUNBUFFERED" value="1" />
</envs>
<option name="SDK_HOME" value="" />
<option name="WORKING_DIRECTORY" value="$PROJECT_DIR$" />
<option name="IS_MODULE_SDK" value="true" />
<option name="WORKING_DIRECTORY" value="$PROJECT_DIR$/../../.." />
<option name="IS_MODULE_SDK" value="false" />
<option name="ADD_CONTENT_ROOTS" value="true" />
<option name="ADD_SOURCE_ROOTS" value="true" />
<option name="SCRIPT_NAME" value="$PROJECT_DIR$/DigitalFilter.py" />
<option name="SCRIPT_NAME" value="$PROJECT_DIR$/../../../DigitalFilter.py" />
<option name="PARAMETERS" value="" />
<option name="SHOW_COMMAND_LINE" value="false" />
<option name="EMULATE_TERMINAL" value="false" />
@@ -174,7 +183,7 @@
<option name="INPUT_FILE" value="" />
<method v="2" />
</configuration>
<configuration name="DigitalFilter1" type="PythonConfigurationType" factoryName="Python" temporary="true">
<configuration name="DigitalFilterTest" type="PythonConfigurationType" factoryName="Python" temporary="true">
<module name="TinnitusAnalyse" />
<option name="INTERPRETER_OPTIONS" value="" />
<option name="PARENT_ENVS" value="true" />
@@ -186,7 +195,7 @@
<option name="IS_MODULE_SDK" value="true" />
<option name="ADD_CONTENT_ROOTS" value="true" />
<option name="ADD_SOURCE_ROOTS" value="true" />
<option name="SCRIPT_NAME" value="$PROJECT_DIR$/DigitalFilter1.py" />
<option name="SCRIPT_NAME" value="$PROJECT_DIR$/DigitalFilterTest.py" />
<option name="PARAMETERS" value="" />
<option name="SHOW_COMMAND_LINE" value="false" />
<option name="EMULATE_TERMINAL" value="false" />
@@ -195,7 +204,7 @@
<option name="INPUT_FILE" value="" />
<method v="2" />
</configuration>
<configuration name="Noise Experiment" type="PythonConfigurationType" factoryName="Python" temporary="true">
<configuration name="DigitalFilterTest2" type="PythonConfigurationType" factoryName="Python" temporary="true">
<module name="TinnitusAnalyse" />
<option name="INTERPRETER_OPTIONS" value="" />
<option name="PARENT_ENVS" value="true" />
@@ -207,7 +216,7 @@
<option name="IS_MODULE_SDK" value="true" />
<option name="ADD_CONTENT_ROOTS" value="true" />
<option name="ADD_SOURCE_ROOTS" value="true" />
<option name="SCRIPT_NAME" value="$PROJECT_DIR$/Noise Experiment.py" />
<option name="SCRIPT_NAME" value="$PROJECT_DIR$/DigitalFilterTest2.py" />
<option name="PARAMETERS" value="" />
<option name="SHOW_COMMAND_LINE" value="false" />
<option name="EMULATE_TERMINAL" value="false" />
@@ -262,9 +271,9 @@
<list>
<item itemvalue="Python.TinnitusAnalyse_GUI" />
<item itemvalue="Python.SoundGenerator" />
<item itemvalue="Python.DigitalFilter" />
<item itemvalue="Python.Noise Experiment" />
<item itemvalue="Python.DigitalFilter1" />
<item itemvalue="Python.DigitalFilterTest" />
<item itemvalue="Python.DigitalFilterTest2" />
<item itemvalue="Python.DigitalFilter (1)" />
</list>
</recent_temporary>
</component>
@@ -282,92 +291,116 @@
<servers />
</component>
<component name="ToolWindowManager">
<frame x="-8" y="-8" width="2576" height="1416" extended-state="6" />
<frame x="-8" y="-8" width="2576" height="1416" extended-state="7" />
<editor active="true" />
<layout>
<window_info content_ui="combo" id="Project" order="0" weight="0.18479118" />
<window_info content_ui="combo" id="Project" order="0" weight="0.25" />
<window_info id="Structure" order="1" side_tool="true" weight="0.25" />
<window_info id="Favorites" order="2" side_tool="true" />
<window_info anchor="bottom" id="Message" order="0" />
<window_info anchor="bottom" id="Find" order="1" />
<window_info active="true" anchor="bottom" id="Run" order="2" visible="true" weight="0.2548714" />
<window_info anchor="bottom" id="Debug" order="3" weight="0.3990647" />
<window_info active="true" anchor="bottom" id="Run" order="2" visible="true" weight="0.2182385" />
<window_info anchor="bottom" id="Debug" order="3" weight="0.3998441" />
<window_info anchor="bottom" id="Cvs" order="4" weight="0.25" />
<window_info anchor="bottom" id="Inspection" order="5" weight="0.4" />
<window_info anchor="bottom" id="TODO" order="6" />
<window_info anchor="bottom" id="Version Control" order="7" />
<window_info anchor="bottom" id="Version Control" order="7" weight="0.32969603" />
<window_info anchor="bottom" id="Terminal" order="8" weight="0.32969603" />
<window_info anchor="bottom" id="Event Log" order="9" side_tool="true" />
<window_info anchor="bottom" id="Python Console" order="10" />
<window_info anchor="bottom" id="Python Console" order="10" weight="0.32969603" />
<window_info anchor="right" id="Commander" internal_type="SLIDING" order="0" type="SLIDING" weight="0.4" />
<window_info anchor="right" id="Ant Build" order="1" weight="0.25" />
<window_info anchor="right" content_ui="combo" id="Hierarchy" order="2" weight="0.25" />
</layout>
<layout-to-restore>
<window_info content_ui="combo" id="Project" order="0" visible="true" weight="0.18479118" />
<window_info id="Structure" order="1" side_tool="true" weight="0.25" />
<window_info id="Favorites" order="2" side_tool="true" />
<window_info anchor="bottom" id="Message" order="0" />
<window_info anchor="bottom" id="Find" order="1" />
<window_info active="true" anchor="bottom" id="Run" order="2" visible="true" weight="0.30553392" />
<window_info anchor="bottom" id="Debug" order="3" weight="0.4" />
<window_info anchor="bottom" id="Cvs" order="4" weight="0.25" />
<window_info anchor="bottom" id="Inspection" order="5" weight="0.4" />
<window_info anchor="bottom" id="TODO" order="6" />
<window_info anchor="bottom" id="Version Control" order="7" />
<window_info anchor="bottom" id="Terminal" order="8" />
<window_info anchor="bottom" id="Event Log" order="9" side_tool="true" />
<window_info anchor="bottom" id="Python Console" order="10" />
<window_info anchor="right" id="Commander" internal_type="SLIDING" order="0" type="SLIDING" weight="0.4" />
<window_info anchor="right" id="Ant Build" order="1" weight="0.25" />
<window_info anchor="right" content_ui="combo" id="Hierarchy" order="2" weight="0.25" />
</layout-to-restore>
</component>
<component name="WindowStateProjectService">
<state x="669" y="115" key="#SoundGenerator" timestamp="1600197469354">
<screen x="0" y="0" width="1920" height="1040" />
</state>
<state x="669" y="115" key="#SoundGenerator/0.0.1920.1040@0.0.1920.1040" timestamp="1600197469354" />
<state x="623" y="225" width="672" height="678" key="search.everywhere.popup" timestamp="1600261634426">
<screen x="0" y="0" width="1920" height="1040" />
</state>
<state x="623" y="225" width="672" height="678" key="search.everywhere.popup/0.0.1920.1040@0.0.1920.1040" timestamp="1600261634426" />
</component>
<component name="editorHistoryManager">
<entry file="file://$PROJECT_DIR$/.idea/TinnitusAnalyse.iml">
<provider selected="true" editor-type-id="text-editor" />
</entry>
<entry file="file://$PROJECT_DIR$/WriteToCSV.py" />
<entry file="file://$PROJECT_DIR$/DigitalFilter1.py" />
<entry file="file://$PROJECT_DIR$/Noise Experiment.py" />
<entry file="file://$PROJECT_DIR$/DigitalFilter.py" />
<entry file="file://$USER_HOME$/AppData/Local/Programs/Python/Python35/Lib/site-packages/matplotlib/axes/_base.py">
<entry file="file://$USER_HOME$/.PyCharmCE2019.1/system/python_stubs/-1242442885/audioop.py">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="3349">
<caret line="230" selection-start-line="230" selection-end-line="230" />
<state relative-caret-position="-1530" />
</provider>
</entry>
<entry file="file://$USER_HOME$/AppData/Local/Programs/Python/Python35/Lib/wave.py">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="1428">
<caret line="84" column="12" selection-start-line="84" selection-start-column="12" selection-end-line="84" selection-end-column="12" />
</state>
</provider>
</entry>
<entry file="file://$USER_HOME$/AppData/Local/Programs/Python/Python35/Lib/tkinter/ttk.py">
<entry file="file://$USER_HOME$/.PyCharmCE2019.1/system/python_stubs/-1242442885/builtins.py">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="9367">
<caret line="552" selection-start-line="552" selection-end-line="552" />
<state relative-caret-position="375">
<caret line="4857" column="53" selection-start-line="4857" selection-start-column="53" selection-end-line="4857" selection-end-column="53" />
</state>
</provider>
</entry>
<entry file="file://$USER_HOME$/AppData/Local/Programs/Python/Python35/Lib/site-packages/scipy/io/wavfile.py">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="4386">
<caret line="263" selection-start-line="263" selection-end-line="263" />
</state>
</provider>
</entry>
<entry file="file://$USER_HOME$/AppData/Local/Programs/Python/Python35/Lib/site-packages/scipy/signal/filter_design.py">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="38437">
<caret line="2278" column="41" selection-start-line="2278" selection-start-column="41" selection-end-line="2278" selection-end-column="41" />
</state>
</provider>
</entry>
<entry file="file://$USER_HOME$/AppData/Local/Programs/Python/Python35/Lib/tkinter/__init__.py">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="874">
<state relative-caret-position="-3474">
<caret line="1557" selection-start-line="1557" selection-end-line="1557" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/SoundGenerator.py">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="729">
<caret line="96" column="24" lean-forward="true" selection-start-line="96" selection-start-column="24" selection-end-line="96" selection-end-column="24" />
<folding>
<element signature="e#0#11#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/TinnitusAnalyse_GUI.py">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="248">
<caret line="155" lean-forward="true" selection-start-line="155" selection-end-line="155" />
<state relative-caret-position="500">
<caret line="215" lean-forward="true" selection-start-line="215" selection-end-line="215" />
<folding>
<element signature="e#0#117#0" expanded="true" />
<element signature="e#0#30#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$USER_HOME$/AppData/Local/Programs/Python/Python35/Lib/site-packages/scipy/signal/fir_filter_design.py">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="6562">
<caret line="399" selection-start-line="399" selection-end-line="399" />
</state>
</provider>
</entry>
<entry file="file://$USER_HOME$/AppData/Local/Programs/Python/Python35/Lib/threading.py">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="15419">
<caret line="913" selection-start-line="913" selection-end-line="913" />
</state>
</provider>
</entry>
<entry file="file://$USER_HOME$/AppData/Local/Programs/Python/Python35/Lib/site-packages/scipy/signal/signaltools.py">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="28492">
<caret line="1694" column="4" selection-start-line="1694" selection-start-column="4" selection-end-line="1694" selection-end-column="4" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/SoundGenerator.py">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="504">
<caret line="298" lean-forward="true" selection-start-line="298" selection-end-line="298" />
<folding>
<element signature="e#0#42#0" expanded="true" />
</folding>
</state>
</provider>
Binary file not shown.
Binary file not shown.
Binary file not shown.

After

Width:  |  Height:  |  Size: 39 KiB

Binary file not shown.
+263 -64
View File
@@ -1,10 +1,12 @@
import math
import wave # bearbeiten von .wav-Dateien
import struct
import sounddevice as sd # zum abspielen des audio-arrays
import sounddevice as sd
import numpy as np
import sys # für Fehlermeldungen
import time as tm
from scipy import signal
import csv
import time
import matplotlib.pyplot as plt
"""---------------------------------------------------------------------------------------------------------------------
In .wav-Dateien wird der Ton in absoluten Werte eingetragen. Die Standart-framerate ist 44100
@@ -13,17 +15,21 @@ das heißt für jede Sekunde an Ton gibt es 44100 Werte, die die Tonwelle über
class Tinnitus: # beinhaltet alle Werte, die vom Nutzer eingestellt werden
def __init__(self, l_freq=0, r_freq=0, l_amp=0, r_amp=0, l_rausch=0, r_rausch=0, ohr=0):
def __init__(self, l_freq=0, r_freq=0, l_amp=0, r_amp=0, l_rausch=0, r_rausch=0, l_rausch_ug=10, r_rausch_ug=10, l_rausch_og=20000, r_rausch_og=20000):
self.vorname = ""
self.nachname = ""
self.kommentar = ""
# [Alle Frequenzangaben in Hz, alle Amplitudenangaben von 0-1 (float)]
self.linksFrequenz = l_freq
self.rechtsFrequenz = r_freq
self.linksLautstaerke = l_amp
self.rechtsLautstaerke = r_amp
self.linksRauschenLautstaerke = l_rausch # float von 0-1 (0 ist aus)
self.linksRauschenLautstaerke = l_rausch
self.rechtsRauschenLautstaerke = r_rausch
self.ohr = ohr # 0:both 1:left 2:right 3:links/rechts unterschiedlich
self.linksRauschenUntereGrenzfrequenz = l_rausch_ug
self.rechtsRauschenUntereGrenzfrequenz = r_rausch_ug
self.linksRauschenObereGrenzfrequenz = l_rausch_og
self.rechtsRauschenObereGrenzfrequenz = r_rausch_og
def speichern(self): # speichert die Nutzerdaten in eine .csv-Datei
datei = open("TinnitusDaten.csv", "w")
@@ -32,10 +38,16 @@ class Tinnitus: # beinhaltet alle Werte, die vom Nutzer eingestellt werden
daten += "Nachname;" + self.nachname + "\n"
daten += "linke Frequenz;" + str(self.linksFrequenz) + "\n"
daten += "linke Lautstärke;" + str(self.linksLautstaerke) + "\n"
daten += "linkes Rauschen;" + str(self.linksRauschenLautstaerke) + "\n"
daten += "linkes Rauschen Lautstärke;" + str(self.linksRauschenLautstaerke) + "\n"
daten += "linkes Rauschen untere Grenzfrequenz;" + str(self.linksRauschenUntereGrenzfrequenz) + "\n"
daten += "linkes Rauschen obere Grenzfrequenz;" + str(self.linksRauschenObereGrenzfrequenz) + "\n"
daten += "rechte Frequenz;" + str(self.rechtsFrequenz) + "\n"
daten += "rechte Lautstärke;" + str(self.rechtsLautstaerke) + "\n"
daten += "rechtes Rauschen;" + str(self.rechtsRauschenLautstaerke) + "\n"
daten += "rechtes Rauschen Lautstärke;" + str(self.rechtsRauschenLautstaerke) + "\n"
daten += "rechtes Rauschen untere Grenzfrequenz;" + str(self.rechtsRauschenUntereGrenzfrequenz) + "\n"
daten += "rechtes Rauschen obere Grenzfrequenz;" + str(self.rechtsRauschenObereGrenzfrequenz) + "\n"
daten += "Kommentar;" + str(self.kommentar) + "\n"
datei.write(daten)
@@ -43,94 +55,281 @@ class Tinnitus: # beinhaltet alle Werte, die vom Nutzer eingestellt werden
"""---------------------------------KLASSE: SOUND-----------------------------------------------------------------------
Sound beinhaltet alle Variablen, die zum erstellen einer .wav-Datei benötigt werden (siehe soun.wav_speichern())
Das 'sound_obj' ist für das dynamische abspielen zuständig (siehe sound.play())
Beim Initialisieren muss eine Tinnitus-Objekt übergeben werden
Sound beinhaltet alle Variablen und Funktionen zum bearbeiten der wav-Dateien und zum abspielen des Sounds in Echtzeit
Beim Initialisieren muss ein Tinnitus-Objekt übergeben werden
---------------------------------------------------------------------------------------------------------------------"""
class Sound:
def __init__(self, tinnitus, name="MeinTinnitus.wav", audio=None, nchannels=1, sampwidth=2, framerate=44100,
comptype="NONE", compname="not compressed", mute=True):
if audio is None:
audio = []
def __init__(self, tinnitus):
self.tinnitus = tinnitus
self.name = name
self.audio = audio # ein Array, in das die Sound-Werte geschrieben werden (von -1, bis +1)
self.nchannels = nchannels # Zahl der audio channels (1:mono 2:stereo)
self.sampwidth = sampwidth # Größe eines einzelnen Sound-Werts (in bytes)
self.framerate = framerate # Abtastrate
self.nframes = len(audio) # Anzahl der Sound-Werte -> Muss bei jeder audio-Änderung aktuallisiert werden
self.comptype = comptype
self.compname = compname
self.mute = mute # wenn der mute boolean auf true gesetzt ist, sollte kein Ton ausgegeben werden
# Variablen für das Abspeichern und Abspielen des Tinnitus-Geräuschs:
self.wav_name = "MeinTinnitus.wav" #Der Dateiname
self.audio = [] # ein Array, in das die Sound-Werte geschrieben werden (von -1, bis +1)
self.nchannels = 2 # Zahl der audio channels (1:mono 2:stereo)
self.sampwidth = 2 # Größe eines einzelnen Sound-Werts (in bytes)
self.framerate = 44100 # Abtastrate
self.nframes = len(self.audio) # Anzahl der Sound-Werte -> Muss bei jeder audio-Änderung aktuallisiert werden
self.comptype = "NONE"
self.compname = "not compressed"
self.mute = True # wenn der mute boolean auf true gesetzt ist, sollte kein Ton ausgegeben werden
self.sound_obj = sd.OutputStream(channels=2, callback=self.callback,
samplerate=self.framerate) # Objekt fürs Abspielen (siehe sound.play())
self.start_idx = 0 # wird für sound_obj benötigt
#Variablen für das Filtern der Musikdatei:
self.music_samplerate = 0 # die samplerate der ausgewählten Musikdatei
self.music_data = 0 # das Numpy Array der ausgewählten Musikdatei
self.filterfortschritt = 0, 0. # für feedback-fkt, 1.Position: Abschnitt-Nmr, 2.Positon: Speicherfortschritt
def wav_speichern(self): # ezeugt/aktuallisiert die .wav-Datei
wav_file = wave.open(self.name, "w")
print("Sound wird als .wav-Datei gespeichert. Bitte warten...\nDer Vorgang kann ca. 30 Sekunden dauern")
# zuerst muss ein Array mit Audiodaten gefüllt werden
audio = []
freq = self.tinnitus.linksFrequenz
dauer_ms = 10000.0 # 10 Sekunden
amp = self.tinnitus.linksLautstaerke
rauschen = self.tinnitus.linksRauschenLautstaerke
print("Sound wird als .wav-Datei gespeichert. Bitte warten...\nDer Vorgang kann ca. 10 Sekunden dauern")
num_samples = dauer_ms * (self.framerate / 1000.0) # framerate -pro Sekunde- umgerechnet in -pro Millisekunde-
wav_obj = wave.open(self.wav_name, "w")
for x in range(int(num_samples)): # einen einfachen Sinus ins array schreiben
audio.append(amp * math.sin(2 * math.pi * freq * (x / self.framerate)))
# Die Callback-Funktion aufrufen, um die Audiodaten zu bekommen
nframes = self.framerate * 10 # entspricht 10 Sekunden
status = "" # für den Funktionsaufruf benötigt, sonst keine Funktion
audio = np.ones((nframes, 2)) # Audio-Array initialisieren
audio = self.callback(audio, nframes, self.sound_obj.time, status)
if rauschen: # das Rauschen addieren
for x in range(int(num_samples)):
audio[x] += (np.random.rand() - 0.5) * rauschen
#Audio-Samples auf 1 normieren. Samples müssen zum speichern zwischen -1 und 1 liegen
#Maximum finden (Funktion max(...) ist minimal schneller, macht aber Probleme beim Feedback)
max_ges = 1
for i in range(nframes):
if max_ges < abs(audio[i][0]):
max_ges = abs(audio[i][0])
if max_ges < abs(audio[i][1]):
max_ges = abs(audio[i][1])
# erst werden die Rahmen-Parameter gesetzt
self.nframes = len(audio) # Anpassen des nframes-Parameters
wav_file.setparams((self.nchannels, self.sampwidth, self.framerate, self.nframes, self.comptype, self.compname))
#auf 4 Nachkommastellen aufrunden
max_ges = int(max_ges * 10000)
max_ges += 1
max_ges /= 10000
# dann wird das audio-Array an die Datei übertragen
for sample in audio:
wav_file.writeframes(struct.pack('h', int(sample * 32767.0)))
print("X_GES: ", max_ges)
wav_file.close()
#Alle samples normieren
audio[:, 0] /= max_ges
audio[:, 1] /= max_ges
# Rahmenparameter für die .wav-Datei setzen
self.nframes = len(audio)
wav_obj.setparams((self.nchannels, self.sampwidth, self.framerate, self.nframes, self.comptype, self.compname))
packedMusic = [] # Liste an die wir die einzelnen frames bereits in binär umgewandelt aneinanderreihen
#Die Audiosamples schreiben
for x in range(self.nframes): # geht jeden Sample-Wert der Musikdatei einzeln durch
# Die Audiodaten müssen von float in einen passenden int-Wert umgerechnet werden
packedMusic.append(struct.pack('h', int(audio[x][0] * 32767.0)))
packedMusic.append(struct.pack('h', int(audio[x][1] * 32767.0)))
value_str = b"".join(packedMusic)
wav_obj.writeframes(value_str)
wav_obj.close()
print("Speichern beendet.")
"""Die Objekt-Funktion 'start()' startet die asynchrone Soundwiedergabe. Sie ruft dabei immer wieder die Funktion
sound.callback() auf. Daher können die dort genutzten Variablen dynamisch geändert werden. """
def play(self):
"""sound.play()' startet die asynchrone Soundwiedergabe. Sie ruft dabei immer wieder die Funktion
sound.callback() auf. Daher können die dort genutzten Variablen dynamisch geändert werden. """
if not self.mute: # Nie abspielen, wenn die GUI auf stumm geschaltet ist
self.sound_obj.start()
self.sound_obj.start() # öffnet thread der immer wieder callback funktion aufruft und diese daten abspielt
def stop(self):
self.sound_obj.stop() # beendet die asynchrone Soundwiedergabe
"""Die Funktion callback() erzeugt bei jedem Aufruf die Audiodaten, abhängig von den aktuellen Tinnitus-Variablen.
Die errechneten Werte werden in das NumPy-Array 'outdata' geschrieben """
def callback(self, outdata, frames, time, status):
"""erzeugt bei jedem Aufruf die Audiodaten, abhängig von den aktuellen Tinnitus-Variablen.
Die errechneten Werte werden in das NumPy-Array 'outdata' geschrieben """
if status: # Warnungen, wenn das Soundobj. auf Fehler stößt (hauptsächlich over/underflow wg. Timingproblemen)
print(status, file=sys.stderr)
# Sinus ins Array schreiben: f(t) = A * sin(2 * pi * f * t)
for x in range(frames):
# links:
outdata[x][0] = self.tinnitus.linksLautstaerke * np.sin(2 * np.pi * self.tinnitus.linksFrequenz *
((x + self.start_idx) / self.framerate))
# rechts:
outdata[x][1] = self.tinnitus.rechtsLautstaerke * np.sin(2 * np.pi * self.tinnitus.rechtsFrequenz *
((x + self.start_idx) / self.framerate))
# Rauschen addieren
for x in range(frames):
# Whitenoise erzeugen
# Wird auch durchlaufen, wenn es kein Rauschen gibt, damit die alten Daten mit 0 überschrieben werden
for x in range(len(outdata)):
rand = (np.random.rand() - 0.5) # Zufallszahl zwischen -0.5 und 0.5
# links:
if self.tinnitus.linksRauschenLautstaerke:
outdata[x][0] += rand * self.tinnitus.linksRauschenLautstaerke
outdata[x][0] = rand * self.tinnitus.linksRauschenLautstaerke
# rechts:
if self.tinnitus.rechtsRauschenLautstaerke:
outdata[x][1] += rand * self.tinnitus.rechtsRauschenLautstaerke
outdata[x][1] = rand * self.tinnitus.rechtsRauschenLautstaerke
# Whitenoise durch Bandpass laufen lassen
if self.tinnitus.linksRauschenLautstaerke:
# (-3dB Grenzen) bzw was der Bandpass durchlässt
fGrenz = [self.tinnitus.linksRauschenUntereGrenzfrequenz, self.tinnitus.linksRauschenObereGrenzfrequenz]
sos = signal.butter(5, fGrenz, 'bandpass', fs=self.framerate, output='sos')
# sosfilt filtert das Signal mittels mehrerer 'second order sections' (= Filter 2. Ordnung) die über sos definiert sind
outdata[:, 0] = signal.sosfilt(sos, outdata[:, 0])
if self.tinnitus.rechtsRauschenLautstaerke:
# (-3dB Grenzen) bzw was der Bandpass durchlässt
fGrenz = [self.tinnitus.rechtsRauschenUntereGrenzfrequenz, self.tinnitus.rechtsRauschenObereGrenzfrequenz]
sos = signal.butter(5, fGrenz, 'bandpass', fs=self.framerate, output='sos')
# sosfilt filtert das Signal mittels mehrerer 'second order sections' (= Filter 2. Ordnung) die über sos definiert sind
outdata[:, 1] = signal.sosfilt(sos, outdata[:, 1])
# Sinus addieren: f(t) = A * sin(2 * pi * f * t)
for x in range(len(outdata)):
# links: rauschen und sinus wieder zusammen addieren
outdata[x][0] += self.tinnitus.linksLautstaerke * np.sin(2 * np.pi * self.tinnitus.linksFrequenz *
((x + self.start_idx) / self.framerate))
# rechts: rauschen und sinus wieder zusammen addieren
outdata[x][1] += self.tinnitus.rechtsLautstaerke * np.sin(2 * np.pi * self.tinnitus.rechtsFrequenz *
((x + self.start_idx) / self.framerate))
self.start_idx += frames
return outdata
def musik_filtern(self):
"""
Diese Funktion filtert die Tinnitus Frequenz aus einer gewählten Musikdatei. Dabei geht sie in 4 großen
Schritten vor:
1. Die nötigen Informationen über den Tinnitus aus der .csv Datei herausholen
2. Die digitalen Filter erstellen und die Tinnitus Frequenz aus der Audiodatei "herausschneiden"
3. Überschwinger finden und alle Audiosamples wieder auf 1 normieren
4. Die fertigen Audiodatei als .wav Datei speichern
"""
nframes = len(self.music_data) # Gesamtanzahl der Frames in der Musikdatei
# ------------1. Die nötigen Informationen über den Tinnitus aus der .csv Datei herausholen---------------------
self.filterfortschritt = 1, 0 # der erste schritt
csvstring = open("TinnitusDaten.csv").read()
tinnitus_data = csvstring.split("\n")
# linke Frequenz aus csv Datei holen
lf = tinnitus_data[2]
lf = lf.split(";")
lf = float(lf[1])
# rechte Frequenz aus csv Datei holen
rf = tinnitus_data[7]
rf = rf.split(";")
rf = float(rf[1])
# linke Lautstärke aus cvs Datei holen
ll = tinnitus_data[3]
ll = ll.split(";")
ll = float(ll[1])
# rechte Lautstärke aus cvs Datei holen
rl = tinnitus_data[8]
rl = rl.split(";")
rl = float(rl[1])
# -------- 2. Die digitalen Filter erstellen und die Tinnitus Frequenz aus der Audiodatei "herausschneiden------
self.filterfortschritt = 2, 0 # der zweite schritt im Feedback
start_time = time.time() # einen Timer laufen lassen um zu sehen wie lange Filterung dauert
#Parameter festlegen
order = 501 # Filterordnung
bandwidth = 1000 # Bandbreite des Sperrbereichs in Hz
self.music_data = self.music_data/32767 # convert array from int16 to float
# ------------------------------------------LEFT EAR FILTERING-------------------------------------------------
if ll != 0.0: # nur wenn die Lautstärke des linken Tinnitus ungleich 0 ist, wird auf diesem Ohr auch gefiltert
cutoff_frequencies = [(lf - (bandwidth / 2)),
(lf + (bandwidth / 2))] # the cutoff frequencies (lower and upper)
h = signal.firwin(order, [cutoff_frequencies[0], cutoff_frequencies[1]], fs=self.music_samplerate)
music_links = signal.lfilter(h, 1.0, self.music_data[:, 0])
else:
music_links = self.music_data[:, 0] # ungefiltert, wenn kein Tinnitus angegeben wurde
# ------------------------------------- RIGHT EAR FILTERING ------------------------------------------------
if rl != 0.0: # nur wenn die Lautstärke des rechten Tinnitus ungleich 0 ist, wird auf diesem Ohr auch gefiltert
cutoff_frequencies = [(lf - (bandwidth / 2)),
(lf + (bandwidth / 2))] # the cutoff frequencies (lower and upper)
h = signal.firwin(order, [cutoff_frequencies[0], cutoff_frequencies[1]], fs=self.music_samplerate)
music_rechts = signal.lfilter(h, 1.0, self.music_data[:, 1])
else:
music_rechts = self.music_data[:, 1] # ungefiltert, wenn kein Tinnitus angegeben wurde
endTimeFiltering = time.time()
print("benötigte Zeit zum Filtern rechts Ohr =", endTimeFiltering - start_time, "s")
#----------------------- 3. Maxima finden und Samples auf 1 normieren ----------------------------
self.filterfortschritt = 3, 0 # der dritte schritt
#Maximum finden (Funktion max(...) ist minimal schneller, macht aber Probleme beim Feedback)
start_time = time.time()
max_ges = 1
fortschritt = 0
for i in range(nframes):
if max_ges < abs(music_links[i]):
max_ges = abs(music_links[i])
if max_ges < abs(music_rechts[i]):
max_ges = abs(music_rechts[i])
if i % int(nframes/10) == 0: # gibt Fortschritt in 10%-Schritten an
fortschritt += 10
self.filterfortschritt = 3, round(fortschritt, 1)
print(" max: ", self.filterfortschritt[1], "%")
end_time = time.time()
print("Zeitaufwand Maxima-Suche: ", end_time - start_time)
#auf 4 Nachkommastellen aufrunden
start_time = time.time()
max_ges = int(max_ges * 10000)
max_ges += 1
max_ges /= 10000
end_time = time.time()
print("Zeitaufwand Maximum runden: ", end_time - start_time)
#Alle samples normieren
start_time = time.time()
music_links /= max_ges
music_rechts /= max_ges
end_time = time.time()
print("Zeitaufwand samples normieren: ", end_time - start_time)
# ------------------------- 4. Die fertigen Audiodatei als .wav Datei speichern --------------------------------
self.filterfortschritt = [4, 0] # der vierte Schritt
start_time = time.time()
wav_obj = wave.open("gefilterteMusik.wav", "w")
# Rahmenparameter für die .wav-Datei setzen
wav_obj.setparams((self.nchannels, self.sampwidth, self.music_samplerate, nframes, self.comptype, self.compname))
"""The values are stored in a temporary list, and when the process is finished, they are joined together into
an string which is then sent to the output with the traditional writeframes method."""
packedMusic = [] # Liste an die wir die einzelnen frames bereits in binär umgewandelt aneinanderreihen
# Die Audiosamples schreiben
print("Musikdatei wird erstellt...")
fortschritt = 0
for tinnitus_data in range(nframes): #geht jeden Sample-Wert der Musikdatei einzeln durch
# Die Audiodaten müssen von float in einen passenden int-Wert umgerechnet werden
packedMusic.append(struct.pack('h', int(music_links[tinnitus_data] * 32767.0)))
packedMusic.append(struct.pack('h', int(music_rechts[tinnitus_data] * 32767.0)))
if tinnitus_data % int(nframes/10) == 0: # gibt Fortschritt in 10%-Schritten an
fortschritt += 10
self.filterfortschritt = 4, round(fortschritt, 1)
print(" samples: ", self.filterfortschritt[1], "%")
end_time = time.time()
print("Zeitaufwand für das packen der einzelnen Samples =", end_time - start_time, "s")
value_str = b"".join(packedMusic)
start = time.time()
wav_obj.writeframes(value_str)
end = time.time()
print("Zeitaufwand für das schreiben aller Frames in die wav Datei =", end - start, "s")
wav_obj.close()
print("Speichern beendet.")
self.filterfortschritt = 5, 0 #Nach erfolgreichem Filtern Fortschritt zur Bestätigung auf 5 setzen
+184 -60
View File
@@ -1,8 +1,10 @@
from tkinter import filedialog
from tkinter.ttk import Frame, Label, Button, LabelFrame, Combobox, Style, Checkbutton, Entry, Panedwindow, Separator
from tkinter import *
from SoundGenerator import *
import csv
import time
import sounddevice as sd
from scipy.io import wavfile
import threading
"""--------------------------FUNKTIONEN DIE DURCH GUI KLICKS AUSGEFÜHRT WERDEN---------------------------------------"""
"""-------Funktionen links-------------"""
@@ -21,21 +23,30 @@ def links_scale_frequenz_change(self):
def links_scale_rauschen_lautstärke_change(self):
# scale liefert 0-100%, tinnitus.lautstärke zwischen 0-1 (float)
tinnitus.linksRauschenLautstaerke = float(linksScaleRauschenLautstärke.get()/1000)
print("Links Rauschen Lautstärke = ", tinnitus.linksRauschenLautstaerke*1000, "%")
sound.play()
def links_scale_rauschen_mittelfrequenz_change(self):
linksRauschenMittelfrequenz = float(linksScaleRauschenMittelFrequenz.get())
print("Links Rauschen Mittelfrequenz = ", linksRauschenMittelfrequenz)
sound.play()
def links_scale_untere_grenzfrequenz_change(self):
og = float(linksScaleObereGrenzfrequenz.get() * 1000) # kHz -> Hz
ug = float(linksScaleUntereGrenzfrequenz.get() * 1000) # kHz -> Hz
if og <= ug: # wenn obere Grenzfreq. kleiner als untere Grenzfreq. ist -> macht keinen Sinn deswegen verbieten
linksScaleUntereGrenzfrequenz.set(linksScaleObereGrenzfrequenz.get() - 0.01)
else:
tinnitus.linksRauschenUntereGrenzfrequenz = ug
sound.play()
def links_scale_rauschen_bandbreite_change(self):
linksRauschenBandbreite = float(linksScaleRauschenBandbreite.get())
print("Links Rauschen Bandbreite = ", linksRauschenBandbreite)
sound.play()
def links_scale_obere_grenzfrequenz_change(self):
og = float(linksScaleObereGrenzfrequenz.get()*1000) # kHz -> Hz
ug = float(linksScaleUntereGrenzfrequenz.get() * 1000) # kHz -> Hz
if og <= ug: # wenn obere Grenzfreq. kleiner als untere Grenzfreq. ist -> macht keinen Sinn deswegen verbieten
linksScaleObereGrenzfrequenz.set(linksScaleUntereGrenzfrequenz.get() + 0.01)
else:
tinnitus.linksRauschenObereGrenzfrequenz = og
sound.play()
"""----------Funktionen rechts----------"""
@@ -54,21 +65,29 @@ def rechts_scale_frequenz_change(self):
def rechts_scale_rauschen_lautstärke_change(self):
tinnitus.rechtsRauschenLautstaerke = float(rechtsScaleRauschenLautstärke.get()/1000)
tinnitus.rechtsRauschenLautstaerke = float(rechtsScaleRauschenLautstärke.get()/1000) # 0-100% -> 0-1(float)
print("Rechts Rauschen Lautstärke = ", tinnitus.rechtsRauschenLautstaerke*1000, "%")
sound.play()
def rechts_scale_rauschen_mittelfrequenz_change(self):
rechtsRauschenMittelfrequenz = float(rechtsScaleRauschenMittelFrequenz.get())
print("Rechts Rauschen Mittelfrequenz = ", rechtsRauschenMittelfrequenz)
sound.play()
def rechts_scale_untere_grenzfrequenz_change(self):
og = float(rechtsScaleObereGrenzfrequenz.get() * 1000) # kHz -> Hz
ug = float(rechtsScaleUntereGrenzfrequenz.get() * 1000) # kHz -> Hz
if ug >= og: # wenn obere Grenzfreq. kleiner als untere Grenzfreq. ist -> macht keinen Sinn deswegen verbieten
rechtsScaleUntereGrenzfrequenz.set(rechtsScaleObereGrenzfrequenz.get()-0.01)
else:
tinnitus.rechtsRauschenUntereGrenzfrequenz = ug
sound.play()
def rechts_scale_rauschen_bandbreite_change(self):
rechtsRauschenBandbreite = float(rechtsScaleRauschenBandbreite.get())
print("Rechts Rauschen Bandbreite = ", rechtsRauschenBandbreite)
sound.play()
def rechts_scale_obere_grenzfrequenz_change(self):
og = float(rechtsScaleObereGrenzfrequenz.get()*1000) # kHz -> Hz
ug = float(rechtsScaleUntereGrenzfrequenz.get() * 1000) # kHz -> Hz
if og <= ug: # wenn obere Grenzfreq. kleiner als untere Grenzfreq. ist -> macht keinen Sinn deswegen verbieten
rechtsScaleObereGrenzfrequenz.set(rechtsScaleUntereGrenzfrequenz.get()+0.01)
else:
tinnitus.rechtsRauschenObereGrenzfrequenz = og
sound.play()
"""--------------Funktionen unten------------------"""
@@ -85,16 +104,16 @@ def unten_button_ohren_synchro():
rechtsScaleLautstärke.set(linksScaleLautstärke.get())
rechtsScaleFrequenz.set(linksScaleFrequenz.get())
rechtsScaleRauschenLautstärke.set(linksScaleRauschenLautstärke.get())
rechtsScaleRauschenMittelFrequenz.set(linksScaleRauschenMittelFrequenz.get())
rechtsScaleRauschenBandbreite.set(linksScaleRauschenBandbreite.get())
rechtsScaleUntereGrenzfrequenz.set(linksScaleUntereGrenzfrequenz.get())
rechtsScaleObereGrenzfrequenz.set(linksScaleObereGrenzfrequenz.get())
feedback("Einstellungen vom linken Ohr auf beide Ohren übertragen")
if auswahl == "Rechtes Ohr": # rechts --> links
linksScaleLautstärke.set(rechtsScaleLautstärke.get())
linksScaleFrequenz.set(rechtsScaleFrequenz.get())
linksScaleRauschenLautstärke.set(rechtsScaleRauschenLautstärke.get())
linksScaleRauschenMittelFrequenz.set(rechtsScaleRauschenMittelFrequenz.get())
linksScaleRauschenBandbreite.set(rechtsScaleRauschenBandbreite.get())
linksScaleUntereGrenzfrequenz.set(rechtsScaleUntereGrenzfrequenz.get())
linksScaleObereGrenzfrequenz.set(rechtsScaleObereGrenzfrequenz.get())
feedback("Einstellungen vom rechten Ohr auf beide Ohren übertragen")
@@ -106,13 +125,14 @@ def unten_button_speichern_press():
feedback("Fehlgeschlagener Speicherversuch! Erst Namen links eintragen.", "white", "red")
else:
try:
feedback("Speichere Sound als '.wav'-Datei. Das kann bis zu 30 Sekunden dauern. Bitte warten...")
unten_button_stop_press() # Wiedergabe beenden, durch den Rechenaufwand gibt es sonst Wiedergabeprobleme
tinnitus.vorname = untenEntryVorname.get()
tinnitus.nachname = untenEntryNachname.get()
tinnitus.kommentar = untenTextKommentar.get("1.0", END)
tinnitus.speichern()
feedback("Speichere Sound als '.wav'-Datei. Bitte warten...")
sound.wav_speichern()
feedback("Daten erfolgreich gespeichert. Siehe: 'MeinTinnitus.wav' ")
feedback("Daten erfolgreich gespeichert. Siehe: " + sound.wav_name, "white", "green")
except:
feedback("Fehlgeschlagener Speicherversuch! Bitte schließe Microsoft Excel.", "white", "red")
@@ -131,7 +151,88 @@ def unten_button_stop_press():
sound.stop()
def feedback(text, fontcolor = "black", backgroundcolor = "lightsteelblue"):
def unten_button_musikdatei_laden_press():
""" This function opends a window that lets you select .mp3 and .wav files. The user is supposed to select their
music files here"""
print("button musikdatei laden pressed")
untererFrame.musikdatei = filedialog.askopenfilename(initialdir="/",
title="Wähle die Musikdatei(.wav) deiner Wahl aus",
filetypes=(("wav Dateien", "*.wav"),))
# überprüfen, ob song stereo ist
try:
wav_obj = wave.open(untererFrame.musikdatei)
except:
feedback("Der ausgewählte Song ist nicht kompatibel", "white", "red")
return
if wav_obj.getnchannels() != 2:
feedback("Der ausgewählte Song ist mono. Bitte wähle einen Song in stereo", "white", "red")
return
samplerate, data = wavfile.read(untererFrame.musikdatei)
sound.music_samplerate = samplerate # die samplerate der ausgewählten Musikdatei an SoundGenerator.py übergeben
sound.music_data = data # das Numpy Array der ausgewählten Musikdatei an SoundGenerator.py übergeben
print(untererFrame.musikdatei)
untenTextMusikDatei.config(state=NORMAL) # activate text field (otherwise it is readonly)
untenTextMusikDatei.delete(1.0, END) # delete everything from text widget
untenTextMusikDatei.insert(INSERT, untererFrame.musikdatei) # insert selected file path to text widget
untenTextMusikDatei.config(state=DISABLED) # activate text field (otherwise it is readonly)
feedback("Musikdatei ausgewählt") # place text in feedback field, fontcololor, backgroundcolor
def unten_button_filtere_tinnitus_aus_musik():
print("button filtere tinnitus aus musik pressed")
print(untenTextMusikDatei.get('1.0', END))
if untenTextMusikDatei.get('1.0', END) == "Einen Song deiner Wahl hier auswählen\n":
feedback("Wähle zuerst eine Musikdatei aus", "white", "red")
else:
unten_button_stop_press() # Wiedergabe beenden, durch den Rechenaufwand gibt es sonst Wiedergabeprobleme
feedback("Starte Filtervorgang (dies kann etwas dauern)...", "blue")
try:
# Filtern in extra thread, damit sich die GUI nicht aufhängt: (daemon beendet den Thread, wenn das Hauptprogramm beendet wird)
filter_thread = threading.Thread(target=sound.musik_filtern, daemon=True)
filter_thread.start()
safe_percentage = 0
schritt = 0
while filter_thread.is_alive():
schritt_alt = schritt
schritt = sound.filterfortschritt[0]
if schritt > schritt_alt: # Prozentanzeige auf 0 zurücksetzen, wenn ein neuer Schritt beginnt
safe_percentage = 0
if schritt == 3 or schritt == 4: # Nur bei dem 3. und 4. Schritt wird der Fortschritt in Prozent angezeigt
fb = "Schritt " + str(schritt) + " von 4 (" + str(safe_percentage) + "%)"
if sound.filterfortschritt[1] > safe_percentage:
feedback(fb)
safe_percentage += 10
elif schritt < 3 and schritt > schritt_alt:
fb = "Schritt " + str(schritt) + " von 4"
feedback(fb)
root.update() # damit die GUI nicht eingefroren erscheint
if sound.filterfortschritt[0] == 5: #ist 5, wenn erfolgreich gefiltert wurde
print("-- filtern beendet --")
feedback("Filtervorgang erfolgreich abgeschlossen. \n"
"Audiodatei unter dem Namen gefilterteMusik.wav erstellt", "white", "green")
else:
print("Fehler bei Filterfunktion. Siehe Compiler-Meldungen")
feedback("Fehlgeschlagener Filterversuch. Kontaktiere Entwickler und schreibe eventuell auf was genaud du gemacht hast", "red", "white")
except:
feedback("Fehlgeschlagener Filterversuch. Drücke zuerst den Speichern Knopf"
"Stelle sicher, dass die Lautstärke mindestens einer Seite über 0"
"gestellt ist. Sonst gehen wir davon aus, dass auf diesem Ohr kein Tinnitus vorliegt.", "red",
"white")
"""--------------Feedback Funktion------------------"""
def feedback(text, fontcolor="black", backgroundcolor="lightsteelblue"):
""" This is a helper function. You can give it a string text and it will display it in the feedback frame (bottom
right of the GUI) in the text widget. The parameter color is also a string and defines the font color. Same with
background. Honestly this function is way too complicated, but Tkinter has no nicer/easier builtin way of doing the
@@ -152,13 +253,13 @@ def feedback(text, fontcolor = "black", backgroundcolor = "lightsteelblue"):
untenFeedbackText.config(state=DISABLED) # set the text field back to readonly
root.update() #Damit der Text sofort ausgegeben wird, auch wenn das Programm erst noch was anderes macht
""" Initialisierungen """
"""------------------ Initialisierungen --------------------------"""
tinnitus = Tinnitus() # siehe SoundGenerator.py
sound = Sound(tinnitus) # siehe SoundGenerator.py
feedback.lineCounter = 0 # Funktionsvariable der Feedback funktion. Ein Funktionsaufruf Counter
"""------------------------------------------ AUFBAU DES ROOT WINDOWS -----------------------------------------------"""
"""---------------------------------- AUFBAU DES ROOT WINDOWS -----------------------------------------"""
root = Tk() # build the main window
root.title("Tinnitus Analyse")
root.minsize(width=800, height=500) # set windowsize (width an height in pixels)
@@ -194,25 +295,27 @@ linksSeparator = Separator(linkerFrame, orient="horizontal")
linksSeparator.grid(column=0, row=2, sticky=(W + E), columnspan=3)
# ----------- RAUSCHEN --------------------
# Lautstärke
linksLabelRauschenLautstärke = Label(linkerFrame, text="Rauschen Lautstärke %", anchor="w")
linksLabelRauschenLautstärke.grid(column=0, row=3, sticky=W)
linksScaleRauschenLautstärke = Scale(linkerFrame, from_=0, to=100, orient=HORIZONTAL, length=600,
command=links_scale_rauschen_lautstärke_change)
linksScaleRauschenLautstärke.grid(column=1, row=3, sticky=(W+E))
linksLabelRauschenMittelFrequenz = Label(linkerFrame, text="Rauschen Mittelfrequenz [kHz]", anchor="w")
linksLabelRauschenMittelFrequenz .grid(column=0, row=4, sticky=(W+E))
linksScaleRauschenMittelFrequenz = Scale(linkerFrame, from_=0, to=20, orient=HORIZONTAL, length=600, resolution=-1.0,
command=links_scale_rauschen_mittelfrequenz_change)
linksScaleRauschenMittelFrequenz.grid(column=1, row=4, sticky=(W+E))
linksLabelRauschenBandbreite= Label(linkerFrame, text="Rauschen Bandbreite [kHz]", anchor="w")
linksLabelRauschenBandbreite.grid(column=0, row=5, sticky=W)
linksScaleRauschenBandbreite = Scale(linkerFrame, from_=0, to=20, orient=HORIZONTAL, length=600, resolution=-1.0,
command=links_scale_rauschen_bandbreite_change)
linksScaleRauschenBandbreite.grid(column=1, row=5, sticky=(W+E))
# Obere Grenzfrequenz
linksLabelObereGrenzfrequenz = Label(linkerFrame, text="Obere Grenzfrequenz [kHz]", anchor="w")
linksLabelObereGrenzfrequenz.grid(column=0, row=4, sticky=W)
linksScaleObereGrenzfrequenz = Scale(linkerFrame, from_=0.02, to=20, orient=HORIZONTAL, length=600, resolution=-1.0,
command=links_scale_obere_grenzfrequenz_change)
linksScaleObereGrenzfrequenz.grid(column=1, row=4, sticky=(W+E))
linksScaleObereGrenzfrequenz.set(20.00)
# Untere Grenzfrequenz
linksLabelUntereGrenzfrequenz = Label(linkerFrame, text="Untere Grenzfrequenz [kHz]", anchor="w")
linksLabelUntereGrenzfrequenz.grid(column=0, row=5, sticky=(W+E))
linksScaleUntereGrenzfrequenz = Scale(linkerFrame, from_=0.01, to=20, orient=HORIZONTAL, length=600, resolution=-1.0,
command=links_scale_untere_grenzfrequenz_change)
linksScaleUntereGrenzfrequenz.grid(column=1, row=5, sticky=(W+E))
linksScaleUntereGrenzfrequenz.set(0.01)
"""----------------------------------------------RECHTER FRAME-------------------------------------------------------"""
rechterFrame = LabelFrame(root, text="Rechtes Ohr", font="bold")
rechterFrame.grid(column=1, row=0, sticky=(N+E+W+S))
@@ -249,18 +352,20 @@ rechtsScaleRauschenLautstärke = Scale(rechterFrame, from_=0, to=100, orient=HO
command=rechts_scale_rauschen_lautstärke_change)
rechtsScaleRauschenLautstärke.grid(column=1, row=3, sticky=(W+E))
rechtsLabelRauschenMittelFrequenz = Label(rechterFrame, text="Rauschen Mittelfrequenz [kHz]", anchor="w")
rechtsLabelRauschenMittelFrequenz .grid(column=0, row=4)
rechtsScaleRauschenMittelFrequenz = Scale(rechterFrame, from_=0, to=20, orient=HORIZONTAL, length=600, resolution=-1.0,
command=rechts_scale_rauschen_mittelfrequenz_change)
rechtsScaleRauschenMittelFrequenz.grid(column=1, row=4)
rechtsLabelRauschenBandbreite = Label(rechterFrame, text="Rauschen Bandbreite [kHz]", anchor="w")
rechtsLabelRauschenBandbreite.grid(column=0, row=5, sticky=W)
rechtsScaleRauschenBandbreite = Scale(rechterFrame, from_=0, to=20, orient=HORIZONTAL, length=600, resolution=-1.0,
command=rechts_scale_rauschen_bandbreite_change)
rechtsScaleRauschenBandbreite.grid(column=1, row=5, sticky=(W+E))
# Obere Grenzfrequenz
rechtsLabelObereGrenzfrequenz = Label(rechterFrame, text="Obere Grenzfrequenz [kHz]", anchor="w")
rechtsLabelObereGrenzfrequenz.grid(column=0, row=4, sticky=W)
rechtsScaleObereGrenzfrequenz = Scale(rechterFrame, from_=0.02, to=20, orient=HORIZONTAL, length=600, resolution=-1.0,
command=rechts_scale_obere_grenzfrequenz_change)
rechtsScaleObereGrenzfrequenz.grid(column=1, row=4, sticky=(W+E))
rechtsScaleObereGrenzfrequenz.set(20.00)
# Untere Grenzfrequenz
rechtsLabelUntereGrenzfrequenz = Label(rechterFrame, text="Untere Grenzfrequenz [kHz]", anchor="w")
rechtsLabelUntereGrenzfrequenz.grid(column=0, row=5, sticky=(W+E))
rechtsScaleUntereGrenzfrequenz = Scale(rechterFrame, from_=0.01, to=20, orient=HORIZONTAL, length=600, resolution=-1.0,
command=rechts_scale_untere_grenzfrequenz_change)
rechtsScaleUntereGrenzfrequenz.grid(column=1, row=5, sticky=(W+E))
rechtsScaleUntereGrenzfrequenz.set(0.01)
"""------------------------------------------------ UNTERER LINKER FRAME---------------------------------------------"""
untererFrame = LabelFrame(root, text="Generelles", border=10)
@@ -280,17 +385,17 @@ untenLabelOhrenSynchro2 = Label(untererFrame, text=" für beide übernehmen")
untenLabelOhrenSynchro2.grid(column=2, row=0, sticky=(N + W + E + S))
untenButtonOhrenSynchro = Button(untererFrame, text="Bestätigen",
command=unten_button_ohren_synchro)
untenButtonOhrenSynchro.grid(column=3, row=0, sticky=(N + W + E + S))
untenButtonOhrenSynchro.grid(column=3, row=0, sticky=(N + S))
#----------- PLAY BUTTON
untenButtonPlay = Button(untererFrame, text="PLAY", font="bold", relief="raised", bg="green", fg="white",
command=unten_button_play_press)
untenButtonPlay.grid(column=8, row=0, sticky=(N + W + E + S))
untenButtonPlay.grid(column=7, row=0, sticky=(N + W + E + S))
#------------STOP BUTTON-------------
untenButtonStop = Button(untererFrame, text="STOP", font="bold", relief="raised", bg="red", fg="white",
command=unten_button_stop_press)
untenButtonStop.grid(column=9, row=0, sticky=(N + W + E + S))
untenButtonStop.grid(column=8, row=0, sticky=(N + W + E + S))
# ----------- ABTRENNSTRICHE ----------------
untenSeparator = Separator(untererFrame, orient="horizontal")
@@ -312,13 +417,15 @@ untenEntryVorname.grid(column=1, row=3, sticky=W)
# ------------ KOMMENTAR ----------------
untenLabelKommentar = Label(untererFrame, text="weitere Kommentare:")
untenLabelKommentar.grid(column=0, row=4, sticky=W)
untenTextKommentar = Text(untererFrame, height=10, width=50) # create a field where u can enter text
untenTextKommentar.grid(column=1, row=4, columnspan=3, rowspan=3)
untenLabelKommentar = Label(untererFrame, text="(optional)")
untenLabelKommentar.grid(column=0, row=5, sticky=N)
untenTextKommentar = Text(untererFrame, height=10, width=60) # create a field where u can enter text
untenTextKommentar.grid(column=1, row=4, sticky=W, columnspan=3, rowspan=3)
# ----------- SPEICHERN --------------------
untenButtonSpeichern = Button(untererFrame, text="Speichern", font="bold",
command=unten_button_speichern_press)
untenButtonSpeichern.grid(column=4, row=6, sticky=S)
untenButtonSpeichern.grid(column=4, row=6, sticky=(S+E+W))
"""--------------------------------------UNTERER RECHTER FRAME-------------------------------------------------------"""
@@ -334,5 +441,22 @@ untenFeedbackText.place(relx=.5, rely=.5, anchor="center") # the only time I us
# lets me place the widget in the middle of the frame
# -------------- LOAD MUSIC FILE--------------
untenTextMusikDatei = Text(untererFrame, height=1, width=50)
untenTextMusikDatei.grid(column=1, row=7, sticky=(N+S+E+W), columnspan=4)
untenTextMusikDatei.insert(INSERT, "Einen Song deiner Wahl hier auswählen") # insert selected file path to text widget
untenTextMusikDatei.config(state=DISABLED, font=("Arial", 8)) # activate text field (otherwise it is readonly)
untenButtonMusikDateiLaden = Button(untererFrame, text="Musikdatei auswählen",
command=unten_button_musikdatei_laden_press)
untenButtonMusikDateiLaden.grid(column=4, row=7, sticky=(N+S+E+W))
#------------BUTTON FILTERE TINNITUS AUS MUSIK-----------------
untenButtonFiltereTinnitusAusMusik = Button(untererFrame, text="Filtere Tinnitus-Frequenzen aus Musik",
command=unten_button_filtere_tinnitus_aus_musik, font="bold",
relief="raised", bg="blue", fg="white",)
untenButtonFiltereTinnitusAusMusik.grid(column=3, row=9, sticky=(N+S+E+W), columnspan=3)
root.mainloop()
+33
View File
@@ -0,0 +1,33 @@
# -*- mode: python ; coding: utf-8 -*-
block_cipher = None
a = Analysis(['TinnitusAnalyse_GUI.py'],
pathex=['C:\\Users\\Julian\\Desktop\\Tinnitus GITHUB\\Tinnitus_Musik_Therapie_Projektarbeit_Repo\\TinnitusAnalyse'],
binaries=[],
datas=[],
hiddenimports=[],
hookspath=[],
runtime_hooks=[],
excludes=[],
win_no_prefer_redirects=False,
win_private_assemblies=False,
cipher=block_cipher,
noarchive=False)
pyz = PYZ(a.pure, a.zipped_data,
cipher=block_cipher)
exe = EXE(pyz,
a.scripts,
a.binaries,
a.zipfiles,
a.datas,
[],
name='TinnitusAnalyse_GUI',
debug=False,
bootloader_ignore_signals=False,
strip=False,
upx=True,
upx_exclude=[],
runtime_tmpdir=None,
console=True )
+12 -8
View File
@@ -1,10 +1,14 @@
Vorname;asdad
Nachname;sada
linke Frequenz;0.0
linke Lautstärke;0.0
linkes Rauschen;0.0
rechte Frequenz;0.0
rechte Lautstärke;0.0
rechtes Rauschen;0.0
Vorname;asd
Nachname;asd
linke Frequenz;5040.0
linke Lautstärke;0.08
linkes Rauschen Lautstärke;0.0
linkes Rauschen untere Grenzfrequenz;10.0
linkes Rauschen obere Grenzfrequenz;20000.0
rechte Frequenz;5040.0
rechte Lautstärke;0.11
rechtes Rauschen Lautstärke;0.0
rechtes Rauschen untere Grenzfrequenz;10.0
rechtes Rauschen obere Grenzfrequenz;20000.0
Kommentar;
1 Vorname asdad asd
2 Nachname sada asd
3 linke Frequenz 0.0 5040.0
4 linke Lautstärke 0.0 0.08
5 linkes Rauschen linkes Rauschen Lautstärke 0.0 0.0
6 rechte Frequenz linkes Rauschen untere Grenzfrequenz 0.0 10.0
7 rechte Lautstärke linkes Rauschen obere Grenzfrequenz 0.0 20000.0
8 rechtes Rauschen rechte Frequenz 0.0 5040.0
9 rechte Lautstärke 0.11
10 rechtes Rauschen Lautstärke 0.0
11 rechtes Rauschen untere Grenzfrequenz 10.0
12 rechtes Rauschen obere Grenzfrequenz 20000.0
13 Kommentar
14
File diff suppressed because it is too large. Load diff
File diff suppressed because it is too large. Load diff
Binary file not shown.
File diff suppressed because it is too large. Load diff
Binary file not shown.
File diff suppressed because it is too large. Load diff
@@ -0,0 +1,19 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly manifestVersion="1.0" xmlns="urn:schemas-microsoft-com:asm.v1">
<assemblyIdentity name="TinnitusAnalyse_GUI" processorArchitecture="amd64" type="win32" version="1.0.0.0"/>
<dependency>
<dependentAssembly>
<assemblyIdentity language="*" name="Microsoft.Windows.Common-Controls" processorArchitecture="*" publicKeyToken="6595b64144ccf1df" type="win32" version="6.0.0.0"/>
<compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1"/>
</dependentAssembly>
</dependency>
<compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1">
<application>
<supportedOS Id="{e2011457-1546-43c5-a5fe-008deee3d3f0}"/>
<supportedOS Id="{1f676c76-80e1-4239-95bb-83d0f6d0da78}"/>
<supportedOS Id="{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}"/>
<supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}"/>
<supportedOS Id="{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}"/>
</application>
</compatibility>
</assembly>
File diff suppressed because it is too large. Load diff
@@ -0,0 +1,271 @@
('c:\\users\\julian\\appdata\\local\\programs\\python\\python35\\tcl\\tk8.6',
'tk',
['demos', '*.lib', 'tkConfig.sh'],
'DATA',
[('tk\\bgerror.tcl',
'c:\\users\\julian\\appdata\\local\\programs\\python\\python35\\tcl\\tk8.6\\bgerror.tcl',
'DATA'),
('tk\\button.tcl',
'c:\\users\\julian\\appdata\\local\\programs\\python\\python35\\tcl\\tk8.6\\button.tcl',
'DATA'),
('tk\\choosedir.tcl',
'c:\\users\\julian\\appdata\\local\\programs\\python\\python35\\tcl\\tk8.6\\choosedir.tcl',
'DATA'),
('tk\\clrpick.tcl',
'c:\\users\\julian\\appdata\\local\\programs\\python\\python35\\tcl\\tk8.6\\clrpick.tcl',
'DATA'),
('tk\\comdlg.tcl',
'c:\\users\\julian\\appdata\\local\\programs\\python\\python35\\tcl\\tk8.6\\comdlg.tcl',
'DATA'),
('tk\\console.tcl',
'c:\\users\\julian\\appdata\\local\\programs\\python\\python35\\tcl\\tk8.6\\console.tcl',
'DATA'),
('tk\\dialog.tcl',
'c:\\users\\julian\\appdata\\local\\programs\\python\\python35\\tcl\\tk8.6\\dialog.tcl',
'DATA'),
('tk\\entry.tcl',
'c:\\users\\julian\\appdata\\local\\programs\\python\\python35\\tcl\\tk8.6\\entry.tcl',
'DATA'),
('tk\\focus.tcl',
'c:\\users\\julian\\appdata\\local\\programs\\python\\python35\\tcl\\tk8.6\\focus.tcl',
'DATA'),
('tk\\fontchooser.tcl',
'c:\\users\\julian\\appdata\\local\\programs\\python\\python35\\tcl\\tk8.6\\fontchooser.tcl',
'DATA'),
('tk\\iconlist.tcl',
'c:\\users\\julian\\appdata\\local\\programs\\python\\python35\\tcl\\tk8.6\\iconlist.tcl',
'DATA'),
('tk\\icons.tcl',
'c:\\users\\julian\\appdata\\local\\programs\\python\\python35\\tcl\\tk8.6\\icons.tcl',
'DATA'),
('tk\\license.terms',
'c:\\users\\julian\\appdata\\local\\programs\\python\\python35\\tcl\\tk8.6\\license.terms',
'DATA'),
('tk\\listbox.tcl',
'c:\\users\\julian\\appdata\\local\\programs\\python\\python35\\tcl\\tk8.6\\listbox.tcl',
'DATA'),
('tk\\megawidget.tcl',
'c:\\users\\julian\\appdata\\local\\programs\\python\\python35\\tcl\\tk8.6\\megawidget.tcl',
'DATA'),
('tk\\menu.tcl',
'c:\\users\\julian\\appdata\\local\\programs\\python\\python35\\tcl\\tk8.6\\menu.tcl',
'DATA'),
('tk\\mkpsenc.tcl',
'c:\\users\\julian\\appdata\\local\\programs\\python\\python35\\tcl\\tk8.6\\mkpsenc.tcl',
'DATA'),
('tk\\msgbox.tcl',
'c:\\users\\julian\\appdata\\local\\programs\\python\\python35\\tcl\\tk8.6\\msgbox.tcl',
'DATA'),
('tk\\obsolete.tcl',
'c:\\users\\julian\\appdata\\local\\programs\\python\\python35\\tcl\\tk8.6\\obsolete.tcl',
'DATA'),
('tk\\optMenu.tcl',
'c:\\users\\julian\\appdata\\local\\programs\\python\\python35\\tcl\\tk8.6\\optMenu.tcl',
'DATA'),
('tk\\palette.tcl',
'c:\\users\\julian\\appdata\\local\\programs\\python\\python35\\tcl\\tk8.6\\palette.tcl',
'DATA'),
('tk\\panedwindow.tcl',
'c:\\users\\julian\\appdata\\local\\programs\\python\\python35\\tcl\\tk8.6\\panedwindow.tcl',
'DATA'),
('tk\\pkgIndex.tcl',
'c:\\users\\julian\\appdata\\local\\programs\\python\\python35\\tcl\\tk8.6\\pkgIndex.tcl',
'DATA'),
('tk\\safetk.tcl',
'c:\\users\\julian\\appdata\\local\\programs\\python\\python35\\tcl\\tk8.6\\safetk.tcl',
'DATA'),
('tk\\scale.tcl',
'c:\\users\\julian\\appdata\\local\\programs\\python\\python35\\tcl\\tk8.6\\scale.tcl',
'DATA'),
('tk\\scrlbar.tcl',
'c:\\users\\julian\\appdata\\local\\programs\\python\\python35\\tcl\\tk8.6\\scrlbar.tcl',
'DATA'),
('tk\\spinbox.tcl',
'c:\\users\\julian\\appdata\\local\\programs\\python\\python35\\tcl\\tk8.6\\spinbox.tcl',
'DATA'),
('tk\\tclIndex',
'c:\\users\\julian\\appdata\\local\\programs\\python\\python35\\tcl\\tk8.6\\tclIndex',
'DATA'),
('tk\\tearoff.tcl',
'c:\\users\\julian\\appdata\\local\\programs\\python\\python35\\tcl\\tk8.6\\tearoff.tcl',
'DATA'),
('tk\\text.tcl',
'c:\\users\\julian\\appdata\\local\\programs\\python\\python35\\tcl\\tk8.6\\text.tcl',
'DATA'),
('tk\\tk.tcl',
'c:\\users\\julian\\appdata\\local\\programs\\python\\python35\\tcl\\tk8.6\\tk.tcl',
'DATA'),
('tk\\tkfbox.tcl',
'c:\\users\\julian\\appdata\\local\\programs\\python\\python35\\tcl\\tk8.6\\tkfbox.tcl',
'DATA'),
('tk\\unsupported.tcl',
'c:\\users\\julian\\appdata\\local\\programs\\python\\python35\\tcl\\tk8.6\\unsupported.tcl',
'DATA'),
('tk\\xmfbox.tcl',
'c:\\users\\julian\\appdata\\local\\programs\\python\\python35\\tcl\\tk8.6\\xmfbox.tcl',
'DATA'),
('tk\\ttk\\altTheme.tcl',
'c:\\users\\julian\\appdata\\local\\programs\\python\\python35\\tcl\\tk8.6\\ttk\\altTheme.tcl',
'DATA'),
('tk\\ttk\\aquaTheme.tcl',
'c:\\users\\julian\\appdata\\local\\programs\\python\\python35\\tcl\\tk8.6\\ttk\\aquaTheme.tcl',
'DATA'),
('tk\\ttk\\button.tcl',
'c:\\users\\julian\\appdata\\local\\programs\\python\\python35\\tcl\\tk8.6\\ttk\\button.tcl',
'DATA'),
('tk\\ttk\\clamTheme.tcl',
'c:\\users\\julian\\appdata\\local\\programs\\python\\python35\\tcl\\tk8.6\\ttk\\clamTheme.tcl',
'DATA'),
('tk\\ttk\\classicTheme.tcl',
'c:\\users\\julian\\appdata\\local\\programs\\python\\python35\\tcl\\tk8.6\\ttk\\classicTheme.tcl',
'DATA'),
('tk\\ttk\\combobox.tcl',
'c:\\users\\julian\\appdata\\local\\programs\\python\\python35\\tcl\\tk8.6\\ttk\\combobox.tcl',
'DATA'),
('tk\\ttk\\cursors.tcl',
'c:\\users\\julian\\appdata\\local\\programs\\python\\python35\\tcl\\tk8.6\\ttk\\cursors.tcl',
'DATA'),
('tk\\ttk\\defaults.tcl',
'c:\\users\\julian\\appdata\\local\\programs\\python\\python35\\tcl\\tk8.6\\ttk\\defaults.tcl',
'DATA'),
('tk\\ttk\\entry.tcl',
'c:\\users\\julian\\appdata\\local\\programs\\python\\python35\\tcl\\tk8.6\\ttk\\entry.tcl',
'DATA'),
('tk\\ttk\\fonts.tcl',
'c:\\users\\julian\\appdata\\local\\programs\\python\\python35\\tcl\\tk8.6\\ttk\\fonts.tcl',
'DATA'),
('tk\\ttk\\menubutton.tcl',
'c:\\users\\julian\\appdata\\local\\programs\\python\\python35\\tcl\\tk8.6\\ttk\\menubutton.tcl',
'DATA'),
('tk\\ttk\\notebook.tcl',
'c:\\users\\julian\\appdata\\local\\programs\\python\\python35\\tcl\\tk8.6\\ttk\\notebook.tcl',
'DATA'),
('tk\\ttk\\panedwindow.tcl',
'c:\\users\\julian\\appdata\\local\\programs\\python\\python35\\tcl\\tk8.6\\ttk\\panedwindow.tcl',
'DATA'),
('tk\\ttk\\progress.tcl',
'c:\\users\\julian\\appdata\\local\\programs\\python\\python35\\tcl\\tk8.6\\ttk\\progress.tcl',
'DATA'),
('tk\\ttk\\scale.tcl',
'c:\\users\\julian\\appdata\\local\\programs\\python\\python35\\tcl\\tk8.6\\ttk\\scale.tcl',
'DATA'),
('tk\\ttk\\scrollbar.tcl',
'c:\\users\\julian\\appdata\\local\\programs\\python\\python35\\tcl\\tk8.6\\ttk\\scrollbar.tcl',
'DATA'),
('tk\\ttk\\sizegrip.tcl',
'c:\\users\\julian\\appdata\\local\\programs\\python\\python35\\tcl\\tk8.6\\ttk\\sizegrip.tcl',
'DATA'),
('tk\\ttk\\spinbox.tcl',
'c:\\users\\julian\\appdata\\local\\programs\\python\\python35\\tcl\\tk8.6\\ttk\\spinbox.tcl',
'DATA'),
('tk\\ttk\\treeview.tcl',
'c:\\users\\julian\\appdata\\local\\programs\\python\\python35\\tcl\\tk8.6\\ttk\\treeview.tcl',
'DATA'),
('tk\\ttk\\ttk.tcl',
'c:\\users\\julian\\appdata\\local\\programs\\python\\python35\\tcl\\tk8.6\\ttk\\ttk.tcl',
'DATA'),
('tk\\ttk\\utils.tcl',
'c:\\users\\julian\\appdata\\local\\programs\\python\\python35\\tcl\\tk8.6\\ttk\\utils.tcl',
'DATA'),
('tk\\ttk\\vistaTheme.tcl',
'c:\\users\\julian\\appdata\\local\\programs\\python\\python35\\tcl\\tk8.6\\ttk\\vistaTheme.tcl',
'DATA'),
('tk\\ttk\\winTheme.tcl',
'c:\\users\\julian\\appdata\\local\\programs\\python\\python35\\tcl\\tk8.6\\ttk\\winTheme.tcl',
'DATA'),
('tk\\ttk\\xpTheme.tcl',
'c:\\users\\julian\\appdata\\local\\programs\\python\\python35\\tcl\\tk8.6\\ttk\\xpTheme.tcl',
'DATA'),
('tk\\msgs\\cs.msg',
'c:\\users\\julian\\appdata\\local\\programs\\python\\python35\\tcl\\tk8.6\\msgs\\cs.msg',
'DATA'),
('tk\\msgs\\da.msg',
'c:\\users\\julian\\appdata\\local\\programs\\python\\python35\\tcl\\tk8.6\\msgs\\da.msg',
'DATA'),
('tk\\msgs\\de.msg',
'c:\\users\\julian\\appdata\\local\\programs\\python\\python35\\tcl\\tk8.6\\msgs\\de.msg',
'DATA'),
('tk\\msgs\\el.msg',
'c:\\users\\julian\\appdata\\local\\programs\\python\\python35\\tcl\\tk8.6\\msgs\\el.msg',
'DATA'),
('tk\\msgs\\en.msg',
'c:\\users\\julian\\appdata\\local\\programs\\python\\python35\\tcl\\tk8.6\\msgs\\en.msg',
'DATA'),
('tk\\msgs\\en_gb.msg',
'c:\\users\\julian\\appdata\\local\\programs\\python\\python35\\tcl\\tk8.6\\msgs\\en_gb.msg',
'DATA'),
('tk\\msgs\\eo.msg',
'c:\\users\\julian\\appdata\\local\\programs\\python\\python35\\tcl\\tk8.6\\msgs\\eo.msg',
'DATA'),
('tk\\msgs\\es.msg',
'c:\\users\\julian\\appdata\\local\\programs\\python\\python35\\tcl\\tk8.6\\msgs\\es.msg',
'DATA'),
('tk\\msgs\\fr.msg',
'c:\\users\\julian\\appdata\\local\\programs\\python\\python35\\tcl\\tk8.6\\msgs\\fr.msg',
'DATA'),
('tk\\msgs\\hu.msg',
'c:\\users\\julian\\appdata\\local\\programs\\python\\python35\\tcl\\tk8.6\\msgs\\hu.msg',
'DATA'),
('tk\\msgs\\it.msg',
'c:\\users\\julian\\appdata\\local\\programs\\python\\python35\\tcl\\tk8.6\\msgs\\it.msg',
'DATA'),
('tk\\msgs\\nl.msg',
'c:\\users\\julian\\appdata\\local\\programs\\python\\python35\\tcl\\tk8.6\\msgs\\nl.msg',
'DATA'),
('tk\\msgs\\pl.msg',
'c:\\users\\julian\\appdata\\local\\programs\\python\\python35\\tcl\\tk8.6\\msgs\\pl.msg',
'DATA'),
('tk\\msgs\\pt.msg',
'c:\\users\\julian\\appdata\\local\\programs\\python\\python35\\tcl\\tk8.6\\msgs\\pt.msg',
'DATA'),
('tk\\msgs\\ru.msg',
'c:\\users\\julian\\appdata\\local\\programs\\python\\python35\\tcl\\tk8.6\\msgs\\ru.msg',
'DATA'),
('tk\\msgs\\sv.msg',
'c:\\users\\julian\\appdata\\local\\programs\\python\\python35\\tcl\\tk8.6\\msgs\\sv.msg',
'DATA'),
('tk\\images\\lamp.png',
'c:\\users\\julian\\appdata\\local\\programs\\python\\python35\\tcl\\tk8.6\\images\\lamp.png',
'DATA'),
('tk\\images\\lamp.svg',
'c:\\users\\julian\\appdata\\local\\programs\\python\\python35\\tcl\\tk8.6\\images\\lamp.svg',
'DATA'),
('tk\\images\\logo.eps',
'c:\\users\\julian\\appdata\\local\\programs\\python\\python35\\tcl\\tk8.6\\images\\logo.eps',
'DATA'),
('tk\\images\\logo100.gif',
'c:\\users\\julian\\appdata\\local\\programs\\python\\python35\\tcl\\tk8.6\\images\\logo100.gif',
'DATA'),
('tk\\images\\logo64.gif',
'c:\\users\\julian\\appdata\\local\\programs\\python\\python35\\tcl\\tk8.6\\images\\logo64.gif',
'DATA'),
('tk\\images\\logoLarge.gif',
'c:\\users\\julian\\appdata\\local\\programs\\python\\python35\\tcl\\tk8.6\\images\\logoLarge.gif',
'DATA'),
('tk\\images\\logoMed.gif',
'c:\\users\\julian\\appdata\\local\\programs\\python\\python35\\tcl\\tk8.6\\images\\logoMed.gif',
'DATA'),
('tk\\images\\pwrdLogo.eps',
'c:\\users\\julian\\appdata\\local\\programs\\python\\python35\\tcl\\tk8.6\\images\\pwrdLogo.eps',
'DATA'),
('tk\\images\\pwrdLogo100.gif',
'c:\\users\\julian\\appdata\\local\\programs\\python\\python35\\tcl\\tk8.6\\images\\pwrdLogo100.gif',
'DATA'),
('tk\\images\\pwrdLogo150.gif',
'c:\\users\\julian\\appdata\\local\\programs\\python\\python35\\tcl\\tk8.6\\images\\pwrdLogo150.gif',
'DATA'),
('tk\\images\\pwrdLogo175.gif',
'c:\\users\\julian\\appdata\\local\\programs\\python\\python35\\tcl\\tk8.6\\images\\pwrdLogo175.gif',
'DATA'),
('tk\\images\\pwrdLogo200.gif',
'c:\\users\\julian\\appdata\\local\\programs\\python\\python35\\tcl\\tk8.6\\images\\pwrdLogo200.gif',
'DATA'),
('tk\\images\\pwrdLogo75.gif',
'c:\\users\\julian\\appdata\\local\\programs\\python\\python35\\tcl\\tk8.6\\images\\pwrdLogo75.gif',
'DATA'),
('tk\\images\\README',
'c:\\users\\julian\\appdata\\local\\programs\\python\\python35\\tcl\\tk8.6\\images\\README',
'DATA'),
('tk\\images\\tai-ku.gif',
'c:\\users\\julian\\appdata\\local\\programs\\python\\python35\\tcl\\tk8.6\\images\\tai-ku.gif',
'DATA')])
@@ -0,0 +1,198 @@
This file lists modules PyInstaller was not able to find. This does not
necessarily mean this module is required for running you program. Python and
Python 3rd-party packages include a lot of conditional or optional modules. For
example the module 'ntpath' only exists on Windows, whereas the module
'posixpath' only exists on Posix systems.
Types if import:
* top-level: imported at the top-level - look at these first
* conditional: imported within an if-statement
* delayed: imported from within a function
* optional: imported within a try-except-statement
IMPORTANT: Do NOT post this list to the issue-tracker. Use it as a basis for
yourself tracking down the missing module. Thanks!
missing module named _dummy_threading - imported by dummy_threading (optional)
missing module named _posixsubprocess - imported by subprocess (conditional), multiprocessing.util (delayed)
missing module named org - imported by copy (optional)
missing module named ce - imported by os (conditional, optional)
missing module named pwd - imported by posixpath (delayed, conditional), shutil (optional), tarfile (optional), http.server (delayed, optional), webbrowser (delayed), pathlib (delayed, conditional, optional), distutils.util (delayed, conditional), distutils.archive_util (optional), netrc (delayed, conditional), getpass (delayed)
missing module named posix - imported by os (conditional, optional)
missing module named resource - imported by posix (top-level)
missing module named _frozen_importlib_external - imported by importlib._bootstrap (delayed), importlib (optional), importlib.abc (optional)
excluded module named _frozen_importlib - imported by importlib (optional), importlib.abc (optional), PyInstaller.loader.pyimod02_archive (delayed, conditional)
missing module named grp - imported by shutil (optional), tarfile (optional), pathlib (delayed), distutils.archive_util (optional)
missing module named 'multiprocessing.forking' - imported by c:\users\julian\appdata\local\programs\python\python35\lib\site-packages\PyInstaller\loader\rthooks\pyi_rth_multiprocessing.py (optional)
missing module named multiprocessing.get_context - imported by multiprocessing (top-level), multiprocessing.pool (top-level), multiprocessing.managers (top-level), multiprocessing.sharedctypes (top-level)
missing module named multiprocessing.TimeoutError - imported by multiprocessing (top-level), multiprocessing.pool (top-level)
missing module named _scproxy - imported by urllib.request (conditional)
missing module named termios - imported by tty (top-level), getpass (optional)
missing module named urllib.splittag - imported by urllib (optional), setuptools.py26compat (optional)
missing module named urllib.pathname2url - imported by urllib (conditional), PyInstaller.lib.modulegraph._compat (conditional)
missing module named 'org.python' - imported by pickle (optional), xml.sax (delayed, conditional), setuptools.sandbox (conditional)
missing module named 'java.lang' - imported by platform (delayed, optional), xml.sax._exceptions (conditional)
missing module named multiprocessing.BufferTooShort - imported by multiprocessing (top-level), multiprocessing.connection (top-level)
missing module named multiprocessing.AuthenticationError - imported by multiprocessing (top-level), multiprocessing.connection (top-level)
missing module named vms_lib - imported by platform (delayed, conditional, optional)
missing module named java - imported by platform (delayed)
missing module named _winreg - imported by platform (delayed, optional), numpy.distutils.cpuinfo (delayed, conditional, optional), pkg_resources._vendor.appdirs (delayed)
missing module named readline - imported by cmd (delayed, conditional, optional), code (delayed, conditional, optional), pdb (delayed, optional)
missing module named multiprocessing.set_start_method - imported by multiprocessing (top-level), multiprocessing.spawn (top-level)
missing module named multiprocessing.get_start_method - imported by multiprocessing (top-level), multiprocessing.spawn (top-level)
missing module named multiprocessing.Pool - imported by multiprocessing (top-level), scipy._lib._util (top-level)
missing module named multiprocessing.SimpleQueue - imported by multiprocessing (top-level), concurrent.futures.process (top-level)
missing module named pyimod03_importers - imported by PyInstaller.loader.pyimod02_archive (delayed, conditional), c:\users\julian\appdata\local\programs\python\python35\lib\site-packages\PyInstaller\loader\rthooks\pyi_rth_pkgres.py (top-level)
missing module named netbios - imported by uuid (delayed)
missing module named win32wnet - imported by uuid (delayed)
missing module named __builtin__ - imported by numpy.core.numerictypes (conditional), numpy.core.numeric (conditional), numpy.lib.function_base (conditional), numpy.lib._iotools (conditional), numpy.ma.core (conditional), scipy._lib.six (conditional), numpy.distutils.misc_util (delayed, conditional), numpy (conditional), pyparsing (conditional), pkg_resources._vendor.pyparsing (conditional)
missing module named ordereddict - imported by pyparsing (optional), pkg_resources._vendor.pyparsing (optional)
missing module named 'pkg_resources.extern.pyparsing' - imported by pkg_resources._vendor.packaging.markers (top-level), pkg_resources._vendor.packaging.requirements (top-level)
missing module named 'com.sun' - imported by pkg_resources._vendor.appdirs (delayed, conditional, optional)
missing module named com - imported by pkg_resources._vendor.appdirs (delayed)
missing module named win32api - imported by distutils.msvccompiler (optional), pkg_resources._vendor.appdirs (delayed, conditional, optional)
missing module named win32com.shell - imported by pkg_resources._vendor.appdirs (delayed, conditional, optional)
missing module named StringIO - imported by PyInstaller.lib.modulegraph._compat (conditional), PyInstaller.lib.modulegraph.zipio (conditional), pkg_resources._vendor.six (conditional), numpy.testing._private.utils (conditional), numpy.lib.utils (delayed, conditional), numpy.lib.format (delayed, conditional), scipy._lib.six (conditional), six (conditional)
missing module named _sysconfigdata - imported by sysconfig (delayed)
missing module named pkg_resources.extern.packaging - imported by pkg_resources.extern (top-level), pkg_resources (top-level), setuptools.dist (top-level), setuptools.command.egg_info (top-level)
missing module named pkg_resources.extern.appdirs - imported by pkg_resources.extern (top-level), pkg_resources (top-level)
missing module named 'pkg_resources.extern.six.moves' - imported by pkg_resources (top-level), pkg_resources._vendor.packaging.requirements (top-level)
missing module named pkg_resources.extern.six - imported by pkg_resources.extern (top-level), pkg_resources (top-level)
missing module named numpy.power - imported by numpy (top-level), scipy.stats.kde (top-level)
missing module named numpy.hypot - imported by numpy (top-level), scipy.stats.morestats (top-level)
missing module named numpy.tanh - imported by numpy (top-level), scipy.stats._discrete_distns (top-level)
missing module named numpy.expm1 - imported by numpy (top-level), scipy.stats._discrete_distns (top-level)
missing module named numpy.log1p - imported by numpy (top-level), scipy.stats._discrete_distns (top-level)
missing module named numpy.NINF - imported by numpy (top-level), scipy.stats._distn_infrastructure (top-level)
missing module named numpy.double - imported by numpy (top-level), scipy.optimize.nnls (top-level)
missing module named numpy.greater - imported by numpy (top-level), scipy.optimize.minpack (top-level)
missing module named numpy.float64 - imported by numpy (top-level), scipy.optimize.lbfgsb (top-level)
missing module named numpy.sinh - imported by numpy (top-level), scipy.signal.filter_design (top-level), scipy.stats._discrete_distns (top-level)
missing module named numpy.arccosh - imported by numpy (top-level), scipy.signal.filter_design (top-level)
missing module named numpy.cosh - imported by numpy (top-level), scipy.signal.filter_design (top-level), scipy.stats._discrete_distns (top-level)
missing module named numpy.arcsinh - imported by numpy (top-level), scipy.signal.filter_design (top-level)
missing module named numpy.arctan - imported by numpy (top-level), scipy.signal.filter_design (top-level)
missing module named numpy.tan - imported by numpy (top-level), scipy.signal.bsplines (top-level), scipy.signal.filter_design (top-level)
missing module named numpy.logical_and - imported by numpy (top-level), scipy.signal.bsplines (top-level), scipy.stats._distn_infrastructure (top-level)
missing module named numpy.log - imported by numpy (top-level), scipy.signal.waveforms (top-level), scipy.stats._distn_infrastructure (top-level), scipy.stats._discrete_distns (top-level), scipy.stats.morestats (top-level)
missing module named numpy.sign - imported by numpy (top-level), scipy.linalg.matfuncs (top-level)
missing module named numpy.conjugate - imported by numpy (top-level), scipy.linalg.matfuncs (top-level), scipy.signal.filter_design (top-level)
missing module named numpy.logical_not - imported by numpy (top-level), scipy.linalg.matfuncs (top-level)
missing module named numpy.single - imported by numpy (top-level), scipy.linalg.decomp_schur (top-level), scipy.linalg.matfuncs (top-level)
missing module named numpy.arcsin - imported by numpy (top-level), scipy.linalg.decomp_svd (top-level)
missing module named numpy.arccos - imported by numpy (top-level), scipy.linalg.decomp_svd (top-level), scipy.special.orthogonal (top-level)
missing module named numpy.conj - imported by numpy (top-level), scipy.linalg.decomp (top-level), scipy.io.mmio (top-level)
missing module named numpy.inexact - imported by numpy (top-level), scipy.linalg.decomp (top-level), scipy.special._basic (top-level), scipy.optimize.minpack (top-level)
missing module named commands - imported by numpy.distutils.cpuinfo (conditional)
missing module named setuptools_svn - imported by setuptools.command.egg_info (optional)
missing module named 'setuptools.extern.six' - imported by setuptools (top-level), setuptools.extension (top-level)
missing module named certifi - imported by setuptools.ssl_support (delayed, optional)
missing module named wincertstore - imported by setuptools.ssl_support (delayed, optional)
missing module named 'backports.ssl_match_hostname' - imported by setuptools.ssl_support (optional)
missing module named backports - imported by setuptools.ssl_support (optional)
missing module named 'pkg_resources._vendor.six.moves' - imported by 'pkg_resources._vendor.six.moves' (top-level)
missing module named urllib2 - imported by setuptools.package_index (optional), numpy.lib._datasource (delayed, conditional)
missing module named win32com.client.gencache - imported by setuptools.sandbox (optional)
missing module named setuptools.extern.six.moves.filter - imported by setuptools.extern.six.moves (top-level), setuptools.command.py36compat (top-level)
missing module named setuptools.extern.six.moves.filterfalse - imported by setuptools.extern.six.moves (top-level), setuptools.msvc (top-level)
missing module named 'pkg_resources.extern.packaging.version' - imported by setuptools.msvc (top-level)
missing module named setuptools.extern.six.moves.map - imported by setuptools.extern.six.moves (top-level), setuptools.dist (top-level), setuptools.command.easy_install (top-level), setuptools.sandbox (top-level), setuptools.package_index (top-level), setuptools.ssl_support (top-level), setuptools.command.egg_info (top-level)
runtime module named setuptools.extern.six.moves - imported by setuptools.dist (top-level), setuptools.command.easy_install (top-level), setuptools.sandbox (top-level), setuptools.command.setopt (top-level), setuptools.package_index (top-level), setuptools.ssl_support (top-level), setuptools.command.egg_info (top-level), setuptools.command.py36compat (top-level), setuptools.msvc (top-level)
missing module named setuptools.extern.six - imported by setuptools.extern (top-level), setuptools.monkey (top-level), setuptools.dist (top-level), setuptools.extern.six.moves (top-level), setuptools.depends (top-level), setuptools.command.easy_install (top-level), setuptools.sandbox (top-level), setuptools.package_index (top-level), setuptools.command.bdist_egg (top-level), setuptools.command.egg_info (top-level), setuptools.command.sdist (top-level), setuptools.unicode_utils (top-level), setuptools.glob (top-level), setuptools.command.develop (top-level)
missing module named 'numpy_distutils.cpuinfo' - imported by numpy.f2py.diagnose (delayed, conditional, optional)
missing module named 'numpy_distutils.fcompiler' - imported by numpy.f2py.diagnose (delayed, conditional, optional)
missing module named 'numpy_distutils.command' - imported by numpy.f2py.diagnose (delayed, conditional, optional)
missing module named numpy_distutils - imported by numpy.f2py.diagnose (delayed, optional)
missing module named __svn_version__ - imported by numpy.f2py.__version__ (optional)
missing module named numarray - imported by numpy.distutils.system_info (delayed, conditional, optional)
missing module named Numeric - imported by numpy.distutils.system_info (delayed, conditional, optional)
missing module named ConfigParser - imported by numpy.distutils.system_info (conditional), numpy.distutils.npy_pkg_config (conditional)
missing module named win32con - imported by distutils.msvccompiler (optional)
missing module named _curses - imported by curses (top-level), curses.has_key (top-level)
missing module named pytest - imported by numpy._pytesttester (delayed), numpy.testing._private.utils (delayed), scipy._lib._testutils (delayed), matplotlib (delayed, optional)
missing module named 'nose.plugins' - imported by numpy.testing._private.noseclasses (top-level), numpy.testing._private.nosetester (delayed)
missing module named scipy.linalg._clapack - imported by scipy.linalg (optional), scipy.linalg.lapack (optional)
missing module named scipy.linalg._cblas - imported by scipy.linalg (optional), scipy.linalg.blas (optional)
missing module named scipy.sparse.coo_matrix - imported by scipy.sparse (delayed), scipy.sparse.data (delayed), scipy.optimize._numdiff (top-level), scipy.integrate._bvp (top-level), scipy.integrate._ivp.common (top-level), scipy.io.mmio (top-level)
missing module named scipy.special.entr - imported by scipy.special (top-level), scipy.stats._distn_infrastructure (top-level), scipy.stats._discrete_distns (top-level), scipy.stats._multivariate (top-level)
missing module named scipy.special.xlogy - imported by scipy.special (top-level), scipy.interpolate.rbf (top-level), scipy.stats._distn_infrastructure (top-level), scipy.stats._multivariate (top-level)
missing module named scipy.special.gammaln - imported by scipy.special (top-level), scipy.special.spfun_stats (top-level), scipy.optimize._dual_annealing (top-level), scipy.integrate.quadrature (top-level), scipy.stats._discrete_distns (top-level), scipy.stats._multivariate (top-level)
missing module named scipy.special.betaln - imported by scipy.special (top-level), scipy.stats._discrete_distns (top-level)
missing module named scipy.special.beta - imported by scipy.special (top-level), scipy.stats._tukeylambda_stats (top-level)
missing module named scipy.special.ive - imported by scipy.special (top-level), scipy.stats._distn_infrastructure (top-level)
missing module named scipy.special.chndtr - imported by scipy.special (top-level), scipy.stats._distn_infrastructure (top-level)
missing module named scipy.special.rel_entr - imported by scipy.special (top-level), scipy.spatial.distance (top-level), scipy.stats._distn_infrastructure (top-level)
missing module named scipy.special.airy - imported by scipy.special (top-level), scipy.special.orthogonal (top-level)
missing module named scipy.stats.iqr - imported by scipy.stats (delayed), scipy.stats._hypotests (delayed)
missing module named scipy.spatial.cKDTree - imported by scipy.spatial (top-level), scipy.spatial._spherical_voronoi (top-level), scipy.interpolate.ndgriddata (top-level), scipy.signal.signaltools (top-level)
missing module named new - imported by scipy.interpolate.rbf (delayed, conditional)
missing module named numpy.lib.i0 - imported by numpy.lib (top-level), numpy.dual (top-level)
missing module named scipy.signal.dlti - imported by scipy.signal (top-level), scipy.signal.signaltools (top-level)
missing module named sparse - imported by scipy.sparse.linalg._expm_multiply (delayed, conditional), scipy.sparse.linalg.matfuncs (delayed, conditional)
missing module named numpy.core.sqrt - imported by numpy.core (top-level), numpy.linalg.linalg (top-level), numpy.fft._pocketfft (top-level), scipy.sparse.linalg._norm (top-level)
missing module named scikits - imported by scipy.sparse.linalg.dsolve.linsolve (optional)
missing module named scipy.linalg.qr_insert - imported by scipy.linalg (top-level), scipy.sparse.linalg.isolve._gcrotmk (top-level)
missing module named 'IPython.core' - imported by matplotlib.pyplot (delayed, conditional, optional)
missing module named IPython - imported by matplotlib.pyplot (delayed, conditional, optional)
runtime module named six.moves - imported by cycler (top-level), dateutil.rrule (top-level), dateutil.tz.tz (top-level), dateutil.tz._factories (top-level), dateutil.tz.win (top-level)
missing module named six.moves.range - imported by six.moves (top-level), dateutil.rrule (top-level)
missing module named six.moves.zip - imported by six.moves (top-level), cycler (top-level)
missing module named dateutil.tz.tzfile - imported by dateutil.tz (top-level), dateutil.zoneinfo (top-level)
missing module named PIL - imported by matplotlib.backend_bases (optional), matplotlib.image (delayed, conditional, optional), matplotlib.backends.backend_agg (conditional)
missing module named 'tornado.template' - imported by matplotlib.backends.backend_webagg (delayed)
missing module named 'tornado.websocket' - imported by matplotlib.backends.backend_webagg (top-level)
missing module named 'tornado.ioloop' - imported by matplotlib.backends.backend_webagg (top-level)
missing module named 'tornado.web' - imported by matplotlib.backends.backend_webagg (top-level)
missing module named tornado - imported by matplotlib.backends.backend_webagg (optional), matplotlib.backends.backend_webagg_core (top-level)
missing module named matplotlib.tri.Triangulation - imported by matplotlib.tri (top-level), matplotlib.tri.trifinder (top-level), matplotlib.tri.tritools (top-level), matplotlib.tri.triinterpolate (top-level), matplotlib.mlab (delayed, conditional)
missing module named 'mpl_toolkits.natgrid' - imported by matplotlib.mlab (delayed, conditional, optional)
missing module named matplotlib.axes.Axes - imported by matplotlib.axes (delayed), matplotlib.legend (delayed), matplotlib.projections.geo (top-level), matplotlib.projections.polar (top-level), matplotlib.figure (top-level), matplotlib.pyplot (top-level)
missing module named dummy_thread - imported by numpy.core.arrayprint (conditional, optional), cffi.lock (conditional, optional)
missing module named thread - imported by numpy.core.arrayprint (conditional, optional), cffi.lock (conditional, optional), cffi.cparser (conditional, optional), PyInstaller.loader.pyimod02_archive (conditional)
missing module named numpy.core.sign - imported by numpy.core (top-level), numpy.linalg.linalg (top-level)
missing module named numpy.core.divide - imported by numpy.core (top-level), numpy.linalg.linalg (top-level)
missing module named numpy.core.object_ - imported by numpy.core (top-level), numpy.linalg.linalg (top-level), numpy.testing._private.utils (delayed)
missing module named numpy.core.intp - imported by numpy.core (top-level), numpy.testing._private.utils (top-level), numpy.linalg.linalg (top-level)
missing module named numpy.core.geterrobj - imported by numpy.core (top-level), numpy.linalg.linalg (top-level)
missing module named numpy.core.add - imported by numpy.core (top-level), numpy.linalg.linalg (top-level)
missing module named numpy.core.complexfloating - imported by numpy.core (top-level), numpy.linalg.linalg (top-level)
missing module named numpy.core.inexact - imported by numpy.core (top-level), numpy.linalg.linalg (top-level)
missing module named numpy.core.cdouble - imported by numpy.core (top-level), numpy.linalg.linalg (top-level)
missing module named numpy.core.csingle - imported by numpy.core (top-level), numpy.linalg.linalg (top-level)
missing module named numpy.core.double - imported by numpy.core (top-level), numpy.linalg.linalg (top-level)
missing module named numpy.core.single - imported by numpy.core (top-level), numpy.linalg.linalg (top-level)
missing module named 'scikits.umfpack' - imported by scipy.optimize._linprog_ip (optional)
missing module named 'sksparse.cholmod' - imported by scipy.optimize._linprog_ip (optional)
missing module named sksparse - imported by scipy.optimize._trustregion_constr.projections (optional)
missing module named uarray - imported by scipy._lib.uarray (conditional, optional)
missing module named psutil - imported by numpy.testing._private.utils (delayed, optional), scipy._lib._testutils (delayed, optional)
missing module named cStringIO - imported by cPickle (top-level), cffi.ffiplatform (optional)
missing module named copy_reg - imported by numpy.core (conditional), cPickle (top-level), cStringIO (top-level)
missing module named cPickle - imported by pycparser.ply.yacc (delayed, optional)
missing module named cffi._pycparser - imported by cffi (optional), cffi.cparser (optional)
missing module named numpy.random.randn - imported by numpy.random (top-level), scipy (top-level)
missing module named numpy.random.rand - imported by numpy.random (top-level), scipy (top-level)
missing module named 'nose.util' - imported by numpy.testing._private.noseclasses (top-level)
missing module named nose - imported by numpy.testing._private.utils (delayed, optional), numpy.testing._private.decorators (delayed), numpy.testing._private.noseclasses (top-level)
missing module named numpy.core.number - imported by numpy.core (delayed), numpy.testing._private.utils (delayed)
missing module named numpy.core.signbit - imported by numpy.core (delayed), numpy.testing._private.utils (delayed)
missing module named win32pdh - imported by numpy.testing._private.utils (delayed, conditional)
missing module named numpy.core.float32 - imported by numpy.core (top-level), numpy.testing._private.utils (top-level)
missing module named cpickle - imported by numpy.compat.py3k (conditional)
missing module named pickle5 - imported by numpy.compat.py3k (conditional, optional)
missing module named numpy.core.integer - imported by numpy.core (top-level), numpy.fft.helper (top-level)
missing module named numpy.core.conjugate - imported by numpy.core (top-level), numpy.fft._pocketfft (top-level)
missing module named future_builtins - imported by numpy.lib.npyio (conditional)
missing module named urlparse - imported by numpy.lib._datasource (delayed, conditional)
missing module named numpy.recarray - imported by numpy (top-level), numpy.ma.mrecords (top-level)
missing module named numpy.dtype - imported by numpy (top-level), numpy.ma.mrecords (top-level), numpy.ctypeslib (top-level), scipy.optimize.minpack (top-level), scipy.io.netcdf (top-level)
missing module named numpy.expand_dims - imported by numpy (top-level), numpy.ma.core (top-level)
missing module named numpy.array - imported by numpy (top-level), numpy.ma.core (top-level), numpy.ma.extras (top-level), numpy.ma.mrecords (top-level), numpy.ctypeslib (top-level), scipy._lib._numpy_compat (conditional), scipy.linalg.decomp (top-level), scipy.linalg.decomp_schur (top-level), scipy.sparse.linalg.isolve.utils (top-level), scipy.signal.bsplines (top-level), scipy.signal.filter_design (top-level), scipy.optimize.lbfgsb (top-level), scipy.optimize.tnc (top-level), scipy.optimize.slsqp (top-level), scipy.optimize.minpack (top-level), scipy.interpolate.interpolate (top-level), scipy.interpolate._fitpack_impl (top-level), scipy.interpolate.fitpack2 (top-level), scipy.integrate._ode (top-level), scipy.signal.lti_conversion (top-level), scipy.stats.stats (top-level), scipy.misc.common (top-level), scipy.stats.morestats (top-level), scipy.io.netcdf (top-level)
missing module named numpy.bool_ - imported by numpy (top-level), numpy.ma.core (top-level), numpy.ma.mrecords (top-level)
missing module named numpy.iscomplexobj - imported by numpy (top-level), numpy.ma.core (top-level), scipy.linalg.decomp (top-level), scipy.linalg._decomp_ldl (top-level)
missing module named numpy.amin - imported by numpy (top-level), numpy.ma.core (top-level), scipy.stats.morestats (top-level)
missing module named numpy.amax - imported by numpy (top-level), numpy.ma.core (top-level), scipy.linalg.matfuncs (top-level), scipy.stats.morestats (top-level)
missing module named numpy.ndarray - imported by numpy (top-level), numpy.ma.core (top-level), numpy.ma.extras (top-level), numpy.ma.mrecords (top-level), numpy.ctypeslib (top-level), scipy.stats._distn_infrastructure (top-level), scipy.stats.mstats_basic (top-level), scipy.stats.mstats_extras (top-level), scipy.io.mmio (top-level)
missing module named numpy.histogramdd - imported by numpy (delayed), numpy.lib.twodim_base (delayed)
missing module named numpy.eye - imported by numpy (delayed), numpy.core.numeric (delayed), scipy.linalg.decomp (top-level), scipy.optimize.optimize (top-level), scipy.optimize.minpack (top-level), scipy.interpolate._pade (top-level), scipy.signal.lti_conversion (top-level)
File diff suppressed because it is too large. Load diff
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.