Hello community,

here is the log from the commit of package gsequencer for openSUSE:Factory 
checked in at 2018-03-12 12:13:45
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/gsequencer (Old)
 and      /work/SRC/openSUSE:Factory/.gsequencer.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "gsequencer"

Mon Mar 12 12:13:45 2018 rev:9 rq:585777 version:1.4.21

Changes:
--------
--- /work/SRC/openSUSE:Factory/gsequencer/gsequencer.changes    2018-02-05 
10:53:54.137806004 +0100
+++ /work/SRC/openSUSE:Factory/.gsequencer.new/gsequencer.changes       
2018-03-12 12:13:52.802852414 +0100
@@ -1,0 +2,6 @@
+Sun Mar 11 16:38:32 UTC 2018 - jkraehem...@gmail.com
+
+- New upstream v1.4.21 reverted the use of GMainLoop for pulseaudio
+  because of a race-condition. Faster lv2 plugin loading.
+
+-------------------------------------------------------------------

Old:
----
  gsequencer-1.4.18.tar.gz

New:
----
  gsequencer-1.4.21.tar.gz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ gsequencer.spec ++++++
--- /var/tmp/diff_new_pack.74x5Fx/_old  2018-03-12 12:13:54.638786907 +0100
+++ /var/tmp/diff_new_pack.74x5Fx/_new  2018-03-12 12:13:54.642786764 +0100
@@ -18,7 +18,7 @@
 %define libagssonumber 1
 %define libgsequencersonumber 0
 Name:           gsequencer
-Version:        1.4.18
+Version:        1.4.21
 Release:        0
 Summary:        Audio processing engine
 License:        GPL-3.0+ AND AGPL-3.0+ AND GFDL-1.3

++++++ gsequencer-1.4.18.tar.gz -> gsequencer-1.4.21.tar.gz ++++++
++++ 3133 lines of diff (skipped)
++++    retrying with extended exclude list
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/gsequencer-1.4.18/ChangeLog new/gsequencer-1.4.21/ChangeLog
--- old/gsequencer-1.4.18/ChangeLog     2018-02-02 22:37:51.000000000 +0100
+++ new/gsequencer-1.4.21/ChangeLog     2018-03-04 21:12:52.000000000 +0100
@@ -1,3 +1,21 @@
+ags (1.4.21)
+
+       [ Joël Krähemann (Maintainer of Advanced Gtk+ Sequencer) ]
+       * work-around reverted pulseaudio GMainLoop integration
+       * implemented property AgsBasePlugin:id
+       * improved ags_lv2_manager.c to be faster
+
+ags (1.4.20)
+
+       [ Joël Krähemann (Maintainer of Advanced Gtk+ Sequencer) ]
+       * fixed ags_functional_audio_test.c to create notation as needed
+       * defaulted to disable OSS4 dependency
+
+ags (1.4.19)
+
+       [ Joël Krähemann (Maintainer of Advanced Gtk+ Sequencer) ]
+       * fixed ags_audio_set_audio_channels() to remove unneeded notation, 
automation and wave objects
+
 ags (1.4.18)
 
        [ Joël Krähemann (Maintainer of Advanced Gtk+ Sequencer) ]
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/gsequencer-1.4.18/ags/X/ags_xorg_application_context.c 
new/gsequencer-1.4.21/ags/X/ags_xorg_application_context.c
--- old/gsequencer-1.4.18/ags/X/ags_xorg_application_context.c  2018-01-29 
16:54:08.000000000 +0100
+++ new/gsequencer-1.4.21/ags/X/ags_xorg_application_context.c  2018-03-04 
20:27:35.000000000 +0100
@@ -1692,7 +1692,7 @@
   if(has_pulse){
     ags_pulse_server_connect_client(pulse_server);
 
-    //    ags_pulse_server_start_poll(pulse_server);
+    ags_pulse_server_start_poll(pulse_server);
   }
 
   if(has_jack){
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/gsequencer-1.4.18/ags/audio/ags_audio.c 
new/gsequencer-1.4.21/ags/audio/ags_audio.c
--- old/gsequencer-1.4.18/ags/audio/ags_audio.c 2018-02-02 22:24:33.000000000 
+0100
+++ new/gsequencer-1.4.21/ags/audio/ags_audio.c 2018-03-04 20:27:35.000000000 
+0100
@@ -2719,10 +2719,9 @@
   auto void ags_audio_set_audio_channels_grow(GType type);
   auto void ags_audio_set_audio_channels_shrink_zero();
   auto void ags_audio_set_audio_channels_shrink();
-  auto void ags_audio_set_audio_channels_grow_notation();
+
   auto void ags_audio_set_audio_channels_shrink_notation();
   auto void ags_audio_set_audio_channels_shrink_automation();
-  auto void ags_audio_set_audio_channels_grow_wave();
   auto void ags_audio_set_audio_channels_shrink_wave();
   
   void ags_audio_set_audio_channels_init_parameters(GType type){
@@ -3061,124 +3060,67 @@
     }
   }
   
-  void ags_audio_set_audio_channels_grow_notation(){
-    GList *list;
-    guint i;
-
-    i = audio->audio_channels;
-
-#ifdef AGS_DEBUG
-    g_message("ags_audio_set_audio_channels_grow_notation\n");
-#endif
-
-    if(audio->audio_channels == 0){
-      audio->notation =
-       list = g_list_alloc();
-      goto ags_audio_set_audio_channels_grow_notation0;
-    }else{
-      list = g_list_nth(audio->notation, audio->audio_channels - 1);
-    }
-
-    for(; i < audio_channels; i++){
-      list->next = g_list_alloc();
-      list->next->prev = list;
-      list = list->next;
-
-    ags_audio_set_audio_channels_grow_notation0:
-      list->data = (gpointer) ags_notation_new((GObject *) audio,
-                                              i);
-    } 
-  }
-  
   void ags_audio_set_audio_channels_shrink_notation(){
-    GList *list, *list_next;
+    GList *list_start, *list;
 
-    list = g_list_nth(audio->notation, audio_channels);
-
-    if(audio_channels == 0){
-      audio->notation = NULL;
-    }else{
-      list->prev->next = NULL;
-    }
+    list = 
+      list_start = g_list_copy(audio->notation);
 
     while(list != NULL){
-      list_next = list->next;
-
-      g_object_unref((GObject *) list->data);
-      g_list_free1(list);
+      if(AGS_NOTATION(list->data)->audio_channel >= audio_channels){
+       audio->notation = g_list_remove(audio->notation,
+                                       list->data);
 
-      list = list_next;
+       g_object_run_dispose(list->data);
+       g_object_unref(list->data);
+      }
+      
+      list = list->next;
     }
+
+    g_list_free(list_start);
   }
 
   void ags_audio_set_audio_channels_shrink_automation(){
-    GList *automation, *automation_next;
+    GList *list_start, *list;
 
-    automation = audio->automation;
+    list = 
+      list_start = g_list_copy(audio->automation);
 
-    while(automation != NULL){
-      automation_next = automation->next;
+    while(list != NULL){
+      if(AGS_AUTOMATION(list->data)->line % audio_channels_old >= 
audio_channels){
+       audio->automation = g_list_remove(audio->automation,
+                                         list->data);
 
-      if(AGS_AUTOMATION(automation->data)->channel_type != G_TYPE_NONE){
-       if(audio_channels == 0 ||
-          AGS_AUTOMATION(automation->data)->line % audio_channels_old >= 
audio_channels){
-         ags_audio_remove_automation(audio,
-                                     automation->data);
-       }
+       g_object_run_dispose(list->data);
+       g_object_unref(list->data);
       }
-
-      automation = automation_next;
-    }
-  }
-
-  void ags_audio_set_audio_channels_grow_wave(){
-    GList *list;
-    guint i;
-
-    i = audio->audio_channels;
-
-#ifdef AGS_DEBUG
-    g_message("ags_audio_set_audio_channels_grow_wave\n");
-#endif
-
-    if(audio->audio_channels == 0){
-      audio->wave =
-       list = g_list_alloc();
-      goto ags_audio_set_audio_channels_grow_wave0;
-    }else{
-      list = g_list_nth(audio->wave, audio->audio_channels - 1);
-    }
-
-    for(; i < audio_channels; i++){
-      list->next = g_list_alloc();
-      list->next->prev = list;
+      
       list = list->next;
+    }
 
-    ags_audio_set_audio_channels_grow_wave0:
-      list->data = (gpointer) ags_wave_new((GObject *) audio,
-                                          i);
-    } 
+    g_list_free(list_start);
   }
-  
-  void ags_audio_set_audio_channels_shrink_wave(){
-    GList *list, *list_next;
 
-    list = g_list_nth(audio->wave, audio_channels);
+  void ags_audio_set_audio_channels_shrink_wave(){
+    GList *list_start, *list;
 
-    if(audio_channels == 0){
-      audio->wave = NULL;
-    }else{
-      list->prev->next = NULL;
-    }
+    list = 
+      list_start = g_list_copy(audio->wave);
 
     while(list != NULL){
-      list_next = list->next;
+      if(AGS_WAVE(list->data)->audio_channel >= audio_channels){
+       audio->wave = g_list_remove(audio->wave,
+                                   list->data);
 
-      g_object_unref((GObject *) list->data);
-      g_list_free1(list);
-
-      list = list_next;
+       g_object_run_dispose(list->data);
+       g_object_unref(list->data);
+      }
+      
+      list = list->next;
     }
+
+    g_list_free(list_start);
   }
   
   /* entry point */
@@ -3193,14 +3135,6 @@
     guint i;
     
     /* grow audio channels */
-    if((AGS_AUDIO_HAS_NOTATION & (audio->flags)) != 0){
-      ags_audio_set_audio_channels_grow_notation();
-    }
-
-    if((AGS_AUDIO_HAS_WAVE & (audio->flags)) != 0){
-      ags_audio_set_audio_channels_grow_wave();
-    }
-
     if(audio->input_pads > 0 &&
        (AGS_AUDIO_NO_INPUT & (audio->flags)) == 0){
       ags_audio_set_audio_channels_init_parameters(AGS_TYPE_INPUT);
@@ -3242,11 +3176,11 @@
     /* shrink audio channels */
     ags_audio_set_audio_channels_shrink_automation();
     
-    if((AGS_AUDIO_HAS_NOTATION & audio->flags) != 0){
+    if((AGS_AUDIO_HAS_NOTATION & (audio->flags)) != 0){
       ags_audio_set_audio_channels_shrink_notation();
     }
 
-    if((AGS_AUDIO_HAS_WAVE & audio->flags) != 0){
+    if((AGS_AUDIO_HAS_WAVE & (audio->flags)) != 0){
       ags_audio_set_audio_channels_shrink_wave();
     }
 
@@ -3405,12 +3339,10 @@
   auto void ags_audio_set_pads_unlink_all(AgsChannel *channel);
   auto void ags_audio_set_pads_shrink_zero(AgsChannel *channel);
   auto void ags_audio_set_pads_shrink(AgsChannel *channel);
-  auto void ags_audio_set_pads_alloc_notation();
+
   auto void ags_audio_set_pads_free_notation();
-  auto void ags_audio_set_pads_add_notes();
   auto void ags_audio_set_pads_remove_notes();
   auto void ags_audio_set_pads_shrink_automation();
-  auto void ags_audio_set_pads_alloc_wave();
   auto void ags_audio_set_pads_free_wave();
   
   void ags_audio_set_pads_init_parameters(){
@@ -3663,168 +3595,91 @@
     }
   }
 
-  void ags_audio_set_pads_alloc_notation(){
-    GList *list;
-    
-    guint i;
-
-#ifdef AGS_DEBUG
-    g_message("ags_audio_set_pads_alloc_notation\n");
-#endif
-
-    if(audio->audio_channels > 0){
-      audio->notation =
-       list = g_list_alloc();
-      i = 0;
-      goto ags_audio_set_pads_alloc_notation0;
-    }else{
-      return;
-    }
-
-    for(; i < audio->audio_channels; i++){
-      list->next = g_list_alloc();
-      list->next->prev = list;
-      list = list->next;
-    ags_audio_set_pads_alloc_notation0:
-
-      list->data = (gpointer) ags_notation_new((GObject *) audio,
-                                              i);
-    }
-  }
-
   void ags_audio_set_pads_free_notation(){
-    GList *list, *list_next;
-
-    if(audio->audio_channels > 0){
-      list = audio->notation;
-      audio->notation = NULL;
-    }else{
-      return;
-    }
+    GList *list_start, *list;
 
+    list = 
+      list_start = g_list_copy(audio->notation);
+    
     while(list != NULL){
-      list_next = list->next;
-
-      g_object_unref(G_OBJECT(list->data));
-      g_list_free1(list);
-
-      list = list_next;
+      g_object_run_dispose((GObject *) list->data);
+      g_object_unref((GObject *) list->data);
+      
+      list = list->next;
     }
-  }
 
-  void ags_audio_set_pads_add_notes(){
-    /* -- useless --
-       GList *list;
-
-       list = audio->notation;
-
-       while(list != NULL){
-       AGS_NOTATION(list->data)->pads = pads;
-
-       list = list->next;
-       }
-    */
+    g_list_free(audio->notation);
+    g_list_free(list_start);
+    
+    audio->notation = NULL;
   }
   
   void ags_audio_set_pads_remove_notes(){
-    AgsNotation *notation;
-    GList *notation_i, *note, *note_next;
+    GList *notation;
+    GList *note_start, *note;
 
-    notation_i = audio->notation;
+    notation = audio->notation;
 
-    while(notation_i != NULL){
-      notation = AGS_NOTATION(notation_i->data);
-      note = notation->notes;
+    while(notation != NULL){
+      note =
+       note_start = g_list_copy(AGS_NOTATION(notation->data)->notes);
 
       while(note != NULL){
-       note_next = note->next;
-
        if(AGS_NOTE(note->data)->y >= pads){
-         if(note->prev != NULL)
-           note->prev->next = note_next;
-         else
-           notation->notes = note_next;
-
-         if(note_next != NULL)
-           note_next->prev = note->prev;
-
-         free(note->data);
-         g_list_free1(note);
+         AGS_NOTATION(notation->data)->notes = 
g_list_remove(AGS_NOTATION(notation->data)->notes,
+                                                             note->data);
+         
+         g_object_unref(note->data);
        }
 
-       note = note_next;
+       note = note->next;
       }
 
-      notation_i = notation_i->next;
+      g_list_free(note_start);
+      
+      notation = notation->next;
     }
   }
 
   void ags_audio_set_pads_shrink_automation(){
-    GList *automation, *automation_next;
+    GList *list_start, *list;
 
-    automation = audio->automation;
-
-    while(automation != NULL){
-      automation_next = automation->next;
-
-      if(AGS_AUTOMATION(automation->data)->channel_type == channel_type){
-       if(AGS_AUTOMATION(automation->data)->line >= pads * 
audio->audio_channels){
-         ags_audio_remove_automation(audio,
-                                     automation->data);
-       }
+    list = 
+      list_start = g_list_copy(audio->automation);
+    
+    while(list != NULL){
+      if(AGS_AUTOMATION(list->data)->channel_type == channel_type &&
+        AGS_AUTOMATION(list->data)->line >= pads * audio->audio_channels){
+       audio->automation = g_list_remove(audio->automation,
+                                         list->data);
+       
+       g_object_run_dispose((GObject *) list->data);
+       g_object_unref((GObject *) list->data);
       }
       
-      automation = automation_next;
-    }
-  }
-
-  void ags_audio_set_pads_alloc_wave(){
-    GList *list;
-    
-    guint i;
-
-#ifdef AGS_DEBUG
-    g_message("ags_audio_set_pads_alloc_wave\n");
-#endif
-
-    if(audio->audio_channels > 0){
-      audio->wave =
-       list = g_list_alloc();
-      i = 0;
-      goto ags_audio_set_pads_alloc_wave0;
-    }else{
-      return;
-    }
-
-    for(; i < audio->audio_channels; i++){
-      list->next = g_list_alloc();
-      list->next->prev = list;
       list = list->next;
-    ags_audio_set_pads_alloc_wave0:
-
-      list->data = (gpointer) ags_wave_new((GObject *) audio,
-                                          i);
     }
+
+    g_list_free(list_start);
   }
 
   void ags_audio_set_pads_free_wave(){
-    GList *list, *list_next;
-
-    if(audio->audio_channels > 0){
-      list = audio->wave;
-      audio->wave = NULL;
-    }else{
-      return;
-    }
+    GList *list_start, *list;
 
+    list = 
+      list_start = g_list_copy(audio->wave);
+    
     while(list != NULL){
-      list_next = list->next;
-
-      g_object_unref(G_OBJECT(list->data));
-      g_list_free1(list);
-
-      list = list_next;
+      g_object_run_dispose((GObject *) list->data);
+      g_object_unref((GObject *) list->data);
+      
+      list = list->next;
     }
+
+    g_list_free(audio->wave);
+    g_list_free(list_start);
+    
+    audio->wave = NULL;
   }
   
   /* entry point */
@@ -3853,17 +3708,6 @@
 
       guint i, j;
 
-      /* instantiate notation */
-      if(pads_old == 0){
-       if((AGS_AUDIO_NOTATION_DEFAULT & (audio->flags)) == 0){
-         ags_audio_set_pads_alloc_notation();
-       }
-
-       if((AGS_AUDIO_WAVE_DEFAULT & (audio->flags)) == 0){
-         ags_audio_set_pads_alloc_wave();
-       }
-      }
-
       if((AGS_AUDIO_NO_OUTPUT & (audio->flags)) == 0){
        /* grow channels */
        ags_audio_set_pads_grow();
@@ -3980,17 +3824,6 @@
 
     /* grow or shrink */
     if(pads > pads_old){
-      /* instantiate notation */
-      if(pads_old == 0){
-       if((AGS_AUDIO_NOTATION_DEFAULT & (audio->flags)) != 0){
-         ags_audio_set_pads_alloc_notation();
-       }
-
-       if((AGS_AUDIO_WAVE_DEFAULT & (audio->flags)) != 0){
-         ags_audio_set_pads_alloc_wave();
-       }
-      }
-
       /* grow channels */
       if((AGS_AUDIO_NO_INPUT & (audio->flags)) == 0){
        ags_audio_set_pads_grow();
@@ -4544,7 +4377,12 @@
   /* remove recall id */
   pthread_mutex_lock(mutex);
 
-  audio->notation = g_list_remove(audio->notation, notation);
+  audio->notation = g_list_remove(audio->notation,
+                                 notation);
+  g_object_set(notation,
+              "audio", NULL,
+              NULL);
+  
   g_object_unref(notation);
   
   pthread_mutex_unlock(mutex);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/gsequencer-1.4.18/ags/audio/pulse/ags_pulse_client.c 
new/gsequencer-1.4.21/ags/audio/pulse/ags_pulse_client.c
--- old/gsequencer-1.4.18/ags/audio/pulse/ags_pulse_client.c    2018-01-29 
16:54:07.000000000 +0100
+++ new/gsequencer-1.4.21/ags/audio/pulse/ags_pulse_client.c    2018-03-04 
21:09:33.000000000 +0100
@@ -19,7 +19,18 @@
 
 #include <ags/audio/pulse/ags_pulse_client.h>
 
-#include <ags/libags.h>
+#include <ags/util/ags_id_generator.h>
+
+#include <ags/object/ags_application_context.h>
+#include <ags/object/ags_distributed_manager.h>
+#include <ags/object/ags_main_loop.h>
+#include <ags/object/ags_connectable.h>
+#include <ags/object/ags_distributed_manager.h>
+#include <ags/object/ags_soundcard.h>
+#include <ags/object/ags_sequencer.h>
+
+#include <ags/thread/ags_mutex_manager.h>
+#include <ags/thread/ags_task_thread.h>
 
 #include <ags/audio/ags_sound_provider.h>
 #include <ags/audio/ags_channel.h>
@@ -655,7 +666,6 @@
     pa_context_set_state_callback(pulse_client->context,
                                  ags_pulse_client_state_callback,
                                  pulse_client);
-#if 0
     ready = FALSE;
     
     while(!ready){
@@ -672,7 +682,6 @@
       }
     }
 #endif
-#endif
   }
 }
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/gsequencer-1.4.18/ags/audio/pulse/ags_pulse_port.c 
new/gsequencer-1.4.21/ags/audio/pulse/ags_pulse_port.c
--- old/gsequencer-1.4.18/ags/audio/pulse/ags_pulse_port.c      2018-01-29 
16:54:07.000000000 +0100
+++ new/gsequencer-1.4.21/ags/audio/pulse/ags_pulse_port.c      2018-03-04 
21:09:37.000000000 +0100
@@ -19,7 +19,18 @@
 
 #include <ags/audio/pulse/ags_pulse_port.h>
 
-#include <ags/libags.h>
+#include <ags/util/ags_id_generator.h>
+
+#include <ags/object/ags_application_context.h>
+#include <ags/object/ags_distributed_manager.h>
+#include <ags/object/ags_connectable.h>
+#include <ags/object/ags_distributed_manager.h>
+#include <ags/object/ags_soundcard.h>
+#include <ags/object/ags_sequencer.h>
+
+#include <ags/thread/ags_mutex_manager.h>
+#include <ags/thread/ags_task_thread.h>
+#include <ags/thread/ags_polling_thread.h>
 
 #include <ags/audio/ags_sound_provider.h>
 #include <ags/audio/ags_audio_signal.h>
@@ -930,7 +941,7 @@
   }
 
   g_atomic_int_and(&(AGS_THREAD(audio_loop)->flags),
-                  (~(AGS_THREAD_TIMING)));
+                  (~(AGS_THREAD_TIMING)));
 
   /*  */
   pthread_mutex_lock(mutex);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/gsequencer-1.4.18/ags/audio/pulse/ags_pulse_server.c 
new/gsequencer-1.4.21/ags/audio/pulse/ags_pulse_server.c
--- old/gsequencer-1.4.18/ags/audio/pulse/ags_pulse_server.c    2018-01-29 
16:54:07.000000000 +0100
+++ new/gsequencer-1.4.21/ags/audio/pulse/ags_pulse_server.c    2018-03-04 
21:09:28.000000000 +0100
@@ -21,7 +21,15 @@
 #include <ags/audio/pulse/ags_pulse_client.h>
 #include <ags/audio/pulse/ags_pulse_port.h>
 
-#include <ags/libags.h>
+#include <ags/object/ags_application_context.h>
+#include <ags/object/ags_distributed_manager.h>
+#include <ags/object/ags_connectable.h>
+#include <ags/object/ags_distributed_manager.h>
+#include <ags/object/ags_soundcard.h>
+#include <ags/object/ags_sequencer.h>
+
+#include <ags/thread/ags_mutex_manager.h>
+#include <ags/thread/ags_thread-posix.h>
 
 #include <ags/audio/pulse/ags_pulse_devout.h>
 #include <ags/audio/pulse/ags_pulse_devin.h>
@@ -310,8 +318,8 @@
   pulse_server->application_context = NULL;
 
 #ifdef AGS_WITH_PULSE
-  pulse_server->main_loop = pa_glib_mainloop_new(NULL);
-  pulse_server->main_loop_api = 
pa_glib_mainloop_get_api(pulse_server->main_loop);
+  pulse_server->main_loop = pa_mainloop_new();
+  pulse_server->main_loop_api = pa_mainloop_get_api(pulse_server->main_loop);
 #else
   pulse_server->main_loop = NULL;
   pulse_server->main_loop_api = NULL;
@@ -1257,7 +1265,7 @@
 ags_pulse_server_start_poll(AgsPulseServer *pulse_server)
 {
   pthread_create(pulse_server->thread, NULL,
-                ags_pulse_server_do_poll_loop, pulse_server);
+                ags_pulse_server_do_poll_loop, pulse_server);
 }
 
 /**
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/gsequencer-1.4.18/ags/audio/pulse/ags_pulse_server.h 
new/gsequencer-1.4.21/ags/audio/pulse/ags_pulse_server.h
--- old/gsequencer-1.4.18/ags/audio/pulse/ags_pulse_server.h    2018-01-26 
12:11:35.000000000 +0100
+++ new/gsequencer-1.4.21/ags/audio/pulse/ags_pulse_server.h    2018-03-04 
20:27:43.000000000 +0100
@@ -29,7 +29,6 @@
 #include <pulse/pulseaudio.h>
 #include <pulse/stream.h>
 #include <pulse/error.h>
-#include <pulse/glib-mainloop.h>
 #endif
 
 #include <pthread.h>
@@ -63,7 +62,7 @@
   GObject *application_context;
 
 #ifdef AGS_WITH_PULSE
-  pa_glib_mainloop *main_loop;
+  pa_mainloop *main_loop;
   pa_mainloop_api *main_loop_api;
 #else
   gpointer main_loop;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/gsequencer-1.4.18/ags/object/ags_config.c 
new/gsequencer-1.4.21/ags/object/ags_config.c
--- old/gsequencer-1.4.18/ags/object/ags_config.c       2018-02-02 
22:24:33.000000000 +0100
+++ new/gsequencer-1.4.21/ags/object/ags_config.c       2018-03-04 
20:27:35.000000000 +0100
@@ -437,8 +437,8 @@
 #endif
   
   ags_config_set_value(config, AGS_CONFIG_SOUNDCARD_0, "pcm-channels", "2");
-  ags_config_set_value(config, AGS_CONFIG_SOUNDCARD_0, "samplerate", "48000");
-  ags_config_set_value(config, AGS_CONFIG_SOUNDCARD_0, "buffer-size", "1024");
+  ags_config_set_value(config, AGS_CONFIG_SOUNDCARD_0, "samplerate", "44100");
+  ags_config_set_value(config, AGS_CONFIG_SOUNDCARD_0, "buffer-size", "2048");
   ags_config_set_value(config, AGS_CONFIG_SOUNDCARD_0, "format", "16");
 
   //ags_config_set_value(config, AGS_CONFIG_SEQUENCER_0, "backend", "jack");
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/gsequencer-1.4.18/ags/plugin/ags_base_plugin.c 
new/gsequencer-1.4.21/ags/plugin/ags_base_plugin.c
--- old/gsequencer-1.4.18/ags/plugin/ags_base_plugin.c  2018-02-02 
22:24:33.000000000 +0100
+++ new/gsequencer-1.4.21/ags/plugin/ags_base_plugin.c  2018-03-04 
20:27:35.000000000 +0100
@@ -61,6 +61,7 @@
 
 enum{
   PROP_0,
+  PROP_ID,
   PROP_FILENAME,
   PROP_EFFECT,
   PROP_EFFECT_INDEX,
@@ -119,6 +120,22 @@
 
   /* properties */
   /**
+   * AgsBasePlugin:id:
+   *
+   * The assigned id.
+   * 
+   * Since: 1.4.21
+   */
+  param_spec = g_param_spec_string("id",
+                                  i18n_pspec("id of the plugin"),
+                                  i18n_pspec("The id this plugin is located 
in"),
+                                  NULL,
+                                  G_PARAM_READABLE | G_PARAM_WRITABLE);
+  g_object_class_install_property(gobject,
+                                 PROP_ID,
+                                 param_spec);
+
+  /**
    * AgsBasePlugin:filename:
    *
    * The assigned filename.
@@ -365,6 +382,8 @@
 ags_base_plugin_init(AgsBasePlugin *base_plugin)
 {
   base_plugin->flags = 0;
+
+  base_plugin->id = NULL;
   
   base_plugin->filename = NULL;
   base_plugin->effect = NULL;
@@ -392,6 +411,23 @@
   base_plugin = AGS_BASE_PLUGIN(gobject);
 
   switch(prop_id){
+  case PROP_ID:
+    {
+      gchar *id;
+
+      id = (gchar *) g_value_get_string(value);
+
+      if(base_plugin->id == id){
+       return;
+      }
+      
+      if(base_plugin->id != NULL){
+       g_free(base_plugin->id);
+      }
+
+      base_plugin->id = g_strdup(id);
+    }
+    break;
   case PROP_FILENAME:
     {
       gchar *filename;
@@ -516,6 +552,11 @@
   base_plugin = AGS_BASE_PLUGIN(gobject);
 
   switch(prop_id){
+  case PROP_ID:
+    {
+      g_value_set_string(value, base_plugin->id);
+    }
+    break;
   case PROP_FILENAME:
     {
       g_value_set_string(value, base_plugin->filename);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/gsequencer-1.4.18/ags/plugin/ags_base_plugin.h 
new/gsequencer-1.4.21/ags/plugin/ags_base_plugin.h
--- old/gsequencer-1.4.18/ags/plugin/ags_base_plugin.h  2018-02-02 
22:24:33.000000000 +0100
+++ new/gsequencer-1.4.21/ags/plugin/ags_base_plugin.h  2018-03-04 
20:27:35.000000000 +0100
@@ -92,10 +92,12 @@
   GObject object;
 
   guint flags;
+
+  gchar *id;
   
   gchar *filename;
   gchar *effect;
-
+  
   guint port_group_count;
   guint *port_group;
   GList *port;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/gsequencer-1.4.18/ags/plugin/ags_lv2_manager.c 
new/gsequencer-1.4.21/ags/plugin/ags_lv2_manager.c
--- old/gsequencer-1.4.18/ags/plugin/ags_lv2_manager.c  2018-01-29 
16:54:09.000000000 +0100
+++ new/gsequencer-1.4.21/ags/plugin/ags_lv2_manager.c  2018-03-04 
20:27:35.000000000 +0100
@@ -19,11 +19,7 @@
 
 #include <ags/plugin/ags_lv2_manager.h>
 
-#include <ags/lib/ags_string_util.h>
-#include <ags/lib/ags_log.h>
-#include <ags/lib/ags_turtle_manager.h>
-
-#include <ags/object/ags_marshal.h>
+#include <ags/libags.h>
 
 #include <ags/plugin/ags_base_plugin.h>
 #include <ags/plugin/ags_lv2_plugin.h>
@@ -141,9 +137,12 @@
   /* initialize lv2 plugin blacklist */
   lv2_manager->lv2_plugin_blacklist = NULL;
 
-  /* initialize lv2_plugin GList */
+  /* initialize lv2 plugin GList */
   lv2_manager->lv2_plugin = NULL;
 
+  /* current plugin node */
+  lv2_manager->current_plugin_node = NULL;
+
   /* initiliaze ags_lv2_default_path string vector */
   if(ags_lv2_default_path == NULL){
     gchar *lv2_env;
@@ -551,14 +550,38 @@
 
   g_message("lv2 check - %s", path);
 
+  plugin_so = dlopen(path,
+                    RTLD_NOW);
+  
+  if(plugin_so == NULL){
+    g_warning("ags_lv2_manager.c - failed to load static object file");    
+    dlerror();
+    
+    pthread_mutex_unlock(&(mutex));
+
+    return;
+  }
+  
+  if(dlerror() != NULL){
+    return;
+  }
+  
   //  xmlSaveFormatFileEnc("-", turtle->doc, "UTF-8", 1);
   
   /* parse lv2 plugin */
-  xpath = "//rdf-triple//rdf-verb//rdf-pname-ln[substring(text(), 
string-length(text()) - string-length('doap:name') + 1) = 
'doap:name']/ancestor::*[self::rdf-verb][1]/following-sibling::rdf-object-list[1]//rdf-string[text()]";
+  lv2_manager->current_plugin_node = g_hash_table_new_full(g_str_hash, 
g_str_equal,
+                                                          g_free,
+                                                          NULL);
+
+  xpath = 
"/rdf-turtle-doc/rdf-statement/rdf-triple/rdf-predicate-object-list/rdf-verb//rdf-pname-ln[substring(text(),
 string-length(text()) - string-length('doap:name') + 1) = 
'doap:name']/ancestor::*[self::rdf-verb][1]/following-sibling::rdf-object-list[1]//rdf-string[text()]";
   effect_list = ags_turtle_find_xpath(turtle,
                                      xpath);
 
   while(effect_list != NULL){
+    xmlNode *current_triple;
+    
+    gchar *current_uuid;
+    
     /* read effect name */
     node = effect_list->data;
     
@@ -578,16 +601,24 @@
 
     effect = g_strndup(str + 1,
                       strlen(str) - 2);
-    
-    /* find URI */
+
+    /* fill current plugin node */
+    xpath = "./ancestor::*[self::rdf-triple][1]";
+    current_triple = ags_turtle_find_xpath_with_context_node(turtle,
+                                                            xpath,
+                                                            node)->data;
+
+    current_uuid = ags_id_generator_create_uuid();
     escaped_effect = ags_string_util_escape_single_quote(effect);
-    xpath = 
"//rdf-triple//rdf-string[text()='\"%s\"']/ancestor::*[self::rdf-triple][1]/rdf-subject/rdf-iri";
+
+    g_hash_table_insert(lv2_manager->current_plugin_node,
+                       current_uuid, current_triple);
     
-    xpath = g_strdup_printf(xpath,
-                           escaped_effect);
-    uri_list = ags_turtle_find_xpath(turtle,
-                                    xpath);
-    free(xpath);
+    /* find URI */
+    xpath = "./rdf-subject/rdf-iri";
+    uri_list = ags_turtle_find_xpath_with_context_node(turtle,
+                                                      xpath,
+                                                      current_triple);
     
     uri = NULL;
   
@@ -651,8 +682,9 @@
 
                str = 
g_strdup_printf("//rdf-pname-ns[text()='%s']/following-sibling::*[self::rdf-iriref][1]",
                                      prefix);
-               prefix_node = ags_turtle_find_xpath(turtle,
-                                                   str);
+               prefix_node = ags_turtle_find_xpath_with_context_node(turtle,
+                                                                     str,
+                                                                     
current_triple);
                free(str);
 
                if(prefix_node != NULL){
@@ -687,11 +719,10 @@
     }
 
     /* turtle pname */
-    xpath = 
g_strdup_printf("//rdf-triple//rdf-string[text()='\"%s\"']/ancestor::*[self::rdf-triple]//rdf-pname-ln[1]",
-                           escaped_effect);
-
-    pname_list = ags_turtle_find_xpath(turtle,
-                                      xpath);
+    xpath = "./rdf-pname-ln[1]";
+    pname_list = ags_turtle_find_xpath_with_context_node(turtle,
+                                                        xpath,
+                                                        current_triple);
 
     if(pname_list != NULL){
       turtle_pname = xmlNodeGetContent(pname_list->data);
@@ -702,23 +733,10 @@
     }
     
     /* get uri index and append plugin */
-    plugin_so = dlopen(path,
-                      RTLD_NOW);
-  
-    if(plugin_so == NULL){
-      g_warning("ags_lv2_manager.c - failed to load static object file");
-    
-      dlerror();
-
-      effect_list = effect_list->next;
-      
-      continue;
-    }
-
     lv2_descriptor = (LV2_Descriptor_Function) dlsym(plugin_so,
                                                     "lv2_descriptor");
   
-    if(dlerror() == NULL && lv2_descriptor){
+    if(lv2_descriptor){
       for(i = 0; (plugin_descriptor = lv2_descriptor(i)) != NULL; i++){
        if(path != NULL &&
           effect != NULL &&
@@ -745,6 +763,7 @@
            lv2_plugin = g_object_new(AGS_TYPE_LV2_PLUGIN,
                                      "manifest", manifest,
                                      "turtle", turtle,
+                                     "id", current_uuid,
                                      "filename", path,
                                      "effect", effect,
                                      "pname", turtle_pname,
@@ -765,6 +784,10 @@
   }
 
   pthread_mutex_unlock(&(mutex));
+
+  g_hash_table_destroy(lv2_manager->current_plugin_node);
+  
+  lv2_manager->current_plugin_node = NULL;
 }
 
 /**
@@ -797,7 +820,7 @@
     return;
   }
   
-  xpath = 
"//rdf-triple//rdf-verb[@verb='a']/following-sibling::*[self::rdf-object-list]//rdf-pname-ln[substring(text(),
 string-length(text()) - string-length(':preset') + 1) = 
':preset']/ancestor::*[self::rdf-triple][1]/rdf-subject/rdf-iri";
+  xpath = 
"/rdf-turtle-doc/rdf-statement/rdf-triple/rdf-predicate-object-list/rdf-verb[@verb='a']/following-sibling::*[self::rdf-object-list]//rdf-pname-ln[substring(text(),
 string-length(text()) - string-length(':preset') + 1) = 
':preset']/ancestor::*[self::rdf-triple][1]/rdf-subject/rdf-iri";
 
   preset_list = ags_turtle_find_xpath(preset,
                                      xpath);
@@ -1024,7 +1047,7 @@
                        NULL);
 
        /* read binary from turtle */
-       str = 
g_strdup_printf("//rdf-triple//rdf-verb//rdf-pname-ln[substring(text(), 
string-length(text()) - string-length(':binary') + 1) = 
':binary']/ancestor::*[self::rdf-verb][1]/following-sibling::*[self::rdf-object-list][1]//rdf-iriref[substring(text(),
 string-length(text()) - string-length('%s>') + 1) = '%s>']",
+       str = 
g_strdup_printf("/rdf-turtle-doc/rdf-statement/rdf-triple/rdf-predicate-object-list/rdf-verb//rdf-pname-ln[substring(text(),
 string-length(text()) - string-length(':binary') + 1) = 
':binary']/ancestor::*[self::rdf-verb][1]/following-sibling::*[self::rdf-object-list][1]//rdf-iriref[substring(text(),
 string-length(text()) - string-length('%s>') + 1) = '%s>']",
                              AGS_LIBRARY_SUFFIX,
                              AGS_LIBRARY_SUFFIX);
        
@@ -1124,7 +1147,7 @@
        }
 
        /* read presets from turtle */
-       xpath = 
"//rdf-triple//rdf-verb[@verb='a']/following-sibling::*[self::rdf-object-list]//rdf-pname-ln[substring(text(),
 string-length(text()) - string-length(':preset') + 1) = 
':preset']/ancestor::*[self::rdf-triple]";
+       xpath = 
"/rdf-turtle-doc/rdf-statement/rdf-triple/rdf-predicate-object-list/rdf-verb[@verb='a']/following-sibling::*[self::rdf-object-list]//rdf-pname-ln[substring(text(),
 string-length(text()) - string-length(':preset') + 1) = 
':preset']/ancestor::*[self::rdf-triple]";
        preset_list = ags_turtle_find_xpath(manifest,
                                            xpath);
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/gsequencer-1.4.18/ags/plugin/ags_lv2_manager.h 
new/gsequencer-1.4.21/ags/plugin/ags_lv2_manager.h
--- old/gsequencer-1.4.18/ags/plugin/ags_lv2_manager.h  2017-11-06 
00:08:58.000000000 +0100
+++ new/gsequencer-1.4.21/ags/plugin/ags_lv2_manager.h  2018-03-04 
20:27:35.000000000 +0100
@@ -50,6 +50,8 @@
 
   GList *lv2_plugin_blacklist;
   GList *lv2_plugin;
+
+  GHashTable *current_plugin_node;
 };
 
 struct _AgsLv2ManagerClass
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/gsequencer-1.4.18/ags/plugin/ags_lv2_plugin.c 
new/gsequencer-1.4.21/ags/plugin/ags_lv2_plugin.c
--- old/gsequencer-1.4.18/ags/plugin/ags_lv2_plugin.c   2018-02-02 
22:24:33.000000000 +0100
+++ new/gsequencer-1.4.21/ags/plugin/ags_lv2_plugin.c   2018-03-04 
20:27:35.000000000 +0100
@@ -911,20 +911,11 @@
 
     escaped_effect = ags_string_util_escape_single_quote(base_plugin->effect);
 
-    /* retrieve name node as context node */
-    xpath = 
g_strdup_printf("(//rdf-triple//rdf-verb[//rdf-pname-ln[substring(text(), 
string-length(text()) - string-length(':name') + 1) = ':name'] and 
following-sibling::*//rdf-string[text()='\"%s\"']]/ancestor::*[self::rdf-triple])[1]",
-                           escaped_effect);
+    /* retrieve triple node */
+    triple_node = 
g_hash_table_lookup(ags_lv2_manager_get_instance()->current_plugin_node,
+                                     base_plugin->id);
     
-    list = ags_turtle_find_xpath(lv2_plugin->turtle,
-                                xpath);
-
-    free(xpath);
-
-    if(list != NULL){
-      triple_node = (xmlNode *) list->data;
-
-      g_list_free(list);
-    }else{
+    if(triple_node == NULL){
       g_warning("rdf-triple not found");
       
       return;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/gsequencer-1.4.18/ags/plugin/ags_lv2ui_manager.c 
new/gsequencer-1.4.21/ags/plugin/ags_lv2ui_manager.c
--- old/gsequencer-1.4.18/ags/plugin/ags_lv2ui_manager.c        2018-01-29 
16:54:09.000000000 +0100
+++ new/gsequencer-1.4.21/ags/plugin/ags_lv2ui_manager.c        2018-03-04 
20:27:35.000000000 +0100
@@ -506,7 +506,7 @@
 
     while(list != NULL){
       /* find URI */
-      xpath = "//rdf-triple/rdf-subject/rdf-iri";    
+      xpath = "/rdf-turtle-doc/rdf-statement/rdf-triple/rdf-subject/rdf-iri";  
  
       uri_list = ags_turtle_find_xpath_with_context_node(turtle,
                                                         xpath,
                                                         list->data);
@@ -614,7 +614,7 @@
        continue;
       }
 
-      xpath = "//rdf-triple//rdf-verb//rdf-pname-ln[substring(text(), 
string-length(text()) - string-length(':binary') + 1) = 
':binary']/ancestor::*[self::rdf-verb][1]/following-sibling::*[self::rdf-object-list][1]//rdf-iriref[substring(text(),
 string-length(text()) - string-length('.so>') + 1) = '.so>']";
+      xpath = 
"/rdf-turtle-doc/rdf-statement/rdf-triple//rdf-verb//rdf-pname-ln[substring(text(),
 string-length(text()) - string-length(':binary') + 1) = 
':binary']/ancestor::*[self::rdf-verb][1]/following-sibling::*[self::rdf-object-list][1]//rdf-iriref[substring(text(),
 string-length(text()) - string-length('.so>') + 1) = '.so>']";
       binary_list = ags_turtle_find_xpath_with_context_node(turtle,
                                                            xpath,
                                                            list->data);
@@ -736,23 +736,25 @@
   pthread_mutex_lock(&(mutex));
 
   /* check if gtk UI */
-  xpath = 
"//rdf-triple//rdf-verb[@verb='a']/following-sibling::*[self::rdf-object-list]//rdf-pname-ln[substring(text(),
 string-length(text()) - string-length(':gtkui') + 1) = 
':gtkui']//ancestor::*[self::rdf-triple]";
+  xpath = 
"/rdf-turtle-doc/rdf-statement/rdf-triple/rdf-predicate-object-list/rdf-verb[@verb='a']/following-sibling::*[self::rdf-object-list]//rdf-pname-ln[substring(text(),
 string-length(text()) - string-length(':gtkui') + 1) = 
':gtkui']//ancestor::*[self::rdf-triple]";
   gtk_uri_list = ags_turtle_find_xpath(turtle,
                                       xpath);
   ags_lv2ui_manager_load_file_ui_plugin(gtk_uri_list);
-  
+
+#if 0
   /* check if qt4 UI */
-  xpath = 
"//rdf-triple//rdf-verb[@verb='a']/following-sibling::*[self::rdf-object-list]//rdf-pname-ln[substring(text(),
 string-length(text()) - string-length(':qt4ui') + 1) = 
':qt4ui']//ancestor::*[self::rdf-triple]";
+  xpath = 
"/rdf-turtle-doc/rdf-statement/rdf-triple/rdf-predicate-object-list/rdf-verb[@verb='a']/following-sibling::*[self::rdf-object-list]//rdf-pname-ln[substring(text(),
 string-length(text()) - string-length(':qt4ui') + 1) = 
':qt4ui']//ancestor::*[self::rdf-triple]";
   qt4_uri_list = ags_turtle_find_xpath(turtle,
                                       xpath);
   ags_lv2ui_manager_load_file_ui_plugin(qt4_uri_list);
   
   /* check if qt5 UI */
-  xpath = 
"//rdf-triple//rdf-verb[@verb='a']/following-sibling::*[self::rdf-object-list]//rdf-pname-ln[substring(text(),
 string-length(text()) - string-length(':qt5ui') + 1) = 
':qt5ui']//ancestor::*[self::rdf-triple]";
+  xpath = 
"/rdf-turtle-doc/rdf-statement/rdf-triple/rdf-predicate-object-list/rdf-verb[@verb='a']/following-sibling::*[self::rdf-object-list]//rdf-pname-ln[substring(text(),
 string-length(text()) - string-length(':qt5ui') + 1) = 
':qt5ui']//ancestor::*[self::rdf-triple]";
   qt5_uri_list = ags_turtle_find_xpath(turtle,
                                       xpath);
   ags_lv2ui_manager_load_file_ui_plugin(qt5_uri_list);
-
+#endif
+  
   /*  */
   pthread_mutex_unlock(&(mutex));
 }
@@ -848,7 +850,7 @@
 
        /* read binary from turtle */
        binary_list = ags_turtle_find_xpath(manifest,
-                                           
"//rdf-triple//rdf-verb//rdf-pname-ln[substring(text(), string-length(text()) - 
string-length(':binary') + 1) = 
':binary']/ancestor::*[self::rdf-verb][1]/following-sibling::*[self::rdf-object-list][1]//rdf-iriref[substring(text(),
 string-length(text()) - string-length('.so>') + 1) = '.so>']");
+                                           
"/rdf-turtle-doc/rdf-statement/rdf-triple/rdf-predicate-object-list/rdf-verb//rdf-pname-ln[substring(text(),
 string-length(text()) - string-length(':binary') + 1) = 
':binary']/ancestor::*[self::rdf-verb][1]/following-sibling::*[self::rdf-object-list][1]//rdf-iriref[substring(text(),
 string-length(text()) - string-length('.so>') + 1) = '.so>']");
 
        /* persist XML */
        //NOTE:JK: no need for it
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/gsequencer-1.4.18/ags/test/audio/ags_functional_audio_test.c 
new/gsequencer-1.4.21/ags/test/audio/ags_functional_audio_test.c
--- old/gsequencer-1.4.18/ags/test/audio/ags_functional_audio_test.c    
2018-01-29 16:54:07.000000000 +0100
+++ new/gsequencer-1.4.21/ags/test/audio/ags_functional_audio_test.c    
2018-03-04 20:27:35.000000000 +0100
@@ -648,6 +648,10 @@
 
   for(i = 0; i < AGS_FUNCTIONAL_AUDIO_TEST_PLAYBACK_N_AUDIO; i++){
     AgsNotation *notation;
+
+    AgsTimestamp *timestamp;
+
+    GList *list_notation;
     
     audio[i] = ags_audio_new(soundcard);
     g_object_ref(audio[i]);
@@ -678,6 +682,11 @@
     link = ags_channel_pad_nth(mixer->input,
                               i);
   
+    timestamp = ags_timestamp_new();
+
+    timestamp->flags &= (~AGS_TIMESTAMP_UNIX);
+    timestamp->flags |= AGS_TIMESTAMP_OFFSET;
+
     for(j = 0; j < AGS_FUNCTIONAL_AUDIO_TEST_PLAYBACK_N_AUDIO_CHANNELS; j++){
       AgsAudioSignal *destination;
 
@@ -690,9 +699,6 @@
                                     destination);
       
       /* populate notation */
-      notation = g_list_nth(audio[i]->notation,
-                           j)->data;
-
       for(k = 0; k < AGS_FUNCTIONAL_AUDIO_TEST_PLAYBACK_N_NOTES; k++){
        AgsNote *note;
 
@@ -701,6 +707,21 @@
        note->x[1] = note->x[0] + (rand() % 3) + 1;
        note->y = rand() % AGS_FUNCTIONAL_AUDIO_TEST_PLAYBACK_N_PADS;
 
+       timestamp->timer.ags_offset.offset = (guint64) 
AGS_NOTATION_DEFAULT_OFFSET * floor((double) note->x[0] / (double) 
AGS_NOTATION_DEFAULT_OFFSET);
+
+       list_notation = audio[i]->notation;
+       list_notation = ags_notation_find_near_timestamp(list_notation, j,
+                                                        timestamp);
+
+       if(list_notation != NULL){
+         notation = list_notation->data;
+       }else{
+         notation = ags_notation_new(audio[i],
+                                     j);
+         audio[i]->notation = ags_notation_add(audio[i]->notation,
+                                               notation);
+       }
+       
        ags_notation_add_note(notation,
                              note,
                              FALSE);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude 
config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 
--exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh 
old/gsequencer-1.4.18/configure.ac new/gsequencer-1.4.21/configure.ac
--- old/gsequencer-1.4.18/configure.ac  2018-02-02 22:41:50.000000000 +0100
+++ new/gsequencer-1.4.21/configure.ac  2018-03-04 21:12:59.000000000 +0100
@@ -6,7 +6,7 @@
 # Process this file with autoconf to produce a configure script.
 
 AC_PREREQ([2.69])
-AC_INIT([gsequencer],[1.4.18],[jkraehem...@gmail.com])
+AC_INIT([gsequencer],[1.4.21],[jkraehem...@gmail.com])
 AM_INIT_AUTOMAKE([subdir-objects])
 AC_CONFIG_SRCDIR([ags/config.h.in])
 AC_CONFIG_HEADERS([ags/config.h])
@@ -27,9 +27,9 @@
              [enable_alsa=yes])
 
 AC_ARG_ENABLE(oss, [AS_HELP_STRING([--enable-oss],
-                                  [enable oss (default is yes)])],
+                                  [enable oss (default is no)])],
              [],
-             [enable_oss=yes])
+             [enable_oss=no])
 
 AC_ARG_ENABLE(jack, [AS_HELP_STRING([--enable-jack],
                                    [enable jack (default is yes)])],


Reply via email to