+Music::set_spot (Input ip)
+{
+ set_property ("origin", make_input (ip));
+}
+
+Input*
+Music::origin () const
+{
+ Input *ip = unsmob_input (get_property ("origin"));
+ return ip ? ip : & dummy_input_global;
+}
+
+LY_DEFINE (ly_music_length, "ly:music-length",
+ 1, 0, 0, (SCM mus),
+ "Get the length of music expression @var{mus}, and return as a @code{Moment} object.")
+{
+ Music *sc = unsmob_music (mus);
+ SCM_ASSERT_TYPE (sc, mus, SCM_ARG1, __FUNCTION__, "music");
+ return sc->get_length ().smobbed_copy ();
+}
+
+LY_DEFINE (ly_music_property,
+ "ly:music-property", 2, 0, 0, (SCM mus, SCM sym),
+ "Get the property @var{sym} of music expression @var{mus}.\n"
+ "If @var{sym} is undefined, return @code{' ()}.\n" )
+{
+ Music * sc = unsmob_music (mus);
+ SCM_ASSERT_TYPE (sc, mus, SCM_ARG1, __FUNCTION__, "music");
+ SCM_ASSERT_TYPE (gh_symbol_p (sym), sym, SCM_ARG2, __FUNCTION__, "symbol");
+
+ return sc->internal_get_property (sym);
+}
+
+LY_DEFINE (ly_music_set_property, "ly:music-set-property!",
+ 3, 0, 0, (SCM mus, SCM sym, SCM val),
+ "Set property @var{sym} in music expression @var{mus} to @var{val}.")
+{
+ Music * sc = unsmob_music (mus);
+ SCM_ASSERT_TYPE (sc, mus, SCM_ARG1, __FUNCTION__, "music");
+ SCM_ASSERT_TYPE (gh_symbol_p (sym), sym, SCM_ARG2, __FUNCTION__, "symbol");
+
+ bool ok = type_check_assignment (sym, val, ly_symbol2scm ("music-type?"));
+ if (ok)
+ {
+ sc->internal_set_property (sym, val);
+ }
+
+ return SCM_UNSPECIFIED;
+}
+
+LY_DEFINE (ly_music_name, "ly:music-name",
+ 1, 0, 0, (SCM mus),
+ "Return the name of @var{music}.")
+{
+ Music *m = unsmob_music (mus);
+ SCM_ASSERT_TYPE (m, mus, SCM_ARG1, __FUNCTION__ ,"music");
+
+ char const *nm = classname (m);
+ return scm_makfrom0str (nm);
+}
+
+/* todo: property args */
+LY_DEFINE (ly_extended_make_music, "ly:make-bare-music",
+ 2, 0, 0, (SCM type, SCM props),
+ "Make a C++ music object of type @var{type}, initialize with\n"
+ "@var{props}. \n\n"
+ ""
+ "This function is for internal use, and is only called by "
+ "@code{make-music}, which is the preferred interface "
+ "for creating music objects. "
+ )