void ags_select_acceleration_dialog_disconnect(AgsConnectable *connectable) { AgsAutomationEditor *automation_editor; AgsSelectAccelerationDialog *select_acceleration_dialog; select_acceleration_dialog = AGS_SELECT_ACCELERATION_DIALOG(connectable); if((AGS_SELECT_ACCELERATION_DIALOG_CONNECTED & (select_acceleration_dialog->flags)) == 0){ return; } select_acceleration_dialog->flags &= (~AGS_SELECT_ACCELERATION_DIALOG_CONNECTED); automation_editor = AGS_WINDOW(select_acceleration_dialog->main_window)->automation_window->automation_editor; g_object_disconnect(G_OBJECT(select_acceleration_dialog), "any_signal::response", G_CALLBACK(ags_select_acceleration_dialog_response_callback), select_acceleration_dialog, NULL); g_object_disconnect(G_OBJECT(select_acceleration_dialog->add), "any_signal::clicked", G_CALLBACK(ags_select_acceleration_dialog_add_callback), select_acceleration_dialog, NULL); g_object_disconnect(G_OBJECT(automation_editor), "any_signal::machine-changed", G_CALLBACK(ags_select_acceleration_dialog_machine_changed_callback), select_acceleration_dialog, NULL); }
void ags_panel_parent_set_callback(GtkWidget *widget, GtkObject *old_parent, AgsPanel *panel) { AgsWindow *window; gchar *str; if(old_parent != NULL){ return; } window = AGS_WINDOW(gtk_widget_get_toplevel(widget)); str = g_strdup_printf("Default %d", ags_window_find_machine_counter(window, AGS_TYPE_PANEL)->counter); g_object_set(AGS_MACHINE(panel), "machine-name", str, NULL); ags_window_increment_machine_counter(window, AGS_TYPE_PANEL); g_free(str); }
void ags_select_acceleration_dialog_connect(AgsConnectable *connectable) { AgsAutomationEditor *automation_editor; AgsSelectAccelerationDialog *select_acceleration_dialog; select_acceleration_dialog = AGS_SELECT_ACCELERATION_DIALOG(connectable); if((AGS_SELECT_ACCELERATION_DIALOG_CONNECTED & (select_acceleration_dialog->flags)) != 0){ return; } select_acceleration_dialog->flags |= AGS_SELECT_ACCELERATION_DIALOG_CONNECTED; automation_editor = AGS_WINDOW(select_acceleration_dialog->main_window)->automation_window->automation_editor; g_signal_connect(select_acceleration_dialog, "response", G_CALLBACK(ags_select_acceleration_dialog_response_callback), select_acceleration_dialog); /* add automation */ g_signal_connect(select_acceleration_dialog->add, "clicked", G_CALLBACK(ags_select_acceleration_dialog_add_callback), select_acceleration_dialog); /* machine changed */ g_signal_connect_after(automation_editor, "machine-changed", G_CALLBACK(ags_select_acceleration_dialog_machine_changed_callback), select_acceleration_dialog); }
void ags_drum_sequencer_count_callback(AgsDelayAudioRun *delay_audio_run, guint nth_run, guint delay, guint attack, AgsDrum *drum) { AgsWindow *window; AgsAudio *audio; AgsCountBeatsAudio *play_count_beats_audio; AgsCountBeatsAudioRun *play_count_beats_audio_run; AgsToggleLed *toggle_led; GList *list; guint counter, active_led; gdouble active_led_old, active_led_new; GValue value = {0,}; window = AGS_WINDOW(gtk_widget_get_ancestor((GtkWidget *) drum, AGS_TYPE_WINDOW)); audio = AGS_MACHINE(drum)->audio; /* get some recalls */ list = ags_recall_find_type(audio->play, AGS_TYPE_COUNT_BEATS_AUDIO); if(list != NULL){ play_count_beats_audio = AGS_COUNT_BEATS_AUDIO(list->data); } list = ags_recall_find_type_with_recycling_container(audio->play, AGS_TYPE_COUNT_BEATS_AUDIO_RUN, (GObject *) AGS_RECALL(delay_audio_run)->recall_id->recycling_container); if(list != NULL){ play_count_beats_audio_run = AGS_COUNT_BEATS_AUDIO_RUN(list->data); } /* set optical feedback */ active_led_new = (guint) play_count_beats_audio_run->sequencer_counter % AGS_DRUM_PATTERN_CONTROLS; drum->active_led = (guint) active_led_new; if(play_count_beats_audio_run->sequencer_counter == 0){ g_value_init(&value, G_TYPE_DOUBLE); ags_port_safe_read(play_count_beats_audio->sequencer_loop_end, &value); active_led_old = (guint) (g_value_get_double(&value) - 1.0) % AGS_DRUM_PATTERN_CONTROLS; }else{ active_led_old = (guint) (drum->active_led - 1.0) % AGS_DRUM_PATTERN_CONTROLS; } toggle_led = ags_toggle_led_new(gtk_container_get_children(GTK_CONTAINER(drum->led)), (guint) active_led_new, (guint) active_led_old); ags_task_thread_append_task(AGS_TASK_THREAD(AGS_AUDIO_LOOP(AGS_MAIN(window->ags_main)->main_loop)->task_thread), AGS_TASK(toggle_led)); }
void ags_audio_preferences_apply(AgsApplicable *applicable) { AgsPreferences *preferences; AgsAudioPreferences *audio_preferences; AgsApplicationContext *application_context; AgsConfig *config; GList *card_id, *card_name; char *device; gchar *str; int card_num; guint channels, channels_min, channels_max; guint rate, rate_min, rate_max; guint buffer_size, buffer_size_min, buffer_size_max; audio_preferences = AGS_AUDIO_PREFERENCES(applicable); preferences = (AgsPreferences *) gtk_widget_get_ancestor(GTK_WIDGET(audio_preferences), AGS_TYPE_PREFERENCES); application_context = AGS_WINDOW(preferences->parent)->application_context; config = application_context->config; /* samplerate */ str = g_strdup_printf("%u\0", (guint) gtk_spin_button_get_value(audio_preferences->samplerate)); ags_config_set_value(config, AGS_CONFIG_SOUNDCARD, "samplerate\0", str); g_free(str); /* buffer size */ str = g_strdup_printf("%u\0", (guint) gtk_spin_button_get_value(audio_preferences->buffer_size)); ags_config_set_value(config, AGS_CONFIG_SOUNDCARD, "buffer-size\0", str); g_free(str); /* dsp channels */ str = g_strdup_printf("%u\0", (guint) gtk_spin_button_get_value(audio_preferences->audio_channels)); ags_config_set_value(config, AGS_CONFIG_SOUNDCARD, "dsp-channels\0", str); g_free(str); /* card */ ags_config_set_value(config, AGS_CONFIG_SOUNDCARD, "alsa-handle\0", gtk_combo_box_text_get_active_text(audio_preferences->card)); }
void ags_midi_export_wizard_response_callback(GtkWidget *wizard, gint response, gpointer data) { AgsMidiExportWizard *midi_export_wizard; midi_export_wizard = (AgsMidiExportWizard *) wizard; switch(response){ case GTK_RESPONSE_REJECT: { if((AGS_MIDI_EXPORT_WIZARD_SHOW_FILE_CHOOSER & (midi_export_wizard->flags)) != 0){ /* show/hide */ gtk_widget_hide(midi_export_wizard->file_chooser->parent); gtk_widget_show(midi_export_wizard->machine_collection->parent); gtk_widget_show_all(midi_export_wizard->machine_collection); midi_export_wizard->flags |= AGS_MIDI_EXPORT_WIZARD_SHOW_MACHINE_COLLECTION; midi_export_wizard->flags &= (~AGS_MIDI_EXPORT_WIZARD_SHOW_FILE_CHOOSER); } } break; case GTK_RESPONSE_ACCEPT: { if((AGS_MIDI_EXPORT_WIZARD_SHOW_MACHINE_COLLECTION & (midi_export_wizard->flags)) != 0){ /* show/hide */ midi_export_wizard->flags |= AGS_MIDI_EXPORT_WIZARD_SHOW_FILE_CHOOSER; midi_export_wizard->flags &= (~AGS_MIDI_EXPORT_WIZARD_SHOW_MACHINE_COLLECTION); gtk_widget_hide(midi_export_wizard->machine_collection->parent); gtk_widget_show(midi_export_wizard->file_chooser->parent); gtk_widget_show_all(midi_export_wizard->file_chooser); } } break; case GTK_RESPONSE_OK: { ags_applicable_apply(AGS_APPLICABLE(wizard)); } case GTK_RESPONSE_DELETE_EVENT: case GTK_RESPONSE_CLOSE: case GTK_RESPONSE_CANCEL: { AGS_WINDOW(midi_export_wizard->main_window)->midi_export_wizard = NULL; gtk_widget_destroy(wizard); } break; default: g_warning("unknown response"); } }
int ags_machine_button_press_callback(GtkWidget *handle_box, GdkEventButton *event, AgsMachine *machine) { AgsWindow *window = AGS_WINDOW (gtk_widget_get_toplevel (GTK_WIDGET(handle_box))); if(event->button == 3) gtk_menu_popup (GTK_MENU (machine->popup), NULL, NULL, NULL, NULL, event->button, event->time); else if(event->button == 1) window->selected = machine; return(0); }
void ags_drum_disconnect(AgsConnectable *connectable) { AgsWindow *window; AgsDrum *drum; ags_drum_parent_connectable_interface->disconnect(connectable); drum = AGS_DRUM(connectable); window = AGS_WINDOW(gtk_widget_get_ancestor((GtkWidget *) drum, AGS_TYPE_WINDOW)); //TODO:JK: implement me }
void ags_drum_parent_set_callback(GtkWidget *widget, GtkObject *old_parent, AgsDrum *drum) { AgsWindow *window; if(old_parent != NULL) return; window = AGS_WINDOW(gtk_widget_get_ancestor((GtkWidget *) drum, AGS_TYPE_WINDOW)); AGS_MACHINE(drum)->name = g_strdup_printf("Default %d\0", ags_window_find_machine_counter(window, AGS_TYPE_DRUM)->counter); ags_window_increment_machine_counter(window, AGS_TYPE_DRUM); }
void ags_panel_parent_set_callback(GtkWidget *widget, GtkObject *old_parent, AgsPanel *panel) { AgsWindow *window; if(old_parent != NULL) return; window = AGS_WINDOW(gtk_widget_get_toplevel(widget)); AGS_MACHINE(panel)->name = g_strdup_printf("Default %d\0", ags_window_find_machine_counter(window, AGS_TYPE_PANEL)->counter); ags_window_increment_machine_counter(window, AGS_TYPE_PANEL); }
gboolean ags_window_delete_event_callback(GtkWidget *widget, gpointer data) { AgsWindow *window; GtkDialog *dialog; GtkWidget *cancel_button; AgsApplicationContext *application_context; gint response; window = AGS_WINDOW(widget); application_context = window->application_context; /* ask the user if he wants save to a file */ dialog = (GtkDialog *) gtk_message_dialog_new(GTK_WINDOW(window), GTK_DIALOG_DESTROY_WITH_PARENT, GTK_MESSAGE_QUESTION, GTK_BUTTONS_YES_NO, "Do you want to save '%s'?\0", window->name); cancel_button = gtk_dialog_add_button(dialog, GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL); gtk_widget_grab_focus(cancel_button); response = gtk_dialog_run(dialog); if(response == GTK_RESPONSE_YES) { AgsThread *main_loop; AgsTaskThread *task_thread; AgsSaveFile *save_file; AgsFile *file; char *filename; main_loop = application_context->main_loop; task_thread = ags_thread_find_type(main_loop, AGS_TYPE_TASK_THREAD); filename = window->name; file = (AgsFile *) g_object_new(AGS_TYPE_FILE, "application-context\0", application_context, "filename\0", g_strdup(filename), NULL); save_file = ags_save_file_new(file); ags_task_thread_append_task(task_thread, AGS_TASK(save_file)); g_object_unref(G_OBJECT(file)); } if(response != GTK_RESPONSE_CANCEL) { ags_main_quit(application_context); } else { gtk_widget_destroy(GTK_WIDGET(dialog)); } return(TRUE); }
void ags_notation_toolbar_connect(AgsConnectable *connectable) { AgsWindow *window; AgsNotationToolbar *notation_toolbar; GList *list; notation_toolbar = AGS_NOTATION_TOOLBAR(connectable); if((AGS_NOTATION_TOOLBAR_CONNECTED & (notation_toolbar->flags)) != 0){ return; } notation_toolbar->flags |= AGS_NOTATION_TOOLBAR_CONNECTED; window = AGS_WINDOW(gtk_widget_get_ancestor((GtkWidget *) notation_toolbar, AGS_TYPE_WINDOW)); g_object_set(notation_toolbar->move_note, "main-window", window, NULL); g_object_set(notation_toolbar->crop_note, "main-window", window, NULL); g_object_set(notation_toolbar->select_note, "main-window", window, NULL); g_object_set(notation_toolbar->position_notation_cursor, "main-window", window, NULL); /* tool */ g_signal_connect_after((GObject *) notation_toolbar->position, "toggled", G_CALLBACK(ags_notation_toolbar_position_callback), (gpointer) notation_toolbar); g_signal_connect_after((GObject *) notation_toolbar->edit, "toggled", G_CALLBACK(ags_notation_toolbar_edit_callback), (gpointer) notation_toolbar); g_signal_connect_after((GObject *) notation_toolbar->clear, "toggled", G_CALLBACK(ags_notation_toolbar_clear_callback), (gpointer) notation_toolbar); g_signal_connect_after((GObject *) notation_toolbar->select, "toggled", G_CALLBACK(ags_notation_toolbar_select_callback), (gpointer) notation_toolbar); /* edit */ g_signal_connect((GObject *) notation_toolbar->copy, "clicked", G_CALLBACK(ags_notation_toolbar_copy_or_cut_callback), (gpointer) notation_toolbar); g_signal_connect((GObject *) notation_toolbar->cut, "clicked", G_CALLBACK(ags_notation_toolbar_copy_or_cut_callback), (gpointer) notation_toolbar); g_signal_connect((GObject *) notation_toolbar->paste_tool, "clicked", G_CALLBACK(ags_notation_toolbar_paste_callback), (gpointer) notation_toolbar); g_signal_connect((GObject *) notation_toolbar->invert, "clicked", G_CALLBACK(ags_notation_toolbar_invert_callback), (gpointer) notation_toolbar); list = gtk_container_get_children((GtkContainer *) gtk_menu_tool_button_get_menu(notation_toolbar->paste_tool)); g_signal_connect_after(list->data, "activate", G_CALLBACK(ags_notation_toolbar_match_audio_channel_callback), notation_toolbar); g_signal_connect_after(list->next->data, "activate", G_CALLBACK(ags_notation_toolbar_no_duplicates_callback), notation_toolbar); g_list_free(list); /* additional tools */ ags_connectable_connect(AGS_CONNECTABLE(notation_toolbar->position_notation_cursor)); ags_connectable_connect(AGS_CONNECTABLE(notation_toolbar->crop_note)); ags_connectable_connect(AGS_CONNECTABLE(notation_toolbar->move_note)); ags_connectable_connect(AGS_CONNECTABLE(notation_toolbar->select_note)); /* zoom */ g_signal_connect_after((GObject *) notation_toolbar->zoom, "changed", G_CALLBACK(ags_notation_toolbar_zoom_callback), (gpointer) notation_toolbar); /* opacity */ g_signal_connect_after((GObject *) notation_toolbar->opacity, "value-changed", G_CALLBACK(ags_notation_toolbar_opacity_callback), (gpointer) notation_toolbar); }
void ags_ffplayer_open_dialog_response_callback(GtkWidget *widget, gint response, AgsMachine *machine) { AgsWindow *window; AgsFFPlayer *ffplayer; GtkFileChooserDialog *file_chooser; AgsSoundcard *soundcard; window = AGS_WINDOW(gtk_widget_get_toplevel(GTK_WIDGET(machine))); ffplayer = AGS_FFPLAYER(machine); file_chooser = GTK_FILE_CHOOSER_DIALOG(widget); if(response == GTK_RESPONSE_ACCEPT){ gchar *filename; filename = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(widget)); if(g_str_has_suffix(filename, ".sf2\0")){ AgsIpatch *ipatch; AgsPlayable *playable; gchar **preset; GError *error; /* clear preset and instrument */ ags_combo_box_text_remove_all(ffplayer->preset); ags_combo_box_text_remove_all(ffplayer->instrument); /* Ipatch related */ ipatch = g_object_new(AGS_TYPE_IPATCH, "mode\0", AGS_IPATCH_READ, NULL); g_object_set(ipatch, "filename\0", filename, NULL); ffplayer->ipatch = ipatch; ipatch->soundcard = window->soundcard; playable = AGS_PLAYABLE(ipatch); error = NULL; ags_playable_level_select(playable, 0, filename, &error); /* select first preset */ ipatch->nth_level = 1; preset = ags_playable_sublevel_names(playable); error = NULL; ags_playable_level_select(playable, 1, *preset, &error); /* fill ffplayer->preset */ while(preset != NULL && preset[0] != NULL){ gtk_combo_box_text_append_text(ffplayer->preset, *preset); preset++; } } gtk_combo_box_set_active(GTK_COMBO_BOX(ffplayer->preset), 0); } gtk_widget_destroy(widget); }
void ags_audio_preferences_reset(AgsApplicable *applicable) { AgsWindow *window; AgsPreferences *preferences; AgsAudioPreferences *audio_preferences; AgsSoundcard *soundcard; GtkListStore *model; GtkTreeIter iter; GList *card_id, *card_name; char *device; int card_num; guint channels, channels_min, channels_max; guint rate, rate_min, rate_max; guint buffer_size, buffer_size_min, buffer_size_max; GError *error; audio_preferences = AGS_AUDIO_PREFERENCES(applicable); /* */ preferences = (AgsPreferences *) gtk_widget_get_ancestor(GTK_WIDGET(audio_preferences), AGS_TYPE_PREFERENCES); window = AGS_WINDOW(preferences->parent); soundcard = AGS_SOUNDCARD(window->soundcard); /* refresh */ ags_soundcard_list_cards(AGS_SOUNDCARD(soundcard), &card_id, &card_name); model = gtk_list_store_new(2, G_TYPE_STRING, G_TYPE_STRING); while(card_id != NULL){ gtk_list_store_append(model, &iter); gtk_list_store_set(model, &iter, 0, card_id->data, 1, card_name->data, -1); card_id = card_id->next; card_name = card_name->next; } g_list_free(card_id); g_list_free(card_name); gtk_combo_box_set_model(audio_preferences->card, GTK_TREE_MODEL(model)); /* */ g_object_get(G_OBJECT(soundcard), "device\0", &device, "pcm-channels\0", &channels, "frequency\0", &rate, "buffer-size\0", &buffer_size, NULL); error = NULL; /* */ sscanf(device, "hw:%i\0", &card_num); // gtk_combo_box_set_active(audio_preferences->card, // card_num); gtk_spin_button_set_value(audio_preferences->audio_channels, (gdouble) channels); gtk_spin_button_set_value(audio_preferences->samplerate, (gdouble) rate); gtk_spin_button_set_value(audio_preferences->buffer_size, (gdouble) buffer_size); /* */ ags_soundcard_pcm_info(soundcard, gtk_combo_box_get_active_text(audio_preferences->card), &channels_min, &channels_max, &rate_min, &rate_max, &buffer_size_min, &buffer_size_max, &error); if(error != NULL){ GtkMessageDialog *dialog; dialog = (GtkMessageDialog *) gtk_message_dialog_new((GtkWindow *) gtk_widget_get_ancestor(GTK_WIDGET(audio_preferences), AGS_TYPE_PREFERENCES), GTK_DIALOG_MODAL, GTK_MESSAGE_ERROR, GTK_BUTTONS_CLOSE, error->message); gtk_dialog_run(GTK_DIALOG(dialog)); gtk_widget_destroy(GTK_WIDGET(dialog)); gtk_spin_button_set_range(audio_preferences->audio_channels, 0.0, 24.0); gtk_spin_button_set_range(audio_preferences->samplerate, 1.0, 192000.0); gtk_spin_button_set_range(audio_preferences->buffer_size, 1.0, 65535.0); return; } gtk_spin_button_set_range(audio_preferences->audio_channels, channels_min, channels_max); gtk_spin_button_set_range(audio_preferences->samplerate, rate_min, rate_max); gtk_spin_button_set_range(audio_preferences->buffer_size, buffer_size_min, buffer_size_max); }
AgsTaskThread *task_thread; AgsDevout *devout; AgsAudio *master_audio, *slave_audio; AgsLinkChannel *linkChannel; GError *error; /* some pseudo code */ devout = AGS_WINDOW(gtk_widget_get_toblevel(widget))->devout; task_thread = AGS_AUDIO_LOOP(AGS_MAIN(devout->ags_main)->main_loop)->task_thread; /* create AgsAudio objects */ master_audio = (AgsAudio *) g_object_new(AGS_TYPE_AUDIO, "devout", devout, NULL); slave_audio = (AgsAudio *) g_object_new(AGS_TYPE_AUDIO, "devout", devout, NULL); /* assign AgsAudioSignal objects to master_audio and slave_audio */ ags_audio_set_flags(master_audio, AGS_AUDIO_OUTPUT_HAS_RECYCLING); ags_audio_set_flags(slave_audio, (AGS_AUDIO_ASYNC | AGS_AUDIO_OUTPUT_HAS_RECYCLING | AGS_AUDIO_INPUT_HAS_RECYCLING)); /* create AgsChannel objects within master_audio and slave_audio */ ags_audio_set_audio_channels(master_audio, 2); ags_audio_set_pads(master_audio, AGS_TYPE_OUTPUT, 1); ags_audio_set_pads(master_audio, AGS_TYPE_INPUT, 1); ags_audio_set_audio_channels(slave_audio, 2); ags_audio_set_pads(slave_audio, AGS_TYPE_OUTPUT, 1);