/** * Frees smf and all it's descendant structures. */ void smf_delete(smf_t *smf) { /* Remove all the tracks, from last to first. */ while (smf->tracks_array->len > 0) smf_track_delete(g_ptr_array_index(smf->tracks_array, smf->tracks_array->len - 1)); smf_fini_tempo(smf); assert(smf->tracks_array->len == 0); assert(smf->number_of_tracks == 0); g_ptr_array_free(smf->tracks_array, TRUE); g_ptr_array_free(smf->tempo_array, TRUE); memset(smf, 0, sizeof(smf_t)); free(smf); }
static int cmd_trackrm(char *arg) { int num = parse_track_number(arg); if (num < 0) return (-1); if (selected_track != NULL && num == selected_track->track_number) { selected_track = NULL; selected_event = NULL; } smf_track_delete(smf_get_track_by_number(smf, num)); g_message("Track %d removed.", num); return (0); }
gboolean writer_timeout (gpointer file_name_gpointer) { int i; char * file_name = (char *) file_name_gpointer; /* * XXX: It should be done like this: * http://wwwtcs.inf.tu-dresden.de/~tews/Gtk/x2992.html */ if (ctrl_c_pressed == 0) return TRUE; jack_deactivate(jack_client); smf_rewind(smf); /* Get rid of empty tracks. */ for (i = 0; i < 16; ++i) { if (tracks[i]->number_of_events == 0) { smf_remove_track(tracks[i]); smf_track_delete(tracks[i]); } } if (smf->number_of_tracks == 0) { g_message("No events recorded, not saving anything."); exit(0); } if (smf_save(smf, file_name)) { g_critical("Could not save file '%s', sorry.", file_name); exit(-1); } g_message("File '%s' saved successfully.", file_name); exit(0); }