       @mate.animations.add 'end', [4..MateLastFrame], 12
 
     _addMusic: ->
+      @userVolume = 1
       @music = @add.audio 'bgm', 0, yes
       @music.mute = @developing or @debugging
       @music.play()
-      @gui?.add @music, 'mute'
+      @gui?.add(@music, 'mute').listen()
+      increment = 0.1
+      @loudKey = @_addKey Keyboard.EQUALS, => @userVolume += increment
+      @muteKey = @_addKey Keyboard.ZERO, => @music.mute = not @music.mute
+      @quietKey = @_addKey Keyboard.UNDERSCORE, => @userVolume -= increment
 
     _addPlatforms: ->
       @platforms = new Platforms 


      @game.onBlur.remove @onBlur, @
      @game.onFocus.remove @onFocus, @
      @quitKey.onDown.remove @quit, @
      @onHit.remove @quit, @

      @gui?.destroy()
      @music.destroy()

    onBlur: ->
      @music?.pause()

      targetVolume = ((@platforms.tilemap.heightInPixels - @player.sprite.y) /
                       @platforms.tilemap.heightInPixels) ** 1.3
      volume = @music.volume + ((targetVolume - @music.volume) / 24) # Ease into target, with fps
      @userVolume = @math.clamp @userVolume, 0, 2
      volume *= @userVolume # Factor in user controls.
      @music.volume = @math.clamp volume, 0.2, 0.8
    , 42, { leading: on } # ms/f at 24fps

