2 votes

Comment convertir les données voice.csv en format audio wav ?

J'utilise des données voice.csv pour les convertir en format audio wav mais il y a 21 colonnes et dans mon code il n'attend que deux valeurs (colonnes), alors quels changements dois-je faire dans mon code pour créer un formulaire wav.

Les données proviennent de https://www.kaggle.com/primaryobjects/voicegender qui contient également une description des données :

Les propriétés acoustiques suivantes de chaque voix sont mesurées et incluses dans le CSV :

  • meanfreq : fréquence moyenne (en kHz)
  • sd : écart-type de la fréquence
  • median : fréquence médiane (en kHz)
  • Q25 : premier quantile (en kHz)
  • Q75 : troisième quantile (en kHz)
  • IQR : intervalle interquantile (en kHz)
  • skew : asymétrie (voir note dans la description de specprop)
  • kurt : kurtosis (voir note dans la description de specprop)
  • sp.ent : entropie spectrale
  • sfm : planéité spectrale
  • mode : fréquence du mode
  • centroid : centroïde de fréquence (voir specprop)
  • peakf : fréquence de crête (fréquence avec la plus haute énergie)
  • meanfun : moyenne de la fréquence fondamentale mesurée sur l'ensemble du signal acoustique
  • minfun : fréquence fondamentale minimale mesurée à travers le signal acoustique
  • maxfun : fréquence fondamentale maximale mesurée à travers le signal acoustique
  • meandom : moyenne de la fréquence dominante mesurée sur l'ensemble du signal acoustique
  • mindom : minimum de la fréquence dominante mesurée à travers le signal acoustique
  • maxdom : maximum de la fréquence dominante mesurée dans le signal acoustique
  • dfrange : gamme de fréquence dominante mesurée à travers le signal acoustique
  • modindx : indice de modulation. Calculé comme la différence absolue cumulée entre les mesures adjacentes des fréquences fondamentales, divisée par la gamme de fréquences.
  • étiquette : homme ou femme

Mon code prévoit une saisie sur deux colonnes. J'ai essayé de convertir ces colonnes en temps et en fréquence en sautant plusieurs colonnes, mais je n'obtiens pas les résultats que je souhaite.

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('voice.csv'), 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 !")

ValueError                                Traceback (most recent call 
last)
<ipython-input-10-ad8c56a24b4d> in <module>
  6 
  7         data = []
----> 8         for time, value in csv.reader(open('voice.csv'), 
delimiter=','):
  9             try:
 10                 data.append(float(value))#Here you can see that the 
time column is skipped

ValueError: too many values to unpack (expected 2)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X