[SCM] gsequencer/master: Dropped patches
umlaeute at users.alioth.debian.org
umlaeute at users.alioth.debian.org
Tue Jan 31 10:42:08 UTC 2017
The following commit has been merged in the master branch:
commit 95069b73151aaaf1a4cc52c7d21c733fc18b660b
Author: IOhannes m zmölnig <zmoelnig at iem.at>
Date: Tue Jan 31 11:07:07 2017 +0100
Dropped patches
Gbp-Dch: ignore
diff --git a/debian/patches/fix-changelog.patch b/debian/patches/fix-changelog.patch
deleted file mode 100644
index 4a48d3d..0000000
--- a/debian/patches/fix-changelog.patch
+++ /dev/null
@@ -1,21 +0,0 @@
-Description: Added ChangLog entries.
-Author: Joël Krähmann <jkraehemann at gmail.com>
-Applied-Upstream: 0.7.122.x, http://git.savannah.gnu.org/cgit/gsequencer.git
-Last-Update: 2017-01-31
---- a/ChangeLog
-+++ b/ChangeLog
-@@ -1,3 +1,14 @@
-+ags (0.7.122.1)
-+
-+ [ Joël Krähemann (Maintainer of Advanced Gtk+ Sequencer) ]
-+ * critical bug-fixes to concurrent access of memory
-+ * fixed machine selector of automation editor
-+ * fixed NULL pointer access in AgsJackMidiin::stop()
-+ * fixed missing refresh of start animation
-+ * fixed possible memory corruption while AgsExportSoundcard setup
-+ * fixed data-race while clearing buffer
-+ * fixed implementation of immediate sync of threads
-+
- ags (0.7.122)
-
- [ Joël Krähemann (Maintainer of Advanced Gtk+ Sequencer) ]
diff --git a/debian/patches/fix-configure.patch b/debian/patches/fix-configure.patch
deleted file mode 100644
index d42112b..0000000
--- a/debian/patches/fix-configure.patch
+++ /dev/null
@@ -1,100 +0,0 @@
-Description: Modified version identifier in configure.ac and
- configure.
-Author: Joël Krähmann <jkraehemann at gmail.com>
-Applied-Upstream: 0.7.122.x, http://git.savannah.gnu.org/cgit/gsequencer.git
-Last-Update: 2017-01-31
---- a/configure
-+++ b/configure
-@@ -1,6 +1,6 @@
- #! /bin/sh
- # Guess values for system-dependent variables and create Makefiles.
--# Generated by GNU Autoconf 2.69 for gsequencer 0.7.122.
-+# Generated by GNU Autoconf 2.69 for gsequencer 0.7.122.1.
- #
- # Report bugs to <jkraehemann-guest at users.alioth.debian.org>.
- #
-@@ -590,8 +590,8 @@
- # Identity of this package.
- PACKAGE_NAME='gsequencer'
- PACKAGE_TARNAME='gsequencer'
--PACKAGE_VERSION='0.7.122'
--PACKAGE_STRING='gsequencer 0.7.122'
-+PACKAGE_VERSION='0.7.122.1'
-+PACKAGE_STRING='gsequencer 0.7.122.1'
- PACKAGE_BUGREPORT='jkraehemann-guest at users.alioth.debian.org'
- PACKAGE_URL=''
-
-@@ -1436,7 +1436,7 @@
- # Omit some internal or obsolete options to make the list less imposing.
- # This message is too long to be a string in the A/UX 3.1 sh.
- cat <<_ACEOF
--\`configure' configures gsequencer 0.7.122 to adapt to many kinds of systems.
-+\`configure' configures gsequencer 0.7.122.1 to adapt to many kinds of systems.
-
- Usage: $0 [OPTION]... [VAR=VALUE]...
-
-@@ -1511,7 +1511,7 @@
-
- if test -n "$ac_init_help"; then
- case $ac_init_help in
-- short | recursive ) echo "Configuration of gsequencer 0.7.122:";;
-+ short | recursive ) echo "Configuration of gsequencer 0.7.122.1:";;
- esac
- cat <<\_ACEOF
-
-@@ -1698,7 +1698,7 @@
- test -n "$ac_init_help" && exit $ac_status
- if $ac_init_version; then
- cat <<\_ACEOF
--gsequencer configure 0.7.122
-+gsequencer configure 0.7.122.1
- generated by GNU Autoconf 2.69
-
- Copyright (C) 2012 Free Software Foundation, Inc.
-@@ -2175,7 +2175,7 @@
- This file contains any messages produced by compilers while
- running configure, to aid debugging if configure makes a mistake.
-
--It was created by gsequencer $as_me 0.7.122, which was
-+It was created by gsequencer $as_me 0.7.122.1, which was
- generated by GNU Autoconf 2.69. Invocation command line was
-
- $ $0 $@
-@@ -3041,7 +3041,7 @@
-
- # Define the identity of the package.
- PACKAGE='gsequencer'
-- VERSION='0.7.122'
-+ VERSION='0.7.122.1'
-
-
- cat >>confdefs.h <<_ACEOF
-@@ -16408,7 +16408,7 @@
- # report actual input values of CONFIG_FILES etc. instead of their
- # values after options handling.
- ac_log="
--This file was extended by gsequencer $as_me 0.7.122, which was
-+This file was extended by gsequencer $as_me 0.7.122.1, which was
- generated by GNU Autoconf 2.69. Invocation command line was
-
- CONFIG_FILES = $CONFIG_FILES
-@@ -16474,7 +16474,7 @@
- cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
- ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
- ac_cs_version="\\
--gsequencer config.status 0.7.122
-+gsequencer config.status 0.7.122.1
- configured by $0, generated by GNU Autoconf 2.69,
- with options \\"\$ac_cs_config\\"
-
---- a/configure.ac
-+++ b/configure.ac
-@@ -6,7 +6,7 @@
- # Process this file with autoconf to produce a configure script.
-
- AC_PREREQ([2.69])
--AC_INIT([gsequencer],[0.7.122],[jkraehemann-guest at users.alioth.debian.org])
-+AC_INIT([gsequencer],[0.7.122.1],[jkraehemann-guest at users.alioth.debian.org])
- AM_INIT_AUTOMAKE([subdir-objects])
- AC_CONFIG_SRCDIR([config.h.in])
- AC_CONFIG_HEADERS([ags/config.h])
diff --git a/debian/patches/fix-critical-bugs.patch b/debian/patches/fix-critical-bugs.patch
deleted file mode 100644
index 6e1400b..0000000
--- a/debian/patches/fix-critical-bugs.patch
+++ /dev/null
@@ -1,2911 +0,0 @@
-Description: Critical bug-fixes to concurrent access of memory.
- Fixed machine selector of automation editor. Fixed NULL pointer
- access in AgsJackMidiin::stop(). Fixed missing refresh of start
- animation. Fixed possible memory corruption while AgsExportSoundcard
- setup. Fixed data-race while clearing buffer. Proper implementation of
- immediate sync of threads. Minor fixes.
-Author: Joël Krähmann <jkraehemann at gmail.com>
-Applied-Upstream: 0.7.122.x, http://git.savannah.gnu.org/cgit/gsequencer.git
-Last-Update: 2017-01-31
---- a/Makefile.am
-+++ b/Makefile.am
-@@ -963,6 +963,7 @@
- ags/audio/task/ags_cancel_channel.h \
- ags/audio/task/ags_cancel_recall.h \
- ags/audio/task/ags_change_soundcard.h \
-+ ags/audio/task/ags_clear_buffer.h \
- ags/audio/task/ags_export_output.h \
- ags/audio/task/ags_free_selection.h \
- ags/audio/task/ags_init_audio.h \
-@@ -1024,6 +1025,7 @@
- ags/audio/task/ags_cancel_channel.c \
- ags/audio/task/ags_cancel_recall.c \
- ags/audio/task/ags_change_soundcard.c \
-+ ags/audio/task/ags_clear_buffer.c \
- ags/audio/task/ags_export_output.c \
- ags/audio/task/ags_free_selection.c \
- ags/audio/task/ags_init_audio.c \
---- a/Makefile.in
-+++ b/Makefile.in
-@@ -308,6 +308,7 @@
- ags/audio/task/libags_audio_la-ags_cancel_channel.lo \
- ags/audio/task/libags_audio_la-ags_cancel_recall.lo \
- ags/audio/task/libags_audio_la-ags_change_soundcard.lo \
-+ ags/audio/task/libags_audio_la-ags_clear_buffer.lo \
- ags/audio/task/libags_audio_la-ags_export_output.lo \
- ags/audio/task/libags_audio_la-ags_free_selection.lo \
- ags/audio/task/libags_audio_la-ags_init_audio.lo \
-@@ -2220,6 +2221,7 @@
- ags/audio/task/ags_cancel_channel.h \
- ags/audio/task/ags_cancel_recall.h \
- ags/audio/task/ags_change_soundcard.h \
-+ ags/audio/task/ags_clear_buffer.h \
- ags/audio/task/ags_export_output.h \
- ags/audio/task/ags_free_selection.h \
- ags/audio/task/ags_init_audio.h \
-@@ -2280,6 +2282,7 @@
- ags/audio/task/ags_cancel_channel.c \
- ags/audio/task/ags_cancel_recall.c \
- ags/audio/task/ags_change_soundcard.c \
-+ ags/audio/task/ags_clear_buffer.c \
- ags/audio/task/ags_export_output.c \
- ags/audio/task/ags_free_selection.c \
- ags/audio/task/ags_init_audio.c \
-@@ -3352,6 +3355,9 @@
- ags/audio/task/libags_audio_la-ags_change_soundcard.lo: \
- ags/audio/task/$(am__dirstamp) \
- ags/audio/task/$(DEPDIR)/$(am__dirstamp)
-+ags/audio/task/libags_audio_la-ags_clear_buffer.lo: \
-+ ags/audio/task/$(am__dirstamp) \
-+ ags/audio/task/$(DEPDIR)/$(am__dirstamp)
- ags/audio/task/libags_audio_la-ags_export_output.lo: \
- ags/audio/task/$(am__dirstamp) \
- ags/audio/task/$(DEPDIR)/$(am__dirstamp)
-@@ -4995,6 +5001,7 @@
- @AMDEP_TRUE@@am__include@ @am__quote at ags/audio/task/$(DEPDIR)/libags_audio_la-ags_cancel_channel.Plo at am__quote@
- @AMDEP_TRUE@@am__include@ @am__quote at ags/audio/task/$(DEPDIR)/libags_audio_la-ags_cancel_recall.Plo at am__quote@
- @AMDEP_TRUE@@am__include@ @am__quote at ags/audio/task/$(DEPDIR)/libags_audio_la-ags_change_soundcard.Plo at am__quote@
-+ at AMDEP_TRUE@@am__include@ @am__quote at ags/audio/task/$(DEPDIR)/libags_audio_la-ags_clear_buffer.Plo at am__quote@
- @AMDEP_TRUE@@am__include@ @am__quote at ags/audio/task/$(DEPDIR)/libags_audio_la-ags_export_output.Plo at am__quote@
- @AMDEP_TRUE@@am__include@ @am__quote at ags/audio/task/$(DEPDIR)/libags_audio_la-ags_free_selection.Plo at am__quote@
- @AMDEP_TRUE@@am__include@ @am__quote at ags/audio/task/$(DEPDIR)/libags_audio_la-ags_init_audio.Plo at am__quote@
-@@ -6126,6 +6133,13 @@
- @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- @am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libags_audio_la_CFLAGS) $(CFLAGS) -c -o ags/audio/task/libags_audio_la-ags_change_soundcard.lo `test -f 'ags/audio/task/ags_change_soundcard.c' || echo '$(srcdir)/'`ags/audio/task/ags_change_soundcard.c
-
-+ags/audio/task/libags_audio_la-ags_clear_buffer.lo: ags/audio/task/ags_clear_buffer.c
-+ at am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libags_audio_la_CFLAGS) $(CFLAGS) -MT ags/audio/task/libags_audio_la-ags_clear_buffer.lo -MD -MP -MF ags/audio/task/$(DEPDIR)/libags_audio_la-ags_clear_buffer.Tpo -c -o ags/audio/task/libags_audio_la-ags_clear_buffer.lo `test -f 'ags/audio/task/ags_clear_buffer.c' || echo '$(srcdir)/'`ags/audio/task/ags_clear_buffer.c
-+ at am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ags/audio/task/$(DEPDIR)/libags_audio_la-ags_clear_buffer.Tpo ags/audio/task/$(DEPDIR)/libags_audio_la-ags_clear_buffer.Plo
-+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ags/audio/task/ags_clear_buffer.c' object='ags/audio/task/libags_audio_la-ags_clear_buffer.lo' libtool=yes @AMDEPBACKSLASH@
-+ at AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-+ at am__fastdepCC_FALSE@ $(AM_V_CC at am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libags_audio_la_CFLAGS) $(CFLAGS) -c -o ags/audio/task/libags_audio_la-ags_clear_buffer.lo `test -f 'ags/audio/task/ags_clear_buffer.c' || echo '$(srcdir)/'`ags/audio/task/ags_clear_buffer.c
-+
- ags/audio/task/libags_audio_la-ags_export_output.lo: ags/audio/task/ags_export_output.c
- @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libags_audio_la_CFLAGS) $(CFLAGS) -MT ags/audio/task/libags_audio_la-ags_export_output.lo -MD -MP -MF ags/audio/task/$(DEPDIR)/libags_audio_la-ags_export_output.Tpo -c -o ags/audio/task/libags_audio_la-ags_export_output.lo `test -f 'ags/audio/task/ags_export_output.c' || echo '$(srcdir)/'`ags/audio/task/ags_export_output.c
- @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ags/audio/task/$(DEPDIR)/libags_audio_la-ags_export_output.Tpo ags/audio/task/$(DEPDIR)/libags_audio_la-ags_export_output.Plo
---- a/ags/X/ags_export_soundcard_callbacks.c
-+++ b/ags/X/ags_export_soundcard_callbacks.c
-@@ -61,12 +61,16 @@
- soundcard = NULL;
-
- if(application_context != NULL){
-- soundcard = ags_sound_provider_get_soundcard(AGS_SOUNDCARD(application_context));
-+ soundcard = ags_sound_provider_get_soundcard(AGS_SOUND_PROVIDER(application_context));
- }
-
- backend = gtk_combo_box_text_get_active_text(export_soundcard->backend);
- device = gtk_combo_box_text_get_active_text(export_soundcard->card);
-
-+ if(device == NULL){
-+ return;
-+ }
-+
- found_card = FALSE;
-
- while(soundcard != NULL){
-@@ -154,12 +158,16 @@
- soundcard = NULL;
-
- if(application_context != NULL){
-- soundcard = ags_sound_provider_get_soundcard(AGS_SOUNDCARD(application_context));
-+ soundcard = ags_sound_provider_get_soundcard(AGS_SOUND_PROVIDER(application_context));
- }
-
- backend = gtk_combo_box_text_get_active_text(export_soundcard->backend);
- device = gtk_combo_box_text_get_active_text(export_soundcard->card);
-
-+ if(device == NULL){
-+ return;
-+ }
-+
- found_card = FALSE;
-
- while(soundcard != NULL){
---- a/ags/X/ags_line_callbacks.c
-+++ b/ags/X/ags_line_callbacks.c
-@@ -423,27 +423,63 @@
- AgsChannel *channel;
- AgsPlayback *playback;
- AgsChannel *next_pad;
-+ AgsRecallID *match_recall_id;
-+
-+ AgsMutexManager *mutex_manager;
-
- gboolean all_done;
-
-+ pthread_mutex_t *application_mutex;
-+ pthread_mutex_t *channel_mutex;
-+
-+ mutex_manager = ags_mutex_manager_get_instance();
-+ application_mutex = ags_mutex_manager_get_application_mutex(mutex_manager);
-+
- gdk_threads_enter();
-
-+ /* retrieve channel */
- channel = AGS_PAD(AGS_LINE(line)->pad)->channel;
-+
-+ /* retrieve channel mutex */
-+ pthread_mutex_lock(application_mutex);
-+
-+ channel_mutex = ags_mutex_manager_lookup(mutex_manager,
-+ (GObject *) channel);
-+
-+ pthread_mutex_unlock(application_mutex);
-+
-+ /* get next pad */
-+ pthread_mutex_lock(channel_mutex);
-+
- next_pad = channel->next_pad;
-
-+ pthread_mutex_unlock(channel_mutex);
-+
- all_done = TRUE;
-
- while(channel != next_pad){
-+ pthread_mutex_lock(channel_mutex);
-+
- playback = AGS_PLAYBACK(channel->playback);
--
-- if(playback->recall_id[0] != NULL){
-+ match_recall_id = playback->recall_id[0];
-+
-+ pthread_mutex_unlock(channel_mutex);
-+
-+ /* check if pending */
-+ if(match_recall_id != NULL){
- all_done = FALSE;
- break;
- }
--
-+
-+ /* iterate */
-+ pthread_mutex_lock(channel_mutex);
-+
- channel = channel->next;
-+
-+ pthread_mutex_unlock(channel_mutex);
- }
-
-+ /* toggle play button if all playback done */
- if(all_done){
- AgsPad *pad;
-
---- a/ags/X/ags_pad_callbacks.c
-+++ b/ags/X/ags_pad_callbacks.c
-@@ -33,6 +33,7 @@
- #include <ags/audio/ags_playback.h>
- #include <ags/audio/ags_pattern.h>
- #include <ags/audio/ags_recall.h>
-+#include <ags/audio/ags_recall_id.h>
-
- #include <ags/audio/thread/ags_audio_loop.h>
- #include <ags/audio/thread/ags_soundcard_thread.h>
-@@ -325,6 +326,7 @@
- ags_pad_init_channel_launch_callback(AgsTask *task, AgsPad *input_pad)
- {
- AgsSoundcard *soundcard;
-+ AgsAudio *audio;
- AgsChannel *channel, *next_pad;
- AgsRecycling *recycling, *end_recycling;
-
-@@ -338,11 +340,28 @@
- pthread_mutex_t *application_mutex;
- pthread_mutex_t *audio_mutex;
- pthread_mutex_t *channel_mutex;
-+ pthread_mutex_t *recycling_mutex;
-
- mutex_manager = ags_mutex_manager_get_instance();
- application_mutex = ags_mutex_manager_get_application_mutex(mutex_manager);
-
-- /* get audio loop and audio mutex */
-+ /* get channel and its mutex */
-+ channel = input_pad->channel;
-+
-+ pthread_mutex_lock(application_mutex);
-+
-+ channel_mutex = ags_mutex_manager_lookup(mutex_manager,
-+ (GObject *) channel);
-+
-+ pthread_mutex_unlock(application_mutex);
-+
-+ /* get audio and its audio mutex */
-+ pthread_mutex_lock(channel_mutex);
-+
-+ audio = AGS_AUDIO(channel->audio);
-+
-+ pthread_mutex_unlock(channel_mutex);
-+
- pthread_mutex_lock(application_mutex);
-
- audio_mutex = ags_mutex_manager_lookup(mutex_manager,
-@@ -353,7 +372,7 @@
- /* get soundcard */
- pthread_mutex_lock(audio_mutex);
-
-- soundcard = AGS_SOUNDCARD(AGS_AUDIO(input_pad->channel->audio)->soundcard);
-+ soundcard = AGS_SOUNDCARD(audio->soundcard);
-
- pthread_mutex_unlock(audio_mutex);
-
-@@ -361,16 +380,6 @@
- list_start =
- list = gtk_container_get_children((GtkContainer *) input_pad->expander_set);
-
-- /* get channel and its mutex */
-- channel = input_pad->channel;
--
-- pthread_mutex_lock(application_mutex);
--
-- channel_mutex = ags_mutex_manager_lookup(mutex_manager,
-- (GObject *) channel);
--
-- pthread_mutex_unlock(application_mutex);
--
- /* get next pad */
- pthread_mutex_lock(channel_mutex);
-
-@@ -407,6 +416,7 @@
-
- if(recall != NULL){
- AgsAudioSignal *audio_signal;
-+ AgsRecallID *current_recall_id;
-
- g_signal_connect_after(channel, "done\0",
- G_CALLBACK(ags_line_channel_done_callback), AGS_LINE(list->data));
-@@ -416,13 +426,25 @@
-
- recycling = channel->first_recycling;
- end_recycling = channel->last_recycling->next;
-+
-+ current_recall_id = AGS_RECALL(recall->data)->recall_id;
-
- pthread_mutex_unlock(channel_mutex);
-
- while(recycling != end_recycling){
-+ /* get recycling mutex */
-+ pthread_mutex_lock(application_mutex);
-+
-+ recycling_mutex = ags_mutex_manager_lookup(mutex_manager,
-+ (GObject *) recycling);
-+
-+ pthread_mutex_unlock(application_mutex);
-+
-+ /* instantiate audio signal */
- audio_signal = ags_audio_signal_new((GObject *) soundcard,
- (GObject *) recycling,
-- (GObject *) AGS_RECALL(recall->data)->recall_id);
-+ (GObject *) current_recall_id);
-+
- /* add audio signal */
- ags_recycling_create_audio_signal_with_defaults(recycling,
- audio_signal,
-@@ -436,7 +458,13 @@
- ags_recycling_add_audio_signal(recycling,
- audio_signal);
-
-+
-+ /* iterate recycling */
-+ pthread_mutex_lock(recycling_mutex);
-+
- recycling = recycling->next;
-+
-+ pthread_mutex_unlock(recycling_mutex);
- }
- }
-
---- a/ags/X/ags_xorg_application_context.c
-+++ b/ags/X/ags_xorg_application_context.c
-@@ -63,6 +63,9 @@
- #include <ags/audio/jack/ags_jack_port.h>
- #include <ags/audio/jack/ags_jack_devout.h>
-
-+#include <ags/audio/task/ags_cancel_audio.h>
-+#include <ags/audio/task/ags_cancel_channel.h>
-+
- #include <ags/audio/recall/ags_play_audio.h>
- #include <ags/audio/recall/ags_play_channel.h>
- #include <ags/audio/recall/ags_play_channel_run.h>
-@@ -634,10 +637,10 @@
- */
-
- /* AgsWindow */
-- window = ags_window_new((GObject *) xorg_application_context);
-- g_object_set(window,
-- "soundcard\0", soundcard,
-- NULL);
-+ window = g_object_new(AGS_TYPE_WINDOW,
-+ "soundcard\0", soundcard,
-+ "application-context\0", xorg_application_context,
-+ NULL);
- AGS_XORG_APPLICATION_CONTEXT(xorg_application_context)->window = window;
- g_object_ref(G_OBJECT(window));
-
-@@ -982,6 +985,12 @@
- /* */
- ags_audio_file_get_type();
- ags_audio_file_link_get_type();
-+
-+ /* register tasks */
-+ ags_cancel_audio_get_type();
-+ ags_cancel_channel_get_type();
-+
-+ //TODO:JK: extend me
-
- /* register recalls */
- ags_recall_channel_run_dummy_get_type();
---- a/ags/X/editor/ags_machine_selector.c
-+++ b/ags/X/editor/ags_machine_selector.c
-@@ -25,6 +25,7 @@
- #include <ags/audio/ags_notation.h>
-
- #include <ags/X/ags_editor.h>
-+#include <ags/X/ags_automation_editor.h>
-
- #include <ags/X/editor/ags_machine_radio_button.h>
-
-@@ -225,10 +226,7 @@
-
- GList *list, *list_start;
-
-- editor = (AgsEditor *) gtk_widget_get_ancestor((GtkWidget *) machine_selector,
-- AGS_TYPE_EDITOR);
--
-- /* emit changed */
-+ /* get machine radio button */
- machine_radio_button = NULL;
-
- list_start =
-@@ -243,28 +241,106 @@
- }
-
- g_list_free(list_start);
-+
-+ if(machine_radio_button == NULL){
-+ return;
-+ }
-
-- /* destroy edit widgets */
-- if(machine_radio_button != NULL){
-+ /* */
-+ editor = (AgsEditor *) gtk_widget_get_ancestor((GtkWidget *) machine_selector,
-+ AGS_TYPE_EDITOR);
-+
-+ if(editor != NULL){
-+ /* destroy edit widgets */
- if(machine_radio_button->machine != NULL){
-+ AgsEditorChild *editor_child;
-+
-+ editor_child = NULL;
-+
- list = editor->editor_child;
-
- while(list != NULL){
- if(AGS_EDITOR_CHILD(list->data)->machine == machine_radio_button->machine){
-- gtk_widget_destroy((GtkWidget *) AGS_EDITOR_CHILD(list->data)->notebook);
-- gtk_widget_destroy((GtkWidget *) AGS_EDITOR_CHILD(list->data)->meter);
-- gtk_widget_destroy((GtkWidget *) AGS_EDITOR_CHILD(list->data)->edit_widget);
--
-+ editor_child = AGS_EDITOR_CHILD(list->data);
-+
-+ gtk_widget_destroy((GtkWidget *) editor_child->notebook);
-+ gtk_widget_destroy((GtkWidget *) editor_child->meter);
-+ gtk_widget_destroy((GtkWidget *) editor_child->edit_widget);
-+
-+ editor->current_notebook = NULL;
-+ editor->current_meter = NULL;
-+ editor->current_edit_widget = NULL;
-+
- break;
- }
-
- list = list->next;
- }
-+
-+ if(editor_child != NULL){
-+ editor->editor_child = g_list_remove(editor->editor_child,
-+ editor_child);
-+ free(editor_child);
-+ }
-+ }
-+ }else{
-+ AgsAutomationEditor *automation_editor;
-+
-+ automation_editor = (AgsAutomationEditor *) gtk_widget_get_ancestor((GtkWidget *) machine_selector,
-+ AGS_TYPE_AUTOMATION_EDITOR);
-+
-+ if(automation_editor != NULL){
-+ /* destroy edit widgets */
-+ if(machine_radio_button->machine != NULL){
-+ AgsAutomationEditorChild *automation_editor_child;
-+
-+ automation_editor_child = NULL;
-+
-+ list = automation_editor->automation_editor_child;
-+
-+ while(list != NULL){
-+ if(AGS_AUTOMATION_EDITOR_CHILD(list->data)->machine == machine_radio_button->machine){
-+ automation_editor_child = AGS_AUTOMATION_EDITOR_CHILD(list->data);
-+
-+ gtk_widget_destroy((GtkWidget *) automation_editor_child->audio_scale);
-+ gtk_widget_destroy((GtkWidget *) automation_editor_child->audio_automation_edit);
-+
-+ gtk_widget_destroy((GtkWidget *) automation_editor_child->output_scale);
-+ gtk_widget_destroy((GtkWidget *) automation_editor_child->output_notebook);
-+ gtk_widget_destroy((GtkWidget *) automation_editor_child->output_automation_edit);
-+
-+ gtk_widget_destroy((GtkWidget *) automation_editor_child->input_scale);
-+ gtk_widget_destroy((GtkWidget *) automation_editor_child->input_notebook);
-+ gtk_widget_destroy((GtkWidget *) automation_editor_child->input_automation_edit);
-+
-+ automation_editor->current_audio_scale = NULL;
-+ automation_editor->current_audio_automation_edit = NULL;
-+
-+ automation_editor->current_output_notebook = NULL;
-+ automation_editor->current_output_scale = NULL;
-+ automation_editor->current_output_automation_edit = NULL;
-+
-+ automation_editor->current_input_notebook = NULL;
-+ automation_editor->current_input_scale = NULL;
-+ automation_editor->current_input_automation_edit = NULL;
-+
-+ break;
-+ }
-+
-+ list = list->next;
-+ }
-+
-+ if(automation_editor_child != NULL){
-+ automation_editor->automation_editor_child = g_list_remove(automation_editor->automation_editor_child,
-+ automation_editor_child);
-+ free(automation_editor_child);
-+ }
-+ }
- }
--
-- /**/
-- gtk_widget_destroy(GTK_WIDGET(machine_radio_button));
- }
-+
-+ /**/
-+ gtk_widget_destroy(GTK_WIDGET(machine_radio_button));
- }
-
- void
---- a/ags/X/file/ags_simple_file.c
-+++ b/ags/X/file/ags_simple_file.c
-@@ -1692,6 +1692,14 @@
- "reference\0", gobject,
- NULL));
-
-+ /* set name if available */
-+ str = xmlGetProp(node,
-+ AGS_FILE_NAME_PROP);
-+
-+ if(str != NULL){
-+ gobject->name = g_strdup(str);
-+ }
-+
- /* retrieve window */
- window = AGS_XORG_APPLICATION_CONTEXT(simple_file->application_context)->window;
-
-@@ -5016,7 +5024,11 @@
- xmlNewProp(node,
- (xmlChar *) AGS_FILE_TYPE_PROP,
- (xmlChar *) G_OBJECT_TYPE_NAME(machine));
--
-+
-+ xmlNewProp(node,
-+ (xmlChar *) AGS_FILE_NAME_PROP,
-+ (xmlChar *) machine->name);
-+
- ags_simple_file_add_id_ref(simple_file,
- g_object_new(AGS_TYPE_FILE_ID_REF,
- "application-context\0", simple_file->application_context,
---- a/ags/X/file/ags_simple_file.dtd
-+++ b/ags/X/file/ags_simple_file.dtd
-@@ -46,6 +46,7 @@
- <!ATTLIST ags-sf-machine
- id CDATA #REQUIRED
- type CDATA #REQUIRED
-+ name CDATA #REQUIRED
- filename CDATA #IMPLIED
- preset CDATA #IMPLIED
- instrument CDATA #IMPLIED
---- a/ags/audio/ags_devout.c
-+++ b/ags/audio/ags_devout.c
-@@ -33,6 +33,7 @@
- #include <ags/thread/ags_poll_fd.h>
-
- #include <ags/audio/task/ags_tic_device.h>
-+#include <ags/audio/task/ags_clear_buffer.h>
- #include <ags/audio/task/ags_switch_buffer_flag.h>
- #include <ags/audio/task/ags_notify_soundcard.h>
-
-@@ -775,6 +776,12 @@
- devout->buffer[1] = NULL;
- devout->buffer[2] = NULL;
- devout->buffer[3] = NULL;
-+
-+ g_atomic_int_set(&(devout->available),
-+ FALSE);
-+
-+ devout->ring_buffer_size = AGS_DEVOUT_DEFAULT_RING_BUFFER_SIZE;
-+ devout->nth_ring_buffer = 0;
-
- devout->ring_buffer = NULL;
-
-@@ -1830,7 +1837,11 @@
- #endif
-
- if((POLLOUT & revents) != 0){
-- return(TRUE);
-+ g_atomic_int_set(&(devout->available),
-+ TRUE);
-+ AGS_POLL_FD(list->data)->poll_fd->revents = 0;
-+
-+ return(TRUE);
- }
- }else{
- #ifdef AGS_WITH_OSS
-@@ -1840,6 +1851,10 @@
- FD_SET(AGS_POLL_FD(list->data)->poll_fd->fd, &writefds);
-
- if(FD_ISSET(AGS_POLL_FD(list->data)->poll_fd->fd, &writefds)){
-+ g_atomic_int_set(&(devout->available),
-+ TRUE);
-+ AGS_POLL_FD(list->data)->poll_fd->revents = 0;
-+
- return(TRUE);
- }
- #endif
-@@ -1974,6 +1989,7 @@
- guint word_size;
- int format;
- int tmp;
-+ guint i;
-
- pthread_mutex_t *mutex;
-
-@@ -2051,10 +2067,17 @@
- memset(devout->buffer[3], 0, devout->pcm_channels * devout->buffer_size * word_size);
-
- /* allocate ring buffer */
-- devout->ring_buffer = (unsigned char **) malloc(2 * sizeof(unsigned char *));
-- devout->ring_buffer[0] = (unsigned char *) malloc(devout->pcm_channels * devout->buffer_size * word_size * sizeof(unsigned char));
-- devout->ring_buffer[1] = (unsigned char *) malloc(devout->pcm_channels * devout->buffer_size * word_size * sizeof(unsigned char));
-+ g_atomic_int_set(&(devout->available),
-+ FALSE);
-
-+ devout->ring_buffer = (unsigned char **) malloc(devout->ring_buffer_size * sizeof(unsigned char *));
-+
-+ for(i = 0; i < devout->ring_buffer_size; i++){
-+ devout->ring_buffer[i] = (unsigned char *) malloc(devout->pcm_channels *
-+ devout->buffer_size * word_size *
-+ sizeof(unsigned char));
-+ }
-+
- #ifdef AGS_WITH_OSS
- /* open device fd */
- str = devout->out.oss.device;
-@@ -2192,6 +2215,8 @@
- devout->delay_counter = 0.0;
- devout->tic_counter = 0;
-
-+ devout->nth_ring_buffer = 0;
-+
- ags_soundcard_get_poll_fd(soundcard);
-
- devout->flags |= AGS_DEVOUT_INITIALIZED;
-@@ -2209,27 +2234,34 @@
- {
- AgsDevout *devout;
-
-+ AgsNotifySoundcard *notify_soundcard;
- AgsTicDevice *tic_device;
-+ AgsClearBuffer *clear_buffer;
- AgsSwitchBufferFlag *switch_buffer_flag;
-
- AgsThread *task_thread;
-+ AgsPollFd *poll_fd;
- AgsMutexManager *mutex_manager;
-
- AgsApplicationContext *application_context;
-
- GList *task;
--
-+ GList *list;
-+
- gchar *str;
-
- guint word_size;
- guint nth_buffer;
-- guint next_buffer;
-- guint nth_ring_buffer;
-
- int n_write;
-
- pthread_mutex_t *mutex;
-
-+ static const struct timespec poll_interval = {
-+ 0,
-+ 250,
-+ };
-+
- auto void ags_devout_oss_play_fill_ring_buffer(void *buffer, guint ags_format, unsigned char *ring_buffer, guint channels, guint buffer_size);
-
- void ags_devout_oss_play_fill_ring_buffer(void *buffer, guint ags_format, unsigned char *ring_buffer, guint channels, guint buffer_size){
-@@ -2330,17 +2362,19 @@
- /* lock */
- pthread_mutex_lock(mutex);
-
-+ notify_soundcard = AGS_NOTIFY_SOUNDCARD(devout->notify_soundcard);
-+
- /* notify cyclic task */
-- pthread_mutex_lock(AGS_NOTIFY_SOUNDCARD(devout->notify_soundcard)->return_mutex);
-+ pthread_mutex_lock(notify_soundcard->return_mutex);
-
-- g_atomic_int_or(&(AGS_NOTIFY_SOUNDCARD(devout->notify_soundcard)->flags),
-+ g_atomic_int_or(&(notify_soundcard->flags),
- AGS_NOTIFY_SOUNDCARD_DONE_RETURN);
-
-- if((AGS_NOTIFY_SOUNDCARD_WAIT_RETURN & (g_atomic_int_get(&(AGS_NOTIFY_SOUNDCARD(devout->notify_soundcard)->flags)))) != 0){
-- pthread_cond_signal(AGS_NOTIFY_SOUNDCARD(devout->notify_soundcard)->return_cond);
-+ if((AGS_NOTIFY_SOUNDCARD_WAIT_RETURN & (g_atomic_int_get(&(notify_soundcard->flags)))) != 0){
-+ pthread_cond_signal(notify_soundcard->return_cond);
- }
-
-- pthread_mutex_unlock(AGS_NOTIFY_SOUNDCARD(devout->notify_soundcard)->return_mutex);
-+ pthread_mutex_unlock(notify_soundcard->return_mutex);
-
- /* retrieve word size */
- switch(devout->format){
-@@ -2386,42 +2420,59 @@
- /* check buffer flag */
- if((AGS_DEVOUT_BUFFER0 & (devout->flags)) != 0){
- nth_buffer = 0;
-- next_buffer = 1;
-- nth_ring_buffer = 0;
- }else if((AGS_DEVOUT_BUFFER1 & (devout->flags)) != 0){
- nth_buffer = 1;
-- next_buffer = 2;
-- nth_ring_buffer = 1;
- }else if((AGS_DEVOUT_BUFFER2 & (devout->flags)) != 0){
- nth_buffer = 2;
-- next_buffer = 3;
-- nth_ring_buffer = 0;
- }else if((AGS_DEVOUT_BUFFER3 & devout->flags) != 0){
- nth_buffer = 3;
-- next_buffer = 0;
-- nth_ring_buffer = 1;
- }
-
-- /* clear next buffer */
-- memset(devout->buffer[next_buffer], 0, (size_t) devout->pcm_channels * devout->buffer_size * word_size);
--
- #ifdef AGS_WITH_OSS
- /* fill ring buffer */
- ags_devout_oss_play_fill_ring_buffer(devout->buffer[nth_buffer],
- devout->format,
-- devout->ring_buffer[nth_ring_buffer],
-+ devout->ring_buffer[devout->nth_ring_buffer],
- devout->pcm_channels,
- devout->buffer_size);
-
-+ /* wait until available */
-+ list = ags_soundcard_get_poll_fd(soundcard);
-+
-+ if(!ags_soundcard_is_available(soundcard) &&
-+ !g_atomic_int_get(&(devout->available)) &&
-+ list != NULL){
-+ poll_fd = list->data;
-+ poll_fd->poll_fd->events = POLLOUT;
-+
-+ while(!ags_soundcard_is_available(soundcard) &&
-+ !g_atomic_int_get(&(devout->available))){
-+ ppoll(poll_fd->poll_fd,
-+ 1,
-+ &poll_interval,
-+ NULL);
-+ }
-+ }
-+
- /* write ring buffer */
- n_write = write(devout->out.oss.device_fd,
-- devout->ring_buffer[nth_ring_buffer],
-+ devout->ring_buffer[devout->nth_ring_buffer],
- devout->pcm_channels * devout->buffer_size * word_size * sizeof (char));
-
-+ g_atomic_int_set(&(devout->available),
-+ FALSE);
-+
- if(n_write != devout->pcm_channels * devout->buffer_size * word_size * sizeof (char)){
- g_critical("write() return doesn't match written bytes\0");
- }
- #endif
-+
-+ /* increment nth ring-buffer */
-+ if(devout->nth_ring_buffer + 1 >= devout->ring_buffer_size){
-+ devout->nth_ring_buffer = 0;
-+ }else{
-+ devout->nth_ring_buffer += 1;
-+ }
-
- pthread_mutex_unlock(mutex);
-
-@@ -2435,6 +2486,11 @@
- task = g_list_append(task,
- tic_device);
-
-+ /* reset - clear buffer */
-+ clear_buffer = ags_clear_buffer_new((GObject *) devout);
-+ task = g_list_append(task,
-+ clear_buffer);
-+
- /* reset - switch buffer flags */
- switch_buffer_flag = ags_switch_buffer_flag_new((GObject *) devout);
- task = g_list_append(task,
-@@ -2450,12 +2506,16 @@
- {
- AgsDevout *devout;
-
-+ AgsNotifySoundcard *notify_soundcard;
-+
- AgsMutexManager *mutex_manager;
-
- AgsApplicationContext *application_context;
-
- GList *poll_fd;
-
-+ guint i;
-+
- pthread_mutex_t *mutex;
-
- devout = AGS_DEVOUT(soundcard);
-@@ -2471,19 +2531,50 @@
-
- pthread_mutex_unlock(application_context->mutex);
-
-+ /* */
-+ pthread_mutex_lock(mutex);
-+
-+#ifdef AGS_WITH_OSS
-+ /* remove poll fd */
-+ poll_fd = devout->poll_fd;
-+
-+ while(poll_fd != NULL){
-+ ags_polling_thread_remove_poll_fd(AGS_POLL_FD(poll_fd->data)->polling_thread,
-+ poll_fd->data);
-+ g_object_unref(poll_fd->data);
-+
-+ poll_fd = poll_fd->next;
-+ }
-+
-+ g_list_free(poll_fd);
-+
-+ devout->poll_fd = NULL;
-+#endif
-+
-+ notify_soundcard = AGS_NOTIFY_SOUNDCARD(devout->notify_soundcard);
-+
- if((AGS_DEVOUT_INITIALIZED & (devout->flags)) == 0){
-+ pthread_mutex_unlock(mutex);
-+
- return;
- }
-
- close(devout->out.oss.device_fd);
- devout->out.oss.device_fd = -1;
-
-- free(devout->ring_buffer[0]);
-- free(devout->ring_buffer[1]);
-+ /* free ring-buffer */
-+ g_atomic_int_set(&(devout->available),
-+ FALSE);
-+
-+ for(i = 0; i < devout->ring_buffer_size; i++){
-+ free(devout->ring_buffer[i]);
-+ }
-+
- free(devout->ring_buffer);
-
- devout->ring_buffer = NULL;
--
-+
-+ /* reset flags */
- devout->flags &= (~(AGS_DEVOUT_BUFFER0 |
- AGS_DEVOUT_BUFFER1 |
- AGS_DEVOUT_BUFFER2 |
-@@ -2492,19 +2583,21 @@
- AGS_DEVOUT_INITIALIZED));
-
- /* notify cyclic task */
-- pthread_mutex_lock(AGS_NOTIFY_SOUNDCARD(devout->notify_soundcard)->return_mutex);
-+ pthread_mutex_lock(notify_soundcard->return_mutex);
-
-- g_atomic_int_or(&(AGS_NOTIFY_SOUNDCARD(devout->notify_soundcard)->flags),
-+ g_atomic_int_or(&(notify_soundcard->flags),
- AGS_NOTIFY_SOUNDCARD_DONE_RETURN);
-
-- if((AGS_NOTIFY_SOUNDCARD_WAIT_RETURN & (g_atomic_int_get(&(AGS_NOTIFY_SOUNDCARD(devout->notify_soundcard)->flags)))) != 0){
-- pthread_cond_signal(AGS_NOTIFY_SOUNDCARD(devout->notify_soundcard)->return_cond);
-+ if((AGS_NOTIFY_SOUNDCARD_WAIT_RETURN & (g_atomic_int_get(&(notify_soundcard->flags)))) != 0){
-+ pthread_cond_signal(notify_soundcard->return_cond);
- }
-
-- pthread_mutex_unlock(AGS_NOTIFY_SOUNDCARD(devout->notify_soundcard)->return_mutex);
-+ pthread_mutex_unlock(notify_soundcard->return_mutex);
-
- devout->note_offset = 0;
- devout->note_offset_absolute = 0;
-+
-+ pthread_mutex_unlock(mutex);
- }
-
- void
-@@ -2542,6 +2635,7 @@
- #endif
-
- guint word_size;
-+ guint i;
-
- pthread_mutex_t *mutex;
-
-@@ -2628,10 +2722,17 @@
-
- /* allocate ring buffer */
- #ifdef AGS_WITH_ALSA
-- devout->ring_buffer = (unsigned char **) malloc(2 * sizeof(unsigned char *));
-- devout->ring_buffer[0] = (unsigned char *) malloc(devout->pcm_channels * devout->buffer_size * (snd_pcm_format_physical_width(format) / 8) * sizeof(unsigned char));
-- devout->ring_buffer[1] = (unsigned char *) malloc(devout->pcm_channels * devout->buffer_size * (snd_pcm_format_physical_width(format) / 8) * sizeof(unsigned char));
-+ g_atomic_int_set(&(devout->available),
-+ FALSE);
-
-+ devout->ring_buffer = (unsigned char **) malloc(devout->ring_buffer_size * sizeof(unsigned char *));
-+
-+ for(i = 0; i < devout->ring_buffer_size; i++){
-+ devout->ring_buffer[i] = (unsigned char *) malloc(devout->pcm_channels *
-+ devout->buffer_size * (snd_pcm_format_physical_width(format) / 8) *
-+ sizeof(unsigned char));
-+ }
-+
- /* */
- period_event = 0;
-
-@@ -2933,6 +3034,8 @@
- devout->delay_counter = 0.0;
- devout->tic_counter = 0;
-
-+ devout->nth_ring_buffer = 0;
-+
- ags_soundcard_get_poll_fd(soundcard);
-
- devout->flags |= AGS_DEVOUT_INITIALIZED;
-@@ -2950,25 +3053,32 @@
- {
- AgsDevout *devout;
-
-+ AgsNotifySoundcard *notify_soundcard;
- AgsTicDevice *tic_device;
-+ AgsClearBuffer *clear_buffer;
- AgsSwitchBufferFlag *switch_buffer_flag;
-
- AgsThread *task_thread;
-+ AgsPollFd *poll_fd;
- AgsMutexManager *mutex_manager;
-
- AgsApplicationContext *application_context;
-
- GList *task;
-+ GList *list;
-
- gchar *str;
-
- guint word_size;
- guint nth_buffer;
-- guint next_buffer;
-- guint nth_ring_buffer;
-
- pthread_mutex_t *mutex;
-
-+ static const struct timespec poll_interval = {
-+ 0,
-+ 250,
-+ };
-+
- #ifdef AGS_WITH_ALSA
- auto void ags_devout_alsa_play_fill_ring_buffer(void *buffer, guint ags_format, unsigned char *ring_buffer, guint channels, guint buffer_size);
-
-@@ -3089,17 +3199,19 @@
- /* lock */
- pthread_mutex_lock(mutex);
-
-+ notify_soundcard = AGS_NOTIFY_SOUNDCARD(devout->notify_soundcard);
-+
- /* notify cyclic task */
-- pthread_mutex_lock(AGS_NOTIFY_SOUNDCARD(devout->notify_soundcard)->return_mutex);
-+ pthread_mutex_lock(notify_soundcard->return_mutex);
-
-- g_atomic_int_or(&(AGS_NOTIFY_SOUNDCARD(devout->notify_soundcard)->flags),
-+ g_atomic_int_or(&(notify_soundcard->flags),
- AGS_NOTIFY_SOUNDCARD_DONE_RETURN);
-
-- if((AGS_NOTIFY_SOUNDCARD_WAIT_RETURN & (g_atomic_int_get(&(AGS_NOTIFY_SOUNDCARD(devout->notify_soundcard)->flags)))) != 0){
-- pthread_cond_signal(AGS_NOTIFY_SOUNDCARD(devout->notify_soundcard)->return_cond);
-+ if((AGS_NOTIFY_SOUNDCARD_WAIT_RETURN & (g_atomic_int_get(&(notify_soundcard->flags)))) != 0){
-+ pthread_cond_signal(notify_soundcard->return_cond);
- }
-
-- pthread_mutex_unlock(AGS_NOTIFY_SOUNDCARD(devout->notify_soundcard)->return_mutex);
-+ pthread_mutex_unlock(notify_soundcard->return_mutex);
-
- /* retrieve word size */
- switch(devout->format){
-@@ -3129,7 +3241,10 @@
- }
- break;
- default:
-+ pthread_mutex_unlock(mutex);
-+
- g_warning("ags_devout_alsa_play(): unsupported word size\0");
-+
- return;
- }
-
-@@ -3150,37 +3265,47 @@
- /* check buffer flag */
- if((AGS_DEVOUT_BUFFER0 & (devout->flags)) != 0){
- nth_buffer = 0;
-- next_buffer = 1;
-- nth_ring_buffer = 0;
- }else if((AGS_DEVOUT_BUFFER1 & (devout->flags)) != 0){
- nth_buffer = 1;
-- next_buffer = 2;
-- nth_ring_buffer = 1;
- }else if((AGS_DEVOUT_BUFFER2 & (devout->flags)) != 0){
- nth_buffer = 2;
-- next_buffer = 3;
-- nth_ring_buffer = 0;
- }else if((AGS_DEVOUT_BUFFER3 & devout->flags) != 0){
- nth_buffer = 3;
-- next_buffer = 0;
-- nth_ring_buffer = 1;
- }
-
-- /* clear next buffer */
-- memset(devout->buffer[next_buffer], 0, (size_t) devout->pcm_channels * devout->buffer_size * word_size);
--
- #ifdef AGS_WITH_ALSA
-
- /* fill ring buffer */
- ags_devout_alsa_play_fill_ring_buffer(devout->buffer[nth_buffer], devout->format,
-- devout->ring_buffer[nth_ring_buffer],
-+ devout->ring_buffer[devout->nth_ring_buffer],
- devout->pcm_channels, devout->buffer_size);
-
-+ /* wait until available */
-+ list = ags_soundcard_get_poll_fd(soundcard);
-+
-+ if(!ags_soundcard_is_available(soundcard) &&
-+ !g_atomic_int_get(&(devout->available)) &&
-+ list != NULL){
-+ poll_fd = list->data;
-+ poll_fd->poll_fd->events = POLLOUT;
-+
-+ while(!ags_soundcard_is_available(soundcard) &&
-+ !g_atomic_int_get(&(devout->available))){
-+ ppoll(poll_fd->poll_fd,
-+ 1,
-+ &poll_interval,
-+ NULL);
-+ }
-+ }
-+
- /* write ring buffer */
- devout->out.alsa.rc = snd_pcm_writei(devout->out.alsa.handle,
-- devout->ring_buffer[nth_ring_buffer],
-+ devout->ring_buffer[devout->nth_ring_buffer],
- (snd_pcm_uframes_t) (devout->buffer_size));
-
-+ g_atomic_int_set(&(devout->available),
-+ FALSE);
-+
- /* check error flag */
- if((AGS_DEVOUT_NONBLOCKING & (devout->flags)) == 0){
- if(devout->out.alsa.rc == -EPIPE){
-@@ -3216,6 +3341,16 @@
-
- #endif
-
-+ /* increment nth ring-buffer */
-+ g_atomic_int_set(&(devout->available),
-+ FALSE);
-+
-+ if(devout->nth_ring_buffer + 1 >= devout->ring_buffer_size){
-+ devout->nth_ring_buffer = 0;
-+ }else{
-+ devout->nth_ring_buffer += 1;
-+ }
-+
- pthread_mutex_unlock(mutex);
-
- /* update soundcard */
-@@ -3227,7 +3362,12 @@
- tic_device = ags_tic_device_new((GObject *) devout);
- task = g_list_append(task,
- tic_device);
--
-+
-+ /* reset - clear buffer */
-+ clear_buffer = ags_clear_buffer_new((GObject *) devout);
-+ task = g_list_append(task,
-+ clear_buffer);
-+
- /* reset - switch buffer flags */
- switch_buffer_flag = ags_switch_buffer_flag_new((GObject *) devout);
- task = g_list_append(task,
-@@ -3247,15 +3387,33 @@
- {
- AgsDevout *devout;
-
-+ AgsNotifySoundcard *notify_soundcard;
-+
- AgsMutexManager *mutex_manager;
-
- AgsApplicationContext *application_context;
-
- GList *poll_fd;
-
-+ guint i;
-+
- pthread_mutex_t *mutex;
-
- devout = AGS_DEVOUT(soundcard);
-+
-+ application_context = ags_soundcard_get_application_context(soundcard);
-+
-+ pthread_mutex_lock(application_context->mutex);
-+
-+ mutex_manager = ags_mutex_manager_get_instance();
-+
-+ mutex = ags_mutex_manager_lookup(mutex_manager,
-+ (GObject *) devout);
-+
-+ pthread_mutex_unlock(application_context->mutex);
-+
-+ /* lock */
-+ pthread_mutex_lock(mutex);
-
- #ifdef AGS_WITH_ALSA
- /* remove poll fd */
-@@ -3273,19 +3431,12 @@
-
- devout->poll_fd = NULL;
- #endif
--
-- application_context = ags_soundcard_get_application_context(soundcard);
--
-- pthread_mutex_lock(application_context->mutex);
--
-- mutex_manager = ags_mutex_manager_get_instance();
-
-- mutex = ags_mutex_manager_lookup(mutex_manager,
-- (GObject *) devout);
--
-- pthread_mutex_unlock(application_context->mutex);
-+ notify_soundcard = AGS_NOTIFY_SOUNDCARD(devout->notify_soundcard);
-
- if((AGS_DEVOUT_INITIALIZED & (devout->flags)) == 0){
-+ pthread_mutex_unlock(mutex);
-+
- return;
- }
-
-@@ -3295,12 +3446,16 @@
- devout->out.alsa.handle = NULL;
- #endif
-
-- free(devout->ring_buffer[0]);
-- free(devout->ring_buffer[1]);
-+ /* free ring-buffer */
-+ for(i = 0; i < devout->ring_buffer_size; i++){
-+ free(devout->ring_buffer[i]);
-+ }
-+
- free(devout->ring_buffer);
-
- devout->ring_buffer = NULL;
--
-+
-+ /* reset flags */
- devout->flags &= (~(AGS_DEVOUT_BUFFER0 |
- AGS_DEVOUT_BUFFER1 |
- AGS_DEVOUT_BUFFER2 |
-@@ -3309,19 +3464,21 @@
- AGS_DEVOUT_INITIALIZED));
-
- /* notify cyclic task */
-- pthread_mutex_lock(AGS_NOTIFY_SOUNDCARD(devout->notify_soundcard)->return_mutex);
-+ pthread_mutex_lock(notify_soundcard->return_mutex);
-
-- g_atomic_int_or(&(AGS_NOTIFY_SOUNDCARD(devout->notify_soundcard)->flags),
-+ g_atomic_int_or(&(notify_soundcard->flags),
- AGS_NOTIFY_SOUNDCARD_DONE_RETURN);
-
-- if((AGS_NOTIFY_SOUNDCARD_WAIT_RETURN & (g_atomic_int_get(&(AGS_NOTIFY_SOUNDCARD(devout->notify_soundcard)->flags)))) != 0){
-- pthread_cond_signal(AGS_NOTIFY_SOUNDCARD(devout->notify_soundcard)->return_cond);
-+ if((AGS_NOTIFY_SOUNDCARD_WAIT_RETURN & (g_atomic_int_get(&(notify_soundcard->flags)))) != 0){
-+ pthread_cond_signal(notify_soundcard->return_cond);
- }
-
-- pthread_mutex_unlock(AGS_NOTIFY_SOUNDCARD(devout->notify_soundcard)->return_mutex);
-+ pthread_mutex_unlock(notify_soundcard->return_mutex);
-
- devout->note_offset = 0;
- devout->note_offset_absolute = 0;
-+
-+ pthread_mutex_unlock(mutex);
- }
-
- void
---- a/ags/audio/ags_devout.h
-+++ b/ags/audio/ags_devout.h
-@@ -45,6 +45,8 @@
- #define AGS_DEVOUT_DEFAULT_ALSA_DEVICE "hw:0,0\0"
- #define AGS_DEVOUT_DEFAULT_OSS_DEVICE "/dev/dsp\0"
-
-+#define AGS_DEVOUT_DEFAULT_RING_BUFFER_SIZE (8)
-+
- typedef struct _AgsDevout AgsDevout;
- typedef struct _AgsDevoutClass AgsDevoutClass;
-
-@@ -95,6 +97,12 @@
- guint samplerate; // sample_rate
-
- void** buffer;
-+
-+ volatile gboolean available;
-+
-+ guint ring_buffer_size;
-+ guint nth_ring_buffer;
-+
- unsigned char **ring_buffer;
-
- double bpm; // beats per minute
---- a/ags/audio/jack/ags_jack_client.c
-+++ b/ags/audio/jack/ags_jack_client.c
-@@ -722,9 +722,9 @@
-
- pthread_mutex_unlock(audio_loop->timing_mutex);
-
-- ags_main_loop_interrupt(AGS_MAIN_LOOP(audio_loop),
-- AGS_THREAD_SUSPEND_SIG,
-- 0, &time_spent);
-+ // ags_main_loop_interrupt(AGS_MAIN_LOOP(audio_loop),
-+ // AGS_THREAD_SUSPEND_SIG,
-+ // 0, &time_spent);
- }
-
- if(task_thread != NULL){
-@@ -886,14 +886,8 @@
- }
-
- if(!no_event){
-- memset(jack_devout->buffer[nth_buffer], 0, (size_t) jack_devout->pcm_channels * jack_devout->buffer_size * word_size);
--
- /* signal finish */
-- pthread_mutex_lock(device_mutex);
--
- callback_finish_mutex = jack_devout->callback_finish_mutex;
--
-- pthread_mutex_unlock(device_mutex);
-
- pthread_mutex_lock(callback_finish_mutex);
-
-@@ -1021,11 +1015,7 @@
- }
-
- /* signal finish */
-- pthread_mutex_lock(device_mutex);
--
- callback_finish_mutex = jack_midiin->callback_finish_mutex;
--
-- pthread_mutex_unlock(device_mutex);
-
- pthread_mutex_lock(callback_finish_mutex);
-
---- a/ags/audio/jack/ags_jack_devout.c
-+++ b/ags/audio/jack/ags_jack_devout.c
-@@ -40,6 +40,7 @@
-
- #include <ags/audio/task/ags_notify_soundcard.h>
- #include <ags/audio/task/ags_tic_device.h>
-+#include <ags/audio/task/ags_clear_buffer.h>
- #include <ags/audio/task/ags_switch_buffer_flag.h>
-
- #include <ags/audio/thread/ags_audio_loop.h>
-@@ -1610,11 +1611,14 @@
- AgsJackClient *jack_client;
- AgsJackDevout *jack_devout;
-
-+ AgsNotifySoundcard *notify_soundcard;
-+
- AgsMutexManager *mutex_manager;
- AgsTaskThread *task_thread;
-
- AgsApplicationContext *application_context;
-
-+ guint word_size;
- gboolean jack_client_activated;
-
- pthread_mutex_t *mutex;
-@@ -1650,13 +1654,49 @@
- pthread_mutex_lock(mutex);
-
- jack_devout->flags &= (~AGS_JACK_DEVOUT_START_PLAY);
--
-+ notify_soundcard = AGS_NOTIFY_SOUNDCARD(jack_devout->notify_soundcard);
-+
- if((AGS_JACK_DEVOUT_INITIALIZED & (jack_devout->flags)) == 0){
- pthread_mutex_unlock(mutex);
-
- return;
- }
-
-+ switch(jack_devout->format){
-+ case AGS_SOUNDCARD_SIGNED_8_BIT:
-+ {
-+ word_size = sizeof(signed char);
-+ }
-+ break;
-+ case AGS_SOUNDCARD_SIGNED_16_BIT:
-+ {
-+ word_size = sizeof(signed short);
-+ }
-+ break;
-+ case AGS_SOUNDCARD_SIGNED_24_BIT:
-+ {
-+ //NOTE:JK: The 24-bit linear samples use 32-bit physical space
-+ word_size = sizeof(signed long);
-+ }
-+ break;
-+ case AGS_SOUNDCARD_SIGNED_32_BIT:
-+ {
-+ word_size = sizeof(signed long);
-+ }
-+ break;
-+ case AGS_SOUNDCARD_SIGNED_64_BIT:
-+ {
-+ word_size = sizeof(signed long long);
-+ }
-+ break;
-+ default:
-+ pthread_mutex_unlock(mutex);
-+
-+ g_warning("ags_jack_devout_port_play(): unsupported word size\0");
-+
-+ return;
-+ }
-+
- pthread_mutex_unlock(mutex);
-
- /* */
-@@ -1715,19 +1755,20 @@
- }
-
- /* notify cyclic task */
-- pthread_mutex_lock(AGS_NOTIFY_SOUNDCARD(jack_devout->notify_soundcard)->return_mutex);
-+ pthread_mutex_lock(notify_soundcard->return_mutex);
-
-- g_atomic_int_or(&(AGS_NOTIFY_SOUNDCARD(jack_devout->notify_soundcard)->flags),
-+ g_atomic_int_or(&(notify_soundcard->flags),
- AGS_NOTIFY_SOUNDCARD_DONE_RETURN);
-
-- if((AGS_NOTIFY_SOUNDCARD_WAIT_RETURN & (g_atomic_int_get(&(AGS_NOTIFY_SOUNDCARD(jack_devout->notify_soundcard)->flags)))) != 0){
-- pthread_cond_signal(AGS_NOTIFY_SOUNDCARD(jack_devout->notify_soundcard)->return_cond);
-+ if((AGS_NOTIFY_SOUNDCARD_WAIT_RETURN & (g_atomic_int_get(&(notify_soundcard->flags)))) != 0){
-+ pthread_cond_signal(notify_soundcard->return_cond);
- }
-
-- pthread_mutex_unlock(AGS_NOTIFY_SOUNDCARD(jack_devout->notify_soundcard)->return_mutex);
-+ pthread_mutex_unlock(notify_soundcard->return_mutex);
-
- if(task_thread != NULL){
- AgsTicDevice *tic_device;
-+ AgsClearBuffer *clear_buffer;
- AgsSwitchBufferFlag *switch_buffer_flag;
-
- GList *task;
-@@ -1738,7 +1779,12 @@
- tic_device = ags_tic_device_new((GObject *) jack_devout);
- task = g_list_append(task,
- tic_device);
--
-+
-+ /* reset - clear buffer */
-+ clear_buffer = ags_clear_buffer_new((GObject *) jack_devout);
-+ task = g_list_append(task,
-+ clear_buffer);
-+
- /* reset - switch buffer flags */
- switch_buffer_flag = ags_switch_buffer_flag_new((GObject *) jack_devout);
- task = g_list_append(task,
-@@ -1748,9 +1794,24 @@
- ags_task_thread_append_tasks((AgsTaskThread *) task_thread,
- task);
- }else{
-+ guint nth_buffer;
-+
- /* tic */
- ags_soundcard_tic(AGS_SOUNDCARD(jack_devout));
--
-+
-+ /* reset - clear buffer */
-+ if((AGS_JACK_DEVOUT_BUFFER0 & (jack_devout->flags)) != 0){
-+ nth_buffer = 3;
-+ }else if((AGS_JACK_DEVOUT_BUFFER1 & (jack_devout->flags)) != 0){
-+ nth_buffer = 0;
-+ }else if((AGS_JACK_DEVOUT_BUFFER2 & (jack_devout->flags)) != 0){
-+ nth_buffer = 1;
-+ }else if((AGS_JACK_DEVOUT_BUFFER3 & jack_devout->flags) != 0){
-+ nth_buffer = 2;
-+ }
-+
-+ memset(jack_devout->buffer[nth_buffer], 0, (size_t) jack_devout->pcm_channels * jack_devout->buffer_size * word_size);
-+
- /* reset - switch buffer flags */
- ags_jack_devout_switch_buffer_flag(jack_devout);
- }
-@@ -1761,6 +1822,8 @@
- {
- AgsJackDevout *jack_devout;
-
-+ AgsNotifySoundcard *notify_soundcard;
-+
- AgsMutexManager *mutex_manager;
-
- AgsApplicationContext *application_context;
-@@ -1786,15 +1849,21 @@
- pthread_mutex_unlock(application_context->mutex);
-
- /* */
-+ pthread_mutex_lock(mutex);
-+
-+ notify_soundcard = AGS_NOTIFY_SOUNDCARD(jack_devout->notify_soundcard);
-+
- if((AGS_JACK_DEVOUT_INITIALIZED & (jack_devout->flags)) == 0){
-+ pthread_mutex_unlock(mutex);
-+
- return;
- }
-
-+ g_object_ref(notify_soundcard);
-+
- // g_atomic_int_or(&(AGS_THREAD(application_context->main_loop)->flags),
- // AGS_THREAD_TIMING);
-
-- pthread_mutex_lock(mutex);
--
- callback_mutex = jack_devout->callback_mutex;
- callback_finish_mutex = jack_devout->callback_finish_mutex;
-
-@@ -1808,8 +1877,6 @@
- AGS_JACK_DEVOUT_PASS_THROUGH);
- g_atomic_int_and(&(jack_devout->sync_flags),
- (~AGS_JACK_DEVOUT_INITIAL_CALLBACK));
--
-- pthread_mutex_unlock(mutex);
-
- /* signal callback */
- pthread_mutex_lock(callback_mutex);
-@@ -1836,20 +1903,20 @@
- pthread_mutex_unlock(callback_finish_mutex);
-
- /* notify cyclic task */
-- pthread_mutex_lock(AGS_NOTIFY_SOUNDCARD(jack_devout->notify_soundcard)->return_mutex);
-+ pthread_mutex_lock(notify_soundcard->return_mutex);
-
-- g_atomic_int_or(&(AGS_NOTIFY_SOUNDCARD(jack_devout->notify_soundcard)->flags),
-+ g_atomic_int_or(&(notify_soundcard->flags),
- AGS_NOTIFY_SOUNDCARD_DONE_RETURN);
-
-- if((AGS_NOTIFY_SOUNDCARD_WAIT_RETURN & (g_atomic_int_get(&(AGS_NOTIFY_SOUNDCARD(jack_devout->notify_soundcard)->flags)))) != 0){
-- pthread_cond_signal(AGS_NOTIFY_SOUNDCARD(jack_devout->notify_soundcard)->return_cond);
-+ if((AGS_NOTIFY_SOUNDCARD_WAIT_RETURN & (g_atomic_int_get(&(notify_soundcard->flags)))) != 0){
-+ pthread_cond_signal(notify_soundcard->return_cond);
- }
-
-- pthread_mutex_unlock(AGS_NOTIFY_SOUNDCARD(jack_devout->notify_soundcard)->return_mutex);
-+ pthread_mutex_unlock(notify_soundcard->return_mutex);
-
-+ g_object_unref(notify_soundcard);
-+
- /* */
-- pthread_mutex_lock(mutex);
--
- jack_devout->note_offset = 0;
- jack_devout->note_offset_absolute = 0;
-
---- a/ags/audio/jack/ags_jack_midiin.c
-+++ b/ags/audio/jack/ags_jack_midiin.c
-@@ -1232,6 +1232,8 @@
- pthread_mutex_t *callback_mutex;
- pthread_mutex_t *callback_finish_mutex;
-
-+ jack_midiin = AGS_JACK_MIDIIN(sequencer);
-+
- application_context = ags_sequencer_get_application_context(sequencer);
-
- pthread_mutex_lock(application_context->mutex);
-@@ -1245,8 +1247,6 @@
-
- pthread_mutex_lock(mutex);
-
-- jack_midiin = AGS_JACK_MIDIIN(sequencer);
--
- if((AGS_JACK_MIDIIN_INITIALIZED & (jack_midiin->flags)) == 0){
- pthread_mutex_unlock(mutex);
-
---- a/ags/audio/recall/ags_copy_pattern_channel_run.c
-+++ b/ags/audio/recall/ags_copy_pattern_channel_run.c
-@@ -364,7 +364,7 @@
- gdouble delay, guint attack,
- AgsCopyPatternChannelRun *copy_pattern_channel_run)
- {
-- AgsChannel *output, *source;
-+ AgsChannel *source;
- AgsPattern *pattern;
- AgsCopyPatternAudio *copy_pattern_audio;
- AgsCopyPatternAudioRun *copy_pattern_audio_run;
-@@ -380,7 +380,8 @@
-
- pthread_mutex_t *application_mutex;
- pthread_mutex_t *pattern_mutex;
--
-+ pthread_mutex_t *source_mutex;
-+
- if(delay != 0.0){
- return;
- }
-@@ -440,34 +441,66 @@
-
- /* */
- if(current_bit){
-+ AgsChannel *link;
- AgsRecycling *recycling;
-+ AgsRecycling *end_recycling;
- AgsAudioSignal *audio_signal;
-
- gdouble delay;
- guint attack;
-
-+ pthread_mutex_t *link_mutex;
-+
- // g_message("ags_copy_pattern_channel_run_sequencer_alloc_callback - playing channel: %u; playing pattern: %u\0",
- // AGS_RECALL_CHANNEL(copy_pattern_channel)->source->line,
- // copy_pattern_audio_run->count_beats_audio_run->sequencer_counter);
-
- /* get source */
- source = AGS_RECALL_CHANNEL(copy_pattern_channel)->source;
-+
-+ pthread_mutex_lock(application_mutex);
-+
-+ source_mutex = ags_mutex_manager_lookup(mutex_manager,
-+ (GObject *) source);
-+
-+ pthread_mutex_unlock(application_mutex);
-+
-+ /* source fields */
-+ pthread_mutex_lock(source_mutex);
-+
-+ link = source->link;
-
-- /* create new audio signals */
- recycling = source->first_recycling;
-+
-+ if(recycling != NULL){
-+ end_recycling = source->last_recycling->next;
-+ }
-
-- //TODO:JK: unclear
-+ pthread_mutex_unlock(source_mutex);
-
-+ /* link */
-+ if(link != NULL){
-+ pthread_mutex_lock(application_mutex);
-+
-+ link_mutex = ags_mutex_manager_lookup(mutex_manager,
-+ (GObject *) link);
-+
-+ pthread_mutex_unlock(application_mutex);
-+ }
-+
-+ /* create audio signals */
- if(recycling != NULL){
- AgsRecallID *child_recall_id;
-
-- while(recycling != source->last_recycling->next){
-- if(source->link == NULL){
-+ while(recycling != end_recycling){
-+ if(link == NULL){
- child_recall_id = AGS_RECALL(copy_pattern_channel_run)->recall_id;
- }else{
- GList *list;
-
-- list = source->link->recall_id;
-+ pthread_mutex_lock(link_mutex);
-+
-+ list = link->recall_id;
-
- while(list != NULL){
- if(AGS_RECALL_ID(list->data)->recycling_context->parent == AGS_RECALL(copy_pattern_channel_run)->recall_id->recycling_context){
-@@ -481,6 +514,8 @@
- if(list == NULL){
- child_recall_id = NULL;
- }
-+
-+ pthread_mutex_unlock(link_mutex);
- }
-
- audio_signal = ags_audio_signal_new(AGS_RECALL(copy_pattern_audio)->soundcard,
---- a/ags/audio/recall/ags_count_beats_audio_run.c
-+++ b/ags/audio/recall/ags_count_beats_audio_run.c
-@@ -1446,38 +1446,87 @@
- }else{
- if(count_beats_audio_run->sequencer_counter >= (guint) loop_end - 1.0){
- AgsAudio *audio;
-+
-+ AgsMutexManager *mutex_manager;
-+
- GList *playback;
-
-+ pthread_mutex_t *application_mutex;
-+ pthread_mutex_t *audio_mutex;
-+
-+ audio = AGS_RECALL_AUDIO_RUN(count_beats_audio_run)->recall_audio->audio;
-+
-+ mutex_manager = ags_mutex_manager_get_instance();
-+ application_mutex = ags_mutex_manager_get_application_mutex(mutex_manager);
-+
-+ /* lookup audio mutex */
-+ pthread_mutex_lock(application_mutex);
-+
-+ audio_mutex = ags_mutex_manager_lookup(mutex_manager,
-+ audio);
-+
-+ pthread_mutex_unlock(application_mutex);
-+
-+ /* reset sequencer counter */
- count_beats_audio_run->sequencer_counter = 0;
-
-- audio = AGS_RECALL_AUDIO_RUN(count_beats_audio_run)->recall_audio->audio;
-+ /* get playback */
-+ pthread_mutex_lock(audio_mutex);
-+
- playback = AGS_PLAYBACK_DOMAIN(audio->playback_domain)->playback;
-
-+ pthread_mutex_unlock(audio_mutex);
-+
- /* emit stop signals */
- ags_count_beats_audio_run_sequencer_stop(count_beats_audio_run,
- FALSE);
-
- /* set done flag in soundcard play */
- while(playback != NULL){
-- if(AGS_PLAYBACK(playback->data)->recall_id[1] != NULL &&
-- AGS_PLAYBACK(playback->data)->recall_id[1]->recycling_context == AGS_RECALL(count_beats_audio_run)->recall_id->recycling_context){
-- AgsChannel *channel;
-+ AgsChannel *channel;
-+ AgsRecyclingContext *recycling_context;
-+
-+ pthread_mutex_lock(audio_mutex);
-+
-+ channel = audio->output;
-+
-+ if(AGS_PLAYBACK(playback->data)->recall_id[1] != NULL){
-+ recycling_context = AGS_PLAYBACK(playback->data)->recall_id[1]->recycling_context;
-+ }else{
-+ recycling_context = NULL;
-+ }
-+
-+ pthread_mutex_unlock(audio_mutex);
-+
-+ if(recycling_context == AGS_RECALL(count_beats_audio_run)->recall_id->recycling_context){
- AgsStreamChannelRun *stream_channel_run;
-+
- GList *list;
- GList *recall_recycling_list, *recall_audio_signal_list;
-+
- gboolean found;
-
-+ pthread_mutex_t *channel_mutex;
-+
- // AGS_PLAYBACK(playback->data)->flags |= AGS_PLAYBACK_DONE;
-
-+ /* lookup channel mutex */
-+ pthread_mutex_lock(application_mutex);
-+
-+ channel_mutex = ags_mutex_manager_lookup(mutex_manager,
-+ channel);
-+
-+ pthread_mutex_unlock(application_mutex);
-+
- /* check if to stop audio processing */
-- channel = audio->output;
- found = FALSE;
-
-+ pthread_mutex_lock(channel_mutex);
-+
- list = channel->play;
--
- list = ags_recall_find_type_with_recycling_context(list,
- AGS_TYPE_STREAM_CHANNEL_RUN,
-- (GObject *) AGS_RECALL(count_beats_audio_run)->recall_id->recycling_context);
-+ (GObject *) recycling_context);
-
- if(list != NULL){
- stream_channel_run = AGS_STREAM_CHANNEL_RUN(list->data);
-@@ -1500,6 +1549,8 @@
- }
- }
-
-+ pthread_mutex_unlock(channel_mutex);
-+
- /* stop audio processing*/
- if(!found){
- ags_count_beats_audio_run_stop(count_beats_audio_run,
-@@ -1509,7 +1560,12 @@
- break;
- }
-
-- playback = playback->next;
-+ /* iterate playback */
-+ pthread_mutex_lock(audio_mutex);
-+
-+ playback = playback->next;
-+
-+ pthread_mutex_unlock(audio_mutex);
- }
-
- return;
---- a/ags/audio/recall/ags_delay_audio_run.c
-+++ b/ags/audio/recall/ags_delay_audio_run.c
-@@ -26,6 +26,8 @@
- #include <ags/object/ags_soundcard.h>
- #include <ags/object/ags_plugin.h>
-
-+#include <ags/thread/ags_mutex_manager.h>
-+
- #include <ags/file/ags_file_stock.h>
- #include <ags/file/ags_file_id_ref.h>
- #include <ags/file/ags_file_lookup.h>
-@@ -441,16 +443,24 @@
- AgsDelayAudio *delay_audio;
- AgsDelayAudioRun *delay_audio_run;
-
-+ AgsMutexManager *mutex_manager;
-+
- gdouble notation_delay, sequencer_delay;
-+ gdouble delay;
-+ guint attack;
-
- GValue value = { 0, };
-
-+ pthread_mutex_t *application_mutex;
-+ pthread_mutex_t *soundcard_mutex;
-+
- AGS_RECALL_CLASS(ags_delay_audio_run_parent_class)->run_pre(recall);
-
- // g_message("ags_delay_audio_run_run_pre()\0");
-
- delay_audio_run = AGS_DELAY_AUDIO_RUN(recall);
-
-+ /* check done */
- if((AGS_RECALL_PERSISTENT & (recall->flags)) == 0 &&
- delay_audio_run->dependency_ref == 0){
- delay_audio_run->notation_counter = 0;
-@@ -463,6 +473,17 @@
-
- delay_audio = AGS_DELAY_AUDIO(AGS_RECALL_AUDIO_RUN(delay_audio_run)->recall_audio);
-
-+ mutex_manager = ags_mutex_manager_get_instance();
-+ application_mutex = ags_mutex_manager_get_application_mutex(mutex_manager);
-+
-+ /* lookup soundcard mutex */
-+ pthread_mutex_lock(application_mutex);
-+
-+ soundcard_mutex = ags_mutex_manager_lookup(mutex_manager,
-+ recall->soundcard);
-+
-+ pthread_mutex_unlock(application_mutex);
-+
- /* read notation-delay port */
- g_value_init(&value, G_TYPE_DOUBLE);
-
-@@ -489,22 +510,22 @@
- }else{
- delay_audio_run->sequencer_counter += 1;
- }
-+
-+ /* delay and attack */
-+ pthread_mutex_lock(soundcard_mutex);
-+
-+ attack = ags_soundcard_get_attack(AGS_SOUNDCARD(recall->soundcard));
-+
-+ pthread_mutex_unlock(soundcard_mutex);
-+
-+ delay = 0.0;
-
-+ /* notation */
- if(delay_audio_run->notation_counter == 0){
- guint run_order;
-- gdouble delay;
-- guint attack;
-
- run_order = 0; //NOTE:JK: old hide_ref style
-
-- /* delay and attack */
-- //TODO:JK: unclear
-- attack = ags_soundcard_get_attack(AGS_SOUNDCARD(recall->soundcard));
--
-- delay = 0.0; // soundcard->delay[((soundcard->tic_counter + 1 == AGS_NOTATION_TICS_PER_BEAT) ?
-- // 0:
-- // soundcard->tic_counter + 1)];
--
- // g_message("ags_delay_audio_run_run_pre@%llu: alloc notation[%u]\0",
- // delay_audio_run,
- // run_order);
-@@ -521,8 +542,6 @@
- delay, attack);
- }else{
- guint run_order;
-- gdouble delay;
-- guint attack;
-
- run_order = 0;
-
-@@ -541,17 +560,9 @@
- delay, attack);
- }
-
-+ /* sequencer */
- if(delay_audio_run->sequencer_counter == 0){
- guint run_order;
-- gdouble delay;
-- guint attack;
--
-- /* delay and attack */
-- //TODO:JK: unclear
-- attack = ags_soundcard_get_attack(AGS_SOUNDCARD(recall->soundcard));
-- delay = 0.0; // soundcard->delay[((soundcard->tic_counter + 1 == AGS_NOTATION_TICS_PER_BEAT) ?
-- // 0:
-- // soundcard->tic_counter + 1)];
-
- run_order = 0;
-
-@@ -572,8 +583,6 @@
- delay, attack);
- }else{
- guint run_order;
-- gdouble delay;
-- guint attack;
-
- run_order = 0;
-
---- a/ags/audio/recall/ags_play_audio_signal.c
-+++ b/ags/audio/recall/ags_play_audio_signal.c
-@@ -246,7 +246,7 @@
-
- play_audio_signal = AGS_PLAY_AUDIO_SIGNAL(recall);
-
-- soundcard = AGS_RECALL(play_audio_signal)->soundcard;
-+ soundcard = recall->soundcard;
- source = AGS_AUDIO_SIGNAL(AGS_RECALL_AUDIO_SIGNAL(play_audio_signal)->source);
- stream = source->stream_current;
-
---- a/ags/audio/recall/ags_record_midi_audio_run.c
-+++ b/ags/audio/recall/ags_record_midi_audio_run.c
-@@ -87,7 +87,7 @@
- * @section_id:
- * @include: ags/audio/recall/ags_record_midi_audio_run.h
- *
-- * The #AgsRecordMidiAudioRun class record midi.
-+ * The #AgsRecordMidiAudioRun does record midi.
- */
-
- enum{
-@@ -610,7 +610,7 @@
- AgsRecallID *recall_id,
- guint *n_params, GParameter *parameter)
- {
-- AgsRecordMidiAudioRun *copy, *record_midi_audio_run;
-+ AgsRecordMidiAudioRun *copy;
-
- copy = AGS_RECORD_MIDI_AUDIO_RUN(AGS_RECALL_CLASS(ags_record_midi_audio_run_parent_class)->duplicate(recall,
- recall_id,
-@@ -687,8 +687,10 @@
-
- glong division, tempo, bpm;
- guint notation_counter;
-+ gboolean reverse_mapping;
- gboolean pattern_mode;
- gboolean playback, record;
-+ guint midi_channel;
- guint audio_start_mapping;
- guint midi_start_mapping, midi_end_mapping;
- guint input_pads;
-@@ -703,22 +705,15 @@
- pthread_mutex_t *audio_mutex;
- pthread_mutex_t *channel_mutex;
-
-+ /* */
-+ mutex_manager = ags_mutex_manager_get_instance();
-+ application_mutex = ags_mutex_manager_get_application_mutex(mutex_manager);
-+
-+ /* get defaults */
- record_midi_audio_run = AGS_RECORD_MIDI_AUDIO_RUN(recall);
- record_midi_audio = AGS_RECORD_MIDI_AUDIO(AGS_RECALL_AUDIO_RUN(recall)->recall_audio);
-
-- delay_audio_run = record_midi_audio_run->delay_audio_run;
-- count_beats_audio_run = AGS_COUNT_BEATS_AUDIO_RUN(record_midi_audio_run->count_beats_audio_run);
--
- audio = AGS_RECALL_AUDIO(record_midi_audio)->audio;
-- sequencer = audio->sequencer;
--
-- if(sequencer == NULL){
-- return;
-- }
--
-- /* */
-- mutex_manager = ags_mutex_manager_get_instance();
-- application_mutex = ags_mutex_manager_get_application_mutex(mutex_manager);
-
- /* get audio mutex */
- pthread_mutex_lock(application_mutex);
-@@ -728,10 +723,29 @@
-
- pthread_mutex_unlock(application_mutex);
-
-+ /* */
-+ pthread_mutex_lock(audio_mutex);
-+
-+ delay_audio_run = record_midi_audio_run->delay_audio_run;
-+ count_beats_audio_run = AGS_COUNT_BEATS_AUDIO_RUN(record_midi_audio_run->count_beats_audio_run);
-+
-+ sequencer = audio->sequencer;
-+
-+ pthread_mutex_unlock(audio_mutex);
-+
-+ if(sequencer == NULL){
-+ return;
-+ }
-+
- /* get audio fields */
- pthread_mutex_lock(audio_mutex);
-
-+ reverse_mapping = ((AGS_AUDIO_REVERSE_MAPPING & (audio->flags)) != 0) ? TRUE: FALSE;
-+
- pattern_mode = ((AGS_AUDIO_PATTERN_MODE & (audio->flags)) != 0) ? TRUE: FALSE;
-+
-+ midi_channel = audio->midi_channel;
-+
- audio_start_mapping = audio->audio_start_mapping;
-
- midi_start_mapping = audio->midi_start_mapping;
-@@ -785,10 +799,10 @@
- notation = NULL;
- }
-
-- pthread_mutex_unlock(audio_mutex);
--
- /* */
- notation_counter = count_beats_audio_run->notation_counter;
-+
-+ pthread_mutex_unlock(audio_mutex);
-
- /* get mode */
- g_value_init(&value,
-@@ -852,18 +866,20 @@
- AgsNote *current_note;
-
- /* key on - check within mapping */
-- if(audio->midi_channel == (0x0f & midi_iter[0])){
-+ if(midi_channel == (0x0f & midi_iter[0])){
- if(midi_start_mapping <= (0x7f & midi_iter[1]) &&
-- (((AGS_AUDIO_REVERSE_MAPPING & (audio->flags)) != 0 &&
-+ ((reverse_mapping &&
- input_pads - ((0x7f & midi_iter[1]) - midi_start_mapping) - 1 > 0) ||
-- ((AGS_AUDIO_REVERSE_MAPPING & (audio->flags)) == 0 &&
-+ (!reverse_mapping &&
- (0x7f & midi_iter[1]) - midi_start_mapping < midi_end_mapping))){
- current_note = NULL;
- note = record_midi_audio_run->note;
-
-+ pthread_mutex_lock(audio_mutex);
-+
- while(note != NULL){
- /* check current notes */
-- if((AGS_AUDIO_REVERSE_MAPPING & (audio->flags)) != 0){
-+ if(reverse_mapping){
- if(AGS_NOTE(note->data)->y == input_pads - ((0x7f & midi_iter[1]) - midi_start_mapping) - 1){
- current_note = note->data;
-
-@@ -879,7 +895,9 @@
-
- note = note->next;
- }
--
-+
-+ pthread_mutex_unlock(audio_mutex);
-+
- /* add note */
- if(current_note == NULL){
- if((0x7f & (midi_iter[2])) != 0){
-@@ -888,7 +906,7 @@
- current_note->x[0] = notation_counter;
- current_note->x[1] = notation_counter + 1;
-
-- if((AGS_AUDIO_REVERSE_MAPPING & (audio->flags)) != 0){
-+ if(reverse_mapping){
- current_note->y = input_pads - ((0x7f & midi_iter[1]) - midi_start_mapping) - 1;
- }else{
- current_note->y = (0x7f & midi_iter[1]) - midi_start_mapping;
-@@ -946,10 +964,12 @@
- /* key off - find matching note */
- current_note = NULL;
- note = record_midi_audio_run->note;
--
-+
-+ pthread_mutex_lock(audio_mutex);
-+
- while(note != NULL){
- /* check current notes */
-- if((AGS_AUDIO_REVERSE_MAPPING & (audio->flags)) != 0){
-+ if(reverse_mapping){
- if(AGS_NOTE(note->data)->y == input_pads - ((0x7f & midi_iter[1]) - midi_start_mapping) - 1){
- current_note = note->data;
-
-@@ -965,7 +985,9 @@
-
- note = note->next;
- }
--
-+
-+ pthread_mutex_unlock(audio_mutex);
-+
- /* remove current note */
- if(current_note != NULL){
- pthread_mutex_lock(audio_mutex);
-@@ -992,9 +1014,11 @@
- current_note = NULL;
- note = record_midi_audio_run->note;
-
-+ pthread_mutex_lock(audio_mutex);
-+
- while(note != NULL){
- /* check current notes */
-- if((AGS_AUDIO_REVERSE_MAPPING & (audio->flags)) != 0){
-+ if(reverse_mapping){
- if(AGS_NOTE(note->data)->y == input_pads - ((0x7f & midi_iter[1]) - midi_start_mapping) - 1){
- current_note = note->data;
-
-@@ -1010,7 +1034,9 @@
-
- note = note->next;
- }
--
-+
-+ pthread_mutex_unlock(audio_mutex);
-+
- /* feed note */
- if(current_note != NULL){
- current_note->x[1] = notation_counter + 1;
-@@ -1116,6 +1142,7 @@
- }
- }
-
-+ /* call parent */
- AGS_RECALL_CLASS(ags_record_midi_audio_run_parent_class)->run_pre(recall);
- }
-
---- /dev/null
-+++ b/ags/audio/task/ags_clear_buffer.c
-@@ -0,0 +1,379 @@
-+/* GSequencer - Advanced GTK Sequencer
-+ * Copyright (C) 2005-2015 Joël Krähemann
-+ *
-+ * This file is part of GSequencer.
-+ *
-+ * GSequencer is free software: you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License as published by
-+ * the Free Software Foundation, either version 3 of the License, or
-+ * (at your option) any later version.
-+ *
-+ * GSequencer is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+ * GNU General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU General Public License
-+ * along with GSequencer. If not, see <http://www.gnu.org/licenses/>.
-+ */
-+
-+#include <ags/audio/task/ags_clear_buffer.h>
-+
-+#include <ags/object/ags_connectable.h>
-+#include <ags/object/ags_soundcard.h>
-+
-+#include <ags/audio/ags_devout.h>
-+#include <ags/audio/ags_midiin.h>
-+
-+#include <ags/audio/jack/ags_jack_devout.h>
-+#include <ags/audio/jack/ags_jack_midiin.h>
-+
-+void ags_clear_buffer_class_init(AgsClearBufferClass *clear_buffer);
-+void ags_clear_buffer_connectable_interface_init(AgsConnectableInterface *connectable);
-+void ags_clear_buffer_init(AgsClearBuffer *clear_buffer);
-+void ags_clear_buffer_set_property(GObject *gobject,
-+ guint prop_id,
-+ const GValue *value,
-+ GParamSpec *param_spec);
-+void ags_clear_buffer_get_property(GObject *gobject,
-+ guint prop_id,
-+ GValue *value,
-+ GParamSpec *param_spec);
-+void ags_clear_buffer_connect(AgsConnectable *connectable);
-+void ags_clear_buffer_disconnect(AgsConnectable *connectable);
-+void ags_clear_buffer_finalize(GObject *gobject);
-+
-+void ags_clear_buffer_launch(AgsTask *task);
-+
-+/**
-+ * SECTION:ags_clear_buffer
-+ * @short_description: switch buffer flag of device
-+ * @title: AgsClearBuffer
-+ * @section_id:
-+ * @include: ags/audio/task/ags_clear_buffer.h
-+ *
-+ * The #AgsClearBuffer task switches the buffer flag of device.
-+ */
-+
-+static gpointer ags_clear_buffer_parent_class = NULL;
-+static AgsConnectableInterface *ags_clear_buffer_parent_connectable_interface;
-+
-+enum{
-+ PROP_0,
-+ PROP_DEVICE,
-+};
-+
-+GType
-+ags_clear_buffer_get_type()
-+{
-+ static GType ags_type_clear_buffer = 0;
-+
-+ if(!ags_type_clear_buffer){
-+ static const GTypeInfo ags_clear_buffer_info = {
-+ sizeof (AgsClearBufferClass),
-+ NULL, /* base_init */
-+ NULL, /* base_finalize */
-+ (GClassInitFunc) ags_clear_buffer_class_init,
-+ NULL, /* class_finalize */
-+ NULL, /* class_data */
-+ sizeof (AgsClearBuffer),
-+ 0, /* n_preallocs */
-+ (GInstanceInitFunc) ags_clear_buffer_init,
-+ };
-+
-+ static const GInterfaceInfo ags_connectable_interface_info = {
-+ (GInterfaceInitFunc) ags_clear_buffer_connectable_interface_init,
-+ NULL, /* interface_finalize */
-+ NULL, /* interface_data */
-+ };
-+
-+ ags_type_clear_buffer = g_type_register_static(AGS_TYPE_TASK,
-+ "AgsClearBuffer\0",
-+ &ags_clear_buffer_info,
-+ 0);
-+
-+ g_type_add_interface_static(ags_type_clear_buffer,
-+ AGS_TYPE_CONNECTABLE,
-+ &ags_connectable_interface_info);
-+ }
-+
-+ return (ags_type_clear_buffer);
-+}
-+
-+void
-+ags_clear_buffer_class_init(AgsClearBufferClass *clear_buffer)
-+{
-+ GObjectClass *gobject;
-+ AgsTaskClass *task;
-+ GParamSpec *param_spec;
-+
-+ ags_clear_buffer_parent_class = g_type_class_peek_parent(clear_buffer);
-+
-+ /* gobject */
-+ gobject = (GObjectClass *) clear_buffer;
-+
-+ gobject->set_property = ags_clear_buffer_set_property;
-+ gobject->get_property = ags_clear_buffer_get_property;
-+
-+ gobject->finalize = ags_clear_buffer_finalize;
-+
-+ /* properties */
-+ /**
-+ * AgsClearBuffer:device:
-+ *
-+ * The assigned #AgsSoundcard or #AgsSequencer
-+ *
-+ * Since: 0.7.124
-+ */
-+ param_spec = g_param_spec_object("device\0",
-+ "device of change device\0",
-+ "The device of change device task\0",
-+ G_TYPE_OBJECT,
-+ G_PARAM_READABLE | G_PARAM_WRITABLE);
-+ g_object_class_install_property(gobject,
-+ PROP_DEVICE,
-+ param_spec);
-+
-+ /* task */
-+ task = (AgsTaskClass *) clear_buffer;
-+
-+ task->launch = ags_clear_buffer_launch;
-+}
-+
-+void
-+ags_clear_buffer_connectable_interface_init(AgsConnectableInterface *connectable)
-+{
-+ ags_clear_buffer_parent_connectable_interface = g_type_interface_peek_parent(connectable);
-+
-+ connectable->connect = ags_clear_buffer_connect;
-+ connectable->disconnect = ags_clear_buffer_disconnect;
-+}
-+
-+void
-+ags_clear_buffer_init(AgsClearBuffer *clear_buffer)
-+{
-+ clear_buffer->device = NULL;
-+}
-+
-+void
-+ags_clear_buffer_set_property(GObject *gobject,
-+ guint prop_id,
-+ const GValue *value,
-+ GParamSpec *param_spec)
-+{
-+ AgsClearBuffer *clear_buffer;
-+
-+ clear_buffer = AGS_CLEAR_BUFFER(gobject);
-+
-+ switch(prop_id){
-+ case PROP_DEVICE:
-+ {
-+ GObject *device;
-+
-+ device = (GObject *) g_value_get_object(value);
-+
-+ if(clear_buffer->device == (GObject *) device){
-+ return;
-+ }
-+
-+ if(clear_buffer->device != NULL){
-+ g_object_unref(clear_buffer->device);
-+ }
-+
-+ if(device != NULL){
-+ g_object_ref(device);
-+ }
-+
-+ clear_buffer->device = (GObject *) device;
-+ }
-+ break;
-+ default:
-+ G_OBJECT_WARN_INVALID_PROPERTY_ID(gobject, prop_id, param_spec);
-+ break;
-+ }
-+}
-+
-+void
-+ags_clear_buffer_get_property(GObject *gobject,
-+ guint prop_id,
-+ GValue *value,
-+ GParamSpec *param_spec)
-+{
-+ AgsClearBuffer *clear_buffer;
-+
-+ clear_buffer = AGS_CLEAR_BUFFER(gobject);
-+
-+ switch(prop_id){
-+ case PROP_DEVICE:
-+ {
-+ g_value_set_object(value, clear_buffer->device);
-+ }
-+ break;
-+ default:
-+ G_OBJECT_WARN_INVALID_PROPERTY_ID(gobject, prop_id, param_spec);
-+ break;
-+ }
-+}
-+
-+void
-+ags_clear_buffer_connect(AgsConnectable *connectable)
-+{
-+ ags_clear_buffer_parent_connectable_interface->connect(connectable);
-+
-+ /* empty */
-+}
-+
-+void
-+ags_clear_buffer_disconnect(AgsConnectable *connectable)
-+{
-+ ags_clear_buffer_parent_connectable_interface->disconnect(connectable);
-+
-+ /* empty */
-+}
-+
-+void
-+ags_clear_buffer_finalize(GObject *gobject)
-+{
-+ G_OBJECT_CLASS(ags_clear_buffer_parent_class)->finalize(gobject);
-+
-+ /* empty */
-+}
-+
-+void
-+ags_clear_buffer_launch(AgsTask *task)
-+{
-+ AgsClearBuffer *clear_buffer;
-+
-+ guint nth_buffer;
-+ guint word_size;
-+
-+ clear_buffer = AGS_CLEAR_BUFFER(task);
-+
-+ if(AGS_IS_DEVOUT(clear_buffer->device)){
-+ AgsDevout *devout;
-+
-+ devout = clear_buffer->device;
-+
-+ /* retrieve word size */
-+ switch(devout->format){
-+ case AGS_SOUNDCARD_SIGNED_8_BIT:
-+ {
-+ word_size = sizeof(signed char);
-+ }
-+ break;
-+ case AGS_SOUNDCARD_SIGNED_16_BIT:
-+ {
-+ word_size = sizeof(signed short);
-+ }
-+ break;
-+ case AGS_SOUNDCARD_SIGNED_24_BIT:
-+ {
-+ word_size = sizeof(signed long);
-+ }
-+ break;
-+ case AGS_SOUNDCARD_SIGNED_32_BIT:
-+ {
-+ word_size = sizeof(signed long);
-+ }
-+ break;
-+ case AGS_SOUNDCARD_SIGNED_64_BIT:
-+ {
-+ word_size = sizeof(signed long long);
-+ }
-+ break;
-+ default:
-+ g_warning("ags_clear_buffer_launch(): unsupported word size\0");
-+
-+ return;
-+ }
-+
-+
-+ if((AGS_DEVOUT_BUFFER0 & (devout->flags)) != 0){
-+ nth_buffer = 0;
-+ }else if((AGS_DEVOUT_BUFFER1 & (devout->flags)) != 0){
-+ nth_buffer = 1;
-+ }else if((AGS_DEVOUT_BUFFER2 & (devout->flags)) != 0){
-+ nth_buffer = 2;
-+ }else if((AGS_DEVOUT_BUFFER3 & devout->flags) != 0){
-+ nth_buffer = 3;
-+ }
-+
-+ memset(devout->buffer[nth_buffer], 0, (size_t) devout->pcm_channels * devout->buffer_size * word_size);
-+ }else if(AGS_IS_JACK_DEVOUT(clear_buffer->device)){
-+ AgsJackDevout *jack_devout;
-+
-+ jack_devout = clear_buffer->device;
-+
-+ switch(jack_devout->format){
-+ case AGS_SOUNDCARD_SIGNED_8_BIT:
-+ {
-+ word_size = sizeof(signed char);
-+ }
-+ break;
-+ case AGS_SOUNDCARD_SIGNED_16_BIT:
-+ {
-+ word_size = sizeof(signed short);
-+ }
-+ break;
-+ case AGS_SOUNDCARD_SIGNED_24_BIT:
-+ {
-+ //NOTE:JK: The 24-bit linear samples use 32-bit physical space
-+ word_size = sizeof(signed long);
-+ }
-+ break;
-+ case AGS_SOUNDCARD_SIGNED_32_BIT:
-+ {
-+ word_size = sizeof(signed long);
-+ }
-+ break;
-+ case AGS_SOUNDCARD_SIGNED_64_BIT:
-+ {
-+ word_size = sizeof(signed long long);
-+ }
-+ break;
-+ default:
-+ g_warning("ags_clear_buffer_launch(): unsupported word size\0");
-+
-+ return;
-+ }
-+
-+ if((AGS_JACK_DEVOUT_BUFFER0 & (jack_devout->flags)) != 0){
-+ nth_buffer = 3;
-+ }else if((AGS_JACK_DEVOUT_BUFFER1 & (jack_devout->flags)) != 0){
-+ nth_buffer = 0;
-+ }else if((AGS_JACK_DEVOUT_BUFFER2 & (jack_devout->flags)) != 0){
-+ nth_buffer = 1;
-+ }else if((AGS_JACK_DEVOUT_BUFFER3 & jack_devout->flags) != 0){
-+ nth_buffer = 2;
-+ }
-+
-+ memset(jack_devout->buffer[nth_buffer], 0, (size_t) jack_devout->pcm_channels * jack_devout->buffer_size * word_size);
-+ }else if(AGS_IS_MIDIIN(clear_buffer->device)){
-+ //TODO:JK: implement me
-+ }else if(AGS_IS_JACK_MIDIIN(clear_buffer->device)){
-+ //TODO:JK: implement me
-+ }
-+}
-+
-+/**
-+ * ags_clear_buffer_new:
-+ * @device: the #AgsSoundcard or #AgsSequencer
-+ *
-+ * Creates an #AgsClearBuffer.
-+ *
-+ * Returns: an new #AgsClearBuffer.
-+ *
-+ * Since: 0.7.124
-+ */
-+AgsClearBuffer*
-+ags_clear_buffer_new(GObject *device)
-+{
-+ AgsClearBuffer *clear_buffer;
-+
-+ clear_buffer = (AgsClearBuffer *) g_object_new(AGS_TYPE_CLEAR_BUFFER,
-+ NULL);
-+
-+ clear_buffer->device = device;
-+
-+ return(clear_buffer);
-+}
---- /dev/null
-+++ b/ags/audio/task/ags_clear_buffer.h
-@@ -0,0 +1,54 @@
-+/* GSequencer - Advanced GTK Sequencer
-+ * Copyright (C) 2005-2015 Joël Krähemann
-+ *
-+ * This file is part of GSequencer.
-+ *
-+ * GSequencer is free software: you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License as published by
-+ * the Free Software Foundation, either version 3 of the License, or
-+ * (at your option) any later version.
-+ *
-+ * GSequencer is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+ * GNU General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU General Public License
-+ * along with GSequencer. If not, see <http://www.gnu.org/licenses/>.
-+ */
-+
-+#ifndef __AGS_CLEAR_BUFFER_H__
-+#define __AGS_CLEAR_BUFFER_H__
-+
-+#include <glib.h>
-+#include <glib-object.h>
-+
-+#include <ags/thread/ags_task.h>
-+
-+#define AGS_TYPE_CLEAR_BUFFER (ags_clear_buffer_get_type())
-+#define AGS_CLEAR_BUFFER(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), AGS_TYPE_CLEAR_BUFFER, AgsClearBuffer))
-+#define AGS_CLEAR_BUFFER_CLASS(class) (G_TYPE_CHECK_CLASS_CAST((class), AGS_TYPE_CLEAR_BUFFER, AgsClearBufferClass))
-+#define AGS_IS_CLEAR_BUFFER(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), AGS_TYPE_CLEAR_BUFFER))
-+#define AGS_IS_CLEAR_BUFFER_CLASS(class) (G_TYPE_CHECK_CLASS_TYPE((class), AGS_TYPE_CLEAR_BUFFER))
-+#define AGS_CLEAR_BUFFER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS((obj), AGS_TYPE_CLEAR_BUFFER, AgsClearBufferClass))
-+
-+typedef struct _AgsClearBuffer AgsClearBuffer;
-+typedef struct _AgsClearBufferClass AgsClearBufferClass;
-+
-+struct _AgsClearBuffer
-+{
-+ AgsTask task;
-+
-+ GObject *device;
-+};
-+
-+struct _AgsClearBufferClass
-+{
-+ AgsTaskClass task;
-+};
-+
-+GType ags_clear_buffer_get_type();
-+
-+AgsClearBuffer* ags_clear_buffer_new(GObject *device);
-+
-+#endif /*__AGS_CLEAR_BUFFER_H__*/
---- a/ags/audio/thread/ags_audio_loop.c
-+++ b/ags/audio/thread/ags_audio_loop.c
-@@ -294,9 +294,6 @@
- mutex_manager = ags_mutex_manager_get_instance();
- application_mutex = ags_mutex_manager_get_application_mutex(mutex_manager);
-
-- // g_atomic_int_or(&(thread->flags),
-- // AGS_THREAD_TIMING);
--
- // thread->flags |= AGS_THREAD_WAIT_FOR_CHILDREN;
- pthread_mutex_lock(application_mutex);
-
-@@ -624,8 +621,8 @@
- /* */
- AGS_THREAD_CLASS(ags_audio_loop_parent_class)->start(thread);
-
-- pthread_create(audio_loop->timing_thread, NULL,
-- ags_audio_loop_timing_thread, audio_loop);
-+ // pthread_create(audio_loop->timing_thread, NULL,
-+ // ags_audio_loop_timing_thread, audio_loop);
- }
- }
-
-@@ -832,9 +829,9 @@
-
- g_atomic_int_set(&(audio_loop->time_spent),
- audio_loop->time_cycle);
-- ags_main_loop_interrupt(AGS_MAIN_LOOP(thread),
-- AGS_THREAD_SUSPEND_SIG,
-- audio_loop->time_cycle, &time_spent);
-+ // ags_main_loop_interrupt(AGS_MAIN_LOOP(thread),
-+ // AGS_THREAD_SUSPEND_SIG,
-+ // audio_loop->time_cycle, &time_spent);
-
- // g_message("inter\0");
- }
---- a/ags/audio/thread/ags_export_thread.c
-+++ b/ags/audio/thread/ags_export_thread.c
-@@ -365,9 +365,9 @@
- ags_export_thread_run(AgsThread *thread)
- {
- AgsExportThread *export_thread;
-- AgsSoundcard *soundcard;
-
- AgsMutexManager *mutex_manager;
-+ AgsSoundcard *soundcard;
-
- void *soundcard_buffer;
-
---- a/ags/audio/thread/ags_soundcard_thread.c
-+++ b/ags/audio/thread/ags_soundcard_thread.c
-@@ -24,6 +24,7 @@
- #include <ags/object/ags_connectable.h>
- #include <ags/object/ags_main_loop.h>
-
-+#include <ags/thread/ags_mutex_manager.h>
- #include <ags/thread/ags_polling_thread.h>
- #include <ags/thread/ags_poll_fd.h>
- #include <ags/thread/ags_timestamp_thread.h>
-@@ -179,6 +180,9 @@
- (AGS_THREAD_START_SYNCED_FREQ |
- AGS_THREAD_INTERMEDIATE_POST_SYNC));
-
-+ // g_atomic_int_or(&(thread->flags),
-+ // AGS_THREAD_TIMING);
-+
- config = ags_config_get_instance();
-
- str0 = ags_config_get_value(config,
-@@ -382,10 +386,19 @@
-
- while(poll_fd != NULL){
- if(polling_thread != NULL){
-+ gint position;
-+
- ags_polling_thread_add_poll_fd(polling_thread,
- poll_fd->data);
- g_signal_connect(G_OBJECT(poll_fd->data), "dispatch\0",
- G_CALLBACK(ags_soundcard_thread_dispatch_callback), soundcard_thread);
-+
-+ position = ags_polling_thread_fd_position(polling_thread,
-+ AGS_POLL_FD(poll_fd->data)->fd);
-+
-+ if(position != -1){
-+ polling_thread->fds[position].events = POLLOUT;
-+ }
- }
-
- poll_fd = poll_fd->next;
-@@ -401,18 +414,33 @@
- {
- AgsSoundcardThread *soundcard_thread;
-
-+ AgsMutexManager *mutex_manager;
- AgsSoundcard *soundcard;
-
- GList *poll_fd;
-
-- long delay;
-+ gboolean is_playing;
-
- GError *error;
-
-+ pthread_mutex_t *application_mutex;
-+ pthread_mutex_t *mutex;
-+
- soundcard_thread = AGS_SOUNDCARD_THREAD(thread);
-
- soundcard = AGS_SOUNDCARD(soundcard_thread->soundcard);
--
-+
-+ /* */
-+ mutex_manager = ags_mutex_manager_get_instance();
-+ application_mutex = ags_mutex_manager_get_application_mutex(mutex_manager);
-+
-+ pthread_mutex_lock(application_mutex);
-+
-+ mutex = ags_mutex_manager_lookup(mutex_manager,
-+ (GObject *) soundcard_thread->soundcard);
-+
-+ pthread_mutex_unlock(application_mutex);
-+
- /* real-time setup */
- if((AGS_THREAD_RT_SETUP & (g_atomic_int_get(&(thread->flags)))) == 0){
- struct sched_param param;
-@@ -428,7 +456,14 @@
- AGS_THREAD_RT_SETUP);
- }
-
-- if(ags_soundcard_is_playing(soundcard)){
-+ /* playback */
-+ pthread_mutex_lock(mutex);
-+
-+ is_playing = ags_soundcard_is_playing(soundcard);
-+
-+ pthread_mutex_unlock(mutex);
-+
-+ if(is_playing){
- error = NULL;
- ags_soundcard_play(soundcard,
- &error);
-@@ -447,9 +482,15 @@
- {
- AgsSoundcardThread *soundcard_thread;
-
-- AgsSoundcard *soundcard;
-+ AgsThread *main_loop;
-+ AgsPollingThread *polling_thread;
-
-+ AgsSoundcard *soundcard;
-+
-+ GList *poll_fd;
-+
- soundcard_thread = AGS_SOUNDCARD_THREAD(thread);
-+ main_loop = ags_thread_get_toplevel(thread);
-
- soundcard = AGS_SOUNDCARD(soundcard_thread->soundcard);
-
-@@ -458,6 +499,24 @@
-
- //FIXME:JK: is this safe?
- ags_soundcard_stop(soundcard);
-+
-+ /* find polling thread */
-+ polling_thread = (AgsPollingThread *) ags_thread_find_type(main_loop,
-+ AGS_TYPE_POLLING_THREAD);
-+
-+ /* remove poll fd */
-+ poll_fd = ags_soundcard_get_poll_fd(soundcard);
-+
-+ while(poll_fd != NULL){
-+ if(polling_thread != NULL){
-+ gint position;
-+
-+ ags_polling_thread_remove_poll_fd(polling_thread,
-+ poll_fd->data);
-+ }
-+
-+ poll_fd = poll_fd->next;
-+ }
- }
-
- void
-@@ -478,9 +537,9 @@
-
- pthread_mutex_unlock(audio_loop->timing_mutex);
-
-- ags_main_loop_interrupt(AGS_MAIN_LOOP(audio_loop),
-- AGS_THREAD_SUSPEND_SIG,
-- 0, &time_spent);
-+ // ags_main_loop_interrupt(AGS_MAIN_LOOP(audio_loop),
-+ // AGS_THREAD_SUSPEND_SIG,
-+ // 0, &time_spent);
-
- if(poll_fd->polling_thread != NULL){
- poll_fd->polling_thread->flags |= AGS_POLLING_THREAD_OMIT;
---- a/ags/gsequencer_main.c
-+++ b/ags/gsequencer_main.c
-@@ -21,6 +21,7 @@
- #include <glib-object.h>
-
- #include <gdk/gdk.h>
-+#include <pango/pangocairo.h>
-
- #include <X11/Xlib.h>
-
-@@ -164,10 +165,11 @@
- {
- GtkWidget *window;
- GdkRectangle rectangle;
--
-- cairo_t *cr;
-+
-+ cairo_t *gdk_cr, *cr;
- cairo_surface_t *surface;
--
-+ cairo_surface_t *cached_surface;
-+
- AgsLog *log;
-
- gchar *filename;
-@@ -187,21 +189,24 @@
- rectangle.width = 800;
- rectangle.height = 450;
-
-- cr = gdk_cairo_create(window->window);
-+ gdk_cr = gdk_cairo_create(window->window);
-
- filename = g_strdup_printf("%s%s\0", DESTDIR, "/gsequencer/images/ags_supermoon-800x450.png\0");
-
- surface = cairo_image_surface_create_from_png(filename);
-+ cr = cairo_create(surface);
-
- cairo_select_font_face(cr, "Georgia\0",
- CAIRO_FONT_SLANT_NORMAL, CAIRO_FONT_WEIGHT_NORMAL);
- cairo_set_font_size(cr, (gdouble) 11.0);
--
-+
- gdk_window_show(window->window);
-
- gdk_threads_leave();
-
-- log = ags_log_get_instance();
-+ cached_surface = NULL;
-+
-+ log = ags_log_get_instance();
- nth = 0;
-
- while(g_atomic_int_get(&(ags_show_start_animation))){
-@@ -226,8 +231,9 @@
-
- cairo_move_to(cr,
- x0, y0);
-+
- cairo_show_text(cr, list->data);
--
-+
- list = list->next;
- y0 -= 12.0;
- }
-@@ -235,10 +241,14 @@
- cairo_move_to(cr,
- x0, 4.0 + (i + 1) * 12.0);
- cairo_show_text(cr, "...\0");
--
-- gdk_flush();
-+
- nth = g_list_length(start);
-- }
-+ }
-+
-+ cairo_set_source_surface(gdk_cr, surface, 0, 0);
-+ cairo_paint(gdk_cr);
-+ cairo_surface_flush(surface);
-+ gdk_flush();
- }
-
- gdk_threads_enter();
-@@ -424,6 +434,8 @@
- ags_application_context->argc = argc;
- ags_application_context->argv = argv;
-
-+ ags_application_context_register_types(ags_application_context);
-+
- /* fix cross-references in managers */
- lv2_worker_manager->thread_pool = ((AgsXorgApplicationContext *) ags_application_context)->thread_pool;
-
---- a/ags/thread/ags_polling_thread.c
-+++ b/ags/thread/ags_polling_thread.c
-@@ -300,10 +300,10 @@
- ags_poll_fd_dispatch(list->data);
-
- AGS_POLL_FD(list->data)->flags &= (~(AGS_POLL_FD_INPUT |
-+ AGS_POLL_FD_PRIORITY_INPUT |
- AGS_POLL_FD_OUTPUT |
- AGS_POLL_FD_HANG_UP));
-- AGS_POLL_FD(list->data)->poll_fd->revents = 0;
--
-+
- AGS_POLL_FD(list->data)->delay_counter = 0.0;
- }else{
- AGS_POLL_FD(list->data)->delay_counter += 1.0;
---- a/ags/thread/ags_thread-posix.c
-+++ b/ags/thread/ags_thread-posix.c
-@@ -2288,6 +2288,7 @@
-
- chaos_tree = ags_thread_chaos_tree(thread);
-
-+ //FIXME:JK: it works but I think its wrong
- /* set tic delay */
- if((AGS_THREAD_INTERMEDIATE_PRE_SYNC & (g_atomic_int_get(&(thread->flags)))) != 0){
- /* intermediate pre sync */
-@@ -2298,10 +2299,12 @@
- }
- }else if((AGS_THREAD_INTERMEDIATE_POST_SYNC & (g_atomic_int_get(&(thread->flags)))) != 0){
- /* intermediate post sync */
-- if(chaos_tree->tic_delay < thread->delay){
-- thread->tic_delay = chaos_tree->tic_delay + 1;
-- }else{
-+ if(chaos_tree->tic_delay + 1 < thread->delay){
-+ thread->tic_delay = chaos_tree->tic_delay + 2;
-+ }else if(chaos_tree->tic_delay + 1 == thread->delay){
- thread->tic_delay = 0;
-+ }else{
-+ thread->tic_delay = 1;
- }
- }else{
- /* ordinary sync */
-@@ -2523,48 +2526,46 @@
- pthread_mutex_unlock(thread->timer_mutex);
- }
- #else
-- if(g_atomic_pointer_get(&(thread->parent)) == NULL){
-+ if(thread->tic_delay == thread->delay &&
-+ (AGS_THREAD_TIMING & (g_atomic_int_get(&(thread->flags)))) != 0){
- gdouble time_spent, relative_time_spent;
- gdouble time_cycle;
-
- static const gdouble nsec_per_jiffie = NSEC_PER_SEC / AGS_THREAD_HERTZ_JIFFIE;
-
-- if(thread->tic_delay == thread->delay &&
-- (AGS_THREAD_TIMING & (g_atomic_int_get(&(thread->flags)))) != 0){
-- struct timespec timed_sleep = {
-- 0,
-- 0,
-- };
-+ struct timespec timed_sleep = {
-+ 0,
-+ 0,
-+ };
-
-- clock_gettime(CLOCK_MONOTONIC, &time_now);
-+ clock_gettime(CLOCK_MONOTONIC, &time_now);
-
-- if(time_now.tv_sec == thread->computing_time->tv_sec + 1){
-- time_spent = (time_now.tv_nsec) + (NSEC_PER_SEC - thread->computing_time->tv_nsec);
-- }else if(time_now.tv_sec > thread->computing_time->tv_sec + 1){
-- time_spent = (time_now.tv_sec - thread->computing_time->tv_sec) * NSEC_PER_SEC;
-- time_spent += (time_now.tv_nsec - thread->computing_time->tv_nsec);
-- }else{
-- time_spent = time_now.tv_nsec - thread->computing_time->tv_nsec;
-- }
-+ if(time_now.tv_sec == thread->computing_time->tv_sec + 1){
-+ time_spent = (time_now.tv_nsec) + (NSEC_PER_SEC - thread->computing_time->tv_nsec);
-+ }else if(time_now.tv_sec > thread->computing_time->tv_sec + 1){
-+ time_spent = (time_now.tv_sec - thread->computing_time->tv_sec) * NSEC_PER_SEC;
-+ time_spent += (time_now.tv_nsec - thread->computing_time->tv_nsec);
-+ }else{
-+ time_spent = time_now.tv_nsec - thread->computing_time->tv_nsec;
-+ }
-
-- time_cycle = NSEC_PER_SEC / thread->freq;
-+ time_cycle = NSEC_PER_SEC / thread->freq;
-
-- relative_time_spent = time_cycle - time_spent - g_atomic_int_get(&(thread->time_late)) - AGS_THREAD_TOLERANCE;
-+ relative_time_spent = time_cycle - time_spent - g_atomic_int_get(&(thread->time_late)) - AGS_THREAD_TOLERANCE;
-
-- if(relative_time_spent < 0.0){
-- g_atomic_int_set(&(thread->time_late),
-- (guint) ceil(-1.25 * relative_time_spent));
-- }else if(relative_time_spent > 0.0 &&
-- relative_time_spent < time_cycle){
-- g_atomic_int_set(&(thread->time_late),
-- 0);
-- timed_sleep.tv_nsec = (long) relative_time_spent - (1.0 / 45.0) * time_cycle;
-+ if(relative_time_spent < 0.0){
-+ g_atomic_int_set(&(thread->time_late),
-+ (guint) ceil(-1.25 * relative_time_spent));
-+ }else if(relative_time_spent > 0.0 &&
-+ relative_time_spent < time_cycle){
-+ g_atomic_int_set(&(thread->time_late),
-+ 0);
-+ timed_sleep.tv_nsec = (long) relative_time_spent - (1.0 / 45.0) * time_cycle;
-
-- nanosleep(&timed_sleep, NULL);
-- }
--
-- clock_gettime(CLOCK_MONOTONIC, thread->computing_time);
-+ nanosleep(&timed_sleep, NULL);
- }
-+
-+ clock_gettime(CLOCK_MONOTONIC, thread->computing_time);
- }
- #endif
-
---- a/ags/widget/ags_hindicator.h
-+++ b/ags/widget/ags_hindicator.h
-@@ -22,6 +22,7 @@
-
- #include <glib.h>
- #include <glib-object.h>
-+
- #include <gtk/gtk.h>
-
- #include "ags_indicator.h"
-@@ -43,7 +44,7 @@
-
- struct _AgsHIndicatorClass
- {
-- GtkWidgetClass indicator;
-+ AgsIndicatorClass indicator;
- };
-
- GType ags_hindicator_get_type(void);
---- a/ags/widget/ags_vindicator.h
-+++ b/ags/widget/ags_vindicator.h
-@@ -22,6 +22,7 @@
-
- #include <glib.h>
- #include <glib-object.h>
-+
- #include <gtk/gtk.h>
-
- #include "ags_indicator.h"
-@@ -43,7 +44,7 @@
-
- struct _AgsVIndicatorClass
- {
-- GtkWidgetClass indicator;
-+ AgsIndicatorClass indicator;
- };
-
- GType ags_vindicator_get_type(void);
diff --git a/debian/patches/fix-generated-symbols.patch b/debian/patches/fix-generated-symbols.patch
deleted file mode 100644
index 24ece7f..0000000
--- a/debian/patches/fix-generated-symbols.patch
+++ /dev/null
@@ -1,1960 +0,0 @@
-Description: Fixes new symbols related to previous patch
- fix-critical-bugs.patch introduced AgsClearBuffer task.
- Note you could do `make gen-symbols-ags-audio` to achieve
- the same result.
-Author: Joël Krähmann <jkraehemann at gmail.com>
-Applied-Upstream: 0.7.122.x, http://git.savannah.gnu.org/cgit/gsequencer.git
-Last-Update: 2017-01-31
---- a/libags_audio.sym
-+++ b/libags_audio.sym
-@@ -1,36 +1,20 @@
--ags_lv2_conversion_get_type
--ags_lv2_conversion_new
--ags_base_plugin_get_type
--ags_port_descriptor_alloc
--ags_port_descriptor_free
--ags_base_plugin_find_filename
--ags_base_plugin_find_effect
--ags_base_plugin_sort
--ags_base_plugin_apply_port_group_by_prefix
--ags_base_plugin_instantiate
--ags_base_plugin_connect_port
--ags_base_plugin_activate
--ags_base_plugin_deactivate
--ags_base_plugin_run
--ags_base_plugin_load_plugin
--ags_base_plugin_new
-+ags_lv2_uri_map_manager_get_type
-+ags_lv2_uri_map_manager_insert
-+ags_lv2_uri_map_manager_remove
-+ags_lv2_uri_map_manager_lookup
-+ags_lv2_uri_map_manager_load_default
-+ags_lv2_uri_map_manager_uri_to_id
-+ags_lv2_uri_map_manager_get_instance
-+ags_lv2_uri_map_manager_new
- ags_ladspa_plugin_get_type
- ags_ladspa_plugin_new
--ags_ladspa_manager_get_type
--ags_ladspa_manager_get_filenames
--ags_ladspa_manager_find_ladspa_plugin
--ags_ladspa_manager_load_blacklist
--ags_ladspa_manager_load_file
--ags_ladspa_manager_load_default_directory
--ags_ladspa_manager_get_instance
--ags_ladspa_manager_new
--ags_ladspa_conversion_get_type
--ags_ladspa_conversion_new
--ags_lv2_log_manager_get_type
--ags_lv2_log_manager_printf
--ags_lv2_log_manager_vprintf
--ags_lv2_log_manager_get_instance
--ags_lv2_log_manager_new
-+ags_lv2_worker_manager_get_type
-+ags_lv2_worker_manager_pull_worker
-+ags_lv2_worker_manager_get_instance
-+ags_lv2_worker_manager_new
-+ags_dssi_plugin_get_type
-+ags_dssi_plugin_change_program
-+ags_dssi_plugin_new
- ags_lv2_urid_manager_get_type
- ags_lv2_urid_manager_insert
- ags_lv2_urid_manager_remove
-@@ -40,6 +24,36 @@
- ags_lv2_urid_manager_unmap
- ags_lv2_urid_manager_get_instance
- ags_lv2_urid_manager_new
-+ags_lv2_worker_get_type
-+ags_lv2_worker_alloc_response_data
-+ags_lv2_worker_free_response_data
-+ags_lv2_worker_respond
-+ags_lv2_worker_schedule_work
-+ags_lv2_worker_safe_run
-+ags_lv2_worker_interrupted_callback
-+ags_lv2_worker_new
-+ags_lv2ui_plugin_get_type
-+ags_lv2ui_plugin_new
-+ags_lv2ui_manager_get_type
-+ags_lv2ui_manager_get_filenames
-+ags_lv2ui_manager_find_lv2ui_plugin
-+ags_lv2ui_manager_load_blacklist
-+ags_lv2ui_manager_load_file
-+ags_lv2ui_manager_load_default_directory
-+ags_lv2ui_manager_get_instance
-+ags_lv2ui_manager_new
-+ags_ladspa_conversion_get_type
-+ags_ladspa_conversion_new
-+ags_lv2_plugin_get_type
-+ags_lv2_plugin_alloc_event_buffer
-+ags_lv2_plugin_concat_event_buffer
-+ags_lv2_plugin_event_buffer_append_midi
-+ags_lv2_plugin_clear_event_buffer
-+ags_lv2_plugin_alloc_atom_sequence
-+ags_lv2_plugin_concat_atom_sequence
-+ags_lv2_plugin_atom_sequence_append_midi
-+ags_lv2_plugin_clear_atom_sequence
-+ags_lv2_plugin_new
- ags_plugin_factory_get_type
- ags_plugin_factory_read_file
- ags_plugin_factory_list_by_name
-@@ -48,6 +62,13 @@
- ags_plugin_factory_get_instance
- ags_plugin_factory_new_from_file
- ags_plugin_factory_new
-+ags_lv2_conversion_get_type
-+ags_lv2_conversion_new
-+ags_lv2_event_manager_get_type
-+ags_lv2_event_manager_lv2_event_ref
-+ags_lv2_event_manager_lv2_event_unref
-+ags_lv2_event_manager_get_instance
-+ags_lv2_event_manager_new
- ags_dssi_manager_get_type
- ags_dssi_manager_get_filenames
- ags_dssi_manager_find_dssi_plugin
-@@ -56,39 +77,28 @@
- ags_dssi_manager_load_default_directory
- ags_dssi_manager_get_instance
- ags_dssi_manager_new
--ags_lv2_worker_manager_get_type
--ags_lv2_worker_manager_pull_worker
--ags_lv2_worker_manager_get_instance
--ags_lv2_worker_manager_new
--ags_lv2ui_manager_get_type
--ags_lv2ui_manager_get_filenames
--ags_lv2ui_manager_find_lv2ui_plugin
--ags_lv2ui_manager_load_blacklist
--ags_lv2ui_manager_load_file
--ags_lv2ui_manager_load_default_directory
--ags_lv2ui_manager_get_instance
--ags_lv2ui_manager_new
--ags_lv2_uri_map_manager_get_type
--ags_lv2_uri_map_manager_insert
--ags_lv2_uri_map_manager_remove
--ags_lv2_uri_map_manager_lookup
--ags_lv2_uri_map_manager_load_default
--ags_lv2_uri_map_manager_uri_to_id
--ags_lv2_uri_map_manager_get_instance
--ags_lv2_uri_map_manager_new
--ags_lv2_worker_get_type
--ags_lv2_worker_alloc_response_data
--ags_lv2_worker_free_response_data
--ags_lv2_worker_respond
--ags_lv2_worker_schedule_work
--ags_lv2_worker_safe_run
--ags_lv2_worker_interrupted_callback
--ags_lv2_worker_new
--ags_dssi_plugin_get_type
--ags_dssi_plugin_change_program
--ags_dssi_plugin_new
--ags_lv2ui_plugin_get_type
--ags_lv2ui_plugin_new
-+ags_ladspa_manager_get_type
-+ags_ladspa_manager_get_filenames
-+ags_ladspa_manager_find_ladspa_plugin
-+ags_ladspa_manager_load_blacklist
-+ags_ladspa_manager_load_file
-+ags_ladspa_manager_load_default_directory
-+ags_ladspa_manager_get_instance
-+ags_ladspa_manager_new
-+ags_base_plugin_get_type
-+ags_port_descriptor_alloc
-+ags_port_descriptor_free
-+ags_base_plugin_find_filename
-+ags_base_plugin_find_effect
-+ags_base_plugin_sort
-+ags_base_plugin_apply_port_group_by_prefix
-+ags_base_plugin_instantiate
-+ags_base_plugin_connect_port
-+ags_base_plugin_activate
-+ags_base_plugin_deactivate
-+ags_base_plugin_run
-+ags_base_plugin_load_plugin
-+ags_base_plugin_new
- ags_lv2_manager_get_type
- ags_lv2_manager_get_filenames
- ags_lv2_manager_find_lv2_plugin
-@@ -97,23 +107,417 @@
- ags_lv2_manager_load_default_directory
- ags_lv2_manager_get_instance
- ags_lv2_manager_new
--ags_lv2_event_manager_get_type
--ags_lv2_event_manager_lv2_event_ref
--ags_lv2_event_manager_lv2_event_unref
--ags_lv2_event_manager_get_instance
--ags_lv2_event_manager_new
--ags_lv2_plugin_get_type
--ags_lv2_plugin_alloc_event_buffer
--ags_lv2_plugin_concat_event_buffer
--ags_lv2_plugin_event_buffer_append_midi
--ags_lv2_plugin_clear_event_buffer
--ags_lv2_plugin_alloc_atom_sequence
--ags_lv2_plugin_concat_atom_sequence
--ags_lv2_plugin_atom_sequence_append_midi
--ags_lv2_plugin_clear_atom_sequence
--ags_lv2_plugin_new
--ags_audio_application_context_get_type
--ags_audio_application_context_new
-+ags_lv2_log_manager_get_type
-+ags_lv2_log_manager_printf
-+ags_lv2_log_manager_vprintf
-+ags_lv2_log_manager_get_instance
-+ags_lv2_log_manager_new
-+ags_playback_get_type
-+ags_playback_find_source
-+ags_playback_new
-+ags_notation_get_type
-+ags_notation_find_near_timestamp
-+ags_notation_add_note
-+ags_notation_remove_note_at_position
-+ags_notation_get_selection
-+ags_notation_is_note_selected
-+ags_notation_find_point
-+ags_notation_find_region
-+ags_notation_free_selection
-+ags_notation_add_all_to_selection
-+ags_notation_add_point_to_selection
-+ags_notation_remove_point_from_selection
-+ags_notation_add_region_to_selection
-+ags_notation_remove_region_from_selection
-+ags_notation_copy_selection
-+ags_notation_cut_selection
-+ags_notation_insert_from_clipboard
-+ags_notation_get_current
-+ags_notation_new
-+ags_recall_recycling_dummy_get_type
-+ags_recall_recycling_dummy_new
-+ags_acceleration_get_type
-+ags_acceleration_duplicate
-+ags_acceleration_new
-+ags_midiin_get_type
-+ags_midiin_error_quark
-+ags_midiin_new
-+ags_buffer_audio_signal_get_type
-+ags_buffer_audio_signal_new
-+ags_play_channel_run_get_type
-+ags_play_channel_run_new
-+ags_play_channel_run_master_get_type
-+ags_play_channel_run_master_streamer_free
-+ags_play_channel_run_master_streamer_alloc
-+ags_play_channel_run_master_find_streamer
-+ags_play_channel_run_master_new
-+ags_feed_channel_run_get_type
-+ags_feed_channel_run_new
-+ags_copy_audio_signal_get_type
-+ags_copy_audio_signal_new
-+ags_play_channel_get_type
-+ags_play_channel_new
-+ags_envelope_recycling_get_type
-+ags_envelope_recycling_new
-+ags_copy_recycling_get_type
-+ags_copy_recycling_new
-+ags_mute_channel_run_get_type
-+ags_mute_channel_run_new
-+ags_delay_audio_run_get_type
-+ags_delay_audio_run_notation_alloc_output
-+ags_delay_audio_run_notation_alloc_input
-+ags_delay_audio_run_notation_count
-+ags_delay_audio_run_sequencer_alloc_output
-+ags_delay_audio_run_sequencer_alloc_input
-+ags_delay_audio_run_sequencer_count
-+ags_delay_audio_run_new
-+ags_envelope_channel_run_get_type
-+ags_envelope_channel_run_new
-+ags_route_lv2_audio_get_type
-+ags_route_lv2_audio_new
-+ags_buffer_channel_run_get_type
-+ags_buffer_channel_run_new
-+ags_play_notation_audio_get_type
-+ags_play_notation_audio_new
-+ags_count_beats_audio_run_get_type
-+ags_count_beats_audio_run_notation_start
-+ags_count_beats_audio_run_notation_loop
-+ags_count_beats_audio_run_notation_stop
-+ags_count_beats_audio_run_sequencer_start
-+ags_count_beats_audio_run_sequencer_loop
-+ags_count_beats_audio_run_sequencer_stop
-+ags_count_beats_audio_run_new
-+ags_envelope_channel_get_type
-+ags_envelope_channel_new
-+ags_volume_audio_signal_get_type
-+ags_volume_audio_signal_new
-+ags_peak_audio_signal_get_type
-+ags_peak_audio_signal_new
-+ags_copy_pattern_channel_run_get_type
-+ags_copy_pattern_channel_run_new
-+ags_volume_channel_get_type
-+ags_volume_channel_new
-+ags_volume_channel_run_get_type
-+ags_volume_channel_run_new
-+ags_mute_recycling_get_type
-+ags_mute_recycling_new
-+ags_envelope_audio_signal_get_type
-+ags_envelope_audio_signal_new
-+ags_feed_recycling_get_type
-+ags_feed_recycling_new
-+ags_mute_audio_signal_get_type
-+ags_mute_audio_signal_new
-+ags_buffer_recycling_get_type
-+ags_buffer_recycling_new
-+ags_play_audio_signal_get_type
-+ags_play_audio_signal_new
-+ags_record_midi_audio_get_type
-+ags_record_midi_audio_new
-+ags_play_note_get_type
-+ags_play_note_new
-+ags_route_dssi_audio_get_type
-+ags_route_dssi_audio_new
-+ags_feed_channel_get_type
-+ags_feed_channel_new
-+ags_peak_recycling_get_type
-+ags_peak_recycling_new
-+ags_copy_pattern_audio_get_type
-+ags_copy_pattern_audio_new
-+ags_route_dssi_audio_run_get_type
-+ags_route_dssi_audio_run_new
-+ags_stream_channel_get_type
-+ags_stream_channel_new
-+ags_peak_channel_run_get_type
-+ags_peak_channel_run_new
-+ags_delay_audio_get_type
-+ags_delay_audio_notation_duration_changed
-+ags_delay_audio_sequencer_duration_changed
-+ags_delay_audio_new
-+ags_loop_channel_run_get_type
-+ags_loop_channel_run_new
-+ags_stream_channel_run_get_type
-+ags_stream_channel_run_new
-+ags_copy_channel_get_type
-+ags_copy_channel_new
-+ags_copy_channel_run_get_type
-+ags_copy_channel_run_new
-+ags_mute_audio_run_get_type
-+ags_mute_audio_run_new
-+ags_buffer_channel_get_type
-+ags_buffer_channel_new
-+ags_stream_recycling_get_type
-+ags_stream_recycling_new
-+ags_route_lv2_audio_run_get_type
-+ags_route_lv2_audio_run_new
-+ags_stream_get_type
-+ags_stream
-+ags_stream_new
-+ags_record_midi_audio_run_get_type
-+ags_record_midi_audio_run_new
-+ags_play_audio_get_type
-+ags_play_audio_new
-+ags_feed_audio_signal_get_type
-+ags_feed_audio_signal_new
-+ags_stream_audio_signal_get_type
-+ags_stream_audio_signal_new
-+ags_copy_notation_audio_run_get_type
-+ags_copy_notation_audio_run_new
-+ags_play_notation_audio_run_get_type
-+ags_play_notation_audio_run_new
-+ags_loop_channel_get_type
-+ags_loop_channel_new
-+ags_copy_notation_audio_get_type
-+ags_copy_notation_audio_new
-+ags_mute_channel_get_type
-+ags_mute_channel_new
-+ags_copy_pattern_channel_get_type
-+ags_copy_pattern_channel_template_find_source_and_destination
-+ags_copy_pattern_channel_new
-+ags_volume_recycling_get_type
-+ags_volume_recycling_new
-+ags_mute_audio_get_type
-+ags_mute_audio_new
-+ags_count_beats_audio_get_type
-+ags_count_beats_audio_new
-+ags_copy_pattern_audio_run_get_type
-+ags_copy_pattern_audio_run_new
-+ags_peak_channel_get_type
-+ags_peak_channel_retrieve_peak
-+ags_peak_channel_new
-+ags_play_audio_file_get_type
-+ags_play_audio_file_new
-+ags_play_recycling_get_type
-+ags_play_recycling_new
-+ags_synth_generator_get_type
-+ags_synth_generator_new
-+ags_recall_ladspa_get_type
-+ags_recall_ladspa_load
-+ags_recall_ladspa_load_ports
-+ags_recall_ladspa_load_conversion
-+ags_recall_ladspa_find
-+ags_recall_ladspa_new
-+ags_recycling_context_get_type
-+ags_recycling_context_replace
-+ags_recycling_context_add
-+ags_recycling_context_remove
-+ags_recycling_context_insert
-+ags_recycling_context_get_toplevel
-+ags_recycling_context_find
-+ags_recycling_context_find_child
-+ags_recycling_context_find_parent
-+ags_recycling_context_add_child
-+ags_recycling_context_remove_child
-+ags_recycling_context_get_child_recall_id
-+ags_recycling_context_reset_recycling
-+ags_recycling_context_new
-+ags_recall_audio_signal_get_type
-+ags_recall_audio_signal_new
-+ags_recall_channel_run_get_type
-+ags_recall_channel_run_run_order_changed
-+ags_recall_channel_run_get_run_order
-+ags_recall_channel_run_new
-+ags_ipatch_get_type
-+ags_ipatch_check_suffix
-+ags_ipatch_new
-+ags_audio_file_get_type
-+ags_audio_file_check_suffix
-+ags_audio_file_open
-+ags_audio_file_open_from_data
-+ags_audio_file_rw_open
-+ags_audio_file_close
-+ags_audio_file_read_audio_signal
-+ags_audio_file_seek
-+ags_audio_file_write
-+ags_audio_file_flush
-+ags_audio_file_new
-+ags_sndfile_get_type
-+ags_sndfile_new
-+ags_ipatch_sf2_reader_get_type
-+ags_ipatch_sf2_reader_new
-+ags_file_read_soundcard
-+ags_file_write_soundcard
-+ags_file_read_soundcard_list
-+ags_file_write_soundcard_list
-+ags_file_read_playback
-+ags_file_write_playback
-+ags_file_read_playback_list
-+ags_file_write_playback_list
-+ags_file_read_audio
-+ags_file_write_audio
-+ags_file_read_audio_list
-+ags_file_write_audio_list
-+ags_file_read_channel
-+ags_file_write_channel
-+ags_file_read_channel_list
-+ags_file_write_channel_list
-+ags_file_read_input
-+ags_file_write_input
-+ags_file_read_output
-+ags_file_write_output
-+ags_file_read_recall
-+ags_file_write_recall
-+ags_file_read_recall_list
-+ags_file_write_recall_list
-+ags_file_read_recall_container
-+ags_file_write_recall_container
-+ags_file_read_recall_container_list
-+ags_file_write_recall_container_list
-+ags_file_read_recall_audio
-+ags_file_write_recall_audio
-+ags_file_read_recall_audio_run
-+ags_file_write_recall_audio_run
-+ags_file_read_recall_channel
-+ags_file_write_recall_channel
-+ags_file_read_recall_channel_run
-+ags_file_write_recall_channel_run
-+ags_file_read_recall_recycling
-+ags_file_write_recall_recycling
-+ags_file_read_recall_audio_signal
-+ags_file_write_recall_audio_signal
-+ags_file_read_port
-+ags_file_write_port
-+ags_file_read_port_list
-+ags_file_write_port_list
-+ags_file_read_recycling
-+ags_file_write_recycling
-+ags_file_read_recycling_list
-+ags_file_write_recycling_list
-+ags_file_read_audio_signal
-+ags_file_write_audio_signal
-+ags_file_read_audio_signal_list
-+ags_file_write_audio_signal_list
-+ags_file_read_stream
-+ags_file_write_stream
-+ags_file_read_stream_list
-+ags_file_write_stream_list
-+ags_file_read_pattern
-+ags_file_write_pattern
-+ags_file_read_pattern_list
-+ags_file_write_pattern_list
-+ags_file_read_pattern_data
-+ags_file_write_pattern_data
-+ags_file_read_pattern_data_list
-+ags_file_write_pattern_data_list
-+ags_file_read_notation
-+ags_file_write_notation
-+ags_file_read_notation_list
-+ags_file_write_notation_list
-+ags_file_read_note
-+ags_file_write_note
-+ags_file_read_note_list
-+ags_file_write_note_list
-+ags_file_read_automation
-+ags_file_write_automation
-+ags_file_read_automation_list
-+ags_file_write_automation_list
-+ags_file_read_acceleration
-+ags_file_write_acceleration
-+ags_file_read_acceleration_list
-+ags_file_write_acceleration_list
-+ags_file_read_task
-+ags_file_write_task
-+ags_file_read_task_list
-+ags_file_write_task_list
-+ags_file_read_embedded_audio
-+ags_file_write_embedded_audio
-+ags_file_read_embedded_audio_list
-+ags_file_write_embedded_audio_list
-+ags_ipatch_dls2_reader_get_type
-+ags_ipatch_dls2_reader_new
-+ags_audio_file_link_get_type
-+ags_audio_file_link_new
-+ags_remote_input_get_type
-+ags_remote_input_new
-+ags_remote_output_get_type
-+ags_remote_output_new
-+ags_remote_channel_get_type
-+ags_remote_channel_error_quark
-+ags_remote_channel_new
-+ags_recall_factory_get_type
-+ags_recall_factory_create
-+ags_recall_factory_remove
-+ags_recall_factory_get_instance
-+ags_recall_factory_new
-+ags_playable_get_type
-+ags_playable_error_quark
-+ags_playable_open
-+ags_playable_rw_open
-+ags_playable_level_count
-+ags_playable_nth_level
-+ags_playable_selected_level
-+ags_playable_sublevel_names
-+ags_playable_level_select
-+ags_playable_level_up
-+ags_playable_iter_start
-+ags_playable_iter_next
-+ags_playable_info
-+ags_playable_get_samplerate
-+ags_playable_get_format
-+ags_playable_read
-+ags_playable_write
-+ags_playable_flush
-+ags_playable_seek
-+ags_playable_close
-+ags_playable_read_audio_signal
-+ags_input_get_type
-+ags_input_open_file
-+ags_input_apply_synth
-+ags_input_new
-+ags_recall_channel_run_dummy_get_type
-+ags_recall_channel_run_dummy_new
-+ags_output_get_type
-+ags_output_find_first_input_recycling
-+ags_output_find_last_input_recycling
-+ags_output_new
-+ags_devout_get_type
-+ags_devout_error_quark
-+ags_devout_switch_buffer_flag
-+ags_devout_adjust_delay_and_attack
-+ags_devout_realloc_buffer
-+ags_devout_new
-+ags_recall_ladspa_run_get_type
-+ags_recall_ladspa_run_new
-+ags_audio_get_type
-+ags_audio_set_soundcard
-+ags_audio_set_flags
-+ags_audio_unset_flags
-+ags_audio_check_connection
-+ags_audio_set_audio_channels
-+ags_audio_set_pads
-+ags_audio_set_samplerate
-+ags_audio_set_buffer_size
-+ags_audio_set_format
-+ags_audio_set_sequence_length
-+ags_audio_add_audio_connection
-+ags_audio_remove_audio_connection
-+ags_audio_add_notation
-+ags_audio_remove_notation
-+ags_audio_add_automation
-+ags_audio_remove_automation
-+ags_audio_add_recall_id
-+ags_audio_remove_recall_id
-+ags_audio_add_recycling_context
-+ags_audio_remove_recycling_context
-+ags_audio_add_recall_container
-+ags_audio_remove_recall_container
-+ags_audio_add_recall
-+ags_audio_remove_recall
-+ags_audio_recall_change_state
-+ags_audio_init_run
-+ags_audio_duplicate_recall
-+ags_audio_init_recall
-+ags_audio_resolve_recall
-+ags_audio_is_playing
-+ags_audio_play
-+ags_audio_tact
-+ags_audio_done
-+ags_audio_cancel
-+ags_audio_remove
-+ags_audio_find_port
-+ags_audio_open_files
-+ags_audio_recursive_set_property
-+ags_audio_recursive_play_init
-+ags_audio_new
- ags_automation_get_type
- ags_automation_find_port
- ags_automation_find_near_timestamp
-@@ -139,27 +543,95 @@
- ags_automation_find_specifier_with_type_and_line
- ags_automation_get_value
- ags_automation_new
--ags_audio_signal_get_type
--ags_stream_alloc
--ags_stream_free
--ags_audio_signal_set_samplerate
--ags_audio_signal_set_buffer_size
--ags_audio_signal_set_format
--ags_audio_signal_get_length_till_current
--ags_audio_signal_add_stream
--ags_audio_signal_stream_resize
--ags_audio_signal_stream_safe_resize
--ags_audio_signal_realloc_buffer_size
--ags_audio_signal_duplicate_stream
--ags_audio_signal_get_template
--ags_audio_signal_get_stream_current
--ags_audio_signal_get_by_recall_id
--ags_audio_signal_tile
--ags_audio_signal_scale
--ags_audio_signal_feed
--ags_audio_signal_envelope
--ags_audio_signal_new
--ags_audio_signal_new_with_length
-+ags_audio_buffer_util_format_from_soundcard
-+ags_audio_buffer_util_get_copy_mode
-+ags_audio_buffer_util_clear_float
-+ags_audio_buffer_util_clear_double
-+ags_audio_buffer_util_clear_buffer
-+ags_audio_buffer_util_envelope_s8
-+ags_audio_buffer_util_envelope_s16
-+ags_audio_buffer_util_envelope_s24
-+ags_audio_buffer_util_envelope_s32
-+ags_audio_buffer_util_envelope_s64
-+ags_audio_buffer_util_envelope_float
-+ags_audio_buffer_util_envelope_double
-+ags_audio_buffer_util_envelope
-+ags_audio_buffer_util_volume_s8
-+ags_audio_buffer_util_volume_s16
-+ags_audio_buffer_util_volume_s24
-+ags_audio_buffer_util_volume_s32
-+ags_audio_buffer_util_volume_s64
-+ags_audio_buffer_util_volume_float
-+ags_audio_buffer_util_volume_double
-+ags_audio_buffer_util_volume
-+ags_audio_buffer_util_resample_s8
-+ags_audio_buffer_util_resample_s16
-+ags_audio_buffer_util_resample_s24
-+ags_audio_buffer_util_resample_s32
-+ags_audio_buffer_util_resample_s64
-+ags_audio_buffer_util_resample_float
-+ags_audio_buffer_util_resample_double
-+ags_audio_buffer_util_resample
-+ags_audio_buffer_util_copy_s8_to_s8
-+ags_audio_buffer_util_copy_s8_to_s16
-+ags_audio_buffer_util_copy_s8_to_s24
-+ags_audio_buffer_util_copy_s8_to_s32
-+ags_audio_buffer_util_copy_s8_to_s64
-+ags_audio_buffer_util_copy_s8_to_float
-+ags_audio_buffer_util_copy_s8_to_double
-+ags_audio_buffer_util_copy_s16_to_s8
-+ags_audio_buffer_util_copy_s16_to_s16
-+ags_audio_buffer_util_copy_s16_to_s24
-+ags_audio_buffer_util_copy_s16_to_s32
-+ags_audio_buffer_util_copy_s16_to_s64
-+ags_audio_buffer_util_copy_s16_to_float
-+ags_audio_buffer_util_copy_s16_to_double
-+ags_audio_buffer_util_copy_s24_to_s8
-+ags_audio_buffer_util_copy_s24_to_s16
-+ags_audio_buffer_util_copy_s24_to_s24
-+ags_audio_buffer_util_copy_s24_to_s32
-+ags_audio_buffer_util_copy_s24_to_s64
-+ags_audio_buffer_util_copy_s24_to_float
-+ags_audio_buffer_util_copy_s24_to_double
-+ags_audio_buffer_util_copy_s32_to_s8
-+ags_audio_buffer_util_copy_s32_to_s16
-+ags_audio_buffer_util_copy_s32_to_s24
-+ags_audio_buffer_util_copy_s32_to_s32
-+ags_audio_buffer_util_copy_s32_to_s64
-+ags_audio_buffer_util_copy_s32_to_float
-+ags_audio_buffer_util_copy_s32_to_double
-+ags_audio_buffer_util_copy_s64_to_s8
-+ags_audio_buffer_util_copy_s64_to_s16
-+ags_audio_buffer_util_copy_s64_to_s24
-+ags_audio_buffer_util_copy_s64_to_s32
-+ags_audio_buffer_util_copy_s64_to_s64
-+ags_audio_buffer_util_copy_s64_to_float
-+ags_audio_buffer_util_copy_s64_to_double
-+ags_audio_buffer_util_copy_float_to_s8
-+ags_audio_buffer_util_copy_float_to_s16
-+ags_audio_buffer_util_copy_float_to_s24
-+ags_audio_buffer_util_copy_float_to_s32
-+ags_audio_buffer_util_copy_float_to_s64
-+ags_audio_buffer_util_copy_float_to_float
-+ags_audio_buffer_util_copy_float_to_double
-+ags_audio_buffer_util_copy_double_to_s8
-+ags_audio_buffer_util_copy_double_to_s16
-+ags_audio_buffer_util_copy_double_to_s24
-+ags_audio_buffer_util_copy_double_to_s32
-+ags_audio_buffer_util_copy_double_to_s64
-+ags_audio_buffer_util_copy_double_to_float
-+ags_audio_buffer_util_copy_double_to_double
-+ags_audio_buffer_util_copy_buffer_to_buffer
-+ags_recall_channel_get_type
-+ags_recall_channel_find_channel
-+ags_recall_channel_new
-+ags_pattern_get_type
-+ags_pattern_find_near_timestamp
-+ags_pattern_set_dim
-+ags_pattern_is_empty
-+ags_pattern_get_bit
-+ags_pattern_toggle_bit
-+ags_pattern_new
- ags_note_get_type
- ags_note_find_prev
- ags_note_find_next
-@@ -170,11 +642,10 @@
- ags_note_duplicate
- ags_note_new
- ags_note_new_with_offset
--ags_audio_connection_get_type
--ags_audio_connection_find
--ags_audio_connection_new
--ags_recall_lv2_run_get_type
--ags_recall_lv2_run_new
-+ags_channel_iter_alloc
-+ags_channel_iter_free
-+ags_channel_iter_prev
-+ags_channel_iter_next
- ags_synth_util_sin_s8
- ags_synth_util_sin_s16
- ags_synth_util_sin_s24
-@@ -207,10 +678,196 @@
- ags_synth_util_sawtooth
- ags_synth_util_triangle
- ags_synth_util_square
--ags_midiin_get_type
--ags_midiin_error_quark
--ags_midiin_new
--ags_recycling_thread_iterate_callback
-+ags_recall_dssi_run_get_type
-+ags_recall_dssi_run_new
-+ags_recycling_get_type
-+ags_recycling_set_soundcard
-+ags_recycling_add_audio_signal
-+ags_recycling_remove_audio_signal
-+ags_recycling_create_audio_signal_with_defaults
-+ags_recycling_create_audio_signal_with_frame_count
-+ags_recycling_position
-+ags_recycling_find_next_channel
-+ags_recycling_new
-+ags_jack_midiin_get_type
-+ags_jack_midiin_error_quark
-+ags_jack_midiin_new
-+ags_jack_server_get_type
-+ags_jack_server_find_url
-+ags_jack_server_find_client
-+ags_jack_server_find_port
-+ags_jack_server_add_client
-+ags_jack_server_remove_client
-+ags_jack_server_connect_client
-+ags_jack_server_new
-+ags_jack_port_get_type
-+ags_jack_port_find
-+ags_jack_port_register
-+ags_jack_port_unregister
-+ags_jack_port_new
-+ags_jack_devout_get_type
-+ags_jack_devout_error_quark
-+ags_jack_devout_switch_buffer_flag
-+ags_jack_devout_adjust_delay_and_attack
-+ags_jack_devout_realloc_buffer
-+ags_jack_devout_new
-+ags_jack_client_get_type
-+ags_jack_client_find_uuid
-+ags_jack_client_find
-+ags_jack_client_open
-+ags_jack_client_add_device
-+ags_jack_client_remove_device
-+ags_jack_client_add_port
-+ags_jack_client_remove_port
-+ags_jack_client_activate
-+ags_jack_client_deactivate
-+ags_jack_client_new
-+ags_port_get_type
-+ags_port_safe_read
-+ags_port_safe_write
-+ags_port_safe_write_raw
-+ags_port_safe_get_property
-+ags_port_safe_set_property
-+ags_port_find_specifier
-+ags_port_new
-+ags_recall_dssi_get_type
-+ags_recall_dssi_load
-+ags_recall_dssi_load_ports
-+ags_recall_dssi_load_conversion
-+ags_recall_dssi_find
-+ags_recall_dssi_new
-+ags_recall_recycling_get_type
-+ags_recall_recycling_get_child_source
-+ags_recall_recycling_new
-+ags_append_audio_get_type
-+ags_append_audio_new
-+ags_apply_synth_get_type
-+ags_apply_synth_new
-+ags_tic_device_get_type
-+ags_tic_device_new
-+ags_resize_audio_get_type
-+ags_resize_audio_new
-+ags_set_muted_get_type
-+ags_set_muted_new
-+ags_apply_sequencer_length_get_type
-+ags_apply_sequencer_length_new
-+ags_apply_tact_get_type
-+ags_apply_tact_new
-+ags_apply_bpm_get_type
-+ags_apply_bpm_new
-+ags_init_audio_get_type
-+ags_init_audio_new
-+ags_cancel_channel_get_type
-+ags_cancel_channel_new
-+ags_free_selection_get_type
-+ags_free_selection_new
-+ags_open_single_file_get_type
-+ags_open_single_file_new
-+ags_append_audio_threaded_get_type
-+ags_append_audio_threaded_new
-+ags_apply_presets_get_type
-+ags_apply_presets_soundcard
-+ags_apply_presets_new
-+ags_clear_buffer_get_type
-+ags_clear_buffer_new
-+ags_remove_region_from_selection_get_type
-+ags_remove_region_from_selection_new
-+ags_remove_recall_container_get_type
-+ags_remove_recall_container_new
-+ags_init_channel_get_type
-+ags_init_channel_new
-+ags_add_effect_get_type
-+ags_add_effect_new
-+ags_open_file_get_type
-+ags_open_file_new
-+ags_add_soundcard_get_type
-+ags_add_soundcard_new
-+ags_cancel_recall_get_type
-+ags_cancel_recall_new
-+ags_append_channel_get_type
-+ags_append_channel_new
-+ags_change_soundcard_get_type
-+ags_change_soundcard_new
-+ags_set_output_device_get_type
-+ags_set_output_device_new
-+ags_add_region_to_selection_get_type
-+ags_add_region_to_selection_new
-+ags_remove_recall_get_type
-+ags_remove_recall_new
-+ags_add_point_to_selection_get_type
-+ags_add_point_to_selection_new
-+ags_remove_audio_signal_get_type
-+ags_remove_audio_signal_new
-+ags_set_samplerate_get_type
-+ags_set_samplerate_new
-+ags_switch_buffer_flag_get_type
-+ags_switch_buffer_flag_new
-+ags_reset_audio_connection_get_type
-+ags_reset_audio_connection_new
-+ags_remove_audio_get_type
-+ags_remove_audio_new
-+ags_remove_note_get_type
-+ags_remove_note_new
-+ags_save_file_get_type
-+ags_save_file_new
-+ags_add_note_get_type
-+ags_add_note_new
-+ags_remove_point_from_selection_get_type
-+ags_remove_point_from_selection_new
-+ags_set_audio_channels_get_type
-+ags_set_audio_channels_new
-+ags_export_output_get_type
-+ags_export_output_new
-+ags_append_recall_get_type
-+ags_append_recall_new
-+ags_set_input_device_get_type
-+ags_set_input_device_new
-+ags_unref_audio_signal_get_type
-+ags_unref_audio_signal_new
-+ags_add_recall_get_type
-+ags_add_recall_new
-+ags_seek_soundcard_get_type
-+ags_seek_soundcard_new
-+ags_set_format_get_type
-+ags_set_format_new
-+ags_cancel_audio_get_type
-+ags_cancel_audio_new
-+ags_add_audio_get_type
-+ags_add_audio_new
-+ags_set_buffer_size_get_type
-+ags_set_buffer_size_new
-+ags_add_recall_container_get_type
-+ags_add_recall_container_new
-+ags_open_sf2_sample_get_type
-+ags_open_sf2_sample_new
-+ags_remove_soundcard_get_type
-+ags_remove_soundcard_new
-+ags_link_channel_get_type
-+ags_link_channel_new
-+ags_add_audio_signal_get_type
-+ags_add_audio_signal_new
-+ags_toggle_pattern_bit_get_type
-+ags_toggle_pattern_bit_refresh_gui
-+ags_toggle_pattern_bit_new
-+ags_start_sequencer_get_type
-+ags_start_sequencer_new
-+ags_notify_soundcard_get_type
-+ags_notify_soundcard_new
-+ags_start_soundcard_get_type
-+ags_start_soundcard_new
-+ags_recall_audio_run_get_type
-+ags_recall_audio_run_new
-+ags_recall_container_get_type
-+ags_recall_container_get_recall_audio
-+ags_recall_container_get_recall_audio_run
-+ags_recall_container_get_recall_channel
-+ags_recall_container_get_recall_channel_run
-+ags_recall_container_find
-+ags_recall_container_new
-+ags_record_thread_get_type
-+ags_record_thread_new
-+ags_audio_thread_get_type
-+ags_audio_thread_new
- ags_audio_loop_get_type
- ags_audio_loop_add_audio
- ags_audio_loop_remove_audio
-@@ -222,12 +879,13 @@
- ags_soundcard_thread_get_type
- ags_soundcard_thread_find_soundcard
- ags_soundcard_thread_new
-+ags_sequencer_thread_get_type
-+ags_sequencer_thread_interval_timeout
-+ags_sequencer_thread_find_sequencer
-+ags_sequencer_thread_new
- ags_export_thread_get_type
- ags_export_thread_find_soundcard
- ags_export_thread_new
--ags_iterator_thread_get_type
--ags_iterator_thread_children_ready
--ags_iterator_thread_new
- ags_recycling_thread_get_type
- ags_recycling_thread_worker_alloc
- ags_recycling_thread_add_worker
-@@ -239,46 +897,21 @@
- ags_recycling_thread_new
- ags_channel_thread_get_type
- ags_channel_thread_new
--ags_record_thread_get_type
--ags_record_thread_new
--ags_sequencer_thread_get_type
--ags_sequencer_thread_interval_timeout
--ags_sequencer_thread_find_sequencer
--ags_sequencer_thread_new
--ags_audio_thread_get_type
--ags_audio_thread_new
--ags_recall_dssi_run_get_type
--ags_recall_dssi_run_new
--ags_recall_channel_run_dummy_get_type
--ags_recall_channel_run_dummy_new
-+ags_iterator_thread_get_type
-+ags_iterator_thread_children_ready
-+ags_iterator_thread_new
-+ags_recycling_thread_iterate_callback
-+ags_recall_lv2_get_type
-+ags_recall_lv2_load
-+ags_recall_lv2_load_ports
-+ags_recall_lv2_load_conversion
-+ags_recall_lv2_find
-+ags_recall_lv2_new
- ags_fifoout_get_type
- ags_fifoout_error_quark
- ags_fifoout_adjust_delay_and_attack
- ags_fifoout_realloc_buffer
- ags_fifoout_new
--ags_recall_id_get_type
--ags_recall_id_get_run_stage
--ags_recall_id_set_run_stage
--ags_recall_id_unset_run_stage
--ags_recall_id_find_recycling_context
--ags_recall_id_find_parent_recycling_context
--ags_recall_id_new
--ags_output_get_type
--ags_output_find_first_input_recycling
--ags_output_find_last_input_recycling
--ags_output_new
--ags_recall_channel_run_get_type
--ags_recall_channel_run_run_order_changed
--ags_recall_channel_run_get_run_order
--ags_recall_channel_run_new
--ags_playback_get_type
--ags_playback_find_source
--ags_playback_new
--ags_recall_dependency_get_type
--ags_recall_dependency_find_dependency
--ags_recall_dependency_find_dependency_by_provider
--ags_recall_dependency_resolve
--ags_recall_dependency_new
- ags_recall_get_type
- ags_recall_set_flags
- ags_recall_load_automation
-@@ -325,120 +958,10 @@
- ags_recall_lock_port
- ags_recall_unlock_port
- ags_recall_new
--ags_init_channel_get_type
--ags_init_channel_new
--ags_remove_soundcard_get_type
--ags_remove_soundcard_new
--ags_remove_audio_signal_get_type
--ags_remove_audio_signal_new
--ags_add_audio_get_type
--ags_add_audio_new
--ags_remove_audio_get_type
--ags_remove_audio_new
--ags_remove_recall_container_get_type
--ags_remove_recall_container_new
--ags_cancel_audio_get_type
--ags_cancel_audio_new
--ags_remove_recall_get_type
--ags_remove_recall_new
--ags_add_note_get_type
--ags_add_note_new
--ags_resize_audio_get_type
--ags_resize_audio_new
--ags_link_channel_get_type
--ags_link_channel_new
--ags_append_audio_get_type
--ags_append_audio_new
--ags_set_audio_channels_get_type
--ags_set_audio_channels_new
--ags_remove_note_get_type
--ags_remove_note_new
--ags_start_sequencer_get_type
--ags_start_sequencer_new
--ags_apply_synth_get_type
--ags_apply_synth_new
--ags_append_audio_threaded_get_type
--ags_append_audio_threaded_new
--ags_export_output_get_type
--ags_export_output_new
--ags_unref_audio_signal_get_type
--ags_unref_audio_signal_new
--ags_free_selection_get_type
--ags_free_selection_new
--ags_add_recall_container_get_type
--ags_add_recall_container_new
--ags_set_muted_get_type
--ags_set_muted_new
--ags_apply_bpm_get_type
--ags_apply_bpm_new
--ags_apply_tact_get_type
--ags_apply_tact_new
--ags_apply_sequencer_length_get_type
--ags_apply_sequencer_length_new
--ags_notify_soundcard_get_type
--ags_notify_soundcard_new
--ags_cancel_channel_get_type
--ags_cancel_channel_new
--ags_init_audio_get_type
--ags_init_audio_new
--ags_seek_soundcard_get_type
--ags_seek_soundcard_new
--ags_append_recall_get_type
--ags_append_recall_new
--ags_add_soundcard_get_type
--ags_add_soundcard_new
--ags_apply_presets_get_type
--ags_apply_presets_soundcard
--ags_apply_presets_new
--ags_add_recall_get_type
--ags_add_recall_new
--ags_add_effect_get_type
--ags_add_effect_new
--ags_save_file_get_type
--ags_save_file_new
--ags_tic_device_get_type
--ags_tic_device_new
--ags_change_soundcard_get_type
--ags_change_soundcard_new
--ags_append_channel_get_type
--ags_append_channel_new
--ags_remove_point_from_selection_get_type
--ags_remove_point_from_selection_new
--ags_add_point_to_selection_get_type
--ags_add_point_to_selection_new
--ags_set_samplerate_get_type
--ags_set_samplerate_new
--ags_set_buffer_size_get_type
--ags_set_buffer_size_new
--ags_set_format_get_type
--ags_set_format_new
--ags_switch_buffer_flag_get_type
--ags_switch_buffer_flag_new
--ags_cancel_recall_get_type
--ags_cancel_recall_new
--ags_add_region_to_selection_get_type
--ags_add_region_to_selection_new
--ags_open_sf2_sample_get_type
--ags_open_sf2_sample_new
--ags_add_audio_signal_get_type
--ags_add_audio_signal_new
--ags_toggle_pattern_bit_get_type
--ags_toggle_pattern_bit_refresh_gui
--ags_toggle_pattern_bit_new
--ags_reset_audio_connection_get_type
--ags_reset_audio_connection_new
--ags_start_soundcard_get_type
--ags_start_soundcard_new
--ags_open_single_file_get_type
--ags_open_single_file_new
--ags_open_file_get_type
--ags_open_file_new
--ags_set_input_device_get_type
--ags_set_input_device_new
--ags_remove_region_from_selection_get_type
--ags_remove_region_from_selection_new
--ags_set_output_device_get_type
--ags_set_output_device_new
-+ags_recall_lv2_run_get_type
-+ags_recall_lv2_run_new
-+ags_playback_domain_get_type
-+ags_playback_domain_new
- ags_sound_provider_get_type
- ags_sound_provider_set_soundcard
- ags_sound_provider_get_soundcard
-@@ -448,213 +971,8 @@
- ags_sound_provider_get_sequencer
- ags_sound_provider_set_distributed_manager
- ags_sound_provider_get_distributed_manager
--ags_loop_channel_get_type
--ags_loop_channel_new
--ags_envelope_recycling_get_type
--ags_envelope_recycling_new
--ags_play_notation_audio_get_type
--ags_play_notation_audio_new
--ags_volume_channel_run_get_type
--ags_volume_channel_run_new
--ags_mute_recycling_get_type
--ags_mute_recycling_new
--ags_envelope_channel_run_get_type
--ags_envelope_channel_run_new
--ags_count_beats_audio_get_type
--ags_count_beats_audio_new
--ags_play_channel_run_get_type
--ags_play_channel_run_new
--ags_route_dssi_audio_get_type
--ags_route_dssi_audio_new
--ags_mute_audio_get_type
--ags_mute_audio_new
--ags_peak_recycling_get_type
--ags_peak_recycling_new
--ags_buffer_channel_run_get_type
--ags_buffer_channel_run_new
--ags_play_channel_get_type
--ags_play_channel_new
--ags_stream_channel_run_get_type
--ags_stream_channel_run_new
--ags_mute_channel_run_get_type
--ags_mute_channel_run_new
--ags_play_audio_get_type
--ags_play_audio_new
--ags_count_beats_audio_run_get_type
--ags_count_beats_audio_run_notation_start
--ags_count_beats_audio_run_notation_loop
--ags_count_beats_audio_run_notation_stop
--ags_count_beats_audio_run_sequencer_start
--ags_count_beats_audio_run_sequencer_loop
--ags_count_beats_audio_run_sequencer_stop
--ags_count_beats_audio_run_new
--ags_mute_channel_get_type
--ags_mute_channel_new
--ags_buffer_audio_signal_get_type
--ags_buffer_audio_signal_new
--ags_mute_audio_signal_get_type
--ags_mute_audio_signal_new
--ags_peak_audio_signal_get_type
--ags_peak_audio_signal_new
--ags_feed_channel_run_get_type
--ags_feed_channel_run_new
--ags_volume_recycling_get_type
--ags_volume_recycling_new
--ags_copy_pattern_channel_get_type
--ags_copy_pattern_channel_template_find_source_and_destination
--ags_copy_pattern_channel_new
--ags_delay_audio_get_type
--ags_delay_audio_notation_duration_changed
--ags_delay_audio_sequencer_duration_changed
--ags_delay_audio_new
--ags_play_notation_audio_run_get_type
--ags_play_notation_audio_run_new
--ags_envelope_channel_get_type
--ags_envelope_channel_new
--ags_play_recycling_get_type
--ags_play_recycling_new
--ags_envelope_audio_signal_get_type
--ags_envelope_audio_signal_new
--ags_loop_channel_run_get_type
--ags_loop_channel_run_new
--ags_copy_notation_audio_run_get_type
--ags_copy_notation_audio_run_new
--ags_play_note_get_type
--ags_play_note_new
--ags_record_midi_audio_run_get_type
--ags_record_midi_audio_run_new
--ags_buffer_recycling_get_type
--ags_buffer_recycling_new
--ags_copy_audio_signal_get_type
--ags_copy_audio_signal_new
--ags_copy_pattern_channel_run_get_type
--ags_copy_pattern_channel_run_new
--ags_buffer_channel_get_type
--ags_buffer_channel_new
--ags_peak_channel_get_type
--ags_peak_channel_retrieve_peak
--ags_peak_channel_new
--ags_peak_channel_run_get_type
--ags_peak_channel_run_new
--ags_copy_channel_get_type
--ags_copy_channel_new
--ags_stream_recycling_get_type
--ags_stream_recycling_new
--ags_route_lv2_audio_get_type
--ags_route_lv2_audio_new
--ags_feed_channel_get_type
--ags_feed_channel_new
--ags_copy_pattern_audio_get_type
--ags_copy_pattern_audio_new
--ags_play_audio_signal_get_type
--ags_play_audio_signal_new
--ags_route_dssi_audio_run_get_type
--ags_route_dssi_audio_run_new
--ags_stream_get_type
--ags_stream
--ags_stream_new
--ags_volume_audio_signal_get_type
--ags_volume_audio_signal_new
--ags_route_lv2_audio_run_get_type
--ags_route_lv2_audio_run_new
--ags_record_midi_audio_get_type
--ags_record_midi_audio_new
--ags_stream_channel_get_type
--ags_stream_channel_new
--ags_play_audio_file_get_type
--ags_play_audio_file_new
--ags_mute_audio_run_get_type
--ags_mute_audio_run_new
--ags_copy_recycling_get_type
--ags_copy_recycling_new
--ags_delay_audio_run_get_type
--ags_delay_audio_run_notation_alloc_output
--ags_delay_audio_run_notation_alloc_input
--ags_delay_audio_run_notation_count
--ags_delay_audio_run_sequencer_alloc_output
--ags_delay_audio_run_sequencer_alloc_input
--ags_delay_audio_run_sequencer_count
--ags_delay_audio_run_new
--ags_copy_channel_run_get_type
--ags_copy_channel_run_new
--ags_play_channel_run_master_get_type
--ags_play_channel_run_master_streamer_free
--ags_play_channel_run_master_streamer_alloc
--ags_play_channel_run_master_find_streamer
--ags_play_channel_run_master_new
--ags_feed_recycling_get_type
--ags_feed_recycling_new
--ags_feed_audio_signal_get_type
--ags_feed_audio_signal_new
--ags_stream_audio_signal_get_type
--ags_stream_audio_signal_new
--ags_copy_notation_audio_get_type
--ags_copy_notation_audio_new
--ags_copy_pattern_audio_run_get_type
--ags_copy_pattern_audio_run_new
--ags_volume_channel_get_type
--ags_volume_channel_new
--ags_playback_domain_get_type
--ags_playback_domain_new
--ags_jack_devout_get_type
--ags_jack_devout_error_quark
--ags_jack_devout_switch_buffer_flag
--ags_jack_devout_adjust_delay_and_attack
--ags_jack_devout_realloc_buffer
--ags_jack_devout_new
--ags_jack_client_get_type
--ags_jack_client_find_uuid
--ags_jack_client_find
--ags_jack_client_open
--ags_jack_client_add_device
--ags_jack_client_remove_device
--ags_jack_client_add_port
--ags_jack_client_remove_port
--ags_jack_client_activate
--ags_jack_client_deactivate
--ags_jack_client_new
--ags_jack_server_get_type
--ags_jack_server_find_url
--ags_jack_server_find_client
--ags_jack_server_find_port
--ags_jack_server_add_client
--ags_jack_server_remove_client
--ags_jack_server_connect_client
--ags_jack_server_new
--ags_jack_port_get_type
--ags_jack_port_find
--ags_jack_port_register
--ags_jack_port_unregister
--ags_jack_port_new
--ags_jack_midiin_get_type
--ags_jack_midiin_error_quark
--ags_jack_midiin_new
--ags_message_key_on
--ags_message_key_off
--ags_message_key_pressure
--ags_message_change_parameter
--ags_message_change_mode
--ags_message_pitch_bend
--ags_message_set_bpm
--ags_message_set_delay_factor
--ags_recycling_get_type
--ags_recycling_set_soundcard
--ags_recycling_add_audio_signal
--ags_recycling_remove_audio_signal
--ags_recycling_create_audio_signal_with_defaults
--ags_recycling_create_audio_signal_with_frame_count
--ags_recycling_position
--ags_recycling_find_next_channel
--ags_recycling_new
--ags_recall_recycling_dummy_get_type
--ags_recall_recycling_dummy_new
--ags_pattern_get_type
--ags_pattern_find_near_timestamp
--ags_pattern_set_dim
--ags_pattern_is_empty
--ags_pattern_get_bit
--ags_pattern_toggle_bit
--ags_pattern_new
-+ags_recall_audio_get_type
-+ags_recall_audio_new
- ags_channel_get_type
- ags_channel_error_quark
- ags_channel_find_recall
-@@ -705,295 +1023,107 @@
- ags_channel_tillrecycling_cancel
- ags_channel_recursive_reset_recall_ids
- ags_channel_new
--ags_recall_audio_run_get_type
--ags_recall_audio_run_new
--ags_recall_channel_get_type
--ags_recall_channel_find_channel
--ags_recall_channel_new
--ags_recycling_context_get_type
--ags_recycling_context_replace
--ags_recycling_context_add
--ags_recycling_context_remove
--ags_recycling_context_insert
--ags_recycling_context_get_toplevel
--ags_recycling_context_find
--ags_recycling_context_find_child
--ags_recycling_context_find_parent
--ags_recycling_context_add_child
--ags_recycling_context_remove_child
--ags_recycling_context_get_child_recall_id
--ags_recycling_context_reset_recycling
--ags_recycling_context_new
--ags_playable_get_type
--ags_playable_error_quark
--ags_playable_open
--ags_playable_rw_open
--ags_playable_level_count
--ags_playable_nth_level
--ags_playable_selected_level
--ags_playable_sublevel_names
--ags_playable_level_select
--ags_playable_level_up
--ags_playable_iter_start
--ags_playable_iter_next
--ags_playable_info
--ags_playable_get_samplerate
--ags_playable_get_format
--ags_playable_read
--ags_playable_write
--ags_playable_flush
--ags_playable_seek
--ags_playable_close
--ags_playable_read_audio_signal
--ags_audio_buffer_util_format_from_soundcard
--ags_audio_buffer_util_get_copy_mode
--ags_audio_buffer_util_clear_float
--ags_audio_buffer_util_clear_double
--ags_audio_buffer_util_clear_buffer
--ags_audio_buffer_util_envelope_s8
--ags_audio_buffer_util_envelope_s16
--ags_audio_buffer_util_envelope_s24
--ags_audio_buffer_util_envelope_s32
--ags_audio_buffer_util_envelope_s64
--ags_audio_buffer_util_envelope_float
--ags_audio_buffer_util_envelope_double
--ags_audio_buffer_util_envelope
--ags_audio_buffer_util_volume_s8
--ags_audio_buffer_util_volume_s16
--ags_audio_buffer_util_volume_s24
--ags_audio_buffer_util_volume_s32
--ags_audio_buffer_util_volume_s64
--ags_audio_buffer_util_volume_float
--ags_audio_buffer_util_volume_double
--ags_audio_buffer_util_volume
--ags_audio_buffer_util_resample_s8
--ags_audio_buffer_util_resample_s16
--ags_audio_buffer_util_resample_s24
--ags_audio_buffer_util_resample_s32
--ags_audio_buffer_util_resample_s64
--ags_audio_buffer_util_resample_float
--ags_audio_buffer_util_resample_double
--ags_audio_buffer_util_resample
--ags_audio_buffer_util_copy_s8_to_s8
--ags_audio_buffer_util_copy_s8_to_s16
--ags_audio_buffer_util_copy_s8_to_s24
--ags_audio_buffer_util_copy_s8_to_s32
--ags_audio_buffer_util_copy_s8_to_s64
--ags_audio_buffer_util_copy_s8_to_float
--ags_audio_buffer_util_copy_s8_to_double
--ags_audio_buffer_util_copy_s16_to_s8
--ags_audio_buffer_util_copy_s16_to_s16
--ags_audio_buffer_util_copy_s16_to_s24
--ags_audio_buffer_util_copy_s16_to_s32
--ags_audio_buffer_util_copy_s16_to_s64
--ags_audio_buffer_util_copy_s16_to_float
--ags_audio_buffer_util_copy_s16_to_double
--ags_audio_buffer_util_copy_s24_to_s8
--ags_audio_buffer_util_copy_s24_to_s16
--ags_audio_buffer_util_copy_s24_to_s24
--ags_audio_buffer_util_copy_s24_to_s32
--ags_audio_buffer_util_copy_s24_to_s64
--ags_audio_buffer_util_copy_s24_to_float
--ags_audio_buffer_util_copy_s24_to_double
--ags_audio_buffer_util_copy_s32_to_s8
--ags_audio_buffer_util_copy_s32_to_s16
--ags_audio_buffer_util_copy_s32_to_s24
--ags_audio_buffer_util_copy_s32_to_s32
--ags_audio_buffer_util_copy_s32_to_s64
--ags_audio_buffer_util_copy_s32_to_float
--ags_audio_buffer_util_copy_s32_to_double
--ags_audio_buffer_util_copy_s64_to_s8
--ags_audio_buffer_util_copy_s64_to_s16
--ags_audio_buffer_util_copy_s64_to_s24
--ags_audio_buffer_util_copy_s64_to_s32
--ags_audio_buffer_util_copy_s64_to_s64
--ags_audio_buffer_util_copy_s64_to_float
--ags_audio_buffer_util_copy_s64_to_double
--ags_audio_buffer_util_copy_float_to_s8
--ags_audio_buffer_util_copy_float_to_s16
--ags_audio_buffer_util_copy_float_to_s24
--ags_audio_buffer_util_copy_float_to_s32
--ags_audio_buffer_util_copy_float_to_s64
--ags_audio_buffer_util_copy_float_to_float
--ags_audio_buffer_util_copy_float_to_double
--ags_audio_buffer_util_copy_double_to_s8
--ags_audio_buffer_util_copy_double_to_s16
--ags_audio_buffer_util_copy_double_to_s24
--ags_audio_buffer_util_copy_double_to_s32
--ags_audio_buffer_util_copy_double_to_s64
--ags_audio_buffer_util_copy_double_to_float
--ags_audio_buffer_util_copy_double_to_double
--ags_audio_buffer_util_copy_buffer_to_buffer
--ags_recall_audio_signal_get_type
--ags_recall_audio_signal_new
--ags_notation_get_type
--ags_notation_find_near_timestamp
--ags_notation_add_note
--ags_notation_remove_note_at_position
--ags_notation_get_selection
--ags_notation_is_note_selected
--ags_notation_find_point
--ags_notation_find_region
--ags_notation_free_selection
--ags_notation_add_all_to_selection
--ags_notation_add_point_to_selection
--ags_notation_remove_point_from_selection
--ags_notation_add_region_to_selection
--ags_notation_remove_region_from_selection
--ags_notation_copy_selection
--ags_notation_cut_selection
--ags_notation_insert_from_clipboard
--ags_notation_get_current
--ags_notation_new
--ags_port_get_type
--ags_port_safe_read
--ags_port_safe_write
--ags_port_safe_write_raw
--ags_port_safe_get_property
--ags_port_safe_set_property
--ags_port_find_specifier
--ags_port_new
--ags_recall_ladspa_get_type
--ags_recall_ladspa_load
--ags_recall_ladspa_load_ports
--ags_recall_ladspa_load_conversion
--ags_recall_ladspa_find
--ags_recall_ladspa_new
--ags_channel_iter_alloc
--ags_channel_iter_free
--ags_channel_iter_prev
--ags_channel_iter_next
--ags_recall_dssi_get_type
--ags_recall_dssi_load
--ags_recall_dssi_load_ports
--ags_recall_dssi_load_conversion
--ags_recall_dssi_find
--ags_recall_dssi_new
--ags_recall_ladspa_run_get_type
--ags_recall_ladspa_run_new
--ags_input_get_type
--ags_input_open_file
--ags_input_apply_synth
--ags_input_new
--ags_synth_generator_get_type
--ags_synth_generator_new
--ags_audio_file_link_get_type
--ags_audio_file_link_new
--ags_audio_file_get_type
--ags_audio_file_check_suffix
--ags_audio_file_open
--ags_audio_file_open_from_data
--ags_audio_file_rw_open
--ags_audio_file_close
--ags_audio_file_read_audio_signal
--ags_audio_file_seek
--ags_audio_file_write
--ags_audio_file_flush
--ags_audio_file_new
--ags_sndfile_get_type
--ags_sndfile_new
--ags_ipatch_dls2_reader_get_type
--ags_ipatch_dls2_reader_new
--ags_ipatch_get_type
--ags_ipatch_check_suffix
--ags_ipatch_new
--ags_file_read_soundcard
--ags_file_write_soundcard
--ags_file_read_soundcard_list
--ags_file_write_soundcard_list
--ags_file_read_playback
--ags_file_write_playback
--ags_file_read_playback_list
--ags_file_write_playback_list
--ags_file_read_audio
--ags_file_write_audio
--ags_file_read_audio_list
--ags_file_write_audio_list
--ags_file_read_channel
--ags_file_write_channel
--ags_file_read_channel_list
--ags_file_write_channel_list
--ags_file_read_input
--ags_file_write_input
--ags_file_read_output
--ags_file_write_output
--ags_file_read_recall
--ags_file_write_recall
--ags_file_read_recall_list
--ags_file_write_recall_list
--ags_file_read_recall_container
--ags_file_write_recall_container
--ags_file_read_recall_container_list
--ags_file_write_recall_container_list
--ags_file_read_recall_audio
--ags_file_write_recall_audio
--ags_file_read_recall_audio_run
--ags_file_write_recall_audio_run
--ags_file_read_recall_channel
--ags_file_write_recall_channel
--ags_file_read_recall_channel_run
--ags_file_write_recall_channel_run
--ags_file_read_recall_recycling
--ags_file_write_recall_recycling
--ags_file_read_recall_audio_signal
--ags_file_write_recall_audio_signal
--ags_file_read_port
--ags_file_write_port
--ags_file_read_port_list
--ags_file_write_port_list
--ags_file_read_recycling
--ags_file_write_recycling
--ags_file_read_recycling_list
--ags_file_write_recycling_list
--ags_file_read_audio_signal
--ags_file_write_audio_signal
--ags_file_read_audio_signal_list
--ags_file_write_audio_signal_list
--ags_file_read_stream
--ags_file_write_stream
--ags_file_read_stream_list
--ags_file_write_stream_list
--ags_file_read_pattern
--ags_file_write_pattern
--ags_file_read_pattern_list
--ags_file_write_pattern_list
--ags_file_read_pattern_data
--ags_file_write_pattern_data
--ags_file_read_pattern_data_list
--ags_file_write_pattern_data_list
--ags_file_read_notation
--ags_file_write_notation
--ags_file_read_notation_list
--ags_file_write_notation_list
--ags_file_read_note
--ags_file_write_note
--ags_file_read_note_list
--ags_file_write_note_list
--ags_file_read_automation
--ags_file_write_automation
--ags_file_read_automation_list
--ags_file_write_automation_list
--ags_file_read_acceleration
--ags_file_write_acceleration
--ags_file_read_acceleration_list
--ags_file_write_acceleration_list
--ags_file_read_task
--ags_file_write_task
--ags_file_read_task_list
--ags_file_write_task_list
--ags_file_read_embedded_audio
--ags_file_write_embedded_audio
--ags_file_read_embedded_audio_list
--ags_file_write_embedded_audio_list
--ags_ipatch_sf2_reader_get_type
--ags_ipatch_sf2_reader_new
--ags_recall_container_get_type
--ags_recall_container_get_recall_audio
--ags_recall_container_get_recall_audio_run
--ags_recall_container_get_recall_channel
--ags_recall_container_get_recall_channel_run
--ags_recall_container_find
--ags_recall_container_new
-+ags_audio_signal_get_type
-+ags_stream_alloc
-+ags_stream_free
-+ags_audio_signal_set_samplerate
-+ags_audio_signal_set_buffer_size
-+ags_audio_signal_set_format
-+ags_audio_signal_get_length_till_current
-+ags_audio_signal_add_stream
-+ags_audio_signal_stream_resize
-+ags_audio_signal_stream_safe_resize
-+ags_audio_signal_realloc_buffer_size
-+ags_audio_signal_duplicate_stream
-+ags_audio_signal_get_template
-+ags_audio_signal_get_stream_current
-+ags_audio_signal_get_by_recall_id
-+ags_audio_signal_tile
-+ags_audio_signal_scale
-+ags_audio_signal_feed
-+ags_audio_signal_envelope
-+ags_audio_signal_new
-+ags_audio_signal_new_with_length
-+ags_audio_application_context_get_type
-+ags_audio_application_context_new
-+ags_audio_connection_get_type
-+ags_audio_connection_find
-+ags_audio_connection_new
-+ags_message_key_on
-+ags_message_key_off
-+ags_message_key_pressure
-+ags_message_change_parameter
-+ags_message_change_mode
-+ags_message_pitch_bend
-+ags_message_set_bpm
-+ags_message_set_delay_factor
-+ags_recall_id_get_type
-+ags_recall_id_get_run_stage
-+ags_recall_id_set_run_stage
-+ags_recall_id_unset_run_stage
-+ags_recall_id_find_recycling_context
-+ags_recall_id_find_parent_recycling_context
-+ags_recall_id_new
-+ags_recall_dependency_get_type
-+ags_recall_dependency_find_dependency
-+ags_recall_dependency_find_dependency_by_provider
-+ags_recall_dependency_resolve
-+ags_recall_dependency_new
-+ags_midi_builder_get_type
-+ags_midi_builder_header_alloc
-+ags_midi_builder_header_free
-+ags_midi_builder_track_alloc
-+ags_midi_builder_track_free
-+ags_midi_builder_track_find_delta_time_with_track_name
-+ags_midi_builder_track_insert_midi_message
-+ags_midi_builder_track_get_delta_time_offset
-+ags_midi_builder_midi_putc
-+ags_midi_builder_on_error
-+ags_midi_builder_append_header
-+ags_midi_builder_append_track
-+ags_midi_builder_append_key_on
-+ags_midi_builder_append_key_off
-+ags_midi_builder_append_key_pressure
-+ags_midi_builder_append_change_parameter
-+ags_midi_builder_append_change_pitch_bend
-+ags_midi_builder_append_change_program
-+ags_midi_builder_append_change_pressure
-+ags_midi_builder_append_sysex
-+ags_midi_builder_append_quarter_frame
-+ags_midi_builder_append_song_position
-+ags_midi_builder_append_song_select
-+ags_midi_builder_append_tune_request
-+ags_midi_builder_append_sequence_number
-+ags_midi_builder_append_smtpe
-+ags_midi_builder_append_tempo
-+ags_midi_builder_append_time_signature
-+ags_midi_builder_append_key_signature
-+ags_midi_builder_append_sequencer_meta_event
-+ags_midi_builder_append_text_event
-+ags_midi_builder_append_xml_node
-+ags_midi_builder_from_xml_doc
-+ags_midi_builder_build
-+ags_midi_builder_new
-+ags_midi_util_is_key_on
-+ags_midi_util_is_key_off
-+ags_midi_util_is_key_pressure
-+ags_midi_util_is_change_parameter
-+ags_midi_util_is_pitch_bend
-+ags_midi_util_is_change_program
-+ags_midi_util_is_change_pressure
-+ags_midi_util_is_sysex
-+ags_midi_util_is_quarter_frame
-+ags_midi_util_is_song_position
-+ags_midi_util_is_song_select
-+ags_midi_util_is_tune_request
-+ags_midi_util_is_meta_event
-+ags_midi_util_to_smf
-+ags_midi_util_envelope_to_velocity
-+ags_midi_util_velocity_to_envelope
-+ags_midi_util_envelope_to_pressure
-+ags_midi_util_pressure_to_envelope
-+ags_midi_util_delta_time_to_offset
-+ags_midi_util_offset_to_delta_time
- ags_midi_parser_get_type
- ags_midi_parser_read_gint16
- ags_midi_parser_read_gint24
-@@ -1029,26 +1159,39 @@
- ags_midi_parser_meta_misc
- ags_midi_parser_text_event
- ags_midi_parser_new
--ags_midi_util_is_key_on
--ags_midi_util_is_key_off
--ags_midi_util_is_key_pressure
--ags_midi_util_is_change_parameter
--ags_midi_util_is_pitch_bend
--ags_midi_util_is_change_program
--ags_midi_util_is_change_pressure
--ags_midi_util_is_sysex
--ags_midi_util_is_quarter_frame
--ags_midi_util_is_song_position
--ags_midi_util_is_song_select
--ags_midi_util_is_tune_request
--ags_midi_util_is_meta_event
--ags_midi_util_to_smf
--ags_midi_util_envelope_to_velocity
--ags_midi_util_velocity_to_envelope
--ags_midi_util_envelope_to_pressure
--ags_midi_util_pressure_to_envelope
--ags_midi_util_delta_time_to_offset
--ags_midi_util_offset_to_delta_time
-+ags_midi_file_writer_get_type
-+ags_midi_file_writer_write_bytes
-+ags_midi_file_writer_write_channel_message
-+ags_midi_file_writer_write_status_message
-+ags_midi_file_writer_new
-+ags_midi_file_get_type
-+ags_midi_file_open
-+ags_midi_file_open_from_data
-+ags_midi_file_rw_open
-+ags_midi_file_close
-+ags_midi_file_read
-+ags_midi_file_write
-+ags_midi_file_seek
-+ags_midi_file_flush
-+ags_midi_file_read_gint16
-+ags_midi_file_read_gint24
-+ags_midi_file_read_gint32
-+ags_midi_file_read_varlength
-+ags_midi_file_read_text
-+ags_midi_file_write_gint16
-+ags_midi_file_write_gint24
-+ags_midi_file_write_gint32
-+ags_midi_file_write_varlength
-+ags_midi_file_write_text
-+ags_midi_file_read_header
-+ags_midi_file_write_header
-+ags_midi_file_read_track_data
-+ags_midi_file_write_track_data
-+ags_midi_file_new
-+ags_midi_file_reader_get_type
-+ags_midi_file_reader_read_channel_message
-+ags_midi_file_reader_read_status_message
-+ags_midi_file_reader_new
- ags_midi_buffer_util_get_varlength_size
- ags_midi_buffer_util_put_varlength
- ags_midi_buffer_util_get_varlength
-@@ -1104,144 +1247,3 @@
- ags_midi_buffer_util_get_end_of_track
- ags_midi_buffer_util_seek_message
- ags_midi_buffer_util_decode
--ags_midi_builder_get_type
--ags_midi_builder_header_alloc
--ags_midi_builder_header_free
--ags_midi_builder_track_alloc
--ags_midi_builder_track_free
--ags_midi_builder_track_find_delta_time_with_track_name
--ags_midi_builder_track_insert_midi_message
--ags_midi_builder_track_get_delta_time_offset
--ags_midi_builder_midi_putc
--ags_midi_builder_on_error
--ags_midi_builder_append_header
--ags_midi_builder_append_track
--ags_midi_builder_append_key_on
--ags_midi_builder_append_key_off
--ags_midi_builder_append_key_pressure
--ags_midi_builder_append_change_parameter
--ags_midi_builder_append_change_pitch_bend
--ags_midi_builder_append_change_program
--ags_midi_builder_append_change_pressure
--ags_midi_builder_append_sysex
--ags_midi_builder_append_quarter_frame
--ags_midi_builder_append_song_position
--ags_midi_builder_append_song_select
--ags_midi_builder_append_tune_request
--ags_midi_builder_append_sequence_number
--ags_midi_builder_append_smtpe
--ags_midi_builder_append_tempo
--ags_midi_builder_append_time_signature
--ags_midi_builder_append_key_signature
--ags_midi_builder_append_sequencer_meta_event
--ags_midi_builder_append_text_event
--ags_midi_builder_append_xml_node
--ags_midi_builder_from_xml_doc
--ags_midi_builder_build
--ags_midi_builder_new
--ags_midi_file_get_type
--ags_midi_file_open
--ags_midi_file_open_from_data
--ags_midi_file_rw_open
--ags_midi_file_close
--ags_midi_file_read
--ags_midi_file_write
--ags_midi_file_seek
--ags_midi_file_flush
--ags_midi_file_read_gint16
--ags_midi_file_read_gint24
--ags_midi_file_read_gint32
--ags_midi_file_read_varlength
--ags_midi_file_read_text
--ags_midi_file_write_gint16
--ags_midi_file_write_gint24
--ags_midi_file_write_gint32
--ags_midi_file_write_varlength
--ags_midi_file_write_text
--ags_midi_file_read_header
--ags_midi_file_write_header
--ags_midi_file_read_track_data
--ags_midi_file_write_track_data
--ags_midi_file_new
--ags_midi_file_writer_get_type
--ags_midi_file_writer_write_bytes
--ags_midi_file_writer_write_channel_message
--ags_midi_file_writer_write_status_message
--ags_midi_file_writer_new
--ags_midi_file_reader_get_type
--ags_midi_file_reader_read_channel_message
--ags_midi_file_reader_read_status_message
--ags_midi_file_reader_new
--ags_remote_channel_get_type
--ags_remote_channel_error_quark
--ags_remote_channel_new
--ags_remote_output_get_type
--ags_remote_output_new
--ags_remote_input_get_type
--ags_remote_input_new
--ags_recall_audio_get_type
--ags_recall_audio_new
--ags_acceleration_get_type
--ags_acceleration_duplicate
--ags_acceleration_new
--ags_recall_factory_get_type
--ags_recall_factory_create
--ags_recall_factory_remove
--ags_recall_factory_get_instance
--ags_recall_factory_new
--ags_recall_recycling_get_type
--ags_recall_recycling_get_child_source
--ags_recall_recycling_new
--ags_recall_lv2_get_type
--ags_recall_lv2_load
--ags_recall_lv2_load_ports
--ags_recall_lv2_load_conversion
--ags_recall_lv2_find
--ags_recall_lv2_new
--ags_devout_get_type
--ags_devout_error_quark
--ags_devout_switch_buffer_flag
--ags_devout_adjust_delay_and_attack
--ags_devout_realloc_buffer
--ags_devout_new
--ags_audio_get_type
--ags_audio_set_soundcard
--ags_audio_set_flags
--ags_audio_unset_flags
--ags_audio_check_connection
--ags_audio_set_audio_channels
--ags_audio_set_pads
--ags_audio_set_samplerate
--ags_audio_set_buffer_size
--ags_audio_set_format
--ags_audio_set_sequence_length
--ags_audio_add_audio_connection
--ags_audio_remove_audio_connection
--ags_audio_add_notation
--ags_audio_remove_notation
--ags_audio_add_automation
--ags_audio_remove_automation
--ags_audio_add_recall_id
--ags_audio_remove_recall_id
--ags_audio_add_recycling_context
--ags_audio_remove_recycling_context
--ags_audio_add_recall_container
--ags_audio_remove_recall_container
--ags_audio_add_recall
--ags_audio_remove_recall
--ags_audio_recall_change_state
--ags_audio_init_run
--ags_audio_duplicate_recall
--ags_audio_init_recall
--ags_audio_resolve_recall
--ags_audio_is_playing
--ags_audio_play
--ags_audio_tact
--ags_audio_done
--ags_audio_cancel
--ags_audio_remove
--ags_audio_find_port
--ags_audio_open_files
--ags_audio_recursive_set_property
--ags_audio_recursive_play_init
--ags_audio_new
diff --git a/debian/patches/series b/debian/patches/series
deleted file mode 100644
index 6877fea..0000000
--- a/debian/patches/series
+++ /dev/null
@@ -1,4 +0,0 @@
-fix-configure.patch
-fix-changelog.patch
-fix-generated-symbols.patch
-fix-critical-bugs.patch
--
gsequencer packaging
More information about the pkg-multimedia-commits
mailing list