+ Music_output_def *odef = unsmob_music_output_def (output_def);
+ Music * music = unsmob_music (mus);
+
+ SCM_ASSERT_TYPE (music, mus, SCM_ARG1, __FUNCTION__, "Music");
+ SCM_ASSERT_TYPE (odef, output_def, SCM_ARG2, __FUNCTION__, "Output definition");
+
+ Cpu_timer timer;
+ Global_translator * trans = odef->get_global_translator ();
+ if (!trans)
+ {
+ programming_error ("no toplevel translator");
+ return SCM_BOOL_F;
+ }
+ progress_indication (_ ("Interpreting music..."));
+
+ trans->final_mom_ = music->get_length ();
+ SCM protected_iter = Music_iterator::get_static_get_iterator (music);
+ Music_iterator * iter = unsmob_iterator (protected_iter);
+ iter->init_translator (music, trans);
+
+ iter->construct_children ();
+
+ if (! iter->ok ())
+ {
+ warning (_ ("Need music in a score"));
+ return SCM_BOOL_F; // todo: shoudl throw exception.