• Aucun résultat trouvé

21. SEQUENCEUR D'ORCHESTRATION

6.2.8 Une autre orchestration de l’Opus

Parmi les orchestrations possibles, nous allons aborder ici un autre type de déroulement qui peut s’exprimer sous une forme de cartographie de trajets possibles. Prenons le schéma Figure 14 : Che-

mins pour Opus1 version 2, qui représente des trajets. En bleu nous avons les groupes répétitifs de

patterns, en rouge nous avons les réservoirs de patterns. On passe d’un groupe de patterns à un autre en suivant les flèches. Les flèches en gras signifient des choix d’orientation possibles. Nous avons des flèches en gras quand plusieurs chemins sont laissés au libre choix de l’audience. Les numéros sur les flèches nous servirons de repère dans le code HipHop.js, ils désignent les choix. Nous commençons notre parcours avec des violoncelles seuls (Cellos), au bout d’un certain nombre d’occurrences des violoncelles, nous proposons trois chemins possibles à l’audience, aller vers les altos, aller vers les contrebasses, ou aller vers les trompettes. Si nous choisissons les altos, nous irons vers les violons au bout de quelques occurrences. Il se passera la même chose si nous passons par les contrebasses. En revanche, les trompettes nous feront passer par le réservoir des cors avant de nous proposer un choix entre piano et trombones. Le reste du schéma est facile à interpréter. Sur ces principes, nous voyons que ce dessin exprime plusieurs scénarios possibles pour la même pièce et que ces scénarios dépendent de choix proposés à l’audience lors de certains moments clés. La décision de tester ce type de scénario est issue de réflexions sur l’interaction. Nous adresserons les questions liées à l’interaction dans un chapitre spécifique, ce qui nous intéresse ici est la façon dont nous allons coder ce type de scénario en HipHop.js.

89

Figure 14 : Chemins pour Opus1 version 2

Voici ci-dessous le codage d’une partie de cet automate. Dans les commentaires du code HipHop.js nous avons introduit des indications qui permettent de suivre les déroulements :

• -> 1 (flèche suivie d’un chiffre) signifie une condition pour activer la transition 1. Ici ce sont des instructions await sur des instruments.

• 7 -> (chiffre suivi d’une flèche) signifie une préparation de la transition 7, via un choix pos- sible faisant suite à l’émission d'un signal OUT.

Les lignes 19 à 21 émettent trois messages permettant trois choix. La ligne 25 informe l’audience sur les choix possibles. Chaque choix fait l’objet du corps d’une trappe. En ligne 27, nous avons une trappe pour le traitement des trois choix possibles : alto, contrebasse ou trompettes. Chacun des corps en parallèle dans cette trappe traite un des chemins possibles, ligne 29 pour alto, ligne 48 pour contrebasse et ligne 67 pour trompette. Ces chemins peuvent conduire à activer des groupes comme en ligne 35 ou 39. En ligne 42 nous avons l’attente des violons avant de proposer un nou- veau choix entre trompette et basson. Dans cette orchestration les cordes entrent progressivement et ne sont jamais désactivées avant la fin entre les lignes 92 à 96. Les cuivres, bois et piano étant des réservoirs peuvent s’épuiser et disparaitre de l’orchestration. Le résultat probable sera donc un certain maintien des cordes avec des évolutions possibles sur la façon dont les autres instruments vont apparaitre.

1. hiphop module sessionEchelle(tick, setTimerDivision)

2. implements ${opus1Int.creationInterfaces(par.groupesDesSons[0]) } {

3. signal stopReservoirsEchelle, stopCuivreEchelle, tickEchelle =0;

4. 5. laTrappe:{ 6. fork{ 7. every(tick.now) { 8. emit tickEchelle(); 9. }

90

10. }par{

11. hop { console.log("-- DEBUT SESSION ECHELLE --"); }

12. emit setTimerDivision(4);

13. emit cellosEchelleOUT([true, 255]);

14. hop { gcs.informSelecteurOnMenuChange(255,"cellosEchelle", true); }

15.

16. await count (4, cellosEchelleIN.now);

17.

18. // Proposition de choix

19. emit AltosOUT([true, 255]); // 1->

20. emit ContrebassesOUT([true, 255]); // 2->

21. emit TrompettesOUT([true, 255]); // 3 ->

22. hop { gcs.informSelecteurOnMenuChange(255,"Choix", true); }

23.

24. // Le premier choix qui atteint 5 votes gagne

25. hop {hop.broadcast('alertInfoScoreON',

"Le premier choisi 5 fois gagne");}

26.

27. AtloCtbTromp:{

28. fork{

29. await count (5, AltosIN.now); // -> 1

30. emit AltosOUT([false, 255]);

31. emit ContrebassesOUT([false, 255]);

32. emit TrompettesOUT([false, 255]);

33. hop {hop.broadcast('alertInfoScoreOFF');}

34.

35. emit altosEchelleOUT([true, 255]);

36. hop { gcs.informSelecteurOnMenuChange(255,"altosEchelle", true); }

37. await count (5, altosEchelleIN.now); // On attend qq altos

38.

39. emit violonsEchelleOUT([true, 255]);

40. hop { gcs.informSelecteurOnMenuChange(255,"violonsEchelle", true); }

41.

42. await count (5, violonsEchelleIN.now);

43. emit BassonsOUT([true, 255]); // 7 ->

44. emit TrompettesOUT([true, 255]); // 6 ->

45. hop { gcs.informSelecteurOnMenuChange(255,"Choix", true); }

46. break AtloCtbTromp;

47. }par{

48. await count (5, ContrebassesIN.now); // -> 2

49. emit AltosOUT([false, 255]);

50. emit ContrebassesOUT([false, 255]);

51. emit TrompettesOUT([false, 255]);

52. hop {hop.broadcast('alertInfoScoreOFF');}

53.

54. emit ctrebassesEchelleOUT([true, 255]);

55. hop{gcs.informSelecteurOnMenuChange(255,"ctrebassesEchelle", true);}

56. await count (5, ctrebassesEchelleIN.now);

57.

58. emit violonsEchelleOUT([true, 255]);

59. hop { gcs.informSelecteurOnMenuChange(255,"violonsEchelle", true); }

60.

61. await count (5, violonsEchelleIN.now);

62. emit BassonsOUT([true, 255]); // 7 ->

63. emit TrompettesOUT([true, 255]); // 6 ->

64. hop { gcs.informSelecteurOnMenuChange(255,"Choix", true); }

65. break AtloCtbTromp;

66. }par{

67. await count (5, TrompettesIN.now); // -> 3

68. emit AltosOUT([false, 255]);

69. emit ContrebassesOUT([false, 255]);

70. emit TrompettesOUT([false, 255]);

91

72.

73. run resevoirTrompettesEchelle(..., stopReservoir as stopCuivreEchelle);

74. run resevoirCorsEchelle(..., stopReservoir as stopCuivreEchelle);

75. emit PianoOUT([true, 255]); // 8 ->

76. emit TrombonesOUT([true, 255]); // 9 ->

77. hop { gcs.informSelecteurOnMenuChange(255,"Choix", true); }

78. break AtloCtbTromp;

79. }

80. }

81.

82. // En plus des cellosEchelle.

83. // Ici on a soit des altoEchelle + violonsEchelle

84. // soit des contrebassesEchelle + violonsEchelle

85. // soit des trompettesEchelle,

86. 87. ... 88. 89. 90. } 91. }

92. emit altosEchelleOUT([false, 255]);

93. emit violonsEchelleOUT([false, 255]);

94. emit cellosEchelleOUT([false, 255]);

95. emit ctrebassesEchelleOUT([false, 255]);

96. emit bassonsEchelleOUT([false, 255]);

97. hop { gcs.informSelecteurOnMenuChange(255,"Fin", true); }

98. hop {hop.broadcast('alertInfoScoreON', "FIN");}

99. }

Un exemple sonore de 53 secondes du début de cette orchestration est disponible à l’adresse :

https://soundcloud.com/user-651713160/exemple-session-echelle-opus1

Il s’agit d’une simulation. Au début nous entendons les violoncelles seuls qui ont été mis à disposi- tion avec l’instruction emit de la ligne 13. Les altos apparaissent à la 12ème seconde après que l’ins- truction await de la ligne 16 ait compté les quatre patterns de violoncelles et que le choix proposé dans les lignes 19 à 21 se soit fait au hasard de la simulation sur les altos. Ceci nous a conduit à la ligne 35. Nous passons ensuite rapidement aux violons en seconde 15. Le simulateur a donc été rapide sur la sélection des 5 patterns de violons attendus en ligne 37. En effet, l’automate prend ici en compte les sélections et non le fait que les patterns aient été joués. Les bassons rendus dispo- nibles en ligne 43 apparaissent à la 33ème seconde, soit 18 secondes après l’apparition des violons. Ceci correspond effectivement à un peu plus de la durée des 5 patterns attendus en ligne 42. Nous n’irons pas plus loin dans le déroulement sonore de cette pièce, mais nous voyons que l’analyse de l’écoute correspond bien à l’automate HipHop.js.