Chapter 10. Advanced Gtk+ Sequencer's fx engine

There a well know set of recalls described here. Additionally you might want to take advantage of recalls interfacing plugin APIs like LADSPA, DSSI or LV2. You can instantiate them simply with GList* ags_fx_factory_create(AgsAudio*, AgsRecallContainer*, AgsRecallContainer*, gchar*, gchar *, gchar *, guint, guint, guint, guint, gint, guint, guint)

Example 10.1. Using ags_fx_factory_create()

#include <glib.h>
#include <glib-object.h>

#include <ags/libags.h>
#include <ags/libags-audio.h>

AgsAudio *audio;
AgsRecallContainer *play_container, *recall_container;

AgsApplicationContext *application_context;

GObject *current_soundcard;

GList *start_soundcard;
GList *start_recall;

guint audio_channels;
guint output_pads, input_pads;

ags_audio_application_context_new();

/* get application context and soundcard */
application_context = ags_application_context_get_instance();

start_soundcard = ags_sound_provider_get_soundcard(AGS_SOUND_PROVIDER(application_context));

current_soundcard = start_soundcard->data;

/* creat audio and resize channels */
audio_channels = 2;

output_pads = 1;
input_pads = 88;

audio = ags_audio_new(current_soundcard);
ags_audio_set_audio_channels(audio,
                             audio_channels);
ags_audio_set_pads(audio,
                   AGS_TYPE_OUTPUT,
                   output_pads);
ags_audio_set_pads(audio,
                   AGS_TYPE_INPUT,
                   input_pads);

/* add ags-fx-notation */
play_container = ags_recall_container_new();
recall_container = ags_recall_container_new();

start_recall = ags_fx_factory_create(audio,
				     play_container, recall_container,
				     "ags-fx-notation",
				     NULL,
				     NULL,
				     0, 0,
				     0, 0,
				     0,
				     (AGS_FX_FACTORY_ADD | AGS_FX_FACTORY_INPUT),
				     0);

g_list_free_full(start_recall,
		 (GDestroyNotify) g_object_unref);

/* add ags-fx-volume */
play_container = ags_recall_container_new();
recall_container = ags_recall_container_new();

start_recall = ags_fx_factory_create(audio,
				     play_container, recall_container,
				     "ags-fx-volume",
				     NULL,
				     NULL,
				     0, audio_channels,
				     0, input_pads,
				     0,
				     (AGS_FX_FACTORY_ADD | AGS_FX_FACTORY_INPUT),
				     0);

g_list_free_full(start_recall,
		 (GDestroyNotify) g_object_unref);

g_list_free_full(start_soundcard,
		 (GDestroyNotify) g_object_unref);

    

ags-fx-buffer

Buffer audio data, produces new destination as on source occurs AgsRecycling::add_audio_signal().

ags-fx-playback

Play or capture audio data and store it in wave objects.

ags-fx-volume

Adjust volume of audio data.

ags-fx-peak

Calculate peak of audio data.

ags-fx-eq10

Adjust 10 band equalizer.

ags-fx-analyse

Get frequency hints using FFTW3.

ags-fx-envelope

Apply envelope data per piano roll note or pattern note.

ags-fx-pattern

Play audio data based on boolean patterns.

ags-fx-notation

Play, capture and feed audio data based on notation.

ags-fx-ladspa

Interface LADSPA plugins.

ags-fx-dssi

Interface DSSI plugins.

ags-fx-lv2

Interface LV2 plugins.

ags-fx-vst3

Interface VST3 plugins - requires libags-vst.so to be available.