Make a Music Player

{Introduction @showdialog}

Before technology hits the market, it goes through many changes.

Today, you’ll see what it might have been like to be on the prototype team for Zune back in 2005.


~hint What was a Zune? 💡


The Zune was a Microsoft branded portable media player that released in 2006. You could store music, videos, and pictures on it. It also had a radio feature.

Zune released three different versions between 2006 and 2011, and you can see the original version featured Guardians of the Galaxy Vol. 3.

Image of original Zunes

hint~


~hint What is a prototype? 💡


A prototype is an early model of something that is about to be produced.

Prototypes don’t always work like the final product, but they allow inventors to see how ideas will work in the real world.

hint~


Zune outline

{Step 2}

Create your loading screen

  • :tree: Open the ||scene:Scene|| category and drag
    ||scene:set background image to [ ]||
    into the empty
    ||loops(noclick):on start||
    container that’s already in the workspace.
  • :right arrow: When you’re ready, click Next to see the next step.
//@highlight
scene.setBackgroundImage(img`.`)

{Step 3}

Choose your art
🖼


  • :paint brush: Click the empty box inside
    ||scene(noclick):set background image to [ ]||
    to open the image editor.
  • :mouse pointer: Here, you can create your own artwork, or you can click the Gallery tab Gallery to choose our Zune screen. Choose the Zune Background Screen to start
//@highlight
scene.setBackgroundImage(zuneassets.Zune)

{Step 4}

  • :binoculars: Take a look at the window of your music player.

Do you see the screen you chose?

Look at your music player!

{Step 5}

Set a Song
🎵 🎵 🎵

Load a song when the up-arrow is pressed.

  • :game: From ||controller: Controller||, drag the
    ||controller: on [up] button [pressed]||
    bundle into an empty area of the workspace.
//@highlight
controller.up.onEvent(ControllerButtonEvent.Pressed, function () {
    thisSong = music.createSong()
    scene.setBackgroundImage(img`.`)
})

{Step 6}

  • :mouse pointer: click the empty
    ||music(noclick): song [ ]||
    block to open the music editor.
  • :mouse pointer: Create a song (or switch to My Assets to open one that we’ve created for you.) My Assets


Write music in MakeCode Arcade

controller.up.onEvent(ControllerButtonEvent.Pressed, function () {
    //@highlight
    thisSong = music.createSong(assets.song`curious-blob`)
    scene.setBackgroundImage(img`.`)
})

{Step 7}

Add Album Art
🧑🏽‍🎨


  • :paint brush: Click the empty box inside
    ||scene(noclick):set background image to [ ]||
    to open the image editor.
  • :mouse pointer: Create an album cover for your song (or click the Gallery tab Gallery to choose pre-made album art.)
controller.up.onEvent(ControllerButtonEvent.Pressed, function () {
    thisSong = music.createSong(assets.song`curious-blob`)
    //@highlight
    scene.setBackgroundImage(zuneassets.curiousblobalbumart)
})

{Step 8}

  • :binoculars: Look at your music player again.

Does the screen change when you press the up arrow?

~hint Why don’t I hear it 🤷🏽


So far, we have only added the code to load the song. We will add the code to play it in the next step.

hint~

{Step 9}

▶️ Press Play

Add code to play your song when you press the (A) button.

  • :game: From ||controller: Controller|| drag the
    ||controller: on [A] button [pressed]||
    bundle into an empty of the workspace.

Now when you press the (A) button, it will play whatever you have loaded into the thisSong variable.

~hint I’m getting an error ⚠️


If you try pressing play before you choose a song, you’ll get a “sim error.” This just means that it couldn’t find a song to play.
(We’ll fix this in step 11.)

You’ll need to reload the music player and try again, but this time, make sure to press the up-arrow before pressing the (A) button.

hint~

let thisSong: music.Playable = null

controller.A.onEvent(ControllerButtonEvent.Pressed, function () {
    music.play(thisSong, music.PlaybackMode.LoopingInBackground)
})
let thisSong: music.Playable = null

controller.A.onEvent(ControllerButtonEvent.Pressed, function () {
    music.play(thisSong, music.PlaybackMode.LoopingInBackground)
})

{Step 10}

  • :binoculars: Look at your music player again.

Press the up-arrow to load your song and then press the (A) button to play it!

~hint I don’t hear anything 🔈


There are a few reasons you might not be able to hear your song even if the code is correct.

  • Make sure the music player is unmuted (🔊)
  • Try turning up the volume on your computer
  • Add a ||music:set volume [100]|| block to your ||loops(noclick):on start|| container.

If you still can’t hear your song, go back and look at previous steps to make sure your code matches the instructions.

hint~

~hint I’m getting an error ⚠️


If you try pressing play before you choose a song, you’ll get a “sim error.” This just means that it couldn’t find a song to play.
(We’ll fix this in the next step.)

You’ll need to reload the music player and try again, but this time, make sure to press the up-arrow before pressing the (A) button.

hint~

let thisSong: music.Playable = null

controller.A.onEvent(ControllerButtonEvent.Pressed, function () {
    music.play(thisSong, music.PlaybackMode.LoopingInBackground)
})

{Step 11}

Avoid Errors

Add code to make sure a song is loaded before you try to play it.


  • :game: From ||logic: Logic|| drag
    ||logic: if <true> then||
    into the beginning of the
    ||controller(noclick): on [A] button [pressed]||
    container already in the workspace.

  • :mouse pointer: Move
    ||music(noclick): play [thisSong] [looping in background]||
    into the
    ||logic(noclick): if <true> then||
    container just added in the workspace.

let thisSong: music.Playable = null

controller.A.onEvent(ControllerButtonEvent.Pressed, function () {
        music.play(thisSong, music.PlaybackMode.LoopingInBackground)
})
let thisSong: music.Playable = null

controller.A.onEvent(ControllerButtonEvent.Pressed, function () {
//@highlight
if (true) {
        music.play(thisSong, music.PlaybackMode.LoopingInBackground)
    }
})

{Step 12}

  • :game: From ||variables: Variables|| drag
    ||variables: thisSong||
    into the top bar of
    ||logic(noclick): if <true> then||
    to replace <true>.

Now, when you press the (A) button, the code will check to see if there is a value inside thisSong before playing,

let thisSong: music.Playable = null

controller.A.onEvent(ControllerButtonEvent.Pressed, function () {
if (true) {
        music.play(thisSong, music.PlaybackMode.LoopingInBackground)
    }
})
let thisSong: music.Playable = null

controller.A.onEvent(ControllerButtonEvent.Pressed, function () {
//@highlight
if (thisSong) {
        music.play(thisSong, music.PlaybackMode.LoopingInBackground)
    }
})

{Step 13}

  • :game: You can add more songs by dragging out three more
    ||controller: on [up] button [pressed]||
    bundles and changing ||controller:up|| to ||controller:down||, ||controller:left||, and ||controller:right||.
  • :mouse pointer: Add a new song and new album art to each option.
controller.up.onEvent(ControllerButtonEvent.Pressed, function () {
    thisSong = music.createSong(assets.song`falling-blossoms`)
    scene.setBackgroundImage(zuneassets.fallingblossomsalbumart)
})

//@highlight
controller.down.onEvent(ControllerButtonEvent.Pressed, function () {
    thisSong = music.createSong(assets.song`bow-the-mighty-oak`)
    scene.setBackgroundImage(zuneassets.bowmightyoakalbumart)
})

//@highlight
controller.left.onEvent(ControllerButtonEvent.Pressed, function () {
    thisSong = music.createSong(assets.song`curious-blob`)
    scene.setBackgroundImage(zuneassets.curiousblobalbumart)
})

//@highlight
controller.right.onEvent(ControllerButtonEvent.Pressed, function () {
    thisSong = music.createSong(assets.song`jolliest-of-rogers`)
    scene.setBackgroundImage(zuneassets.jolliestrogersalbumart)
})

{Step 14}

  • :binoculars: Test your songs on the music player.

Press an arrow to load your song and then press the (A) button to play.

Now try another arrow. Do you notice that the new song plays right over top of the old one? Let’s fix that.

let thisSong: music.Playable = null

controller.A.onEvent(ControllerButtonEvent.Pressed, function () {
if (thisSong) {
        music.play(thisSong, music.PlaybackMode.LoopingInBackground)
    }
})

{Step 15}

  • :headphones: From ||music:Music||, drag
    ||music: stop all sounds||
    into the top of the
    ||controller(noclick): on [A] button [pressed]||
    container that’s already in the workspace.

Now the code will stop the old song before playing the new one.

let thisSong: music.Playable = null

controller.A.onEvent(ControllerButtonEvent.Pressed, function () {
if (thisSong) {
        music.play(thisSong, music.PlaybackMode.LoopingInBackground)
    }
})
controller.A.onEvent(ControllerButtonEvent.Pressed, function () {
    //@highlight
    music.stopAllSounds()
    if (thisSong) {
        music.play(thisSong, music.PlaybackMode.LoopingInBackground)
    }
})

{Step 16}

⏹️ Stop the Music

What if you want to stop your song without starting a new one?

Let’s make the (B) button stop all sounds.

  • :game: From ||controller: Controller|| drag the
    ||controller: on [B] button [pressed]||
    bundle into an empty of the workspace.

controller.B.onEvent(ControllerButtonEvent.Pressed, function () {
    music.stopAllSounds()
})
controller.B.onEvent(ControllerButtonEvent.Pressed, function () {
    music.stopAllSounds()
})

{Step 17}

  • :binoculars: Test your final music player.
  • The arrows should load a song
  • The (A) button should play the loaded song
  • The (B) button should stop all songs
controller.B.onEvent(ControllerButtonEvent.Pressed, function () {
    music.stopAllSounds()
})

{Finale}

🎉 Way to Go 🎉

You have made your own prototype Zune!

This doesn’t work quite like the original, but when you click Done, your code will open in our project editor and you can play around to make your creation work more like the first Zune did.

Don’t forget to share your music with your friends and family!

let thisSong: music.Playable = null

controller.up.onEvent(ControllerButtonEvent.Pressed, function () {
    thisSong = music.createSong()
    scene.setBackgroundImage(img`.`)
})

controller.A.onEvent(ControllerButtonEvent.Pressed, function () {
    music.play(thisSong, music.PlaybackMode.LoopingInBackground)
})
    music.play(thisSong, music.PlaybackMode.LoopingInBackground)
    music.setVolume(100)

    if (thisSong) {
        music.play(thisSong, music.PlaybackMode.LoopingInBackground)
    }

{
    "theme": "zune"
}
zune-assets=github:kiki-lee/zune-assets#v0.0.13
music.setVolume(20)
{
  "README.md": " ",
  "assets.json": "",
  "images.g.jres": "{\n    \"song6\": {\n        \"data\": \"00a0000408060206001c00010a006400f401640000040000000000000000000000000000000002f50000000100030d192701000400012906000800012a0a000c00012910001200012a1600180001291e001f0001252200240001222400260001253000310003111d2731003400012936003800012a3a003c00012940004200012a46004700012a47004900012c4e005000012a5400560001295a005c00012a5e005f0002121e60006100031420296a006c00012570007200012272007600012588008a0001228a008c0001258e009000012790009100035561279100920001689600980001279c009e000125a200a4000127a600a700021863a700a8000125ac00ae000161b200b300011eb300b4000120b800ba00011ebe00c000020d2209010e02026400000403780000040a000301000000640001c80000040100000000640001640000040100000000fa0004af00000401c80000040a00019600000414000501006400140005010000002c0104dc00000401fa0000040a0001c8000004140005d0076400140005d0070000c800029001f40105c201f4010a0005900114001400039001000005c201f4010500058403050032000584030000fa00049001000005c201f4010500058403c80032000584030500640005840300009001049001000005c201f4010500058403c80064000584030500c8000584030000f40105ac0d000404a00f00000a0004ac0d2003010004a00f0000280004ac0d9001010004a00f0000280002d00700040408070f0064000408070000c80003c800c8000e7d00c80019000e64000f0032000e78000000fa00032c01c8000ee100c80019000ec8000f0032000edc000000fa0003f401c8000ea901c80019000e90010f0032000ea4010000fa0001c8000004014b000000c800012c01000401c8000000c8000190010004012c010000c80002c800000404c8000f0064000496000000c80002c2010004045e010f006400042c010000640002c409000404c4096400960004f6090000f40102b80b000404b80b64002c0104f40b0000f401022003000004200300040a000420030000ea01029001000004900100040a000490010000900102d007000410d0076400960010d0070000c8007f01000001000201080400050001060600070001050a000b0001060c000d00020509120013000105160017000201061800190001051c001d000201061e001f000105240025000205092800290001052a002b0001062e002f0002010530003100030106073400350001063600370001053a003b0001063c003d000205094200430001054600470001064800490001054c004d0001064e004f000201055400550001095800590001015e005f0002010760006100030105086400650001066600670001056a006b0001066c006d000205097000710001057200730001067600770001067800790001057c007d0001057e007f0001068200830002010684008500020509880089000201058a008b0001068e008f000106900091000201059400950001069600970001059a009b0001069c009d00020609a000a1000106a200a3000106a600a700020105a800a900020106ac00ad00020105ae00af00020106b200b3000105b400b50003010609b800b900020105ba00bb00020106be00bf0003010508\",\n        \"mimeType\": \"application/mkcd-song\",\n        \"displayName\": \"falling-blossoms\",\n        \"namespace\": \"mySongs.\"\n    },\n    \"song11\": {\n        \"data\": \"006e000408040400001c00010a006400f401640000040000000000000000000000000005000004ae0000000100010a06000700010a0e000f00010f0f001000011110001100011214001500011118001900010f1c001d00010a20002100014b26002700014b30003100011232003300011433003400011234003500011138003900010f3c003d00014b40004100010a46004700010a5c005e00010a60006200014b66006800014b7000710001167200730001577300740001167400750001147600780001167800790001127a007b0001147c007d00011105001c000f0a006400f4010a0000040000000000000000000000000000000002900000000200010a06000700010a0e000f00010f0f001000011110001200011214001600011118001a00010f1c001d00010a20002200014b26002700014b30003100011232003300011433003400011234003600011138003a00010f3c003e00014b40004200010a46004800010a5c005e00010a60006200014b66006800014b70007200010a76007700014b7c007d00014b06001c00010a006400f401640000040000000000000000000000000000000002600000000200010a06000800010a1c001d00010a20002200014b26002800014b30003200010a36003800010a3c003e00014b40004200010a46004800010a5c005e00010a60006200014b66006800014b70007200010a76007700014b7c007d00014b09010e02026400000403780000040a000301000000640001c80000040100000000640001640000040100000000fa0004af00000401c80000040a00019600000414000501006400140005010000002c0104dc00000401fa0000040a0001c8000004140005d0076400140005d0070000c800029001f40105c201f4010a0005900114001400039001000005c201f4010500058403050032000584030000fa00049001000005c201f4010500058403c80032000584030500640005840300009001049001000005c201f4010500058403c80064000584030500c8000584030000f40105ac0d000404a00f00000a0004ac0d2003010004a00f0000280004ac0d9001010004a00f0000280002d00700040408070f0064000408070000c80003c800c8000e7d00c80019000e64000f0032000e78000000fa00032c01c8000ee100c80019000ec8000f0032000edc000000fa0003f401c8000ea901c80019000e90010f0032000ea4010000fa0001c8000004014b000000c800012c01000401c8000000c8000190010004012c010000c80002c800000404c8000f0064000496000000c80002c2010004045e010f006400042c010000640002c409000404c4096400960004f6090000f40102b80b000404b80b64002c0104f40b0000f401022003000004200300040a000420030000ea01029001000004900100040a000490010000900102d007000410d0076400960010d0070000c800450100000100020e050600070001050800090002050a0c000d000202050e000f000106120013000105140015000202061800190002120a1c001d00030e02051e001f00010620002100020e0524002500010526002700010528002900010a2a002b0001052c002d0001022e002f00010530003100020e053200330001063400350001003600370001003800390005120105080a3a003b0001063c003d0001003e003f0002000540004100020e054600470001054800490002050a4c004d000202054e004f0001065200530001055400550002020658005900010a5c005d00030e02055e005f00010660006100020e0564006500010566006700010568006900010a6a006b0001056c006d0001026e006f00010570007100020e05720073000106740075000100760077000100780079000301050a7a007b0001067c007d0001007e007f00020005\",\n        \"mimeType\": \"application/mkcd-song\",\n        \"displayName\": \"curious-blob\",\n        \"namespace\": \"mySongs.\"\n    },\n    \"song10\": {\n        \"data\": \"00b4000408060400001c00010a006400f401640000040000000000000000000000000005000004780018001900015019001c00011222002300010d48004900011249004c0001144e004f00015552005300011472007300010d78007900011179007d00011282008300010d8e008f0001128f00920001149600970001559c009d000114a200a3000112a800a9000150b400b5000155b500b8000157be00bf00011405001c000f0a006400f4010a000004000000000000000000000000000000000290000600080001500c000e00010f12001400014e18001a00010d2e00300001503400360001503600380001503c003e00010f42004400014e48004a00010d6000620001506600680001506c006e00010f72007400014e78007a00010d8e00900001149600980001939c009e000112a200a4000150a800aa00010dae00b000010ab400b6000149ba00bc000108be00c000015006001c00010a006400f401640000040000000000000000000000000000000002b0000700080001500d000e00010f13001400014e18001900020d5c19001a00011e2e00300001503400360001503600380001503c003e00010f42004400014e48004900030d1b6149004b00025c634e004f00021e2552005300025c636000620001506600680001506c006e00010f72007400014e78007a00010d8e008f0001149600980001939c009e000112a200a4000150a800aa00010dae00b000010ab400b60002491bba00bc000108be00c00002502009010e02026400000403780000040a000301000000640001c80000040100000000640001640000040100000000fa0004af00000401c80000040a00019600000414000501006400140005010000002c0104dc00000401fa0000040a0001c8000004140005d0076400140005d0070000c800029001f40105c201f4010a0005900114001400039001000005c201f4010500058403050032000584030000fa00049001000005c201f4010500058403c80032000584030500640005840300009001049001000005c201f4010500058403c80064000584030500c8000584030000f40105ac0d000404a00f00000a0004ac0d2003010004a00f0000280004ac0d9001010004a00f0000280002d00700040408070f0064000408070000c80003c800c8000e7d00c80019000e64000f0032000e78000000fa00032c01c8000ee100c80019000ec8000f0032000edc000000fa0003f401c8000ea901c80019000e90010f0032000ea4010000fa0001c8000004014b000000c800012c01000401c8000000c8000190010004012c010000c80002c800000404c8000f0064000496000000c80002c2010004045e010f006400042c010000640002c409000404c4096400960004f6090000f40102b80b000404b80b64002c0104f40b0000f401022003000004200300040a000420030000ea01029001000004900100040a000490010000900102d007000410d0076400960010d0070000c8008401000001000201080400050001060600070001050a000b0001060c000d00031205091200130001051600170001061800190001051c001d0001061e001f00010524002500031205092800290001052a002b0001062e002f0002010530003100030106073400350001063600370001053a003b0001063c003d00031205094200430001054600470001064800490001054c004d0001064e004f00010554005500031201095800590001015e005f00010760006100030105086400650001066600670001056a006b0001066c006d00031205097000710001057200730001067600770001067800790001057c007d0001057e007f000106820083000201068400850003120509880089000201058a008b0001068e008f000106900091000201059400950001069600970001059a009b0001069c009d0003120609a000a100020106a200a3000106a600a700020105a800a9000106ac00ad000105ae00af000106b200b300020105b400b50003120609b800b90003120509ba00bb000106be00bf00051201050809\",\n        \"mimeType\": \"application/mkcd-song\",\n        \"displayName\": \"bow-the-mighty-oak\",\n        \"namespace\": \"mySongs.\"\n    },\n    \"song7\": {\n        \"data\": \"007c000408040400001c00010a006400f401640000040000000000000000000000000005000004ae000200040001570400050001160800090001140c000e0001161000120001571400160001161600180001141a001c00010d2c002e00014b2e003000014b30003100010f32003300010f34003600014b36003700010d3c003e0001084200430001574400450001164800490001144c004d00011650005100015756005700011b5c005d0001196c006d00014b6e006f00014b70007100010f72007300010f74007500014b7600770001117c007d00010d05001c000f0a006400f4010a000004000000000000000000000000000000000272000c000d00010d14001500010d1a001b00010d20002100010d2e002f00010c30003100010f32003300010f36003700010d3c003d0001084c004d00010d54005500010d5a005b00010d60006100010d6c006d00014b6e006f00014b70007100010f72007300010f7600770001117c007d00010d06001c00010a006400f4016400000400000000000000000000000000000000025a0000000100020d190c000e00020d1914001600020d191a001c00020d1920002200020d192c002e00020d193c003e00010840004100020d194c004d00020d1954005500020d195a005b00020d1960006100020d196c006e00020d1909010e02026400000403780000040a000301000000640001c80000040100000000640001640000040100000000fa0004af00000401c80000040a00019600000414000501006400140005010000002c0104dc00000401fa0000040a0001c8000004140005d0076400140005d0070000c800029001f40105c201f4010a0005900114001400039001000005c201f4010500058403050032000584030000fa00049001000005c201f4010500058403c80032000584030500640005840300009001049001000005c201f4010500058403c80064000584030500c8000584030000f40105ac0d000404a00f00000a0004ac0d2003010004a00f0000280004ac0d9001010004a00f0000280002d00700040408070f0064000408070000c80003c800c8000e7d00c80019000e64000f0032000e78000000fa00032c01c8000ee100c80019000ec8000f0032000edc000000fa0003f401c8000ea901c80019000e90010f0032000ea4010000fa0001c8000004014b000000c800012c01000401c8000000c8000190010004012c010000c80002c800000404c8000f0064000496000000c80002c2010004045e010f006400042c010000640002c409000404c4096400960004f6090000f40102b80b000404b80b64002c0104f40b0000f401022003000004200300040a000420030000ea01029001000004900100040a000490010000900102d007000410d0076400960010d0070000c8009c0100000100020e050200030001050400050001050600070001050800090002050a0a000b0001050c000d000202050e000f000106100011000105120013000105140015000202061600170001061800190002050a1a001b0001051c001d0001071e001f000107200021000202052200230001052400250001052600270001052800290002050a2a002b0001052c002d000202052e002f00010530003100010632003300010734003500020106360037000201073800390002050a3a003b000201053c003d000201063e003f0002010740004100020e054200430001054400450001054600470001054800490002050a4a004b0001054c004d000202054e004f000105500051000105520053000105540055000202055600570001055800590002050a5a005b0001055c005d0001055e005f000105600061000202056200630001056400650001056600670001056800690002050a6a006b0001056c006d000202056e006f0001057000710002010672007300010774007500020106760077000201077800790001077a007b000201057c007d000201077e007f00020107\",\n        \"mimeType\": \"application/mkcd-song\",\n        \"displayName\": \"jolliest-of-rogers\",\n        \"namespace\": \"mySongs.\"\n    },\n    \"*\": {\n        \"mimeType\": \"image/x-mkcd-f4\",\n        \"dataEncoding\": \"base64\",\n        \"namespace\": \"myImages\"\n    }\n}",
  "images.g.ts": "// Auto-generated code. Do not edit.\nnamespace myImages {\n\n    helpers._registerFactory(\"image\", function(name: string) {\n        switch(helpers.stringTrim(name)) {\n\n        }\n        return null;\n    })\n\n    helpers._registerFactory(\"animation\", function(name: string) {\n        switch(helpers.stringTrim(name)) {\n\n        }\n        return null;\n    })\n\n    helpers._registerFactory(\"song\", function(name: string) {\n        switch(helpers.stringTrim(name)) {\n            case \"song11\":\n            case \"curious-blob\":return hex`006e000408040400001c00010a006400f401640000040000000000000000000000000005000004ae0000000100010a06000700010a0e000f00010f0f001000011110001100011214001500011118001900010f1c001d00010a20002100014b26002700014b30003100011232003300011433003400011234003500011138003900010f3c003d00014b40004100010a46004700010a5c005e00010a60006200014b66006800014b7000710001167200730001577300740001167400750001147600780001167800790001127a007b0001147c007d00011105001c000f0a006400f4010a0000040000000000000000000000000000000002900000000200010a06000700010a0e000f00010f0f001000011110001200011214001600011118001a00010f1c001d00010a20002200014b26002700014b30003100011232003300011433003400011234003600011138003a00010f3c003e00014b40004200010a46004800010a5c005e00010a60006200014b66006800014b70007200010a76007700014b7c007d00014b06001c00010a006400f401640000040000000000000000000000000000000002600000000200010a06000800010a1c001d00010a20002200014b26002800014b30003200010a36003800010a3c003e00014b40004200010a46004800010a5c005e00010a60006200014b66006800014b70007200010a76007700014b7c007d00014b09010e02026400000403780000040a000301000000640001c80000040100000000640001640000040100000000fa0004af00000401c80000040a00019600000414000501006400140005010000002c0104dc00000401fa0000040a0001c8000004140005d0076400140005d0070000c800029001f40105c201f4010a0005900114001400039001000005c201f4010500058403050032000584030000fa00049001000005c201f4010500058403c80032000584030500640005840300009001049001000005c201f4010500058403c80064000584030500c8000584030000f40105ac0d000404a00f00000a0004ac0d2003010004a00f0000280004ac0d9001010004a00f0000280002d00700040408070f0064000408070000c80003c800c8000e7d00c80019000e64000f0032000e78000000fa00032c01c8000ee100c80019000ec8000f0032000edc000000fa0003f401c8000ea901c80019000e90010f0032000ea4010000fa0001c8000004014b000000c800012c01000401c8000000c8000190010004012c010000c80002c800000404c8000f0064000496000000c80002c2010004045e010f006400042c010000640002c409000404c4096400960004f6090000f40102b80b000404b80b64002c0104f40b0000f401022003000004200300040a000420030000ea01029001000004900100040a000490010000900102d007000410d0076400960010d0070000c800450100000100020e050600070001050800090002050a0c000d000202050e000f000106120013000105140015000202061800190002120a1c001d00030e02051e001f00010620002100020e0524002500010526002700010528002900010a2a002b0001052c002d0001022e002f00010530003100020e053200330001063400350001003600370001003800390005120105080a3a003b0001063c003d0001003e003f0002000540004100020e054600470001054800490002050a4c004d000202054e004f0001065200530001055400550002020658005900010a5c005d00030e02055e005f00010660006100020e0564006500010566006700010568006900010a6a006b0001056c006d0001026e006f00010570007100020e05720073000106740075000100760077000100780079000301050a7a007b0001067c007d0001007e007f00020005`;\n            case \"song10\":\n            case \"bow-the-mighty-oak\":return hex`00b4000408060400001c00010a006400f401640000040000000000000000000000000005000004780018001900015019001c00011222002300010d48004900011249004c0001144e004f00015552005300011472007300010d78007900011179007d00011282008300010d8e008f0001128f00920001149600970001559c009d000114a200a3000112a800a9000150b400b5000155b500b8000157be00bf00011405001c000f0a006400f4010a000004000000000000000000000000000000000290000600080001500c000e00010f12001400014e18001a00010d2e00300001503400360001503600380001503c003e00010f42004400014e48004a00010d6000620001506600680001506c006e00010f72007400014e78007a00010d8e00900001149600980001939c009e000112a200a4000150a800aa00010dae00b000010ab400b6000149ba00bc000108be00c000015006001c00010a006400f401640000040000000000000000000000000000000002b0000700080001500d000e00010f13001400014e18001900020d5c19001a00011e2e00300001503400360001503600380001503c003e00010f42004400014e48004900030d1b6149004b00025c634e004f00021e2552005300025c636000620001506600680001506c006e00010f72007400014e78007a00010d8e008f0001149600980001939c009e000112a200a4000150a800aa00010dae00b000010ab400b60002491bba00bc000108be00c00002502009010e02026400000403780000040a000301000000640001c80000040100000000640001640000040100000000fa0004af00000401c80000040a00019600000414000501006400140005010000002c0104dc00000401fa0000040a0001c8000004140005d0076400140005d0070000c800029001f40105c201f4010a0005900114001400039001000005c201f4010500058403050032000584030000fa00049001000005c201f4010500058403c80032000584030500640005840300009001049001000005c201f4010500058403c80064000584030500c8000584030000f40105ac0d000404a00f00000a0004ac0d2003010004a00f0000280004ac0d9001010004a00f0000280002d00700040408070f0064000408070000c80003c800c8000e7d00c80019000e64000f0032000e78000000fa00032c01c8000ee100c80019000ec8000f0032000edc000000fa0003f401c8000ea901c80019000e90010f0032000ea4010000fa0001c8000004014b000000c800012c01000401c8000000c8000190010004012c010000c80002c800000404c8000f0064000496000000c80002c2010004045e010f006400042c010000640002c409000404c4096400960004f6090000f40102b80b000404b80b64002c0104f40b0000f401022003000004200300040a000420030000ea01029001000004900100040a000490010000900102d007000410d0076400960010d0070000c8008401000001000201080400050001060600070001050a000b0001060c000d00031205091200130001051600170001061800190001051c001d0001061e001f00010524002500031205092800290001052a002b0001062e002f0002010530003100030106073400350001063600370001053a003b0001063c003d00031205094200430001054600470001064800490001054c004d0001064e004f00010554005500031201095800590001015e005f00010760006100030105086400650001066600670001056a006b0001066c006d00031205097000710001057200730001067600770001067800790001057c007d0001057e007f000106820083000201068400850003120509880089000201058a008b0001068e008f000106900091000201059400950001069600970001059a009b0001069c009d0003120609a000a100020106a200a3000106a600a700020105a800a9000106ac00ad000105ae00af000106b200b300020105b400b50003120609b800b90003120509ba00bb000106be00bf00051201050809`;\n            case \"song6\":\n            case \"falling-blossoms\":return hex`00a0000408060206001c00010a006400f401640000040000000000000000000000000000000002f50000000100030d192701000400012906000800012a0a000c00012910001200012a1600180001291e001f0001252200240001222400260001253000310003111d2731003400012936003800012a3a003c00012940004200012a46004700012a47004900012c4e005000012a5400560001295a005c00012a5e005f0002121e60006100031420296a006c00012570007200012272007600012588008a0001228a008c0001258e009000012790009100035561279100920001689600980001279c009e000125a200a4000127a600a700021863a700a8000125ac00ae000161b200b300011eb300b4000120b800ba00011ebe00c000020d2209010e02026400000403780000040a000301000000640001c80000040100000000640001640000040100000000fa0004af00000401c80000040a00019600000414000501006400140005010000002c0104dc00000401fa0000040a0001c8000004140005d0076400140005d0070000c800029001f40105c201f4010a0005900114001400039001000005c201f4010500058403050032000584030000fa00049001000005c201f4010500058403c80032000584030500640005840300009001049001000005c201f4010500058403c80064000584030500c8000584030000f40105ac0d000404a00f00000a0004ac0d2003010004a00f0000280004ac0d9001010004a00f0000280002d00700040408070f0064000408070000c80003c800c8000e7d00c80019000e64000f0032000e78000000fa00032c01c8000ee100c80019000ec8000f0032000edc000000fa0003f401c8000ea901c80019000e90010f0032000ea4010000fa0001c8000004014b000000c800012c01000401c8000000c8000190010004012c010000c80002c800000404c8000f0064000496000000c80002c2010004045e010f006400042c010000640002c409000404c4096400960004f6090000f40102b80b000404b80b64002c0104f40b0000f401022003000004200300040a000420030000ea01029001000004900100040a000490010000900102d007000410d0076400960010d0070000c8007f01000001000201080400050001060600070001050a000b0001060c000d00020509120013000105160017000201061800190001051c001d000201061e001f000105240025000205092800290001052a002b0001062e002f0002010530003100030106073400350001063600370001053a003b0001063c003d000205094200430001054600470001064800490001054c004d0001064e004f000201055400550001095800590001015e005f0002010760006100030105086400650001066600670001056a006b0001066c006d000205097000710001057200730001067600770001067800790001057c007d0001057e007f0001068200830002010684008500020509880089000201058a008b0001068e008f000106900091000201059400950001069600970001059a009b0001069c009d00020609a000a1000106a200a3000106a600a700020105a800a900020106ac00ad00020105ae00af00020106b200b3000105b400b50003010609b800b900020105ba00bb00020106be00bf0003010508`;\n            case \"song7\":\n            case \"jolliest-of-rogers\":return hex`007c000408040400001c00010a006400f401640000040000000000000000000000000005000004ae000200040001570400050001160800090001140c000e0001161000120001571400160001161600180001141a001c00010d2c002e00014b2e003000014b30003100010f32003300010f34003600014b36003700010d3c003e0001084200430001574400450001164800490001144c004d00011650005100015756005700011b5c005d0001196c006d00014b6e006f00014b70007100010f72007300010f74007500014b7600770001117c007d00010d05001c000f0a006400f4010a000004000000000000000000000000000000000272000c000d00010d14001500010d1a001b00010d20002100010d2e002f00010c30003100010f32003300010f36003700010d3c003d0001084c004d00010d54005500010d5a005b00010d60006100010d6c006d00014b6e006f00014b70007100010f72007300010f7600770001117c007d00010d06001c00010a006400f4016400000400000000000000000000000000000000025a0000000100020d190c000e00020d1914001600020d191a001c00020d1920002200020d192c002e00020d193c003e00010840004100020d194c004d00020d1954005500020d195a005b00020d1960006100020d196c006e00020d1909010e02026400000403780000040a000301000000640001c80000040100000000640001640000040100000000fa0004af00000401c80000040a00019600000414000501006400140005010000002c0104dc00000401fa0000040a0001c8000004140005d0076400140005d0070000c800029001f40105c201f4010a0005900114001400039001000005c201f4010500058403050032000584030000fa00049001000005c201f4010500058403c80032000584030500640005840300009001049001000005c201f4010500058403c80064000584030500c8000584030000f40105ac0d000404a00f00000a0004ac0d2003010004a00f0000280004ac0d9001010004a00f0000280002d00700040408070f0064000408070000c80003c800c8000e7d00c80019000e64000f0032000e78000000fa00032c01c8000ee100c80019000ec8000f0032000edc000000fa0003f401c8000ea901c80019000e90010f0032000ea4010000fa0001c8000004014b000000c800012c01000401c8000000c8000190010004012c010000c80002c800000404c8000f0064000496000000c80002c2010004045e010f006400042c010000640002c409000404c4096400960004f6090000f40102b80b000404b80b64002c0104f40b0000f401022003000004200300040a000420030000ea01029001000004900100040a000490010000900102d007000410d0076400960010d0070000c8009c0100000100020e050200030001050400050001050600070001050800090002050a0a000b0001050c000d000202050e000f000106100011000105120013000105140015000202061600170001061800190002050a1a001b0001051c001d0001071e001f000107200021000202052200230001052400250001052600270001052800290002050a2a002b0001052c002d000202052e002f00010530003100010632003300010734003500020106360037000201073800390002050a3a003b000201053c003d000201063e003f0002010740004100020e054200430001054400450001054600470001054800490002050a4a004b0001054c004d000202054e004f000105500051000105520053000105540055000202055600570001055800590002050a5a005b0001055c005d0001055e005f000105600061000202056200630001056400650001056600670001056800690002050a6a006b0001056c006d000202056e006f0001057000710002010672007300010774007500020106760077000201077800790001077a007b000201057c007d000201077e007f00020107`;\n        }\n        return null;\n    })\n\n}\n// Auto-generated code. Do not edit.\n",
  "main.blocks": "<xml xmlns=\"https://developers.google.com/blockly/xml\"><block type=\"keyonevent\" x=\"0\" y=\"0\"><field name=\"button\">controller.up</field><field name=\"event\">ControllerButtonEvent.Pressed</field><statement name=\"HANDLER\"><block type=\"music_playable_play\"><field name=\"playbackMode\">music.PlaybackMode.UntilDone</field><value name=\"toPlay\"><shadow type=\"music_song_field_editor\"><field name=\"song\">assets.song`falling-blossoms`</field><data>{\"commentRefs\":[],\"fieldData\":{\"song\":\"mySongs.song6\"}}</data></shadow></value></block></statement></block><block type=\"keyonevent\" x=\"0\" y=\"180\"><field name=\"button\">controller.down</field><field name=\"event\">ControllerButtonEvent.Pressed</field><statement name=\"HANDLER\"><block type=\"music_playable_play\"><field name=\"playbackMode\">music.PlaybackMode.UntilDone</field><value name=\"toPlay\"><shadow type=\"music_song_field_editor\"><field name=\"song\">assets.song`jolliest-of-rogers`</field><data>{\"commentRefs\":[],\"fieldData\":{\"song\":\"mySongs.song7\"}}</data></shadow></value></block></statement></block><block type=\"keyonevent\" x=\"0\" y=\"360\"><field name=\"button\">controller.left</field><field name=\"event\">ControllerButtonEvent.Pressed</field><statement name=\"HANDLER\"><block type=\"music_playable_play\"><field name=\"playbackMode\">music.PlaybackMode.UntilDone</field><value name=\"toPlay\"><shadow type=\"music_song_field_editor\"><field name=\"song\">assets.song`bow-the-mighty-oak`</field><data>{\"commentRefs\":[],\"fieldData\":{\"song\":\"mySongs.song10\"}}</data></shadow></value></block></statement></block><block type=\"keyonevent\" x=\"0\" y=\"520\"><field name=\"button\">controller.right</field><field name=\"event\">ControllerButtonEvent.Pressed</field><statement name=\"HANDLER\"><block type=\"music_playable_play\"><field name=\"playbackMode\">music.PlaybackMode.UntilDone</field><value name=\"toPlay\"><shadow type=\"music_song_field_editor\"><field name=\"song\">assets.song`curious-blob`</field><data>{\"commentRefs\":[],\"fieldData\":{\"song\":\"mySongs.song11\"}}</data></shadow></value></block></statement></block></xml>",
  "main.ts": "controller.up.onEvent(ControllerButtonEvent.Pressed, function () {\n    music.play(music.createSong(assets.song`falling-blossoms`), music.PlaybackMode.UntilDone)\n})\ncontroller.left.onEvent(ControllerButtonEvent.Pressed, function () {\n    music.play(music.createSong(assets.song`bow-the-mighty-oak`), music.PlaybackMode.UntilDone)\n})\ncontroller.right.onEvent(ControllerButtonEvent.Pressed, function () {\n    music.play(music.createSong(assets.song`curious-blob`), music.PlaybackMode.UntilDone)\n})\ncontroller.down.onEvent(ControllerButtonEvent.Pressed, function () {\n    music.play(music.createSong(assets.song`jolliest-of-rogers`), music.PlaybackMode.UntilDone)\n})\n",
  "pxt.json": "{\n    \"name\": \"galaxy-songs\",\n    \"description\": \"\",\n    \"dependencies\": {\n        \"device\": \"*\"\n    },\n    \"files\": [\n        \"main.blocks\",\n        \"main.ts\",\n        \"README.md\",\n        \"assets.json\",\n        \"images.g.jres\",\n        \"images.g.ts\",\n        \"tutorial.custom.ts\"\n    ],\n    \"targetVersions\": {\n        \"branch\": \"v1.12.30\",\n        \"tag\": \"v1.12.30\",\n        \"commits\": \"https://github.com/microsoft/pxt-arcade/commits/33228b1cc7e1bea3f728c26a6047bdef35fd2c09\",\n        \"target\": \"1.12.30\",\n        \"pxt\": \"8.5.41\"\n    },\n    \"preferredEditor\": \"tsprj\",\n    \"theme\": \"zune\"\n}\n",
  "tutorial.custom.ts": "music.setVolume(20)"
}