                      ;; They released us, end the overlay.
                      :done))
                  (handle-aftertouch [this message])
-                 (handle-pitch-bend [this message]))))
+                 (handle-pitch-bend [this message]
+                   (let [full-range (- controllers/maximum-bpm controllers/minimum-bpm)
+                         fraction (/ (+ (* (:data2 message) 128) (:data1 message)) 16383)
+                         adjusted (double (+ controllers/minimum-bpm (* fraction full-range)))
+                         resolution 0.1
+                         normalized (double (* (Math/round (/ adjusted resolution)) resolution))]
+                     (with-show (:show controller)
+                       (when (= (:type (show/sync-status)) :manual)
+                         (rhythm/metro-bpm (:metronome (:show controller)) normalized))))))))
 
 (defn- beat-adjusting-interface
   "Brighten the section of the beat which is being adjusted."

    (let [graphics (create-graphics controller)
          bpm (double (:bpm snapshot))
          bpm-string (format "%.1f" bpm)
          label (java.text.AttributedString. bpm-string)]
      (set-graphics-color graphics metronome-background)
      (.fillRect graphics button-cell-width 21 button-cell-width 20)

                       (dec (count bpm-string)) (count bpm-string)))
      (draw-attributed-variable-value controller 1 1 label metronome-content)
      (draw-gauge controller 1 1 bpm :lowest controllers/minimum-bpm :highest controllers/maximum-bpm
                  :track-color metronome-content :active-color white-color)
      (reset! (:next-touch-strip controller) [(math/round (* 16383 (/ (- bpm controllers/minimum-bpm) bpm-range)))
                                              touch-strip-mode-level]))

    ;; Display the sync mode in red to explain why we are not adjusting it.
    (let [graphics (create-graphics controller)]
