|
|
|
|
|
|
|
|
from scipy import signal |
|
|
from scipy import signal |
|
|
import csv |
|
|
import csv |
|
|
import time |
|
|
import time |
|
|
import matplotlib.pyplot as plt |
|
|
|
|
|
|
|
|
#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 |
|
|
|
|
|
|
|
|
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_samplerate = 0 # die samplerate der ausgewählten Musikdatei |
|
|
self.music_data = 0 # das Numpy Array der ausgewählten Musikdatei |
|
|
self.music_data = 0 # das Numpy Array der ausgewählten Musikdatei |
|
|
|
|
|
self.filterfortschritt = 0 # siehe musik_filtern(), zwischen 0 und 100, wird für die feedback-fkt gebraucht |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def wav_speichern(self): # ezeugt/aktuallisiert die .wav-Datei |
|
|
def wav_speichern(self): # ezeugt/aktuallisiert die .wav-Datei |
|
|
|
|
|
|
|
|
wav_obj = wave.open(self.wav_name, "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 = self.framerate * 3 # entspricht 3 Sekunden |
|
|
|
|
|
|
|
|
frames = self.framerate * 10 # entspricht 10 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) |
|
|
|
|
|
|
|
|
self.nframes = len(audio) |
|
|
self.nframes = len(audio) |
|
|
wav_obj.setparams((self.nchannels, self.sampwidth, self.framerate, self.nframes, self.comptype, self.compname)) |
|
|
wav_obj.setparams((self.nchannels, self.sampwidth, self.framerate, self.nframes, self.comptype, self.compname)) |
|
|
|
|
|
|
|
|
|
|
|
packedMusic = [] # Liste an die wir die einzelnen frames bereits in binär umgewandelt aneinanderreihen |
|
|
|
|
|
|
|
|
#Die Audiosamples schreiben |
|
|
#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(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 |
|
|
|
|
|
|
|
|
for x in range(self.nframes): # geht jeden Sample-Wert der Musikdatei einzeln durch |
|
|
|
|
|
# Die Audiodaten müssen von float in einen passenden int-Wert umgerechnet werden |
|
|
|
|
|
packedMusic.append(struct.pack('h', int(audio[x][0] * 32767.0))) |
|
|
|
|
|
packedMusic.append(struct.pack('h', int(audio[x][0] * 32767.0))) |
|
|
|
|
|
|
|
|
|
|
|
value_str = b"".join(packedMusic) |
|
|
|
|
|
wav_obj.writeframes(value_str) |
|
|
|
|
|
|
|
|
wav_obj.close() |
|
|
wav_obj.close() |
|
|
print("Speichern beendet.") |
|
|
print("Speichern beendet.") |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# Die Audiosamples schreiben |
|
|
# Die Audiosamples schreiben |
|
|
print("Musikdatei wird erstellt...") |
|
|
print("Musikdatei wird erstellt...") |
|
|
for tinnitus_data in range(self.music_samplerate * 60): #Kann mit nframes ersetzt werden, für den ganzen Song |
|
|
|
|
|
|
|
|
for tinnitus_data in range(nframes): #geht jeden Sample-Wert der Musikdatei einzeln durch |
|
|
# Die Audiodaten müssen von float in einen passenden int-Wert umgerechnet werden |
|
|
# Die Audiodaten müssen von float in einen passenden int-Wert umgerechnet werden |
|
|
packedMusic.append(struct.pack('h', int(music_links[tinnitus_data] * 32767.0))) |
|
|
packedMusic.append(struct.pack('h', int(music_links[tinnitus_data] * 32767.0))) |
|
|
packedMusic.append(struct.pack('h', int(music_rechts[tinnitus_data] * 32767.0))) |
|
|
packedMusic.append(struct.pack('h', int(music_rechts[tinnitus_data] * 32767.0))) |
|
|
|
|
|
|
|
|
# wav_obj.writeframes(struct.pack('h', int(music_links[x] * 32767.0))) # Werte für links und rechts werden bei |
|
|
# wav_obj.writeframes(struct.pack('h', int(music_links[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.writeframes(struct.pack('h', int(musicRechts[x] * 32767.0))) # wav abwechselnd eingetragen |
|
|
if tinnitus_data % 10000 == 0: |
|
|
if tinnitus_data % 10000 == 0: |
|
|
fortschritt = tinnitus_data/(self.music_samplerate*20)*100 |
|
|
|
|
|
print(" ", round(fortschritt, 1), "%") |
|
|
|
|
|
|
|
|
fortschritt = tinnitus_data/nframes*100 |
|
|
|
|
|
self.filterfortschritt = round(fortschritt, 1) |
|
|
|
|
|
print(" ", self.filterfortschritt, "%") |
|
|
|
|
|
|
|
|
end_time = time.time() |
|
|
end_time = time.time() |
|
|
print("Zeitaufwand für das packen der einzelnen Samples =", end_time - start_time, "s") |
|
|
print("Zeitaufwand für das packen der einzelnen Samples =", end_time - start_time, "s") |