This actually depends on your actual use case: Do you want to kill the music (i.e. interrupt it while playing) or do you just want to prevent it from playing the next time?
The latter case is easily dealt with using a promise that can be filled once you think silence should fall:
(defn play-music! []
(let [p (promise)]
(future
(while (= (deref p 0 ::timeout) ::timeout)
...))
#(deliver p ::stop)))
This returns a function that can be called (without arguments) to stop the loop, e.g.:
(let [stop-fn (play-music!)]
;; ... do important music stuff ...
(stop-fn))
This will stop the loop after the snippet has stopped playing. If you want to really interrupt it, you can use future-cancel
(but the actual result of this depends on whether your piece of music is actually interruptible):
(defn play-music! []
(let [fut (future
(while true
...))]
#(future-cancel fut)))
This also returns the stop function. There's a variety of ways to repeatedly perform an operation, most of it are detailed e.g. here, including how to stop the resulting loop.