diff options
author | Robert Jonsson <spamatica@gmail.com> | 2011-09-15 12:14:55 +0000 |
---|---|---|
committer | Robert Jonsson <spamatica@gmail.com> | 2011-09-15 12:14:55 +0000 |
commit | b0546e5e7f7044019892543c6c82029db8d564a7 (patch) | |
tree | 1b96a6260900f3fbf3513fb48a5a72aa89052dc8 /attic/muse_qt4_evolution/synti/zynaddsubfx/Seq | |
parent | 583c73d1a07154d3d2672d65d8cce6495f490454 (diff) |
moved attic to a branch of it's own
Diffstat (limited to 'attic/muse_qt4_evolution/synti/zynaddsubfx/Seq')
6 files changed, 0 insertions, 879 deletions
diff --git a/attic/muse_qt4_evolution/synti/zynaddsubfx/Seq/MIDIEvents.C b/attic/muse_qt4_evolution/synti/zynaddsubfx/Seq/MIDIEvents.C deleted file mode 100644 index 729089c6..00000000 --- a/attic/muse_qt4_evolution/synti/zynaddsubfx/Seq/MIDIEvents.C +++ /dev/null @@ -1,85 +0,0 @@ -/* - ZynAddSubFX - a software synthesizer - - MIDIEvents.C - It stores the midi events from midi file or sequencer - Copyright (C) 2003-2005 Nasca Octavian Paul - Author: Nasca Octavian Paul - - This program is free software; you can redistribute it and/or modify - it under the terms of version 2 of the GNU General Public License - as published by the Free Software Foundation. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License (version 2) for more details. - - You should have received a copy of the GNU General Public License (version 2) - along with this program; if not, write to the Free Software Foundation, - Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - -*/ - -#include "MIDIEvents.h" -#include <stdlib.h> -#include <stdio.h> - -MIDIEvents::MIDIEvents(){ -}; - -MIDIEvents::~MIDIEvents(){ -}; - - -/************** Track stuff ***************/ -void MIDIEvents::writeevent(list *l,event *ev){ - listpos *tmp=new listpos; - tmp->next=NULL; - tmp->ev=*ev; - if (l->current!=NULL) l->current->next=tmp; - else l->first=tmp; - l->current=tmp; -// printf("Wx%x ",(int) l->current); -// printf("-> %d \n",l->current->ev.deltatime); - l->size++; -}; - -void MIDIEvents::readevent(list *l,event *ev){ - if (l->current==NULL) { - ev->type=-1; - return; - }; - *ev=l->current->ev; - l->current=l->current->next; - - //test - if (l->current!=NULL) { -// ev->deltatime=10000; -// printf("Rx%d\n",l->current->ev.deltatime); -// printf("Rx%x ",(int) l->current); -// printf("-> %d (next=%x) \n",(int)l->current->ev.deltatime,(int)l->current->next); - }; - -}; - - -void MIDIEvents::rewindlist(list *l){ - l->current=l->first; -}; - -void MIDIEvents::deletelist(list *l){ - l->current=l->first; - if (l->current==NULL) return; - while (l->current->next!=NULL){ - listpos *tmp=l->current; - l->current=l->current->next; - delete(tmp); - }; - deletelistreference(l); -}; - -void MIDIEvents::deletelistreference(list *l){ - l->current=l->first=NULL; - l->size=0; - l->length=0.0; -}; diff --git a/attic/muse_qt4_evolution/synti/zynaddsubfx/Seq/MIDIEvents.h b/attic/muse_qt4_evolution/synti/zynaddsubfx/Seq/MIDIEvents.h deleted file mode 100644 index 1bf9befc..00000000 --- a/attic/muse_qt4_evolution/synti/zynaddsubfx/Seq/MIDIEvents.h +++ /dev/null @@ -1,66 +0,0 @@ -/* - ZynAddSubFX - a software synthesizer - - MIDIEvents.h - It stores the midi events from midi file or sequencer - Copyright (C) 2003-2005 Nasca Octavian Paul - Author: Nasca Octavian Paul - - This program is free software; you can redistribute it and/or modify - it under the terms of version 2 of the GNU General Public License - as published by the Free Software Foundation. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License (version 2) for more details. - - You should have received a copy of the GNU General Public License (version 2) - along with this program; if not, write to the Free Software Foundation, - Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - -*/ -#ifndef MIDI_EVENTS_H -#define MIDI_EVENTS_H - -#include "../globals.h" -#define NUM_MIDI_TRACKS NUM_MIDI_CHANNELS - -class MIDIEvents{ - friend class MIDIFile; - public: - MIDIEvents(); - ~MIDIEvents(); - - protected: - - /* Events */ - struct event{ - int deltatime; - int channel;//on what midi channel is - int type,par1,par2;//type=1 for note, type=2 for controller, type=255 for time messages - } tmpevent; - struct listpos{ - event ev; - struct listpos *next; - }; - struct list{ - listpos *first,*current; - int size;//how many events are - double length;//in seconds - }; - struct { - list track;//the stored track - list record;//the track being "recorded" from midi - } miditrack[NUM_MIDI_TRACKS]; - - void writeevent(list *l,event *ev); - void readevent(list *l,event *ev); - - void rewindlist(list *l); - void deletelist(list *l); - void deletelistreference(list *l); - -}; - - -#endif diff --git a/attic/muse_qt4_evolution/synti/zynaddsubfx/Seq/MIDIFile.C b/attic/muse_qt4_evolution/synti/zynaddsubfx/Seq/MIDIFile.C deleted file mode 100644 index a5fdaa1c..00000000 --- a/attic/muse_qt4_evolution/synti/zynaddsubfx/Seq/MIDIFile.C +++ /dev/null @@ -1,389 +0,0 @@ -/* - ZynAddSubFX - a software synthesizer - - MIDIFile.C - MIDI file loader - Copyright (C) 2003-2005 Nasca Octavian Paul - Author: Nasca Octavian Paul - - This program is free software; you can redistribute it and/or modify - it under the terms of version 2 of the GNU General Public License - as published by the Free Software Foundation. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License (version 2) for more details. - - You should have received a copy of the GNU General Public License (version 2) - along with this program; if not, write to the Free Software Foundation, - Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - -*/ - -#include <stdio.h> -#include <string.h> -#include "MIDIFile.h" - - -MIDIFile::MIDIFile(){ - midifile=NULL; - midifilesize=0; - midifilek=0; - midieof=false; - me=NULL; -}; - -MIDIFile::~MIDIFile(){ - clearmidifile(); -}; - -int MIDIFile::loadfile(char *filename){ - clearmidifile(); - - FILE *file=fopen(filename,"r"); - if (file==NULL) return(-1); - - char header[4]; - ZERO(header,4); - fread(header,4,1,file); - - //test to see if this a midi file - if ((header[0]!='M')||(header[1]!='T')||(header[2]!='h')||(header[3]!='d')){ - fclose(file); - return(-1); - }; - - //get the filesize - fseek(file,0,SEEK_END); - midifilesize=ftell(file); - rewind(file); - - midifile=new unsigned char[midifilesize]; - ZERO(midifile,midifilesize); - fread(midifile,midifilesize,1,file); - fclose(file); - -// for (int i=0;i<midifilesize;i++) printf("%2x ",midifile[i]); -// printf("\n"); - - - return(0); -}; - -int MIDIFile::parsemidifile(MIDIEvents *me_){ - this->me=me_; - - //read the header - int chunk=getint32();//MThd - if (chunk!=0x4d546864) return(-1); - int size=getint32(); - if (size!=6) return(-1);//header is always 6 bytes long - - - int format=getint16(); - printf("format %d\n",format); - - int ntracks=getint16();//this is always 1 if the format is "0" - printf("ntracks %d\n",ntracks); - - int division=getint16(); - printf("division %d\n",division); - if (division>=0){//delta time units in each a quater note -// tick=???; - } else {//SMPTE (frames/second and ticks/frame) - printf("ERROR:in MIDIFile.C::parsemidifile() - SMPTE not implemented yet."); - }; - - if (ntracks>=NUM_MIDI_TRACKS) ntracks=NUM_MIDI_TRACKS-1; - - for (int n=0;n<ntracks;n++){ - if (parsetrack(n)<0) { - clearmidifile(); - return(-1); - }; - }; - - printf("\n\nCURRENT File position is = 0x%x\n",midifilek); - printf("\nMIDI file succesfully parsed.\n"); -// printf("\n0x%x\n",getbyte()); - - this->me=NULL; - return(0); -}; - -//private members - - -int MIDIFile::parsetrack(int ntrack){ - printf("\n--==*Reading track %d **==--\n",ntrack); - - int chunk=getint32();//MTrk - if (chunk!=0x4d54726b) return(-1); - - int size=getint32(); - printf("size = %d\n",size); - - int oldmidifilek=midifilek; - - unsigned char lastmsg=0; - unsigned int dt=0; - - while(!midieof){ - unsigned int msgdeltatime=getvarint32(); - -/// printf("MSGDELTATIME = %d\n",msgdeltatime); - -// dt+=msgdeltatime; - - int msg=peekbyte(); -/// printf("raw msg=0x%x ",msg); - if (msg<0x80) { - msg=lastmsg; - } else { - lastmsg=msg; - getbyte(); - }; -/// printf("msg=0x%x\n",msg); - -// dt+=msgdeltatime; - add_dt(ntrack, msgdeltatime); - - unsigned int mtype,mlength; - - switch(msg){ - case 0x80 ... 0x8f://note on off - parsenoteoff(ntrack,msg & 0x0f,dt); - dt=0; - break; - case 0x90 ... 0x9f://note on (or note off) - parsenoteon(ntrack,msg & 0x0f,dt); - dt=0; - break; - case 0xa0 ... 0xaf://aftertouch - ignored - skipnbytes(2); - break; - case 0xb0 ... 0xbf://control change - parsecontrolchange(ntrack,msg & 0x0f,dt); - dt=0; - break; - case 0xc0 ... 0xcf://program change - ignored - skipnbytes(1); - break; - case 0xd0 ... 0xdf://channel pressure - ignored - skipnbytes(1); - break; - case 0xe0 ... 0xef://channel mode messages - skipnbytes(2); - break; - case 0xf0://sysex - ignored - while (getbyte()!=0xf7){ - if (midieof) break; - }; - break; - case 0xf7://sysex (another type) - ignored - skipnbytes(getvarint32()); - break; - - case 0xff://meta-event - mtype=getbyte(); - mlength=getbyte(); - parsemetaevent(mtype,mlength); - break; - - default: - getbyte(); - printf("UNKNOWN message! 0x%x\n",msg); - return(-1); - break; - }; - - - - if (midieof) return(-1); - - if ((midifilek-oldmidifilek)==size) break; - else if((midifilek-oldmidifilek)>size) return(-1); -// if (size!=6) return(-1);//header is always 6 bytes long - }; - - printf("End Track\n\n"); - - return(0); -}; - - -void MIDIFile::parsenoteoff(char ntrack,char chan,unsigned int dt){ - unsigned char note; - note=getbyte(); - - unsigned char noteoff_velocity=getbyte();//unused by zynaddsubfx - noteoff_velocity=0; - if (chan>=NUM_MIDI_CHANNELS) return; - - me->tmpevent.deltatime=convertdt(dt); - me->tmpevent.type=1; - me->tmpevent.par1=note; - me->tmpevent.par2=0; - me->tmpevent.channel=chan; - - printf("Note off:%d \n",note); - - ///test -// ntrack=0; - - me->writeevent(&me->miditrack[(int)ntrack].record,&me->tmpevent); - -}; - - -void MIDIFile::parsenoteon(char ntrack,char chan,unsigned int dt){ - unsigned char note,vel; - note=getbyte(); - vel=getbyte(); - -// printf("ntrack=%d\n",ntrack); - printf("[dt %d ] Note on:%d %d\n",dt,note,vel); - - if (chan>=NUM_MIDI_CHANNELS) return; - - me->tmpevent.deltatime=convertdt(dt); - me->tmpevent.type=1; - me->tmpevent.par1=note; - me->tmpevent.par2=vel; - me->tmpevent.channel=chan; - me->writeevent(&me->miditrack[(int)ntrack].record,&me->tmpevent); - - - -}; - -void MIDIFile::parsecontrolchange(char ntrack,char chan,unsigned int dt){ - unsigned char control,value; - control=getbyte(); - value=getbyte(); - - if (chan>=NUM_MIDI_CHANNELS) return; - - printf("[dt %d] Control change:%d %d\n",dt,control,value); - - me->tmpevent.deltatime=convertdt(dt); - me->tmpevent.type=2; - me->tmpevent.par1=control;//???????????? ma uit la Sequencer::recordnote() din varianele vechi de zyn - me->tmpevent.par2=value; - me->tmpevent.channel=chan; - me->writeevent(&me->miditrack[(int)ntrack].record,&me->tmpevent); - -}; - -void MIDIFile::parsepitchwheel(char ntrack,char chan, unsigned int dt){ - unsigned char valhi,vallo; - vallo=getbyte(); - valhi=getbyte(); - - if (chan>=NUM_MIDI_CHANNELS) return; - - int value=(int)valhi*128+vallo; - - printf("[dt %d] Pitch wheel:%d\n",dt,value); - -}; - -void MIDIFile::parsemetaevent(unsigned char mtype,unsigned char mlength){ - int oldmidifilek=midifilek; - printf("meta-event type=0x%x length=%d\n",mtype,mlength); - - - - midifilek=oldmidifilek+mlength; - -}; - -void MIDIFile::add_dt(char ntrack, unsigned int dt){ - me->tmpevent.deltatime=convertdt(dt); - me->tmpevent.type=255; - me->tmpevent.par1=0; - me->tmpevent.par2=0; - me->tmpevent.channel=0; - me->writeevent(&me->miditrack[(int)ntrack].record,&me->tmpevent); -}; - - -unsigned int MIDIFile::convertdt(unsigned int dt){ - double result=dt; - printf("DT=%d\n",dt); - - return((int) (result*15.0)); -}; - - -void MIDIFile::clearmidifile(){ - if (midifile!=NULL) delete(midifile); - midifile=NULL; - midifilesize=0; - midifilek=0; - midieof=false; - data.tick=0.05; -}; - -unsigned char MIDIFile::getbyte(){ - if (midifilek>=midifilesize) { - midieof=true; - return(0); - }; - -/// printf("(%d) ",midifile[midifilek]); - return(midifile[midifilek++]); -}; - -unsigned char MIDIFile::peekbyte(){ - if (midifilek>=midifilesize) { - midieof=true; - return(0); - }; - return(midifile[midifilek]); -}; - -unsigned int MIDIFile::getint32(){ - unsigned int result=0; - for (int i=0;i<4;i++) { - result=result*256+getbyte(); - }; - if (midieof) result=0; - return(result); -}; - -unsigned short int MIDIFile::getint16(){ - unsigned short int result=0; - for (int i=0;i<2;i++) { - result=result*256+getbyte(); - }; - if (midieof) result=0; - return(result); -}; - -unsigned int MIDIFile::getvarint32(){ - unsigned long result=0; - unsigned char b; - -/// printf("\n[start]"); - - if ((result = getbyte()) & 0x80) { - result &= 0x7f; - do { - b=getbyte(); - result = (result << 7) + (b & 0x7f); - }while (b & 0x80); - } -/// printf("[end - result= %d]\n",result); - return result; -}; - - -void MIDIFile::skipnbytes(int n){ - midifilek+=n; - if (midifilek>=midifilesize){ - midifilek=midifilesize-1; - midieof=true; - }; -}; - diff --git a/attic/muse_qt4_evolution/synti/zynaddsubfx/Seq/MIDIFile.h b/attic/muse_qt4_evolution/synti/zynaddsubfx/Seq/MIDIFile.h deleted file mode 100644 index c88f679c..00000000 --- a/attic/muse_qt4_evolution/synti/zynaddsubfx/Seq/MIDIFile.h +++ /dev/null @@ -1,90 +0,0 @@ -/* - ZynAddSubFX - a software synthesizer - - MIDIFile.h - MIDI file loader - Copyright (C) 2003-2005 Nasca Octavian Paul - Author: Nasca Octavian Paul - - This program is free software; you can redistribute it and/or modify - it under the terms of version 2 of the GNU General Public License - as published by the Free Software Foundation. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License (version 2) for more details. - - You should have received a copy of the GNU General Public License (version 2) - along with this program; if not, write to the Free Software Foundation, - Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - -*/ - -#ifndef MIDIFILE_H -#define MIDIFILE_H - -#include "../globals.h" -#include "MIDIEvents.h" - -class MIDIFile{ - public: - MIDIFile(); - ~MIDIFile(); - - //returns -1 if there is an error, otherwise 0 - int loadfile(char *filename); - - //returns -1 if there is an error, otherwise 0 - int parsemidifile(MIDIEvents *me_); - - private: - MIDIEvents *me; - - unsigned char *midifile; - int midifilesize,midifilek; - bool midieof; - - //returns -1 if there is an error, otherwise 0 - int parsetrack(int ntrack); - - void parsenoteoff(char ntrack,char chan,unsigned int dt); - void parsenoteon(char ntrack,char chan,unsigned int dt); - void parsecontrolchange(char ntrack,char chan,unsigned int dt); - void parsepitchwheel(char ntrack,char chan, unsigned int dt); - void parsemetaevent(unsigned char mtype,unsigned char mlength); - - void add_dt(char ntrack, unsigned int dt); - - void clearmidifile(); - - //convert the delta-time to internal format - unsigned int convertdt(unsigned int dt); - - /* Low Level MIDIfile functions */ - - //get a byte from the midifile - unsigned char getbyte(); - - //peek the current byte from the midifile - unsigned char peekbyte(); - - //get a set of 4 bytes from the midifile - unsigned int getint32(); - - //get a word of 2 bytes from the midifile - unsigned short int getint16(); - - //read a variable length quantity - unsigned int getvarint32(); - - //skip some bytes - void skipnbytes(int n); - - struct { - double tick;//how many seconds one tick has - - }data; - -}; - -#endif diff --git a/attic/muse_qt4_evolution/synti/zynaddsubfx/Seq/Sequencer.C b/attic/muse_qt4_evolution/synti/zynaddsubfx/Seq/Sequencer.C deleted file mode 100644 index d81ee611..00000000 --- a/attic/muse_qt4_evolution/synti/zynaddsubfx/Seq/Sequencer.C +++ /dev/null @@ -1,165 +0,0 @@ -/* - ZynAddSubFX - a software synthesizer - - Sequencer.C - The Sequencer - Copyright (C) 2003-2005 Nasca Octavian Paul - Author: Nasca Octavian Paul - - This program is free software; you can redistribute it and/or modify - it under the terms of version 2 of the GNU General Public License - as published by the Free Software Foundation. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License (version 2) for more details. - - You should have received a copy of the GNU General Public License (version 2) - along with this program; if not, write to the Free Software Foundation, - Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - -*/ - -#include <math.h> -#include <stdlib.h> -#include <stdio.h> - -#include <sys/time.h> -#include <time.h> - -#include "Sequencer.h" - - - -Sequencer::Sequencer(){ - play=0; - for (int i=0;i<NUM_MIDI_TRACKS;i++){ - miditrack[i].track.first=NULL; - miditrack[i].track.current=NULL; - miditrack[i].track.size=0; - miditrack[i].track.length=0.0; - miditrack[i].record.first=NULL; - miditrack[i].record.current=NULL; - miditrack[i].record.size=0; - miditrack[i].record.length=0.0; - - nextevent[i].time=0.0; - resettime(&playtime[i]); - }; - - setplayspeed(0); -}; - -Sequencer::~Sequencer(){ - for (int i=0;i<NUM_MIDI_TRACKS;i++){ - deletelist(&miditrack[i].track); - deletelist(&miditrack[i].record); - }; -}; - - -int Sequencer::importmidifile(char *filename){ - if (midifile.loadfile(filename)<0) return(-1); - - for (int i=0;i<NUM_MIDI_TRACKS;i++){ - deletelist(&miditrack[i].record); - }; - if (midifile.parsemidifile(this)<0) return(-1); - - //copy the "record" track to the main track - for (int i=0;i<NUM_MIDI_TRACKS;i++){ - deletelist(&miditrack[i].track); - miditrack[i].track=miditrack[i].record; - deletelistreference(&miditrack[i].record); - }; - return(0); -}; - - - -void Sequencer::startplay(){ - if (play!=0) return; - for (int i=0;i<NUM_MIDI_TRACKS;i++) resettime(&playtime[i]); - - for (int i=0;i<NUM_MIDI_TRACKS;i++){ - rewindlist(&miditrack[i].track); - }; - play=1; - -}; -void Sequencer::stopplay(){ - if (play==0) return; - play=0; -}; - -// ************ Player stuff *************** - -int Sequencer::getevent(char ntrack,int *midich, int *type,int *par1, int *par2){ - *type=0; - if (play==0) return(-1); - - //test -// if (ntrack!=0) return(-1); - - updatecounter(&playtime[(int)ntrack]); - -// printf("%g %g\n",nextevent[ntrack].time,playtime[ntrack].abs); - - if (nextevent[(int)ntrack].time<playtime[(int)ntrack].abs) readevent(&miditrack[(int)ntrack].track,&nextevent[(int)ntrack].ev); - else return(-1); - if (nextevent[(int)ntrack].ev.type==-1) return(-1); -// printf("********************************\n"); - - //sa pun aici o protectie. a.i. daca distanta dintre timpul curent si eveliment e prea mare (>1sec) sa elimin nota - - if (ntrack==1) printf("_ %f %.2f (%d)\n",nextevent[(int)ntrack].time,playtime[(int)ntrack].abs,nextevent[(int)ntrack].ev.par2); - - *type=nextevent[(int)ntrack].ev.type; - *par1=nextevent[(int)ntrack].ev.par1; - *par2=nextevent[(int)ntrack].ev.par2; - *midich=nextevent[(int)ntrack].ev.channel; - - - double dt=nextevent[(int)ntrack].ev.deltatime*0.0001*realplayspeed; - printf("zzzzzzzzzzzzzz[%d] %d\n",ntrack,nextevent[(int)ntrack].ev.deltatime); - nextevent[(int)ntrack].time+=dt; - -// printf("%f - %d %d \n",nextevent[ntrack].time,par1,par2); - return(0);//?? sau 1 -}; - -/************** Timer stuff ***************/ - -void Sequencer::resettime(timestruct *t){ - t->abs=0.0; - t->rel=0.0; - - timeval tval; - - t->last=0.0; - #ifndef OS_WINDOWS - if (gettimeofday(&tval,NULL)==0) - t->last=tval.tv_sec+tval.tv_usec*0.000001; - #endif - -}; - -void Sequencer::updatecounter(timestruct *t){ - timeval tval; - double current=0.0; - #ifndef OS_WINDOWS - if (gettimeofday(&tval,NULL)==0) - current=tval.tv_sec+tval.tv_usec*0.000001; - #endif - - t->rel=current - t->last; - t->abs+=t->rel; - t->last=current; - -// printf("%f %f %f\n",t->last,t->abs,t->rel); -}; - -void Sequencer::setplayspeed(int speed){ - playspeed=speed; - realplayspeed=pow(10.0,speed/128.0); -}; diff --git a/attic/muse_qt4_evolution/synti/zynaddsubfx/Seq/Sequencer.h b/attic/muse_qt4_evolution/synti/zynaddsubfx/Seq/Sequencer.h deleted file mode 100644 index 82ebe495..00000000 --- a/attic/muse_qt4_evolution/synti/zynaddsubfx/Seq/Sequencer.h +++ /dev/null @@ -1,84 +0,0 @@ -/* - ZynAddSubFX - a software synthesizer - - Sequencer.h - The Sequencer - Copyright (C) 2003-2005 Nasca Octavian Paul - Author: Nasca Octavian Paul - - This program is free software; you can redistribute it and/or modify - it under the terms of version 2 of the GNU General Public License - as published by the Free Software Foundation. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License (version 2) for more details. - - You should have received a copy of the GNU General Public License (version 2) - along with this program; if not, write to the Free Software Foundation, - Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -*/ - -#ifndef SEQUENCER_H -#define SEQUENCER_H - -#include "../globals.h" -#include "MIDIEvents.h" -#include "MIDIFile.h" - -class Sequencer:public MIDIEvents{ - public: - Sequencer(); - ~Sequencer(); - - //theese functions are called by the master and are ignored if the recorder/player are stopped - void recordnote(char chan, char note, char vel); - void recordcontroller(char chan,unsigned int type,int par); - - //this is only for player - //it returns 1 if this must be called at least once more - //it returns 0 if there are no more notes for the current time - //or -1 if there is no note - int getevent(char ntrack, int *midich,int *type,int *par1, int *par2); - - //returns 0 if ok or -1 if there is a error loading file - int importmidifile(char *filename); - - void startplay(); - void stopplay(); - - - int play; - int playspeed;//viteza de rulare (0.1x-10x), 0=1.0x, 128=10x - void setplayspeed(int speed); - - private: - - MIDIFile midifile; - - /* Timer */ - struct timestruct{ - double abs;//the time from the begining of the track - double rel;//the time difference between the last and the current event - double last;//the time of the last event (absolute, since 1 Jan 1970) - //theese must be double, because the float's precision is too low - //and all theese represents the time in seconds - } playtime[NUM_MIDI_TRACKS]; - - void resettime(timestruct *t); - void updatecounter(timestruct *t);//this updates the timer values - - /* Player only*/ - - struct { - event ev; - double time; - } nextevent[NUM_MIDI_TRACKS]; - - double realplayspeed; - -}; - - -#endif - |