<snapdata remixID="9652246"><project name="the sound of music" app="Snap! 6, https://snap.berkeley.edu" version="1"><notes>These blocks are designed for composers and musicians, who have tried using the existing audio blocks and found that they lacked some functionalities or did not sound proper. &#xD;&#xD;These oscillator blocks provide some fixes to the existing blocks as well as a few shortcut blocks. Keep in mind that the audio will not stop playing when using [stop all sounds] or stopping! (not implemented yet!) &#xD;&#xD;All of the blocks should have help text, and you can always reference the original project.&#xD;</notes><thumbnail>data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAKAAAAB4CAYAAAB1ovlvAAADFUlEQVR4Xu3XQUqbARSF0T8uxhW4EcduIm5Lp65Ht6GjCEJLodReKrcX5PzTPN8jJx+GnC6Xy+XwEBgJnAQ4knf2Q0CAQpgKCHDK77gANTAVEOCU33EBamAqIMApv+MC1MBUQIBTfscFqIGpgACn/I4LUANTAQFO+R0XoAamAgKc8jsuQA1MBQQ45XdcgBqYCghwyu+4ADUwFRDglN9xAWpgKiDAKb/jAtTAVECAU37HBaiBqYAAp/yOC1ADUwEBTvkdF6AGpgICnPI7LkANTAUEOOV3XIAamAoIcMrvuAA1MBUQ4JTfcQFqYCogwCm/4wLUwFRAgFN+xwWogamAAKf8jgtQA1MBAU75HRegBqYCApzyOy5ADUwFBDjld1yAGpgKCHDK77gANTAVEOCU33EBamAqIMApv+MC1MBUQIB/4L+5uTnO5/Nxd3d3nE6n6Yf0nY8L8JNP9/b29uerz8/Px+Pj43F9ff2de/jv702AfyH/NcIfo1dXV8fr6+vx9PTkv+MXkxXgPwb49vb2EaDnawICDL+CX15ejoeHB1/BX+vtt78W4Cc/Qu7v7z9+hHh6AgLs2docCAgwQDLSExBgz9bmQECAAZKRnoAAe7Y2BwICDJCM9AQE2LO1ORAQYIBkpCcgwJ6tzYGAAAMkIz0BAfZsbQ4EBBggGekJCLBna3MgIMAAyUhPQIA9W5sDAQEGSEZ6AgLs2docCAgwQDLSExBgz9bmQECAAZKRnoAAe7Y2BwICDJCM9AQE2LO1ORAQYIBkpCcgwJ6tzYGAAAMkIz0BAfZsbQ4EBBggGekJCLBna3MgIMAAyUhPQIA9W5sDAQEGSEZ6AgLs2docCAgwQDLSExBgz9bmQECAAZKRnoAAe7Y2BwICDJCM9AQE2LO1ORAQYIBkpCcgwJ6tzYGAAAMkIz0BAfZsbQ4EBBggGekJCLBna3MgIMAAyUhPQIA9W5sDAQEGSEZ6AgLs2docCAgwQDLSExBgz9bmQECAAZKRnoAAe7Y2BwICDJCM9AQE2LO1ORAQYIBkpCcgwJ6tzYHAO9bZ/Ki9dBnvAAAAAElFTkSuQmCC</thumbnail><stage name="Stage" width="480" height="360" costume="0" color="255,255,255,1" tempo="180" threadsafe="false" penlog="false" volume="100" pan="0" lines="round" ternary="false" hyperops="true" codify="false" inheritance="true" sublistIDs="false" scheduled="false" id="1"><pentrails>data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAeAAAAFoCAYAAACPNyggAAAOhUlEQVR4Xu3VwQkAAAjEMN1/abewn7jAQRC64wgQIECAAIF3gX1fNEiAAAECBAiMAHsCAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQICLAfIECAAAECgYAAB+gmCRAgQICAAPsBAgQIECAQCAhwgG6SAAECBAgIsB8gQIAAAQKBgAAH6CYJECBAgIAA+wECBAgQIBAICHCAbpIAAQIECAiwHyBAgAABAoGAAAfoJgkQIECAgAD7AQIECBAgEAgIcIBukgABAgQIHLFxAWmhEwHPAAAAAElFTkSuQmCC</pentrails><costumes><list struct="atomic" id="2"></list></costumes><sounds><list struct="atomic" id="3"></list></sounds><variables></variables><blocks></blocks><scripts></scripts><sprites><sprite name="Sprite" idx="1" x="0" y="0" heading="90" scale="1" volume="100" pan="0" rotation="1" instrument="4"  draggable="true" costume="0" color="80,80,80,1" pen="tip" id="8"><costumes><list struct="atomic" id="9"></list></costumes><sounds><list struct="atomic" id="10"></list></sounds><blocks></blocks><variables></variables><scripts><script x="10" y="10"><block s="receiveGo"></block><block s="doSetGlobalFlag"><l><option>turbo mode</option></l><l><bool>true</bool></l></block><block s="doSetTempo"><l>180</l></block><custom-block s="let %upvar be %s"><l>arpeggio 1</l><block s="reifyScript"><script><block s="doFor"><l>i</l><l>1</l><block var="times"/><script><custom-block s="play arpeggio %mult%n Hz for %n beats"><list><custom-block s="frequency %n"><l>48</l></custom-block><custom-block s="frequency %n"><l>52</l></custom-block><custom-block s="frequency %n"><l>53</l></custom-block><custom-block s="frequency %n"><l>55</l></custom-block></list><l>0.5</l></custom-block></script></block></script><list><l>times</l></list></block></custom-block><custom-block s="let %upvar be %s"><l>arpeggio 2</l><block s="reifyScript"><script><block s="doFor"><l>i</l><l>1</l><block var="times"/><script><custom-block s="play arpeggio %mult%n Hz for %n beats"><list><custom-block s="frequency %n"><l>47</l></custom-block><custom-block s="frequency %n"><l>50</l></custom-block><custom-block s="frequency %n"><l>52</l></custom-block><custom-block s="frequency %n"><l>55</l></custom-block></list><l>0.5</l></custom-block></script></block></script><list><l>times</l></list></block></custom-block><custom-block s="let %upvar be %s"><l>intro</l><block s="reifyScript"><script><block s="doRun"><block var="arpeggio 1"/><list><l>4</l></list></block></script><list></list></block></custom-block><custom-block s="let %upvar be %s"><l>part A</l><block s="reifyScript"><script><custom-block s="play frequency %n Hz for %n beats without waiting"><custom-block s="frequency %n"><l>72</l></custom-block><l>4</l></custom-block><block s="doRun"><block var="arpeggio 1"/><list><l>2</l></list></block><custom-block s="play frequency %n Hz for %n beats without waiting"><custom-block s="frequency %n"><l>71</l></custom-block><l>4</l></custom-block><block s="doRun"><block var="arpeggio 1"/><list><l>2</l></list></block><custom-block s="play frequency %n Hz for %n beats without waiting"><custom-block s="frequency %n"><custom-block s="octave %n %n"><l>65</l><l>-2</l></custom-block></custom-block><l>8</l></custom-block><custom-block s="play frequency %n Hz for %n beats without waiting"><custom-block s="frequency %n"><l>69</l></custom-block><l>7</l></custom-block><block s="doRun"><block var="arpeggio 1"/><list><l>3</l></list></block><custom-block s="play arpeggio %mult%n Hz for %n beats"><list><custom-block s="frequency %n"><l>48</l></custom-block><custom-block s="frequency %n"><l>52</l></custom-block></list><l>0.5</l></custom-block><custom-block s="play frequency %n Hz for %n beats without waiting"><custom-block s="frequency %n"><l>67</l></custom-block><l>1</l></custom-block><custom-block s="play arpeggio %mult%n Hz for %n beats"><list><custom-block s="frequency %n"><l>53</l></custom-block><custom-block s="frequency %n"><l>55</l></custom-block></list><l>0.5</l></custom-block></script><list></list></block></custom-block><custom-block s="let %upvar be %s"><l>part B</l><block s="reifyScript"><script><custom-block s="play frequencies %mult%n Hz for %n beats without waiting"><list><custom-block s="frequency %n"><custom-block s="octave %n %n"><l>65</l><l>-2</l></custom-block></custom-block><custom-block s="frequency %n"><l>69</l></custom-block></list><l>4</l></custom-block><block s="doRun"><block var="arpeggio 1"/><list><l>2</l></list></block><custom-block s="play frequencies %mult%n Hz for %n beats without waiting"><list><custom-block s="frequency %n"><custom-block s="octave %n %n"><l>69</l><l>-2</l></custom-block></custom-block><custom-block s="frequency %n"><custom-block s="octave %n %n"><l>64</l><l>-1</l></custom-block></custom-block><custom-block s="frequency %n"><l>72</l></custom-block></list><l>4</l></custom-block><block s="doRun"><block var="arpeggio 1"/><list><l>2</l></list></block><custom-block s="play frequencies %mult%n Hz for %n beats without waiting"><list><custom-block s="frequency %n"><custom-block s="octave %n %n"><l>67</l><l>-2</l></custom-block></custom-block><custom-block s="frequency %n"><custom-block s="octave %n %n"><l>62</l><l>-1</l></custom-block></custom-block></list><l>8</l></custom-block><custom-block s="play frequency %n Hz for %n beats without waiting"><custom-block s="frequency %n"><l>71</l></custom-block><l>4</l></custom-block><block s="doRun"><block var="arpeggio 2"/><list><l>2</l></list></block><custom-block s="play frequency %n Hz for %n beats without waiting"><custom-block s="frequency %n"><custom-block s="octave %n %n"><l>67</l><l>1</l></custom-block></custom-block><l>2</l></custom-block><block s="doRun"><block var="arpeggio 2"/><list><l>1</l></list></block><custom-block s="play frequency %n Hz for %n beats without waiting"><custom-block s="frequency %n"><custom-block s="octave %n %n"><l>59</l><l>1</l></custom-block></custom-block><l>2</l></custom-block><block s="doRun"><block var="arpeggio 2"/><list><l>1</l></list></block></script><list></list></block></custom-block><block s="doForEach"><l>instrument</l><block s="reportNumbers"><l>1</l><l>4</l></block><script><block s="doSetInstrument"><block var="instrument"/></block><custom-block s="do %mult%cmdRing in order %mult%n"><list><block var="intro"/><block var="part A"/><block var="part B"/></list><list><l>1</l><l>2</l><l>3</l><l>2</l><l>3</l></list></custom-block></script><comment w="100.000001" collapsed="false">For each instrument</comment></block></script></scripts></sprite></sprites></stage><hidden></hidden><headers></headers><code></code><blocks><block-definition s="play frequency %&apos;freq&apos; Hz for %&apos;b&apos; beats" type="command" category="sound"><comment x="0" y="0" w="199" collapsed="false">Plays a specific note and waits for it to finish</comment><header></header><code></code><translations></translations><inputs><input type="%n">440</input><input type="%n">0.5</input></inputs><script><custom-block s="play frequency %n Hz for %n beats without waiting"><block var="freq"/><block var="b"/></custom-block><block s="doRest"><block var="b"/></block></script></block-definition><block-definition s="play frequencies %&apos;freqs&apos; Hz for %&apos;b&apos; beats" type="command" category="sound"><comment x="0" y="0" w="180" collapsed="false">Plays a chord and waits for it to finish</comment><header></header><code></code><translations></translations><inputs><input type="%mult%n"></input><input type="%n">0.5</input></inputs><script><custom-block s="play frequencies %mult%n Hz for %n beats without waiting"><block var="freqs"/><block var="b"/></custom-block><block s="doRest"><block var="b"/></block></script></block-definition><block-definition s="frequency %&apos;note&apos;" type="reporter" category="sound"><comment x="0" y="0" w="183" collapsed="false">Returns the frequency for a piano note</comment><header></header><code></code><translations></translations><inputs><input type="%n">60&#xD;        <options>§_pianoKeyboardMenu</options></input></inputs><script><block s="doReport"><block s="reportProduct"><l>440</l><block s="reportPower"><l>2</l><block s="reportQuotient"><block s="reportDifference"><block var="note"/><l>69</l></block><l>12</l></block></block></block></block></script></block-definition><block-definition s="play arpeggio %&apos;freqs&apos; Hz for %&apos;b&apos; beats" type="command" category="sound"><comment x="0" y="0" w="257" collapsed="false">Plays all of the notes in order and waits for them to finish</comment><header></header><code></code><translations></translations><inputs><input type="%mult%n"></input><input type="%n">0.5</input></inputs><script><block s="doForEach"><l>item</l><block var="freqs"/><script><custom-block s="play frequency %n Hz for %n beats"><block var="item"/><block var="b"/></custom-block></script></block></script></block-definition><block-definition s="play frequency %&apos;freq&apos; Hz for %&apos;b&apos; beats without waiting" type="command" category="sound"><comment x="0" y="0" w="80" collapsed="false">Plays a note</comment><header></header><code></code><translations></translations><inputs><input type="%n">440</input><input type="%n">0.5</input></inputs><script><block s="doRun"><block s="reportJSFunction"><list><l>freq</l><l>b</l></list><l>const stage = this.parentThatIsA(StageMorph);let context = stage.audioContext();let gain = context.createGain();gain.connect(context.destination);gain.gain.value = stage.volume/800; const oscillator = context.createOscillator();oscillator.connect(gain);let inst;switch (this.instrument) {    default:        inst = "sine";        break;    case 2:        inst = "square";        break;    case 3:        inst = "sawtooth";        break;    case 4:        inst = "triangle";        break;}oscillator.type = inst;oscillator.frequency.value = freq;oscillator.start();oscillator.stop(context.currentTime + b * 60 / stage.tempo);</l></block><list><block var="freq"/><block var="b"/></list></block></script></block-definition><block-definition s="octave %&apos;note&apos; %&apos;oct&apos;" type="reporter" category="sound"><comment x="0" y="0" w="291" collapsed="false">Outputs the note after it has been shifted by the octave</comment><header></header><code></code><translations></translations><inputs><input type="%n">60&#xD;        <options>§_pianoKeyboardMenu</options></input><input type="%n">0</input></inputs><script><block s="doReport"><block s="reportSum"><block var="note"/><block s="reportProduct"><block var="oct"/><l>12</l></block></block></block></script></block-definition><block-definition s="do %&apos;blocks&apos; in order %&apos;order&apos;" type="command" category="control"><comment x="0" y="0" w="167" collapsed="false">Do each block in the order specified</comment><header></header><code></code><translations></translations><inputs><input type="%mult%cmdRing"></input><input type="%mult%n"></input></inputs><script><block s="doForEach"><l>index</l><block var="order"/><script><block s="doRun"><block s="reportListItem"><block var="index"/><block var="blocks"/></block><list></list></block></script></block></script></block-definition><block-definition s="let %&apos;var&apos; be %&apos;val&apos;" type="command" category="other"><comment x="0" y="0" w="200" collapsed="false">Creates a script variable with an initial value</comment><header></header><code></code><translations></translations><inputs><input type="%upvar"></input><input type="%s">0</input></inputs><script><block s="doSetVar"><l>var</l><block var="val"/></block></script></block-definition><block-definition s="play frequencies %&apos;freqs&apos; Hz for %&apos;b&apos; beats without waiting" type="command" category="sound"><comment x="0" y="0" w="90" collapsed="false">Plays a chord</comment><header></header><code></code><translations></translations><inputs><input type="%mult%n"></input><input type="%n">0.5</input></inputs><script><block s="doRun"><block s="reportJSFunction"><list><l>freqs</l><l>b</l></list><l>const stage = this.parentThatIsA(StageMorph);let context = stage.audioContext();let gain = context.createGain();gain.connect(context.destination);gain.gain.value = stage.volume/800;let inst;switch (this.instrument) {    default:        inst = "sine";        break;    case 2:        inst = "square";        break;    case 3:        inst = "sawtooth";        break;    case 4:        inst = "triangle";        break;} for (freq of freqs.asArray()) {  let oscillator = context.createOscillator();  oscillator.connect(gain);  oscillator.type = inst;  oscillator.frequency.value = freq;  oscillator.start(context.currentTime);  oscillator.stop(context.currentTime + b * 60 / stage.tempo);}</l></block><list><block var="freqs"/><block var="b"/></list></block></script></block-definition><block-definition s="play arpeggio %&apos;freqs&apos; Hz for %&apos;b&apos; beats without waiting" type="command" category="sound"><comment x="0" y="0" w="137" collapsed="false">Plays all of the notes in order</comment><header></header><code></code><translations></translations><inputs><input type="%mult%n"></input><input type="%n">0.5</input></inputs><script><block s="fork"><block s="reifyScript"><script><custom-block s="play arpeggio %mult%n Hz for %n beats"><block var="freqs"/><block var="b"/></custom-block></script><list></list></block><list></list></block></script></block-definition></blocks><variables></variables></project><media name="the sound of music" app="Snap! 6, https://snap.berkeley.edu" version="1"></media></snapdata>