Skip to content

Commit

Permalink
add Osc ctor overload
Browse files Browse the repository at this point in the history
  • Loading branch information
gewang committed Nov 17, 2023
1 parent d48c9a9 commit 2f28f20
Show file tree
Hide file tree
Showing 3 changed files with 60 additions and 20 deletions.
76 changes: 57 additions & 19 deletions src/core/ugen_osc.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -81,6 +81,19 @@ DLL_QUERY osc_query( Chuck_DL_Query * QUERY )
osc_offset_data = type_engine_import_mvar( env, "int", "@osc_data", FALSE );
if( osc_offset_data == CK_INVALID_OFFSET ) goto error;

// overload constructor (float freq)
func = make_new_mfun( "void", "Osc", osc_ctor_1 );
func->add_arg( "float", "freq" );
func->doc = "Constructor to initialize a Osc at specified frequency.";
if( !type_engine_import_mfun( env, func ) ) goto error;

// overload constructor (float freq, float phase)
func = make_new_mfun( "void", "Osc", osc_ctor_2 );
func->add_arg( "float", "freq" );
func->add_arg( "float", "phase" );
func->doc = "Constructor to initialize a Osc at specified frequency and phase.";
if( !type_engine_import_mfun( env, func ) ) goto error;

// add ctrl: freq
func = make_new_mfun( "float", "freq", osc_ctrl_freq );
func->add_arg( "float", "hz" );
Expand Down Expand Up @@ -402,20 +415,51 @@ CK_DLL_CTOR( osc_ctor )




//-----------------------------------------------------------------------------
// generic overloaded ctor( float freq )
// to be used by Osc only
//-----------------------------------------------------------------------------
CK_DLL_MFUN( osc_ctor_1 )
{
// return (dummy struct since ctors don't return stuff)
Chuck_DL_Return r;
// call default ctor
osc_ctor( SELF, ARGS, VM, SHRED, API );
// call common ctor
oscx_ctor_1( SELF, ARGS, &r, VM, SHRED, API );
}




//-----------------------------------------------------------------------------
// generic overloaded ctor( float freq, float phase )
// to be used by Osc only
//-----------------------------------------------------------------------------
CK_DLL_MFUN( osc_ctor_2 )
{
// return (dummy struct since ctors don't return stuff)
Chuck_DL_Return r;
// call default ctor
osc_ctor( SELF, ARGS, VM, SHRED, API );
// call common ctor
oscx_ctor_2( SELF, ARGS, &r, VM, SHRED, API );
}




//-----------------------------------------------------------------------------
// generic overloaded ctor( float freq )
// to be used by subclasses of Osc
//-----------------------------------------------------------------------------
CK_DLL_MFUN( oscx_ctor_1 )
{
// get the data
Osc_Data * d = (Osc_Data *)OBJ_MEMBER_UINT(SELF, osc_offset_data );
// return (dummy struct since ctors don't return stuff)
Chuck_DL_Return r;
// set freq
d->freq = GET_CK_FLOAT(ARGS);
// phase increment
d->num = d->freq / d->srate;
// bound it
if( d->num >= 1.0 ) d->num -= ::floor( d->num );
osc_ctrl_freq( SELF, ARGS, &r, VM, SHRED, API );
}


Expand All @@ -427,19 +471,13 @@ CK_DLL_MFUN( oscx_ctor_1 )
//-----------------------------------------------------------------------------
CK_DLL_MFUN( oscx_ctor_2 )
{
// get the data
Osc_Data * d = (Osc_Data *)OBJ_MEMBER_UINT(SELF, osc_offset_data );
// return (dummy struct since ctors don't return stuff)
Chuck_DL_Return r;
// set freq
d->freq = GET_CK_FLOAT(ARGS);
// phase increment
d->num = d->freq / d->srate;
// bound it
if( d->num >= 1.0 ) d->num -= ::floor( d->num );

// set phase
d->phase = GET_CK_FLOAT(ARGS);
// bound ( this could be set arbitrarily high or low )
if( d->phase >= 1.0 || d->phase < 0.0 ) d->phase -= floor( d->num );}
osc_ctrl_freq( SELF, ARGS, &r, VM, SHRED, API );
// set freq
osc_ctrl_phase( SELF, ARGS, &r, VM, SHRED, API );
}



Expand Down
2 changes: 2 additions & 0 deletions src/core/ugen_osc.h
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,8 @@ DLL_QUERY osc_query( Chuck_DL_Query * query );
// osc - base
CK_DLL_CTOR( osc_ctor );
CK_DLL_DTOR( osc_dtor );
CK_DLL_MFUN( osc_ctor_1 );
CK_DLL_MFUN( osc_ctor_2 );
CK_DLL_TICK( osc_tick );
CK_DLL_PMSG( osc_pmsg );
CK_DLL_CTRL( osc_ctrl_freq );
Expand Down
2 changes: 1 addition & 1 deletion src/test/01-Basic/241-ctor-builtin.ck
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
// constructor
// constructors
SinOsc foo(440) => Gain g(.5) => dac;

// test
Expand Down

0 comments on commit 2f28f20

Please sign in to comment.