Improved 4track with timer, bells and whistles.
This commit is contained in:
parent
9f38d4964d
commit
5e38765fe8
|
@ -1,34 +1,44 @@
|
|||
; 4track - an TASCAM-like multitrack recorder
|
||||
|
||||
; TODO
|
||||
; - track balance
|
||||
; - master volume
|
||||
; - "listen to input" checkbox
|
||||
; - výběr kvality/formátu nahrávání
|
||||
; - před výběrem projektu nepůjde nahrávat
|
||||
; - timer
|
||||
; - manuál
|
||||
|
||||
;
|
||||
; (s) Severák 2020
|
||||
; licensed with MIT license
|
||||
<Cabbage>
|
||||
form caption("4track") size(400, 240), colour(0, 51, 153), pluginid("4trk")
|
||||
form caption("4track") size(445, 250), colour(0, 51, 153), pluginid("4trk")
|
||||
vslider bounds(40, 4, 50, 150) range(0, 1, 1, 1, 0.001) channel("vol1")
|
||||
vslider bounds(94, 4, 50, 150) range(0, 1, 1, 1, 0.001) channel("vol2")
|
||||
vslider bounds(95, 4, 49, 150) range(0, 1, 1, 1, 0.001) channel("vol2")
|
||||
vslider bounds(150, 4, 50, 149) range(0, 1, 1, 1, 0.001) channel("vol3")
|
||||
vslider bounds(204, 4, 50, 149) range(0, 1, 1, 1, 0.001) channel("vol4")
|
||||
checkbox bounds(48, 158, 30, 30) channel("ch1") radiogroup("ch")
|
||||
checkbox bounds(104, 158, 30, 30) channel("ch2") radiogroup("ch")
|
||||
checkbox bounds(160, 158, 30, 30) channel("ch3") radiogroup("ch")
|
||||
checkbox bounds(214, 158, 30, 30) channel("ch4") radiogroup("ch")
|
||||
checkbox bounds(268, 158, 108, 30) channel("ch0") radiogroup("ch") text("JUST PLAY")
|
||||
checkbox bounds(268, 90, 108, 30) text("PLAY/REC") channel("running") colour:1(255, 0, 0, 255) fontcolour:1(255, 255, 0, 255) active(0) identchannel("playrec")
|
||||
filebutton bounds(264, 10, 122, 30) mode("directory") channel("dir") text("PROJECT")
|
||||
label bounds(8, 166, 39, 16) text("CH")
|
||||
label bounds(46, 194, 37, 16) text("1")
|
||||
label bounds(106, 194, 27, 16) text("2")
|
||||
label bounds(160, 194, 33, 16) text("3")
|
||||
label bounds(216, 194, 30, 18) text("4")
|
||||
checkbox bounds(268, 124, 107, 30) channel("mix") text("FINAL MIX") fontcolour:1(255, 255, 0, 255) radiogroup("ch")
|
||||
label bounds(266, 48, 118, 34) text("4track")
|
||||
vslider bounds(256, 4, 50, 149) range(0, 1, 1, 1, 0.001) channel("volmix")
|
||||
|
||||
rslider bounds(42, 156, 52, 37) range(-0.5, 0.5, 0, 1, 0.001) channel("ch1bal")
|
||||
rslider bounds(94, 156, 52, 37) range(-0.5, 0.5, 0, 1, 0.001) channel("ch2bal")
|
||||
rslider bounds(150, 156, 52, 37) range(-0.5, 0.5, 0, 1, 0.001) channel("ch3bal")
|
||||
rslider bounds(202, 156, 52, 37) range(-0.5, 0.5, 0, 1, 0.001) channel("ch4bal")
|
||||
|
||||
|
||||
checkbox bounds(52, 194, 30, 30) channel("ch1") radiogroup("ch") colour:1(255, 0, 0, 255)
|
||||
checkbox bounds(104, 194, 30, 30) channel("ch2") radiogroup("ch") colour:1(255, 0, 0, 255)
|
||||
checkbox bounds(160, 194, 30, 30) channel("ch3") radiogroup("ch") colour:1(255, 0, 0, 255)
|
||||
checkbox bounds(214, 194, 30, 30) channel("ch4") radiogroup("ch") colour:1(255, 0, 0, 255)
|
||||
checkbox bounds(266, 194, 30, 30) channel("mix") radiogroup("ch") colour:1(255, 0, 0, 255)
|
||||
checkbox bounds(320, 192, 108, 30) channel("ch0") radiogroup("ch") text("JUST PLAY")
|
||||
|
||||
checkbox bounds(318, 98, 108, 30) text("PLAY/REC") channel("running") colour:1(255, 0, 0, 255) fontcolour:1(255, 255, 0, 255) active(0) identchannel("playrec")
|
||||
filebutton bounds(316, 8, 122, 30) mode("directory") channel("dir") text("PROJECT", "PROJECT")
|
||||
label bounds(6, 202, 39, 16) text("CH")
|
||||
label bounds(48, 230, 37, 16) text("1")
|
||||
label bounds(104, 230, 27, 16) text("2")
|
||||
label bounds(158, 230, 33, 16) text("3")
|
||||
label bounds(214, 228, 30, 18) text("4")
|
||||
|
||||
label bounds(320, 42, 118, 34) text("4track")
|
||||
label bounds(262, 230, 38, 16) text("mix")
|
||||
|
||||
label bounds(4, 168, 35, 16) text("PAN")
|
||||
label bounds(2, 130, 36, 17) text("VOL")
|
||||
label bounds(342, 80, 91, 16) text("by Severák")
|
||||
checkbox bounds(318, 132, 120, 30) text("listen to input") channel("listen") value(1)
|
||||
label bounds(348, 168, 80, 16) text("00:00") identchannel("timer")
|
||||
</Cabbage>
|
||||
<CsoundSynthesizer>
|
||||
<CsOptions>
|
||||
|
@ -47,7 +57,16 @@ gkRunning init 0
|
|||
|
||||
; this will be a working dir:
|
||||
; selectable by button DIR
|
||||
gSdir init "."
|
||||
gSdir init ""
|
||||
|
||||
|
||||
; whole code is split into multiple instruments:
|
||||
; - main recorder controls
|
||||
; - playback head
|
||||
; - record head
|
||||
; - mixing head
|
||||
; - timer
|
||||
|
||||
|
||||
; recorder controls (always on)
|
||||
instr 1
|
||||
|
@ -61,13 +80,15 @@ kch0 chnget "ch0"
|
|||
|
||||
kmix chnget "mix"
|
||||
|
||||
klisten chnget "listen"
|
||||
|
||||
gkRunning chnget "running"
|
||||
gSdir chnget "dir"
|
||||
|
||||
if changed(gSdir)==1 then
|
||||
printks "gSdir=%s\n", 0.5, gSdir
|
||||
; tohle aktivuje projekt
|
||||
chnset "active(1)", "playrec"
|
||||
if changed(gSdir)==1 && strcmpk(gSdir, "")==1 then
|
||||
; TODO - here activate only on selecting project
|
||||
printks "activated! %s==%s %d\n", 0, gSdir, "", strcmpk(gSdir, "")
|
||||
event "i",5,0,1
|
||||
endif
|
||||
|
||||
if changed:k(gkRunning)==1 && gkRunning==1 && kch1==1 then
|
||||
|
@ -116,16 +137,25 @@ if changed:k(gkRunning)==1 && gkRunning==1 && kch4!=1 then
|
|||
event "i",100,0,900,4
|
||||
endif
|
||||
|
||||
if gkRunning==0 then
|
||||
; passtrough
|
||||
if changed:k(gkRunning)==1 && gkRunning==1 then
|
||||
; tick of the clock
|
||||
event "i",400,0,900
|
||||
endif
|
||||
|
||||
if kmix!=1 && klisten==1 then
|
||||
; passtrough audio input when not mixing master and when its enabled
|
||||
aL, aR ins
|
||||
outs aL, aR
|
||||
endif
|
||||
|
||||
endin
|
||||
|
||||
instr 5
|
||||
chnset "active(1)", "playrec"
|
||||
endin
|
||||
|
||||
; playback
|
||||
|
||||
; playback head
|
||||
instr 100
|
||||
|
||||
if gkRunning==0 then
|
||||
|
@ -136,8 +166,10 @@ endif
|
|||
ich = p4
|
||||
Sname sprintf "%s/ch%d.wav", gSdir, ich
|
||||
Schname sprintf "vol%d", ich
|
||||
Sbalname sprintf "ch%dbal", ich
|
||||
kVol chnget Schname
|
||||
printf_i "in=%s, %s, %d\n", 1, Sname, Schname, kVol
|
||||
kVolmix chnget "volmix"
|
||||
kBal chnget Sbalname
|
||||
|
||||
ivalid filevalid Sname
|
||||
if ivalid==1 then
|
||||
|
@ -145,14 +177,19 @@ if ivalid==1 then
|
|||
kVol chnget Schname
|
||||
|
||||
aL, aR diskin2 Sname, 1
|
||||
outs aL*kVol, aR*kVol
|
||||
|
||||
if kBal!=0 then
|
||||
aL, aR pan2 aL+aR, kBal+0.5
|
||||
endif
|
||||
|
||||
outs aL* (kVol * kVolmix), aR * (kVol * kVolmix)
|
||||
else
|
||||
turnoff
|
||||
endif
|
||||
|
||||
endin
|
||||
|
||||
; record
|
||||
; record head
|
||||
instr 200
|
||||
|
||||
if gkRunning==0 then
|
||||
|
@ -166,13 +203,11 @@ Sname sprintf "%s/ch%d.wav", gSdir, ich
|
|||
printf_i "out=%s\n", 1, Sname
|
||||
|
||||
fout Sname, 9, aL, aR
|
||||
outs aL, aR
|
||||
clear aL, aR
|
||||
|
||||
endin
|
||||
|
||||
|
||||
; mix record
|
||||
; mixing head
|
||||
instr 300
|
||||
|
||||
if gkRunning==0 then
|
||||
|
@ -188,6 +223,23 @@ fout Sname, 9, aL, aR
|
|||
|
||||
endin
|
||||
|
||||
; timer
|
||||
instr 400
|
||||
if gkRunning==0 then
|
||||
turnoff
|
||||
endif
|
||||
|
||||
ktime init -1
|
||||
ktrig metro 1
|
||||
|
||||
if ktrig==1 then
|
||||
ktime = ktime + 1
|
||||
Stime sprintfk "text(\"%02d:%02d\")", floor(ktime/60), (ktime%60)
|
||||
chnset Stime, "timer"
|
||||
endif
|
||||
|
||||
endin
|
||||
|
||||
|
||||
|
||||
</CsInstruments>
|
||||
|
|
Loading…
Reference in New Issue