The following snipped is from ags_audio.c namely in ags_audio_real_set_pads() and isn't fully populated. May be a macro will be used to do so.
~~~~~~
if(alloc_recycling){
channel->first_recycling =
channel->last_recycling = ags_recycling_new(audio->devout);
if(link_recycling){
recycling->next = channel->first_recycling;
recycling->next->prev = recycling;
recycling = recycling->next;
}
channel->first_recycling->channel = (GObject *) channel;... read more
The big refactoring is almost done. For now I'm fixing compile time errors. There's some work to invest.
Procedural solving was moved to an object called AgsRecyclingContainer.
It superseeded AgsGroupId and simplifies the API.
During refactoring some utility functions has been deleted because there is no more need for them.
This makes the code easier to maintain.
Overall I'm suggesting the changes.
AgsRecallFactory is a factory pattern to ease setting up recalls.
AgsGroupId is deprecated in version 0.4.0 it will be replaced by the AgsRecyclingContainer structure. It's advantages are evident tighter and more intuitive API of AgsAudio, AgsChannel, AgsRecallID, AgsRecall and AgsRunOrder. As the last mentioned class indicates that especially the way you will be able to initializing or doing playback will be affected.
The application API will be extended to fit the needs of reading XML files. Especially the need of getting and setting properties is considered.
WARNING current subversion tree hasn't a functional way of saving files or reading from it. Whereby most bugfixes were probably done you may experience incompatibelities while checking out from subversion.
The new DTD is more flexible and robust than the previous one. It was created in toughts of future releases. But definitive 0.4.0 release is still not released.
Regarding the application level of the Advanced Gtk+ Sequencer code may need more work to be done to fit the needs of the new XML API.
Much old code I wrote for performance testing will disappear slowly. Whereas revision 1374 has a functional drum sequencer. As well many things of ticket is solved. Only caveat is changing link of an AgsChannel object.
Code of this revision or later especially AgsPanel and AgsDrum object seem to be ready for release 0.4.0.
The new object AgsPort is intended to be the way to communicate from the GUI layer to the audio layer. Additionally AgsDrum and related object are reimplemented using new layouting functions.
Optical feedback of pattern position takes actually to much computing time because every AgsDevoutClass::tic the GUI callback creates a new thread.
AgsPort is a class representing data which needs to be read or written by the class AgsLineMember.
Benefits of AgsPort:
Note there will be a certain overhead by copying and conversion functions of the representating data.
Release 0.4.0 of Advanced Gtk+ Sequencer gets some extends in saving files. As possible it will be compatible with ags_file-0_3_12.dtd.
It is planned to move creation code of recalls into a line member factory. To support saving your changes within gui it is necessary to extend the file format. AgsLine will be some kind of XML based.
All GUI components inheriting from AgsMachine, AgsPad and AgsLine need to be updated.
Refactoring done of AgsDevoutPlay. Following advantages will be provided:
these features can be used simultanously.
needed to refactor group_id in AgsDevoutPlay to an array due to possibility of playing audio while outputting by sequencer or notation.
I've just detected that ags is fully memory leaked.
Affected version:
This is recognized as very critical but not so trivial to make it realy proper.
fixes:
AgsThread *thread;
thread = ags_thread_new();
ags_thread_start(thread);
pthread_kill(&(thread->thread), AGS_THREAD_SUSPEND_SIG);
as told there JIFFIES to adjust GUI and ALSA behaviour.
I believe that bad performance is tracing back to wrong frequency calculations within AgsGuiThread and AgsAudioLoop.
Next issue is verifying frequency calculations.
Annoyed about CPUs with insufficient threads ...
That's why I decided to add support for single threaded CPUs.
May be it will run even on a 13 years aged single threaded notebook.
AgsMatrix and AgsDrum shows you optical feedback of the current playing beat.
As I figured out that debian testing has some real difficulties with realtime scheduling and the pulseaudio resampling bug isn't solved, yet.
The problems prior mentioned doesn't accomplish for a updated fedora 19. Advanced Gtk+ Sequencer works even when pulseaudio is running.
I really love fedora.
I just runs great now I should consider to fix the stop bug.
By the way I solved the greedy thread issue. That means a greedy AgsGuiThread won't hurt anymore.
GLib supports the following atomic functions on integers:
which makes live much easier.
How nice would it be to have these functions: pthread_suspend and pthread_resume.
Because Gtk+'s iteration function is really computing expensive while doing some interaction.
Revision 702 an experiment with new threading strategies ...
and the conditional locks weren't reliable at all.
The drum is functional again. But it is still quiet unstable.
Committed revision 1031.
As I felt dissapointed by getting no sound out of ags
me just checked out revision 702 where there drum was more or less usable.
So I really believe that there's a problem with setting absolute buffer sizes with alsa resulting in a ugly hack as work-around.
But you shouldn't take everything for worse because you'll get error reporting from playing sounds. How ever this is your chance to know what's going wrong with ags