void ags_menu_bar_add_lv2_bridge_callback(GtkWidget *menu_item, AgsMenuBar *menu_bar) { AgsWindow *window; AgsLv2Bridge *lv2_bridge; AgsAddAudio *add_audio; AgsThread *main_loop; AgsTaskThread *task_thread; AgsApplicationContext *application_context; window = (AgsWindow *) gtk_widget_get_ancestor((GtkWidget *) menu_bar, AGS_TYPE_WINDOW); application_context = window->application_context; main_loop = application_context->main_loop; task_thread = ags_thread_find_type(main_loop, AGS_TYPE_TASK_THREAD); lv2_bridge = ags_lv2_bridge_new(G_OBJECT(window->soundcard), g_object_get_data(menu_item, AGS_MENU_BAR_LV2_FILENAME_KEY), g_object_get_data(menu_item, AGS_MENU_BAR_LV2_URI_KEY)); add_audio = ags_add_audio_new(window->soundcard, AGS_MACHINE(lv2_bridge)->audio); ags_task_thread_append_task(task_thread, AGS_TASK(add_audio)); gtk_box_pack_start((GtkBox *) window->machines, (GtkWidget *) lv2_bridge, FALSE, FALSE, 0); ags_lv2_bridge_load(lv2_bridge); ags_connectable_connect(AGS_CONNECTABLE(lv2_bridge)); // lv2_bridge->machine.audio->frequence = ; lv2_bridge->machine.audio->audio_channels = 2; ags_audio_set_pads(AGS_MACHINE(lv2_bridge)->audio, AGS_TYPE_INPUT, 1); ags_audio_set_pads(AGS_MACHINE(lv2_bridge)->audio, AGS_TYPE_OUTPUT, 1); ags_machine_find_port(AGS_MACHINE(lv2_bridge)); gtk_widget_show_all((GtkWidget *) lv2_bridge); }
void ags_menu_action_add_lv2_bridge_callback(GtkWidget *menu_item, gpointer data) { AgsWindow *window; AgsLv2Bridge *lv2_bridge; AgsThread *gui_thread; AgsAddAudio *add_audio; AgsApplicationContext *application_context; AgsLv2Plugin *lv2_plugin; gchar *filename, *effect; filename = g_object_get_data((GObject *) menu_item, AGS_MENU_ITEM_FILENAME_KEY); effect = g_object_get_data((GObject *) menu_item, AGS_MENU_ITEM_EFFECT_KEY); application_context = ags_application_context_get_instance(); window = (AgsWindow *) ags_ui_provider_get_window(AGS_UI_PROVIDER(application_context)); gui_thread = ags_ui_provider_get_gui_thread(AGS_UI_PROVIDER(application_context)); /* create lv2 bridge */ lv2_bridge = ags_lv2_bridge_new(G_OBJECT(window->soundcard), filename, effect); lv2_plugin = ags_lv2_manager_find_lv2_plugin(ags_lv2_manager_get_instance(), filename, effect); if(lv2_plugin != NULL && (AGS_LV2_PLUGIN_IS_SYNTHESIZER & (lv2_plugin->flags)) != 0){ ags_audio_set_flags(AGS_MACHINE(lv2_bridge)->audio, (AGS_AUDIO_OUTPUT_HAS_RECYCLING | AGS_AUDIO_INPUT_HAS_RECYCLING | AGS_AUDIO_SYNC | AGS_AUDIO_ASYNC)); ags_audio_set_ability_flags(AGS_MACHINE(lv2_bridge)->audio, (AGS_SOUND_ABILITY_NOTATION)); ags_audio_set_behaviour_flags(AGS_MACHINE(lv2_bridge)->audio, (AGS_SOUND_BEHAVIOUR_DEFAULTS_TO_INPUT | AGS_SOUND_BEHAVIOUR_REVERSE_MAPPING)); g_object_set(AGS_MACHINE(lv2_bridge)->audio, "max-input-pads", 128, "audio-start-mapping", 0, "audio-end-mapping", 128, "midi-start-mapping", 0, "midi-end-mapping", 128, NULL); AGS_MACHINE(lv2_bridge)->flags |= (AGS_MACHINE_IS_SYNTHESIZER | AGS_MACHINE_REVERSE_NOTATION); ags_machine_popup_add_connection_options((AgsMachine *) lv2_bridge, (AGS_MACHINE_POPUP_MIDI_DIALOG)); ags_machine_popup_add_edit_options((AgsMachine *) lv2_bridge, (AGS_MACHINE_POPUP_ENVELOPE)); } add_audio = ags_add_audio_new((AgsApplicationContext *) window->application_context, AGS_MACHINE(lv2_bridge)->audio); ags_gui_thread_schedule_task((AgsGuiThread *) gui_thread, (GObject *) add_audio); gtk_box_pack_start((GtkBox *) window->machines, GTK_WIDGET(lv2_bridge), FALSE, FALSE, 0); /* connect everything */ ags_connectable_connect(AGS_CONNECTABLE(lv2_bridge)); /* */ AGS_MACHINE(lv2_bridge)->audio->audio_channels = 2; /* */ if(lv2_plugin != NULL){ if((AGS_LV2_PLUGIN_IS_SYNTHESIZER & (lv2_plugin->flags)) == 0){ ags_audio_set_pads(AGS_MACHINE(lv2_bridge)->audio, AGS_TYPE_INPUT, 1, 0); }else{ ags_audio_set_pads(AGS_MACHINE(lv2_bridge)->audio, AGS_TYPE_INPUT, 128, 0); } } ags_audio_set_pads(AGS_MACHINE(lv2_bridge)->audio, AGS_TYPE_OUTPUT, 1, 0); /* */ ags_lv2_bridge_load(lv2_bridge); /* */ gtk_widget_show_all(GTK_WIDGET(lv2_bridge)); }