Hallihallo Community,
ich wollte in python mal ein bisschen rumspielen und mit wavedateien graphisch ausgeben lassen.
dazu benötige ich aber einen weg die amplitude an einer gewissen stelle auszulesen.
ich habe bereits eine Wave datei geladen (via import wave) und kann auch ohne probleme darauf zugreifen (via wavefile.readframes(x))
Dennoch habe ich nocht nicht ganz verstanden wie mir diese daten helfen eine amplitude auszuwerten.
Wie geht man an sowas ran bzw. was für daten bekomm ich denn eigentich bei wavefile.readframes(x)?
Danke für eure Hilfe!
Wave Amplitude
-
- User
- Beiträge: 456
- Registriert: Mittwoch 15. April 2009, 14:11
Leider finde ich dazu keine Dokumentation.
Und interne Lösungen wären mir eigentlich lieber, zumal ja wave auch (brauchbare) informationen ausgiebt.
Und interne Lösungen wären mir eigentlich lieber, zumal ja wave auch (brauchbare) informationen ausgiebt.
Gut, das läuft wohl nur über TKinter, aber Doku gibt es schon dafür: http://www.speech.kth.se/snack/man/snac ... n-man.html
Was stellst du dir unter interner Lösung vor? Toolkitunabhängig? Dann musst du das wahrscheinlich selbst berechnen und übertragen.
Was stellst du dir unter interner Lösung vor? Toolkitunabhängig? Dann musst du das wahrscheinlich selbst berechnen und übertragen.
-
- User
- Beiträge: 456
- Registriert: Mittwoch 15. April 2009, 14:11
genau!
Ganz unabhängig von externen Modulen.
Ich hab hier ein Script, dass eine Wave Datei erzeugt. Dazu brauch man das Modul struct .
Ich habs noch nicht ganz verstanden. Wäre nett wenn mir jemand einen Tipp geben könnte.
Ich will eben keine Datei schreiben, sondern nur die Amplitude an einem gewissen Frame auslesen!
Edit:
Hier hab ich auch noch ein nettes snippet, bin gerade dabei rauszufinden, was in dem numpy array data steht.
Ich plotte mal das Ergebnis, vielleicht sind es ja die waveforms, die ich brauche!
Danke!
Ganz unabhängig von externen Modulen.
Ich hab hier ein Script, dass eine Wave Datei erzeugt. Dazu brauch man das Modul struct .
Ich habs noch nicht ganz verstanden. Wäre nett wenn mir jemand einen Tipp geben könnte.
Code: Alles auswählen
# create a synthetic 'sine wave' wave file with set frequency and length
# tested with Python25 and Python30 by vegaseat 28dec2008
import math
import wave
import struct
def make_soundfile(freq=440, data_size=10000, filename="sine_wave1.wav"):
"""
create a synthetic 'sine wave' wave file with frequency freq
file has a length of about data_size*2 and the given filename
"""
frate = 11025.0 # framerate as a float
amp = 8000.0 # multiplier for amplitude
# make a sine list ...
sin_list = []
for i in range(data_size):
sin_list.append(2 * math.sin(math.pi*freq*(i/frate)))
wav_file = wave.open(filename, "w")
# required parameters ...
nchannels = 1
sampwidth = 2
framerate = int(frate)
nframes = size
comptype = "NONE"
compname = "not compressed"
# set all the parameters at once
wav_file.setparams((nchannels, sampwidth, framerate, nframes,
comptype, compname))
# now write out the file
print("may take a few seconds ...")
for s in sin_list:
# write the audio frames, make sure nframes is correct
wav_file.writeframes(struct.pack('h', s*amp/2))
wav_file.close()
print( "%s written" % filename)
# set some variables ...
freq = 440.0
size = 40000 # data size, file size will be about twice that
# write the synthetic wave file to ...
filename = "WaveTest2.wav"
make_soundfile(freq, size, filename)
Edit:
Hier hab ich auch noch ein nettes snippet, bin gerade dabei rauszufinden, was in dem numpy array data steht.
Ich plotte mal das Ergebnis, vielleicht sind es ja die waveforms, die ich brauche!
Danke!
Code: Alles auswählen
def readwave(wavfilename):
w=wave.open(wavfilename,'rb')
(nchannel, width, rate, length, comptype, compname) = w.getparams()
frames = w.readframes(length)
data = numpy.array(struct.unpack("%sh" %length*nchannel, frames)).reshape(length,nchannel)
return data
-
- User
- Beiträge: 456
- Registriert: Mittwoch 15. April 2009, 14:11
Mit dem unteren Code hat es nun geklappt!
Ich bekomm aufjedenfall brauchbare Werte raus, die mir eine Art Waveform liefern!
Echt klasse:
Hab das ganze mit einer sinusgenerierten Wellenlänge verglichen,
sind ähnlich aus.
Wäre trotzdem nett, wenn mir jemand das ein oder andere erklären könnte!
Danke!
Ich bekomm aufjedenfall brauchbare Werte raus, die mir eine Art Waveform liefern!
Echt klasse:
Hab das ganze mit einer sinusgenerierten Wellenlänge verglichen,
sind ähnlich aus.
Wäre trotzdem nett, wenn mir jemand das ein oder andere erklären könnte!
Danke!
Das sollte helfen: http://de.wikipedia.org/wiki/Wavanogayales hat geschrieben:Wäre trotzdem nett, wenn mir jemand das ein oder andere erklären könnte!Danke!