Valaki el tudja magyarázni ezt a PYTHON programot?
Kell írjak egy programot, ami .csv fileból beolvassa az adatokat és átalakítja hang formátummá(.wav). Találtam egy kódot a neten, de nem értem, valaki lenne kedves elmagyarázni? Itt van a kód: [link]
A csv fileom csak egy nagy oszlóból áll. (12812*1)
A válaszokat előre is köszönöm, sokat segítenétek vele. Mindenkine szép napot kívánok.
Mit nem értesz rajta? Minden sor mellé tegyél egy kommentet, hogy mit csinál, így te is érteni fogod, hogy mi mit csinál és mi is látjuk, hogy mit nem értesz.
Remélem ez önmagában sem okoz fejfájász `wavfile = wave.open(filename, "w")`.
Bocsi hogy pontatlan voltam, itt a kód, commentelve írom ami nem tiszta:
import wave
import struct
import sys
import csv
import numpy
from scipy.io import wavfile
from scipy.signal import resample
def write_wav(data, filename, framerate, amplitude):
wavfile = wave.open(filename,'w')
nchannels = 1
sampwidth = 2
framerate = framerate
nframes = len(data)
comptype = "NONE"
compname = "not compressed"
wavfile.setparams((nchannels,
sampwidth,
framerate,
nframes,
comptype,
compname))
frames = []
for s in data:
mul = int(s * amplitude)
frames.append(struct.pack('h', mul))
frames = ''.join(frames)
wavfile.writeframes(frames)
wavfile.close()
print("%s written" %(filename))
if __name__ == "__main__":
if len(sys.argv) <= 1:
print ("You must supply a filename to generate")
exit(-1)
for fname in sys.argv[1:]:
data = []
for time, value in csv.reader(open(fname, 'U'), delimiter=','):
try:
data.append(float(value))#Here you can see that the time column is skipped
except ValueError:
pass # Just skip it
arr = numpy.array(data)#Just organize all your samples into an array
# Normalize data
arr /= numpy.max(numpy.abs(data)) #Divide all your samples by the max sample value
filename_head, extension = fname.rsplit(".", 1)
data_resampled = resample( arr, len(data) )
wavfile.write('rec.wav', 16000, data_resampled) #resampling at 16khz
print ("File written succesfully !")
Bocsi, az elobb ugyetlenkedtem es elkuldtem kommentek nelkul... Igazabol nem ertem ugy az egeszet mi miert van, miert van szukseg arra a nagy if-re, meg azt sem tudom pontosan hova kellene beirjam a csv fileom nevet, tehat egy ilyen atfogo magyarazatra lenne szuksegem.
A csv file amit at szeretnek alakitani az itt van: [link] - en csak a "raw" oszlopbol szeretnek wav-t. Mivel latom a space-eket kitorli, feltoltom kep formalyaban is:
Koszonom szepen az idotoket es a valaszotokat.
import wave
import struct
import sys
import csv
import numpy
from scipy.io import wavfile
from scipy.signal import resample
def write_wav(data, filename, framerate, amplitude):
wavfile = wave.open(filename,'w')
nchannels = 1
sampwidth = 2
framerate = framerate ##nem ertem hogy mi is ez a framerate
nframes = len(data)
comptype = "NONE"
compname = "not compressed"
wavfile.setparams((nchannels, ## gondolom hogy ezekkel az ertekekkel
sampwidth, ## allitom be hogy milyen legyen a wav fileom
framerate,
nframes,
comptype,
compname))
frames = []
for s in data:
mul = int(s * amplitude) ## mi az az "s" es "mul"
frames.append(struct.pack('h', mul)) ## MIT CSINAL A PACK?
frames = ''.join(frames) ## mit csinal ez a sor?
wavfile.writeframes(frames) ## mit csinal ez a sor?
wavfile.close()
print("%s written" %(filename))
# egyaltalan miert van ez az egesz if?
if __name__ == "__main__": ## mikor irunk igy if-t, mi ennek az ertelme
if len(sys.argv) <= 1: ## miert igy van a feltetel megszabva?
print ("You must supply a filename to generate")
exit(-1)
for fname in sys.argv[1:]: #miert kell beagyazott ciklus?
data = []
for time, value in csv.reader(open(fname, 'U'), delimiter=','): ## miert igy van a feltetel megszabva
try:
data.append(float(value))#Here you can see that the time column is skipped
except ValueError:
pass # Just skip it
arr = numpy.array(data)#Just organize all your samples into an array
# Normalize data
arr /= numpy.max(numpy.abs(data)) #Divide all your samples by the max sample value
filename_head, extension = fname.rsplit(".", 1)
data_resampled = resample( arr, len(data) )
wavfile.write('rec.wav', 16000, data_resampled) #resampling at 16khz
print ("File written succesfully !")
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!