3. Códigos Pitch (2016)

Pràctica Español
Universidad Universidad Politécnica de Cataluña (UPC)
Grado Ingeniería de Sistemas Audiovisuales - 3º curso
Asignatura Procesado de Audio y Voz
Año del apunte 2016
Páginas 4
Fecha de subida 27/04/2016
Descargas 1
Subido por

Vista previa del texto

Práctica 3: Detección de pitch Javier de la Rica pitch_analyzer.cpp void PitchAnalyzer::autocorrelation(const vector<float> &x, vector<float> &r) const { //Computer autocorrelation r[l] for (unsigned int l=0; l< r.size(); ++l) { for(unsigned int n=0; n<x.size()-1-l; ++n){ r[l]=x[n]*x[n+l] + r[l]; } r[l]=(1.0F/x.size())*r[l]; } } void PitchAnalyzer::set_window(Window win_type) { if (frameLen == 0) return; window.resize(frameLen); switch (win_type) { case HAMMING:{ //implement the hamming window float a0=0.53836F; float a1=0.46164F; for(unsigned int i=0; i<frameLen; ++i){ window[i]=a0-a1*cos((2*M_PI*i)/(frameLen-1)); }} break; case RECT: default: window.assign(frameLen, 1); } } Práctica 3: Detección de pitch Javier de la Rica bool PitchAnalyzer::unvoiced(const vector<float> &r, vector<float>::const_iterator iX) const { //TODO //Implement a rule to decide if the sound is voiced or not // -> Look at R(0) // -> Look at R(1)/R(0) // -> Look at R(max)/R(0) ... *iX /r[0] //First, you can print these values and look at them using wavesurfer if (r[0] <= 0.0003F && (r[1]/r[0])<0.6F) return true; else return false; } float PitchAnalyzer::compute_pitch(vector<float> & x) const { if (x.size() != frameLen) return -1.0F; //Window input frame for (unsigned int i=0; i<x.size(); ++i) x[i] *= window[i]; vector<float> r(npitch_max); while(*iR>0){ ++iR; } if (iR<r.begin() + npitch_min) iR += npitch_min; iRMax = iR; while(iR!=r.end()){ if(*iR>*iRMax){ iRMax=iR; //iRmax: Posición donde está el máximo Práctica 3: Detección de pitch Javier de la Rica } ++iR; } //cout << *iRMax << endl; if (unvoiced(r, iRMax)) return 0; if (iRMax == r.begin()) //Not found (?) return 0; int lag = iRMax - r.begin(); return (float) samplingFreq/(float) lag; } Práctica 3: Detección de pitch Javier de la Rica run_get_pitch.cpp #!/bin/bash GETF0 = "/home/jdelarica/Desktop/Lab3/src/get_pitch" for fwav in pitch_db/*.wav; do echo "$fwav ----" ff0=${fwav/.wav/.f0} $GETF0 $fwav $ff0 || (echo "Error in $GETF0 $fwav $ff0"; exit 1) done exit 0 ...