/****************************************************************** FUNCTION Just a way to get the same fx corresponding to 'num'. ******************************************************************/ struct FX *getTrackFX(struct Tracks *track,int num){ struct FXs *fxs=track->fxs; int nnum=0; while(fxs!=NULL){ if(nnum==num){ return fxs->fx; } nnum++; fxs=NextFX(fxs); } RError("Error at function getTrackFX in file fxlines.c\n"); return NULL; }
void CB_CutTrack( struct Tracker_Windows *window, struct WBlocks *wblock, struct WTracks *wtrack ){ struct FXs *fxs=wtrack->track->fxs; cb_fxs=CB_CopyFxs(wblock,wtrack); while(fxs!=NULL){ (*fxs->fx->closeFX)(fxs->fx,wtrack->track); fxs=NextFX(fxs); } wtrack->track->fxs=NULL; }
void CB_CutFx_Force( struct WBlocks *wblock, struct WTracks *wtrack ){ struct FXs *fxs=wtrack->track->fxs; cb_wtrack=CB_CopyTrack(wblock,wtrack); wtrack->track->notes=NULL; wtrack->track->stops=NULL; while(fxs!=NULL){ (*fxs->fx->closeFX)(fxs->fx,wtrack->track); fxs=NextFX(fxs); } wtrack->track->fxs=NULL; }
// Called after loading and undo. Can be called at any time. void FX_update_all_slider_automation_visuals(void){ struct Blocks *block = root->song->blocks; while(block!=NULL){ struct Tracks *track = block->tracks; while(track!=NULL){ struct FXs *fxs=track->fxs; while(fxs!=NULL){ fxs->fx->slider_automation_value = OS_SLIDER_obtain_automation_value_pointer(track->patch,fxs->fx->effect_num); fxs->fx->slider_automation_color = OS_SLIDER_obtain_automation_color_pointer(track->patch,fxs->fx->effect_num); fxs = NextFX(fxs); } track = NextTrack(track); } block = NextBlock(block); } }
void InitPEQBlockfxs( const struct Blocks *block, const Place *p ){ struct Tracks *track=block->tracks; struct FXs *fxs; while(track!=NULL){ fxs=track->fxs; while(fxs!=NULL){ InitPEQfxs(block,track,fxs); fxs=NextFX(fxs); } track=NextTrack(track); } }
void UpdateFXNodeLines( struct Tracker_Windows *window, struct WBlocks *wblock, struct WTracks *wtrack ){ struct FXs *fx=wtrack->track->fxs; struct FXNodeLines *prev; struct FXNodeLines *fxnode; struct FXextrainfo fxextrainfo={0}; wtrack->wfxnodes=talloc(sizeof(WFXNodes *) * wblock->num_reallines); while(fx!=NULL){ fxextrainfo.FXs=fx; prev=fx->fxnodelines; fxnode=NextFXNodeLine(prev); fxextrainfo.color=fx->fx->color; while(fxnode!=NULL){ fxextrainfo.FXNodeLine=prev; MakeNodeLines( window, wblock, wtrack, &prev->l.p, &fxnode->l.p, (float)prev->val,(float)fxnode->val, (float) fx->fx->min,(float) fx->fx->max, &fxextrainfo, &MakeWFXNodesCallBack ); prev=fxnode; fxnode=NextFXNodeLine(fxnode); } fx=NextFX(fx); } }
void FX_min_max_have_changed_for_patch(struct Patch *patch, NInt fxnum, float old_min, float old_max, float new_min, float new_max){ struct Blocks *block = root->song->blocks; while(block!=NULL){ struct Tracks *track = block->tracks; while(track!=NULL){ if (track->patch == patch) { struct FXs *fxs=track->fxs; while(fxs!=NULL){ if (fxs->l.num == fxnum) { struct FX *fx = fxs->fx; int fx_min = fx->min; int fx_max = fx->max; struct FXNodeLines *fxnode = fxs->fxnodelines; Undo_FXs(root->song->tracker_windows, block, track, 0); while(fxnode != NULL) { double real_val = scale_double(fxnode->val, fx_min, fx_max, old_min, old_max); fxnode->val = scale_double(real_val, new_min, new_max, fx_min, fx_max); fxnode = NextFXNodeLine(fxnode); } block->is_dirty=true; } fxs = NextFX(fxs); } } track = NextTrack(track); } block = NextBlock(block); } }
void Block_Set_num_lines( struct Blocks *block, int num_lines ){ Place lastplace1,lastplace; struct Tracker_Windows *window=root->song->tracker_windows; struct WBlocks *wblock; struct LocalZooms *localzoom; struct Tracks *track=block->tracks; struct Notes *note; struct FXs *fxs; int org_num_lines=block->num_lines; int lokke; if(org_num_lines==num_lines || num_lines<2) return; PlaceSetLastPos(block,&lastplace1); block->num_lines=num_lines; PlaceSetLastPos(block,&lastplace); if(num_lines<org_num_lines){ CutListAt_a(&block->lpbs,&lastplace); CutListAt_a(&block->tempos,&lastplace); CutListAt_a(&block->temponodes,&lastplace); PlaceSetLastPos(block,&block->lasttemponode->l.p); ListAddElement3(&block->temponodes,&block->lasttemponode->l); while(track!=NULL){ CutListAt_a(&track->notes,&lastplace); note=track->notes; while(note!=NULL){ CutListAt(¬e->velocities,&lastplace); CutListAt(¬e->pitches,&lastplace); if(PlaceEqual(¬e->end,&lastplace1) && note->noend==1){ PlaceCopy(¬e->end,&lastplace); } note=NextNote(note); } LegalizeNotes(block,track); CutListAt_a(&track->stops,&lastplace); fxs=track->fxs; while(fxs!=NULL){ CutListAt_a(&fxs->fxnodelines,&lastplace); fxs=NextFX(fxs); } LegalizeFXlines(block,track); track=NextTrack(track); } while(window!=NULL){ wblock=ListFindElement1(&window->wblocks->l,block->l.num); CutListAt_a(&wblock->localzooms,&lastplace); window=NextWindow(window); } }else{ PlaceSetLastPos(block,&block->lasttemponode->l.p); while(track!=NULL){ note=track->notes; while(note!=NULL){ if(PlaceEqual(¬e->end,&lastplace1) && note->noend==1){ PlaceSetLastPos(block,¬e->end); } note=NextNote(note); } LegalizeNotes(block,track); track=NextTrack(track); } while(window!=NULL){ wblock=ListFindElement1(&window->wblocks->l,block->l.num); for(lokke=org_num_lines;lokke<num_lines;lokke++){ localzoom=talloc(sizeof(struct LocalZooms)); localzoom->Tline=lokke; localzoom->Tdividor=1; localzoom->zoomline=lokke; ListAddElement3(&wblock->localzooms,&localzoom->l); } window=NextWindow(window); } } window=root->song->tracker_windows; while(window!=NULL){ wblock=ListFindElement1(&window->wblocks->l,block->l.num); UpdateWBlockWidths(window,wblock); UpdateRealLines(window,wblock); window=NextWindow(window); } UpdateSTimes(block); UpdateBeats(block); }