Example #1
0
File: smf.c Project: Darko8/libsmf
/**
 * 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);
}
Example #2
0
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);
}