static void test_setup (void) { app = bt_test_application_new (); song = bt_song_new (app); bt_sink_machine_new (song, "master", NULL); }
static void test_setup (void) { app = bt_test_application_new (); song = bt_song_new (app); bt_child_proxy_set (song, "sequence::length", 16, "sequence::loop", FALSE, NULL); }
static void test_setup (void) { app = bt_test_application_new (); settings = bt_settings_make (); song = bt_song_new (app); setup = BT_SETUP (check_gobject_get_object_property (song, "setup")); minv = G_MAXFLOAT; maxv = -G_MAXFLOAT; }
static void test_setup (void) { app = bt_test_application_new (); song = bt_song_new (app); bt_sink_machine_new (song, "master", NULL); registry = btic_registry_new (); device = (BtIcDevice *) btic_test_device_new ("test"); btic_registry_add_device (device); }
static void test_setup (void) { app = bt_test_application_new (); song = bt_song_new (app); }
/** * bt_edit_application_load_song: * @self: the application instance to load a new song in * @file_name: the song filename to load * @err: where to store the error message in case of an error, or %NULL * * Loads a new song. If there is a previous song instance it will be freed. * * Returns: true for success */ gboolean bt_edit_application_load_song (const BtEditApplication * self, const char *file_name, GError ** err) { gboolean res = FALSE; BtSongIO *loader; BtSong *song; g_return_val_if_fail (BT_IS_EDIT_APPLICATION (self), FALSE); GST_INFO ("song name = %s", file_name); if ((loader = bt_song_io_from_file (file_name, err))) { BtSetup *setup; GList *missing_machines, *missing_waves; bt_edit_application_ui_lock (self); g_signal_connect (loader, "notify::status", G_CALLBACK (on_songio_status_changed), (gpointer) self); // create new song and release the previous one song = bt_song_new (BT_APPLICATION (self)); g_object_set ((gpointer) self, "song", NULL, NULL); #ifdef USE_DEBUG // do sanity check that bin is empty { GstBin *bin; g_object_get ((gpointer) self, "bin", &bin, NULL); if (GST_BIN_NUMCHILDREN (bin)) { GList *node = GST_BIN_CHILDREN (bin); GST_WARNING ("bin.num_children=%d has left-overs", GST_BIN_NUMCHILDREN (bin)); while (node) { GST_WARNING_OBJECT (node->data, "removing object %" G_OBJECT_REF_COUNT_FMT, G_OBJECT_LOG_REF_COUNT (node->data)); gst_bin_remove (bin, GST_ELEMENT (node->data)); node = GST_BIN_CHILDREN (bin); } } gst_object_unref (bin); } #endif // this is synchronous execution // https://github.com/Buzztrax/buzztrax/issues/52 // if we bump glib from 2.32 -> 2.36 we can use GTask and // g_task_run_in_thread() if (bt_song_io_load (loader, song, err)) { BtMachine *machine; // get sink-machine g_object_get (song, "setup", &setup, NULL); if ((machine = bt_setup_get_machine_by_type (setup, BT_TYPE_SINK_MACHINE))) { if (bt_machine_enable_input_post_level (machine)) { // DEBUG //bt_song_write_to_highlevel_dot_file(song); // DEBUG // set new song g_object_set ((gpointer) self, "song", song, NULL); res = TRUE; GST_INFO ("new song activated"); } else { GST_WARNING ("Can't add input level/gain element in sink machine"); } GST_DEBUG ("unreffing stuff after loading"); g_object_unref (machine); } else { GST_WARNING ("Can't look up sink machine"); } g_object_unref (setup); } else { GST_WARNING ("could not load song \"%s\"", file_name); } self->priv->unsaved = FALSE; g_object_notify (G_OBJECT (self), "unsaved"); bt_edit_application_ui_unlock (self); // get missing element info bt_child_proxy_get (song, "setup::missing-machines", &missing_machines, "wavetable::missing-waves", &missing_waves, NULL); // tell about missing machines and/or missing waves if (missing_machines || missing_waves) { GtkWidget *dialog; if ((dialog = GTK_WIDGET (bt_missing_song_elements_dialog_new (missing_machines, missing_waves)))) { bt_edit_application_attach_child_window (self, GTK_WINDOW (dialog)); gtk_widget_show_all (dialog); gtk_dialog_run (GTK_DIALOG (dialog)); gtk_widget_destroy (dialog); } } g_object_unref (song); g_object_unref (loader); } else { GST_WARNING ("Unknown extension \"%s\"", file_name); } return res; }
/** * bt_edit_application_new_song: * @self: the application instance to create a new song in * * Creates a new blank song instance. If there is a previous song instance it * will be freed. * * Returns: %TRUE for success */ gboolean bt_edit_application_new_song (const BtEditApplication * self) { gboolean res = FALSE; BtSong *song; BtSetup *setup; BtMachine *machine; gchar *id; gulong bars; GError *err = NULL; g_return_val_if_fail (BT_IS_EDIT_APPLICATION (self), FALSE); // create new song song = bt_song_new (BT_APPLICATION (self)); bt_child_proxy_get (song, "setup", &setup, "song-info::bars", &bars, NULL); // make initial song length 4 timelines bt_child_proxy_set (song, "sequence::length", bars * 4, NULL); // add audiosink id = bt_setup_get_unique_machine_id (setup, "master"); machine = BT_MACHINE (bt_sink_machine_new (song, id, &err)); if (err == NULL) { GHashTable *properties; GST_DEBUG ("sink-machine=%" G_OBJECT_REF_COUNT_FMT, G_OBJECT_LOG_REF_COUNT (machine)); g_object_get (machine, "properties", &properties, NULL); if (properties) { gchar str[G_ASCII_DTOSTR_BUF_SIZE]; g_hash_table_insert (properties, g_strdup ("xpos"), g_strdup (g_ascii_dtostr (str, G_ASCII_DTOSTR_BUF_SIZE, 0.0))); g_hash_table_insert (properties, g_strdup ("ypos"), g_strdup (g_ascii_dtostr (str, G_ASCII_DTOSTR_BUF_SIZE, 0.0))); } if (bt_machine_enable_input_post_level (machine)) { GST_DEBUG ("sink-machine=%" G_OBJECT_REF_COUNT_FMT, G_OBJECT_LOG_REF_COUNT (machine)); // set new song in application g_object_set ((gpointer) self, "song", song, NULL); res = TRUE; } else { GST_WARNING ("Can't add input level/gain element in sink machine"); } GST_DEBUG ("sink-machine=%" G_OBJECT_REF_COUNT_FMT, G_OBJECT_LOG_REF_COUNT (machine)); } else { GST_WARNING ("Can't create sink machine: %s", err->message); g_error_free (err); gst_object_unref (machine); } g_free (id); self->priv->unsaved = FALSE; g_object_notify (G_OBJECT (self), "unsaved"); // release references g_object_unref (setup); g_object_unref (song); return res; }