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(); }
void copyTrack(int tracknum, int blocknum, int windownum){ struct Tracker_Windows *window=getWindowFromNum(windownum);if(window==NULL) return; if (tracknum==-1 && blocknum==-1){ CB_CopyTrack_CurrPos(window); } else { struct Tracker_Windows *window=NULL; struct WTracks *wtrack; struct WBlocks *wblock; wtrack=getWTrackFromNumA( windownum, &window, blocknum, &wblock, tracknum ); if(wtrack==NULL) return; cb_wtrack = CB_CopyTrack(wblock, wtrack); } window->must_redraw = true; }
void pasteTrack(int tracknum, int blocknum, int windownum){ if (tracknum==-1 && blocknum==-1){ struct Tracker_Windows *window=getWindowFromNum(windownum);if(window==NULL) return; CB_PasteTrack_CurrPos(window); return; } struct Tracker_Windows *window=NULL; struct WTracks *wtrack; struct WBlocks *wblock; wtrack=getWTrackFromNumA( windownum, &window, blocknum, &wblock, tracknum ); if(wtrack==NULL) return; if (cb_wtrack != NULL) { Undo_Open_rec();{ ADD_UNDO(Track(window, wblock, wtrack, wblock->curr_realline)); co_CB_PasteTrack(wblock, cb_wtrack, wtrack); }Undo_Close(); } window->must_redraw = true; }
int getPianorollHighKey(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 127; return wtrack->pianoroll_highkey; }
float getHighestKey(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; return TRACK_get_max_pitch(wtrack->track); }
void setPianorollLowKey(int key, 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; int newkey = R_BOUNDARIES(0, key, 127); if (wtrack->pianoroll_highkey - newkey < 5) return; wtrack->pianoroll_lowkey = newkey; UpdateWBlockCoordinates(window,wblock); window->must_redraw=true; }