Merge branch 'master' of https://git.efi.th-nuernberg.de/gitea/seyfferju74439/Tinnitus_Musik_Therapie_Projektarbeit_Repo
This commit is contained in:
commit
e72a61c0c2
@ -4,6 +4,7 @@ import struct
|
||||
import sounddevice as sd
|
||||
import numpy as np
|
||||
import sys # für Fehlermeldungen
|
||||
import time as tm
|
||||
|
||||
"""---------------------------------------------------------------------------------------------------------------------
|
||||
In .wav-Dateien wird der Ton in absoluten Werte eingetragen. Die Standart-framerate ist 44100
|
||||
@ -101,7 +102,7 @@ class Sound:
|
||||
sound.callback() auf. Daher können die dort genutzten Variablen dynamisch geändert werden. """
|
||||
|
||||
def play(self):
|
||||
if not self.mute: # NEVER play sound when patient mutes GUI
|
||||
if not self.mute: # Nie abspielen, wenn die GUI auf stumm geschaltet ist
|
||||
self.sound_obj.start()
|
||||
|
||||
def stop(self):
|
||||
@ -117,19 +118,18 @@ class Sound:
|
||||
# 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))
|
||||
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))
|
||||
|
||||
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):
|
||||
rand = (np.random.rand() - 0.5) # Zufallszahl zwischen -0.5 und 0.5
|
||||
#links:
|
||||
# links:
|
||||
if self.tinnitus.linksRauschenLautstaerke:
|
||||
outdata[x][0] += rand * self.tinnitus.linksRauschenLautstaerke
|
||||
#rechts:
|
||||
# rechts:
|
||||
if self.tinnitus.rechtsRauschenLautstaerke:
|
||||
outdata[x][1] += rand * self.tinnitus.rechtsRauschenLautstaerke
|
||||
|
||||
|
@ -78,13 +78,16 @@ def unten_button_ohren_synchro():
|
||||
auswahl = untenComboOhrenSynchro.get() # holt die momentane Auswahl aus combobox
|
||||
print("Einstellungen von:" + auswahl + " das auf das jeweils andere Ohr setzen")
|
||||
|
||||
if auswahl == "":
|
||||
feedback("Bitte wähle ein Ohr", "white", "red")
|
||||
|
||||
if auswahl == "Linkes Ohr": # linkes --> rechts
|
||||
rechtsScaleLautstärke.set(linksScaleLautstärke.get())
|
||||
rechtsScaleFrequenz.set(linksScaleFrequenz.get())
|
||||
rechtsScaleRauschenLautstärke.set(linksScaleRauschenLautstärke.get())
|
||||
rechtsScaleRauschenMittelFrequenz.set(linksScaleRauschenMittelFrequenz.get())
|
||||
rechtsScaleRauschenBandbreite.set(linksScaleRauschenBandbreite.get())
|
||||
feedback("Einstellungen vom linken Ohr auf beide Ohren übertragen", "white", "blue")
|
||||
feedback("Einstellungen vom linken Ohr auf beide Ohren übertragen")
|
||||
|
||||
if auswahl == "Rechtes Ohr": # rechts --> links
|
||||
linksScaleLautstärke.set(rechtsScaleLautstärke.get())
|
||||
@ -92,49 +95,43 @@ def unten_button_ohren_synchro():
|
||||
linksScaleRauschenLautstärke.set(rechtsScaleRauschenLautstärke.get())
|
||||
linksScaleRauschenMittelFrequenz.set(rechtsScaleRauschenMittelFrequenz.get())
|
||||
linksScaleRauschenBandbreite.set(rechtsScaleRauschenBandbreite.get())
|
||||
feedback("Einstellungen vom rechten Ohr auf beide Ohren übertragen", "white", "blue")
|
||||
feedback("Einstellungen vom rechten Ohr auf beide Ohren übertragen")
|
||||
|
||||
|
||||
def unten_button_speichern_press():
|
||||
print("button speichern pressed")
|
||||
# Wenn man Speichern will bevor ein Name eingegeben wurde kann man nicht speichern
|
||||
if (not untenEntryVorname.get()) or (not untenEntryNachname.get()) or \
|
||||
(untenEntryNachname == "Erst Namen..") or (untenEntryVorname == "..eintragen bitte"):
|
||||
nachname.set("Erst Namen..")
|
||||
vorname.set("..eintragen bitte")
|
||||
if (not untenEntryVorname.get()) or (not untenEntryNachname.get()):
|
||||
print("fehlgeschlagener Speicherversuch - Keine Eingaben gemacht")
|
||||
feedback("Fehlgeschlagener Speicherversuch! Mögliche Gründe: Erst Namen links eintragen.", "yellow", "red")
|
||||
feedback("Falls es danach immer noch nicht geht, bitte Microsoft Excel schließen.", "yellow", "red")
|
||||
feedback("Fehlgeschlagener Speicherversuch! Erst Namen links eintragen.", "white", "red")
|
||||
else:
|
||||
try:
|
||||
feedback("Speichere Sound als .wav Datei . Kann bis zu 30 Sekunden dauern. Bitte warten...", "white", "blue")
|
||||
# todo: warum auch immer, aber irgendwie wird feedback nach wav_speichern ausgeführt
|
||||
feedback("Speichere Sound als '.wav'-Datei. Das kann bis zu 30 Sekunden dauern. Bitte warten...")
|
||||
tinnitus.vorname = untenEntryVorname.get()
|
||||
tinnitus.nachname = untenEntryNachname.get()
|
||||
tinnitus.kommentar = untenTextKommentar.get("1.0", END)
|
||||
tinnitus.speichern()
|
||||
sound.wav_speichern()
|
||||
feedback("Daten erfolgreich gespeichert. Siehe: 'MeinTinnitus.wav' ", "white", "blue")
|
||||
feedback("Daten erfolgreich gespeichert. Siehe: 'MeinTinnitus.wav' ")
|
||||
except:
|
||||
feedback("Fehlgeschlagener Speicherversuch! Mögliche Gründe: Erst Namen links eintragen.", "yellow", "red")
|
||||
feedback("Falls es danach immer noch nicht geht, bitte Microsoft Excel schließen.", "yellow", "red")
|
||||
feedback("Fehlgeschlagener Speicherversuch! Bitte schließe Microsoft Excel.", "white", "red")
|
||||
|
||||
|
||||
def unten_button_play_press():
|
||||
print("button play pressed")
|
||||
feedback("Starte Audioausgabe...", "white", "green")
|
||||
feedback("Starte Audioausgabe...", fontcolor="green")
|
||||
sound.mute = False # when this boolean is set to false no audio can ever play (it`s like a savety switch)
|
||||
sound.play()
|
||||
|
||||
|
||||
def unten_button_stop_press():
|
||||
print("button stop press")
|
||||
feedback("Stoppe Audioausgabe", "white", "red") # place text in feedback field, fontcololor, backgroundcolor
|
||||
feedback("Stoppe Audioausgabe", fontcolor="red") # place text in feedback field, fontcololor, backgroundcolor
|
||||
sound.mute = True
|
||||
sound.stop()
|
||||
|
||||
|
||||
def feedback(text, fontcolor, backgroundcolor):
|
||||
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
|
||||
@ -153,6 +150,7 @@ def feedback(text, fontcolor, backgroundcolor):
|
||||
untenFeedbackText.tag_config("Line"+str(feedback.lineCounter), foreground=fontcolor, background=backgroundcolor)
|
||||
|
||||
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 """
|
||||
@ -330,7 +328,7 @@ untererRechterFrame.grid(row=1, column=1, sticky=(N+S+E+W))
|
||||
|
||||
|
||||
# ------------ PROGRAMM OUTPUT ------------
|
||||
untenFeedbackText = Text(untererRechterFrame, height=13, width=85, bg="lightblue") # write feedback to patient here
|
||||
untenFeedbackText = Text(untererRechterFrame, height=13, width=85, bg="lightsteelblue") # write feedback to patient here
|
||||
#untenFeedbackText.config(state=DISABLED) # make the text widget readonly
|
||||
untenFeedbackText.place(relx=.5, rely=.5, anchor="center") # the only time I used .place instead of grid, because it
|
||||
# lets me place the widget in the middle of the frame
|
||||
|
Loading…
x
Reference in New Issue
Block a user