Gio vin hng dn: GS.TS. Trnh Vn Loan Sinh vin thc hin: Nguyn Thng Khang MSSV: 20083366 Nguyn Anh Sn MSSV: 20082230 Lp : KTMT K53
H Ni - 2012 2
c lc I. L thuyt: ...................................................................................................... 3 1. Khi nim ting ni v x l ting ni: .................................................. 3 1.1. Ting ni: ........................................................................................... 3 1.2. X l ting ni: .................................................................................. 3 2. B my pht m ca con ngi: ............................................................. 3 3. Cc c tnh ca m thanh: .................................................................... 4 3.1. c tnh vt l ca m thanh: .......................................................... 4 3.2. c tnh m hc ca m thanh: ....................................................... 4 4. X l tn hiu ting ni: .......................................................................... 8 4.1. S biu hin v phn tch ting ni: ................................................ 8 4.2. Phng php x l ng hnh: ...................................................... 10 4.3. Xc nh tn s c bn F0: ............................................................. 12 II. hi chng nh ............................................................................... 15 1. C c file ave ................................................................................. 15 1.1. hi ni v p in ave ............................................................... 15 1.2. C c p in ave ..................................................................... 15 2. Phn ch v hi chc nng chng nh ................................... 18 3. Ci chng nh ............................................................................ 18 4. h nghi chng nh ................................................................... 25
3
I. L thuyt: 1. Khi nim ting ni v x l ting ni: 1.1. Ting ni: Ting ni l phng tin trao i thng tin ca con ngi. Trung khu thn kinh iu khin h thng pht m v to ra m thanh. Ting ni phn bit vi cc m thanh khc bi cc c tnh m hc c ngun gc t c ch to ting ni. V bn cht ting ni l s giao ng ca khng kh c mang theo thng tin. Cc giao ng ny to thnh nhng p lc n tai v c tai pht hin, phn tch chuyn n trung khu thn kinh. Lc ny ti trung khu thn kinh thng tin c ti to di dng t duy logic m con ngi c th hiu c. Tn hiu ting ni c to thnh bi chui cc m v lin tip. S sp xp ca cc m v c chi phi bi cc quy tc ca ngn ng. 1.2. X l ting ni: X l ting ni l x l thng tin cha trong tn hiu ting ni nhm lan truyn, lu tr tn hiu ting ni hoc l tng hp nhn dng ting ni. Mc ch ca vic x l ting ni: - M ha ting ni: lan truyn v lu tr ting ni mt cch hiu qu. - Tng hp v nhn dng ting ni: Gip gii quyt cc vn v giao tip gia con ngi v h thng ni chung bng ting ni. - Phn tch ting ni: Phc v cho vic nghin cu v tn hiu ting ni. 2. B my pht m ca con ngi: Cc thnh phn gip cho con ngi c th pht m bao gm: Phi, kh qun v cc ng dn ming mi. Thanh qun: Cha hai dy thanh v c th giao ng to ra s cng hng cn thit to ra m thanh. Khong cch gia hai dy thanh gi l thanh mn. V tr ngun m ca m tun hon nm ti thanh mn. Chu k rung ca dy thanh (T0) c gi l chu k c bn, 1/T0 c gi l tn s c bn. Ton b b my pht m tnh t thanh mn tr ln gi l tuyn m. C ch pht m: - Tuyn m c kch thch bi ngun nng lng chnh ti thanh mn. Lung kh t phi i ln qua kh qun, lung kh ny s va chm vo hai dy thanh trong tuyn m. Hai dy thanh dao ng s to ra cng hng, dao ng m s c lan truyn theo tuyn m v sau khi i qua khoang mi v mi s to ra ting ni. - Khoang mi l ng khng u bt u t mi. Kt thc bi vm ming, c di c nh khong 12cm i vi ngi ln. - Vm ming l cc np c chuyn ng. 4
3. Cc c tnh ca m thanh: 3.1. c tnh vt l ca m thanh: - cao: cao hay cn gi l trm bng ca m thanh. trm bng ca m thanh ph thuc vo s chuyn ng nhanh hay chm ca cc phn t khng kh trong mt n v thi gian. Ni cch khc, cao ph thuc vo tn s giao ng. i vi ting ni, tn s giao ng ca i dy thanh qui nh cao ging ni ca con ngi v mi ngi c mt cao ging ni khc nhau. - Cng : Cng l to nh ca m thanh, cng cng ln th m thanh truyn i cng xa trong mi trng c nhiu. Cng ca sng ting ni do bin dao ng ca song qui nh. Trong ting ni, cng ca nguyn m thng ln hn ph m nn tai ngi nghe nguyn m d hn. - di: di ca m ph thuc vo s chn ng lu hay mau ca cc phn t khng kh. Cng mt m nhng trong cc t khc nhau th di khc nhau. - m sc: m sc l sc thi ring ca mt m, cng mt ni dung, cng mt cao nhng mi ngi c m sc khc nhau. 3.2. c tnh m hc ca m thanh: Nh ni ting ni c to thnh bi cc chui m v lien tip. S sp xp ca cc m v c chi phi bi cc qui tc ngn ng. Mi ngn ng c s lng cc m v khc nhau, thng thng c 20 30 v b hn 50 cho mi ngn ng. Cc m v chia lm hai loi chnh nguyn m v ph m. a. Nguyn m v ph m: Tn hiu ting ni l tn hiu tng t biu din thng tin v mt ngn ng v c m t bi cc m v khc nhau. Nh vy m v l n v nh nht ca ngn ng. Ty theo tng ngn ng c th m s lng cc m v khc nhau. Cc m v c chia thnh: nguyn m v ph m. Nguyn m: Nguyn m c to thnh bng s cng hng ca dy thanh khi dng kh c thanh mn y ln. Khoang ming c to lp thnh nhiu hnh dng nht to thnh cc nguyn m khc nhau. Mi nguyn m c c trng bi ba formant u. Ph m: Ph m c to ra bi cc dng kh hn lon c pht ra gn nhng im co tht ca ng dn m thanh do cch pht m to thnh. Dng khng kh ti ch ng ca vm ming to ra ph m tc. Nhng ph m xt c pht ra t ch co tht ln nht v cc m tc xt to ra t khong gia. Ph m c c tnh hu thanh v v thanh ty thuc vo dy thanh c dao ng to thnh cng hng khng. c tnh ca ph m ty thuc vo tnh chu k ca dng song, ph tn s, thi gian tn ti v s truyn m. H thng m v: H thng m v bao gm 11 nguyn m n, 3 nguyn m i v 22 ph m. S phn bit nguyn m l theo nng ca li v s 5
chuyn ng ca li. S phn loi ph m l theo tc hay xt, hu thanh hay v thanh 11 nguyn m n: STT Nguyn m n V d 1 Y ch 2 ch 3 A A ha 4 Mt 5 Cn c 6 Chi vi 7 Uu t 8 C gio 9 O Con b 10 U Xch u 11 E E d
Nguyn m i: STT Nguyn m i 1 ia, y, i, ya 2 ua, u 3 a,
6
22 ph m STT Ph m STT Ph m 1 B 12 Tr 2 P 13 S 3 V 14 R 4 Ph 15 Ch 5 M 16 Nh 6 17 Ng, ngh 7 T 18 Kh 8 Th 19 G, gh 9 D, gi 20 H 10 N 21 X 11 L 22 C, k, q
b. m hu thanh v m v thanh: m hu thanh: m hu thanh c to ra t cc dy thanh b cng ng thi v chng rung ng ch dn khi khng kh tng ln lm thanh mn m ra v sau thanh mn xp xung. Do s cng hng ca dy thanh, sng m to to ra c dng gn nh tun hon. Ph ca m hu thanh c nhiu thnh phn hi ti gi tr bi s ca tn s cng hng, cn gi l tn s c bn. m v thanh: Khi to ra m v thanh dy thanh khng cng hng. Ngun ca m v thanh l ngun l ngun khng tun hon. N c v tr khng c nh m thay i theo m chng ta to ra. Ph ca ngun m kh u trong mt phm vi rng t vi Hz n KHz. Tuyn m c c trng bi cc b lc thng di.Tn hiu u ra cng l ngu nhin. c. Cc yu t khc: T sut thi gian: Trong khi ni chuyn, khong ni chuyn v khong ngh xen k nhau. T s thi gian ni v ngh gi l t sut thi gian. Hm nng lng ngn: Vic nghin cu x l ting ni trong thc t ch trong mt thi gian hu hn (v mt l thuyt th phi xt cho n v cng), hay trn s mu xc nh. Vic nghin cu trn cc mu ny vi cc k thut nht nh s cho kt qu gn ng so vi l thuyt. Thng thng vic ly mu tn hiu ting ni c thc hin thng qua cc ca s. 7
Tn s vt qua im khng: Tn sut vt qua im khng l s ln bin tn hiu ting ni vt qua gi tr khng trong khong thi gian cho trc. Thng thng gi tr ny ca m v thanh ln hn m hu thanh do c tnh ngu nhin ca m v thanh. c im ny cng c ng dng trong qu trnh tin x l trong nhn dng ting ni t ng. Pht hin im cui: Trong x l ting ni vic xc nh khi no bt u xut hin v kt thc qu trnh ni l rt quan trng v cn thit. C nhiu phng php,v d nh sau: Ly mt mu nh ca nn nhiu trong khong thi gian yn lng trc khi ni. Dng hm nng lng thi gian ngn tnh nng lng cho mu, ngng ca ting ni c chn l gi tr gia nng lng yn tnh v nng lng nh. Ban u gi thit im cui xut hin ti im nng lng tn hiu vt qua ngng. tnh ng c lng ny, ngi ta gi thit so snh chng vi gi tr trong vng yn tnh. Khi nhng thay i pht hin c trong khi tnh ton tn sut trn ngoi ngng gi thit th im cui c gi thit li ti im m s thay i xy ra.
Tn s c bn Ngi ni 80 200 Hz n ng 150 450 Hz Ph n 200 600 Hz Tr em
i vi hai m c cng cao, cng s c phn bit bi tnh tun hon. Mt m hu thanh c tnh tun hon khi phn tch ph s xut hin s xut hin mt vch ti vng tn s rt thp. Vch ny c trng cho tn s c bn ca m. Trong hi thoi tn s c bn thay i lin tc. Formant: Trong ph tn s ca tn hiu ting ni, mi nh c bin cao nht xt trong xt trong mt khong no (cc i khu vc) xc nh mt formant. Ngoi tn s, formant cn c xc nh c bin v gii thng ca chng. V mt vt l cc tn s formant tng ng vi cc tn s cng hng tuyn m. Trong x l ting ni c bit l trong tng hp ting ni, m phng li tuyn m ngi ta phi xc nh c cc tham s formant i vi tng loi m v, do vic nh gi c lng cc formant c ngha rt quan trng. Tn s formant bin i trong mt di rng thuc vo gii tnh ngi ni v i vi tng m v. ng thi formant cn ph thuc vo cc m v trc v sau n. Thng thng ph tn s ting ni cha khong 6 formant nhng nh hng ln nht n c tnh ca m v l 3 formant u tin. 8
Tn s formant c trng cho nguyn m bin i ty thuc vo ngi ni trong iu kin pht m nht nh. Mc d phm vi tn s formant ca cc nguyn m c th trng ln nhau nhng v tr gia cc formant khng i v s x dch ca cc formant l song song. 4. X l tn hiu ting ni: K thut phn tch ting ni c th c phn lp vo min tn s v min thi gian. Mc ch chnh trong phn tch ting ni l nh gi p ng tn s ca b my pht m (tuyn m). Cc k thut x l tn hiu ting ni thng thng l dung dy cc b lc, phn tch Fourier, x l ng hnh hoc cepstral. Khi nim short time analysis l c s cho hu ht cc k thut phn tch ting ni. Gi s rng trong khong thi gian di tn hiu ting ni l khng dng nhng vi khong thi gian nh (10 30 ms), c th xem n l dng. y l l do m s thay i ph tn hiu ting ni c lin h trc tip vi s chuyn ng ca h pht m (mi, c hng) v cc rang buc ng cnh, sinh l khc. V vy cc h thng phn tch ting ni u thc hin trn c s thi gian bin i, vi cc khung thi gian c chn 10 -30 ms. 4.1. S biu hin v phn tch ting ni: Ting ni lin tc l tp hp cc m thanh phc tp m chng ta kh sn sinh nhn to. Tn hiu ting ni c to thnh bi cc chui m v lin tip bao gm nguyn m v ph m. Trong tn hiu ting ni bao gm F0 v cc thnh phn c sn sinh bi cc giy thanh. Tuyn m thay i cc tn hiu ngun to nn Formant. Mi tn s Formant c mt bin v gii thng v i khi kh c th nh ngha cc tham s ny mt cch chnh xc. Tn s c bn v tn s Formant l nhng khi nim quan trng nht trong tng hp v x l ting ni ni chung. Cc m v thanh khng c tn s c bn v c th c xem l nhiu trng. Th thm l trng hp c bit ca ting ni, khi th thm th khng c tn s c bn. Dng ting ni ca 3 nguyn m (/a/, /i/, /u/). Vi min thi gian v min tn s nh trong hnh sau.
9
Hnh 1: Min thoi gian va min tan so cua nguvn am a,e, i, u Tn s ca m thanh bnh thng nm trong khong 300 Hz n 3400 Hz. V vy biu din tn hiu ting ni trong knh thoi th 3 formant u l . cht lng cao hn tn s ly mu phi nm t 10 kHz ti 20kHz. Phng php thng s dng m t tn hiu ting ni l spectrogram (nh ph) m qua biu din thi gian tn s - bin ca mt tn hiu. Khi min c tn s cao hn th mu xm hn. Ph ca nguyn m v ph m cng d dng nhn thy. Do vy nh ph l phng php biu din hu ch nht nghin cu ting ni.
Hinh 2. nh ph biu din min thoi gian cua t kaksi
10
xc nh tn s c bn ca ting ni th s khi nh sau:
Phn tch Cepstral cung cp phng php tch ring tuyn m v ngun kch thch. Tn hiu ting ni sau khi qua b lc hiu chnh (thc cht l b lc thng cao) vi h s truyn t: H(z) = 1 az -1 , a < 1 v thng c chn c 0.95 0.98. B lc hiu chnh dng xt nh hng ca tuyn m trong min tn s. Do c tnh ph ca tn hiu ngun, m hu thanh nng lng tp trung min tn thp c dc ph l 12dB/octave. Mi l b lc thng cao c dc c 6dB/octave. ph bng phng hn cn b lc hiu chnh b li 12dB/octave 6dB/octave, do ngi ta chn a = 0.95 0.98. Ca s thng c chn l ca s Hamming nhm gim sai s phn tch ph khi di tn hiu hu hn. Qu trnh ly log10| . | cho ph u hn. 4.2. Phng php x l ng hnh: Chng ta bit rng tn hiu ting ni gm ba thnh phn, mt dy cc xung m t cc pitch, xung kch thch v p ng xung ca ng thanh. Trong min thi gian, gi s(n) l tn hiu ngun, e(n) l tn hiu kch thch v h(n) biu din p ng xung ca ng thanh. s(n) = e(n) * h(n). Bin i Fourier 2 v ta c S() = E() . H(). Quan h bin : |S()| = |E()| . |H()|. Logarithm ha hai v ta c log{|S()|} =log{|E()|} + log{|H()|}. Nh vy logarithm ca |S()| l tng logarithm ca |E()| v |H()|. Hn na |H()| c quyt nh bi tuyn m theo hng tn s bin i chm, trong khi phn b |E()| c chu k bin i nhan hn theo tn s. iu ny c ngha l hai thnh phn ny c th phn tch nhau nh ton t lc. Php lc ny thng thng c thc hin nh bin i Fourier ngc ca log{|S()|}, cho ta cepstrum ca tn hiu. Trong Cepstrum, chu k pitch phn b c tnh chu k, trong khi phn b ca tuyn m xy ra gn trc honh hn bi v bin i chm hn. S h thng ng hnh cho phn tch ting ni. B lc hiu chnh Ca s Log10|. | FFT 11
Trong nh ph xut hin cc h hi vi chu k ca ngun xung lm cho vic quan st tr nn kh khn. Nu cng lc c nhiu ngun xung tun hon vi cc tn s khc nhau, trong nh ph s xut hin cc h hi vi cc chu k khc nhau ca cc ngun, nn cn phi dung n cepstrum. Trong cepstrum ta c th nhn ra cc xung nhy vt c trng cho cc h hi ca ph. Nu ta chn c cc xung ca cepstrum ny, tnh c dy tn hiu theo thi gian sau khi dng php bin i ngc, th lc ta s c dng p ng xung c trng cho s truyn t ca h thng. Nu dng lc tn s thp chn tt c cc tn hiu tr xung ca cepstrum c trng cho ngun xung th sau php bin i ngc ta nhn li c tn hiu theo thi gian ca p ng ngun xung.
Hinh 3. Tin hiu tuan hoan. Ta thy Cepstrum bin i tng i chm c trng cho hm truyn t v Cepstrum nhy vt i din cho s lp li tun hon.
Hinh 4. Cepstrum tng ng cua tn hiu tuan hon. S dng Cepstrum trong vic nh gi cng v cc tn s nh cng hng. Nu khng c s dao ng tun hon trong ph th trong Cepstrum tng ng s khng c nh xut hin. Do , vi mi m thanh c chu k cng ngn nht, nh cng xut hin trong cc vng ni m cc thnh phn Cepstrum khc suy gim i ng k, nn kh pht hin xung nhy vt. V vy, tt nht nn s dng mt ngng thp trong qu trnh tm kim nh cng . B lc hiu chnh
Ca s hamming Log10|. | FFT FFT -1 12
Hinh 5. Tin hiu khong tuan hoan.
Quan st Cepstrum tng ng ta thy khng c g ni tri.
Hnh 6: Cepstrum tng ng.
4.3. Xc nh tn s c bn F0: Theo cc kt qu kho st v nghin cu, tn s c bn: Ging nam: 80 250 Hz. Ging n: 150 500 Hz. Chng ta thy rng vi m hu thanh, c mt nh cao nht trong cepstrum ti chu k c bn m u vo. Khng c nh cao nht xut hin trong cepstrum i vi m v thanh. Nhng c tnh ca cepstrum c s dng cho vic xc nh tn s c bn cho m hu thanh hay v thanh v c lng chu k c bn cho m hu thanh. Mt s phng php xc inh F0: - Da vo hm t tng quan. - Da vo hm vi sai bin trung bnh. - Dng b lc o v hm t tng quan. - X l ng hnh. i vi phng php x l ng hnh, ta thy t biu thc (2.2): x^(n) = s^(n) + u^(n) (2.2). Ta tch thnh phn s^(n) bng cch nhn x^(n) vi ca s (ch nht chng hn), bin i Fourier ta c ph dexiben ca ngun. Trong ph dexiben ca ngun, nh cao nht v gn gc nht l tn s c bn F0. 13
ng bao ca th tc c lng chu k da trn cepstrum n gin hn. Cepstrum c tm kim vi nh cao nht trong ln cn ca chu k thi gian c k vng. Nu nh cao nht ca cepstrum nm bn trn ngng thit lp trc , tn hiu m u vo ging nh m hu thanh v v tr ca nh cao nht l c lng tt cho chu k thi gian. Nu nh cao nht khng vt qua ngng, n ging nh u vo ca m v thanh. S bin thin thi gian ca ch kch thch v chu k thi gian c th c c lng bng cch tnh ton mt gi tr cepstrum ph thuc thi gian da trn bin i Fourier ph thuc thi gian. in hnh, cepstrum c tnh ton mi khong thi gian 10 20 ms v cc tham s kch thch khng thay i trong tn hiu ting ni thng thng. tnh tn s c bn da trn cepstrum, ta phi tnh c chu k T0 ca tn hiu ting ni. Gi s c mt khung ca s vi di 32ms, ti thi im u tin ta xc nh hai nh cao nht trn cepstrum, khong cch gia hai im ny l chu k ca ting ni,do tn s c bn l 1/T0.
Hinh 7. Tinh chu ki c ban T0.
Tip theo ta dch chuyn tip mt na di ca s (16ms) n v tr tip theo, xc nh cc nh cao nht trong ca s 32 ms v li tnh tng t nh trn thu c tn s c bn tip theo. Cui cng ta thu c mt tp cc tn s c bn, chng c biu din nh trn th sau: 14
Hinh 8. ong biu din F0.
15
II. hi chng nh 1. C c file ave
Hinh 9. Cau truc file wave
1.1. hi ni v p in ave Tp tin wave l mt dng tp tin dng lu tr d liu m thanh s (dng sng) v n l mt trong nhng nh dng ph bin nht ca h iu hnh Windown. Tp tin wave thuc chun RIFF (Resource Interchange File Format dng tp tin ti nguyn c th trao i). c im ca nhng tp tin thuc chun RIFF l n s nhm ni dung ca tp tin thnh cc khi ring bit v mi mt khi s gm mt header (dng quy nh kiu v kch thc khi) v cc byte d liu. Tp tin file wave c 2 dng nn v khng nn (dng chun) v th trong ti ny em ch cp n dng chun ca tp tin wave tc dng khng nn. 1.2. C c p in ave Cu trc file wave gm 3 khi: Khi m t dng RIFF, khi thuc tnh fmt v khi d liu data. Trong khi thuc tnh fmt v khi d liu data l hai khi con ca khi m t dng RIFF. a. hi dng Khi ny xc nh nh dng RIFF v c kch thc l 12 byte gm cc trng:
16
Trng c tc Cc nng ChunkID 4 byte Cha chui RIFF di dng m ASCII. ChunkSize 4 byte Cho bit tng kch thc ca cc trng sau n. ChunkSize = 4 + (8 + Subchunk1Size) + (8 + Subchunk2Size). Format 4 byte Cha chui WAVE.
b. hi hc nh f Khi ny xc nh cc thuc tnh ca d liu m thanh v c kch thc l 24 byte gm cc trng. Trng c tc Cc nng Subchunk1ID 4 byte Cha chui fmt. Subchunk1Size 4 byte Cho bit tng kch thc ca cc trng thuc khi thuc tnh ng pha sau trng ny. i vi tp tin wave khng nn th Subchunk1Size bng 16). AudioFormat 2 byte Cho bit dng nn ca d liu trong tp tin wave. Gi tr: 0 khng xc nh. 1 khng nn (PCM Pulse Code Modulation). 80 MPEG. 49 GSM 6.10. 17 IMA ADPCM.
17
Mt s gi tr thng dng Trng c tc Cc nng Numchannels 2 byte Cho bit s knh ca tp tin wave (mono 1, Stereo = 2). SampleRate 4 byte Cho bit s mu trn 1s v y l tn s ly mu. ByteRate 4 byte Cho bit s byte trn 1s ng vi tn s ly mu trn. (ByteRate = SampleRate * NumChannels * (BitsperSample / 8) BlockAlign 2 byte Cho bit s byte ca 1 mu gm tt c cc knh. BitsPerSample Cho bit s bit trn 1 mu ch tnh cho mt knh. (8 bit = 8, 16 bit = 16).
c. hi d li daa Khi ny bao gm cc trng sau: - Subchunk2ID: C kch thc 4 byte v cha chui data. - Subchunk2Size: Kch thc 4 byte v cho bit kch thc ca d liu m thanh th trong trng data. Subchunk2Size = NumSample * NumChannels * BitsperSample / 8. - Data: Trng data cha cc byte d liu m thanh v cc byte d liu ny s nhm thnh cc mu, mi mu s c 1 hoc 2 knh. Ty vo s knh ca mt mu (xc nh bi trng NumChannels) v s bit trn knh (xc nh bi trng BitsPerSample) m ta s xc nh c s byte ca 1 mu. S knh / s bit trn knh / kch thc 1 mu / gi tr ln nht / gi tr nh nht. 1 /(Mono)/8/1 byte/255/0. 1 (Mono)/16/2 byte/32767/-32768. 2 (Stereo)/8/2 byte/255/0. 2 (Stereo)/16/4 byte/32767/-32768.
18
Hinh 10. Ji du cho cau truc file wave
2. Phn ch v hi chc nng chng nh Chng trnh c thit k gm ba chc nng chnh: - c v hin th tn hiu ting ni t file av - Xc nh tn hiu cepstrum theo phng php x l ng hnh. - Hin th tn hiu cepstrum. - Hin th ng biu din F0 tnh c.
3. Ci chng nh c cc trng ca il wav: S dng hm fopen() m file v fread c cc trng ca file wav.
input_wave::input_wave(char *filename) { int i; FILE *file; unsigned int file_operator_state; char output_buffer[80];
WAVE_FILE_HEADER *wave_file_herder; DATA_CHUNK_HEADER *data_chunk_header; short int *uptr;
unsigned char *cptr; int data_chunk_id; // so thu tu cua chunk tiep theo can doc long int fp_moving_distance; // so vi tri dich chuyen file pointer;
19
// khoi tao cac gia tri sample_array = NULL; current_samples = 0; total_number_of_samples_in_wave_file = 0;
// cap phat bo nho wave_file_herder = new WAVE_FILE_HEADER; data_chunk_header = new DATA_CHUNK_HEADER; if(wave_file_herder == NULL) exit(-1); if (data_chunk_header == NULL) exit(-1);
// open file wav file = fopen(filename, "rb"); if (file == NULL) exit(-1);
// kiem tra dinh dang cua header // kiem tra dinh dang "RIEF" file for (i = 0; i < 4; ++i) output_buffer[i] = wave_file_herder- >riff_string[i]; output_buffer[4] = 0; if (strcmp(output_buffer, "RIFF")) exit(-1);
// kiem tra dinh dang "WAVE" file for(i = 0; i < 4; ++i) output_buffer[i] = wave_file_herder- >wave_string[i]; output_buffer[4] = 0; if (strcmp(output_buffer, "WAVE") != 0) exit(-1);
// kiem tra "fmt" cua subchunk for(i = 0; i < 3; ++i) output_buffer[i] = wave_file_herder- >ftm_string[i]; output_buffer[3] = 0; if (strcmp(output_buffer, "fmt") != 0) exit(-1);
// audio format tag phai bang 1 if (wave_file_herder->wave_file_format_tag != 1) exit(-1);
20
// chi chap nhan luong tu 8 hoac 16 bit if (wave_file_herder->number_of_bits_per_samples != 8 && wave_file_herder->number_of_bits_per_samples != 16) exit(-1);
// khong doc cac phan con lai cua header // phan cua header da doc duoc co do dai 20 bytes // 20 bytes nay gom co: "RIFF", chunksize(long int), "WAVE", "FMT", SubchunkSize1 fp_moving_distance = wave_file_herder->pcm_heder_len - (sizeof(WAVE_FILE_HEADER) - 20); // chuyen con tro toi dau data chunk file_operator_state = fseek(file, fp_moving_distance, SEEK_CUR); if (file_operator_state != 0) exit(-1);
// doc cho toi khi tim thay "data" trong chunk data data_chunk_id = 1; while (data_chunk_id != 0) { if (data_chunk_id > MAX_NUMBER_OF_DATA_CHUNKS) exit(-1);
// doc chunk header // chunk header gom 8 bytes: "data", chunksize (long int) file_operator_state = fread((void*)data_chunk_header, sizeof(DATA_CHUNK_HEADER), (size_t)1, file); // kiem tra chunk type for(i = 0; i < 4; ++i) output_buffer[i] = data_chunk_header- >data_string[i]; output_buffer[4] = 0; if(strcmp(output_buffer, "data") == 0) break; // so thu tu cua chunk tiep theo can doc data_chunk_id++; // chuyen sang chunk tiep theo file_operator_state = fseek(file, data_chunk_header->data_chunk_length, SEEK_CUR); if (file_operator_state != 1) exit(-1);
} // do dai chunk data wbuff_len = data_chunk_header->data_chunk_length;
21
// tim so luong mau // so byte trong data chunk // so mau = tong so byte / (so byte/mau) total_number_of_samples_in_wave_file = data_chunk_header->data_chunk_length; total_number_of_samples_in_wave_file /= wave_file_herder->number_of_bits_per_samples/8;
//cap phat bo nho wbuff = new char [wbuff_len]; if (wbuff == NULL) exit(-1);
sample_array = new double[total_number_of_samples_in_wave_file]; if (sample_array == NULL) exit(-1);
// doc cac mau, ghi gia tri cua cac mau vao wbuff file_operator_state = fread((void*)wbuff, wbuff_len, (size_t)1, file ); if (file_operator_state != 1) exit(-1);
// tan so lay mau sampling_frequency_hz = (double)(wave_file_herder- >number_of_samples_per_second); // so bit/mau number_of_bits_per_sample = wave_file_herder- >number_of_bits_per_samples;
22
in i ourir ri rc:
// so kenh number_of_channels = wave_file_herder->number_of_channel;
// copy data back for (i = 0; i < N; ++i) { in_real[i] = local_real[i] * coefficient; in_image[i] = local_image[i] * coefficient; } delete local_image; delete local_real; return SUCCESS; }
void window::compute_cepstrum() { int i; int start_sampleID; start_sampleID = windowID * (number_of_samples_per_window - number_of_overlapping_window); cepstrum_real_part = new double[number_of_samples_per_window]; cepstrum_image_part = new double[number_of_samples_per_window]; cepstrum_real_part = wav_file.get_sample(start_sampleID, number_of_samples_per_window);
// cho qua cua so hamming for (i = 0; i < number_of_samples_per_window; ++i) { cepstrum_real_part[i] = cepstrum_real_part[i] * hamming_window[i]; cepstrum_image_part[i] = 0; }
24
Tn :
// sau do bien doi fourier roi rac DFT(FORWARD_TRANFORM, number_of_samples_per_window, cepstrum_real_part, cepstrum_image_part); // logarit hoa for (i = 0; i < number_of_samples_per_window; ++i) { cepstrum_real_part[i] = log10(sqrt(cepstrum_real_part[i] * cepstrum_real_part[i] + cepstrum_image_part[i] * cepstrum_image_part[i])); cepstrum_image_part[i] = 0; } // sau do bien doi fourier nguoc DFT(REVERSE_TRANSFORM, number_of_samples_per_window, cepstrum_real_part, cepstrum_image_part);
// tim chi so tuong ung voi mau cuc dai for (int i = minF0Index; i < maxF0Index; ++i) { y = cepstrum_real_part[i]; if(maxY_in_F0_range < y) { maxY_in_F0_range = y; maxIndex = i; } } F0_array[windowID] = sampling_rate / maxIndex; }