diff --git a/TinnitusAnalyse/SoundGenerator.py b/TinnitusAnalyse/SoundGenerator.py index 3b5c5c9..8382e73 100644 --- a/TinnitusAnalyse/SoundGenerator.py +++ b/TinnitusAnalyse/SoundGenerator.py @@ -14,7 +14,7 @@ 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, l_rausch_ug=0, r_rausch_ug=0, l_rausch_og=0, r_rausch_og=0): + def __init__(self, l_freq=0, r_freq=0, l_amp=0, r_amp=0, l_rausch=0, r_rausch=0, ohr=0, l_rausch_ug=10, r_rausch_ug=10, l_rausch_og=20000, r_rausch_og=20000): self.vorname = "" self.nachname = "" self.kommentar = "" @@ -41,6 +41,7 @@ class Tinnitus: # beinhaltet alle Werte, die vom Nutzer eingestellt werden 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 Lautstärke;" + str(self.rechtsRauschenLautstaerke) + "\n" @@ -80,25 +81,26 @@ class Sound: self.start_idx = 0 # wird für sound_obj benötigt def wav_speichern(self): # ezeugt/aktuallisiert die .wav-Datei - # MOMENTAN NUR MONO print("Sound wird als .wav-Datei gespeichert. Bitte warten...\nDer Vorgang kann ca. 30 Sekunden dauern") wav_obj = wave.open("MeinTinnitus.wav", "w") # Die Callback-Funktion aufrufen, um die Audiodaten zu bekommen - frames = 44100 # entspricht 1 Sekunde + frames = 44100 * 3 # entspricht 1 Sekunde status = "" # für den Funktionsaufruf benötigt, sonst keine Funktion audio = np.ones((frames, 2)) audio = self.callback(audio, frames, self.sound_obj.time, status) # Rahmenparameter für die .wav-Datei setzen - wav_obj.setnchannels(1) # mono + wav_obj.setnchannels(2) # mono wav_obj.setsampwidth(self.sampwidth) wav_obj.setframerate(self.framerate) - for sample in audio[:, 0]: # geht gerade nur die Werte des linken Ohrs (0) durch + #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(sample * 32767.0))) #beschreibt die Datei mit diesen Werten + wav_obj.writeframes(struct.pack('h', int(audio[x][0] * 32767.0))) # Werte für links und rechts werden bei + wav_obj.writeframes(struct.pack('h', int(audio[x][1] * 32767.0))) # wav abwechselnd eingetragen wav_obj.close() print("Speichern beendet.") diff --git a/TinnitusAnalyse/TinnitusAnalyse_GUI.py b/TinnitusAnalyse/TinnitusAnalyse_GUI.py index 49a7873..54a812c 100644 --- a/TinnitusAnalyse/TinnitusAnalyse_GUI.py +++ b/TinnitusAnalyse/TinnitusAnalyse_GUI.py @@ -3,7 +3,6 @@ from tkinter import * from SoundGenerator import * import csv import time -#todo: in die Obere/untere Grenz Scale cghange Funktionen sicher gehen, dass keine Fehler mehr auftreten (zB :og < ug) """--------------------------FUNKTIONEN DIE DURCH GUI KLICKS AUSGEFÜHRT WERDEN---------------------------------------""" """-------Funktionen links-------------""" @@ -124,13 +123,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 + feedback("Speichere Sound als '.wav'-Datei. Das kann ca. 10 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' ") + feedback("Daten erfolgreich gespeichert. Siehe: 'MeinTinnitus.wav' ", "white", "green") except: feedback("Fehlgeschlagener Speicherversuch! Bitte schließe Microsoft Excel.", "white", "red")