Blame view

readme.md 5.37 KB
d2bf2dcd   rsimonin   readme
1
  # TP IMA5 Time Streching
14b969fb   rsimonin   readme
2
  ## Intro
d2bf2dcd   rsimonin   readme
3
4
5
  
  Apres une entrevue des bibliothèques, nous distingons deux utilitées. 
  La première, est la création de fichier audio wavdata.
5b30ed81   rsimonin   readme
6
  Et la seconde, nous permet d'utiliser le domaine fréquentiel à l'aide de FFT et FFT inverse.
d2bf2dcd   rsimonin   readme
7
  
b31008bf   rsimonin   test
8
  ## Les fichiers WAV
d2bf2dcd   rsimonin   readme
9
  
5b30ed81   rsimonin   readme
10
  Après la compilation de notre main
b31008bf   rsimonin   test
11
12
  
  ```bash
d2bf2dcd   rsimonin   readme
13
14
  g++ main.cpp wavedata.cpp -o test
  ./test
b31008bf   rsimonin   test
15
  ```
5b30ed81   rsimonin   readme
16
17
  Nous pouvons alors lire le chargement de fichier audio COW.WAV, avec différends éléments caractéristiques du fichier comme sa taille, son format et la méthode d'organisation des données.Ensuite nous pouvons lire le format audio de notre son contenu dans le fichier. Avec la fréquence d'échantillonnage, la taille des blocs de données, le type de bloc, le nombre de Connaux...
  Le code a pour but dans un premier temps à décrire le  fichier ainsi que le format audio. Ensuite il charge la donnée contenue dans le fichier pour la traiter. La dernière partie du code a pour but d’allonger la durée de l’audio. En ajoutant un effet délay à partir de la fin du son du fichier.
14b969fb   rsimonin   readme
18
19
  
  ### Pur
5b30ed81   rsimonin   readme
20
  Dans le git du projet, il y a un dossier pur où se trouve différents fichiers.
14b969fb   rsimonin   readme
21
22
  Dans cette partie, nous nous sommes basés sur la construction du fichier audio donné dans le main.cpp.
  C’est à dire que nous chargions le son cow afin de récupérer ses paramètres, puis en cherchant un peu nous avons trouvé les fonctions, dans le header de la bibliothèque, pour fixer les paramètres de notre format audio en sortie.
5b30ed81   rsimonin   readme
23
24
  Nous avons commencé à construire notre signal sinusoïdal à l’aide de la fonction sinus dans math.h et de notre fréquence.
  Pur.cpp permet de créer deux fichiers audio différents purs. Le premier fichier est la note La et le deuxième la note DO.
14b969fb   rsimonin   readme
25
  
5b30ed81   rsimonin   readme
26
  J'utilise VLC et la visualisation de l'audio avec l'oscilloscope afin d'afficher le signal.
af8593ce   rsimonin   readme
27
28
29
30
31
32
33
34
35
  
  ```C++
  for(i=0;i<SIZE;i++){
  		data2[j]=data[i];
          data2[j+1]=data[i];
          j=j+2;
      }
  ```
  A l'aide de cette fonction, nous étirons notre signal par deux. Ce qui à pour effet de diviser par deux la fréquence de notre signal, donc notre devient plus grave.
d2bf2dcd   rsimonin   readme
36
  
af8593ce   rsimonin   readme
37
  Dans cette première partie, j'ai pu rencontrer différents problèmes sur l'utilisation de la blibliotéque et sur la création de signaux.
6c227d28   rsimonin   premier push
38
  
5b30ed81   rsimonin   readme
39
40
41
42
  Dans le code précédent, je me suis rendu compte que les valeurs devaient être positive, c'est pourquoi dans notre création de notre sinus, un "+1" s'y trouve afin d'assurer d'avoir des valeurs >0.
  
  ## FFT
  
d596ea0f   rsimonin   FFT
43
44
45
46
47
48
49
50
51
52
53
54
55
56
  Dans un premier, j'ai cherché à bien comprendre l'utilisation de la FFT, ce qui m'a pris beaucoup de temps avec des incompréhensions multiples. 
  
  Dans le fichier fftla.cpp, on retruve uniquement la création d'un son pur, puis le passage de ce même son dans une FFT et IFFT. l'objectif est de comprendre l'utilisation de la FFT avec un son que l'on métrise.
  On souhaite donc retrouvé en sortie, le son à l'identique que notre son généré dans la partie pur.
  Dans un premier temps, un soucis au niveau de la durée de notre son de sortir, où une imcompréhension était faite sur la valeur du N de la FFT.
  Avec de multiples essaies et plusieurs segment fault, j'ai compris que la valeur de N devait être supérieur à notre nombre d'éléments de notre son. C'est à dire, un son de 2sec avec une dréquence d'échantillonage de 22400, nous devons avoir au moins 44800 points de FFT. Sauf que le N doit être un exposant de 2 donc dans ce cas 65536. Mais si la taille de notre N est supérieur à la taille de nos tableaux de double, cette situation entraine aussi un segment fault.
  C'est pourquoi, il se peut que les tailles des tableaux de double soient grandes par rapport au signal étudié.
  Une fois cette partie maitrisé sur un signal pur, l'objectif était le même mais avec un son plus complexe, COW.WAV.
  Le programme cowwfft.cpp fonctionne de la même manière mais des petits soucis de saturation à la sortie de la IFFT.
  Pour cela j'ai essayé d'éfectué des tests sur les valeurs de sortie et de les caper à différentes valeurs, mais rien de prométeur trouvé la dessus.
  
  
  ## Time Streching
  
75128552   rsimonin   fin
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
  Dans cette partie, je ré-utilise le code de la FFT en modifiant dans l'espace fréquenciel les valeurs, c'est à dire entre la FFT et la IFFT.
  Nous souhaitons augmenté la fréquence sans modifier la durée de notre échantillon.
  ```C++
  for(i=0;i<SIZE;i++){
  		test3[2*i][0]=test2[i][0];
  		test3[2*i+1][0]=test2[i][0];
  		test3[2*i][1]=0;
          test3[2*i+1][1]=0;
  	}
  ```
  Cette boucle intervient dans le domaine fréquenciel, l'idée de de demultiplié la fréquence puis d'utiliser IFFT pour repasser dans le domaine temporel.
  La taille de test3 est deux fois supérieur à celle de test2, et je remplie la valeur complexe de notre signal à 0 (son pur).
  Un premier test est effectué sur notre son pur LA, afin de révéller les imperfection du programme.
  Nous obtenons un son qui semble avoir une seule fréquence mais son amplitude varie. Je me suis rendu compte que la fréquence de notre signal avait doublé mais je n'arrive pas à l'expliquer.
  J'ai essayé d'éffectué une normalisation du son avec la moyenne des valeurs mais impossible d'obtenir un son correcte à la sortie.
  Alors que sur le son COW.WAV, le time streching ne rend vraiment pas bien et le son n'est pas agréable à l'écoute.
  
  Le time streching est surement mal codé mais ne maitrisant pas les fréquences dans le tableau de double en fréquenciel, il est difficile de comprendre vraiment les midifications effectuées dans ce domaine.