예제 #1
0
파일: midi.c 프로젝트: denemo/denemo
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
}
예제 #2
0
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;
}