AgsChannel

AgsChannel — Acts as entry point to the audio tree.

Synopsis

#include <ags/audio/ags_channel.h>

#define             AGS_CHANNEL_ERROR
struct              AgsChannel;
struct              AgsChannelClass;
enum                AgsChannelError;
enum                AgsChannelFlags;
enum                AgsChannelRecallIDMode;
void                ags_channel_add_recall              (AgsChannel *channel,
                                                         GObject *recall,
                                                         gboolean play);
void                ags_channel_add_recall_container    (AgsChannel *channel,
                                                         GObject *recall_container);
void                ags_channel_add_recall_id           (AgsChannel *channel,
                                                         AgsRecallID *recall_id);
void                ags_channel_cancel                  (AgsChannel *channel,
                                                         AgsRecallID *recall_id);
void                ags_channel_done                    (AgsChannel *channel,
                                                         AgsRecallID *recall_id);
void                ags_channel_duplicate_recall        (AgsChannel *channel,
                                                         AgsRecallID *recall_id);
GQuark              ags_channel_error_quark             ();
GList *             ags_channel_find_port               (AgsChannel *channel);
AgsRecall *         ags_channel_find_recall             (AgsChannel *channel,
                                                         char *effect,
                                                         char *name);
AgsChannel *        ags_channel_first                   (AgsChannel *channel);
AgsChannel *        ags_channel_first_with_recycling    (AgsChannel *channel);
void                ags_channel_init_recall             (AgsChannel *channel,
                                                         gint stage,
                                                         AgsRecallID *recall_id);
AgsChannel *        ags_channel_last                    (AgsChannel *channel);
AgsChannel *        ags_channel_last_with_recycling     (AgsChannel *channel);
AgsChannel *        ags_channel_new                     (GObject *audio);
AgsChannel *        ags_channel_nth                     (AgsChannel *channel,
                                                         guint nth);
AgsChannel *        ags_channel_pad_first               (AgsChannel *channel);
AgsChannel *        ags_channel_pad_last                (AgsChannel *channel);
AgsChannel *        ags_channel_pad_nth                 (AgsChannel *channel,
                                                         guint nth);
void                ags_channel_play                    (AgsChannel *channel,
                                                         AgsRecallID *recall_id,
                                                         gint stage);
void                ags_channel_recall_id_set           (AgsChannel *output,
                                                         AgsRecallID *recall_id,
                                                         gboolean ommit_own_channel,
                                                         guint mode,
                                                         ...);
void                ags_channel_recursive_play          (AgsChannel *channel,
                                                         AgsRecallID *recall_id,
                                                         gint stage);
AgsRecallID *       ags_channel_recursive_play_init     (AgsChannel *channel,
                                                         gint stage,
                                                         gboolean arrange_recall_id,
                                                         gboolean duplicate_templates,
                                                         gboolean playback,
                                                         gboolean sequencer,
                                                         gboolean notation,
                                                         gboolean resolve_dependencies,
                                                         AgsRecallID *recall_id);
void                ags_channel_recursive_play_threaded (AgsChannel *channel,
                                                         AgsRecallID *recall_id,
                                                         gint stage);
void                ags_channel_recursive_reset_recall_ids
                                                        (AgsChannel *channel,
                                                         AgsChannel *link,
                                                         AgsChannel *old_channel_link,
                                                         AgsChannel *old_link_link);
void                ags_channel_recursive_reset_recycling_container
                                                        (AgsChannel *channel,
                                                         AgsRecyclingContainer *old_recycling_container,
                                                         AgsRecyclingContainer *recycling_container);
void                ags_channel_recycling_changed       (AgsChannel *channel,
                                                         AgsRecycling *old_start_region,
                                                         AgsRecycling *old_end_region,
                                                         AgsRecycling *new_start_region,
                                                         AgsRecycling *new_end_region,
                                                         AgsRecycling *old_start_changed_region,
                                                         AgsRecycling *old_end_changed_region,
                                                         AgsRecycling *new_start_changed_region,
                                                         AgsRecycling *new_end_changed_region);
void                ags_channel_remove                  (AgsChannel *channel,
                                                         AgsRecallID *recall_id);
void                ags_channel_remove_recall           (AgsChannel *channel,
                                                         GObject *recall,
                                                         gboolean play);
void                ags_channel_remove_recall_container (AgsChannel *channel,
                                                         GObject *recall_container);
void                ags_channel_remove_recall_id        (AgsChannel *channel,
                                                         AgsRecallID *recall_id);
void                ags_channel_resolve_recall          (AgsChannel *channel,
                                                         AgsRecallID *recall_id);
void                ags_channel_safe_resize_audio_signal
                                                        (AgsChannel *channel,
                                                         guint size);
void                ags_channel_set_devout              (AgsChannel *channel,
                                                         GObject *devout);
void                ags_channel_set_link                (AgsChannel *channel,
                                                         AgsChannel *link,
                                                         GError **error);
void                ags_channel_set_recycling           (AgsChannel *channel,
                                                         AgsRecycling *first_recycling,
                                                         AgsRecycling *last_recycling,
                                                         gboolean update,
                                                         gboolean destroy_old);
void                ags_channel_tillrecycling_cancel    (AgsChannel *channel,
                                                         AgsRecallID *recall_id);

Description

AgsChannel is the entry point to the entire audio tree and its nested recycling tree.

Every channel has its own AgsRecallID. As modifying link a new AgsRecyclingContainer is indicated, since it acts as a kind of recall id tree context.

Details

AGS_CHANNEL_ERROR

#define AGS_CHANNEL_ERROR (ags_channel_error_quark())

struct AgsChannel

struct AgsChannel {
  GObject object;

  guint flags;

  GObject *audio;
  GObject *devout;

  AgsChannel *prev;
  AgsChannel *prev_pad;
  AgsChannel *next;
  AgsChannel *next_pad;

  guint pad;
  guint audio_channel;
  guint line;

  char *note;

  gpointer devout_play;

  // GObject *recycling_container; // contains child recycling
  GList *recall_id; // there may be several recall's running
  GList *container;

  GList *recall;
  GList *play;

  AgsChannel *link;
  AgsRecycling *first_recycling;
  AgsRecycling *last_recycling;
  GObject *recycling_thread;

  GList *pattern;
  AgsNotation *notation;

  GtkWidget *line_widget;
  gpointer file_data;
};

struct AgsChannelClass

struct AgsChannelClass {
  GObjectClass object;

  void (*recycling_changed)(AgsChannel *channel,
			    AgsRecycling *old_start_region, AgsRecycling *old_end_region,
			    AgsRecycling *new_start_region, AgsRecycling *new_end_region,
			    AgsRecycling *old_start_changed_region, AgsRecycling *old_end_changed_region,
			    AgsRecycling *new_start_changed_region, AgsRecycling *new_end_changed_region);

  void (*done)(AgsChannel *channel,
	       AgsRecallID *recall_id);
};

enum AgsChannelError

typedef enum {
  AGS_CHANNEL_ERROR_LOOP_IN_LINK,
} AgsChannelError;

enum AgsChannelFlags

typedef enum {
  AGS_CHANNEL_RUNNING        = 1,
} AgsChannelFlags;

enum AgsChannelRecallIDMode

typedef enum {
  AGS_CHANNEL_RECALL_ID_RUN_STAGE,
  AGS_CHANNEL_RECALL_ID_CANCEL,
} AgsChannelRecallIDMode;

ags_channel_add_recall ()

void                ags_channel_add_recall              (AgsChannel *channel,
                                                         GObject *recall,
                                                         gboolean play);

Adds a recall.

channel :

an AgsChannel

recall_container :

the AgsRecall

play :

TRUE if simple playback.

Since 0.4


ags_channel_add_recall_container ()

void                ags_channel_add_recall_container    (AgsChannel *channel,
                                                         GObject *recall_container);

Adds a recall container.

channel :

an AgsChannel

recall_container :

the AgsRecallContainer

Since 0.4


ags_channel_add_recall_id ()

void                ags_channel_add_recall_id           (AgsChannel *channel,
                                                         AgsRecallID *recall_id);

Adds a recall id.

channel :

an AgsChannel

recall_id :

the AgsRecallID

Since 0.4


ags_channel_cancel ()

void                ags_channel_cancel                  (AgsChannel *channel,
                                                         AgsRecallID *recall_id);

Calls for every matching recall_id ags_recall_cancel()

channel :

an AgsChannel

recall_id :

and AgsRecallID

Since 0.3


ags_channel_done ()

void                ags_channel_done                    (AgsChannel *channel,
                                                         AgsRecallID *recall_id);

Is emitted as playing channel is done.

channel :

an AgsChannel

recall_id :

the current AgsRecallID

Since 0.4


ags_channel_duplicate_recall ()

void                ags_channel_duplicate_recall        (AgsChannel *channel,
                                                         AgsRecallID *recall_id);

Duplicate AgsRecall templates for use with ags_channel_recursive_play(), but ags_channel_recursive_play_init() may call this function for you.

channel :

an AgsChannel that contains the AgsRecall templates

playback :

if a AgsRecall that is dedicated to a playback should be duplicated

sequencer :

if a AgsRecall that is dedicated to a sequencer should be duplicated

notation :

if a AgsRecall that is dedicated to a notation should be duplicated

recall_id :

the AgsRecallID the newly allocated AgsRecall objects belongs to

Since 0.3


ags_channel_error_quark ()

GQuark              ags_channel_error_quark             ();

ags_channel_find_port ()

GList *             ags_channel_find_port               (AgsChannel *channel);

Retrieve all ports of AgsChannel

channel :

an AgsChannel

Returns :

a GList containing AgsPort

Since 0.4


ags_channel_find_recall ()

AgsRecall *         ags_channel_find_recall             (AgsChannel *channel,
                                                         char *effect,
                                                         char *name);

ags_channel_first ()

AgsChannel *        ags_channel_first                   (AgsChannel *channel);

Iterates until the first AgsChannel was found.

channel :

an AgsChannel

Returns :

the first AgsChannel

Since 0.3


ags_channel_first_with_recycling ()

AgsChannel *        ags_channel_first_with_recycling    (AgsChannel *channel);

Iterates over pads forwards as long as there is no AgsRecycling on the AgsChannel.

channel :

an AgsChannel

Returns :

the first channel with an AgsRecycling

Since 0.3


ags_channel_init_recall ()

void                ags_channel_init_recall             (AgsChannel *channel,
                                                         gint stage,
                                                         AgsRecallID *recall_id);

Prepare AgsRecall objects to become runnning, ags_channel_recursive_play_init() may call this function for you.

channel :

an AgsChannel that contains the recalls

recall_id :

the AgsRecallId this recall belongs to

Since 0.3


ags_channel_last ()

AgsChannel *        ags_channel_last                    (AgsChannel *channel);

Iterates until the last AgsChannel was found.

channel :

an AgsChannel

Returns :

the last AgsChannel

Since 0.3


ags_channel_last_with_recycling ()

AgsChannel *        ags_channel_last_with_recycling     (AgsChannel *channel);

Iterates over pads backwards as long as there is no AgsRecycling on the AgsChannel.

channel :

an AgsChannel

Returns :

the last channel with an AgsRecycling

Since 0.3


ags_channel_new ()

AgsChannel *        ags_channel_new                     (GObject *audio);

Creates a AgsChannel, linking tree to audio.

audio :

the AgsAudio

Returns :

a new AgsChannel

Since 0.3


ags_channel_nth ()

AgsChannel *        ags_channel_nth                     (AgsChannel *channel,
                                                         guint nth);

Iterates nth times forward.

channel :

an AgsChannel

nth :

the count to iterate

Returns :

the nth AgsChannel

Since 0.3


ags_channel_pad_first ()

AgsChannel *        ags_channel_pad_first               (AgsChannel *channel);

Iterates until the first pad has been reached.

channel :

an AgsChannel

Returns :

the first AgsChannel with the same audio_channel as channel

Since 0.3


ags_channel_pad_last ()

AgsChannel *        ags_channel_pad_last                (AgsChannel *channel);

Iterates until the last pad has been reached.

channel :

an AgsChannel

Returns :

the last AgsChannel with the same audio_channel as channel

Since 0.3


ags_channel_pad_nth ()

AgsChannel *        ags_channel_pad_nth                 (AgsChannel *channel,
                                                         guint nth);

Iterates nth times.

channel :

an AgsChannel

nth :

the count of pads to step

Returns :

the nth pad

Since 0.3


ags_channel_play ()

void                ags_channel_play                    (AgsChannel *channel,
                                                         AgsRecallID *recall_id,
                                                         gint stage);

Play one single run of stage step.

channel :

an AgsChannel

recall_id :

appropriate AgsRecallID

stage :

run_pre, run_inter or run_post

Since 0.3


ags_channel_recall_id_set ()

void                ags_channel_recall_id_set           (AgsChannel *output,
                                                         AgsRecallID *recall_id,
                                                         gboolean ommit_own_channel,
                                                         guint mode,
                                                         ...);

ags_channel_recursive_play ()

void                ags_channel_recursive_play          (AgsChannel *channel,
                                                         AgsRecallID *recall_id,
                                                         gint stage);

Call recursively ags_channel_play() and ags_audio_play()

channel :

an AgsChannel

recall_id :

appropriate AgsRecallID

stage :

run_pre, run_inter or run_post

Since 0.3


ags_channel_recursive_play_init ()

AgsRecallID *       ags_channel_recursive_play_init     (AgsChannel *channel,
                                                         gint stage,
                                                         gboolean arrange_recall_id,
                                                         gboolean duplicate_templates,
                                                         gboolean playback,
                                                         gboolean sequencer,
                                                         gboolean notation,
                                                         gboolean resolve_dependencies,
                                                         AgsRecallID *recall_id);

Make the tree ready for a new AgsDevoutPlay.

channel :

the AgsChannel to prepare

stage :

valid values for stage are: -1 for running all three stages, or the stages 0 through 2 to run just the specified stage. With stage is meant the AgsRecall run_init_pre, AgsRecall run_init_inter and AgsRecall run_init_post stages.

arrange_recall_id :

TRUE if new AgsRecallID objects should be created

duplicate_templates :

TRUE if the AgsRecall templates should be duplicated

playback :

TRUE if the purpose is a simple playback of the tree, this option is used to omit the duplication of AgsRecall templates which haven't set AGS_RECALL_PLAYBACK flag

sequencer :

TRUE if the purpose is playing the tree for a sequencer, this option is used to omit the duplication of AgsRecall templates which haven't set the AGS_RECALL_SEQUENCER flag

notation :

TRUE if the purpose is playing the tree for a notation, this option is used to omit the duplication of AgsRecall templates which haven't set the AGS_RECALL_NOTATION flag

resolve_dependencies :

TRUE if the

recall_id :

the initial recall id or NULL

Since 0.3


ags_channel_recursive_play_threaded ()

void                ags_channel_recursive_play_threaded (AgsChannel *channel,
                                                         AgsRecallID *recall_id,
                                                         gint stage);

Super-threaded version of play one single run of stage step.

channel :

an AgsChannel

recall_id :

appropriate AgsRecallID

stage :

run_pre, run_inter or run_post

Since 0.4


ags_channel_recursive_reset_recall_ids ()

void                ags_channel_recursive_reset_recall_ids
                                                        (AgsChannel *channel,
                                                         AgsChannel *link,
                                                         AgsChannel *old_channel_link,
                                                         AgsChannel *old_link_link);

Called by ags_channel_set_link() to handle running AgsAudio objects correctly. This function destroys AgsRecall objects which were uneeded because they became invalid due to unlinking. By the way it destroys the uneeded AgsRecallID objects, too. Additionally it creates AgsRecall and AgsRecallID objects to prepare becoming a running object (AgsAudio or AgsChannel). By the clean up the invalid AgsRecall objects will be removed. Once the clean up has done ags_channel_recursive_play_init() will be called for every playing instance that was found.

channel :

an AgsChannel that was linked with link

link :

an AgsChannel that was linked with channel

old_channel_link :

the old link of channel

old_link_link :

the old link of link

Since 0.4


ags_channel_recursive_reset_recycling_container ()

void                ags_channel_recursive_reset_recycling_container
                                                        (AgsChannel *channel,
                                                         AgsRecyclingContainer *old_recycling_container,
                                                         AgsRecyclingContainer *recycling_container);

Resets the recycling container context.

channel :

the channel to reset

old_recycling_container :

the old recycling container context

recycling_container :

the new recycling container context

Since 0.4


ags_channel_recycling_changed ()

void                ags_channel_recycling_changed       (AgsChannel *channel,
                                                         AgsRecycling *old_start_region,
                                                         AgsRecycling *old_end_region,
                                                         AgsRecycling *new_start_region,
                                                         AgsRecycling *new_end_region,
                                                         AgsRecycling *old_start_changed_region,
                                                         AgsRecycling *old_end_changed_region,
                                                         AgsRecycling *new_start_changed_region,
                                                         AgsRecycling *new_end_changed_region);

Modify recycling.

channel :

the object recycling changed

old_start_region :

first recycling

old_end_region :

last recycling

new_start_region :

new first recycling

new_end_region :

new last recycling

old_start_changed_region :

modified link recycling start

old_end_changed_region :

modified link recyclig end

new_start_changed_region :

replacing link recycling start

new_end_changed_region :

replacing link recycling end

Since 0.3


ags_channel_remove ()

void                ags_channel_remove                  (AgsChannel *channel,
                                                         AgsRecallID *recall_id);

Calls for every matching recall_id ags_recall_remove()

channel :

an AgsChannel

recall_id :

and AgsRecallID

Since 0.3


ags_channel_remove_recall ()

void                ags_channel_remove_recall           (AgsChannel *channel,
                                                         GObject *recall,
                                                         gboolean play);

Removes a recall.

channel :

an AgsChannel

recall_container :

the AgsRecall

play :

TRUE if simple playback.

Since 0.4


ags_channel_remove_recall_container ()

void                ags_channel_remove_recall_container (AgsChannel *channel,
                                                         GObject *recall_container);

Removes a recall container.

channel :

an AgsChannel

recall_container :

the AgsRecallContainer

Since 0.4


ags_channel_remove_recall_id ()

void                ags_channel_remove_recall_id        (AgsChannel *channel,
                                                         AgsRecallID *recall_id);

Removes a recall id.

channel :

an AgsChannel

recall_id :

the AgsRecallID

Since 0.4


ags_channel_resolve_recall ()

void                ags_channel_resolve_recall          (AgsChannel *channel,
                                                         AgsRecallID *recall_id);

Resolve step of initialization.

channel :

an AgsChannel

recall_id :

appropriate AgsRecallID

Since 0.4


ags_channel_safe_resize_audio_signal ()

void                ags_channel_safe_resize_audio_signal
                                                        (AgsChannel *channel,
                                                         guint size);

Resize audio data.

channel :

an AgsChannel

length :

new frame count length

Since 0.4


ags_channel_set_devout ()

void                ags_channel_set_devout              (AgsChannel *channel,
                                                         GObject *devout);

Sets devout.

channel :

an AgsChannel

devout :

an AgsDevout

Since 0.4


ags_channel_set_link ()

void                ags_channel_set_link                (AgsChannel *channel,
                                                         AgsChannel *link,
                                                         GError **error);

Change the linking of AgsChannel objects.

channel :

an AgsChannel to link

link :

an other AgsChannel to link with

error :

you may retrieve a AGS_CHANNEL_ERROR_LOOP_IN_LINK error

Since 0.3


ags_channel_set_recycling ()

void                ags_channel_set_recycling           (AgsChannel *channel,
                                                         AgsRecycling *first_recycling,
                                                         AgsRecycling *last_recycling,
                                                         gboolean update,
                                                         gboolean destroy_old);

Called by ags_channel_set_link() to handle outdated AgsRecycling references.

channel :

the channel to reset

first_recycling :

the recycling to set for channel->first_recycling

last_recycling :

the recycling to set for channel->last_recycling

update :

reset allthough the AgsRecyclings are still the same

destroy_old :

destroy old AgsRecyclings

Since 0.3


ags_channel_tillrecycling_cancel ()

void                ags_channel_tillrecycling_cancel    (AgsChannel *channel,
                                                         AgsRecallID *recall_id);

Traverses the tree down and up and calls ags_channel_cancel() for corresponding recall_id.

channel :

an AgsChannel

recall_id :

an AgsRecallID

Since 0.4