sound.wav_speichern() angepasst
Holt die Audio-Daten jetzt aus der callback-Funktion Bisher nur Monosound (nutzt Daten des linken Ohrs) CDafer waren kleine Aenderungen an der callback-Funktion noetig
This commit is contained in:
parent
2f3d0366d1
commit
2650b77806
@ -80,21 +80,27 @@ class Sound:
|
||||
self.start_idx = 0 # wird für sound_obj benötigt
|
||||
|
||||
def wav_speichern(self): # ezeugt/aktuallisiert die .wav-Datei
|
||||
wav_file = wave.open(self.name, "w")
|
||||
# MOMENTAN NUR MONO
|
||||
print("Sound wird als .wav-Datei gespeichert. Bitte warten...\nDer Vorgang kann ca. 30 Sekunden dauern")
|
||||
# zuerst muss ein Array mit Audiodaten gefüllt werden
|
||||
|
||||
audio = self.outdata
|
||||
wav_obj = wave.open("MeinTinnitus.wav", "w")
|
||||
|
||||
# erst werden die Rahmen-Parameter gesetzt
|
||||
self.nframes = len(audio) # Anpassen des nframes-Parameters
|
||||
wav_file.setparams((self.nchannels, self.sampwidth, self.framerate, self.nframes, self.comptype, self.compname))
|
||||
# Die Callback-Funktion aufrufen, um die Audiodaten zu bekommen
|
||||
frames = 44100 # 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)
|
||||
|
||||
# dann wird das audio-Array an die Datei übertragen
|
||||
for sample in audio:
|
||||
wav_file.writeframes(struct.pack('h', int(sample * 32767.0)))
|
||||
# Rahmenparameter für die .wav-Datei setzen
|
||||
wav_obj.setnchannels(1) # mono
|
||||
wav_obj.setsampwidth(self.sampwidth)
|
||||
wav_obj.setframerate(self.framerate)
|
||||
|
||||
wav_file.close()
|
||||
for sample in audio[:, 0]: # geht gerade nur die Werte des linken Ohrs (0) durch
|
||||
#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.close()
|
||||
print("Speichern beendet.")
|
||||
|
||||
"""Die Objekt-Funktion 'start()' startet die asynchrone Soundwiedergabe. Sie ruft dabei immer wieder die Funktion
|
||||
@ -117,7 +123,7 @@ class Sound:
|
||||
|
||||
|
||||
# Whitenoise erzeugen
|
||||
for x in range(frames):
|
||||
for x in range(len(outdata)):
|
||||
rand = (np.random.rand() - 0.5) # Zufallszahl zwischen -0.5 und 0.5
|
||||
# links:
|
||||
outdata[x][0] = rand * self.tinnitus.linksRauschenLautstaerke
|
||||
@ -147,7 +153,7 @@ class Sound:
|
||||
|
||||
|
||||
# Sinus ins Array schreiben: f(t) = A * sin(2 * pi * f * t)
|
||||
for x in range(frames):
|
||||
for x in range(len(outdata)):
|
||||
# links:
|
||||
outdata[x][0] += self.tinnitus.linksLautstaerke * np.sin(2 * np.pi * self.tinnitus.linksFrequenz *
|
||||
((x + self.start_idx) / self.framerate))
|
||||
@ -156,3 +162,5 @@ class Sound:
|
||||
((x + self.start_idx) / self.framerate))
|
||||
|
||||
self.start_idx += frames
|
||||
|
||||
return outdata
|
||||
|
Loading…
x
Reference in New Issue
Block a user