[gmpi] Re: Topic 7: Audio packaging

  • From: David Olofson <david@xxxxxxxxxxx>
  • To: gmpi@xxxxxxxxxxxxx
  • Date: Mon, 2 Jun 2003 20:23:50 +0200

On Monday 02 June 2003 19.48, Chris Grigg wrote:
[...]
> >class AudioBuffer
> >{
> >     bool IsZero() const;
> >     void SetZero( bool );
> >     float* GetPointer();
> >     float* GetRawPointer();
> >};
[...]
> Very likeable.  But... don't we have a C-language-implementable
> mandate?  If so, care to comment on C-language implementation?

How OO do you want it? :-)

--- Version 1 ---------------------------------------------

typedef struct
{
        int     is_zero;
        float   *data;
} GMPI_buffer;

#define gmpi_buffer_is_zero(x)          ((x)->is_zero)
#define gmpi_buffer_set_zero(x, y)      ((x)->is_zero = (y))

static inline float *gmpi_buffer_get_pointer(GMPI_buffer *b)
{
        if(gmpi_buffer_is_zero(b))
                gmpi_zero_fill_buffer(b);
        return b->data;
}

#define gmpi_buffer_get_raw_pointer(x)  ((x)->data)


--- Version 2 ---------------------------------------------

typedef struct
{
        int     is_zero;
        float   *data;
} GMPI_buffer;

#define gmpi_buffer_is_zero(x)          ((x)->is_zero)
#define gmpi_buffer_set_zero(x, y)      ((x)->is_zero = (y))
#define gmpi_buffer_get_raw_pointer(x)  ((x)->data)

In the host interface struct:
        float *(*buffer_get_pointer)(GMPI_buffer *b);


--- Version 3 ---------------------------------------------

typedef struct GMPI_buffer
{
        int     is_zero;
        float   *data;
        float *(*get_pointer)(struct GMPI_buffer *b);
} GMPI_buffer;

#define gmpi_buffer_is_zero(x)          ((x)->is_zero)
#define gmpi_buffer_set_zero(x, y)      ((x)->is_zero = (y))
#define gmpi_buffer_get_pointer(x)      ((x)->get_pointer(x))
#define gmpi_buffer_get_raw_pointer(x)  ((x)->data)

-----------------------------------------------------------


Could be typos and stuff in there. You get the idea, though.

Of course, if we ignore really old compilers and assume that we have 
either C99 or something that can "#define inline __inline__" or 
whatever, as needed, we can ditch all the creepy macros and use 
static inlines for everything instead. I just used #defines here 
because it's a more compact way of explaining the basic idea.


//David Olofson - Programmer, Composer, Open Source Advocate

.- The Return of Audiality! --------------------------------.
| Free/Open Source Audio Engine for use in Games or Studio. |
| RT and off-line synth. Scripting. Sample accurate timing. |
`-----------------------------------> http://audiality.org -'
   --- http://olofson.net --- http://www.reologica.se ---


----------------------------------------------------------------------
Generalized Music Plugin Interface (GMPI) public discussion list
Participation in this list is contingent upon your abiding by the
following rules:  Please stay on topic.  You are responsible for your own
words.  Please respect your fellow subscribers.  Please do not
redistribute anyone else's words without their permission.

Archive: //www.freelists.org/archives/gmpi
Email gmpi-request@xxxxxxxxxxxxx w/ subject "unsubscribe" to unsubscribe

Other related posts: