{"id":6208,"date":"2025-04-13T19:41:41","date_gmt":"2025-04-13T17:41:41","guid":{"rendered":"https:\/\/spgoo.org\/?page_id=6208"},"modified":"2025-06-13T09:43:27","modified_gmt":"2025-06-13T07:43:27","slug":"musique-avec-scamp","status":"publish","type":"page","link":"https:\/\/spgoo.org\/?page_id=6208","title":{"rendered":"Musique avec scamp"},"content":{"rendered":"\n<p>(PK &#8211; YS) <\/p>\n\n\n\n<h2 class=\"wp-block-heading has-vivid-green-cyan-color has-text-color has-link-color wp-elements-ce0ed358ac1c93ccd291ca442139da66\">Introduction<\/h2>\n\n\n\n<p>Dans le contexte de nos d\u00e9veloppements effectu\u00e9s avec les coll\u00e8gues du LLL et du LEO, nous sommes amen\u00e9s \u00e0 produire des musiques d\u2019accompagnement sur nos plateformes ( Serious Games, Site de Vote &#8230;). Pour ce faire, nous avons plusieurs choix possibles  prendre une musique existante ou en produire. Nous avons opt\u00e9 pour l&#8217;emploi de scamp pour deux raisons, produire ce que l&#8217;on veut sans droit d&#8217;auteur et pouvoir ensuite cr\u00e9er des m\u00e9lodies \u00e0 partir de fonctions math\u00e9matiques complexes. <\/p>\n\n\n\n<p>Des outils utilisant python pour g\u00e9n\u00e9rer de la musique, <a href=\"https:\/\/scamp.marcevanstein.com\/index.html\">scamp<\/a> est, \u00e0 ma connaissance,  le plus \u00e9labor\u00e9. Il est actuellement d\u00e9velopp\u00e9 par un musicien, Marc EvanStein. Voir sa <a href=\"https:\/\/www.youtube.com\/@marcevanstein\">cha\u00eene Youtube<\/a>.<br><\/p>\n\n\n\n<h2 class=\"wp-block-heading has-vivid-green-cyan-color has-text-color has-link-color wp-elements-954d05659e58de44c1f89c61f2cbeded\">Exemples avec Thonny<\/h2>\n\n\n\n<p>Pour commencer, il faut <a href=\"https:\/\/scamp.marcevanstein.com\/narrative\/easy_setup.html\">suivre ces explications<\/a> afin de s&#8217;assurer que tout fonctionne bien. <\/p>\n\n\n\n<h3 class=\"wp-block-heading has-vivid-green-cyan-color has-text-color has-link-color wp-elements-fca5e5663c30b06b8837b8b96b07a0c5\">Faire jouer un instrument.<\/h3>\n\n\n\n<p>Voici le code minimum pour faire jouer un instrument.<\/p>\n\n\n\n<pre class=\"wp-block-code has-small-font-size\"><code>from scamp import *\n\nsession = Session()\nclarinet = session.new_part(\"clarinet\")\nclarinet.play_note(60, 0.8, 2.0)<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading has-vivid-green-cyan-color has-text-color has-link-color wp-elements-c9490f222d2856572cac6103bac3f20b\">Faire jouer plusieurs instruments<\/h3>\n\n\n\n<h4 class=\"wp-block-heading has-vivid-green-cyan-color has-text-color has-link-color wp-elements-57f32643c896f9332b7cc6615483d449\">L&#8217;un apr\u00e8s l&#8217;autre<\/h4>\n\n\n\n<pre class=\"wp-block-code has-small-font-size\"><code>from scamp import *\nsession = Session()\nclarinet = session.new_part(\"clarinet\")\noboe = session.new_part(\"oboe\")\n# instrument.play_note(note_midi, volume, dur\u00e9e)\n# -------------------------------\nclarinet.play_note(60, 0.8, 1.0)\noboe.play_note(80, 0.8, 1.0)\nclarinet.play_note(65, 0.8, 1.0)\noboe.play_note(60, 0.8, 1.0)<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code has-small-font-size\"><code>from scamp import Session, wait\nsession = Session()\nbrass = session.new_part(\"brass\")\n# ------------------------\nbrass.play_note(40, 1.0, 0.25)\nbrass.play_note(43, 1.0, 0.25)\nbrass.play_note(47, 1.0, 0.25)\nbrass.play_note(55, 1.0, 0.25)\nbrass.play_note(52, 1.0, 0.75)\nbrass.play_note(54, 1.0, 0.5)\nbrass.play_note(52, 1.0, 0.25)\nbrass.play_note(50, 1.0, 0.25)\nwait(0.25)\nbrass.play_note(50, 1.0, 0.25)\nwait(0.75)\n<\/code><\/pre>\n\n\n\n<p>En ajoutant une fonction.<\/p>\n\n\n\n<pre class=\"wp-block-code has-small-font-size\"><code>from scamp import Session, wait\nsession = Session()\nbrass = session.new_part(\"brass\")\n# ------------------------\ndef beat_it():\n    brass.play_note(40, 1.0, 0.25)\n    brass.play_note(43, 1.0, 0.25)\n    brass.play_note(47, 1.0, 0.25)\n    brass.play_note(55, 1.0, 0.25)\n    brass.play_note(52, 1.0, 0.75)\n    brass.play_note(54, 1.0, 0.5)\n    brass.play_note(52, 1.0, 0.25)\n    brass.play_note(50, 1.0, 0.25)\n    wait(0.25)\n    brass.play_note(50, 1.0, 0.25)\n    wait(0.25)\n\nbeat_it()\nbrass.play_note(40, 1.0, 2.25)\nbeat_it()\n<\/code><\/pre>\n\n\n\n<p>Complexifions un peu &#8230;<\/p>\n\n\n\n<pre class=\"wp-block-code has-small-font-size\"><code>from scamp import Session, wait\nsession = Session()\nbrass = session.new_part(\"brass\")\n# ------------------------\ndef beat_it_1():\n    brass.play_note(40, 1.0, 0.25)\n    brass.play_note(43, 1.0, 0.25)\n    brass.play_note(47, 1.0, 0.25)\n    brass.play_note(55, 1.0, 0.25)\n    brass.play_note(52, 1.0, 0.75)\n\ndef beat_it_2():\n    brass.play_note(54, 1.0, 0.5)\n    brass.play_note(52, 1.0, 0.25)\n    brass.play_note(50, 1.0, 0.25)\n    wait(0.25)\n    brass.play_note(50, 1.0, 0.25)\n    wait(0.25)\n    \ndef beat_it():\n    beat_it_1()\n    beat_it_2()\n\nbeat_it_2()\nbrass.play_note(40, 1.0, 2.25)\nbeat_it()\nbeat_it_2()\nbrass.play_note(52, 1.0, 2.25)\n<\/code><\/pre>\n\n\n\n<p>Complexifions &#8230;<\/p>\n\n\n\n<pre class=\"wp-block-code has-small-font-size\"><code>from scamp import Session, wait\nsession = Session()\nbrass = session.new_part(\"brass\")\ntrumpet = session.new_part(\"trumpet\")\n# ------------------------\ndef beat_it_1(instr):\n    instr.play_note(40, 1.0, 0.25)\n    instr.play_note(43, 1.0, 0.25)\n    instr.play_note(47, 1.0, 0.25)\n    instr.play_note(55, 1.0, 0.25)\n    instr.play_note(52, 1.0, 0.75)\n\ndef beat_it_2(instr):\n    instr.play_note(54, 1.0, 0.5)\n    instr.play_note(52, 1.0, 0.25)\n    instr.play_note(50, 1.0, 0.25)\n    wait(0.25)\n    instr.play_note(50, 1.0, 0.25)\n    wait(0.25)\n    \ndef beat_it(instr):\n    beat_it_1(instr)\n    beat_it_2(instr)\n    \n# def top_part():\n#     brass.play_note(54, 1.0, 0.5)\n#     brass.play_note(52, 1.0, 0.25)\n#     brass.play_note(50, 1.0, 0.25)\n\nbeat_it_2(trumpet)\nbrass.play_note(40, 1.0, 2.25)\nbeat_it(brass)\nbeat_it_2(trumpet)\nbrass.play_note(52, 1.0, 2.25)<\/code><\/pre>\n\n\n\n<p>Complexifions &#8230;<\/p>\n\n\n\n<pre class=\"wp-block-code has-small-font-size\"><code>from scamp import Session, wait\nsession = Session()\nbrass = session.new_part(\"brass\")\ntrumpet = session.new_part(\"trumpet\")\n# ------------------------\ndef beat_it_1(instr):\n    instr.play_note(40, 1.0, 0.25)\n    instr.play_note(43, 1.0, 0.25)\n    instr.play_note(47, 1.0, 0.25)\n    instr.play_note(55, 1.0, 0.25)\n    instr.play_note(52, 1.0, 0.75)\n\ndef beat_it_2(instr):\n    instr.play_note(54, 1.0, 0.5)\n    instr.play_note(52, 1.0, 0.25)\n    instr.play_note(50, 1.0, 0.25)\n    wait(0.25)\n    instr.play_note(50, 1.0, 0.25)\n    wait(0.25)\n    \ndef beat_it(instr):\n    beat_it_1(instr)\n    beat_it_2(instr)\n    \ndef top_part(instr):\n    instr.play_note(71, 1.0, 0.25)\n    instr.play_note(71, 1.0, 1.75)\n    instr.play_note(71, 1.0, 0.25)\n    instr.play_note(71, 1.0, 1.5)\n    instr.play_note(71, 1.0, 0.5)\n    instr.play_note(71, 1.0, 0.25)\n    instr.play_note(71, 1.0, 0.25)\n    instr.play_note(71, 1.0, 0.25)\n    instr.play_note(74, 1.0, 0.5)\n    instr.play_note(71, 1.0, 0.25, \"staccato\")\n    instr.play_note(74, 1.0, 0.5)\n    instr.play_note(71, 1.0, 0.25, \"staccato\") \n\nbeat_it_2(trumpet)\nbrass.play_note(40, 1.0, 2.25)\nbeat_it(brass)\ntop_part(trumpet)\nbeat_it_2(trumpet)\nbeat_it(brass)\nbrass.play_note(52, 1.0, 2.25)\n<\/code><\/pre>\n\n\n\n<h4 class=\"wp-block-heading has-vivid-green-cyan-color has-text-color has-link-color wp-elements-864d27b73f00b6bd6d89698d8e68cce9\">Ensemble<\/h4>\n\n\n\n<p>Pour pouvoir faire jouer deux partitions en m\u00eame temps, il faut utiliser la fonction<em> fork<\/em> de l&#8217;objet session.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Exemple<\/h4>\n\n\n\n<pre class=\"wp-block-code has-small-font-size\"><code>from scamp import Session, wait\nsession = Session()\nbrass = session.new_part(\"brass\")\ntrumpet = session.new_part(\"trumpet\")\n# ------------------------\ndef beat_it_1(instr):\n    instr.play_note(40, 1.0, 0.25)\n    instr.play_note(43, 1.0, 0.25)\n    instr.play_note(47, 1.0, 0.25)\n    instr.play_note(55, 1.0, 0.25)\n    instr.play_note(52, 1.0, 0.75)\n\ndef beat_it_2(instr):\n    instr.play_note(54, 1.0, 0.5)\n    instr.play_note(52, 1.0, 0.25)\n    instr.play_note(50, 1.0, 0.25)\n    wait(0.25)\n    instr.play_note(50, 1.0, 0.25)\n    wait(0.25)\n    \ndef beat_it(instr):\n    beat_it_1(instr)\n    beat_it_2(instr)\n    \ndef top_part(instr):\n    instr.play_note(71, 1.0, 0.25)\n    instr.play_note(71, 1.0, 1.75)\n    instr.play_note(71, 1.0, 0.25)\n    instr.play_note(71, 1.0, 1.5)\n    instr.play_note(71, 1.0, 0.5)\n    instr.play_note(71, 1.0, 0.25)\n    instr.play_note(71, 1.0, 0.25)\n    instr.play_note(71, 1.0, 0.25)\n    instr.play_note(74, 1.0, 0.5)\n    instr.play_note(71, 1.0, 0.25, \"staccato\")\n    instr.play_note(74, 1.0, 0.5)\n    instr.play_note(71, 1.0, 0.25, \"staccato\") \n\nbeat_it_2(trumpet)\nbrass.play_note(40, 1.0, 2.25)\nsession.fork(beat_it, args&#91;brass])\nsession.fork(top_part, args=&#91;trumpet])\nsession.wait_for_children_to_finish()\nbeat_it_2(trumpet)\nbeat_it(brass)\nbrass.play_note(52, 1.0, 2.25)\n<\/code><\/pre>\n\n\n\n<h4 class=\"wp-block-heading\">Exemple<\/h4>\n\n\n\n<pre class=\"wp-block-code has-small-font-size\"><code>from scamp import Session, wait\nsession = Session()\nbrass = session.new_part(\"brass\")\ntrumpet = session.new_part(\"trumpet\")\n# ------------------------\ndef beat_it_1(instr):\n    instr.play_note(40, 1.0, 0.25)\n    instr.play_note(43, 1.0, 0.25)\n    instr.play_note(47, 1.0, 0.25)\n    instr.play_note(55, 1.0, 0.25)\n    instr.play_note(52, 1.0, 0.75)\n\ndef beat_it_2(\n        instr,\n        n=1,\n        transpo=0,\n    ):\n    for _ in range(n):\n        instr.play_note(54 + transpo, 1.0, 0.5)\n        instr.play_note(52 + transpo, 1.0, 0.25)\n        instr.play_note(50 + transpo, 1.0, 0.25)\n        wait(0.25)\n        instr.play_note(50 + transpo, 1.0, 0.25)\n        wait(0.25)\n    \ndef beat_it(instr):\n    beat_it_1(instr)\n    beat_it_2(instr)\n    \ndef top_part(\n        instr,\n        transpo=0,\n        vol=1, # volume\n        dt1=0.25,\n        dt2=0.5,\n        dt3=1.5,\n        ):\n    instr.play_note(71 + transpo, 1.0, dt1)\n    instr.play_note(71 + transpo, 1.0, dt3)\n    instr.play_note(71 + transpo, 1.0, dt1)\n    instr.play_note(71 + transpo, 1.0, dt3)\n    instr.play_note(71 + transpo, 1.0, dt2)\n    instr.play_note(71 + transpo, 1.0, dt1)\n    instr.play_note(71 + transpo, 1.0, dt1)\n    instr.play_note(71 + transpo, 1.0, dt1)\n    instr.play_note(74 + transpo, 1.0, dt2)\n    instr.play_note(71 + transpo, 1.0, dt1, \"staccato\")\n    instr.play_note(74 + transpo, 1.0, dt2)\n    instr.play_note(71 + transpo, 1.0, dt1, \"staccato\") \n\nbeat_it_2(trumpet)\nbrass.play_note(40, 1.0, 2.25)\nsession.fork(beat_it, args=&#91;brass])\nsession.fork(top_part, args=&#91;trumpet, -12])\nsession.wait_for_children_to_finish()\n# -------------------------------------\nsession.fork(top_part, args=&#91;brass])\nsession.fork(beat_it, args=&#91;trumpet])\nsession.wait_for_children_to_finish()\n# -------------------------------------\nsession.fork(beat_it_2, args=&#91;trumpet,3, 12])\nsession.fork(beat_it, args=&#91;brass])\nsession.wait_for_children_to_finish()\n# -------------------------------------\nbrass.play_note(52, 1.0, 2.25)\n<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading has-vivid-green-cyan-color has-text-color has-link-color wp-elements-5fd6891058a9fc01c9db263944ea3230\">Modification du tempo<\/h3>\n\n\n\n<p>Le tempo global d\u00e9finie dans la session peut \u00eatre modifi\u00e9 pour un instrument donn\u00e9 \u00e0 l&#8217;aide de <em>current_clock.<\/em> <\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Exemple<\/h4>\n\n\n\n<pre class=\"wp-block-code has-small-font-size\"><code>from scamp import Session, wait, current_clock\nsession = Session()\nbrass = session.new_part(\"brass\")\ntrumpet = session.new_part(\"trumpet\")\n# ------------------------\ndef beat_it_1(\n        instr,\n        n=1,\n        tempo=60,\n        transpo=0,\n    ):\n    instr.play_note(40 + transpo, 1.0, 0.25)\n    instr.play_note(43 + transpo, 1.0, 0.25)\n    instr.play_note(47 + transpo, 1.0, 0.25)\n    instr.play_note(55 + transpo, 1.0, 0.25)\n    instr.play_note(52 + transpo, 1.0, 0.75)\n\ndef beat_it_2(\n        instr,\n        n=1,\n        tempo=60,\n        transpo=0,\n    ):\n    current_clock().tempo=tempo\n    for _ in range(n):\n        instr.play_note(54 + transpo, 1.0, 0.5)\n        instr.play_note(52 + transpo, 1.0, 0.25)\n        instr.play_note(50 + transpo, 1.0, 0.25)\n        wait(0.25)\n        instr.play_note(50 + transpo, 1.0, 0.25)\n        wait(0.25)\n    \ndef beat_it(\n        instr,\n        n=1,\n        tempo=60,\n        transpo=0,\n    ):\n    current_clock().tempo=tempo\n    beat_it_1(\n        instr,\n        n=n,\n        tempo=tempo,\n        transpo=transpo,\n        )\n    beat_it_2(\n        instr,\n        n=n,\n        tempo=tempo,\n        transpo=transpo,\n        )\n    \ndef top_part(\n        instr,\n        n=1,\n        tempo=60,\n        transpo=0,\n        vol=1, # volume\n        dt1=0.25,\n        dt2=0.5,\n        dt3=1.5,\n    ):\n    current_clock().tempo=tempo\n    for _ in range(n):\n        instr.play_note(71 + transpo, 1.0, dt1)\n        instr.play_note(71 + transpo, 1.0, dt3)\n        instr.play_note(71 + transpo, 1.0, dt1)\n        instr.play_note(71 + transpo, 1.0, dt3)\n        instr.play_note(71 + transpo, 1.0, dt2)\n        instr.play_note(71 + transpo, 1.0, dt1)\n        instr.play_note(71 + transpo, 1.0, dt1)\n        instr.play_note(71 + transpo, 1.0, dt1)\n        instr.play_note(74 + transpo, 1.0, dt2)\n        instr.play_note(71 + transpo, 1.0, dt1, \"staccato\")\n        instr.play_note(74 + transpo, 1.0, dt2)\n        instr.play_note(71 + transpo, 1.0, dt1, \"staccato\") \n\n# main part\n# ------------------------------------\nbeat_it_2(trumpet, n=2)\nbrass.play_note(40, 1.0, 2.25)\nsession.fork(beat_it, args=&#91;brass,2,120])\nsession.fork(top_part, args=&#91;trumpet,1,80,-12])\nsession.wait_for_children_to_finish()\n# -------------------------------------\nbrass.play_note(47, 1.0, 0.5)\nbrass.play_note(40, 1.0, 2.25)\n# -------------------------------------\nsession.fork(top_part, args=&#91;brass,3,80])\nsession.fork(beat_it, args=&#91;trumpet,4])\nsession.wait_for_children_to_finish()\n# -------------------------------------\nbrass.play_note(40, 1.0, 2.25)\n# -------------------------------------\nsession.fork(beat_it_2, args=&#91;trumpet,3,120, 12])\nsession.fork(beat_it, args=&#91;brass,3,120])\nsession.wait_for_children_to_finish()\n# -------------------------------------\nbrass.play_note(52, 1.0, 2.25)\n\n<\/code><\/pre>\n\n\n\n<p>En modifiant uniquement la main part.  Avec la fonction wait_for_childre_to_finish, il est possible de faire jouer ensemble plusieurs instruments qui s&#8217;attendent avant de passer \u00e0 l&#8217;\u00e9tape suivante.<\/p>\n\n\n\n<pre class=\"wp-block-code has-small-font-size\"><code>while True:\n    tempo=random.choice(&#91;90,120])\n    session.fork(top_part, args=&#91;trumpet,1,tempo])\n    n = random.choice(&#91;1,2])\n    tempo=random.choice(&#91;90,120])\n    beat_it(brass,n, tempo)\n    session.wait_for_children_to_finish()<\/code><\/pre>\n\n\n\n<p>Autre exemple<\/p>\n\n\n\n<pre class=\"wp-block-code has-small-font-size\"><code># main part\n# ------------------------------------\nwhile True:\n    beat_it_2(trumpet, n=2)\n    brass.play_note(40, 1.0, 2.25)\n    session.fork(beat_it, args=&#91;brass,2,80])\n    session.fork(top_part, args=&#91;trumpet,1,120,12])\n    session.wait_for_children_to_finish()<\/code><\/pre>\n\n\n\n<p>Tester l&#8217;exemple pr\u00e9c\u00e9dent en d\u00e9sindendant la derni\u00e8re ligne &#8230;<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">G\u00e9n\u00e9ration de musique al\u00e9atoire<\/h3>\n\n\n\n<h4 class=\"wp-block-heading\">Exemple 1<\/h4>\n\n\n\n<pre class=\"wp-block-code has-small-font-size\"><code>from scamp import Session, wait, current_clock\nimport random\n\nsession = Session()\n\nbrass = session.new_part(\"brass\")\ntrumpet = session.new_part(\"trumpet\")\n# ------------------------\nLpitch = &#91;60,70,70,80,78]\nLdure = &#91;0.25, 0.5, 0.75]\n\nwhile True:\n    p = random.random()\n    if p &lt; 0.7:\n        trumpet.play_note(random.choice(Lpitch), random.uniform(0.4, 0.9), 0.25)\n    elif p &lt; 0.9:\n        brass.play_note(random.choice(Lpitch), random.uniform(0.4, 0.9), random.choice(Ldure))\n    else:\n        wait(random.choice(Ldure))\n<\/code><\/pre>\n\n\n\n<h4 class=\"wp-block-heading\">Exemple 2<\/h4>\n\n\n\n<pre class=\"wp-block-code has-small-font-size\"><code>from scamp import Session, wait, current_clock\nimport random\n\nsession = Session()\n\nbrass = session.new_part(\"brass\")\ntrumpet = session.new_part(\"trumpet\")\nclarinet = session.new_part(\"clarinet\")\n# ------------------------\nLpitch0 = &#91;60,67,72,77]\nLdure = &#91;0.25, 0.5, 0.75]\n\n\nwhile True:\n    i0 = random.choice(&#91;0,2])\n    Lpitch = Lpitch0&#91;i0:]\n    for _ in range(4):\n        p = random.random()\n        if p &lt; 0.5:\n            brass.play_note(random.choice(Lpitch), random.uniform(0.4, 0.9), 0.25)\n        elif p &lt; 0.75:\n            trumpet.play_note(random.choice(Lpitch), random.uniform(0.4, 0.9), random.choice(Ldure))\n        else:\n            if p &lt; 0.9:\n                clarinet.play_note(random.choice(Lpitch), 1, 0.25)\n                clarinet.play_note(random.choice(Lpitch)+4, 1, random.choice(Ldure))\n            elif p &lt; 0.95:\n                clarinet.play_note(random.choice(Lpitch)+5, 1, random.choice(Ldure))\n                clarinet.play_note(random.choice(Lpitch), 1, 0.25)\n            else:\n                clarinet.play_note(random.choice(Lpitch), 1, random.choice(Ldure))       \n<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Musique compos\u00e9e al\u00e9atoire<\/h3>\n\n\n\n<p><\/p>\n\n\n\n<h3 class=\"wp-block-heading\">G\u00e9n\u00e9ration de partitions<\/h3>\n\n\n\n<h4 class=\"wp-block-heading\">Simple visualisation du fichier<\/h4>\n\n\n\n<p>Le script suivant permet de g\u00e9n\u00e9rer une partition pour un morceau \u00e0 deux voix. Les explications sont donn\u00e9es en commentaires.<\/p>\n\n\n\n<pre class=\"wp-block-code has-small-font-size\"><code>from scamp import Session, wait, current_clock\nimport random\nsession = Session()\nsession.fast_forward_to_beat(100) # Avancement rapide du commencement du morceau.\n#---------------------------------------\n# D\u00e9finition des instruments\n#---------------------------------------\ntrumpet = session.new_part(\"trumpet\")\nbrass = session.new_part(\"brass\")\n#---------------------------------------\n# D\u00e9finition d'une ligne de basse\n#---------------------------------------\nLpitch_bass = &#91;58, 57, 56, 55, 54, 51, 53, 51, 48, 45]*2 + &#91;46, 47, 48, 49, 50, 53, 56, 55, 52, 53, 55]\n#---------------------------------------\n# D\u00e9fintion de motifs pouvant \u00eatre jou\u00e9s sur la note de basse\n#---------------------------------------\nLLpattern = &#91;\n                &#91;20,15, 20],\n                &#91;None, 12, None, 15,None,20],\n                &#91;12, None, 15,None,20, None],\n                &#91;None, 12, 14, 15],\n                &#91;None, 15, 9, 12],\n                &#91;12,15,12,15,17,12,17,12,15],\n                &#91;12,9,12,9,12,9,12,9,15],\n                &#91;19, 17, 16],\n            ]\n#---------------------------------------\n# D\u00e9finition de la fonction de la basse\n#---------------------------------------\ndef bass_part(instr):\n    for pitch in Lpitch_bass:\n        p = random.random()\n        if p &lt; 0.5:\n            instr.play_note(pitch, 1, 1)\n        elif p &lt; 0.75:\n            instr.play_note(pitch, 1, 0.5)\n            wait(0.5)\n        else:\n            instr.play_note(pitch, 1, 0.5)\n            instr.play_note(pitch-5, 1, 0.5)\n#---------------------------------------\n# D\u00e9finition du solo\n#---------------------------------------\ndef solo_part(instr):\n    for pitch_bass in Lpitch_bass:\n        Lpattern = random.choice(LLpattern)\n        nLpattern  = len(Lpattern)\n        dure = 1\/nLpattern\n        for interval in Lpattern:\n            if interval is None:\n                wait(dure)\n            else:\n                instr.play_note(pitch_bass + interval, 1, dure)\n#---------------------------------------\n# Lancement du script\n#---------------------------------------            \nsession.start_transcribing() # D\u00e9but de convertion en partition\nsession.fork(solo_part, args=&#91;trumpet])\nsession.fork(bass_part, args=&#91;brass])\nsession.wait_for_children_to_finish()\nsession.stop_transcribing().to_score().show() # Fin de conversion en partition et affichage\n            <\/code><\/pre>\n\n\n\n<h4 class=\"wp-block-heading\">Export d&#8217;un fichier xml<\/h4>\n\n\n\n<p>Voici enfin un morceau plus complexe. Scamp g\u00e9n\u00e8re un fichier xml et il est possible de faire jouer le tout dans MuseScore.<\/p>\n\n\n\n<pre class=\"wp-block-code has-small-font-size\"><code>from scamp import Session, wait, current_clock\nimport random\nsession = Session()\n\nsession.fast_forward_to_beat(1000)\n\n\ntrumpet = session.new_part(\"trumpet\")\ntrombone = session.new_part(\"trombone\")\nclarinet = session.new_part(\"clarinet\")\nalto_sax = session.new_part(\"alto_sax\")\nbrass = session.new_part(\"brass\")\nbrass2 = session.new_part(\"brass\")\nbrass3 = session.new_part(\"brass\")\n\n# ------------------------\n\nLpitch_bass = &#91;(4,9), (5,2), (4,7)]*2 + &#91;(5,0), (4,7), (4,4)] \n\nLLpattern = &#91;\n                &#91;12],\n                &#91;12,17],\n                &#91;12,19],\n                &#91;12,17,19],\n                &#91;12,14,19],\n                &#91;12,9,17],\n                &#91;12,17,12, 17],\n                &#91;19,17,19, 19],\n                &#91;10,12,14, 17],\n                &#91;17,14,12, 10],\n                #&#91;None, 12, None, 15,None,20],\n                #&#91;12, None, 15,None,20, None],\n                #&#91;None, 12, 14, 15],\n                #&#91;None, 15, 9, 12],\n                #&#91;12,15,12,15,17,12,17,12,15],\n                #&#91;12,9,12,9,12,9,12,9,15],\n                #&#91;19, 17, 16],\n            ]\n\ndef bass_part(instr, transpo=0):\n    for pitch in Lpitch_bass:\n        if type(pitch) is tuple:\n            pitch = pitch&#91;0]*12 + pitch&#91;1]\n        Lpattern = random.choice(LLpattern&#91;:3])\n        nLpattern  = len(Lpattern)\n        dure = 1\/nLpattern\n        for interval in Lpattern:\n            if interval is None:\n                wait(dure)\n            else:\n                instr.play_note(pitch + interval +transpo, 1, dure)\n\n            \n        \ndef solo_part(instr, transpo=0):\n    for pitch in Lpitch_bass:\n        if type(pitch) is tuple:\n            pitch = pitch&#91;0]*12 + pitch&#91;1]\n        Lpattern = random.choice(LLpattern&#91;1:])\n        nLpattern  = len(Lpattern)\n        dure = 1\/nLpattern\n        for interval in Lpattern:\n            if interval is None:\n                wait(dure)\n            else:\n                instr.play_note(pitch + interval + transpo, 1, dure)\n                \nsession.start_transcribing()\nfor _ in range(8):\n    instr,transpo =  random.choice(&#91;(trumpet,0), (trombone, -7)])\n    session.fork(solo_part, args=&#91;instr, transpo])\n    instr,transpo =  random.choice(&#91;(clarinet,0), (alto_sax, -7)])\n    session.fork(solo_part, args=&#91;instr, transpo])\n    instr,transpo =  random.choice(&#91;(brass,-12), (brass2, -7)])\n    session.fork(bass_part, args=&#91;instr, transpo])\n    session.fork(bass_part, args=&#91;brass3])\n    session.wait_for_children_to_finish()\nsession.stop_transcribing().to_score().export_music_xml(\"test.xml\")\n            <\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Randzik<\/h2>\n\n\n\n<p>Voici un code plus complet qui permet de g\u00e9n\u00e9rer des morceaux qui commencent \u00e0 devenir int\u00e9ressants:<\/p>\n\n\n\n<pre class=\"wp-block-code has-small-font-size\"><code>from scamp import Session, wait, current_clock\nfrom random import randint, choice, random, sample, shuffle, choices, seed\nfrom itertools import cycle\nimport numpy as np\nsession = Session(tempo=60)\n\nsession.fast_forward_to_beat(1000)\n\nseed(40)\n\n\n# ------------------------\nLmajeur = &#91;0,2,4,5,7,9,11]\nV0 = np.array(Lmajeur)\nLL = &#91;]\nfor k in range(2,10):\n    LL.append(list(k*12+V0))  \nVmajeur0 = np.append(Lmajeur, LL)\n# ------------------------\nLmineur = &#91;0,2,3,5,7,8,10]\nV0 = np.array(Lmineur)\nLL = &#91;]\nfor k in range(2,10):\n    LL.append(list(k*12+V0)) \nVmineur0 = np.append(Lmineur, LL)\n\n\ndef get_pitch_in_tonality(pitch):\n    return Vgamme&#91;np.argmin(np.abs(Vgamme-pitch))]\n    \n\ndef do_part(\n        instr,\n        pitch=None,\n        transpo=0,\n        LT_pattern=None,\n        ):\n    pitch = pitch&#91;0]*12 + pitch&#91;1]\n    for T in LT_pattern:\n        if len(T) == 2:\n            n = 1\n        else:\n            n = T&#91;2]\n        for _ in range(n):\n            if type(T&#91;0]) is tuple:\n                L = T&#91;0]\n            else:\n                L = &#91;T&#91;0]]\n            for x in L:\n                if x is None:\n                    wait(T&#91;1])\n                else:\n                    pitch2 = get_pitch_in_tonality(pitch + x + transpo)\n                    instr.play_note(pitch2, 1, T&#91;1])\n\n\nk=5\nDinst = dict()\n\ndef get_Icycle(\n    LT,\n    n=3\n    ):\n    return   cycle(choices(LT,k=n))\n\n\nbass = session.new_part(\"Tuba\")\nDinst&#91;bass]={\n            \"transpo\":-12,\n            }\n\nbariton_sax = session.new_part(\"Bariton sax\")\nDinst&#91;bariton_sax]={\n            \"transpo\":0,\n            }\n\n\ntrombone = session.new_part(\"trombone\")\nDinst&#91;trombone]={\n            \"transpo\":0,\n            }\n\nalto =  session.new_part(\"alto sax\")\nDinst&#91;alto]={\n            \"transpo\":0,\n            }\n\nsoprano =  session.new_part(\"soprano sax\")\nDinst&#91;soprano]={\n            \"transpo\":12,\n            }\n\n\nclarinet = session.new_part(\"clarinet\")\nDinst&#91;clarinet]={\n            \"transpo\":12,\n            }\n\ncors =  session.new_part(\"French Horns\")\nDinst&#91;cors]={\n            \"transpo\":12,\n            }\n\ntrumpet = session.new_part(\"trumpet\")\nDinst&#91;trumpet]={\n            \"transpo\":12,\n            }\n\nflute = session.new_part(\"Pan Flute\")\nDinst&#91;flute]={\n            \"transpo\":24,\n            }\n\nviolon = session.new_part(\"Violin\")\nDinst&#91;violon]={\n            \"transpo\":12,\n            }\n\n\nDvoix = dict()\nDvoix&#91;0] = {\n            \"Linst\":&#91;bass],\n            \"Icycle\":get_Icycle(&#91;\n                                    ((0,),1),\n                                    ((0,0),1\/2),\n                                    ((0,),1\/2,(0,0),1\/4),\n                                    ],\n                                    5),\n            }\nDvoix&#91;1] = {\n            \"Linst\":&#91;bariton_sax, ],\n            \"Icycle\":get_Icycle(&#91;\n                                    ((4,),1),\n                                    ((0,4),1\/2),\n                                    ],\n                                6),\n            }\nDvoix&#91;2] = {\n            \"Linst\":&#91;trombone,cors, alto, ],\n            \"Icycle\":get_Icycle(&#91;\n                                    ((7,),1),\n                                    ((0,7),1\/2),\n                                    ((9,7),1\/2),\n                                    ],\n                                7),\n            }\nDvoix&#91;3] = {\n            \"Linst\":&#91;trumpet, violon,soprano],\n            \"Icycle\":get_Icycle(&#91;\n                                    ((0,),1),\n                                    ((0,2),1\/2),\n                                    ((4,),1),\n                                    ((0,4),1\/2),\n                                    ((0,2,4),1\/3),\n                                    ((0,2,4,7),1\/4),\n                                    ],\n                                10),\n            }\nDvoix&#91;4] = {\n            \"Linst\":&#91;flute, clarinet],\n            \"Icycle\":get_Icycle(&#91;\n                                    ((0,),1),\n                                    ((0,4),1\/2),\n                                    ((7,),1),\n                                    ((7,10),1\/2),\n                                    ((7,10,4),1\/3),\n                                    ((7,2,4,7),1\/4),\n                                    ],\n                                10),\n            }\n\nLn_inst=&#91;3]\ncycle_n_inst = cycle(&#91;4,5,6])\nLi_pattern_inst = list(range(len(Dinst)))\nLinst = list(Dinst.keys())\nsession.start_transcribing()\nLTv0 = &#91;(0,\"M\"),(1,\"M\"),(2,\"M\"),(1,\"M\"),(0,\"M\"),(-1,\"M\")]\nLTv0 += reversed(LTv0)\nLTv = &#91;]\nfor _ in range(3):\n    LTv += LTv0\n    \nTv0 = None\nnLTv = len(LTv)\nfor i in  range(nLTv):\n    if LTv&#91;i]&#91;1] ==\"M\":\n        Vgamme = Vmajeur0 + (LTv&#91;i]&#91;0]*7)%12\n    else:\n        Vgamme = Vmineur0 + (LTv&#91;i]&#91;0]*7)%12\n    LTpitch_bass =  &#91;((4,0),2)] + &#91;((4,randint(0,12)),choice(&#91;1,2,3])) for _ in range(choice(&#91;4,8]))]\n    if i == nLTv -1:\n        LTpitch_bass.append(((4,0),2))\n    else:\n        d = LTv&#91;i+1]&#91;0]-LTv&#91;i]&#91;0]\n        if d == 1:\n            LTpitch_bass.append(((4,7),2))\n        elif d == -1:\n            LTpitch_bass.append(((4,5),2))\n        \n    LT = list(Dvoix.items())\n    for voix,D in LT:\n        Linst2 = &#91;]\n        for inst in D&#91;\"Linst\"]:\n            if random()&lt; 0.5:\n                Linst2.append(inst)\n        if len(Linst2) == 0:\n            Linst2 = &#91;inst]\n        Dvoix&#91;voix]&#91;\"Linst2\"]=Linst2\n    for Tpitch_bass in LTpitch_bass: \n        for D in Dvoix.values():\n            pitch_bass, n= Tpitch_bass\n            Li = &#91;next(D&#91;\"Icycle\"]) for _ in range(n)]\n            for inst in D&#91;\"Linst2\"]:\n                session.fork(do_part, args=&#91;inst, pitch_bass, Dinst&#91;inst]&#91;\"transpo\"],Li])\n        session.wait_for_children_to_finish()\n\n\nsession.stop_transcribing().to_score().export_music_xml(\"Randzik_10_v1.xml\")\n            \n        \n        \n<\/code><\/pre>\n","protected":false},"excerpt":{"rendered":"<p>(PK &#8211; YS) Introduction Dans le contexte de nos d\u00e9veloppements effectu\u00e9s avec les coll\u00e8gues du LLL et du LEO, nous sommes amen\u00e9s \u00e0 produire des musiques d\u2019accompagnement sur nos plateformes ( Serious Games, Site de Vote &#8230;). Pour ce faire, nous avons plusieurs choix possibles prendre une musique existante ou en produire. Nous avons opt\u00e9 [&hellip;]<\/p>\n","protected":false},"author":4,"featured_media":0,"parent":363,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-6208","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/spgoo.org\/index.php?rest_route=\/wp\/v2\/pages\/6208","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/spgoo.org\/index.php?rest_route=\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/spgoo.org\/index.php?rest_route=\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/spgoo.org\/index.php?rest_route=\/wp\/v2\/users\/4"}],"replies":[{"embeddable":true,"href":"https:\/\/spgoo.org\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=6208"}],"version-history":[{"count":18,"href":"https:\/\/spgoo.org\/index.php?rest_route=\/wp\/v2\/pages\/6208\/revisions"}],"predecessor-version":[{"id":7096,"href":"https:\/\/spgoo.org\/index.php?rest_route=\/wp\/v2\/pages\/6208\/revisions\/7096"}],"up":[{"embeddable":true,"href":"https:\/\/spgoo.org\/index.php?rest_route=\/wp\/v2\/pages\/363"}],"wp:attachment":[{"href":"https:\/\/spgoo.org\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=6208"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}