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-synth

Play, capture and feed audio data based on notation with hybrid synthesizer.

ags-fx-fm-synth

Play, capture and feed audio data based on notation with hybrid FM synthesizer.

ags-fx-star-synth

Play, capture and feed audio data based on notation with stargazer synthesizer.

ags-fx-seq-synth

Play, capture and feed audio data based on notation with quantum synthesizer.

ags-fx-raven-synth

Play, capture and feed audio data based on notation with raven synthesizer.

ags-fx-modular-syth

Play, capture and feed audio data based on notation with modular synthesizer.

ags-fx-sf2-synth

Play, capture and feed audio data based on notation with Soundfont2 synthesizer.

ags-fx-sfz-synth

Play, capture and feed audio data based on notation with SFZ synthesizer.

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.

ags-fx-audio-unit

Interface Audio Unit plugins - macOS only.