Code aufgeraeumt

Kommentare ueberarbeitet
unnoetigen Code geloescht/zusammengefasst
This commit is contained in:
Heiko Ommert 2020-06-26 13:24:25 +02:00
parent 521b5d3ea3
commit 4e63ebc564
2 changed files with 11 additions and 15 deletions

View File

@ -1,11 +1,9 @@
import math
import wave # bearbeiten von .wav-Dateien import wave # bearbeiten von .wav-Dateien
import struct import struct
import sounddevice as sd 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 time as tm
"""--------------------------------------------------------------------------------------------------------------------- """---------------------------------------------------------------------------------------------------------------------
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
@ -23,13 +21,12 @@ class Tinnitus: # beinhaltet alle Werte, die vom Nutzer eingestellt werden
self.rechtsFrequenz = r_freq self.rechtsFrequenz = r_freq
self.linksLautstaerke = l_amp self.linksLautstaerke = l_amp
self.rechtsLautstaerke = r_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.rechtsRauschenLautstaerke = r_rausch
self.linksRauschenUntereGrenzfrequenz = l_rausch_ug self.linksRauschenUntereGrenzfrequenz = l_rausch_ug
self.rechtsRauschenUntereGrenzfrequenz = r_rausch_ug self.rechtsRauschenUntereGrenzfrequenz = r_rausch_ug
self.linksRauschenObereGrenzfrequenz = l_rausch_og self.linksRauschenObereGrenzfrequenz = l_rausch_og
self.rechtsRauschenObereGrenzfrequenz = r_rausch_og self.rechtsRauschenObereGrenzfrequenz = r_rausch_og
self.ohr = ohr # 0:both 1:left 2:right 3:links/rechts unterschiedlich
def speichern(self): # speichert die Nutzerdaten in eine .csv-Datei def speichern(self): # speichert die Nutzerdaten in eine .csv-Datei
datei = open("TinnitusDaten.csv", "w") datei = open("TinnitusDaten.csv", "w")
@ -57,17 +54,17 @@ class Tinnitus: # beinhaltet alle Werte, die vom Nutzer eingestellt werden
"""---------------------------------KLASSE: SOUND----------------------------------------------------------------------- """---------------------------------KLASSE: SOUND-----------------------------------------------------------------------
Sound beinhaltet alle Variablen, die zum erstellen einer .wav-Datei benötigt werden (siehe soun.wav_speichern()) 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()) Das 'sound_obj' ist für das dynamische abspielen zuständig (siehe sound.play())
Beim Initialisieren muss eine Tinnitus-Objekt übergeben werden Beim Initialisieren muss ein Tinnitus-Objekt übergeben werden
---------------------------------------------------------------------------------------------------------------------""" ---------------------------------------------------------------------------------------------------------------------"""
class Sound: class Sound:
def __init__(self, tinnitus, name="MeinTinnitus.wav", audio=None, nchannels=1, sampwidth=2, framerate=44100, def __init__(self, tinnitus, wav_name="MeinTinnitus.wav", audio=None, nchannels=2, sampwidth=2, framerate=44100,
comptype="NONE", compname="not compressed", mute=True): comptype="NONE", compname="not compressed", mute=True):
if audio is None: if audio is None:
audio = [] audio = []
self.tinnitus = tinnitus self.tinnitus = tinnitus
self.name = name self.wav_name = wav_name #Der Dateiname
self.audio = audio # ein Array, in das die Sound-Werte geschrieben werden (von -1, bis +1) 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.nchannels = nchannels # Zahl der audio channels (1:mono 2:stereo)
self.sampwidth = sampwidth # Größe eines einzelnen Sound-Werts (in bytes) self.sampwidth = sampwidth # Größe eines einzelnen Sound-Werts (in bytes)
@ -81,20 +78,19 @@ class Sound:
self.start_idx = 0 # wird für sound_obj benötigt self.start_idx = 0 # wird für sound_obj benötigt
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. 30 Sekunden dauern") print("Sound wird als .wav-Datei gespeichert. Bitte warten...\nDer Vorgang kann ca. 10 Sekunden dauern")
wav_obj = wave.open("MeinTinnitus.wav", "w") wav_obj = wave.open(self.wav_name, "w")
# Die Callback-Funktion aufrufen, um die Audiodaten zu bekommen # Die Callback-Funktion aufrufen, um die Audiodaten zu bekommen
frames = 44100 * 3 # entspricht 1 Sekunde frames = self.framerate * 3 # entspricht 3 Sekunden
status = "" # für den Funktionsaufruf benötigt, sonst keine Funktion status = "" # für den Funktionsaufruf benötigt, sonst keine Funktion
audio = np.ones((frames, 2)) audio = np.ones((frames, 2))
audio = self.callback(audio, frames, self.sound_obj.time, status) audio = self.callback(audio, frames, self.sound_obj.time, status)
# Rahmenparameter für die .wav-Datei setzen # Rahmenparameter für die .wav-Datei setzen
wav_obj.setnchannels(2) # mono self.nframes = len(audio)
wav_obj.setsampwidth(self.sampwidth) wav_obj.setparams((self.nchannels, self.sampwidth, self.framerate, self.nframes, self.comptype, self.compname))
wav_obj.setframerate(self.framerate)
#Die Audiosamples schreiben #Die Audiosamples schreiben
for x in range(frames): for x in range(frames):
@ -154,7 +150,7 @@ class Sound:
outdata[:, 1] = signal.sosfilt(sos, outdata[:, 1]) outdata[:, 1] = signal.sosfilt(sos, outdata[:, 1])
# Sinus ins Array schreiben: 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:
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 *

View File

@ -130,7 +130,7 @@ def unten_button_speichern_press():
tinnitus.kommentar = untenTextKommentar.get("1.0", END) tinnitus.kommentar = untenTextKommentar.get("1.0", END)
tinnitus.speichern() tinnitus.speichern()
sound.wav_speichern() sound.wav_speichern()
feedback("Daten erfolgreich gespeichert. Siehe: 'MeinTinnitus.wav' ", "white", "green") feedback("Daten erfolgreich gespeichert. Siehe: " + sound.wav_name, "white", "green")
except: except:
feedback("Fehlgeschlagener Speicherversuch! Bitte schließe Microsoft Excel.", "white", "red") feedback("Fehlgeschlagener Speicherversuch! Bitte schließe Microsoft Excel.", "white", "red")