Musik Nochtfilter
Musikfilter funktion noch fixen
This commit is contained in:
parent
a3c3c34936
commit
5260a615d5
100
TinnitusAnalyse/.idea/workspace.xml
generated
100
TinnitusAnalyse/.idea/workspace.xml
generated
@ -3,8 +3,9 @@
|
|||||||
<component name="ChangeListManager">
|
<component name="ChangeListManager">
|
||||||
<list default="true" id="5b3f2136-e422-4072-84be-e86e40fa2d55" name="Default Changelist" comment="">
|
<list default="true" id="5b3f2136-e422-4072-84be-e86e40fa2d55" name="Default Changelist" comment="">
|
||||||
<change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.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$/TinnitusAnalyse_GUI.py" beforeDir="false" afterPath="$PROJECT_DIR$/TinnitusAnalyse_GUI.py" afterDir="false" />
|
||||||
<change beforePath="$PROJECT_DIR$/output/MeinTinnitus.wav" beforeDir="false" afterPath="$PROJECT_DIR$/output/MeinTinnitus.wav" afterDir="false" />
|
<change beforePath="$PROJECT_DIR$/TinnitusDaten.csv" beforeDir="false" afterPath="$PROJECT_DIR$/TinnitusDaten.csv" afterDir="false" />
|
||||||
</list>
|
</list>
|
||||||
<option name="EXCLUDED_CONVERTED_TO_IGNORED" value="true" />
|
<option name="EXCLUDED_CONVERTED_TO_IGNORED" value="true" />
|
||||||
<option name="SHOW_DIALOG" value="false" />
|
<option name="SHOW_DIALOG" value="false" />
|
||||||
@ -14,11 +15,11 @@
|
|||||||
</component>
|
</component>
|
||||||
<component name="FileEditorManager">
|
<component name="FileEditorManager">
|
||||||
<leaf SIDE_TABS_SIZE_LIMIT_KEY="300">
|
<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">
|
<entry file="file://$PROJECT_DIR$/TinnitusAnalyse_GUI.py">
|
||||||
<provider selected="true" editor-type-id="text-editor">
|
<provider selected="true" editor-type-id="text-editor">
|
||||||
<state relative-caret-position="321">
|
<state relative-caret-position="767">
|
||||||
<caret line="198" column="81" lean-forward="true" selection-start-line="198" selection-start-column="81" selection-end-line="198" selection-end-column="81" />
|
<caret line="398" column="40" lean-forward="true" selection-start-line="398" selection-start-column="40" selection-end-line="398" selection-end-column="40" />
|
||||||
<folding>
|
<folding>
|
||||||
<element signature="e#0#30#0" expanded="true" />
|
<element signature="e#0#30#0" expanded="true" />
|
||||||
</folding>
|
</folding>
|
||||||
@ -27,10 +28,10 @@
|
|||||||
</entry>
|
</entry>
|
||||||
</file>
|
</file>
|
||||||
<file pinned="false" current-in-tab="false">
|
<file pinned="false" current-in-tab="false">
|
||||||
<entry file="file://$USER_HOME$/AppData/Local/Programs/Python/Python35/Lib/site-packages/scipy/signal/filter_design.py">
|
<entry file="file://$USER_HOME$/AppData/Local/Programs/Python/Python35/Lib/site-packages/pydub/utils.py">
|
||||||
<provider selected="true" editor-type-id="text-editor">
|
<provider selected="true" editor-type-id="text-editor">
|
||||||
<state relative-caret-position="884">
|
<state relative-caret-position="313">
|
||||||
<caret line="2211" column="41" selection-start-line="2211" selection-start-column="41" selection-end-line="2211" selection-end-column="41" />
|
<caret line="169" selection-start-line="169" selection-end-line="169" />
|
||||||
</state>
|
</state>
|
||||||
</provider>
|
</provider>
|
||||||
</entry>
|
</entry>
|
||||||
@ -38,17 +39,17 @@
|
|||||||
<file pinned="false" current-in-tab="false">
|
<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/tkinter/__init__.py">
|
||||||
<provider selected="true" editor-type-id="text-editor">
|
<provider selected="true" editor-type-id="text-editor">
|
||||||
<state relative-caret-position="17034">
|
<state relative-caret-position="313">
|
||||||
<caret line="1004" column="30" selection-start-line="1004" selection-start-column="30" selection-end-line="1004" selection-end-column="30" />
|
<caret line="1557" selection-start-line="1557" selection-end-line="1557" />
|
||||||
</state>
|
</state>
|
||||||
</provider>
|
</provider>
|
||||||
</entry>
|
</entry>
|
||||||
</file>
|
</file>
|
||||||
<file pinned="false" current-in-tab="false">
|
<file pinned="false" current-in-tab="true">
|
||||||
<entry file="file://$PROJECT_DIR$/SoundGenerator.py">
|
<entry file="file://$PROJECT_DIR$/SoundGenerator.py">
|
||||||
<provider selected="true" editor-type-id="text-editor">
|
<provider selected="true" editor-type-id="text-editor">
|
||||||
<state relative-caret-position="942">
|
<state relative-caret-position="523">
|
||||||
<caret line="141" column="36" selection-start-line="141" selection-start-column="36" selection-end-line="141" selection-end-column="36" />
|
<caret line="252" column="36" lean-forward="true" selection-start-line="252" selection-start-column="36" selection-end-line="252" selection-end-column="36" />
|
||||||
<folding>
|
<folding>
|
||||||
<element signature="e#0#42#0" expanded="true" />
|
<element signature="e#0#42#0" expanded="true" />
|
||||||
</folding>
|
</folding>
|
||||||
@ -56,15 +57,6 @@
|
|||||||
</provider>
|
</provider>
|
||||||
</entry>
|
</entry>
|
||||||
</file>
|
</file>
|
||||||
<file pinned="false" current-in-tab="false">
|
|
||||||
<entry file="file://$USER_HOME$/AppData/Local/Programs/Python/Python35/Lib/site-packages/sounddevice.py">
|
|
||||||
<provider selected="true" editor-type-id="text-editor">
|
|
||||||
<state relative-caret-position="24106">
|
|
||||||
<caret line="1423" column="8" selection-start-line="1423" selection-start-column="8" selection-end-line="1423" selection-end-column="8" />
|
|
||||||
</state>
|
|
||||||
</provider>
|
|
||||||
</entry>
|
|
||||||
</file>
|
|
||||||
</leaf>
|
</leaf>
|
||||||
</component>
|
</component>
|
||||||
<component name="FileTemplateManagerImpl">
|
<component name="FileTemplateManagerImpl">
|
||||||
@ -97,6 +89,7 @@
|
|||||||
<find>unten_button_play_press</find>
|
<find>unten_button_play_press</find>
|
||||||
<find>StringVar</find>
|
<find>StringVar</find>
|
||||||
<find>Speichern</find>
|
<find>Speichern</find>
|
||||||
|
<find>csv</find>
|
||||||
</findStrings>
|
</findStrings>
|
||||||
<dirStrings>
|
<dirStrings>
|
||||||
<dir>C:\Users\Julian\PycharmProjects\TinnitusAnalyse</dir>
|
<dir>C:\Users\Julian\PycharmProjects\TinnitusAnalyse</dir>
|
||||||
@ -114,13 +107,13 @@
|
|||||||
<option value="$PROJECT_DIR$/DigitalFilter.py" />
|
<option value="$PROJECT_DIR$/DigitalFilter.py" />
|
||||||
<option value="$PROJECT_DIR$/../../../DigitalFilter.py" />
|
<option value="$PROJECT_DIR$/../../../DigitalFilter.py" />
|
||||||
<option value="$PROJECT_DIR$/DigitalFilterTest2.py" />
|
<option value="$PROJECT_DIR$/DigitalFilterTest2.py" />
|
||||||
<option value="$PROJECT_DIR$/SoundGenerator.py" />
|
|
||||||
<option value="$PROJECT_DIR$/DigitalFilterTest.py" />
|
<option value="$PROJECT_DIR$/DigitalFilterTest.py" />
|
||||||
<option value="$PROJECT_DIR$/TinnitusAnalyse_GUI.py" />
|
<option value="$PROJECT_DIR$/TinnitusAnalyse_GUI.py" />
|
||||||
|
<option value="$PROJECT_DIR$/SoundGenerator.py" />
|
||||||
</list>
|
</list>
|
||||||
</option>
|
</option>
|
||||||
</component>
|
</component>
|
||||||
<component name="ProjectFrameBounds" extendedState="7">
|
<component name="ProjectFrameBounds" extendedState="6">
|
||||||
<option name="x" value="407" />
|
<option name="x" value="407" />
|
||||||
<option name="y" value="-8" />
|
<option name="y" value="-8" />
|
||||||
<option name="width" value="1113" />
|
<option name="width" value="1113" />
|
||||||
@ -295,14 +288,14 @@
|
|||||||
<window_info id="Favorites" order="2" side_tool="true" />
|
<window_info id="Favorites" order="2" side_tool="true" />
|
||||||
<window_info anchor="bottom" id="Message" order="0" />
|
<window_info anchor="bottom" id="Message" order="0" />
|
||||||
<window_info anchor="bottom" id="Find" order="1" />
|
<window_info anchor="bottom" id="Find" order="1" />
|
||||||
<window_info active="true" anchor="bottom" id="Run" order="2" visible="true" weight="0.24707717" />
|
<window_info active="true" anchor="bottom" id="Run" order="2" sideWeight="0.49960598" visible="true" weight="0.24707717" />
|
||||||
<window_info anchor="bottom" id="Debug" order="3" weight="0.3990647" />
|
<window_info anchor="bottom" id="Debug" order="3" weight="0.3990647" />
|
||||||
<window_info anchor="bottom" id="Cvs" order="4" weight="0.25" />
|
<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="Inspection" order="5" weight="0.4" />
|
||||||
<window_info anchor="bottom" id="TODO" order="6" />
|
<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" />
|
||||||
<window_info anchor="bottom" id="Terminal" order="8" 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="Event Log" order="9" sideWeight="0.500394" side_tool="true" weight="0.24707717" />
|
||||||
<window_info anchor="bottom" id="Python Console" order="10" weight="0.32969603" />
|
<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="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" id="Ant Build" order="1" weight="0.25" />
|
||||||
@ -361,17 +354,10 @@
|
|||||||
</state>
|
</state>
|
||||||
</provider>
|
</provider>
|
||||||
</entry>
|
</entry>
|
||||||
<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/tkinter/filedialog.py">
|
||||||
<provider selected="true" editor-type-id="text-editor">
|
<provider selected="true" editor-type-id="text-editor">
|
||||||
<state relative-caret-position="17034">
|
<state relative-caret-position="313">
|
||||||
<caret line="1004" column="30" selection-start-line="1004" selection-start-column="30" selection-end-line="1004" selection-end-column="30" />
|
<caret line="374" selection-start-line="374" selection-end-line="374" />
|
||||||
</state>
|
|
||||||
</provider>
|
|
||||||
</entry>
|
|
||||||
<entry file="file://$USER_HOME$/AppData/Local/Programs/Python/Python35/Lib/site-packages/sounddevice.py">
|
|
||||||
<provider selected="true" editor-type-id="text-editor">
|
|
||||||
<state relative-caret-position="24106">
|
|
||||||
<caret line="1423" column="8" selection-start-line="1423" selection-start-column="8" selection-end-line="1423" selection-end-column="8" />
|
|
||||||
</state>
|
</state>
|
||||||
</provider>
|
</provider>
|
||||||
</entry>
|
</entry>
|
||||||
@ -382,25 +368,53 @@
|
|||||||
</state>
|
</state>
|
||||||
</provider>
|
</provider>
|
||||||
</entry>
|
</entry>
|
||||||
<entry file="file://$PROJECT_DIR$/SoundGenerator.py">
|
<entry file="file://$USER_HOME$/AppData/Local/Programs/Python/Python35/Lib/tkinter/commondialog.py">
|
||||||
<provider selected="true" editor-type-id="text-editor">
|
<provider selected="true" editor-type-id="text-editor">
|
||||||
<state relative-caret-position="942">
|
<state relative-caret-position="618">
|
||||||
<caret line="141" column="36" selection-start-line="141" selection-start-column="36" selection-end-line="141" selection-end-column="36" />
|
<caret line="47" selection-start-line="47" selection-end-line="47" />
|
||||||
<folding>
|
</state>
|
||||||
<element signature="e#0#42#0" expanded="true" />
|
</provider>
|
||||||
</folding>
|
</entry>
|
||||||
|
<entry file="file://$USER_HOME$/AppData/Local/Programs/Python/Python35/Lib/site-packages/sounddevice.py">
|
||||||
|
<provider selected="true" editor-type-id="text-editor">
|
||||||
|
<state relative-caret-position="1037">
|
||||||
|
<caret line="1423" column="8" selection-start-line="1423" selection-start-column="8" selection-end-line="1423" selection-end-column="8" />
|
||||||
|
</state>
|
||||||
|
</provider>
|
||||||
|
</entry>
|
||||||
|
<entry file="file://$USER_HOME$/AppData/Local/Programs/Python/Python35/Lib/site-packages/pydub/utils.py">
|
||||||
|
<provider selected="true" editor-type-id="text-editor">
|
||||||
|
<state relative-caret-position="313">
|
||||||
|
<caret line="169" selection-start-line="169" selection-end-line="169" />
|
||||||
|
</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="313">
|
||||||
|
<caret line="1557" selection-start-line="1557" selection-end-line="1557" />
|
||||||
</state>
|
</state>
|
||||||
</provider>
|
</provider>
|
||||||
</entry>
|
</entry>
|
||||||
<entry file="file://$PROJECT_DIR$/TinnitusAnalyse_GUI.py">
|
<entry file="file://$PROJECT_DIR$/TinnitusAnalyse_GUI.py">
|
||||||
<provider selected="true" editor-type-id="text-editor">
|
<provider selected="true" editor-type-id="text-editor">
|
||||||
<state relative-caret-position="321">
|
<state relative-caret-position="767">
|
||||||
<caret line="198" column="81" lean-forward="true" selection-start-line="198" selection-start-column="81" selection-end-line="198" selection-end-column="81" />
|
<caret line="398" column="40" lean-forward="true" selection-start-line="398" selection-start-column="40" selection-end-line="398" selection-end-column="40" />
|
||||||
<folding>
|
<folding>
|
||||||
<element signature="e#0#30#0" expanded="true" />
|
<element signature="e#0#30#0" expanded="true" />
|
||||||
</folding>
|
</folding>
|
||||||
</state>
|
</state>
|
||||||
</provider>
|
</provider>
|
||||||
</entry>
|
</entry>
|
||||||
|
<entry file="file://$PROJECT_DIR$/SoundGenerator.py">
|
||||||
|
<provider selected="true" editor-type-id="text-editor">
|
||||||
|
<state relative-caret-position="523">
|
||||||
|
<caret line="252" column="36" lean-forward="true" selection-start-line="252" selection-start-column="36" selection-end-line="252" selection-end-column="36" />
|
||||||
|
<folding>
|
||||||
|
<element signature="e#0#42#0" expanded="true" />
|
||||||
|
</folding>
|
||||||
|
</state>
|
||||||
|
</provider>
|
||||||
|
</entry>
|
||||||
</component>
|
</component>
|
||||||
</project>
|
</project>
|
@ -4,7 +4,8 @@ import sounddevice as sd
|
|||||||
import numpy as np
|
import numpy as np
|
||||||
import sys # für Fehlermeldungen
|
import sys # für Fehlermeldungen
|
||||||
from scipy import signal
|
from scipy import signal
|
||||||
|
import csv
|
||||||
|
import matplotlib.pyplot as plt
|
||||||
"""---------------------------------------------------------------------------------------------------------------------
|
"""---------------------------------------------------------------------------------------------------------------------
|
||||||
In .wav-Dateien wird der Ton in absoluten Werte eingetragen. Die Standart-framerate ist 44100
|
In .wav-Dateien wird der Ton in absoluten Werte eingetragen. Die Standart-framerate ist 44100
|
||||||
das heißt für jede Sekunde an Ton gibt es 44100 Werte, die die Tonwelle über die Zeit beschreiben
|
das heißt für jede Sekunde an Ton gibt es 44100 Werte, die die Tonwelle über die Zeit beschreiben
|
||||||
@ -76,6 +77,9 @@ class Sound:
|
|||||||
self.sound_obj = sd.OutputStream(channels=2, callback=self.callback,
|
self.sound_obj = sd.OutputStream(channels=2, callback=self.callback,
|
||||||
samplerate=self.framerate) # Objekt fürs Abspielen (siehe sound.play())
|
samplerate=self.framerate) # Objekt fürs Abspielen (siehe sound.play())
|
||||||
self.start_idx = 0 # wird für sound_obj benötigt
|
self.start_idx = 0 # wird für sound_obj benötigt
|
||||||
|
self.music_samplerate = 0 # die samplerate der ausgewählten Musikdatei
|
||||||
|
self.music_data = 0 # das Numpy Array der ausgewählten Musikdatei
|
||||||
|
|
||||||
|
|
||||||
def wav_speichern(self): # ezeugt/aktuallisiert die .wav-Datei
|
def wav_speichern(self): # ezeugt/aktuallisiert die .wav-Datei
|
||||||
print("Sound wird als .wav-Datei gespeichert. Bitte warten...\nDer Vorgang kann ca. 10 Sekunden dauern")
|
print("Sound wird als .wav-Datei gespeichert. Bitte warten...\nDer Vorgang kann ca. 10 Sekunden dauern")
|
||||||
@ -152,13 +156,105 @@ class Sound:
|
|||||||
|
|
||||||
# Sinus addieren: f(t) = A * sin(2 * pi * f * t)
|
# Sinus addieren: f(t) = A * sin(2 * pi * f * t)
|
||||||
for x in range(len(outdata)):
|
for x in range(len(outdata)):
|
||||||
# links:
|
# links: rauschen und sinus wieder zusammen addieren
|
||||||
outdata[x][0] += self.tinnitus.linksLautstaerke * np.sin(2 * np.pi * self.tinnitus.linksFrequenz *
|
outdata[x][0] += self.tinnitus.linksLautstaerke * np.sin(2 * np.pi * self.tinnitus.linksFrequenz *
|
||||||
((x + self.start_idx) / self.framerate))
|
((x + self.start_idx) / self.framerate))
|
||||||
# rechts:
|
# rechts: rauschen und sinus wieder zusammen addieren
|
||||||
outdata[x][1] += self.tinnitus.rechtsLautstaerke * np.sin(2 * np.pi * self.tinnitus.rechtsFrequenz *
|
outdata[x][1] += self.tinnitus.rechtsLautstaerke * np.sin(2 * np.pi * self.tinnitus.rechtsFrequenz *
|
||||||
((x + self.start_idx) / self.framerate))
|
((x + self.start_idx) / self.framerate))
|
||||||
|
|
||||||
self.start_idx += frames
|
self.start_idx += frames
|
||||||
|
|
||||||
return outdata
|
return outdata
|
||||||
|
|
||||||
|
def musik_filtern(self):
|
||||||
|
""" Die Tinnitus Frequenz aus der Musik Filtern... easy"""
|
||||||
|
|
||||||
|
# Die Parameter des Tinnitus aus .csv Datei getten
|
||||||
|
csvstring = open("TinnitusDaten.csv").read()
|
||||||
|
#print(csvstring)
|
||||||
|
x = csvstring.split("\n")
|
||||||
|
#print("\nx= ", x)
|
||||||
|
|
||||||
|
# linke Frequenz aus csv Datei holen
|
||||||
|
lf = x[2]
|
||||||
|
lf = lf.split(";")
|
||||||
|
lf = float(lf[1])
|
||||||
|
|
||||||
|
|
||||||
|
# rechte Frequenz aus csv Datei holen
|
||||||
|
rf = x[7]
|
||||||
|
rf = rf.split(";")
|
||||||
|
rf = float(rf[1])
|
||||||
|
|
||||||
|
|
||||||
|
# linke Lautstärke aus cvs Datei holen
|
||||||
|
ll = x[3]
|
||||||
|
ll = ll.split(";")
|
||||||
|
ll = float(ll[1])
|
||||||
|
|
||||||
|
# rechte Lautstärke aus cvs Datei holen
|
||||||
|
rl = x[8]
|
||||||
|
rl = rl.split(";")
|
||||||
|
rl = float(rl[1])
|
||||||
|
|
||||||
|
print("lf = ", lf)
|
||||||
|
print("rf = ", rf)
|
||||||
|
print("ll = ", ll)
|
||||||
|
print("rl = ", rl)
|
||||||
|
|
||||||
|
# Die Musik filtern
|
||||||
|
w0 = float(lf/(self.music_samplerate/2)) # Frequency to remove from a signal. If fs is specified, this is in the same units as fs. By default, it is a normalized scalar that must satisfy 0 < w0 < 1, with w0 = 1 corresponding to half of the sampling frequency.
|
||||||
|
Q = 30.0 # Quality factor. Dimensionless parameter that characterizes notch filter -3 dB bandwidth bw relative to its center frequency, Q = w0/bw.
|
||||||
|
|
||||||
|
self.music_data = self.music_data/32767 # convert array from int16 to float
|
||||||
|
|
||||||
|
b, a = signal.iirnotch(lf, Q, fs=self.music_samplerate)
|
||||||
|
if ll != 0.0:
|
||||||
|
print(self.music_data[20000:20010])
|
||||||
|
musicLinks = signal.lfilter(b, a , self.music_data[:, 0]) # links
|
||||||
|
sd.play(musicLinks, self.music_samplerate)
|
||||||
|
sd.wait()
|
||||||
|
|
||||||
|
print(musicLinks[20000:20010])
|
||||||
|
|
||||||
|
freq, h = signal.freqz(b, a, fs=self.music_samplerate)
|
||||||
|
# Plot
|
||||||
|
fig, ax = plt.subplots(2, 1, figsize=(8, 6))
|
||||||
|
ax[0].plot(freq, 20 * np.log10(abs(h)), color='blue')
|
||||||
|
ax[0].set_title("Frequency Response")
|
||||||
|
ax[0].set_ylabel("Amplitude (dB)", color='blue')
|
||||||
|
ax[0].set_xlim([0, 10000])
|
||||||
|
ax[0].set_ylim([-25, 10])
|
||||||
|
ax[0].grid()
|
||||||
|
ax[1].plot(freq, np.unwrap(np.angle(h)) * 180 / np.pi, color='green')
|
||||||
|
ax[1].set_ylabel("Angle (degrees)", color='green')
|
||||||
|
ax[1].set_xlabel("Frequency (Hz)")
|
||||||
|
ax[1].set_xlim([0, 10000])
|
||||||
|
ax[1].set_yticks([-90, -60, -30, 0, 30, 60, 90])
|
||||||
|
ax[1].set_ylim([-90, 90])
|
||||||
|
ax[1].grid()
|
||||||
|
plt.show()
|
||||||
|
|
||||||
|
|
||||||
|
if rl != 0.0:
|
||||||
|
musicRechts = signal.lfilter(b, a, self.music_data[:, 1]) # rechts
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
wav_obj = wave.open("musikTest.wav", "w")
|
||||||
|
# Rahmenparameter für die .wav-Datei setzen
|
||||||
|
|
||||||
|
|
||||||
|
self.nframes = len(musicLinks)
|
||||||
|
wav_obj.setparams((self.nchannels, self.sampwidth, self.music_samplerate, self.nframes, self.comptype, self.compname))
|
||||||
|
|
||||||
|
frames = self.music_samplerate * 10
|
||||||
|
# Die Audiosamples schreiben
|
||||||
|
for x in range(frames):
|
||||||
|
# Die Audiodaten müssen von float in einen passenden int-Wert umgerechnet werden
|
||||||
|
wav_obj.writeframes(struct.pack('h', int(musicLinks[x] * 32767.0))) # Werte für links und rechts werden bei
|
||||||
|
wav_obj.writeframes(struct.pack('h', int(musicRechts[x] * 32767.0))) # wav abwechselnd eingetragen
|
||||||
|
|
||||||
|
wav_obj.close()
|
||||||
|
print("Speichern beendet.")
|
||||||
|
@ -2,8 +2,12 @@ from tkinter import filedialog
|
|||||||
from tkinter.ttk import Frame, Label, Button, LabelFrame, Combobox, Style, Checkbutton, Entry, Panedwindow, Separator
|
from tkinter.ttk import Frame, Label, Button, LabelFrame, Combobox, Style, Checkbutton, Entry, Panedwindow, Separator
|
||||||
from tkinter import *
|
from tkinter import *
|
||||||
from SoundGenerator import *
|
from SoundGenerator import *
|
||||||
import csv
|
import sounddevice as sd
|
||||||
import time
|
from scipy.io import wavfile
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
"""--------------------------FUNKTIONEN DIE DURCH GUI KLICKS AUSGEFÜHRT WERDEN---------------------------------------"""
|
"""--------------------------FUNKTIONEN DIE DURCH GUI KLICKS AUSGEFÜHRT WERDEN---------------------------------------"""
|
||||||
"""-------Funktionen links-------------"""
|
"""-------Funktionen links-------------"""
|
||||||
@ -176,8 +180,16 @@ 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
|
""" This function opends a window that lets you select .mp3 and .wav files. The user is supposed to select their
|
||||||
music files here"""
|
music files here"""
|
||||||
print("button musikdatei laden pressed")
|
print("button musikdatei laden pressed")
|
||||||
untererFrame.musikdatei = filedialog.askopenfilename(initialdir="/", title="Wähle die Musikdatei deiner Wahl aus (.mp3)",
|
|
||||||
filetypes=(("wav Dateien", "*.wav"), ("mp3 Dateien", "*.mp3")))
|
untererFrame.musikdatei = filedialog.askopenfilename(initialdir="/",
|
||||||
|
title="Wähle die Musikdatei(.wav) deiner Wahl aus",
|
||||||
|
filetypes=(("wav Dateien", "*.wav"),))
|
||||||
|
|
||||||
|
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)
|
print(untererFrame.musikdatei)
|
||||||
untenTextMusikDatei.config(state=NORMAL) # activate text field (otherwise it is readonly)
|
untenTextMusikDatei.config(state=NORMAL) # activate text field (otherwise it is readonly)
|
||||||
untenTextMusikDatei.delete(1.0, END) # delete everything from text widget
|
untenTextMusikDatei.delete(1.0, END) # delete everything from text widget
|
||||||
@ -187,28 +199,12 @@ def unten_button_musikdatei_laden_press():
|
|||||||
feedback("Musikdatei ausgewählt", fontcolor="black") # place text in feedback field, fontcololor, backgroundcolor
|
feedback("Musikdatei ausgewählt", fontcolor="black") # place text in feedback field, fontcololor, backgroundcolor
|
||||||
|
|
||||||
|
|
||||||
def unten_button_tinnitusdatei_laden_press():
|
|
||||||
""" This function opends a window that lets you select .mp3 and .wav files. The user is supposed to select their
|
|
||||||
tinnitus files here"""
|
|
||||||
print("button tinnitusdatei laden pressed")
|
|
||||||
untererFrame.tinnitusdatei = filedialog.askopenfilename(initialdir="/",
|
|
||||||
title="Wähle die Musikdatei deiner Wahl aus (.mp3)",
|
|
||||||
filetypes=(("wav Dateien", "*.wav"), ("mp3 Dateien", "*.mp3")))
|
|
||||||
print(untererFrame.tinnitusdatei)
|
|
||||||
untenTextTinnitusDatei.config(state=NORMAL) # activate text field (otherwise it is readonly)
|
|
||||||
untenTextTinnitusDatei.delete(1.0, END) # delete everything from text widget
|
|
||||||
untenTextTinnitusDatei.insert(INSERT, untererFrame.musikdatei) # insert selected file path to text widget
|
|
||||||
untenTextTinnitusDatei.config(state=DISABLED) # activate text field (otherwise it is readonly)
|
|
||||||
|
|
||||||
feedback("Tinnitusdatei ausgewählt", fontcolor="black") # place text in feedback field, fontcololor, backgroundcolor
|
|
||||||
|
|
||||||
def unten_button_filtere_tinnitus_aus_musik():
|
def unten_button_filtere_tinnitus_aus_musik():
|
||||||
print("button filtere tinnitus aus musik pressed")
|
print("button filtere tinnitus aus musik pressed")
|
||||||
try:
|
feedback("Gefilterte Musikdatei erstellt", "blue")
|
||||||
feedback("Gefilterte Musikdatei erstellt", "blue")
|
sound.musik_filtern()
|
||||||
|
# except:
|
||||||
except:
|
# feedback("Fehlgeschlagener Filterversuch!", "red", "white")
|
||||||
feedback("Fehlgeschlagener Filterversuch!", "red", "white")
|
|
||||||
|
|
||||||
|
|
||||||
""" Initialisierungen """
|
""" Initialisierungen """
|
||||||
@ -407,18 +403,7 @@ untenButtonMusikDateiLaden = Button(untererFrame, text="Musikdatei auswählen",
|
|||||||
untenButtonMusikDateiLaden.grid(column=7, row=7, sticky=(N+S+E+W))
|
untenButtonMusikDateiLaden.grid(column=7, row=7, sticky=(N+S+E+W))
|
||||||
|
|
||||||
|
|
||||||
# --------------- LOAD MEINTINNTISU.WAV FILE---------------------
|
#------------BUTTON FILTERE TINNITUS AUS MUSIK-----------------
|
||||||
untenTextTinnitusDatei = Text(untererFrame, height=1, width=50)
|
|
||||||
untenTextTinnitusDatei.grid(column=0, row=8, sticky=(N+S+E+W), columnspan=6)
|
|
||||||
untenTextTinnitusDatei.insert(INSERT, "Deine MeinTinnitus.wav Datei hier auswählen") # insert selected file path to text widget
|
|
||||||
untenTextTinnitusDatei.config(state=DISABLED) # activate text field (otherwise it is readonly)
|
|
||||||
|
|
||||||
|
|
||||||
untenButtonTinnitusDateiLaden = Button(untererFrame, text="Tinnitusdatei auswählen",
|
|
||||||
command=unten_button_tinnitusdatei_laden_press)
|
|
||||||
untenButtonTinnitusDateiLaden.grid(column=7, row=8, sticky=(N+S+E+W))
|
|
||||||
|
|
||||||
|
|
||||||
untenButtonFiltereTinnitusAusMusik = Button(untererFrame, text="Filtere Tinnitus Frequenzen aus Musik",
|
untenButtonFiltereTinnitusAusMusik = Button(untererFrame, text="Filtere Tinnitus Frequenzen aus Musik",
|
||||||
command=unten_button_filtere_tinnitus_aus_musik, font="bold",
|
command=unten_button_filtere_tinnitus_aus_musik, font="bold",
|
||||||
relief="raised", bg="blue", fg="white",)
|
relief="raised", bg="blue", fg="white",)
|
||||||
|
@ -1,14 +1,14 @@
|
|||||||
Vorname;Seyffer
|
Vorname;asd
|
||||||
Nachname;JUlian
|
Nachname;asd
|
||||||
linke Frequenz;0.0
|
linke Frequenz;950.0
|
||||||
linke Lautstärke;0.0
|
linke Lautstärke;0.2
|
||||||
linkes Rauschen Lautstärke;0.011
|
linkes Rauschen Lautstärke;0.0
|
||||||
linkes Rauschen untere Grenzfrequenz;4059.9999999999995
|
linkes Rauschen untere Grenzfrequenz;10.0
|
||||||
linkes Rauschen obere Grenzfrequenz;20000.0
|
linkes Rauschen obere Grenzfrequenz;20000.0
|
||||||
rechte Frequenz;0.0
|
rechte Frequenz;920.0
|
||||||
rechte Lautstärke;0.0
|
rechte Lautstärke;0.28
|
||||||
rechtes Rauschen Lautstärke;0.009
|
rechtes Rauschen Lautstärke;0.0
|
||||||
rechtes Rauschen untere Grenzfrequenz;1380.0
|
rechtes Rauschen untere Grenzfrequenz;10.0
|
||||||
rechtes Rauschen obere Grenzfrequenz;20000.0
|
rechtes Rauschen obere Grenzfrequenz;20000.0
|
||||||
Kommentar;asd
|
Kommentar;
|
||||||
|
|
||||||
|
|
Binary file not shown.
BIN
TinnitusAnalyse/musikTest.wav
Normal file
BIN
TinnitusAnalyse/musikTest.wav
Normal file
Binary file not shown.
Loading…
x
Reference in New Issue
Block a user