Advertisement
Guest User

Untitled

a guest
Nov 26th, 2014
129
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.05 KB | None | 0 0
  1. % Alexandre JADIN - Frederic KACZYNSKI
  2. % -----------
  3. % Version 2.0.0.0.1-prealpha-b10056 pa
  4.  
  5. local Mix Interprete Projet CWD ToNote ToDuree Bourdon Etirer Duree Transpose in
  6. % CWD contient le chemin complet vers le dossier contenant le fichier 'code.oz'
  7. % modifiez sa valeur pour correspondre à votre système.
  8. CWD = {Property.condGet 'testcwd' '/home/justice/Documents/Projet2014/'}
  9.  
  10. % Si vous utilisez Mozart 1.4, remplacez la ligne précédente par celle-ci :
  11. % [Projet] = {Link ['Projet2014_mozart1.4.ozf']}
  12. %
  13. % Projet fournit quatre fonctions :
  14. % {Projet.run Interprete Mix Music 'out.wav'} = ok OR error(...)
  15. % {Projet.readFile FileName} = AudioVector OR error(...)
  16. % {Projet.writeFile FileName AudioVector} = ok OR error(...)
  17. % {Projet.load 'music_file.dj.oz'} = La valeur oz contenue dans le fichier chargé (normalement une <musique>).
  18. %
  19. % et une constante :
  20. % Projet.hz = 44100, la fréquence d'échantilonnage (nombre de données par seconde)
  21. [Projet] = {Link [CWD#'Projet2014_mozart2.ozf']}
  22.  
  23. local
  24. Audio = {Projet.readFile CWD#'wave/animaux/cow.wav'}
  25. in
  26. % Mix prends une musique et doit retourner un vecteur audio.
  27. fun {Mix Interprete Music}
  28. local Result in
  29. Result = {Interprete Music.1.1}
  30.  
  31. {Browse Result}
  32. Audio
  33. end
  34. end % fun
  35.  
  36. fun {Bourdon ListEchants Note}
  37. case ListEchants
  38. of echantillon(hauteur:Hauteur duree:Duree instrument:Instrument)|T then
  39. case Note
  40. of silence then
  41. silence(duree:Duree)|{Bourdon T Note}
  42. else
  43. % TODO Appliquer ToHauteur à Note
  44. echantillon(hauteur:Hauteur-2 duree:Duree instrument:Instrument)|{Bourdon T Note}
  45. end
  46. [] silence(duree:Duree)|T then
  47. silence(duree:Duree)|{Bourdon T Note}
  48. [] nil then
  49. nil
  50. end
  51. end
  52.  
  53. fun {Etirer L Facteur}
  54. case L
  55. of echantillon(hauteur:Hauteur duree:Duree instrument:Instrument)|T then
  56. echantillon(hauteur:Hauteur duree:(Duree*Facteur) instrument:Instrument)|{Etirer T Facteur}
  57. [] silence(duree:Duree)|T then
  58. silence(duree:(Duree*Facteur))|{Etirer T Facteur}
  59. [] nil then
  60. nil
  61. end % case
  62. end % fun
  63.  
  64. fun {Duree L Secondes DureeTotale}
  65. case L of echantillon(hauteur:Hauteur duree:DureeEchant instrument:Instrument)|T then
  66. echantillon(hauteur:Hauteur duree:(DureeEchant*Secondes/DureeTotale) instrument:Instrument)|{Duree T Secondes DureeTotale}
  67. [] nil then
  68. nil
  69. [] silence(duree:DureeSilence)|T then
  70. silence(duree:(DureeSilence*Secondes/DureeTotale))|{Duree T Secondes DureeTotale}
  71. [] E then
  72. {Duree [E] Secondes DureeTotale} % TODO
  73. end
  74. end
  75.  
  76. fun {ToNote Note}
  77. case Note
  78. of Nom#Octave then
  79. note(nom:Nom octave:Octave alteration:'# ')
  80. [] Atom then
  81. case {AtomToString Atom}
  82. of [ N ] then
  83. note(nom:Atom octave:4 alteration:none)
  84. [] [N O] then
  85. note(nom:{StringToAtom [N]} octave:{StringToInt [O]} alteration:none)
  86. end
  87. end
  88. end
  89.  
  90. fun{ToDuree EchList}
  91. local ToDuree2 in
  92. fun{ToDuree2 EchantList Acc}
  93. case EchantList of H|T then
  94. Acc=Acc+H.duree
  95. {ToDuree T}
  96. [] nil then
  97. Acc
  98. end %case
  99. end %fun
  100. {ToDuree2 EchList 0}
  101. end %local
  102. end %fun
  103.  
  104. fun{Transpose EchList DemiTons}
  105. case EchList
  106. of echantillon(hauteur:Hauteur duree:Duree instrument:Instrument)|T then
  107. echantillon(hauteur:Hauteur+DemiTons duree:Duree instrument:Instrument)|{Transpose T DemiTons}
  108. [] silence(duree:Duree)|T then
  109. silence(duree:Duree)|{Transpose T DemiTons}
  110. [] nil then
  111. nil
  112. end
  113. end
  114.  
  115.  
  116.  
  117. % Interprete doit interpréter une partition
  118. fun {Interprete Partition}
  119. case Partition
  120. of H|T then
  121. {Append {Interprete H} {Interprete T}}
  122. [] etirer(1:PartitionIn facteur:Facteur) then
  123. {Etirer {Interprete PartitionIn} Facteur}
  124. [] muet(1:PartitionIn) then
  125. {Bourdon {Interprete PartitionIn} silence}
  126. [] duree(1:PartitionIn secondes:Secondes) then
  127. local
  128. ListEchants = {Interprete PartitionIn}
  129. DureeTotale = {ToDuree ListEchants}
  130. in
  131. {Duree ListEchants Secondes DureeTotale}
  132. end
  133. [] bourdon(1:PartitionIn note:Note) then
  134. {Bourdon {Interprete PartitionIn} Note}
  135. [] transpose(1:PartitionIn demitons:Demitons) then
  136. {Transpose {Interprete PartitionIn} Demitons}
  137. [] nil then
  138. nil
  139. [] E then
  140. % TODO Appliquer ToHauteur
  141. [echantillon(hauteur:{ToNote E} duree:1.0 instrument: none)]
  142. end % case
  143. end % fun
  144.  
  145. local
  146. Music = {Projet.load CWD#'joie.dj.oz'}
  147. in
  148. % Votre code DOIT appeler Projet.run UNE SEULE fois. Lors de cet appel,
  149. % vous devez mixer une musique qui démontre les fonctionalités de votre
  150. % programme.
  151. %
  152. % Si votre code devait ne pas passer nos tests, cet exemple serait le
  153. % seul qui ateste de la validité de votre implémentation.
  154. {Browse {Projet.run Mix Interprete Music CWD#'out.wav'}}
  155. end
  156. end
  157. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement