void start_playing (gchar * callback) { smf_t *smf = Denemo.project->movement->smf; if (callback && *callback) callback_script = g_string_new (callback); if (Denemo.project->movement->recorded_midi_track) safely_add_track (Denemo.project->movement->smf, Denemo.project->movement->recorded_midi_track); fix_start_end_ordering (); smf_rewind (smf); gdouble start = (Denemo.project->movement->start_time/get_playback_speed()) - SHAVING; if(smf_seek_to_seconds (smf, (start>0.0)?start:0.0)) g_warning("smf_seek_to_seconds %f failed", start); initialize_until_time (); initialize_playhead (); playing = TRUE; last_draw_time = -1.0;//needed to trigger drawing first note }
void start_audio_playing (gboolean annotate) { if (annotate) { annotating = TRUE; if (timings) g_queue_clear (timings); else timings = g_queue_new (); g_signal_connect (G_OBJECT (Denemo.scorearea), "key_press_event", G_CALLBACK (record_timing), NULL); g_signal_handlers_block_by_func (G_OBJECT (Denemo.scorearea), G_CALLBACK (scorearea_keypress_event), NULL); g_signal_handlers_block_by_func (G_OBJECT (Denemo.scorearea), G_CALLBACK (scorearea_button_press), NULL); g_signal_handlers_block_by_func (G_OBJECT (Denemo.scorearea), G_CALLBACK (scorearea_button_release), NULL); } rewind_audio (); initialize_until_time (); audio_play (); playing = TRUE; }