-
Notifications
You must be signed in to change notification settings - Fork 2
/
ROLLTRACKS.bi
2769 lines (2377 loc) · 100 KB
/
ROLLTRACKS.bi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
Sub ConversorTocaATecla(pistaToca() As ejec, pistaCargarIn() As midicod)
' conesteconversor puedo tomar un Toca llevarlo a formto CargarIn y los datos usados es menor
' y con ello grabar a archivo...elvector CagarIn()
End Sub
'Sub ConversorTeclaAToca()'
'End Sub
/'
Sub GrabarMidiInnO ( nombre As String, CargaIn() As midicod, pToca() As pEjec )
Dim As Long j, n=freefile
' aca laidea es grabarlominimo conCargaIn reconstruyo los Toca() enmemoria
' hago la sumatoria de partes de cada vector ladivido por TickChico y obtengo el maxpos
' pero ese valor y alo tengo en pToca(i)...se que CargaIn es de mawxpos, de 4000 `porque lodeboponer
'en pEjec
If Open (nombre+".ejec" For Binary Access Write As #n)=0 Then
Put #n,,pToca()
Put #n,,CargaIn()
Close
Else
End If
End Sub
'/
Sub CargarMidiIn(nombreMidiIn As String, ByRef ntkp As Integer)
' carga un archivo por cada llamada
Dim As Integer j
' nombre tiene el path y extension esta completo
' pmTk(ntkp+32).MaxPos=N
Dim As Integer ubi1,ubi2
ubi1 = InStrrev(nombreMidiIn,"(")
ubi2 =InStrRev (nombreMidiIn,")")
ntkp=CInt(Mid(nombreMidiIn,ubi1+1,ubi2-ubi1-1)) ' el orden o nro de la pista sale del nombre
' pero tambien esta grabado en tocaparam en el archivo
' si hay numero en la string au nque no halla parentesis al comienxo y el numero este
' al fina lo cualquier parte tomara el numero igual.,,cint descarta las letras,,,
If NombreCancion="" Then
NombreCancion=Mid(nombreMidiIn,1,ubi1-1)
EndIf
If ntkp > 0 Then
Else
Return
EndIf
If Fileexists(nombreMidiIn)=0 Then
Return
EndIf
Var f=12
If Open (nombreMidiIn For Binary Access Read As #f ) <> 0 Then
Exit Sub
EndIf
Get #f, ,tocaparam(ntkp)
' maxgrp se calcula en CargarPistasEjec
ReDim (Toca(ntkp).trk ) (1 To maxgrb)
Get #f, ,Toca(ntkp).trk()
'For j As Integer=1 To tocaparam(ntkp).maxpos
'Next j
cerrar f
' pmTk(ntkp+32).MaxPos=Toca(ntkp).maxpos
ntoca=tocaparam(ntkp).orden
If ntoca<> ntkp Then
EndIf
pmTk(ntkp+32).portout= tocaparam(ntkp).portout
pmTk(ntkp+32).portin= tocaparam(ntkp).portin
pmTk(ntkp+32).patch = tocaparam(ntkp).patch
pmTk(ntkp+32).canalsalida=tocaparam(ntkp).canal
pmTk(ntkp+32).MaxPos=tocaparam(ntkp).maxpos
' el ultimo valor de ntkp queda en calltoca...
calltoca=ntkp
' viv.trk()=Toc()
End Sub
Sub CargarPistasEjec (lugar As String, ByRef ntkp As integer)
' cada vez que cargo borro la info de fechas de pistas anterior
' para usar esta carga hay que crear un Dir de cancion y abrirlo
'podra haber pistas trk o ejec o ambas,veremos si se pueden sincronizar
' devuelve el numero de pistas...cargadas
ROLLCARGADO=FALSE
GrabarEjec =NoGrabar: ntoca=0 : arrancaPlay=0
ntkp=1 '<================= inicia en 1 y va a devolver ntkp!!
' ahi estaba el error empieza en 1 no en cero veremos!
s5=2 '11-06-2022
''ReDim As Double fechasPistas(1 To 32)
Dim As String no1, no2
Dim As Integer ubi1=0,ubi2=0
Dim As String filenameold
' el Dir me trae lso nombres sin el path de cancion
If lugar ="" Then
nombreMidiIn = Dir ("*.ejec")
Else
nombreMidiIn = Dir (lugar+"\*.ejec")
EndIf
' el dir da el orden 01 02 03 pero podria sacarlo de esa cadena 01 02 03 como hago con trakcs
' pero no hace falta estan ordenados 01 02 03 04 (el usuario debe respetar este orde en un
' numero de 2 cifras si quiere crear manualmente algo)
' 1) DETERMINA EL MAXGRB DE LA CANCION MIRANDO EN TODOS LOS ARCHIVOS
' PARA AL CARGAR DIMENSIONAR TODOS LOS VECTORES DE CARGA AL MISMO
' VALOR MAXIMO
If nombreMidiIn = "" Then ' no hay ningu archivo dentro del dir de cancion
ntkp=1
EJECCARGADA=FALSE
' NO HAY NADA QUE CARGAR ESTO NODEPENDE DE ROLL
Exit Sub
Else
' carga Todos los tracks de cancion en un Loop
'busco maxgrb o sea el maxpos de todas las pistas para evitar el redim preserve
Dim fileMidiIn As String
If lugar > "" Then
fileMidiIn=lugar+"\"+nombreMidiIn
Else
fileMidiIn=nombreMidiIn
EndIf
maxgrb=0
Dim As Integer nf=0
Do While Len(nombreMidiIn) > 0
nf =nf+ 1
Var f=13
If Open (fileMidiIn For Binary Access Read As #f ) <> 0 Then
Exit Sub
End If
Get #f, ,tocaparam(nf)
If tocaparam(nf).maxpos > maxgrb Then
maxgrb = tocaparam(nf).maxpos
EndIf
cerrar f
Sleep 100
nombreMidiIn = Dir()
If lugar > "" Then
fileMidiIn=lugar+"\"+nombreMidiIn
Else
fileMidiIn=nombreMidiIn
EndIf
Loop
'-2)----------------CARGA LOS DATOS DE CADA PISTA
Dim As Integer mayor=1
If lugar ="" Then
nombreMidiIn = Dir ("*.ejec")
Else
nombreMidiIn = Dir (lugar+"\*.ejec")
EndIf
Dim np As Long=0
' va cargando los track internos, tomando el nro de trackp
' del nombre del archivo solamente , ergo el usuario puede cambiar el orden
' o poner un trakcp de otra cancion con un numero que no exista [x]
'
Do While Len(nombreMidiIn) > 0 ' If len(filename) is 0, exit the loop: no more filenames are left to be read.
filenameold=nombreMidiIn
np=np+1
' Var N=Filelen(nombreMidiIn)\Sizeof(ejec)
fileMidiIn=lugar+"\"+filenameOld
CargarMidiIn (fileMidiIn, ntkp)
'durante la cargaTrack el programa va a Rolloop se encuentra con SC_TAB
' y si cargacancion esta en 1 trata de cargar y no lo debe ahcer de modo
' que se ajusta a 0 cargacancion dentro de la rutina veremos
Dim cadena As String
''''cadena= sacarExtension(filenameOld) ' [1]AAA
cadena = tocaparam(ntkp).nombre ' este ntkp sale del nombre del archivo el nro ej: (03)
' pero la carga usa np que deberia coincidir....o no si borro una pista sinrenombrar 01,03,04 ... borre la (02)
AddListBoxItem(LISTA_DE_EJECUCIONES, cadena,np-1)
Sleep 1
'''''ntkp=CInt(np) no hace falta
pmTk(ntkp+32).MaxPos=tocaparam(ntkp).maxpos
If tocatope < ntkp Then
tocatope=ntkp
EndIf
titulos(ntkp+32)=nombreMidiIn ' como agregue en titulos la opcion es 1
' como si viniera de linea de comando puedo usar cualquiera o 0
pistas (ntkp+32)=nombreMidiIn
Sleep 100
nombreMidiIn = Dir()
If lugar > "" Then
fileMidiIn=lugar+"\"+nombreMidiIn
Else
fileMidiIn=nombreMidiIn
EndIf
Loop
tocatope=ntkp ' el nro tope de la lista
ntoca=tocatope
'maxgrb global
'Dim j As integer
'For j=1 To ntkp
' If pmTk(j+32).MaxPos > maxgrb Then
' maxgrb = pmTk(j+32).MaxPos
' EndIf
'Next j
' redim detodo¿? nosey si hago unalecturaprevia??mejor
'For j=1 To ntkp
' ReDim Preserve (Toca(j).trk ) (1 To maxgrb)
'Next j
EJECCARGADA=TRUE
EndIf
''''cargaCancion=1 '12-02-2022 mientras carg las pista el 1 indica cargando pistas
'mouse_event MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0
'mouse_event MOUSEEVENTF_LEFTUP, 0, 0, 0, 0
repro=0 ' habilitar play
End Sub
Sub CargarTrack(Track() As sec, ByRef ntk As Integer , ByRef ubirtk As Integer)
' solo carga track no lo pasa a Vector de Visualizacion. ntk debe venir informado
' para cargar desde disco un track se usa esta sub y luego TrackaRoll para verlo
' y editarlo, ubirtk es si al carga se hace por argv desde el explorer en disco
'abrirRoll=0
cargacancion=0
''TRACKCARGADO =FALSE ' CONTROL DE TRACK(0)
Dim grabaPos (1,1 ) As poli
Dim grabaLim (1,1) As poli
Dim graba3 (1,1) As poli ' 04-02-2022 se agregan 48 bytes para info futura
Dim graba4 (1,1) As poli
Dim graba5 (1,1) As poli
Dim graba6 (1,1) As poli
Dim graba7 (1,1) As poli
Dim graba8 (1,1) As poli
Dim graba9 (1,1) As poli
Dim graba10 (1,1) As poli
Dim As Integer ubi1,ubi2
Dim As String x,x1,x2,x3,x4,x5,nombrea
'1) cargar pista desde disco y desde Roll puro
If ubirtk = 0 Then ' no tengo nombre debo explorar
myfilter = "Track Files"+Chr(0) +"*.rtk"+Chr(0)
nombrea = OpenFileRequester("","", myfilter)
ubi1 = InStrrev(nombrea,"[")
ubi2 =InStrRev (nombrea,"]")
ntk=CInt(Mid(nombrea,ubi1+1,ubi2-ubi1-1))
'
Else
'2) carga *.rtk de linea de comando doble clik o de cancion
If ubirtk > 0 Then
nombrea=titulos(ntk) ' ya venia el nombre
ubirtk=0
EndIf
EndIf
ubirtk=0
If nombrea = "" Then
nombre=""
Exit Sub
Else
nombre=nombrea
EndIf
Dim miroerr As Integer
titulos(ntk)=nombre
ct=14
miroerr= ( Open (nombre For Binary Access Read As #ct ))
If miroerr <> 0 Then
Exit sub
EndIf
Get #ct, , grabaPos(1,1)
x1=Bin(grabaPos(1,1).nota,4)
x2=Bin(grabaPos(1,1).dur,4)
x3=Bin(grabaPos(1,1).vol,4)
x4=Bin(grabaPos(1,1).pan,4)
x5=Bin(grabaPos(1,1).pb,4)
tipoescala_num_ini =CInt( grabaPos(1,1).nnn ) ' 20-12-2021 - tipoescala en uso
If tipoescala_num_ini=0 Then
tipoescala_num_ini=1
EndIf
pmTk(ntk).tipoescala=grabaPos(1,1).nnn
x=x1+x2+x3+x4+x5
'toda carga de track se guarda en pmTk sea ntk=0 u otro valor
pmTk(ntk).MaxPos=CInt("&B"+x)
MaxPos=pmTk(ntk).MaxPos
'|--> LLEVAR A TRACK A ROLL posicion = 1
'|--> LLEVAR A TRACK A rOLL nota=0 '''notaOld
'|--> LLEVAR A TRACK A rOLL inicioDeLectura=0' Int(Maxpos/NroCol)
' ==> aca no lo esta cargadno a roll visual solo a un track ntk
pmTk(ntk).posn=pmTk(ntk).MaxPos - 2
If pmTk(ntk).posn < 0 Then pmTk(ntk).posn=0 EndIf
pmTk(ntk).Ticks = 1000 - pmTk(ntk).MaxPos
If pmTk(ntk).Ticks < 0 Then
pmTk(ntk).Ticks = pmTk(ntk).MaxPos+1000
EndIf
CantTicks=pmTk(ntk).Ticks
'es un get trabajo debe ser exactamente MAxPos
ReDim Trabajo (1 To CantTicks,1 To lim3) As poli
If NombreCancion > "" Then
If grabaPos(1,1).dur2 = 1 Then ' sonido on/off 16-03-2022
CheckBox_SetCheck(cbxnum(ntk),1)
Else
CheckBox_SetCheck(cbxnum(ntk),0)
EndIf
EndIf
' crgamos limites Roll de octavas
Get #ct, , grabaLim(1,1)
pmTk(ntk).desde = CInt(grabaLim(1,1).nota)
pmTk(ntk).hasta = CInt(grabaLim(1,1).dur) '01-03 cint
pmTk(ntk).notaold= CInt(grabaLim(1,1).pb)
' la nota esca y la esca es la misma `para todos lso tracks despues lo debo cambiar
notaescala_num_ini =CInt(grabaLim(1,1).vol) ' notadeescala 20-12-2021
If notaescala_num_ini=0 Then
notaescala_num_ini=1
EndIf
pmTk(ntk).notaescala=grabaLim(1,1).vol
If grabaLim(1,1).pan = 3 Then
alteracion="sos"
EndIf
If grabaLim(1,1).pan = 2 Then
alteracion="bem"
EndIf
If grabaLim(1,1).pan = 0 Then
alteracion="sos"
EndIf
tiempoPatron=CInt(grabaLim(1,1).nnn)
If tiempoPatron = 0 Then
tiempoPatron = 60
EndIf
pmTk(ntk).NB => 0 + (pmTk(ntk).desde-1) * 13 ' 27 para 3 SI CARGO CANCION NO VA
pmTk(ntk).NA => 11 + (pmTk(ntk).hasta-1) * 13 ' 90 para 7 06-09-2021 decia 12 -> es 11
NB=pmTk(ntk).NB
NA=pmTk(ntk).NA
Get #ct, ,graba3 (1,1)
pmTk(ntk).canalsalida = graba3(1,1).nnn ' as poli es trck
canalx=graba3(1,1).nnn
pmTk(ntk).portout= graba3(1,1).dur
portout = CInt(graba3(1,1).dur)
pmTk(ntk).patch= graba3(1,1).nota
patchsal=pmTk(ntk).patch
instru=CInt(patchsal)
TipoCompas = graba3(1,1).pb ' 26-04-2024
TCompas=Mid(tempoString(TipoCompas),1,4)
Get #ct, ,graba4 (1,1)
Get #ct, ,graba5 (1,1)
Get #ct, ,graba6 (1,1)
Get #ct, ,graba7 (1,1)
Get #ct, ,graba8 (1,1)
Get #ct, ,graba9 (1,1)
Get #ct, ,graba10 (1,1)
' 1) con cancion cargada puedo cargar cualqueir pista de cancion existente
' en Roll Visual, modificarlo y al pasar de RollaTrack AL grabarlo SE PONDRA
' en cancion automaticamente con un numero nuevo de pista, eso seria una copia
' del track con datos y hacer un nuevo track
' Proc: con los datos de otro track, tomo los valores del track x cargado de disco
' los dejo como actuales(o sea esta en Roll y Trac(0)) para cargarlo a Roll visual
' al grabar con rollatrack estando en cancion, copio en memoria en nuevo ntk
' distinto de 0,buscando el proximo nro de track y grabo a disco el track
' con el nuevo numero de track en el dir de cancion, roll queda con esos datos
' y Track 0 tambien, solo que ahora apuntan a un archivo en cancion como track nuevo.
' sademas logico hay qye agregarlo como item a la listbox y el nombre a titulo
' y todos los parametros nuevos al vector pmTk
' 2) Sin cancion cargada puedo cargar un roll y grabarlo como track, siemrpe se
' grabara a Track(0), los tracks 1 a 32 son exclusivos de Cancion.
' SI la cancion ya está cargada o no hay cancion ajusto al ambiente los parametros
' cargados de ese track puntual, puede ser 0 u otro track
If cargaCancion=0 Then ' termino la carga de cancion es otro evento despues carga de un track aislado¿?
NB=pmTk(ntk).NB ' por ejemplo cargar un track clickeado en lista
NA=pmTk(ntk).NA
desde=pmTk(ntk).desde
hasta=pmTk(ntk).hasta
If NA=0 Or NB=0 Then
pmTk(ntk).NB => 0 + (pmTk(ntk).desde-1) * 13
pmTk(ntk).NA => 11 + (pmTk(ntk).hasta-1) * 13
NB=pmTk(ntk).NB
NA=pmTk(ntk).NA
EndIf
MaxPos=pmTk(ntk).MaxPos
notaOld=pmTk(ntk).notaold
posn=MaxPos -2
If posn< 0 Then
posn=0
EndIf
posicion=1
curpos=0
canalx=pmTk(ntk).canalsalida
portout=pmTk(ntk).portout
EndIf
' configuro el track receptor
ReDim (Track(ntk).trk) (1 To CantTicks, 1 To lim3)
Dim errget As Integer
errget= Get( #ct, , Trabajo())
If errget <> 0 Then
Else
EndIf
' movemos los datos a Track
' -------------------------
'ReDim compas(1 To CantTicks) es solo para visualizar
'carga=1 ' para visualizar no es lo mismo calcCompas con cargar o procesando
Dim As Integer i,j , mayor,ia,valdur,cont, semi
cont=0
Dim As Integer grupo, mayorgrupo
For j = 1 To pmTk(ntk).MaxPos '11-07-2021 02-03-2022 ÇÇÇ
For i= 1 To lim3
Track(ntk).trk(j,i) => Trabajo(j,i) ' <-- aca va copiando tambien acorde
If Track(ntk).trk(j,i).dur > 0 And Track(ntk).trk(j,i).nota > 0 Then
EndIf
' cargar en visualizacion con otra sub si es necesario
Next i
Next j
cerrar (ct)
DUR => 0
curpos =>1
patchsal=Track(ntk).trk(1,1).nnn
If patchsal=0 Then
patchsal=1
Track(ntk).trk(1,1).nnn=1
EndIf
pmTk(ntk).patch=patchsal
'------------
cadenaes_inicial=""
armarescala (cadenaes_inicial,tipoescala_num_ini, notaescala_num_ini, alteracion,1 )
tipoescala_inicial=escala(tipoescala_num_ini).nombre ' 13-01-2022 faltaba ini
' carga de escala en guia de escala
guiaEscala(1).tipoescala=tipoescala_num_ini '13-01-2022 faltaba ini
guiaEscala(1).notaescala=notaescala_num_ini
guiaEscala(1).alteracion =CInt(grabaLim(1,1).pan)
guiaEscala(1).posicion=1
' cuando cargo un track desde disco sin cancion, aislado, es similar a Roll
' ahora durante la carga de cancion y el uso de tAB esto debe ir cambiadno para
' cada track cambiado en el grafico
'----------
'If ntk=0 Then
' TRACKCARGADO =TRUE ' SIN CANCION SE CARGO EL TRACK(0)
'Else
' TRACKCARGADO =FALSE
'EndIf
ubirtk=0:ubirtk=0:ubirtk=0:ubirtk=0:ubirtk=0:ubirtk=0:ubirtk=0:ubirtk=0:ubirtk=0
'mouse_event MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0
'mouse_event MOUSEEVENTF_LEFTUP, 0, 0, 0, 0
Sleep 100 ' retardo para que se ubiquen lso datos en memoria ¿? parece necesario
End Sub
'
Sub RollTempaTrackTemp (TrkTemp() As poli,RollTemp() As dat)
'--------CODIGO SIMILAR A ROLLATRACK SI SE CAMBIA ACA SE DEBE CAMBIAR HALLA
Dim As Integer i4,i3=0,i2=0,i1=0,verticalEnOctavaVacia, octavaDeAcorde,copiado=0,vertical
'
' copia en TrkTemp RollTemp donde está Roll modificado
' se copia toda la secuencia y sus controles, la parte inicial de bloques de los archivos
' solo se envia a dichos bloques en los comandos de grabacion a archivo
vertical=12+(hasta-2)*13+hasta ' "[NROREP]" de EntrarTeclado
For i2 = 1 To MaxPos
i3=0
For i1=NB To NA -13
If RollTemp(i2,i1 ).nota >= 1 and RollTemp(i2,i1 ).nota <=12 Then
' copio a track 1 temporario. el usuairo debera renombrarlo por ahora
i3=i3+1
TrkTemp(i2,i3).dur =CInt(RollTemp(i2,i1 ).dur)
TrkTemp(i2,i3).nota =RollTemp(i2,i1 ).nota
TrkTemp(i2,i3).vol =RollTemp(i2,i1 ).vol
TrkTemp(i2,i3).pan =RollTemp(i2,i1 ).pan
TrkTemp(i2,i3).pb =RollTemp(i2,i1 ).pb
trkTemp(i2,i3).nnn =RollTemp(i2,i1 ).inst
PianoNota= i1 ' nR=i1 es el indice de Roll 06-09-2021 N!=115
' cuanta al reves desde ocatva mas aguda a la mas grave,,,
' no lo cambiare o podri aahcer lo veremos
' convertimos a PianoNota
PianoNota= PianoNota - restar (PianoNota)
' track tendra directamente el valor del piano para tocar con rtmidi
TrkTemp(i2,i3).nota=CUByte(PianoNota)
' acorde
If i3=12 Then ' track solo guarda 12 notas en acorde el resto se desrpecia
Exit For '13-09-2021 tenia 2 for salia del todo ja
End If
EndIf
If Roll.trk(i2,i1 ).dur= 200 And copiado=0 Then ' solo en 13 copia 1 soal vez
'OK
TrkTemp(i2,13).nnn = RollTemp(i2, i1).inst ''=CUByte(tipoescala)
TrkTemp(i2,13).vol = RollTemp(i2, i1).vol ''= CUByte(notaescala)
TrkTemp(i2,13).nota = RollTemp(i2,i1 ).nota ' = 30
TrkTemp(i2,13).dur = RollTemp(i2,i1 ).dur ' = 200
TrkTemp(i2,13).pan = RollTemp(i2, i1).pan
copiado=1
EndIf
' pero con acordes debo porner para cada octava la info de Roll en cada linea segun
' su octava y agregar especificamente la octava ya que esa info se pierde
' en cada octava no puedo poner el 201,,el 201 ira una sola vez arriba
' cada linea correspondiente a una octava tendra la info de lso acordes para esa
' octava eso sigue igual solo que esta info se debe leer antes de todo el resto
' de foram que se sepa que cifrados de acorde van en cada octava...
If Roll.trk(i2,i1 ).pb = 201 Then ' info acorde en una octava
'
octavaDeAcorde=1+ (i1-12)/13 ' formula de vacio lineas entre octavas
i4=13 + octavaDeAcorde
verticalEnOctavaVacia= 12 + (hasta-2)*13 + octavaDeAcorde - desde ' 90 + 6 - 4=92
TrkTemp(i2,i4).vol = Roll.trk(i2,verticalEnOctavaVacia).vol ' octava
TrkTemp(i2,i4).nota = Roll.trk(i2,verticalEnOctavaVacia ).nota ' Rollnota
TrkTemp(i2,i4).dur = Roll.trk(i2,verticalEnOctavaVacia ).dur ' acordeNro
TrkTemp(i2,i4).pb = 202
EndIf
If Roll.trk(i2,vertical ).nota = 210 Or Roll.trk(i2,vertical ).nota = 211 Then ' repeticiones [: n:]
' vacio= 12 +(estoyEnOctava-1)*13 son las que no se ven
' i1= 12 + (octavaDeAcorde -1)*13 ergo
'i4=12+8+1=21
TrkTemp(i2,21).nota = Roll.trk(i2,vertical ).nota '
TrkTemp(i2,21).vol = Roll.trk(i2,vertical ).vol '
EndIf
' repeticion de Roll a Track ....
If i2=MaxPos Then ' fin sec
i3=1
TrkTemp(i2,i3).dur =182
TrkTemp(i2,i3).nota =RollTemp(i2,i1 ).nota
TrkTemp(i2,i3).vol =RollTemp(i2,i1 ).vol
TrkTemp(i2,i3).pan =RollTemp(i2,i1 ).pan
TrkTemp(i2,i3).pb =RollTemp(i2,i1 ).pb
trkTemp(i2,i3).nnn =RollTemp(i2,i1 ).inst
EndIf
Next i1
If i3 >=2 Then
TrkTemp(i2,i3).acorde=CUByte(i3) ' Grabamos la cantidad de elem del acorde
EndIf
Next i2
TrkTemp(1,1).nnn=RollTemp(1,NA).inst ' instrumento o PATCH
'--FIN--CODIGO SIMILAR A ROLLATRACK SI SE CAMBIA ACA SE DEBE CAMBIAR HALLA Y VICEVERSA
posicion =1
End Sub
'
Sub ActualizarRollyGrabarPista ()
' nombre es global ,,,por ahora...con un Roll único nombre puede ser global
' ya que es único y siempre es parte de Roll grafico...
Maxpos=pmTk(ntk).MaxPos
NB => 0 + (desde-1) * 13 ' 06-03
NA => 11 + (hasta-1) * 13 '
pmTk(ntk).NB= NB
pmTk(ntk).NA= NA
' DEFINO UN ROLL DONDE MANDO EL ROLL CARGADO LE SACO LOS DELETE SI HUBO
CantTicks=MaxPos + 1000 ' antes era 1000 me parece mucho no se
ReDim RollTemp (1 To MaxPos, NB To NA) As dat
' copia en RollTemp el Roll ....que tiene las modificaciones ultimas
Dim As Integer i1, i2, i3, semitono, borrocol=0, haynota=0,res=0,k=0,final=0
'eliminar columnas marcadas al grabar disco, 0 + X
' VERIFICAR QU EEL MAXPOS SEA DEL ROLL CREO QUE SI LOGICO
For i2 = 1 To MaxPos
For i1 = NB To NA
If Roll.trk(i2,i1 ).nota=190 And Roll.trk(i2,i1 ).dur=190 Then
borrocol= 1 'Atrapa al menso un caso
EndIf
If Roll.trk(i2,i1 ).dur=182 Then ' 26-06-2021 copiar final archivo
final= 1 'Atrapa el final
EndIf
If Roll.trk(i2,i1 ).nota >=1 And Roll.trk(i2,i1 ).nota<=12 Then
haynota=1 ' atrapa al menso 1 caso
EndIf
If i1= NA And haynota=1 Then ' sihay unasola notaen la columna no borro
res=0 ' no borrar
Else
If borrocol = 1 Then
res=1
EndIf
EndIf
Next i1
i1=0
If borrocol = 0 Or res=0 Or final=1 Then 'copio columna no borro
k=k+1
For i1 = NB To NA
RollTemp(k, i1) =Roll.trk(i2,i1 ) ' <=== COPIA ROLL A ROLLTEMP
Next i1
EndIf
borrocol=0:res=0:haynota=0:final=0
Next i2
posn=k
' track empieza desde k..no es eso
Dim As Integer r1
For i1=NB To NA
For r1= posn+1 To MaxPos
RollTemp(r1, i1).nota=0 ' ok debo habiliatar desde ahi todas las columnas se juntaron
If RollTemp(r1, i1).dur=182 Then
RollTemp(r1-1, i1).dur=182
EndIf
RollTemp(r1, i1).dur=0 ' la secuecnia quedo mas corta
Next r1
Next i1
' AHORA MAXPOS SE ACHICO
MaxPos=posn
pmTk(ntk).MaxPos=MaxPos
posn=Maxpos-2
pmTk(ntk).posn=posn
posicion =1
' tengo a Roll listo para convertir a track sin marcas de borrado de Col
' convertir
Dim grabaPos (1,1) As poli
Dim grabaLim (1,1) As poli
Dim graba3 (1,1) As poli ' 04-02-2022 se agregan 48 bytes para info futura
Dim graba4 (1,1) As poli
Dim graba5 (1,1) As poli
Dim graba6 (1,1) As poli
Dim graba7 (1,1) As poli
Dim graba8 (1,1) As poli
Dim graba9 (1,1) As poli
Dim graba10 (1,1) As poli
' datos para track....en temp
Dim TrkTemp (1 To MaxPos,1 To lim3) As poli 'definimos un Track temporario
' no usamos RollaTrack porque son distintas estructuras RollaTrack usa sec
' vector de tracks a solo usamos un track as poli, de modo que dejaremos
' un codigo casi duplicado condensado seri amas engorroso creo
' esta llamada copia el patch o instrumento que se usa en Changeprogram al TrackTemp
RollTempaTrackTemp (TrkTemp() ,RollTemp())
/'
'--------CODIGO SIMILAR A ROLLATRACK SI SE CAMBIA ACA SE DEBE CAMBIAR HALLA
i3=0
' copia en TrkTemp RollTemp donde esta Roll modificado
Dim As Integer copiado =0
For i2 = 1 To MaxPos
i3=0
For i1=NB To NA
If RollTemp(i2,i1 ).nota >= 1 and RollTemp(i2,i1 ).nota <=12 Then
' copio a track 1 temporario. el usuairo debera renombrarlo por ahora
i3=i3+1
TrkTemp(i2,i3).dur =CInt(RollTemp(i2,i1 ).dur)
TrkTemp(i2,i3).nota =RollTemp(i2,i1 ).nota
TrkTemp(i2,i3).vol =RollTemp(i2,i1 ).vol
TrkTemp(i2,i3).pan =RollTemp(i2,i1 ).pan
TrkTemp(i2,i3).pb =RollTemp(i2,i1 ).pb
trkTemp(i2,i3).inst =RollTemp(i2,i1 ).inst
PianoNota= i1 ' nR=i1 es el indice de Roll 06-09-2021 N!=115
' cuanta al reves desde ocatva mas aguda a la mas grave,,,
' no lo cambiare o podri aahcer lo veremos
' convertimos a PianoNota
PianoNota= PianoNota - restar (PianoNota)
' track tendra directamente el valor del piano para tocar con rtmidi
TrkTemp(i2,i3).nota=CUByte(PianoNota)
' acorde
If i3=12 Then ' track solo guarda 12 notas en acorde el resto se desrpecia
Exit For '13-09-2021 tenia 2 for salia del todo ja
End If
EndIf
If Roll.trk(i2,i1 ).dur= 200 And copiado= 0 Then ' solo en 13 copia 1 soal vez
TrkTemp(i2,13).inst = RollTemp(i2, i1).inst ''=CUByte(tipoescala)
TrkTemp(i2,13).vol = RollTemp(i2, i1).vol ''= CUByte(notaescala)
TrkTemp(i2,13).nota = RollTemp(i2,i1 ).nota ' = 30
TrkTemp(i2,13).dur = RollTemp(i2,i1 ).dur ' = 200
TrkTemp(i2,13).pan = RollTemp(i2, i1).pan
copiado=1
EndIf
Next i1
If i3 >=2 Then
TrkTemp(i2,i3).acorde=CUByte(i3) ' Grabamos la cantidad de elem del acorde
EndIf
Next i2
TrkTemp(1,1).inst=RollTemp(1,NA).inst
'--FIN--CODIGO SIMILAR A ROLLATRACK SI SE CAMBIA ACA SE DEBE CAMBIAR HALLA Y VICEVERSA
'/
'''ReDim (Track(ntk).trk ) (1 To CantTicks,1 To lim3) 30-01-2022 porque cantTicks?
' ojo espero no haga cancelaciones CantTicks siemrp es mayor a MAxPos o en
' nucleo se agranda ? fijarse,,,,si en nucleo se redimensiona Track y Roll si
' hace falta sin borrar datos..
'[[[ SE CREA REALMENTE EL TRACK ]]]] , al hacer redim borramos en memoria los datos
' que tenia si era un track de cancion pero ojo debo conservar el ntk que pase a roll
' a track (0) (nt=0) y este ntk debe ser el del track original vermeos como viene
' si estoy navegando con TAB el ntk debe ser el correcto... bororo sus datos:
ReDim (Track(ntk).trk ) (1 To CantTicks,1 To lim3)
'If ntk > 0 Then ' falta copiar a ntk=0 tambien ,17-04-2024 ,borro y redimensiono Track(0)
' ReDim (Track(0).trk ) (1 To CantTicks,1 To lim3)
'EndIf
' copiamaos a ntk que sera 0 al lado de roll, o ntk o ntk +1 segun sea el caso
' en el path de cancion.. hay que copiarlo a ambos lados en TRack(0) y Track(ntk)
' en memoria y a disco sobreescribiendo en caso de cancion,,,3 copias!
' ----> de TrkTemp a TRack
For i1=1 To MAxPos ' de Roll que deberia ser el PmTk(ntk).maxpos....verificar
For i2= 1 To lim3
Track(ntk).trk(i1,i2)=TrkTemp(i1,i2) '
Next i2
Next i1
'If ntk > 0 Then ' falta copiar a ntk=0 tambien ,17-04-2024
' For i1=1 To MAxPos ' de Roll que deberia ser el PmTk(ntk).maxpos....verificar
' For i2= 1 To lim3
' Track(0).trk(i1,i2)=TrkTemp(i1,i2) '
' Next i2
' Next i1
'EndIf
' ACTUALIZAR PARAMETROS, en Track(00) ya fueron cargados. Si tenia una cancion
' y levente un Roll de disco como en la rutina llamante.(cancioncargada=true and rollcargado=true)
' En Track(ntk) todavia no hice el update..
' pmTk(ntk).desde=pmTk(0).desde
' pmTk(ntk).hasta=pmTk(0).hasta
' pmTk(ntk).NB=pmTk(0).NB
' pmTk(ntk).NA=pmTk(0).NA
' pmTk(ntk).MaxPos=pmTk(0).MaxPos
' pmTk(ntk).posn=pmTk(0).posn
' pmTk(ntk).notaold=pmTk(0).notaold
' pmTk(ntk).Ticks=pmTk(0).Ticks
' pmTk(ntk).canalsalida=pmTk(0).canalsalida
' pmTk(ntk).portout=pmTk(0).portout
' pmTk(ntk).patch= Roll.trk(1,NA).inst
' ahora grabo o sobrescribo
'-------------------------
'ÇÇÇ
' nombr es global se resuelve en la subrutina que llama a esta
grt = 11
If Open (nombre For Binary Access write As #grt ) <> 0 Then
Exit Sub
End If
Dim As ubyte y1,y2,y3,y4, y5
Dim As String a1,a2,a3,a4,a5 ,x
x= Bin(MaxPos,20)
a1=Mid(x,1,4)
a2=Mid(x,5,4)
a3=Mid(x,9,4)
a4=Mid(x,13,4)
a5=Mid(x,17,4)
y1= Cubyte("&B"+a1)
y2= CUByte("&B"+a2)
y3= CUByte("&B"+a3)
y4= CUByte("&B"+a4)
y5= CUByte("&B"+a5)
' grabamos maxpos en 5 ubyte
grabaPos(1,1).nota = y1
grabaPos(1,1).dur = y2
grabaPos(1,1).vol = y3
grabaPos(1,1).pan = y4
grabaPos(1,1).pb = y5
If tipoescala_num_ini = 0 Then
tipoescala_num_ini =1
EndIf
grabaPos(1,1).nnn = CUByte(tipoescala_num_ini) ' 15-01-2022 - tipoescala en uso
If NombreCancion > "" And ntk > 0 Then
If CheckBox_GetCheck( cbxnum(ntk))= 1 Then ' sonido on/off 16-03-2022
grabaPos(1,1).dur2=1
Else
graba3(1,1).dur2=0
EndIf
EndIf
'------------ los parametros de Roll o Track(0) estan en las globals tambien
' pues se llenan al cargar un Roll....
grabaLim(1,1).nota = CUByte(desde)
grabaLim(1,1).dur = CUByte(hasta)
grabaLim(1,1).pb = CUByte(notaold)
If notaescala_num_ini =0 Then
notaescala_num_ini =1
EndIf
grabaLim(1,1).vol = CUByte(notaescala_num_ini) ' notadeescala 15-01-2022
Select Case alteracion
Case "sos"
grabaLim(1,1).pan = CUByte(3)
Case "bem"
grabaLim(1,1).pan = CUByte(2)
Case Else
grabaLim(1,1).pan = CUByte(3)
End Select
grabaLim(1,1).nnn = CUByte(tiempoPatron)
' cargado un Roll desde archivo canalx toma el valor del canal midi de salida del archivo
graba3(1,1).nnn=pmTk(ntk).canalsalida ' es un track as poli
graba3(1,1).dur=pmTk(ntk).portout
graba3(1,1).nota= pmTk(ntk).patch
'-----------------------------
Put #grt, ,grabaPos(1,1)
Put #grt, ,grabaLim(1,1)
Put #grt, ,graba3 (1,1)
Put #grt, ,graba4 (1,1)
Put #grt, ,graba5 (1,1)
Put #grt, ,graba6 (1,1)
Put #grt, ,graba7 (1,1)
Put #grt, ,graba8 (1,1)
Put #grt, ,graba9 (1,1)
Put #grt, ,graba10 (1,1)
Put #grt, ,TrkTemp()
cerrar (grt)
While InKey <> "": Wend
Sleep 150
End Sub
Sub copiarPmtkAPmtk ( e As Integer, r As Integer) ' emisor a receptor
End Sub
' ---------------------------
Sub ImportarPistaExterna(nombre As String)
Dim As String path, nom,ext
Dim As Integer barra=0,punto=0,ubi3=0,ubi4=0,ntkold=ntk ' el ntk que esta en edicion
Dim midsal As RtMidiOutPtr
' al seleccionar en lista el ntk no se selecciona automaticamente sacando ntk del nombre
' quiero una pista nueva
barra=InStrRev(nombre,"\")
punto=InStrRev(nombre,".")
path= Mid(nombre,1,barra) ' path
nom= Mid(nombre,barra+1,punto - 1 -barra) ' nombre archivo sin extension
ext= LCase(Mid(nombre,punto)) ' contiene el punto .rtk .roll
Dim haycorchete As Integer
haycorchete = InStr(nom,"]")
If haycorchete> 0 Then
nom = Mid(nom, haycorchete+1) ' sacamos el [x] si existe
EndIf
tope = tope + 1
If tope <= 32 Then
ntk=tope
Else
Exit Sub
EndIf
'
Select Case ext
Case ".rtk" ' anda bien seguir probando
' hay que probar ahora modificaciones de los tracks en la cancion
' si modifico alguno a veces cancela en el play aunque
' la modificacion como notas nuevas lo ahce pero en play cancela
' se cierrra el progrma lo levant ode nuevo cargo lacancion
' y las modificaciones quedaron,,
' sacar corchetes si lso tiene del nombre y armar de nuevo el nombre
' toma el ntk globalmente,,,
titulos(ntk)=nombre
CargarTrack(Track(),ntk,1) ' lo carga en ntk nuevo
' no haria falta cargarlo a roll solo copiar el archivo rtk a cancion
' aumentar el tope y cargar la lista, pero bueno lo dejamos asi,,,
' y track a roll tampoco haria falta eso loa hace al dar TAB...
TrackaRoll (Track(),ntk,Roll) 'carga a roll el track cargado anteriormente
' cambiamos el nombre segun la ext
nombre= NombreCancion + "\[" + doscifras(ntk) + "]" + nom +".rtk"
Dim cadena As String = "[" + doscifras(ntk) + "]" + nom
AddListBoxItem(LISTA_DE_PISTAS, cadena)
Sleep 1
'si es vacio tomo la ultima
titulos(ntk)=nombre ' cambiamos el nombre de la pista
' grabar en el directorio de cancion
GrabarRollaTrack(0) ' graba el roll del rtk a directorio cancion
Case ".roll" ' corregido 20-04-2024
titulos(0)=nombre ''nombre de un roll externo fuera de cancion
CargaArchivo(Roll,1) ' sobreescribe ntk global con 0, carga a Roll y a track(0)
' todos los valores quedaron en ntk=0
s5=0 '11-06-2022
''ntk=Tope
nombre= NombreCancion + "\[" + doscifras(Tope) + "]" + nom +".rtk"
Dim cadena As String = "[" + doscifras(Tope) + "]" + nom
AddListBoxItem(LISTA_DE_PISTAS, cadena)
Sleep 1
'esta en Roll y track (0) debo grabarlo a rtk nuevo ntk en cancion
titulos(Tope)=nombre ' cambiamos el nombre de la pista en el ntk nuevo
' grabar en el directorio de cancion
'de nuevo el tope, debo estar posicionado en roll y pista 0
'necesito copiar el Track(0) al Track(Tope) en memoria esto lo hago ya
'''copiar Track 0 A Track Tope no convien hace sub creo osi...
Dim As Integer i1,i2
ReDim (Track(Tope).trk ) (1 To CantTicks, 1 To lim3)
For i1=1 To pmTk(0).MaxPos
For i2 = 1 To lim3
Track(Tope).trk(i1,i2) = Track(0).trk(i1,i2)
Next i2
Next i1
moverPmtkaPmtk(Tope, 0 )
' observar que ntk vale 0 no se toco
Sleep 5
' copio de track(0) a track(ntk)
'fallta grabar a disco el track que se obtuvo a partir de un roll en disco
' grabar track en memoria a Track en disco ,o
' grabar Roll en memoria a Track en disco esto es TrackaRoll igual que antes
' llamo y ntk esta en Tope
GrabarRollaTrack(0)
' y a disco con su nuevo [xx]
End Select
End Sub
sub GrabarCopiadePista()
' variables globales nombre, ntk
' recorro la list atomo el ntk proximo o simplemente sumo 1 a tope e incremento tope
' siempre que sea menor igual a 32, agrego a la lista decontrol y grabo a disco
' en cancoin el nuevo track copia, renombrar pitas faltaria esa funcionalidad
Dim As String path, nom,ext
Dim As Integer barra=0,punto=0,ubi3=0,ubi4=0,ntkold=ntk ' el ntk que esta en edicion
' al seleccionar en lista el ntk no se selecciona automaticamente sacando ntk del nombre
' quiero una pista nueva
barra=InStrRev(nombre,"\")
punto=InStrRev(nombre,".")
path= Mid(nombre,1,barra) ' path
nom= Mid(nombre,barra+1,punto - 1 -barra) ' nombre archivo sin extension
ext= LCase(Mid(nombre,punto)) ' contiene el punto .rtk .roll
'-> copiamos una pista de cancion en otra pista nueva de cancion
' para invocar esto se necesit ael menu de Control
tope=tope+1
If tope <= 32 Then
ntk=tope
Else
Exit Sub
EndIf
' a) tomar el roll de la pista origen sacarle lso deletes, en un roll temporario
' b) copiar el roll temporario al track nuevo
' a) en este caso como es una copia todos los parametros del Roll origen son
' iguales (dsde hasta maxpos notaold posn etc)