newsAdvanced Gtk+ Sequencer - News: AgsSoundContainer and AgsSoundResource interfaces

 
 
Latest News
Advanced Gtk+ Sequencer version 6.5.x posted by jkraehemann, Sun 11 Feb 2024 05:06:15 PM UTC
Advanced Gtk+ Sequencer version 6.3.5 posted by jkraehemann, Fri 19 Jan 2024 11:53:24 AM UTC
Advanced Gtk+ Sequencer v6.1.0 released posted by jkraehemann, Thu 28 Sep 2023 04:55:19 AM UTC
Advanced Gtk+ Sequencer v6.0.0 released posted by jkraehemann, Mon 21 Aug 2023 11:48:52 AM UTC
Advanced Gtk+ Sequencer v5.5.0 released posted by jkraehemann, Sat 05 Aug 2023 10:21:52 AM UTC

AgsSoundContainer and AgsSoundResource interfaces

Item posted by Joël Krähemann <jkraehemann> on Mon 07 May 2018 03:48:09 PM UTC.

AgsSoundContainer and AgsSoundResource superseeds AgsPlayable. The changes were just applied to:

  • AgsSndfile - implementing AgsSoundResource
  • AgsIpatch - implementing AgsSoundContainer


The API was extended and refactored. Thought it is not yet final the basics are there, yet. One thing missing is implementing following methods:


GList* (*get_resource_all)(AgsSoundContainer *sound_container);
GList* (*get_resource_by_name)(AgsSoundContainer *sound_container,
                               gchar *resource_name);
GList* (*get_resource_by_index)(AgsSoundContainer *sound_container,
                                guint resource_index);
GList* (*get_resource_current)(AgsSoundContainer *sound_container);


AgsIpatchSample implementing AgsSoundResource


The new object AgsIpatchSample was introduced to implement missing functionality. AgsSoundContainer shall return objects implementing AgsSoundResource.

So it works like following to obtain all samples:


  GList *sound_resource;

  sound_resource = ags_sound_container_get_resource_all(AGS_SOUND_CONTAINER(ipatch));


AgsSndfile implementing AgsSoundResource


Since WAV, FLAC, AIFF or OGG files is a sound resource, the object implements AgsSoundResource. The object has been refactored, yet.

To make the API straight-forward - analogously to AgsSoundcard interface - the AgsSoundResource provides following functions:


gboolean ags_sndfile_info(AgsSoundResource *sound_resource,
                          guint *frame_count,
                          guint *loop_start, guint *loop_end);
void ags_sndfile_set_presets(AgsSoundResource *sound_resource,
                             guint channels,
                             guint samplerate,
                             guint buffer_size,
                             guint format);
void ags_sndfile_get_presets(AgsSoundResource *sound_resource,
                             guint *channels,
                             guint *samplerate,
                             guint *buffer_size,
                             guint *format);


Special about it is you read one single audio channel, others get cached in the buffer to reduce disk overhead:


/* read sample data */
guint ags_sound_resource_read(AgsSoundResource *sound_resource,
                              void *dbuffer,
                              guint audio_channel,
                              guint frame_count, guint format);

/* write sample data */
void ags_sound_resource_write(AgsSoundResource *sound_resource,
                              void *sbuffer,
                              guint audio_channel,
                              guint frame_count, guint format);


So the buffer size of AgsSoundResource should be the frame count you request of AgsSoundResource.



by Joël



 

Back to the top

Powered by Savane 3.13-f8d8.
Corresponding source code