Bonjour,
Je cherche à réaliser la FFT d'un fichier mp3. Ce mp3 étant "uniforme", je ne cherche donc à ne faire cette FFT qu'une seule fois, en un endroit qulconque du morceau (assez loin des bords bien sur). Je choisis cette endroit au hasard à l'aide de la variable "a".
La decompression préalable du mp3 en .wav est OK (issue de pymedia)
Question1:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51 def FFT( name ): import pymedia.audio.acodec as acodec import pymedia.muxer as muxer import time, wave, string, os SAMPLES= 256 NUM_FREQS= 256 BANDS = 10 a = 0 name1= str.split( name, '.' ) save= string.join( name1[ : len( name1 )- 1 ] ) analyzer= sound.SpectrAnalyzer( 1, SAMPLES, NUM_FREQS ) #RF # Demux dm= muxer.Demuxer( name1[ -1 ].lower() ) dec= None f= open( name, 'rb' ) snd= None s= " " while len( s ): s= f.read( 44100 ) if len( s ): frames= dm.parse( s ) for fr in frames: a=a+1 if dec == None: dec= acodec.Decoder( dm.streams[ 0 ] ) r= dec.decode( fr[ 1 ] ) if r and r.data: if snd== None: snd= wave.open( save+ '.wav', 'wb' ) snd.setparams( (r.channels, 2, r.sample_rate, 0, 'NONE','') ) resampler= sound.Resampler( (r.sample_rate,r.channels), (r.sample_rate,1) ) #RF snd.writeframes( r.data ) if r and len( r.data ) and a ==16: #RF s1= resampler.resample( r.data ) #RF fTmp= analyzer.asBands( BANDS, s1 ) #RF print "\n TMP(0): ", fTmp[0] print "\n TMP(1): ", fTmp[1] #(...) ecriture = open(save + ".txt", 'a') ecriture.write(str(fTmp) + '\n') ecriture.write('\n') ecriture.close
Le résultat de la FFT est ici stocké dans fTmp (issue de asBands). Il est le suivant:
Les commentaires de Pymedia me m'inspirant guère, que faut il comprendre ici? Que la FFT a été réalisé plusieurs fois malgré tout? Et donc, qu'ainsi, en prenant par exemple Ftmp[0] j'obtiens bel et bien une FFT du signal à un temps quelconque?(((169.140625, 118.18461100260417), (422.8515625, 2.4421555445744443), (972.55859375, 0.41417581694466726), (2156.54296875, 0.2080460654364692), (4820.5078125, 1.0275812893049092)), ((169.140625, 120.94239298502605), (422.8515625, 2.6184249291053185), (972.55859375, 0.53230881690979004), (2156.54296875, 0.26295919266958084), (4820.5078125, 0.88253746303260749)),
(.........)
169.140625, 119.96302286783855), (422.8515625, 2.6326933640700121), (972.55859375, 0.52503848075866699), (2156.54296875, 0.29092997596377418), (4820.5078125, 1.3292588037801973)))
Question2:
J'ai un peu de mal à saisir ici le sens certains paramètres. Pour obtenir des bandes de fréquences plus "propres" que du [0 169Hz][169,422][422 972Hz]...(comme ci dessous) que dois je modifier ?(par exemple pour avoir des bandes uniformes de 200Hz ou 1Khz, enfin vous voyer le truc...Mes modif' n'ayant pas le résultat escompté...
Edit: quelles sont le paramètre à surveiller pour Shannon?
Merci par avance pour vos indications, malgré la longueur de mon message! (j'essaie d'être précis...)
Partager