Code aufgeraeumt
Kommentare ueberarbeitet unnoetigen Code geloescht/zusammengefasst
This commit is contained in:
parent
521b5d3ea3
commit
4e63ebc564
@ -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 *
|
||||||
|
@ -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")
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user