+ else if (scm_is_pair (m))
+ copy = scm_cons (ly_music_deep_copy (scm_car (m)),
+ ly_music_deep_copy (scm_cdr (m)));
+ return copy;
+}
+
+LY_DEFINE (ly_music_transpose, "ly:music-transpose",
+ 2, 0, 0, (SCM m, SCM p),
+ "Transpose @var{m} such that central C is mapped to @var{p}. "
+ "Return @var{m}.")
+{
+ Music * sc = unsmob_music (m);
+ Pitch * sp = unsmob_pitch (p);
+ SCM_ASSERT_TYPE (sc, m, SCM_ARG1, __FUNCTION__, "music");
+ SCM_ASSERT_TYPE (sp, p, SCM_ARG2, __FUNCTION__, "pitch");
+
+ sc->transpose (*sp);
+ // SCM_UNDEFINED ?
+ return sc->self_scm ();
+}
+
+/*
+ TODO: should take moment factor?
+ */
+LY_DEFINE (ly_music_compress, "ly:music-compress",
+ 2, 0, 0, (SCM m, SCM factor),
+ "Compress music object @var{m} by moment @var{factor}."
+ )
+{
+ Music * sc = unsmob_music (m);
+
+ SCM_ASSERT_TYPE (sc, m, SCM_ARG1, __FUNCTION__, "music");
+ SCM_ASSERT_TYPE (unsmob_moment (factor), factor, SCM_ARG2, __FUNCTION__, "moment");
+
+ sc->compress (*unsmob_moment (factor));
+ return sc->self_scm ();
+}
+
+LY_DEFINE (ly_music_scorify, "ly:music-scorify",
+ 2, 0, 0,
+ (SCM music, SCM parser),
+ "Return MUSIC encapsulated in SCORE.")
+{
+#if 0
+ SCM_ASSERT_TYPE (ly_c_music_p (music), music, SCM_ARG1, __FUNCTION__, "music");
+#endif
+ Score *score = new Score;
+
+ score->set_music (music, parser);
+
+ scm_gc_unprotect_object (score->self_scm ());
+ return score->self_scm ();