~ubuntu-branches/ubuntu/saucy/gramophone2/saucy

« back to all changes in this revision

Viewing changes to grammyVM.c

  • Committer: Bazaar Package Importer
  • Author(s): Francesco Namuri
  • Date: 2007-12-02 18:05:23 UTC
  • mfrom: (1.1.1 upstream)
  • Revision ID: james.westby@ubuntu.com-20071202180523-41tn674kf1kj7gdg
Tags: 0.5.13a-1
New upstream release.

Show diffs side-by-side

added added

removed removed

Lines of Context:
496
496
        
497
497
        if(op_counter && players[playerCount]->productions[id_prod]->midicode[players[playerCount]->productions[id_prod]->cc][1]>=0) {
498
498
                old_note=note[0]=players[playerCount]->productions[id_prod]->midicode[players[playerCount]->productions[id_prod]->cc][1];
499
 
                //for(i=0; i<=op_counter-1; i++)
500
499
                for(i=op_counter-1; i>=0; i--)
501
500
                        switch(melop[i][0]) {
502
501
                                case 1:
613
612
 
614
613
unsigned char chomsky_generator(unsigned int nt, unsigned int iteration, unsigned char isChord) {
615
614
        unsigned char code, stop=0, rep[MAX_RECURSION][2];
616
 
        unsigned int it, caso, reg, *pointer;
 
615
        unsigned int it, caso, reg, *pointer, tmp;
617
616
        register unsigned int i=0, j=0, k, w;
618
617
        register char note_chord_counter=0;
 
618
        int sum_trn=0, sum_inv=0, y;
619
619
        
620
620
        if(!iteration)
621
621
                return 0;
731
731
                                }                               
732
732
                                break;
733
733
                        case _INV:
734
 
                                melop[op_counter][0]=2;
735
734
                                pointer=players[playerCount]->productions[nt]->midicode[players[playerCount]->productions[nt]->cc];
736
 
                                while(pointer[0]!=_NOTEON)
737
 
                                        pointer++;
738
 
                                melop[op_counter++][1]=pointer[1];                              
 
735
                                if((pointer+10)[0]!=_RTRGD) {
 
736
                                        melop[op_counter][0]=2;
 
737
                                        while(pointer[0]!=_NOTEON)
 
738
                                                pointer++;      //step 10!!!
 
739
                                        melop[op_counter++][1]=pointer[1];
 
740
                                }
 
741
                                else
 
742
                                        melop[op_counter++][0]=4;               //Inversion of Retrograde       
739
743
                                break;
740
744
                        case _RTRGD:
741
745
                                melop[op_counter++][0]=3;
749
753
                                break;
750
754
                        case _ENDMELOP:
751
755
                                if(melop[op_counter-1][0]==3) {
 
756
                                        if(melop[op_counter-2][0]==4)
 
757
                                                melop[op_counter-2][1]=(!(*rtgd_buffer[rtgd_counter-1])[rtgd_note_count-1][0])?(*rtgd_buffer[rtgd_counter-1])[rtgd_note_count-1][1]:(*rtgd_buffer[rtgd_counter-1])[rtgd_note_count-2][1];                                                       
752
758
                                        if(rtgd_counter>1) {
753
759
                                                w=(*rtgd_buffer[rtgd_counter-1])[0][0];
754
760
                                                for(k=rtgd_note_count; k>1; k--) {
 
761
                                                        
 
762
                                                        /********************************************************/
 
763
 
 
764
                                                        if(melop[op_counter-2][0]==4) {
 
765
                                                                (*rtgd_buffer[rtgd_counter-1])[k-1][1]+=2*(melop[op_counter-2][1]-(*rtgd_buffer[rtgd_counter-1])[k-1][1]);
 
766
                                                                while((int)(*rtgd_buffer[rtgd_counter-1])[k-1][1]<0)
 
767
                                                                  (*rtgd_buffer[rtgd_counter-1])[k-1][1]+=12;   
 
768
                                                                (*rtgd_buffer[rtgd_counter-1])[k-1][1]%=12;
 
769
                                                                (*rtgd_buffer[rtgd_counter-1])[k-1][3]=(*rtgd_buffer[rtgd_counter-1])[k-1][1]+(12*((*rtgd_buffer[rtgd_counter-1])[k-1][2]+2));                                                                          
 
770
                                                        }                                                                                       
 
771
        
 
772
                                                        /********************************************************/                                                      
 
773
                                                                                                                
755
774
                                                        (*rtgd_buffer[rtgd_counter-2])[w][0]=(*rtgd_buffer[rtgd_counter-1])[k-1][0];
756
775
                                                        (*rtgd_buffer[rtgd_counter-2])[w][1]=(*rtgd_buffer[rtgd_counter-1])[k-1][1];
757
776
                                                        (*rtgd_buffer[rtgd_counter-2])[w][2]=(*rtgd_buffer[rtgd_counter-1])[k-1][2];
763
782
                                                }
764
783
                                                rtgd_note_count=w;
765
784
                                        }               
766
 
                                        else {
 
785
                                        else {                                          
767
786
                                                for(k=rtgd_note_count; k>0; k--)
768
787
                                                        switch((*rtgd_buffer[rtgd_counter-1])[k-1][0]) {
769
788
                                                                case _CHORD:
770
789
                                                                        if(debugOption && !isChord) {
771
790
                                                                                printf("Playing a chord...\n"); //debug
772
791
                                                                                isChord=1;
773
 
                                                                        }               
 
792
                                                                        }
 
793
                                                                        
 
794
                                                                        /********************************************************/
 
795
                                                                                                                                        
 
796
                                                                        if(melop[op_counter-2][0]==4) {
 
797
                                                                                (*rtgd_buffer[rtgd_counter-1])[k-1][1]+=2*(melop[op_counter-2][1]-(*rtgd_buffer[rtgd_counter-1])[k-1][1]);
 
798
                                                                                while((int)(*rtgd_buffer[rtgd_counter-1])[k-1][1]<0)
 
799
                                                                                  (*rtgd_buffer[rtgd_counter-1])[k-1][1]+=12;   
 
800
                                                                                (*rtgd_buffer[rtgd_counter-1])[k-1][1]%=12;                                                                                     
 
801
                                                                                (*rtgd_buffer[rtgd_counter-1])[k-1][3]=(*rtgd_buffer[rtgd_counter-1])[k-1][1]+(12*((*rtgd_buffer[rtgd_counter-1])[k-1][2]+2));                                                                          
 
802
                                                                        }                                                                                       
 
803
 
 
804
                                                                        /********************************************************/                                                                      
 
805
                                                                                        
774
806
                                                                        chord[note_chord_counter][0]=(*rtgd_buffer[rtgd_counter-1])[k-1][3];
775
807
                                                                        chord[note_chord_counter][1]=(*rtgd_buffer[rtgd_counter-1])[k-1][4];
776
808
                                                                        chord[note_chord_counter][2]=(*rtgd_buffer[rtgd_counter-1])[k-1][5];
817
849
                                                                                printf("rest parameters: %d\n", (*rtgd_buffer[rtgd_counter-1])[k-1][1]);                                                                        
818
850
                                                                        break;          
819
851
                                                                default:
 
852
                                                                        
 
853
                                                                        /********************************************************/
 
854
                                                                        
 
855
                                                                        if(melop[op_counter-2][0]==4) {
 
856
                                                                                (*rtgd_buffer[rtgd_counter-1])[k-1][1]+=2*(melop[op_counter-2][1]-(*rtgd_buffer[rtgd_counter-1])[k-1][1]);
 
857
                                                                                while((int)(*rtgd_buffer[rtgd_counter-1])[k-1][1]<0)
 
858
                                                                                  (*rtgd_buffer[rtgd_counter-1])[k-1][1]+=12;   
 
859
                                                                                (*rtgd_buffer[rtgd_counter-1])[k-1][1]%=12;                                                                                     
 
860
                                                                                (*rtgd_buffer[rtgd_counter-1])[k-1][3]=(*rtgd_buffer[rtgd_counter-1])[k-1][1]+(12*((*rtgd_buffer[rtgd_counter-1])[k-1][2]+2));                                                                          
 
861
                                                                        }                                                                                       
 
862
 
 
863
                                                                        /********************************************************/
 
864
                                                                        
820
865
                                                                        data[0]=(*rtgd_buffer[rtgd_counter-1])[k-1][3];
821
866
                                                                        data[1]=(*rtgd_buffer[rtgd_counter-1])[k-1][4];
822
867
                                                                        if(!mf_write_midi_event(prev_duration, note_on, players[playerCount]->local_params[CHN], data, 2)) {
823
868
                                                                                fprintf(stderr, "Error writing midi file!\n");
824
869
                                                                                return -1;
825
870
                                                                        }
826
 
                                                                        data[1]=(*rtgd_buffer[rtgd_counter-1])[k-1][6]; 
 
871
                                                                        data[1]=(*rtgd_buffer[rtgd_counter-1])[k-1][6];
827
872
                                                                        if(!mf_write_midi_event(prev_duration=(*rtgd_buffer[rtgd_counter-1])[k-1][5], note_off, players[playerCount]->local_params[CHN], data, 2)) {
828
873
                                                                                fprintf(stderr, "Error writing midi file!\n");
829
874
                                                                                return -1;
830
875
                                                                        }
831
876
                                                                        if(debugOption)
832
877
                                                                                printf("note: %d parameters: %d %d %d %d\n", (*rtgd_buffer[rtgd_counter-1])[k-1][1], (*rtgd_buffer[rtgd_counter-1])[k-1][2], (*rtgd_buffer[rtgd_counter-1])[k-1][4], (*rtgd_buffer[rtgd_counter-1])[k-1][5], (*rtgd_buffer[rtgd_counter-1])[k-1][6]);   //debug
833
 
                                                                        prev_duration=0;                                                                        
 
878
                                                                        prev_duration=0;
834
879
                                                        }       
835
880
                                        }       
836
881
                                        free(rtgd_buffer[rtgd_counter-1]);
928
973
 
929
974
unsigned char lindenmayer_prod_generator(unsigned int nt, unsigned int *buffer) {
930
975
        unsigned char code, rep[MAX_RECURSION][2], isChord=0;
931
 
        unsigned int caso, *pointer;
 
976
        unsigned int caso, *pointer, tmp;
932
977
        char string_buf[MAX_STR], str_temp_buf[MAX_STR];
933
978
        register unsigned int i=0, j=0, k, w, counter=0;
934
979
        register char note_chord_counter=0;
 
980
        int sum_trn=0, sum_inv=0, y;    
935
981
        
936
982
        memset(melop, 0, 2*MAX_RECURSION);
937
983
        players[playerCount]->productions[nt]->numOr>1?(caso=casual(players[playerCount]->productions[nt]->numOr)):(caso=1);
1049
1095
                                }
1050
1096
                                break;
1051
1097
                        case _INV:
1052
 
                                melop[op_counter][0]=2;
1053
1098
                                pointer=players[playerCount]->productions[nt]->midicode[players[playerCount]->productions[nt]->cc];
1054
 
                                while(pointer[0]!=_NOTEON)
1055
 
                                        pointer++;
1056
 
                                melop[op_counter++][1]=pointer[1];      
 
1099
                                if((pointer+10)[0]!=_RTRGD) {                   
 
1100
                                        melop[op_counter][0]=2;
 
1101
                                        while(pointer[0]!=_NOTEON)
 
1102
                                                pointer++;
 
1103
                                        melop[op_counter++][1]=pointer[1];
 
1104
                                }
 
1105
                                else
 
1106
                                        melop[op_counter++][0]=4;               //Inversion of Retrograde                               
1057
1107
                                break;
1058
1108
                        case _RTRGD:
1059
1109
                                melop[op_counter++][0]=3;
1067
1117
                                break;
1068
1118
                        case _ENDMELOP:
1069
1119
                                if(melop[op_counter-1][0]==3) {
1070
 
                                        if(rtgd_counter>1) {
 
1120
                                        if(melop[op_counter-2][0]==4)
 
1121
                                                melop[op_counter-2][1]=(!(*rtgd_buffer[rtgd_counter-1])[rtgd_note_count-1][0])?(*rtgd_buffer[rtgd_counter-1])[rtgd_note_count-1][1]:(*rtgd_buffer[rtgd_counter-1])[rtgd_note_count-2][1];
 
1122
                                        if(rtgd_counter>1) {                                            
1071
1123
                                                w=(*rtgd_buffer[rtgd_counter-1])[0][0];
1072
1124
                                                for(k=rtgd_note_count; k>1; k--) {
 
1125
                                                        
 
1126
                                                        /********************************************************/
 
1127
                
 
1128
                                                        if(melop[op_counter-2][0]==4) {
 
1129
                                                                (*rtgd_buffer[rtgd_counter-1])[k-1][1]+=2*(melop[op_counter-2][1]-(*rtgd_buffer[rtgd_counter-1])[k-1][1]);
 
1130
                                                                while((int)(*rtgd_buffer[rtgd_counter-1])[k-1][1]<0)
 
1131
                                                                  (*rtgd_buffer[rtgd_counter-1])[k-1][1]+=12;   
 
1132
                                                                (*rtgd_buffer[rtgd_counter-1])[k-1][1]%=12;
 
1133
                                                                (*rtgd_buffer[rtgd_counter-1])[k-1][3]=(*rtgd_buffer[rtgd_counter-1])[k-1][1]+(12*((*rtgd_buffer[rtgd_counter-1])[k-1][2]+2));                                                                          
 
1134
                                                        }                                                                                       
 
1135
        
 
1136
                                                        /********************************************************/                                                      
 
1137
                                                        
1073
1138
                                                        (*rtgd_buffer[rtgd_counter-2])[w][0]=(*rtgd_buffer[rtgd_counter-1])[k-1][0];
1074
1139
                                                        (*rtgd_buffer[rtgd_counter-2])[w][1]=(*rtgd_buffer[rtgd_counter-1])[k-1][1];
1075
1140
                                                        (*rtgd_buffer[rtgd_counter-2])[w][2]=(*rtgd_buffer[rtgd_counter-1])[k-1][2];
1081
1146
                                                }
1082
1147
                                                rtgd_note_count=w;
1083
1148
                                        }               
1084
 
                                        else {
 
1149
                                        else {                                          
1085
1150
                                                for(k=rtgd_note_count; k>0; k--)
1086
1151
                                                        switch((*rtgd_buffer[rtgd_counter-1])[k-1][0]) {
1087
1152
                                                                case _CHORD:
1088
1153
                                                                        if(debugOption && !isChord) {
1089
1154
                                                                                printf("Playing a chord...\n"); //debug
1090
1155
                                                                                isChord=1;
1091
 
                                                                        }               
 
1156
                                                                        }
 
1157
                                                                        
 
1158
                                                                        /********************************************************/
 
1159
                                                                                                                                                
 
1160
                                                                        if(melop[op_counter-2][0]==4) {
 
1161
                                                                                (*rtgd_buffer[rtgd_counter-1])[k-1][1]+=2*(melop[op_counter-2][1]-(*rtgd_buffer[rtgd_counter-1])[k-1][1]);
 
1162
                                                                                while((int)(*rtgd_buffer[rtgd_counter-1])[k-1][1]<0)
 
1163
                                                                                  (*rtgd_buffer[rtgd_counter-1])[k-1][1]+=12;   
 
1164
                                                                                (*rtgd_buffer[rtgd_counter-1])[k-1][1]%=12;                                                                                     
 
1165
                                                                                (*rtgd_buffer[rtgd_counter-1])[k-1][3]=(*rtgd_buffer[rtgd_counter-1])[k-1][1]+(12*((*rtgd_buffer[rtgd_counter-1])[k-1][2]+2));                                                                          
 
1166
                                                                        }                                                                                       
 
1167
                                                                        
 
1168
                                                                        /********************************************************/
 
1169
                                                                                                                                                                
1092
1170
                                                                        chord[note_chord_counter][0]=(*rtgd_buffer[rtgd_counter-1])[k-1][3];
1093
1171
                                                                        chord[note_chord_counter][1]=(*rtgd_buffer[rtgd_counter-1])[k-1][4];
1094
1172
                                                                        chord[note_chord_counter][2]=(*rtgd_buffer[rtgd_counter-1])[k-1][5];
1144
1222
                                                                                printf("rest parameters: %d\n", (*rtgd_buffer[rtgd_counter-1])[k-1][1]);                                                                        
1145
1223
                                                                        break;          
1146
1224
                                                                default:
 
1225
                                                                
 
1226
                                                                        /********************************************************/
 
1227
                                
 
1228
                                                                        if(melop[op_counter-2][0]==4) {
 
1229
                                                                                (*rtgd_buffer[rtgd_counter-1])[k-1][1]+=2*(melop[op_counter-2][1]-(*rtgd_buffer[rtgd_counter-1])[k-1][1]);
 
1230
                                                                                while((int)(*rtgd_buffer[rtgd_counter-1])[k-1][1]<0)
 
1231
                                                                                  (*rtgd_buffer[rtgd_counter-1])[k-1][1]+=12;   
 
1232
                                                                                (*rtgd_buffer[rtgd_counter-1])[k-1][1]%=12;
 
1233
                                                                                (*rtgd_buffer[rtgd_counter-1])[k-1][3]=(*rtgd_buffer[rtgd_counter-1])[k-1][1]+(12*((*rtgd_buffer[rtgd_counter-1])[k-1][2]+2));                                                                          
 
1234
                                                                        }                                                                                       
 
1235
                        
 
1236
                                                                        /********************************************************/
 
1237
                                                                                                                                        
1147
1238
                                                                        data[0]=(*rtgd_buffer[rtgd_counter-1])[k-1][3];
1148
1239
                                                                        data[1]=(*rtgd_buffer[rtgd_counter-1])[k-1][4];
1149
1240
                                                                        if(!mf_write_midi_event(prev_duration, note_on, players[playerCount]->local_params[CHN], data, 2)) {
1359
1450
        if(!debugOption)
1360
1451
                printf("midi file succesfully generated!\n");
1361
1452
}
1362