diff --git a/src/Chrono.hxx b/src/Chrono.hxx
index 106c10445..b57ff3e62 100644
--- a/src/Chrono.hxx
+++ b/src/Chrono.hxx
@@ -42,6 +42,11 @@ public:
 		return SongTime(Base::zero());
 	}
 
+	template<typename D>
+	static constexpr SongTime Cast(D src) {
+		return SongTime(std::chrono::duration_cast<Base>(src));
+	}
+
 	static constexpr SongTime FromS(unsigned s) {
 		return SongTime(rep(s) * 1000);
 	}
@@ -138,6 +143,11 @@ public:
 		return SignedSongTime(-1);
 	}
 
+	template<typename D>
+	static constexpr SongTime Cast(D src) {
+		return SongTime(std::chrono::duration_cast<Base>(src));
+	}
+
 	static constexpr SignedSongTime FromS(int s) {
 		return SignedSongTime(rep(s) * 1000);
 	}