Kezdőoldal » Számítástechnika » Programozás » Valaki el tudja magyarázni...

Valaki el tudja magyarázni ezt a PYTHON programot?

Figyelt kérdés

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.



2021. febr. 20. 11:08
 1/4 anonim ***** válasza:
88%

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")`.

2021. febr. 20. 12:06
Hasznos számodra ez a válasz?
 2/4 anonim ***** válasza:
100%
Azt mondjuk elárulhatnád, hogy milyena adatokat tartalmaz az a csv file? Mert hiába találtál egy random kódot a neten, ami szintén csv-ből csinál wavot, nem biztos hogy ugyanaz a formátuma a csv-nek, mint ami a tiéd.
2021. febr. 20. 13:52
Hasznos számodra ez a válasz?
 3/4 A kérdező kommentje:

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 !")

2021. febr. 20. 14:18
 4/4 A kérdező kommentje:

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:

[link]

[link]


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 !")

2021. febr. 20. 14:41

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

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!