void CREATE_NAME (void){ static bool has_inited = false; if (has_inited==false) { fill_type(&faust_type); CLASSNAME::classInit(MIXER_get_sample_rate()); // TODO: Don't do this. Just dispatch during runtime which rt_process to call. // Data *data = (Data*)create_effect_plugin_data(&faust_type, NULL, NULL, MIXER_get_sample_rate(), MIXER_get_buffer_size(), false); faust_type.name = DSP_NAME; faust_type.num_inputs = data->voices[0].dsp_instance->getNumInputs(); faust_type.num_outputs = data->voices[0].dsp_instance->getNumOutputs(); if(data->voices[0].myUI.is_instrument()){ faust_type.is_instrument = true; faust_type.RT_process = RT_process_instrument; faust_type.create_plugin_data = create_instrument_plugin_data; data->voices[0].myUI.remove_instrument_notecontrol_effects(); }else{ faust_type.is_instrument = false; faust_type.RT_process = RT_process_effect; faust_type.create_plugin_data = create_effect_plugin_data; faust_type.play_note = NULL; faust_type.set_note_volume = NULL; faust_type.stop_note = NULL; } faust_type.num_effects = data->voices[0].myUI._num_effects; has_inited = true; } PR_add_plugin_type(&faust_type); }
float lineDuration(int line, int tracknum, int blocknum, int windownum){ struct Tracker_Windows *window; struct WBlocks *wblock; struct WTracks *wtrack = getWTrackFromNumA(windownum, &window, blocknum, &wblock, tracknum); if (wtrack==NULL) return 1.0; struct Blocks *block = wblock->block; if (line < 0){ RError("lineDuration: Line must be 0 or larger: %d",line); return 1.0; } if (line >= block->num_lines){ RError("lineDuration: Line must be less than the number of lines: %d >= %d or larger: %d",line, block->num_lines); return 1.0; } Place p1 = {line, 0, 1}; Place p2 = {line+1, 0, 1}; STime s1 = Place2STime(block, &p1); STime s2 = Place2STime(block, &p2); return (double)(s2-s1) / (double)MIXER_get_sample_rate(); }
bool SOUNDFILESAVER_write(float **outputs, int num_frames){ PaUtil_FullMemoryBarrier(); if(g_save_state==BEFORE_WRITING && is_playing()==false) return true; if(g_save_state==AFTER_WRITING) return true; bool ret=true; int i; float interleaved_data[num_frames*2]; int pos=0; for(i=0;i<num_frames;i++){ interleaved_data[pos++] = outputs[0][i]; interleaved_data[pos++] = outputs[1][i]; } //printf("Writing %d frames\n",num_frames); if(sf_writef_float(g_sndfile, interleaved_data, num_frames) != num_frames){ g_saving_was_successful = false; ret = false; } if(g_save_state==IS_WRITING){ if(is_playing()==false){ g_save_state=POST_WRITING; } } if(g_save_state==POST_WRITING){ g_post_writing_left -= (float)num_frames/MIXER_get_sample_rate(); if(g_post_writing_left <= 0.0f){ stop_writing(); g_save_state=AFTER_WRITING; } } return ret; }
void CREATE_NAME (void){ fill_type(&faust_type); Data *data = (Data*)create_effect_plugin_data(&faust_type, NULL, NULL, MIXER_get_sample_rate(), MIXER_get_buffer_size()); faust_type.data = data; faust_type.name = DSP_NAME; faust_type.num_inputs = data->voices[0].dsp_instance->getNumInputs(); faust_type.num_outputs = data->voices[0].dsp_instance->getNumOutputs(); if(data->voices[0].myUI.is_instrument()){ faust_type.is_instrument = true; faust_type.RT_process = RT_process_instrument; faust_type.create_plugin_data = create_instrument_plugin_data; data->voices[0].myUI.remove_instrument_notecontrol_effects(); }else{ faust_type.is_instrument = false; faust_type.RT_process = RT_process_effect; faust_type.create_plugin_data = create_effect_plugin_data; faust_type.play_note = NULL; faust_type.set_note_volume = NULL; faust_type.stop_note = NULL; } faust_type.num_effects = data->voices[0].myUI._num_effects; PR_add_plugin_type(&faust_type); }