UNPKG

webgl-3d-animation

Version:

Interactive 3D animation using WebGL showing a 2D predator prey ecology on a grid which is real-time mapped onto the surface of a 3D torus. node.js server side gives access to WAV format files which are rendered using Web Audio API

102 lines (59 loc) 2.75 kB
var genetic_machinery_obj = function() { function genetic_launch(buff_obj) { buff_obj.flavor = "genetic_synthesis"; var size_buffer = buff_obj.buffer.length; console.log("genetic_launch ........... ", size_buffer); var num_channels = buff_obj.num_channels; console.log('inside genetic_launch with num_channels ', num_channels); // var desired_frequency = 800.0; // Hertz == cycles per second // var desired_frequency = 3600.0; // Hertz == cycles per second var desired_frequency = buff_obj.frequency; // Hertz == cycles per second // var sample_rate = 44100; // samples_per_second var sample_rate = buff_obj.sample_rate; // samples_per_second console.log('GGGG size_buffer ', size_buffer); console.log('GGGG desired_frequency ', desired_frequency); console.log('GGGG sample_rate ', sample_rate); console.log('GGGG num_channels ', num_channels); buff_obj.duration = size_buffer / (desired_frequency * sample_rate * num_channels); console.log('GGGG buff_obj.duration ', buff_obj.duration); /* var total_samples = size_buffer; var total_seconds = size_buffer / sample_rate; var total_cycles = total_seconds * desired_frequency; var samples_per_cycle = total_samples / total_cycles; var radians_per_cycle = 2.0 * Math.PI; var radians_per_sample = radians_per_cycle / samples_per_cycle; */ var radians_per_sample = (2.0 * Math.PI * desired_frequency) / (sample_rate); console.log('radians_per_sample ', radians_per_sample); // new radians_per_sample 0.11398068584452764 console.log("pppppppp sample_rate ", sample_rate); console.log("desired_frequency ", desired_frequency); console.log("radians_per_sample ", radians_per_sample); var curr_y; var theta = 0.0; var incr_theta = radians_per_sample; var index_buff = 0; do { /* curr_y = octave_offset * seed_obj.buffer[index_seed]; // console.log('curr_y ', curr_y); curr_y = curr_y / octave_offset; buff_obj.buffer[index_buff] += curr_y; // stens TODO may need to normalize post this loop // console.log('index_seed ', index_seed, index_buff, octave_offset, // ' strat ', buff_obj.buffer[index_buff]); index_seed++; if (! (index_seed < size_seed)) { index_seed = 0; // loop back to beginning as we repeat this seed buffer to pop main buff } */ // ------------- below synthesizes sine wave -------------- // buff_obj.buffer[index_buff] = Math.sin(theta); theta += incr_theta; } while (++index_buff < size_buffer); } // genetic_launch // --------------------------------------- return { // to make visible to calling reference frame list function here comma delimited, genetic_launch: genetic_launch }; }(); // genetic_machinery_obj = function()