scripts/gibber/audio.js
function(key, initValue, obj) {
    var isTimeProp = Audio.Clock.timeProperties.indexOf( key ) > -1,
        prop = obj.properties[ key ] = {
          value:  isTimeProp ? Audio.Clock.time( initValue ) : initValue,
          binops: [],
          parent : obj,
          name : key,
        },
        mappingName = key.charAt(0).toUpperCase() + key.slice(1);
    
    Object.defineProperty(obj, key, {
      configurable: true,
      get: function() { return prop.value },
      set: function(val) { 
        if( obj[ mappingName ] && obj[ mappingName ].mapping ) {
          if( obj[ mappingName ].mapping.remove )
            obj[ mappingName ].mapping.remove( true ) // pass true to avoid setting property inside of remove method
        }
        
        // if( isTimeProp ) {
        //   if( typeof val === 'object' && val.mode ==='absolute' ) { // ms, seconds
        //     prop.value = val.value
        //   }else{
        //     prop.value = Audio.Core.Binops.Mul( Audio.Clock.time( val ), Audio.Core.Binops.Div( 1, Audio.Clock.rate ) ) 
        //   }
        // }else{
        //   prop.value = val
        // }
        // 
        prop.value = isTimeProp ? Audio.Clock.time( val ) : val
        
        Audio.Core.dirty( obj )
        
        return prop.value
      },
    });

    obj[key] = prop.value
  }
function(key, initValue, obj) {
    var isTimeProp = Audio.Clock.timeProperties.indexOf( key ) > -1,
        prop = obj.properties[ key ] = {
          value:  isTimeProp ? Audio.Clock.time( initValue ) : initValue,
          binops: [],
          parent : obj,
          name : key,
        },
        mappingName = key.charAt(0).toUpperCase() + key.slice(1);
    
    Object.defineProperty(obj, key, {
      configurable: true,
      get: function() { return prop.value },
      set: function(val) { 
        if( obj[ mappingName ] && obj[ mappingName ].mapping ) {
          if( obj[ mappingName ].mapping.remove )
            obj[ mappingName ].mapping.remove( true ) // pass true to avoid setting property inside of remove method
        }
        
        // if( isTimeProp ) {
        //   if( typeof val === 'object' && val.mode ==='absolute' ) { // ms, seconds
        //     prop.value = val.value
        //   }else{
        //     prop.value = Audio.Core.Binops.Mul( Audio.Clock.time( val ), Audio.Core.Binops.Div( 1, Audio.Clock.rate ) ) 
        //   }
        // }else{
        //   prop.value = val
        // }
        // 
        prop.value = isTimeProp ? Audio.Clock.time( val ) : val
        
        Audio.Core.dirty( obj )
        
        return prop.value
      },
    });

    obj[key] = prop.value
  }
function ( key , initValue , obj ) { var isTimeProp = Audio . Clock . timeProperties . indexOf ( key ) > - 1 , prop = obj . properties [ key ] = { value : isTimeProp ? Audio . Clock . time ( initValue ) : initValue , binops : [ ] , parent : obj , name : key , } , mappingName = key . charAt ( 0 ) . toUpperCase ( ) + key . slice ( 1 ) ; Object . defineProperty ( obj , key , { configurable : true , get : function ( ) { return prop . value } , set : function ( val ) { if ( obj [ mappingName ] && obj [ mappingName ] . mapping ) { if ( obj [ mappingName ] . mapping . remove ) obj [ mappingName ] . mapping . remove ( true ) // pass true to avoid setting property inside of remove method } // if( isTimeProp ) { //   if( typeof val === 'object' && val.mode ==='absolute' ) { // ms, seconds //     prop.value = val.value //   }else{ //     prop.value = Audio.Core.Binops.Mul( Audio.Clock.time( val ), Audio.Core.Binops.Div( 1, Audio.Clock.rate ) )  //   } // }else{ //   prop.value = val // } //  prop . value = isTimeProp ? Audio . Clock . time ( val ) : val Audio . Core . dirty ( obj ) return prop . value } , } ) ; obj [ key ] = prop . value }
override for Gibber.Audio.Core method
override for Gibber . Audio . Core method