diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..9fe7314 --- /dev/null +++ b/.gitignore @@ -0,0 +1,10 @@ +# gitignore +# Ultraschall +# + +## App +*.app + +## Licence file +*.rk + diff --git a/BR.ini b/BR.ini new file mode 100644 index 0000000..5ceee96 --- /dev/null +++ b/BR.ini @@ -0,0 +1,6 @@ +[common] +autoStretchMarkersTempo=1 + +[ContextualToolbars] +DlgPreset=0 + diff --git a/ColorThemes/Default_5.0.ReaperThemeZip b/ColorThemes/Default_5.0.ReaperThemeZip new file mode 100644 index 0000000..5d6879b Binary files /dev/null and b/ColorThemes/Default_5.0.ReaperThemeZip differ diff --git a/ColorThemes/Ultraschall_2/00_Small_buttons_composit.psd b/ColorThemes/Ultraschall_2/00_Small_buttons_composit.psd new file mode 100644 index 0000000..74120a5 Binary files /dev/null and b/ColorThemes/Ultraschall_2/00_Small_buttons_composit.psd differ diff --git a/ColorThemes/Ultraschall_2/00_Transport Icons Compostit.psd b/ColorThemes/Ultraschall_2/00_Transport Icons Compostit.psd new file mode 100644 index 0000000..66cda8c Binary files /dev/null and b/ColorThemes/Ultraschall_2/00_Transport Icons Compostit.psd differ diff --git a/ColorThemes/Ultraschall_2/00_toolbar_composit.png b/ColorThemes/Ultraschall_2/00_toolbar_composit.png new file mode 100644 index 0000000..e219186 Binary files /dev/null and b/ColorThemes/Ultraschall_2/00_toolbar_composit.png differ diff --git a/ColorThemes/Ultraschall_2/00_toolbar_composit.psd b/ColorThemes/Ultraschall_2/00_toolbar_composit.psd new file mode 100644 index 0000000..1ae3674 Binary files /dev/null and b/ColorThemes/Ultraschall_2/00_toolbar_composit.psd differ diff --git a/ColorThemes/Ultraschall_2/00_toolbar_composit2.png b/ColorThemes/Ultraschall_2/00_toolbar_composit2.png new file mode 100644 index 0000000..1968673 Binary files /dev/null and b/ColorThemes/Ultraschall_2/00_toolbar_composit2.png differ diff --git a/ColorThemes/Ultraschall_2/00_toolbar_composit2.psd b/ColorThemes/Ultraschall_2/00_toolbar_composit2.psd new file mode 100644 index 0000000..cd81c40 Binary files /dev/null and b/ColorThemes/Ultraschall_2/00_toolbar_composit2.psd differ diff --git a/ColorThemes/Ultraschall_2/00_toolbar_composit3.png b/ColorThemes/Ultraschall_2/00_toolbar_composit3.png new file mode 100644 index 0000000..6b4c331 Binary files /dev/null and b/ColorThemes/Ultraschall_2/00_toolbar_composit3.png differ diff --git a/ColorThemes/Ultraschall_2/00_toolbar_composit3.psd b/ColorThemes/Ultraschall_2/00_toolbar_composit3.psd new file mode 100644 index 0000000..0d25da6 Binary files /dev/null and b/ColorThemes/Ultraschall_2/00_toolbar_composit3.psd differ diff --git a/ColorThemes/Ultraschall_2/00_toolbar_composit4.png b/ColorThemes/Ultraschall_2/00_toolbar_composit4.png new file mode 100644 index 0000000..aae3079 Binary files /dev/null and b/ColorThemes/Ultraschall_2/00_toolbar_composit4.png differ diff --git a/ColorThemes/Ultraschall_2/00_toolbar_composit4.psd b/ColorThemes/Ultraschall_2/00_toolbar_composit4.psd new file mode 100644 index 0000000..9accfcb Binary files /dev/null and b/ColorThemes/Ultraschall_2/00_toolbar_composit4.psd differ diff --git a/ColorThemes/Ultraschall_2/00_toolbar_composit5.png b/ColorThemes/Ultraschall_2/00_toolbar_composit5.png new file mode 100644 index 0000000..7f0a649 Binary files /dev/null and b/ColorThemes/Ultraschall_2/00_toolbar_composit5.png differ diff --git a/ColorThemes/Ultraschall_2/00_toolbar_composit5.psd b/ColorThemes/Ultraschall_2/00_toolbar_composit5.psd new file mode 100644 index 0000000..6e3b4ac Binary files /dev/null and b/ColorThemes/Ultraschall_2/00_toolbar_composit5.psd differ diff --git a/ColorThemes/Ultraschall_2/00_toolbar_composit6.psd b/ColorThemes/Ultraschall_2/00_toolbar_composit6.psd new file mode 100644 index 0000000..2444f43 Binary files /dev/null and b/ColorThemes/Ultraschall_2/00_toolbar_composit6.psd differ diff --git a/ColorThemes/Ultraschall_2/00_toolbar_composit7.psd b/ColorThemes/Ultraschall_2/00_toolbar_composit7.psd new file mode 100644 index 0000000..beaf5ab Binary files /dev/null and b/ColorThemes/Ultraschall_2/00_toolbar_composit7.psd differ diff --git a/ColorThemes/Ultraschall_2/00_toolbar_composit_routing.psd b/ColorThemes/Ultraschall_2/00_toolbar_composit_routing.psd new file mode 100644 index 0000000..c319f55 Binary files /dev/null and b/ColorThemes/Ultraschall_2/00_toolbar_composit_routing.psd differ diff --git a/ColorThemes/Ultraschall_2/00_toolbar_follow.png b/ColorThemes/Ultraschall_2/00_toolbar_follow.png new file mode 100644 index 0000000..b4bc16f Binary files /dev/null and b/ColorThemes/Ultraschall_2/00_toolbar_follow.png differ diff --git a/ColorThemes/Ultraschall_2/00_toolbar_zoom2.png b/ColorThemes/Ultraschall_2/00_toolbar_zoom2.png new file mode 100644 index 0000000..584f227 Binary files /dev/null and b/ColorThemes/Ultraschall_2/00_toolbar_zoom2.png differ diff --git a/ColorThemes/Ultraschall_2/00_transport_composit.psd b/ColorThemes/Ultraschall_2/00_transport_composit.psd new file mode 100644 index 0000000..a340605 Binary files /dev/null and b/ColorThemes/Ultraschall_2/00_transport_composit.psd differ diff --git a/ColorThemes/Ultraschall_2/00_transport_composit2.psd b/ColorThemes/Ultraschall_2/00_transport_composit2.psd new file mode 100644 index 0000000..c9903da Binary files /dev/null and b/ColorThemes/Ultraschall_2/00_transport_composit2.psd differ diff --git a/ColorThemes/Ultraschall_2/00_transport_composit3.png b/ColorThemes/Ultraschall_2/00_transport_composit3.png new file mode 100644 index 0000000..faf6105 Binary files /dev/null and b/ColorThemes/Ultraschall_2/00_transport_composit3.png differ diff --git a/ColorThemes/Ultraschall_2/00_transport_composit3.psd b/ColorThemes/Ultraschall_2/00_transport_composit3.psd new file mode 100644 index 0000000..d2ea5b7 Binary files /dev/null and b/ColorThemes/Ultraschall_2/00_transport_composit3.psd differ diff --git a/ColorThemes/Ultraschall_2/0item_bg_sel.png b/ColorThemes/Ultraschall_2/0item_bg_sel.png new file mode 100644 index 0000000..26a85d2 Binary files /dev/null and b/ColorThemes/Ultraschall_2/0item_bg_sel.png differ diff --git a/ColorThemes/Ultraschall_2/2item_bg.png b/ColorThemes/Ultraschall_2/2item_bg.png new file mode 100644 index 0000000..30bbab6 Binary files /dev/null and b/ColorThemes/Ultraschall_2/2item_bg.png differ diff --git a/ColorThemes/Ultraschall_2/PPW NAmen.rtf b/ColorThemes/Ultraschall_2/PPW NAmen.rtf new file mode 100644 index 0000000..1b9d279 --- /dev/null +++ b/ColorThemes/Ultraschall_2/PPW NAmen.rtf @@ -0,0 +1,59 @@ +{\rtf1\ansi\ansicpg1252\cocoartf1404\cocoasubrtf420 +{\fonttbl\f0\fswiss\fcharset0 Helvetica;} +{\colortbl;\red255\green255\blue255;} +\paperw11900\paperh16840\margl1440\margr1440\vieww12500\viewh15160\viewkind0 +\pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural\partightenfactor0 + +\f0\fs24 \cf0 \ +\ +Schwingung\ +\ +\ +\ +Amplitude\ +\ +\ +\ +Signale\ +\ +\ +\ +Apparat\ +\ +\ +Berthold\ +\ +\ +Schallwandler\ +\ +Kompressor\ +\ +Frequenz\ +\ +\ +Sendezentrale\ +\ +welle\ +\ +Konferenzschaltung\ +\ +SendCon\ +\ +Wellbrecht\ +\ +Brechtwelle\ +\ +Wellen\ +\ +Rauschen\ +\ +Anschluss\ +\ +Echokammer\ +\ +Clipping\ +\ +\ +\ +\ +} \ No newline at end of file diff --git a/ColorThemes/Ultraschall_2/Reaper Splashscreen 2.png b/ColorThemes/Ultraschall_2/Reaper Splashscreen 2.png new file mode 100644 index 0000000..0ba49c9 Binary files /dev/null and b/ColorThemes/Ultraschall_2/Reaper Splashscreen 2.png differ diff --git a/ColorThemes/Ultraschall_2/Ultraschall_beta3.ReaperTheme b/ColorThemes/Ultraschall_2/Ultraschall_beta3.ReaperTheme new file mode 100644 index 0000000..c9a9392 --- /dev/null +++ b/ColorThemes/Ultraschall_2/Ultraschall_beta3.ReaperTheme @@ -0,0 +1,255 @@ +[color theme] +activetake_tag=0 +col_arrangebg=2565927 +col_buttonbg=0 +col_cursor=4437 +col_cursor2=4437 +col_env1=8444928 +col_env10=16384 +col_env11=16776960 +col_env12=65535 +col_env13=16711808 +col_env14=8421440 +col_env15=16711680 +col_env16=8388863 +col_env2=4227136 +col_env3=255 +col_env4=38655 +col_env5=0 +col_env6=16776960 +col_env7=128 +col_env8=8421376 +col_env9=12615680 +col_envlane1_divline=2368548 +col_envlane2_divline=2368548 +col_fadearm=8224255 +col_fadearm2=8257405 +col_fadearm3=6488063 +col_gridlines=10197915 +col_gridlines2=3947580 +col_gridlines3=3947580 +col_main_3dhl=4605510 +col_main_3dsh=2960685 +col_main_bg=-2144128205 +col_main_bg2=3355443 +col_main_editbk=2697513 +col_main_resize=2960685 +col_main_text=10066329 +col_main_text2=11184810 +col_main_textshadow=1907218 +col_mi_bg=4013373 +col_mi_bg2=4013373 +col_mi_fade2=13027014 +col_mi_fade2_drawmode=153857 +col_mi_fades=1052777 +col_mi_label=12829635 +col_mi_label_float=7368816 +col_mi_label_float_sel=7368816 +col_mi_label_sel=2763306 +col_mixerbg=3355443 +col_offlinetext=4670000 +col_peaksedge=13816530 +col_peaksedge2=13816530 +col_peaksedgesel=2763306 +col_peaksedgesel2=2763306 +col_peaksfade1=65280 +col_peaksfade2=255 +col_routinghl1=12648447 +col_routinghl2=16744576 +col_seltrack=13816530 +col_seltrack2=-2134522427 +col_stretchmarker=2368548 +col_stretchmarker_b=2368548 +col_stretchmarker_h0=9868950 +col_stretchmarker_h1=65280 +col_stretchmarker_h2=16711935 +col_stretchmarker_text=2302755 +col_stretchmarkerm=196608 +col_tcp_text=1907218 +col_tcp_textsel=1907218 +col_tl_bg=2763306 +col_tl_bgsel=16777215 +col_tl_bgsel2=11053224 +col_tl_fg=6908265 +col_toolbar_frame=4868682 +col_toolbar_text=10461087 +col_toolbar_text_on=12647359 +col_tr1_bg=2368548 +col_tr1_divline=2368548 +col_tr1_itembgsel=12369084 +col_tr1_peaks=13158600 +col_tr1_ps2=2763306 +col_tr2_bg=2368548 +col_tr2_divline=2368548 +col_tr2_itembgsel=12369084 +col_tr2_peaks=13158600 +col_tr2_ps2=2763306 +col_tracklistbg=2763306 +col_trans_bg=4802889 +col_trans_fg=9145225 +col_transport_editbk=3355443 +col_tsigmark=2434847 +col_vubot=12566272 +col_vuclip=255 +col_vudoint=0 +col_vuind1=2105376 +col_vuind2=10240 +col_vuind3=65312 +col_vuind4=65535 +col_vuintcol=2105376 +col_vumid=11393536 +col_vumidi=255 +col_vutop=9829888 +docker_bg=4342338 +docker_selface=4868682 +docker_shadow=1907218 +docker_text=3355443 +docker_unselface=3355443 +env_item_mute=49344 +env_item_pan=8421376 +env_item_pitch=16776960 +env_item_vol=128 +env_sends_mute=49344 +env_track_mute=192 +fadearea_color=6291456 +fadearea_drawmode=131072 +fadezone_color=72 +fadezone_drawmode=140800 +genlist_bg=2697513 +genlist_fg=15132390 +genlist_grid=2434341 +genlist_selbg=5921370 +genlist_selfg=16777215 +genlist_seliabg=5921370 +genlist_seliafg=15132390 +group_0=255 +group_1=65280 +group_10=12583104 +group_11=12632064 +group_12=128 +group_13=32768 +group_14=8388608 +group_15=32896 +group_16=8388736 +group_17=8421376 +group_18=32960 +group_19=8437760 +group_2=16711680 +group_20=12615680 +group_21=32960 +group_22=12583040 +group_23=49280 +group_24=64 +group_25=16384 +group_26=4194304 +group_27=16448 +group_28=4194368 +group_29=4210688 +group_3=65535 +group_30=4194368 +group_31=4210688 +group_4=16711935 +group_5=16776960 +group_6=192 +group_7=49152 +group_8=12582912 +group_9=49344 +guideline_color=8618883 +guideline_drawmode=150529 +io_3dhl=1973790 +io_3dsh=4605510 +io_text=15790320 +item_grouphl=3192883 +itembg_drawmode=196608 +marker=6316128 +marker_lane_bg=3947580 +marker_lane_text=11842740 +marquee_drawmode=170495 +marquee_fill=7241856 +marquee_outline=16777215 +marqueezoom_drawmode=147458 +marqueezoom_fill=16777215 +marqueezoom_outline=65280 +mcp_fx_bypassed=10461087 +mcp_fx_normal=7328767 +mcp_fx_offlined=4474039 +mcp_fxparm_bypassed=6522520 +mcp_fxparm_normal=10724259 +mcp_fxparm_offlined=6513560 +mcp_send_midihw=2631720 +mcp_sends_levels=4670000 +mcp_sends_muted=6522520 +mcp_sends_normal=12561781 +midi_editcurs=2368674 +midi_endpt=3815994 +midi_grid1=2763306 +midi_grid2=2763306 +midi_grid3=2763306 +midi_inline_trackbg1=12961221 +midi_inline_trackbg2=11908533 +midi_itemctl=12961221 +midi_notebg=7109467 +midi_notefg=3223857 +midi_notemute=3487029 +midi_notemute_sel=1579032 +midi_noteon_flash=64 +midi_ofsn=3881787 +midi_ofsnsel=3881787 +midi_pkey1=16777215 +midi_pkey2=0 +midi_pkey3=6118749 +midi_rulerbg=3355443 +midi_rulerfg=7237230 +midi_selbg=16777215 +midi_selbg_drawmode=135169 +midi_selpitch1=5066061 +midi_selpitch2=5066061 +midi_trackbg1=3355443 +midi_trackbg2=2960685 +midi_trackbg_outer1=2697513 +midi_trackbg_outer2=2500134 +midieditorlist_bg=16777215 +midieditorlist_bg2=14799570 +midieditorlist_fg=0 +midieditorlist_fg2=0 +midieditorlist_grid=14737632 +midieditorlist_selbg=16750899 +midieditorlist_selbg2=15763235 +midieditorlist_selfg=16777215 +midieditorlist_selfg2=16777215 +midieditorlist_seliabg=15790320 +midieditorlist_seliafg=0 +midifont_col_dark=4210752 +midifont_col_light=12632256 +midioct=5921370 +midioct_inline=9474192 +playcursor_color=1644825 +playcursor_drawmode=163843 +region=9079434 +region_lane_bg=3355443 +region_lane_text=2434847 +selitem_tag=0 +tcplocked_color=3355443 +tcplocked_drawmode=180224 +timesel_drawmode=135425 +toolbararmed_color=33023 +toolbararmed_drawmode=163841 +ts_lane_bg=3355443 +ts_lane_text=10855845 +windowtab_bg=7895160 + +[REAPER] +lb_font=0C00000000000000000000000000000090010000000000010000000048656C766574696361004E657565000000000000000000000000000000000000C0 +lb_font2=0E000000000000000000000000000000BC020000000000000302012248656C766574696361204E657565007400726966000000000000000000000000EB +mi_font=F5FFFFFF000000000000000000000000BC02000000000000030201224E657773476F746820425400425400636F646500000000000000000000000000EE +tl_font=0E000000000000000000000000000000BC020000000000000302012248656C766574696361204E6575650053657269660000000000000000000000002F +trans_font=0F000000000000000000000000000000BC020000000000000302012248656C766574696361204E65756500000000000000000000000000000000000037 +ui_img=Ultraschall_beta2_unpacked +user_font1=F7FFFFFF000000000000000000000000900100000000000003020122417269616C00000000000000000000000000000000000000000000000000000096 +user_font2=0C000000000000000000000000000000900100000000000100000000417269616C00000000000000000000000000000000000000000000000000000087 +user_font3=0C000000000000000000000000000000900100000000000100000000417269616C00000000000000000000000000000000000000000000000000000087 +user_font4=0C000000000000000000000000000000900100000000000100000000417269616C00000000000000000000000000000000000000000000000000000087 +user_font5=0C000000000000000000000000000000900100000000000100000000417269616C00000000000000000000000000000000000000000000000000000087 +user_font6=0C000000000000000000000000000000900100000000000100000000417269616C00000000000000000000000000000000000000000000000000000087 +user_font7=0C000000000000000000000000000000900100000000000100000000417269616C00000000000000000000000000000000000000000000000000000087 + diff --git a/ColorThemes/Ultraschall_2/Ultraschall_colors.SWSColor b/ColorThemes/Ultraschall_2/Ultraschall_colors.SWSColor new file mode 100644 index 0000000..cf7c094 --- /dev/null +++ b/ColorThemes/Ultraschall_2/Ultraschall_colors.SWSColor @@ -0,0 +1,20 @@ +[SWS Color] +custcolor1=7770814 +custcolor10=16777215 +custcolor11=16777215 +custcolor12=140370 +custcolor13=5998801 +custcolor14=16777215 +custcolor15=16777215 +custcolor16=16777215 +custcolor2=5477488 +custcolor3=14656620 +custcolor4=11636436 +custcolor5=10066329 +custcolor6=16777215 +custcolor7=16777215 +custcolor8=16777215 +custcolor9=16777215 +gradientEnd=3691392 +gradientStart=12572413 + diff --git a/ColorThemes/Ultraschall_2/alt-tcp-faders/tcp_volbg.png b/ColorThemes/Ultraschall_2/alt-tcp-faders/tcp_volbg.png new file mode 100644 index 0000000..72fa561 Binary files /dev/null and b/ColorThemes/Ultraschall_2/alt-tcp-faders/tcp_volbg.png differ diff --git a/ColorThemes/Ultraschall_2/alt-tcp-faders/tcp_volthumb.png b/ColorThemes/Ultraschall_2/alt-tcp-faders/tcp_volthumb.png new file mode 100644 index 0000000..99287c8 Binary files /dev/null and b/ColorThemes/Ultraschall_2/alt-tcp-faders/tcp_volthumb.png differ diff --git a/ColorThemes/Ultraschall_2/alt2/mcp_io.png b/ColorThemes/Ultraschall_2/alt2/mcp_io.png new file mode 100644 index 0000000..5668166 Binary files /dev/null and b/ColorThemes/Ultraschall_2/alt2/mcp_io.png differ diff --git a/ColorThemes/Ultraschall_2/alt2/mcp_io_s.png b/ColorThemes/Ultraschall_2/alt2/mcp_io_s.png new file mode 100644 index 0000000..0bafd92 Binary files /dev/null and b/ColorThemes/Ultraschall_2/alt2/mcp_io_s.png differ diff --git a/ColorThemes/Ultraschall_2/alt2/mcp_mainbg.png b/ColorThemes/Ultraschall_2/alt2/mcp_mainbg.png new file mode 100644 index 0000000..704f91d Binary files /dev/null and b/ColorThemes/Ultraschall_2/alt2/mcp_mainbg.png differ diff --git a/ColorThemes/Ultraschall_2/alt2/mcp_mainbgsel.png b/ColorThemes/Ultraschall_2/alt2/mcp_mainbgsel.png new file mode 100644 index 0000000..9a130b7 Binary files /dev/null and b/ColorThemes/Ultraschall_2/alt2/mcp_mainbgsel.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-big-meter 2/mcp_bg.png b/ColorThemes/Ultraschall_2/black-mcp-big-meter 2/mcp_bg.png new file mode 100644 index 0000000..65ad3fc Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-big-meter 2/mcp_bg.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-big-meter 2/mcp_bgsel.png b/ColorThemes/Ultraschall_2/black-mcp-big-meter 2/mcp_bgsel.png new file mode 100644 index 0000000..dccf0b8 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-big-meter 2/mcp_bgsel.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-big-meter 2/mcp_env.png b/ColorThemes/Ultraschall_2/black-mcp-big-meter 2/mcp_env.png new file mode 100644 index 0000000..6464d50 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-big-meter 2/mcp_env.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-big-meter 2/mcp_env_latch.png b/ColorThemes/Ultraschall_2/black-mcp-big-meter 2/mcp_env_latch.png new file mode 100644 index 0000000..153012c Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-big-meter 2/mcp_env_latch.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-big-meter 2/mcp_env_read.png b/ColorThemes/Ultraschall_2/black-mcp-big-meter 2/mcp_env_read.png new file mode 100644 index 0000000..3d28433 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-big-meter 2/mcp_env_read.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-big-meter 2/mcp_env_touch.png b/ColorThemes/Ultraschall_2/black-mcp-big-meter 2/mcp_env_touch.png new file mode 100644 index 0000000..94f94e3 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-big-meter 2/mcp_env_touch.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-big-meter 2/mcp_env_write.png b/ColorThemes/Ultraschall_2/black-mcp-big-meter 2/mcp_env_write.png new file mode 100644 index 0000000..077c668 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-big-meter 2/mcp_env_write.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-big-meter 2/mcp_fcomp_off.png b/ColorThemes/Ultraschall_2/black-mcp-big-meter 2/mcp_fcomp_off.png new file mode 100644 index 0000000..9df5253 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-big-meter 2/mcp_fcomp_off.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-big-meter 2/mcp_fcomp_tiny.png b/ColorThemes/Ultraschall_2/black-mcp-big-meter 2/mcp_fcomp_tiny.png new file mode 100644 index 0000000..49c0d2e Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-big-meter 2/mcp_fcomp_tiny.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-big-meter 2/mcp_folder_last.png b/ColorThemes/Ultraschall_2/black-mcp-big-meter 2/mcp_folder_last.png new file mode 100644 index 0000000..619fb89 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-big-meter 2/mcp_folder_last.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-big-meter 2/mcp_fx_empty.png b/ColorThemes/Ultraschall_2/black-mcp-big-meter 2/mcp_fx_empty.png new file mode 100644 index 0000000..f2edac6 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-big-meter 2/mcp_fx_empty.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-big-meter 2/mcp_fx_in_empty.png b/ColorThemes/Ultraschall_2/black-mcp-big-meter 2/mcp_fx_in_empty.png new file mode 100644 index 0000000..0a7a8e7 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-big-meter 2/mcp_fx_in_empty.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-big-meter 2/mcp_fx_in_norm.png b/ColorThemes/Ultraschall_2/black-mcp-big-meter 2/mcp_fx_in_norm.png new file mode 100644 index 0000000..5e382a8 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-big-meter 2/mcp_fx_in_norm.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-big-meter 2/mcp_io.png b/ColorThemes/Ultraschall_2/black-mcp-big-meter 2/mcp_io.png new file mode 100644 index 0000000..6f2a646 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-big-meter 2/mcp_io.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-big-meter 2/mcp_io_dis.png b/ColorThemes/Ultraschall_2/black-mcp-big-meter 2/mcp_io_dis.png new file mode 100644 index 0000000..86e619a Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-big-meter 2/mcp_io_dis.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-big-meter 2/mcp_io_r.png b/ColorThemes/Ultraschall_2/black-mcp-big-meter 2/mcp_io_r.png new file mode 100644 index 0000000..1f512dc Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-big-meter 2/mcp_io_r.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-big-meter 2/mcp_io_r_dis.png b/ColorThemes/Ultraschall_2/black-mcp-big-meter 2/mcp_io_r_dis.png new file mode 100644 index 0000000..a1228a6 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-big-meter 2/mcp_io_r_dis.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-big-meter 2/mcp_io_s.png b/ColorThemes/Ultraschall_2/black-mcp-big-meter 2/mcp_io_s.png new file mode 100644 index 0000000..c069cbf Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-big-meter 2/mcp_io_s.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-big-meter 2/mcp_io_s_dis.png b/ColorThemes/Ultraschall_2/black-mcp-big-meter 2/mcp_io_s_dis.png new file mode 100644 index 0000000..444d464 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-big-meter 2/mcp_io_s_dis.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-big-meter 2/mcp_io_s_r.png b/ColorThemes/Ultraschall_2/black-mcp-big-meter 2/mcp_io_s_r.png new file mode 100644 index 0000000..b3d3c54 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-big-meter 2/mcp_io_s_r.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-big-meter 2/mcp_io_s_r_dis.png b/ColorThemes/Ultraschall_2/black-mcp-big-meter 2/mcp_io_s_r_dis.png new file mode 100644 index 0000000..03cb690 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-big-meter 2/mcp_io_s_r_dis.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-big-meter 2/mcp_monitor_auto.png b/ColorThemes/Ultraschall_2/black-mcp-big-meter 2/mcp_monitor_auto.png new file mode 100644 index 0000000..474ef7d Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-big-meter 2/mcp_monitor_auto.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-big-meter 2/mcp_monitor_off.png b/ColorThemes/Ultraschall_2/black-mcp-big-meter 2/mcp_monitor_off.png new file mode 100644 index 0000000..0a7061a Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-big-meter 2/mcp_monitor_off.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-big-meter 2/mcp_monitor_on.png b/ColorThemes/Ultraschall_2/black-mcp-big-meter 2/mcp_monitor_on.png new file mode 100644 index 0000000..eff9c59 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-big-meter 2/mcp_monitor_on.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-big-meter 2/mcp_mute_off.png b/ColorThemes/Ultraschall_2/black-mcp-big-meter 2/mcp_mute_off.png new file mode 100644 index 0000000..592a5ae Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-big-meter 2/mcp_mute_off.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-big-meter 2/mcp_mute_on.png b/ColorThemes/Ultraschall_2/black-mcp-big-meter 2/mcp_mute_on.png new file mode 100644 index 0000000..196514b Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-big-meter 2/mcp_mute_on.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-big-meter 2/mcp_pan_knob_small.png b/ColorThemes/Ultraschall_2/black-mcp-big-meter 2/mcp_pan_knob_small.png new file mode 100644 index 0000000..16b3b1f Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-big-meter 2/mcp_pan_knob_small.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-big-meter 2/mcp_pan_label.png b/ColorThemes/Ultraschall_2/black-mcp-big-meter 2/mcp_pan_label.png new file mode 100644 index 0000000..adebe94 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-big-meter 2/mcp_pan_label.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-big-meter 2/mcp_phase_norm.png b/ColorThemes/Ultraschall_2/black-mcp-big-meter 2/mcp_phase_norm.png new file mode 100644 index 0000000..cfe5c9d Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-big-meter 2/mcp_phase_norm.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-big-meter 2/mcp_recarm_auto.png b/ColorThemes/Ultraschall_2/black-mcp-big-meter 2/mcp_recarm_auto.png new file mode 100644 index 0000000..b6197ab Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-big-meter 2/mcp_recarm_auto.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-big-meter 2/mcp_recarm_auto_on.png b/ColorThemes/Ultraschall_2/black-mcp-big-meter 2/mcp_recarm_auto_on.png new file mode 100644 index 0000000..970968f Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-big-meter 2/mcp_recarm_auto_on.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-big-meter 2/mcp_recarm_off.png b/ColorThemes/Ultraschall_2/black-mcp-big-meter 2/mcp_recarm_off.png new file mode 100644 index 0000000..87176a0 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-big-meter 2/mcp_recarm_off.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-big-meter 2/mcp_recarm_on.png b/ColorThemes/Ultraschall_2/black-mcp-big-meter 2/mcp_recarm_on.png new file mode 100644 index 0000000..40b9527 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-big-meter 2/mcp_recarm_on.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-big-meter 2/mcp_recinput.png b/ColorThemes/Ultraschall_2/black-mcp-big-meter 2/mcp_recinput.png new file mode 100644 index 0000000..6443ffd Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-big-meter 2/mcp_recinput.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-big-meter 2/mcp_recmode_in.png b/ColorThemes/Ultraschall_2/black-mcp-big-meter 2/mcp_recmode_in.png new file mode 100644 index 0000000..e7a84de Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-big-meter 2/mcp_recmode_in.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-big-meter 2/mcp_recmode_off.png b/ColorThemes/Ultraschall_2/black-mcp-big-meter 2/mcp_recmode_off.png new file mode 100644 index 0000000..fb73c54 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-big-meter 2/mcp_recmode_off.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-big-meter 2/mcp_recmode_out.png b/ColorThemes/Ultraschall_2/black-mcp-big-meter 2/mcp_recmode_out.png new file mode 100644 index 0000000..a1d3664 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-big-meter 2/mcp_recmode_out.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-big-meter 2/mcp_solo_off.png b/ColorThemes/Ultraschall_2/black-mcp-big-meter 2/mcp_solo_off.png new file mode 100644 index 0000000..c9a6a6a Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-big-meter 2/mcp_solo_off.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-big-meter 2/mcp_solo_on.png b/ColorThemes/Ultraschall_2/black-mcp-big-meter 2/mcp_solo_on.png new file mode 100644 index 0000000..08c3795 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-big-meter 2/mcp_solo_on.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-big-meter 2/mcp_solodefeat_on.png b/ColorThemes/Ultraschall_2/black-mcp-big-meter 2/mcp_solodefeat_on.png new file mode 100644 index 0000000..bee31e9 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-big-meter 2/mcp_solodefeat_on.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-big-meter 2/mcp_vol_label.png b/ColorThemes/Ultraschall_2/black-mcp-big-meter 2/mcp_vol_label.png new file mode 100644 index 0000000..90f5a33 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-big-meter 2/mcp_vol_label.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-big-meter 2/mcp_volbg.png b/ColorThemes/Ultraschall_2/black-mcp-big-meter 2/mcp_volbg.png new file mode 100644 index 0000000..2d301c8 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-big-meter 2/mcp_volbg.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-big-meter 2/mcp_volthumb.png b/ColorThemes/Ultraschall_2/black-mcp-big-meter 2/mcp_volthumb.png new file mode 100644 index 0000000..07ea081 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-big-meter 2/mcp_volthumb.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-big-meter 2/mcp_wid_label.png b/ColorThemes/Ultraschall_2/black-mcp-big-meter 2/mcp_wid_label.png new file mode 100644 index 0000000..adebe94 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-big-meter 2/mcp_wid_label.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-big-meter 2/mcp_width_knob_small.png b/ColorThemes/Ultraschall_2/black-mcp-big-meter 2/mcp_width_knob_small.png new file mode 100644 index 0000000..57a05ba Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-big-meter 2/mcp_width_knob_small.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-big-meter 2/meter_bg_mcp.png b/ColorThemes/Ultraschall_2/black-mcp-big-meter 2/meter_bg_mcp.png new file mode 100644 index 0000000..f57074a Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-big-meter 2/meter_bg_mcp.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-big-meter 2/meter_bg_v.png b/ColorThemes/Ultraschall_2/black-mcp-big-meter 2/meter_bg_v.png new file mode 100644 index 0000000..c5f992c Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-big-meter 2/meter_bg_v.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-big-meter 2/meter_strip_v.png b/ColorThemes/Ultraschall_2/black-mcp-big-meter 2/meter_strip_v.png new file mode 100644 index 0000000..afbc341 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-big-meter 2/meter_strip_v.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-big-meter 2/tcp_namebg.png b/ColorThemes/Ultraschall_2/black-mcp-big-meter 2/tcp_namebg.png new file mode 100644 index 0000000..90b0588 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-big-meter 2/tcp_namebg.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-big-meter 2/tcp_recinput.png b/ColorThemes/Ultraschall_2/black-mcp-big-meter 2/tcp_recinput.png new file mode 100644 index 0000000..14d7613 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-big-meter 2/tcp_recinput.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-big-meter 2/track_fxempty_v.png b/ColorThemes/Ultraschall_2/black-mcp-big-meter 2/track_fxempty_v.png new file mode 100644 index 0000000..4e89115 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-big-meter 2/track_fxempty_v.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-big-meter 2/track_io.png b/ColorThemes/Ultraschall_2/black-mcp-big-meter 2/track_io.png new file mode 100644 index 0000000..79c6d05 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-big-meter 2/track_io.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-big-meter 2/track_io_dis.png b/ColorThemes/Ultraschall_2/black-mcp-big-meter 2/track_io_dis.png new file mode 100644 index 0000000..3c4a744 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-big-meter 2/track_io_dis.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-big-meter 2/track_io_r.png b/ColorThemes/Ultraschall_2/black-mcp-big-meter 2/track_io_r.png new file mode 100644 index 0000000..b5bb7f3 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-big-meter 2/track_io_r.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-big-meter 2/track_io_r_dis.png b/ColorThemes/Ultraschall_2/black-mcp-big-meter 2/track_io_r_dis.png new file mode 100644 index 0000000..8e058f5 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-big-meter 2/track_io_r_dis.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-big-meter 2/track_io_s.png b/ColorThemes/Ultraschall_2/black-mcp-big-meter 2/track_io_s.png new file mode 100644 index 0000000..ca89ea2 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-big-meter 2/track_io_s.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-big-meter 2/track_io_s_dis.png b/ColorThemes/Ultraschall_2/black-mcp-big-meter 2/track_io_s_dis.png new file mode 100644 index 0000000..b851373 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-big-meter 2/track_io_s_dis.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-big-meter 2/track_io_s_r.png b/ColorThemes/Ultraschall_2/black-mcp-big-meter 2/track_io_s_r.png new file mode 100644 index 0000000..631c732 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-big-meter 2/track_io_s_r.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-big-meter 2/track_io_s_r_dis.png b/ColorThemes/Ultraschall_2/black-mcp-big-meter 2/track_io_s_r_dis.png new file mode 100644 index 0000000..c0cd533 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-big-meter 2/track_io_s_r_dis.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-default/mcp_bg.png b/ColorThemes/Ultraschall_2/black-mcp-default/mcp_bg.png new file mode 100644 index 0000000..b85b41f Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-default/mcp_bg.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-default/mcp_bgsel.png b/ColorThemes/Ultraschall_2/black-mcp-default/mcp_bgsel.png new file mode 100644 index 0000000..fce45f4 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-default/mcp_bgsel.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-default/mcp_env.png b/ColorThemes/Ultraschall_2/black-mcp-default/mcp_env.png new file mode 100644 index 0000000..4c0287e Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-default/mcp_env.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-default/mcp_extmixbg2.png b/ColorThemes/Ultraschall_2/black-mcp-default/mcp_extmixbg2.png new file mode 100644 index 0000000..5c72ea6 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-default/mcp_extmixbg2.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-default/mcp_fcomp_off.png b/ColorThemes/Ultraschall_2/black-mcp-default/mcp_fcomp_off.png new file mode 100644 index 0000000..9df5253 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-default/mcp_fcomp_off.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-default/mcp_fcomp_tiny.png b/ColorThemes/Ultraschall_2/black-mcp-default/mcp_fcomp_tiny.png new file mode 100644 index 0000000..49c0d2e Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-default/mcp_fcomp_tiny.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-default/mcp_folder_last.png b/ColorThemes/Ultraschall_2/black-mcp-default/mcp_folder_last.png new file mode 100644 index 0000000..619fb89 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-default/mcp_folder_last.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-default/mcp_fx_empty.png b/ColorThemes/Ultraschall_2/black-mcp-default/mcp_fx_empty.png new file mode 100644 index 0000000..f2edac6 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-default/mcp_fx_empty.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-default/mcp_fx_in_empty.png b/ColorThemes/Ultraschall_2/black-mcp-default/mcp_fx_in_empty.png new file mode 100644 index 0000000..fa97e8b Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-default/mcp_fx_in_empty.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-default/mcp_fx_norm_white.png b/ColorThemes/Ultraschall_2/black-mcp-default/mcp_fx_norm_white.png new file mode 100644 index 0000000..0e65518 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-default/mcp_fx_norm_white.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-default/mcp_mainbg.png b/ColorThemes/Ultraschall_2/black-mcp-default/mcp_mainbg.png new file mode 100644 index 0000000..cc43869 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-default/mcp_mainbg.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-default/mcp_mainbgsel.png b/ColorThemes/Ultraschall_2/black-mcp-default/mcp_mainbgsel.png new file mode 100644 index 0000000..cc43869 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-default/mcp_mainbgsel.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-default/mcp_mainbgsel_old.png b/ColorThemes/Ultraschall_2/black-mcp-default/mcp_mainbgsel_old.png new file mode 100644 index 0000000..d355989 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-default/mcp_mainbgsel_old.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-default/mcp_monitor_off.png b/ColorThemes/Ultraschall_2/black-mcp-default/mcp_monitor_off.png new file mode 100644 index 0000000..2c67a00 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-default/mcp_monitor_off.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-default/mcp_mute_off.png b/ColorThemes/Ultraschall_2/black-mcp-default/mcp_mute_off.png new file mode 100644 index 0000000..03b7d1a Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-default/mcp_mute_off.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-default/mcp_mute_on.png b/ColorThemes/Ultraschall_2/black-mcp-default/mcp_mute_on.png new file mode 100644 index 0000000..988a3cd Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-default/mcp_mute_on.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-default/mcp_pan_knob_large.png b/ColorThemes/Ultraschall_2/black-mcp-default/mcp_pan_knob_large.png new file mode 100644 index 0000000..174c072 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-default/mcp_pan_knob_large.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-default/mcp_pan_knob_small.png b/ColorThemes/Ultraschall_2/black-mcp-default/mcp_pan_knob_small.png new file mode 100644 index 0000000..1ed933c Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-default/mcp_pan_knob_small.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-default/mcp_pan_label.png b/ColorThemes/Ultraschall_2/black-mcp-default/mcp_pan_label.png new file mode 100644 index 0000000..5474bec Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-default/mcp_pan_label.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-default/mcp_phase_norm.png b/ColorThemes/Ultraschall_2/black-mcp-default/mcp_phase_norm.png new file mode 100644 index 0000000..dfd5076 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-default/mcp_phase_norm.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-default/mcp_recarm_auto.png b/ColorThemes/Ultraschall_2/black-mcp-default/mcp_recarm_auto.png new file mode 100644 index 0000000..186f213 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-default/mcp_recarm_auto.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-default/mcp_recarm_auto_on.png b/ColorThemes/Ultraschall_2/black-mcp-default/mcp_recarm_auto_on.png new file mode 100644 index 0000000..619b56d Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-default/mcp_recarm_auto_on.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-default/mcp_recarm_off.png b/ColorThemes/Ultraschall_2/black-mcp-default/mcp_recarm_off.png new file mode 100644 index 0000000..a41d302 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-default/mcp_recarm_off.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-default/mcp_recarm_on.png b/ColorThemes/Ultraschall_2/black-mcp-default/mcp_recarm_on.png new file mode 100644 index 0000000..6b51698 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-default/mcp_recarm_on.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-default/mcp_recmode_in.png b/ColorThemes/Ultraschall_2/black-mcp-default/mcp_recmode_in.png new file mode 100644 index 0000000..5d455d5 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-default/mcp_recmode_in.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-default/mcp_recmode_off.png b/ColorThemes/Ultraschall_2/black-mcp-default/mcp_recmode_off.png new file mode 100644 index 0000000..5d41c4d Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-default/mcp_recmode_off.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-default/mcp_recmode_out.png b/ColorThemes/Ultraschall_2/black-mcp-default/mcp_recmode_out.png new file mode 100644 index 0000000..9ae645f Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-default/mcp_recmode_out.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-default/mcp_solo_off.png b/ColorThemes/Ultraschall_2/black-mcp-default/mcp_solo_off.png new file mode 100644 index 0000000..63210f4 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-default/mcp_solo_off.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-default/mcp_solo_on.png b/ColorThemes/Ultraschall_2/black-mcp-default/mcp_solo_on.png new file mode 100644 index 0000000..0a9e163 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-default/mcp_solo_on.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-default/mcp_solodefeat_on.png b/ColorThemes/Ultraschall_2/black-mcp-default/mcp_solodefeat_on.png new file mode 100644 index 0000000..55d149a Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-default/mcp_solodefeat_on.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-default/mcp_stereo.png b/ColorThemes/Ultraschall_2/black-mcp-default/mcp_stereo.png new file mode 100644 index 0000000..b66daba Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-default/mcp_stereo.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-default/mcp_vol_label.png b/ColorThemes/Ultraschall_2/black-mcp-default/mcp_vol_label.png new file mode 100644 index 0000000..2dfaf64 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-default/mcp_vol_label.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-default/mcp_volbg.png b/ColorThemes/Ultraschall_2/black-mcp-default/mcp_volbg.png new file mode 100644 index 0000000..42cfff3 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-default/mcp_volbg.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-default/mcp_volthumb-Recovered.png b/ColorThemes/Ultraschall_2/black-mcp-default/mcp_volthumb-Recovered.png new file mode 100644 index 0000000..e5c00a9 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-default/mcp_volthumb-Recovered.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-default/mcp_volthumb.png b/ColorThemes/Ultraschall_2/black-mcp-default/mcp_volthumb.png new file mode 100644 index 0000000..fab4384 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-default/mcp_volthumb.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-default/mcp_volthumb2.png b/ColorThemes/Ultraschall_2/black-mcp-default/mcp_volthumb2.png new file mode 100644 index 0000000..d3dd750 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-default/mcp_volthumb2.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-default/mcp_volthumb_white.png b/ColorThemes/Ultraschall_2/black-mcp-default/mcp_volthumb_white.png new file mode 100644 index 0000000..d79b8cb Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-default/mcp_volthumb_white.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-default/mcp_wid_label.png b/ColorThemes/Ultraschall_2/black-mcp-default/mcp_wid_label.png new file mode 100644 index 0000000..e30c1dc Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-default/mcp_wid_label.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-default/mcp_width_knob_large.png b/ColorThemes/Ultraschall_2/black-mcp-default/mcp_width_knob_large.png new file mode 100644 index 0000000..a8761e4 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-default/mcp_width_knob_large.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-default/mcp_width_knob_small.png b/ColorThemes/Ultraschall_2/black-mcp-default/mcp_width_knob_small.png new file mode 100644 index 0000000..d6eb321 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-default/mcp_width_knob_small.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-default/meter_bg_mcp.png b/ColorThemes/Ultraschall_2/black-mcp-default/meter_bg_mcp.png new file mode 100644 index 0000000..bca8dc1 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-default/meter_bg_mcp.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-default/meter_bg_mcp2.png b/ColorThemes/Ultraschall_2/black-mcp-default/meter_bg_mcp2.png new file mode 100644 index 0000000..5bf2aa1 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-default/meter_bg_mcp2.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-default/meter_bg_mcp_master.png b/ColorThemes/Ultraschall_2/black-mcp-default/meter_bg_mcp_master.png new file mode 100644 index 0000000..f04b00b Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-default/meter_bg_mcp_master.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-default/meter_bg_v2.png b/ColorThemes/Ultraschall_2/black-mcp-default/meter_bg_v2.png new file mode 100644 index 0000000..8ffa355 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-default/meter_bg_v2.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-default/meter_strip_v.png b/ColorThemes/Ultraschall_2/black-mcp-default/meter_strip_v.png new file mode 100644 index 0000000..f9be9bf Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-default/meter_strip_v.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-default/meter_strip_v__.png b/ColorThemes/Ultraschall_2/black-mcp-default/meter_strip_v__.png new file mode 100644 index 0000000..df02955 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-default/meter_strip_v__.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-default/meter_strip_v_old.png b/ColorThemes/Ultraschall_2/black-mcp-default/meter_strip_v_old.png new file mode 100644 index 0000000..eeae1bb Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-default/meter_strip_v_old.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-default/mixer_menu.png b/ColorThemes/Ultraschall_2/black-mcp-default/mixer_menu.png new file mode 100644 index 0000000..4efa1c1 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-default/mixer_menu.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-default/tcp_pan_label.png b/ColorThemes/Ultraschall_2/black-mcp-default/tcp_pan_label.png new file mode 100644 index 0000000..d978a53 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-default/tcp_pan_label.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-default/track_fx_empty.png b/ColorThemes/Ultraschall_2/black-mcp-default/track_fx_empty.png new file mode 100644 index 0000000..c852d49 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-default/track_fx_empty.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-default/track_fxempty_v.png b/ColorThemes/Ultraschall_2/black-mcp-default/track_fxempty_v.png new file mode 100644 index 0000000..4e89115 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-default/track_fxempty_v.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-default/track_fxon_v_white.png b/ColorThemes/Ultraschall_2/black-mcp-default/track_fxon_v_white.png new file mode 100644 index 0000000..bc7344c Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-default/track_fxon_v_white.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-default/track_stereo.png b/ColorThemes/Ultraschall_2/black-mcp-default/track_stereo.png new file mode 100644 index 0000000..c7bb68c Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-default/track_stereo.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-large/mcp_bg.png b/ColorThemes/Ultraschall_2/black-mcp-large/mcp_bg.png new file mode 100644 index 0000000..248d1a2 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-large/mcp_bg.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-large/mcp_bgsel.png b/ColorThemes/Ultraschall_2/black-mcp-large/mcp_bgsel.png new file mode 100644 index 0000000..59702e4 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-large/mcp_bgsel.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-large/mcp_env.png b/ColorThemes/Ultraschall_2/black-mcp-large/mcp_env.png new file mode 100644 index 0000000..e547676 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-large/mcp_env.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-large/mcp_env_latch.png b/ColorThemes/Ultraschall_2/black-mcp-large/mcp_env_latch.png new file mode 100644 index 0000000..2f81a2f Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-large/mcp_env_latch.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-large/mcp_env_read.png b/ColorThemes/Ultraschall_2/black-mcp-large/mcp_env_read.png new file mode 100644 index 0000000..5692c61 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-large/mcp_env_read.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-large/mcp_env_touch.png b/ColorThemes/Ultraschall_2/black-mcp-large/mcp_env_touch.png new file mode 100644 index 0000000..dfdf610 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-large/mcp_env_touch.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-large/mcp_env_write.png b/ColorThemes/Ultraschall_2/black-mcp-large/mcp_env_write.png new file mode 100644 index 0000000..6debb04 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-large/mcp_env_write.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-large/mcp_extmixbg.png b/ColorThemes/Ultraschall_2/black-mcp-large/mcp_extmixbg.png new file mode 100644 index 0000000..5c72ea6 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-large/mcp_extmixbg.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-large/mcp_fcomp_off.png b/ColorThemes/Ultraschall_2/black-mcp-large/mcp_fcomp_off.png new file mode 100644 index 0000000..9df5253 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-large/mcp_fcomp_off.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-large/mcp_fcomp_tiny.png b/ColorThemes/Ultraschall_2/black-mcp-large/mcp_fcomp_tiny.png new file mode 100644 index 0000000..49c0d2e Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-large/mcp_fcomp_tiny.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-large/mcp_folder_last.png b/ColorThemes/Ultraschall_2/black-mcp-large/mcp_folder_last.png new file mode 100644 index 0000000..619fb89 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-large/mcp_folder_last.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-large/mcp_fx_empty.png b/ColorThemes/Ultraschall_2/black-mcp-large/mcp_fx_empty.png new file mode 100644 index 0000000..f2edac6 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-large/mcp_fx_empty.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-large/mcp_fx_in_empty.png b/ColorThemes/Ultraschall_2/black-mcp-large/mcp_fx_in_empty.png new file mode 100644 index 0000000..0a7a8e7 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-large/mcp_fx_in_empty.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-large/mcp_fx_in_norm.png b/ColorThemes/Ultraschall_2/black-mcp-large/mcp_fx_in_norm.png new file mode 100644 index 0000000..282fcb8 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-large/mcp_fx_in_norm.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-large/mcp_fx_norm.png b/ColorThemes/Ultraschall_2/black-mcp-large/mcp_fx_norm.png new file mode 100644 index 0000000..1c6a537 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-large/mcp_fx_norm.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-large/mcp_io.png b/ColorThemes/Ultraschall_2/black-mcp-large/mcp_io.png new file mode 100644 index 0000000..6f2a646 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-large/mcp_io.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-large/mcp_io_dis.png b/ColorThemes/Ultraschall_2/black-mcp-large/mcp_io_dis.png new file mode 100644 index 0000000..86e619a Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-large/mcp_io_dis.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-large/mcp_io_r.png b/ColorThemes/Ultraschall_2/black-mcp-large/mcp_io_r.png new file mode 100644 index 0000000..1f512dc Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-large/mcp_io_r.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-large/mcp_io_r_dis.png b/ColorThemes/Ultraschall_2/black-mcp-large/mcp_io_r_dis.png new file mode 100644 index 0000000..a1228a6 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-large/mcp_io_r_dis.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-large/mcp_io_s.png b/ColorThemes/Ultraschall_2/black-mcp-large/mcp_io_s.png new file mode 100644 index 0000000..c069cbf Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-large/mcp_io_s.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-large/mcp_io_s_dis.png b/ColorThemes/Ultraschall_2/black-mcp-large/mcp_io_s_dis.png new file mode 100644 index 0000000..444d464 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-large/mcp_io_s_dis.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-large/mcp_io_s_r.png b/ColorThemes/Ultraschall_2/black-mcp-large/mcp_io_s_r.png new file mode 100644 index 0000000..b3d3c54 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-large/mcp_io_s_r.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-large/mcp_io_s_r_dis.png b/ColorThemes/Ultraschall_2/black-mcp-large/mcp_io_s_r_dis.png new file mode 100644 index 0000000..03cb690 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-large/mcp_io_s_r_dis.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-large/mcp_master_pan_label.png b/ColorThemes/Ultraschall_2/black-mcp-large/mcp_master_pan_label.png new file mode 100644 index 0000000..adebe94 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-large/mcp_master_pan_label.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-large/mcp_monitor_auto.png b/ColorThemes/Ultraschall_2/black-mcp-large/mcp_monitor_auto.png new file mode 100644 index 0000000..fdaafb0 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-large/mcp_monitor_auto.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-large/mcp_monitor_off.png b/ColorThemes/Ultraschall_2/black-mcp-large/mcp_monitor_off.png new file mode 100644 index 0000000..6d85b82 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-large/mcp_monitor_off.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-large/mcp_monitor_on.png b/ColorThemes/Ultraschall_2/black-mcp-large/mcp_monitor_on.png new file mode 100644 index 0000000..8877288 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-large/mcp_monitor_on.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-large/mcp_mono.png b/ColorThemes/Ultraschall_2/black-mcp-large/mcp_mono.png new file mode 100644 index 0000000..495b762 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-large/mcp_mono.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-large/mcp_mute_off.png b/ColorThemes/Ultraschall_2/black-mcp-large/mcp_mute_off.png new file mode 100644 index 0000000..99439fd Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-large/mcp_mute_off.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-large/mcp_mute_on.png b/ColorThemes/Ultraschall_2/black-mcp-large/mcp_mute_on.png new file mode 100644 index 0000000..419140c Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-large/mcp_mute_on.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-large/mcp_pan_knob_small.png b/ColorThemes/Ultraschall_2/black-mcp-large/mcp_pan_knob_small.png new file mode 100644 index 0000000..d795c51 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-large/mcp_pan_knob_small.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-large/mcp_pan_label.png b/ColorThemes/Ultraschall_2/black-mcp-large/mcp_pan_label.png new file mode 100644 index 0000000..adebe94 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-large/mcp_pan_label.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-large/mcp_phase_norm.png b/ColorThemes/Ultraschall_2/black-mcp-large/mcp_phase_norm.png new file mode 100644 index 0000000..cfe5c9d Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-large/mcp_phase_norm.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-large/mcp_recarm_auto.png b/ColorThemes/Ultraschall_2/black-mcp-large/mcp_recarm_auto.png new file mode 100644 index 0000000..186f213 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-large/mcp_recarm_auto.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-large/mcp_recarm_auto_on.png b/ColorThemes/Ultraschall_2/black-mcp-large/mcp_recarm_auto_on.png new file mode 100644 index 0000000..619b56d Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-large/mcp_recarm_auto_on.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-large/mcp_recarm_off.png b/ColorThemes/Ultraschall_2/black-mcp-large/mcp_recarm_off.png new file mode 100644 index 0000000..a41d302 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-large/mcp_recarm_off.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-large/mcp_recarm_on.png b/ColorThemes/Ultraschall_2/black-mcp-large/mcp_recarm_on.png new file mode 100644 index 0000000..6b51698 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-large/mcp_recarm_on.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-large/mcp_recinput.png b/ColorThemes/Ultraschall_2/black-mcp-large/mcp_recinput.png new file mode 100644 index 0000000..891b497 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-large/mcp_recinput.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-large/mcp_recmode_in.png b/ColorThemes/Ultraschall_2/black-mcp-large/mcp_recmode_in.png new file mode 100644 index 0000000..400aec9 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-large/mcp_recmode_in.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-large/mcp_recmode_off.png b/ColorThemes/Ultraschall_2/black-mcp-large/mcp_recmode_off.png new file mode 100644 index 0000000..e7bb17c Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-large/mcp_recmode_off.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-large/mcp_recmode_out.png b/ColorThemes/Ultraschall_2/black-mcp-large/mcp_recmode_out.png new file mode 100644 index 0000000..bd0aedf Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-large/mcp_recmode_out.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-large/mcp_solo_off.png b/ColorThemes/Ultraschall_2/black-mcp-large/mcp_solo_off.png new file mode 100644 index 0000000..b9a52a4 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-large/mcp_solo_off.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-large/mcp_solo_on.png b/ColorThemes/Ultraschall_2/black-mcp-large/mcp_solo_on.png new file mode 100644 index 0000000..a0a8d42 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-large/mcp_solo_on.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-large/mcp_solodefeat_on.png b/ColorThemes/Ultraschall_2/black-mcp-large/mcp_solodefeat_on.png new file mode 100644 index 0000000..28e55f8 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-large/mcp_solodefeat_on.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-large/mcp_stereo.png b/ColorThemes/Ultraschall_2/black-mcp-large/mcp_stereo.png new file mode 100644 index 0000000..7f6a7e1 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-large/mcp_stereo.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-large/mcp_vol_label.png b/ColorThemes/Ultraschall_2/black-mcp-large/mcp_vol_label.png new file mode 100644 index 0000000..2dfaf64 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-large/mcp_vol_label.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-large/mcp_volbg.png b/ColorThemes/Ultraschall_2/black-mcp-large/mcp_volbg.png new file mode 100644 index 0000000..2d301c8 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-large/mcp_volbg.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-large/mcp_volthumb.png b/ColorThemes/Ultraschall_2/black-mcp-large/mcp_volthumb.png new file mode 100644 index 0000000..07ea081 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-large/mcp_volthumb.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-large/mcp_wid_label.png b/ColorThemes/Ultraschall_2/black-mcp-large/mcp_wid_label.png new file mode 100644 index 0000000..adebe94 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-large/mcp_wid_label.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-large/mcp_width_knob_small.png b/ColorThemes/Ultraschall_2/black-mcp-large/mcp_width_knob_small.png new file mode 100644 index 0000000..2f49c2b Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-large/mcp_width_knob_small.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-large/meter_bg_mcp.png b/ColorThemes/Ultraschall_2/black-mcp-large/meter_bg_mcp.png new file mode 100644 index 0000000..5750919 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-large/meter_bg_mcp.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-large/meter_bg_v.png b/ColorThemes/Ultraschall_2/black-mcp-large/meter_bg_v.png new file mode 100644 index 0000000..b9491bf Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-large/meter_bg_v.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-large/meter_strip_v.png b/ColorThemes/Ultraschall_2/black-mcp-large/meter_strip_v.png new file mode 100644 index 0000000..e1040c7 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-large/meter_strip_v.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-large/track_fxempty_v.png b/ColorThemes/Ultraschall_2/black-mcp-large/track_fxempty_v.png new file mode 100644 index 0000000..4e89115 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-large/track_fxempty_v.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-large/track_fxon_v.png b/ColorThemes/Ultraschall_2/black-mcp-large/track_fxon_v.png new file mode 100644 index 0000000..c099f10 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-large/track_fxon_v.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-narrow/mcp_bg.png b/ColorThemes/Ultraschall_2/black-mcp-narrow/mcp_bg.png new file mode 100644 index 0000000..d4d669c Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-narrow/mcp_bg.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-narrow/mcp_bgsel.png b/ColorThemes/Ultraschall_2/black-mcp-narrow/mcp_bgsel.png new file mode 100644 index 0000000..45c80f6 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-narrow/mcp_bgsel.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-narrow/mcp_env.png b/ColorThemes/Ultraschall_2/black-mcp-narrow/mcp_env.png new file mode 100644 index 0000000..3bb4b3e Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-narrow/mcp_env.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-narrow/mcp_fcomp_off.png b/ColorThemes/Ultraschall_2/black-mcp-narrow/mcp_fcomp_off.png new file mode 100644 index 0000000..9df5253 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-narrow/mcp_fcomp_off.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-narrow/mcp_fcomp_tiny.png b/ColorThemes/Ultraschall_2/black-mcp-narrow/mcp_fcomp_tiny.png new file mode 100644 index 0000000..49c0d2e Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-narrow/mcp_fcomp_tiny.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-narrow/mcp_folder_last.png b/ColorThemes/Ultraschall_2/black-mcp-narrow/mcp_folder_last.png new file mode 100644 index 0000000..619fb89 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-narrow/mcp_folder_last.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-narrow/mcp_fx_dis.png b/ColorThemes/Ultraschall_2/black-mcp-narrow/mcp_fx_dis.png new file mode 100644 index 0000000..bf5ee34 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-narrow/mcp_fx_dis.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-narrow/mcp_fx_empty.png b/ColorThemes/Ultraschall_2/black-mcp-narrow/mcp_fx_empty.png new file mode 100644 index 0000000..8866b44 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-narrow/mcp_fx_empty.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-narrow/mcp_fx_norm.png b/ColorThemes/Ultraschall_2/black-mcp-narrow/mcp_fx_norm.png new file mode 100644 index 0000000..6dd5795 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-narrow/mcp_fx_norm.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-narrow/mcp_monitor_off.png b/ColorThemes/Ultraschall_2/black-mcp-narrow/mcp_monitor_off.png new file mode 100644 index 0000000..223e6dd Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-narrow/mcp_monitor_off.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-narrow/mcp_mute_off.png b/ColorThemes/Ultraschall_2/black-mcp-narrow/mcp_mute_off.png new file mode 100644 index 0000000..667eec2 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-narrow/mcp_mute_off.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-narrow/mcp_mute_on.png b/ColorThemes/Ultraschall_2/black-mcp-narrow/mcp_mute_on.png new file mode 100644 index 0000000..988a3cd Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-narrow/mcp_mute_on.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-narrow/mcp_pan_knob_large.png b/ColorThemes/Ultraschall_2/black-mcp-narrow/mcp_pan_knob_large.png new file mode 100644 index 0000000..b1ffeb1 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-narrow/mcp_pan_knob_large.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-narrow/mcp_pan_knob_small.png b/ColorThemes/Ultraschall_2/black-mcp-narrow/mcp_pan_knob_small.png new file mode 100644 index 0000000..946724e Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-narrow/mcp_pan_knob_small.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-narrow/mcp_pan_label.png b/ColorThemes/Ultraschall_2/black-mcp-narrow/mcp_pan_label.png new file mode 100644 index 0000000..adebe94 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-narrow/mcp_pan_label.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-narrow/mcp_phase_norm.png b/ColorThemes/Ultraschall_2/black-mcp-narrow/mcp_phase_norm.png new file mode 100644 index 0000000..98e870d Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-narrow/mcp_phase_norm.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-narrow/mcp_recarm_auto.png b/ColorThemes/Ultraschall_2/black-mcp-narrow/mcp_recarm_auto.png new file mode 100644 index 0000000..bf7e8a8 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-narrow/mcp_recarm_auto.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-narrow/mcp_recarm_auto_on.png b/ColorThemes/Ultraschall_2/black-mcp-narrow/mcp_recarm_auto_on.png new file mode 100644 index 0000000..b4e2697 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-narrow/mcp_recarm_auto_on.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-narrow/mcp_recarm_off.png b/ColorThemes/Ultraschall_2/black-mcp-narrow/mcp_recarm_off.png new file mode 100644 index 0000000..094f46d Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-narrow/mcp_recarm_off.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-narrow/mcp_recarm_on.png b/ColorThemes/Ultraschall_2/black-mcp-narrow/mcp_recarm_on.png new file mode 100644 index 0000000..6ed11ef Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-narrow/mcp_recarm_on.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-narrow/mcp_recmode_in.png b/ColorThemes/Ultraschall_2/black-mcp-narrow/mcp_recmode_in.png new file mode 100644 index 0000000..5d455d5 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-narrow/mcp_recmode_in.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-narrow/mcp_recmode_off.png b/ColorThemes/Ultraschall_2/black-mcp-narrow/mcp_recmode_off.png new file mode 100644 index 0000000..5d41c4d Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-narrow/mcp_recmode_off.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-narrow/mcp_recmode_out.png b/ColorThemes/Ultraschall_2/black-mcp-narrow/mcp_recmode_out.png new file mode 100644 index 0000000..9ae645f Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-narrow/mcp_recmode_out.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-narrow/mcp_solo_off.png b/ColorThemes/Ultraschall_2/black-mcp-narrow/mcp_solo_off.png new file mode 100644 index 0000000..5c73932 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-narrow/mcp_solo_off.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-narrow/mcp_solo_on.png b/ColorThemes/Ultraschall_2/black-mcp-narrow/mcp_solo_on.png new file mode 100644 index 0000000..0a9e163 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-narrow/mcp_solo_on.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-narrow/mcp_vol_label.png b/ColorThemes/Ultraschall_2/black-mcp-narrow/mcp_vol_label.png new file mode 100644 index 0000000..2dfaf64 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-narrow/mcp_vol_label.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-narrow/mcp_volbg.png b/ColorThemes/Ultraschall_2/black-mcp-narrow/mcp_volbg.png new file mode 100644 index 0000000..2d301c8 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-narrow/mcp_volbg.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-narrow/mcp_volthumb.png b/ColorThemes/Ultraschall_2/black-mcp-narrow/mcp_volthumb.png new file mode 100644 index 0000000..07ea081 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-narrow/mcp_volthumb.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-narrow/mcp_wid_label.png b/ColorThemes/Ultraschall_2/black-mcp-narrow/mcp_wid_label.png new file mode 100644 index 0000000..adebe94 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-narrow/mcp_wid_label.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-narrow/mcp_width_knob_small.png b/ColorThemes/Ultraschall_2/black-mcp-narrow/mcp_width_knob_small.png new file mode 100644 index 0000000..ecf6a8e Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-narrow/mcp_width_knob_small.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-narrow/meter_bg_mcp.png b/ColorThemes/Ultraschall_2/black-mcp-narrow/meter_bg_mcp.png new file mode 100644 index 0000000..ab3edd2 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-narrow/meter_bg_mcp.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-narrow/meter_bg_v.png b/ColorThemes/Ultraschall_2/black-mcp-narrow/meter_bg_v.png new file mode 100644 index 0000000..dddfb4f Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-narrow/meter_bg_v.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-narrow/meter_strip_v.png b/ColorThemes/Ultraschall_2/black-mcp-narrow/meter_strip_v.png new file mode 100644 index 0000000..95a74fd Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-narrow/meter_strip_v.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-narrow/track_fx_norm.png b/ColorThemes/Ultraschall_2/black-mcp-narrow/track_fx_norm.png new file mode 100644 index 0000000..5df8827 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-narrow/track_fx_norm.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-narrow/track_fxempty_v.png b/ColorThemes/Ultraschall_2/black-mcp-narrow/track_fxempty_v.png new file mode 100644 index 0000000..666cdbb Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-narrow/track_fxempty_v.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-narrow/track_fxoff_v.png b/ColorThemes/Ultraschall_2/black-mcp-narrow/track_fxoff_v.png new file mode 100644 index 0000000..895a95a Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-narrow/track_fxoff_v.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-narrow/track_fxon_v.png b/ColorThemes/Ultraschall_2/black-mcp-narrow/track_fxon_v.png new file mode 100644 index 0000000..ceded2c Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-narrow/track_fxon_v.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-rec-meter/global_bypass.png b/ColorThemes/Ultraschall_2/black-mcp-rec-meter/global_bypass.png new file mode 100644 index 0000000..354c143 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-rec-meter/global_bypass.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-rec-meter/global_latch.png b/ColorThemes/Ultraschall_2/black-mcp-rec-meter/global_latch.png new file mode 100644 index 0000000..cd63166 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-rec-meter/global_latch.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-rec-meter/global_off.png b/ColorThemes/Ultraschall_2/black-mcp-rec-meter/global_off.png new file mode 100644 index 0000000..d5bc9fa Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-rec-meter/global_off.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-rec-meter/global_read.png b/ColorThemes/Ultraschall_2/black-mcp-rec-meter/global_read.png new file mode 100644 index 0000000..2b7733f Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-rec-meter/global_read.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-rec-meter/global_touch.png b/ColorThemes/Ultraschall_2/black-mcp-rec-meter/global_touch.png new file mode 100644 index 0000000..324a0d7 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-rec-meter/global_touch.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-rec-meter/global_trim.png b/ColorThemes/Ultraschall_2/black-mcp-rec-meter/global_trim.png new file mode 100644 index 0000000..062a685 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-rec-meter/global_trim.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-rec-meter/global_write.png b/ColorThemes/Ultraschall_2/black-mcp-rec-meter/global_write.png new file mode 100644 index 0000000..17da73e Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-rec-meter/global_write.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-rec-meter/mcp_bg.png b/ColorThemes/Ultraschall_2/black-mcp-rec-meter/mcp_bg.png new file mode 100644 index 0000000..afd323c Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-rec-meter/mcp_bg.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-rec-meter/mcp_bgsel.png b/ColorThemes/Ultraschall_2/black-mcp-rec-meter/mcp_bgsel.png new file mode 100644 index 0000000..91e83ff Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-rec-meter/mcp_bgsel.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-rec-meter/mcp_fcomp_off.png b/ColorThemes/Ultraschall_2/black-mcp-rec-meter/mcp_fcomp_off.png new file mode 100644 index 0000000..318d2f0 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-rec-meter/mcp_fcomp_off.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-rec-meter/mcp_fcomp_tiny.png b/ColorThemes/Ultraschall_2/black-mcp-rec-meter/mcp_fcomp_tiny.png new file mode 100644 index 0000000..952a5c1 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-rec-meter/mcp_fcomp_tiny.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-rec-meter/mcp_folder_last.png b/ColorThemes/Ultraschall_2/black-mcp-rec-meter/mcp_folder_last.png new file mode 100644 index 0000000..08bb0f5 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-rec-meter/mcp_folder_last.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-rec-meter/mcp_io.png b/ColorThemes/Ultraschall_2/black-mcp-rec-meter/mcp_io.png new file mode 100644 index 0000000..5487c78 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-rec-meter/mcp_io.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-rec-meter/mcp_io_dis.png b/ColorThemes/Ultraschall_2/black-mcp-rec-meter/mcp_io_dis.png new file mode 100644 index 0000000..2cabc93 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-rec-meter/mcp_io_dis.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-rec-meter/mcp_io_r.png b/ColorThemes/Ultraschall_2/black-mcp-rec-meter/mcp_io_r.png new file mode 100644 index 0000000..5487c78 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-rec-meter/mcp_io_r.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-rec-meter/mcp_io_r_dis.png b/ColorThemes/Ultraschall_2/black-mcp-rec-meter/mcp_io_r_dis.png new file mode 100644 index 0000000..5487c78 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-rec-meter/mcp_io_r_dis.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-rec-meter/mcp_io_s.png b/ColorThemes/Ultraschall_2/black-mcp-rec-meter/mcp_io_s.png new file mode 100644 index 0000000..5487c78 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-rec-meter/mcp_io_s.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-rec-meter/mcp_io_s_dis.png b/ColorThemes/Ultraschall_2/black-mcp-rec-meter/mcp_io_s_dis.png new file mode 100644 index 0000000..5487c78 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-rec-meter/mcp_io_s_dis.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-rec-meter/mcp_io_s_r.png b/ColorThemes/Ultraschall_2/black-mcp-rec-meter/mcp_io_s_r.png new file mode 100644 index 0000000..5487c78 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-rec-meter/mcp_io_s_r.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-rec-meter/mcp_io_s_r_dis.png b/ColorThemes/Ultraschall_2/black-mcp-rec-meter/mcp_io_s_r_dis.png new file mode 100644 index 0000000..5487c78 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-rec-meter/mcp_io_s_r_dis.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-rec-meter/mcp_mute_off.png b/ColorThemes/Ultraschall_2/black-mcp-rec-meter/mcp_mute_off.png new file mode 100644 index 0000000..667eec2 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-rec-meter/mcp_mute_off.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-rec-meter/mcp_recarm_auto.png b/ColorThemes/Ultraschall_2/black-mcp-rec-meter/mcp_recarm_auto.png new file mode 100644 index 0000000..7b67a30 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-rec-meter/mcp_recarm_auto.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-rec-meter/mcp_recarm_auto_on.png b/ColorThemes/Ultraschall_2/black-mcp-rec-meter/mcp_recarm_auto_on.png new file mode 100644 index 0000000..b84979a Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-rec-meter/mcp_recarm_auto_on.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-rec-meter/mcp_recarm_off.png b/ColorThemes/Ultraschall_2/black-mcp-rec-meter/mcp_recarm_off.png new file mode 100644 index 0000000..095026a Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-rec-meter/mcp_recarm_off.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-rec-meter/mcp_recarm_on.png b/ColorThemes/Ultraschall_2/black-mcp-rec-meter/mcp_recarm_on.png new file mode 100644 index 0000000..1de7a15 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-rec-meter/mcp_recarm_on.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-rec-meter/mcp_solo_off.png b/ColorThemes/Ultraschall_2/black-mcp-rec-meter/mcp_solo_off.png new file mode 100644 index 0000000..5c73932 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-rec-meter/mcp_solo_off.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-rec-meter/mcp_vol_knob_small.png b/ColorThemes/Ultraschall_2/black-mcp-rec-meter/mcp_vol_knob_small.png new file mode 100644 index 0000000..e99840f Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-rec-meter/mcp_vol_knob_small.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-rec-meter/meter_bg_mcp.png b/ColorThemes/Ultraschall_2/black-mcp-rec-meter/meter_bg_mcp.png new file mode 100644 index 0000000..9488a05 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-rec-meter/meter_bg_mcp.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-rec-meter/meter_bg_v.png b/ColorThemes/Ultraschall_2/black-mcp-rec-meter/meter_bg_v.png new file mode 100644 index 0000000..3dbb537 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-rec-meter/meter_bg_v.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-rec-meter/meter_strip_v.png b/ColorThemes/Ultraschall_2/black-mcp-rec-meter/meter_strip_v.png new file mode 100644 index 0000000..6e6f883 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-rec-meter/meter_strip_v.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-rec-meter/transport_bpm.png b/ColorThemes/Ultraschall_2/black-mcp-rec-meter/transport_bpm.png new file mode 100644 index 0000000..8cae67c Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-rec-meter/transport_bpm.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-rec-meter/transport_bpm_bg.png b/ColorThemes/Ultraschall_2/black-mcp-rec-meter/transport_bpm_bg.png new file mode 100644 index 0000000..88ced5c Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-rec-meter/transport_bpm_bg.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-rec-meter/transport_end.png b/ColorThemes/Ultraschall_2/black-mcp-rec-meter/transport_end.png new file mode 100644 index 0000000..8a1da89 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-rec-meter/transport_end.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-rec-meter/transport_home.png b/ColorThemes/Ultraschall_2/black-mcp-rec-meter/transport_home.png new file mode 100644 index 0000000..d67b010 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-rec-meter/transport_home.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-rec-meter/transport_next.png b/ColorThemes/Ultraschall_2/black-mcp-rec-meter/transport_next.png new file mode 100644 index 0000000..75cd6c4 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-rec-meter/transport_next.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-rec-meter/transport_pause.png b/ColorThemes/Ultraschall_2/black-mcp-rec-meter/transport_pause.png new file mode 100644 index 0000000..ec5a6e5 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-rec-meter/transport_pause.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-rec-meter/transport_pause_on.png b/ColorThemes/Ultraschall_2/black-mcp-rec-meter/transport_pause_on.png new file mode 100644 index 0000000..a0242aa Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-rec-meter/transport_pause_on.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-rec-meter/transport_play.png b/ColorThemes/Ultraschall_2/black-mcp-rec-meter/transport_play.png new file mode 100644 index 0000000..ac75860 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-rec-meter/transport_play.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-rec-meter/transport_play_on.png b/ColorThemes/Ultraschall_2/black-mcp-rec-meter/transport_play_on.png new file mode 100644 index 0000000..d3d1a60 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-rec-meter/transport_play_on.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-rec-meter/transport_play_sync.png b/ColorThemes/Ultraschall_2/black-mcp-rec-meter/transport_play_sync.png new file mode 100644 index 0000000..bf24774 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-rec-meter/transport_play_sync.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-rec-meter/transport_play_sync_on.png b/ColorThemes/Ultraschall_2/black-mcp-rec-meter/transport_play_sync_on.png new file mode 100644 index 0000000..d7022b1 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-rec-meter/transport_play_sync_on.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-rec-meter/transport_previous.png b/ColorThemes/Ultraschall_2/black-mcp-rec-meter/transport_previous.png new file mode 100644 index 0000000..1bb9521 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-rec-meter/transport_previous.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-rec-meter/transport_record _item_on.png b/ColorThemes/Ultraschall_2/black-mcp-rec-meter/transport_record _item_on.png new file mode 100644 index 0000000..930440c Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-rec-meter/transport_record _item_on.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-rec-meter/transport_record.png b/ColorThemes/Ultraschall_2/black-mcp-rec-meter/transport_record.png new file mode 100644 index 0000000..aed2b3f Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-rec-meter/transport_record.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-rec-meter/transport_record_item.png b/ColorThemes/Ultraschall_2/black-mcp-rec-meter/transport_record_item.png new file mode 100644 index 0000000..6e30c5e Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-rec-meter/transport_record_item.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-rec-meter/transport_record_loop.png b/ColorThemes/Ultraschall_2/black-mcp-rec-meter/transport_record_loop.png new file mode 100644 index 0000000..5b023b2 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-rec-meter/transport_record_loop.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-rec-meter/transport_record_loop_on.png b/ColorThemes/Ultraschall_2/black-mcp-rec-meter/transport_record_loop_on.png new file mode 100644 index 0000000..5a2513e Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-rec-meter/transport_record_loop_on.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-rec-meter/transport_record_on.png b/ColorThemes/Ultraschall_2/black-mcp-rec-meter/transport_record_on.png new file mode 100644 index 0000000..39f5035 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-rec-meter/transport_record_on.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-rec-meter/transport_repeat_off.png b/ColorThemes/Ultraschall_2/black-mcp-rec-meter/transport_repeat_off.png new file mode 100644 index 0000000..0bd3251 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-rec-meter/transport_repeat_off.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-rec-meter/transport_repeat_on.png b/ColorThemes/Ultraschall_2/black-mcp-rec-meter/transport_repeat_on.png new file mode 100644 index 0000000..254d43b Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-rec-meter/transport_repeat_on.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-rec-meter/transport_stop.png b/ColorThemes/Ultraschall_2/black-mcp-rec-meter/transport_stop.png new file mode 100644 index 0000000..e982f66 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-rec-meter/transport_stop.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-separator/mcp_bg.png b/ColorThemes/Ultraschall_2/black-mcp-separator/mcp_bg.png new file mode 100644 index 0000000..dbff4b0 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-separator/mcp_bg.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-separator/mcp_bgsel.png b/ColorThemes/Ultraschall_2/black-mcp-separator/mcp_bgsel.png new file mode 100644 index 0000000..4a82d69 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-separator/mcp_bgsel.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-separator/mcp_folder_last.png b/ColorThemes/Ultraschall_2/black-mcp-separator/mcp_folder_last.png new file mode 100644 index 0000000..08bb0f5 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-separator/mcp_folder_last.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-separator/transport_bpm.png b/ColorThemes/Ultraschall_2/black-mcp-separator/transport_bpm.png new file mode 100644 index 0000000..8cae67c Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-separator/transport_bpm.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-separator/transport_bpm_bg.png b/ColorThemes/Ultraschall_2/black-mcp-separator/transport_bpm_bg.png new file mode 100644 index 0000000..88ced5c Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-separator/transport_bpm_bg.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-sidebar/mcp_bg.png b/ColorThemes/Ultraschall_2/black-mcp-sidebar/mcp_bg.png new file mode 100644 index 0000000..3089a68 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-sidebar/mcp_bg.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-sidebar/mcp_bgsel.png b/ColorThemes/Ultraschall_2/black-mcp-sidebar/mcp_bgsel.png new file mode 100644 index 0000000..9949a54 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-sidebar/mcp_bgsel.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-sidebar/mcp_env.png b/ColorThemes/Ultraschall_2/black-mcp-sidebar/mcp_env.png new file mode 100644 index 0000000..4c0287e Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-sidebar/mcp_env.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-sidebar/mcp_extmixbg.png b/ColorThemes/Ultraschall_2/black-mcp-sidebar/mcp_extmixbg.png new file mode 100644 index 0000000..ce24ebc Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-sidebar/mcp_extmixbg.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-sidebar/mcp_fcomp_off.png b/ColorThemes/Ultraschall_2/black-mcp-sidebar/mcp_fcomp_off.png new file mode 100644 index 0000000..9df5253 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-sidebar/mcp_fcomp_off.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-sidebar/mcp_fcomp_tiny.png b/ColorThemes/Ultraschall_2/black-mcp-sidebar/mcp_fcomp_tiny.png new file mode 100644 index 0000000..49c0d2e Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-sidebar/mcp_fcomp_tiny.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-sidebar/mcp_folder_last.png b/ColorThemes/Ultraschall_2/black-mcp-sidebar/mcp_folder_last.png new file mode 100644 index 0000000..619fb89 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-sidebar/mcp_folder_last.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-sidebar/mcp_fx_empty.png b/ColorThemes/Ultraschall_2/black-mcp-sidebar/mcp_fx_empty.png new file mode 100644 index 0000000..f2edac6 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-sidebar/mcp_fx_empty.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-sidebar/mcp_fx_in_empty.png b/ColorThemes/Ultraschall_2/black-mcp-sidebar/mcp_fx_in_empty.png new file mode 100644 index 0000000..344dbfd Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-sidebar/mcp_fx_in_empty.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-sidebar/mcp_fx_in_norm.png b/ColorThemes/Ultraschall_2/black-mcp-sidebar/mcp_fx_in_norm.png new file mode 100644 index 0000000..a57f2b7 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-sidebar/mcp_fx_in_norm.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-sidebar/mcp_monitor_off.png b/ColorThemes/Ultraschall_2/black-mcp-sidebar/mcp_monitor_off.png new file mode 100644 index 0000000..2c67a00 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-sidebar/mcp_monitor_off.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-sidebar/mcp_mute_off.png b/ColorThemes/Ultraschall_2/black-mcp-sidebar/mcp_mute_off.png new file mode 100644 index 0000000..03b7d1a Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-sidebar/mcp_mute_off.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-sidebar/mcp_mute_on.png b/ColorThemes/Ultraschall_2/black-mcp-sidebar/mcp_mute_on.png new file mode 100644 index 0000000..988a3cd Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-sidebar/mcp_mute_on.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-sidebar/mcp_pan_knob_large.png b/ColorThemes/Ultraschall_2/black-mcp-sidebar/mcp_pan_knob_large.png new file mode 100644 index 0000000..174c072 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-sidebar/mcp_pan_knob_large.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-sidebar/mcp_pan_knob_small.png b/ColorThemes/Ultraschall_2/black-mcp-sidebar/mcp_pan_knob_small.png new file mode 100644 index 0000000..1ed933c Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-sidebar/mcp_pan_knob_small.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-sidebar/mcp_pan_label.png b/ColorThemes/Ultraschall_2/black-mcp-sidebar/mcp_pan_label.png new file mode 100644 index 0000000..5474bec Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-sidebar/mcp_pan_label.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-sidebar/mcp_phase_norm.png b/ColorThemes/Ultraschall_2/black-mcp-sidebar/mcp_phase_norm.png new file mode 100644 index 0000000..dfd5076 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-sidebar/mcp_phase_norm.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-sidebar/mcp_recarm_auto.png b/ColorThemes/Ultraschall_2/black-mcp-sidebar/mcp_recarm_auto.png new file mode 100644 index 0000000..186f213 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-sidebar/mcp_recarm_auto.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-sidebar/mcp_recarm_auto_on.png b/ColorThemes/Ultraschall_2/black-mcp-sidebar/mcp_recarm_auto_on.png new file mode 100644 index 0000000..619b56d Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-sidebar/mcp_recarm_auto_on.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-sidebar/mcp_recarm_off.png b/ColorThemes/Ultraschall_2/black-mcp-sidebar/mcp_recarm_off.png new file mode 100644 index 0000000..a41d302 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-sidebar/mcp_recarm_off.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-sidebar/mcp_recarm_on.png b/ColorThemes/Ultraschall_2/black-mcp-sidebar/mcp_recarm_on.png new file mode 100644 index 0000000..6b51698 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-sidebar/mcp_recarm_on.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-sidebar/mcp_recinput.png b/ColorThemes/Ultraschall_2/black-mcp-sidebar/mcp_recinput.png new file mode 100644 index 0000000..891b497 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-sidebar/mcp_recinput.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-sidebar/mcp_recmode_in.png b/ColorThemes/Ultraschall_2/black-mcp-sidebar/mcp_recmode_in.png new file mode 100644 index 0000000..5d455d5 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-sidebar/mcp_recmode_in.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-sidebar/mcp_recmode_off.png b/ColorThemes/Ultraschall_2/black-mcp-sidebar/mcp_recmode_off.png new file mode 100644 index 0000000..5d41c4d Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-sidebar/mcp_recmode_off.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-sidebar/mcp_recmode_out.png b/ColorThemes/Ultraschall_2/black-mcp-sidebar/mcp_recmode_out.png new file mode 100644 index 0000000..9ae645f Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-sidebar/mcp_recmode_out.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-sidebar/mcp_solo_off.png b/ColorThemes/Ultraschall_2/black-mcp-sidebar/mcp_solo_off.png new file mode 100644 index 0000000..63210f4 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-sidebar/mcp_solo_off.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-sidebar/mcp_solo_on.png b/ColorThemes/Ultraschall_2/black-mcp-sidebar/mcp_solo_on.png new file mode 100644 index 0000000..0a9e163 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-sidebar/mcp_solo_on.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-sidebar/mcp_vol_label.png b/ColorThemes/Ultraschall_2/black-mcp-sidebar/mcp_vol_label.png new file mode 100644 index 0000000..2dfaf64 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-sidebar/mcp_vol_label.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-sidebar/mcp_volbg.png b/ColorThemes/Ultraschall_2/black-mcp-sidebar/mcp_volbg.png new file mode 100644 index 0000000..2d301c8 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-sidebar/mcp_volbg.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-sidebar/mcp_volthumb.png b/ColorThemes/Ultraschall_2/black-mcp-sidebar/mcp_volthumb.png new file mode 100644 index 0000000..07ea081 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-sidebar/mcp_volthumb.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-sidebar/mcp_wid_label.png b/ColorThemes/Ultraschall_2/black-mcp-sidebar/mcp_wid_label.png new file mode 100644 index 0000000..e30c1dc Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-sidebar/mcp_wid_label.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-sidebar/mcp_width_knob_large.png b/ColorThemes/Ultraschall_2/black-mcp-sidebar/mcp_width_knob_large.png new file mode 100644 index 0000000..a8761e4 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-sidebar/mcp_width_knob_large.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-sidebar/mcp_width_knob_small.png b/ColorThemes/Ultraschall_2/black-mcp-sidebar/mcp_width_knob_small.png new file mode 100644 index 0000000..d6eb321 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-sidebar/mcp_width_knob_small.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-sidebar/meter_bg_mcp.png b/ColorThemes/Ultraschall_2/black-mcp-sidebar/meter_bg_mcp.png new file mode 100644 index 0000000..938402e Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-sidebar/meter_bg_mcp.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-sidebar/meter_bg_v.png b/ColorThemes/Ultraschall_2/black-mcp-sidebar/meter_bg_v.png new file mode 100644 index 0000000..05ee346 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-sidebar/meter_bg_v.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-sidebar/meter_strip_v.png b/ColorThemes/Ultraschall_2/black-mcp-sidebar/meter_strip_v.png new file mode 100644 index 0000000..b9f143e Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-sidebar/meter_strip_v.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-sidebar/tcp_pan_label.png b/ColorThemes/Ultraschall_2/black-mcp-sidebar/tcp_pan_label.png new file mode 100644 index 0000000..d978a53 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-sidebar/tcp_pan_label.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-sidebar/tcp_wid_label.png b/ColorThemes/Ultraschall_2/black-mcp-sidebar/tcp_wid_label.png new file mode 100644 index 0000000..c9f451e Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-sidebar/tcp_wid_label.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-sidebar/track_fxempty_v.png b/ColorThemes/Ultraschall_2/black-mcp-sidebar/track_fxempty_v.png new file mode 100644 index 0000000..4e89115 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-sidebar/track_fxempty_v.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-sidebar/track_phase_norm.png b/ColorThemes/Ultraschall_2/black-mcp-sidebar/track_phase_norm.png new file mode 100644 index 0000000..03bdf34 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-sidebar/track_phase_norm.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-small/global_bypass.png b/ColorThemes/Ultraschall_2/black-mcp-small/global_bypass.png new file mode 100644 index 0000000..354c143 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-small/global_bypass.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-small/global_latch.png b/ColorThemes/Ultraschall_2/black-mcp-small/global_latch.png new file mode 100644 index 0000000..cd63166 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-small/global_latch.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-small/global_off.png b/ColorThemes/Ultraschall_2/black-mcp-small/global_off.png new file mode 100644 index 0000000..d5bc9fa Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-small/global_off.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-small/global_read.png b/ColorThemes/Ultraschall_2/black-mcp-small/global_read.png new file mode 100644 index 0000000..2b7733f Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-small/global_read.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-small/global_touch.png b/ColorThemes/Ultraschall_2/black-mcp-small/global_touch.png new file mode 100644 index 0000000..324a0d7 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-small/global_touch.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-small/global_trim.png b/ColorThemes/Ultraschall_2/black-mcp-small/global_trim.png new file mode 100644 index 0000000..062a685 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-small/global_trim.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-small/global_write.png b/ColorThemes/Ultraschall_2/black-mcp-small/global_write.png new file mode 100644 index 0000000..17da73e Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-small/global_write.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-small/mcp_bg.png b/ColorThemes/Ultraschall_2/black-mcp-small/mcp_bg.png new file mode 100644 index 0000000..7ec5ee1 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-small/mcp_bg.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-small/mcp_bgsel.png b/ColorThemes/Ultraschall_2/black-mcp-small/mcp_bgsel.png new file mode 100644 index 0000000..828b163 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-small/mcp_bgsel.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-small/mcp_folder_last.png b/ColorThemes/Ultraschall_2/black-mcp-small/mcp_folder_last.png new file mode 100644 index 0000000..08bb0f5 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-small/mcp_folder_last.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-small/mcp_fx_empty.png b/ColorThemes/Ultraschall_2/black-mcp-small/mcp_fx_empty.png new file mode 100644 index 0000000..5450fc2 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-small/mcp_fx_empty.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-small/mcp_fxempty_v.png b/ColorThemes/Ultraschall_2/black-mcp-small/mcp_fxempty_v.png new file mode 100644 index 0000000..7776993 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-small/mcp_fxempty_v.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-small/mcp_io.png b/ColorThemes/Ultraschall_2/black-mcp-small/mcp_io.png new file mode 100644 index 0000000..5487c78 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-small/mcp_io.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-small/mcp_io_dis.png b/ColorThemes/Ultraschall_2/black-mcp-small/mcp_io_dis.png new file mode 100644 index 0000000..2cabc93 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-small/mcp_io_dis.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-small/mcp_io_r.png b/ColorThemes/Ultraschall_2/black-mcp-small/mcp_io_r.png new file mode 100644 index 0000000..5487c78 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-small/mcp_io_r.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-small/mcp_io_r_dis.png b/ColorThemes/Ultraschall_2/black-mcp-small/mcp_io_r_dis.png new file mode 100644 index 0000000..5487c78 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-small/mcp_io_r_dis.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-small/mcp_io_s.png b/ColorThemes/Ultraschall_2/black-mcp-small/mcp_io_s.png new file mode 100644 index 0000000..5487c78 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-small/mcp_io_s.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-small/mcp_io_s_dis.png b/ColorThemes/Ultraschall_2/black-mcp-small/mcp_io_s_dis.png new file mode 100644 index 0000000..5487c78 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-small/mcp_io_s_dis.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-small/mcp_io_s_r.png b/ColorThemes/Ultraschall_2/black-mcp-small/mcp_io_s_r.png new file mode 100644 index 0000000..5487c78 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-small/mcp_io_s_r.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-small/mcp_io_s_r_dis.png b/ColorThemes/Ultraschall_2/black-mcp-small/mcp_io_s_r_dis.png new file mode 100644 index 0000000..5487c78 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-small/mcp_io_s_r_dis.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-small/mcp_mute_off.png b/ColorThemes/Ultraschall_2/black-mcp-small/mcp_mute_off.png new file mode 100644 index 0000000..667eec2 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-small/mcp_mute_off.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-small/mcp_mute_on.png b/ColorThemes/Ultraschall_2/black-mcp-small/mcp_mute_on.png new file mode 100644 index 0000000..988a3cd Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-small/mcp_mute_on.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-small/mcp_recarm_auto.png b/ColorThemes/Ultraschall_2/black-mcp-small/mcp_recarm_auto.png new file mode 100644 index 0000000..7b67a30 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-small/mcp_recarm_auto.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-small/mcp_recarm_auto_on.png b/ColorThemes/Ultraschall_2/black-mcp-small/mcp_recarm_auto_on.png new file mode 100644 index 0000000..b84979a Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-small/mcp_recarm_auto_on.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-small/mcp_recarm_off.png b/ColorThemes/Ultraschall_2/black-mcp-small/mcp_recarm_off.png new file mode 100644 index 0000000..095026a Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-small/mcp_recarm_off.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-small/mcp_recarm_on.png b/ColorThemes/Ultraschall_2/black-mcp-small/mcp_recarm_on.png new file mode 100644 index 0000000..1de7a15 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-small/mcp_recarm_on.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-small/mcp_solo_off.png b/ColorThemes/Ultraschall_2/black-mcp-small/mcp_solo_off.png new file mode 100644 index 0000000..5c73932 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-small/mcp_solo_off.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-small/mcp_solo_on.png b/ColorThemes/Ultraschall_2/black-mcp-small/mcp_solo_on.png new file mode 100644 index 0000000..0a9e163 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-small/mcp_solo_on.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-small/mcp_vol_knob_small.png b/ColorThemes/Ultraschall_2/black-mcp-small/mcp_vol_knob_small.png new file mode 100644 index 0000000..8615ec3 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-small/mcp_vol_knob_small.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-small/mcp_vol_knob_small.png.old b/ColorThemes/Ultraschall_2/black-mcp-small/mcp_vol_knob_small.png.old new file mode 100644 index 0000000..e99840f Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-small/mcp_vol_knob_small.png.old differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-small/meter_bg_mcp.png b/ColorThemes/Ultraschall_2/black-mcp-small/meter_bg_mcp.png new file mode 100644 index 0000000..9488a05 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-small/meter_bg_mcp.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-small/meter_bg_v.png b/ColorThemes/Ultraschall_2/black-mcp-small/meter_bg_v.png new file mode 100644 index 0000000..3dbb537 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-small/meter_bg_v.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-small/meter_strip_v.png b/ColorThemes/Ultraschall_2/black-mcp-small/meter_strip_v.png new file mode 100644 index 0000000..37edaf1 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-small/meter_strip_v.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-small/transport_bpm.png b/ColorThemes/Ultraschall_2/black-mcp-small/transport_bpm.png new file mode 100644 index 0000000..8cae67c Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-small/transport_bpm.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-small/transport_bpm_bg.png b/ColorThemes/Ultraschall_2/black-mcp-small/transport_bpm_bg.png new file mode 100644 index 0000000..88ced5c Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-small/transport_bpm_bg.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-small/transport_end.png b/ColorThemes/Ultraschall_2/black-mcp-small/transport_end.png new file mode 100644 index 0000000..d9b319e Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-small/transport_end.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-small/transport_home.png b/ColorThemes/Ultraschall_2/black-mcp-small/transport_home.png new file mode 100644 index 0000000..d67b010 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-small/transport_home.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-small/transport_next.png b/ColorThemes/Ultraschall_2/black-mcp-small/transport_next.png new file mode 100644 index 0000000..75cd6c4 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-small/transport_next.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-small/transport_pause.png b/ColorThemes/Ultraschall_2/black-mcp-small/transport_pause.png new file mode 100644 index 0000000..ec5a6e5 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-small/transport_pause.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-small/transport_pause_on.png b/ColorThemes/Ultraschall_2/black-mcp-small/transport_pause_on.png new file mode 100644 index 0000000..a0242aa Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-small/transport_pause_on.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-small/transport_play.png b/ColorThemes/Ultraschall_2/black-mcp-small/transport_play.png new file mode 100644 index 0000000..ac75860 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-small/transport_play.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-small/transport_play_on.png b/ColorThemes/Ultraschall_2/black-mcp-small/transport_play_on.png new file mode 100644 index 0000000..d3d1a60 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-small/transport_play_on.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-small/transport_play_sync.png b/ColorThemes/Ultraschall_2/black-mcp-small/transport_play_sync.png new file mode 100644 index 0000000..bf24774 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-small/transport_play_sync.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-small/transport_play_sync_on.png b/ColorThemes/Ultraschall_2/black-mcp-small/transport_play_sync_on.png new file mode 100644 index 0000000..d7022b1 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-small/transport_play_sync_on.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-small/transport_previous.png b/ColorThemes/Ultraschall_2/black-mcp-small/transport_previous.png new file mode 100644 index 0000000..1bb9521 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-small/transport_previous.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-small/transport_record _item_on.png b/ColorThemes/Ultraschall_2/black-mcp-small/transport_record _item_on.png new file mode 100644 index 0000000..930440c Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-small/transport_record _item_on.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-small/transport_record.png b/ColorThemes/Ultraschall_2/black-mcp-small/transport_record.png new file mode 100644 index 0000000..aed2b3f Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-small/transport_record.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-small/transport_record_item.png b/ColorThemes/Ultraschall_2/black-mcp-small/transport_record_item.png new file mode 100644 index 0000000..6e30c5e Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-small/transport_record_item.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-small/transport_record_loop.png b/ColorThemes/Ultraschall_2/black-mcp-small/transport_record_loop.png new file mode 100644 index 0000000..5b023b2 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-small/transport_record_loop.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-small/transport_record_loop_on.png b/ColorThemes/Ultraschall_2/black-mcp-small/transport_record_loop_on.png new file mode 100644 index 0000000..5a2513e Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-small/transport_record_loop_on.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-small/transport_record_on.png b/ColorThemes/Ultraschall_2/black-mcp-small/transport_record_on.png new file mode 100644 index 0000000..39f5035 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-small/transport_record_on.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-small/transport_repeat_off.png b/ColorThemes/Ultraschall_2/black-mcp-small/transport_repeat_off.png new file mode 100644 index 0000000..0bd3251 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-small/transport_repeat_off.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-small/transport_repeat_on.png b/ColorThemes/Ultraschall_2/black-mcp-small/transport_repeat_on.png new file mode 100644 index 0000000..254d43b Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-small/transport_repeat_on.png differ diff --git a/ColorThemes/Ultraschall_2/black-mcp-small/transport_stop.png b/ColorThemes/Ultraschall_2/black-mcp-small/transport_stop.png new file mode 100644 index 0000000..e982f66 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-mcp-small/transport_stop.png differ diff --git a/ColorThemes/Ultraschall_2/black-tcp-flat/folder_start.png b/ColorThemes/Ultraschall_2/black-tcp-flat/folder_start.png new file mode 100644 index 0000000..ce79e2f Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-tcp-flat/folder_start.png differ diff --git a/ColorThemes/Ultraschall_2/black-tcp-flat/mcp_bg.png b/ColorThemes/Ultraschall_2/black-tcp-flat/mcp_bg.png new file mode 100644 index 0000000..110f0c9 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-tcp-flat/mcp_bg.png differ diff --git a/ColorThemes/Ultraschall_2/black-tcp-flat/mcp_mainbg.png b/ColorThemes/Ultraschall_2/black-tcp-flat/mcp_mainbg.png new file mode 100644 index 0000000..05e5ed2 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-tcp-flat/mcp_mainbg.png differ diff --git a/ColorThemes/Ultraschall_2/black-tcp-flat/mcp_volthumb.png b/ColorThemes/Ultraschall_2/black-tcp-flat/mcp_volthumb.png new file mode 100644 index 0000000..921f5e7 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-tcp-flat/mcp_volthumb.png differ diff --git a/ColorThemes/Ultraschall_2/black-tcp-flat/meter_bg_h.png b/ColorThemes/Ultraschall_2/black-tcp-flat/meter_bg_h.png new file mode 100644 index 0000000..f86c55c Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-tcp-flat/meter_bg_h.png differ diff --git a/ColorThemes/Ultraschall_2/black-tcp-flat/meter_bg_tcp.png b/ColorThemes/Ultraschall_2/black-tcp-flat/meter_bg_tcp.png new file mode 100644 index 0000000..9f90c67 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-tcp-flat/meter_bg_tcp.png differ diff --git a/ColorThemes/Ultraschall_2/black-tcp-flat/meter_bg_v.png b/ColorThemes/Ultraschall_2/black-tcp-flat/meter_bg_v.png new file mode 100644 index 0000000..b8d1de2 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-tcp-flat/meter_bg_v.png differ diff --git a/ColorThemes/Ultraschall_2/black-tcp-flat/meter_strip_h.png b/ColorThemes/Ultraschall_2/black-tcp-flat/meter_strip_h.png new file mode 100644 index 0000000..6169ca9 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-tcp-flat/meter_strip_h.png differ diff --git a/ColorThemes/Ultraschall_2/black-tcp-flat/meter_strip_h_verde.png b/ColorThemes/Ultraschall_2/black-tcp-flat/meter_strip_h_verde.png new file mode 100644 index 0000000..fe94f89 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-tcp-flat/meter_strip_h_verde.png differ diff --git a/ColorThemes/Ultraschall_2/black-tcp-flat/meter_strip_v.png b/ColorThemes/Ultraschall_2/black-tcp-flat/meter_strip_v.png new file mode 100644 index 0000000..98560bf Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-tcp-flat/meter_strip_v.png differ diff --git a/ColorThemes/Ultraschall_2/black-tcp-flat/tcp_bg.png b/ColorThemes/Ultraschall_2/black-tcp-flat/tcp_bg.png new file mode 100644 index 0000000..a9bc23d Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-tcp-flat/tcp_bg.png differ diff --git a/ColorThemes/Ultraschall_2/black-tcp-flat/tcp_bg_old.png b/ColorThemes/Ultraschall_2/black-tcp-flat/tcp_bg_old.png new file mode 100644 index 0000000..934cc0b Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-tcp-flat/tcp_bg_old.png differ diff --git a/ColorThemes/Ultraschall_2/black-tcp-flat/tcp_bgsel.png b/ColorThemes/Ultraschall_2/black-tcp-flat/tcp_bgsel.png new file mode 100644 index 0000000..63b2aae Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-tcp-flat/tcp_bgsel.png differ diff --git a/ColorThemes/Ultraschall_2/black-tcp-flat/tcp_bgsel_old.png b/ColorThemes/Ultraschall_2/black-tcp-flat/tcp_bgsel_old.png new file mode 100644 index 0000000..16aba78 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-tcp-flat/tcp_bgsel_old.png differ diff --git a/ColorThemes/Ultraschall_2/black-tcp-flat/tcp_iconbg.png b/ColorThemes/Ultraschall_2/black-tcp-flat/tcp_iconbg.png new file mode 100644 index 0000000..9fdd3cb Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-tcp-flat/tcp_iconbg.png differ diff --git a/ColorThemes/Ultraschall_2/black-tcp-flat/tcp_namebg.png b/ColorThemes/Ultraschall_2/black-tcp-flat/tcp_namebg.png new file mode 100644 index 0000000..f3f98d2 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-tcp-flat/tcp_namebg.png differ diff --git a/ColorThemes/Ultraschall_2/black-tcp-flat/tcp_pan_knob_small.png b/ColorThemes/Ultraschall_2/black-tcp-flat/tcp_pan_knob_small.png new file mode 100644 index 0000000..f55e73f Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-tcp-flat/tcp_pan_knob_small.png differ diff --git a/ColorThemes/Ultraschall_2/black-tcp-flat/tcp_pan_label.png b/ColorThemes/Ultraschall_2/black-tcp-flat/tcp_pan_label.png new file mode 100644 index 0000000..2edce00 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-tcp-flat/tcp_pan_label.png differ diff --git a/ColorThemes/Ultraschall_2/black-tcp-flat/tcp_recinput.png b/ColorThemes/Ultraschall_2/black-tcp-flat/tcp_recinput.png new file mode 100644 index 0000000..2bd60b1 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-tcp-flat/tcp_recinput.png differ diff --git a/ColorThemes/Ultraschall_2/black-tcp-flat/tcp_solodefeat_on.png b/ColorThemes/Ultraschall_2/black-tcp-flat/tcp_solodefeat_on.png new file mode 100644 index 0000000..d7cd125 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-tcp-flat/tcp_solodefeat_on.png differ diff --git a/ColorThemes/Ultraschall_2/black-tcp-flat/tcp_vol_knob_small.png b/ColorThemes/Ultraschall_2/black-tcp-flat/tcp_vol_knob_small.png new file mode 100644 index 0000000..d17b6b6 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-tcp-flat/tcp_vol_knob_small.png differ diff --git a/ColorThemes/Ultraschall_2/black-tcp-flat/tcp_vol_label.png b/ColorThemes/Ultraschall_2/black-tcp-flat/tcp_vol_label.png new file mode 100644 index 0000000..7ede419 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-tcp-flat/tcp_vol_label.png differ diff --git a/ColorThemes/Ultraschall_2/black-tcp-flat/tcp_volbg.png b/ColorThemes/Ultraschall_2/black-tcp-flat/tcp_volbg.png new file mode 100644 index 0000000..56cf7d3 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-tcp-flat/tcp_volbg.png differ diff --git a/ColorThemes/Ultraschall_2/black-tcp-flat/tcp_volthumb.png b/ColorThemes/Ultraschall_2/black-tcp-flat/tcp_volthumb.png new file mode 100644 index 0000000..43267ff Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-tcp-flat/tcp_volthumb.png differ diff --git a/ColorThemes/Ultraschall_2/black-tcp-flat/tcp_volthumb2.png b/ColorThemes/Ultraschall_2/black-tcp-flat/tcp_volthumb2.png new file mode 100644 index 0000000..b328e78 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-tcp-flat/tcp_volthumb2.png differ diff --git a/ColorThemes/Ultraschall_2/black-tcp-flat/tcp_wid_label.png b/ColorThemes/Ultraschall_2/black-tcp-flat/tcp_wid_label.png new file mode 100644 index 0000000..2edce00 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-tcp-flat/tcp_wid_label.png differ diff --git a/ColorThemes/Ultraschall_2/black-tcp-flat/tcp_width_knob_small.png b/ColorThemes/Ultraschall_2/black-tcp-flat/tcp_width_knob_small.png new file mode 100644 index 0000000..0416d2b Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-tcp-flat/tcp_width_knob_small.png differ diff --git a/ColorThemes/Ultraschall_2/black-tcp-flat/track_env.png b/ColorThemes/Ultraschall_2/black-tcp-flat/track_env.png new file mode 100644 index 0000000..1cb7143 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-tcp-flat/track_env.png differ diff --git a/ColorThemes/Ultraschall_2/black-tcp-flat/track_env_latch.png b/ColorThemes/Ultraschall_2/black-tcp-flat/track_env_latch.png new file mode 100644 index 0000000..479b37b Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-tcp-flat/track_env_latch.png differ diff --git a/ColorThemes/Ultraschall_2/black-tcp-flat/track_env_read.png b/ColorThemes/Ultraschall_2/black-tcp-flat/track_env_read.png new file mode 100644 index 0000000..d34bc2b Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-tcp-flat/track_env_read.png differ diff --git a/ColorThemes/Ultraschall_2/black-tcp-flat/track_env_touch.png b/ColorThemes/Ultraschall_2/black-tcp-flat/track_env_touch.png new file mode 100644 index 0000000..8c56841 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-tcp-flat/track_env_touch.png differ diff --git a/ColorThemes/Ultraschall_2/black-tcp-flat/track_env_write.png b/ColorThemes/Ultraschall_2/black-tcp-flat/track_env_write.png new file mode 100644 index 0000000..f70ec1c Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-tcp-flat/track_env_write.png differ diff --git a/ColorThemes/Ultraschall_2/black-tcp-flat/track_fx_dis.png b/ColorThemes/Ultraschall_2/black-tcp-flat/track_fx_dis.png new file mode 100644 index 0000000..0ad5bf9 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-tcp-flat/track_fx_dis.png differ diff --git a/ColorThemes/Ultraschall_2/black-tcp-flat/track_fx_empty.png b/ColorThemes/Ultraschall_2/black-tcp-flat/track_fx_empty.png new file mode 100644 index 0000000..3f2c3e6 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-tcp-flat/track_fx_empty.png differ diff --git a/ColorThemes/Ultraschall_2/black-tcp-flat/track_fx_in_empty.png b/ColorThemes/Ultraschall_2/black-tcp-flat/track_fx_in_empty.png new file mode 100644 index 0000000..25c76db Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-tcp-flat/track_fx_in_empty.png differ diff --git a/ColorThemes/Ultraschall_2/black-tcp-flat/track_fx_norm.png b/ColorThemes/Ultraschall_2/black-tcp-flat/track_fx_norm.png new file mode 100644 index 0000000..ac05636 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-tcp-flat/track_fx_norm.png differ diff --git a/ColorThemes/Ultraschall_2/black-tcp-flat/track_fxempty_h.png b/ColorThemes/Ultraschall_2/black-tcp-flat/track_fxempty_h.png new file mode 100644 index 0000000..0c3a186 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-tcp-flat/track_fxempty_h.png differ diff --git a/ColorThemes/Ultraschall_2/black-tcp-flat/track_fxoff_h.png b/ColorThemes/Ultraschall_2/black-tcp-flat/track_fxoff_h.png new file mode 100644 index 0000000..e9846c2 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-tcp-flat/track_fxoff_h.png differ diff --git a/ColorThemes/Ultraschall_2/black-tcp-flat/track_fxon_h.png b/ColorThemes/Ultraschall_2/black-tcp-flat/track_fxon_h.png new file mode 100644 index 0000000..830ec1a Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-tcp-flat/track_fxon_h.png differ diff --git a/ColorThemes/Ultraschall_2/black-tcp-flat/track_fxon_v.png b/ColorThemes/Ultraschall_2/black-tcp-flat/track_fxon_v.png new file mode 100644 index 0000000..c208560 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-tcp-flat/track_fxon_v.png differ diff --git a/ColorThemes/Ultraschall_2/black-tcp-flat/track_io.png b/ColorThemes/Ultraschall_2/black-tcp-flat/track_io.png new file mode 100644 index 0000000..aa64ae0 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-tcp-flat/track_io.png differ diff --git a/ColorThemes/Ultraschall_2/black-tcp-flat/track_io_dis.png b/ColorThemes/Ultraschall_2/black-tcp-flat/track_io_dis.png new file mode 100644 index 0000000..7219667 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-tcp-flat/track_io_dis.png differ diff --git a/ColorThemes/Ultraschall_2/black-tcp-flat/track_io_r.png b/ColorThemes/Ultraschall_2/black-tcp-flat/track_io_r.png new file mode 100644 index 0000000..3f3f409 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-tcp-flat/track_io_r.png differ diff --git a/ColorThemes/Ultraschall_2/black-tcp-flat/track_io_r_dis.png b/ColorThemes/Ultraschall_2/black-tcp-flat/track_io_r_dis.png new file mode 100644 index 0000000..7a9eb40 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-tcp-flat/track_io_r_dis.png differ diff --git a/ColorThemes/Ultraschall_2/black-tcp-flat/track_io_s.png b/ColorThemes/Ultraschall_2/black-tcp-flat/track_io_s.png new file mode 100644 index 0000000..69a946c Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-tcp-flat/track_io_s.png differ diff --git a/ColorThemes/Ultraschall_2/black-tcp-flat/track_io_s_dis.png b/ColorThemes/Ultraschall_2/black-tcp-flat/track_io_s_dis.png new file mode 100644 index 0000000..70fe95f Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-tcp-flat/track_io_s_dis.png differ diff --git a/ColorThemes/Ultraschall_2/black-tcp-flat/track_io_s_r.png b/ColorThemes/Ultraschall_2/black-tcp-flat/track_io_s_r.png new file mode 100644 index 0000000..2d2e53c Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-tcp-flat/track_io_s_r.png differ diff --git a/ColorThemes/Ultraschall_2/black-tcp-flat/track_io_s_r_dis.png b/ColorThemes/Ultraschall_2/black-tcp-flat/track_io_s_r_dis.png new file mode 100644 index 0000000..f928006 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-tcp-flat/track_io_s_r_dis.png differ diff --git a/ColorThemes/Ultraschall_2/black-tcp-flat/track_monitor_off.png b/ColorThemes/Ultraschall_2/black-tcp-flat/track_monitor_off.png new file mode 100644 index 0000000..5adaa42 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-tcp-flat/track_monitor_off.png differ diff --git a/ColorThemes/Ultraschall_2/black-tcp-flat/track_mute_off.png b/ColorThemes/Ultraschall_2/black-tcp-flat/track_mute_off.png new file mode 100644 index 0000000..f3cd9bd Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-tcp-flat/track_mute_off.png differ diff --git a/ColorThemes/Ultraschall_2/black-tcp-flat/track_mute_on.png b/ColorThemes/Ultraschall_2/black-tcp-flat/track_mute_on.png new file mode 100644 index 0000000..988a3cd Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-tcp-flat/track_mute_on.png differ diff --git a/ColorThemes/Ultraschall_2/black-tcp-flat/track_phase_norm.png b/ColorThemes/Ultraschall_2/black-tcp-flat/track_phase_norm.png new file mode 100644 index 0000000..6a07aa3 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-tcp-flat/track_phase_norm.png differ diff --git a/ColorThemes/Ultraschall_2/black-tcp-flat/track_phase_norm2.png b/ColorThemes/Ultraschall_2/black-tcp-flat/track_phase_norm2.png new file mode 100644 index 0000000..542ee2c Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-tcp-flat/track_phase_norm2.png differ diff --git a/ColorThemes/Ultraschall_2/black-tcp-flat/track_recarm_auto.png b/ColorThemes/Ultraschall_2/black-tcp-flat/track_recarm_auto.png new file mode 100644 index 0000000..3f10471 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-tcp-flat/track_recarm_auto.png differ diff --git a/ColorThemes/Ultraschall_2/black-tcp-flat/track_recarm_auto_on.png b/ColorThemes/Ultraschall_2/black-tcp-flat/track_recarm_auto_on.png new file mode 100644 index 0000000..0108254 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-tcp-flat/track_recarm_auto_on.png differ diff --git a/ColorThemes/Ultraschall_2/black-tcp-flat/track_recarm_off.png b/ColorThemes/Ultraschall_2/black-tcp-flat/track_recarm_off.png new file mode 100644 index 0000000..b3a485c Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-tcp-flat/track_recarm_off.png differ diff --git a/ColorThemes/Ultraschall_2/black-tcp-flat/track_recarm_on.png b/ColorThemes/Ultraschall_2/black-tcp-flat/track_recarm_on.png new file mode 100644 index 0000000..0bd8c6e Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-tcp-flat/track_recarm_on.png differ diff --git a/ColorThemes/Ultraschall_2/black-tcp-flat/track_recmode_in.png b/ColorThemes/Ultraschall_2/black-tcp-flat/track_recmode_in.png new file mode 100644 index 0000000..343372d Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-tcp-flat/track_recmode_in.png differ diff --git a/ColorThemes/Ultraschall_2/black-tcp-flat/track_recmode_off.png b/ColorThemes/Ultraschall_2/black-tcp-flat/track_recmode_off.png new file mode 100644 index 0000000..3934294 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-tcp-flat/track_recmode_off.png differ diff --git a/ColorThemes/Ultraschall_2/black-tcp-flat/track_recmode_out.png b/ColorThemes/Ultraschall_2/black-tcp-flat/track_recmode_out.png new file mode 100644 index 0000000..1218fe6 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-tcp-flat/track_recmode_out.png differ diff --git a/ColorThemes/Ultraschall_2/black-tcp-flat/track_solo_off.png b/ColorThemes/Ultraschall_2/black-tcp-flat/track_solo_off.png new file mode 100644 index 0000000..ee9b0f9 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-tcp-flat/track_solo_off.png differ diff --git a/ColorThemes/Ultraschall_2/black-tcp-flat/track_solo_on.png b/ColorThemes/Ultraschall_2/black-tcp-flat/track_solo_on.png new file mode 100644 index 0000000..0a9e163 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-tcp-flat/track_solo_on.png differ diff --git a/ColorThemes/Ultraschall_2/black-tcp-flat/track_solodefeat_on.png b/ColorThemes/Ultraschall_2/black-tcp-flat/track_solodefeat_on.png new file mode 100644 index 0000000..2f97a64 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-tcp-flat/track_solodefeat_on.png differ diff --git a/ColorThemes/Ultraschall_2/black-tcp-flat/track_stereo.png b/ColorThemes/Ultraschall_2/black-tcp-flat/track_stereo.png new file mode 100644 index 0000000..c7bb68c Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-tcp-flat/track_stereo.png differ diff --git a/ColorThemes/Ultraschall_2/black-tcp-separator/tcp_bg.png b/ColorThemes/Ultraschall_2/black-tcp-separator/tcp_bg.png new file mode 100644 index 0000000..c8548cd Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-tcp-separator/tcp_bg.png differ diff --git a/ColorThemes/Ultraschall_2/black-tcp-separator/tcp_bgsel.png b/ColorThemes/Ultraschall_2/black-tcp-separator/tcp_bgsel.png new file mode 100644 index 0000000..56e37a8 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-tcp-separator/tcp_bgsel.png differ diff --git a/ColorThemes/Ultraschall_2/black-tcp-v-meters/folder_indent.png b/ColorThemes/Ultraschall_2/black-tcp-v-meters/folder_indent.png new file mode 100644 index 0000000..5da6524 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-tcp-v-meters/folder_indent.png differ diff --git a/ColorThemes/Ultraschall_2/black-tcp-v-meters/folder_start.png b/ColorThemes/Ultraschall_2/black-tcp-v-meters/folder_start.png new file mode 100644 index 0000000..aa656da Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-tcp-v-meters/folder_start.png differ diff --git a/ColorThemes/Ultraschall_2/black-tcp-v-meters/meter_bg_tcp.png b/ColorThemes/Ultraschall_2/black-tcp-v-meters/meter_bg_tcp.png new file mode 100644 index 0000000..8c813aa Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-tcp-v-meters/meter_bg_tcp.png differ diff --git a/ColorThemes/Ultraschall_2/black-tcp-v-meters/meter_bg_v.png b/ColorThemes/Ultraschall_2/black-tcp-v-meters/meter_bg_v.png new file mode 100644 index 0000000..ecf6063 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-tcp-v-meters/meter_bg_v.png differ diff --git a/ColorThemes/Ultraschall_2/black-tcp-v-meters/meter_strip_h.png b/ColorThemes/Ultraschall_2/black-tcp-v-meters/meter_strip_h.png new file mode 100644 index 0000000..6169ca9 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-tcp-v-meters/meter_strip_h.png differ diff --git a/ColorThemes/Ultraschall_2/black-tcp-v-meters/meter_strip_v.png b/ColorThemes/Ultraschall_2/black-tcp-v-meters/meter_strip_v.png new file mode 100644 index 0000000..8377262 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-tcp-v-meters/meter_strip_v.png differ diff --git a/ColorThemes/Ultraschall_2/black-tcp-v-meters/tcp_bg.png b/ColorThemes/Ultraschall_2/black-tcp-v-meters/tcp_bg.png new file mode 100644 index 0000000..36937b9 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-tcp-v-meters/tcp_bg.png differ diff --git a/ColorThemes/Ultraschall_2/black-tcp-v-meters/tcp_bg_.png b/ColorThemes/Ultraschall_2/black-tcp-v-meters/tcp_bg_.png new file mode 100644 index 0000000..9b400da Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-tcp-v-meters/tcp_bg_.png differ diff --git a/ColorThemes/Ultraschall_2/black-tcp-v-meters/tcp_bgsel.png b/ColorThemes/Ultraschall_2/black-tcp-v-meters/tcp_bgsel.png new file mode 100644 index 0000000..63b2aae Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-tcp-v-meters/tcp_bgsel.png differ diff --git a/ColorThemes/Ultraschall_2/black-tcp-v-meters/tcp_iconbg.png b/ColorThemes/Ultraschall_2/black-tcp-v-meters/tcp_iconbg.png new file mode 100644 index 0000000..9fdd3cb Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-tcp-v-meters/tcp_iconbg.png differ diff --git a/ColorThemes/Ultraschall_2/black-tcp-v-meters/tcp_namebg.png b/ColorThemes/Ultraschall_2/black-tcp-v-meters/tcp_namebg.png new file mode 100644 index 0000000..f3f98d2 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-tcp-v-meters/tcp_namebg.png differ diff --git a/ColorThemes/Ultraschall_2/black-tcp-v-meters/tcp_pan_knob_small.png b/ColorThemes/Ultraschall_2/black-tcp-v-meters/tcp_pan_knob_small.png new file mode 100644 index 0000000..f55e73f Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-tcp-v-meters/tcp_pan_knob_small.png differ diff --git a/ColorThemes/Ultraschall_2/black-tcp-v-meters/tcp_pan_label.png b/ColorThemes/Ultraschall_2/black-tcp-v-meters/tcp_pan_label.png new file mode 100644 index 0000000..2edce00 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-tcp-v-meters/tcp_pan_label.png differ diff --git a/ColorThemes/Ultraschall_2/black-tcp-v-meters/tcp_recinput.png b/ColorThemes/Ultraschall_2/black-tcp-v-meters/tcp_recinput.png new file mode 100644 index 0000000..2bd60b1 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-tcp-v-meters/tcp_recinput.png differ diff --git a/ColorThemes/Ultraschall_2/black-tcp-v-meters/tcp_solodefeat_on.png b/ColorThemes/Ultraschall_2/black-tcp-v-meters/tcp_solodefeat_on.png new file mode 100644 index 0000000..d7cd125 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-tcp-v-meters/tcp_solodefeat_on.png differ diff --git a/ColorThemes/Ultraschall_2/black-tcp-v-meters/tcp_vol_label.png b/ColorThemes/Ultraschall_2/black-tcp-v-meters/tcp_vol_label.png new file mode 100644 index 0000000..7ede419 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-tcp-v-meters/tcp_vol_label.png differ diff --git a/ColorThemes/Ultraschall_2/black-tcp-v-meters/tcp_volbg.png b/ColorThemes/Ultraschall_2/black-tcp-v-meters/tcp_volbg.png new file mode 100644 index 0000000..56cf7d3 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-tcp-v-meters/tcp_volbg.png differ diff --git a/ColorThemes/Ultraschall_2/black-tcp-v-meters/tcp_volthumb.png b/ColorThemes/Ultraschall_2/black-tcp-v-meters/tcp_volthumb.png new file mode 100644 index 0000000..43267ff Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-tcp-v-meters/tcp_volthumb.png differ diff --git a/ColorThemes/Ultraschall_2/black-tcp-v-meters/tcp_volthumb2.png b/ColorThemes/Ultraschall_2/black-tcp-v-meters/tcp_volthumb2.png new file mode 100644 index 0000000..b328e78 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-tcp-v-meters/tcp_volthumb2.png differ diff --git a/ColorThemes/Ultraschall_2/black-tcp-v-meters/tcp_wid_label.png b/ColorThemes/Ultraschall_2/black-tcp-v-meters/tcp_wid_label.png new file mode 100644 index 0000000..2edce00 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-tcp-v-meters/tcp_wid_label.png differ diff --git a/ColorThemes/Ultraschall_2/black-tcp-v-meters/tcp_width_knob_small.png b/ColorThemes/Ultraschall_2/black-tcp-v-meters/tcp_width_knob_small.png new file mode 100644 index 0000000..f55e73f Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-tcp-v-meters/tcp_width_knob_small.png differ diff --git a/ColorThemes/Ultraschall_2/black-tcp-v-meters/track_env.png b/ColorThemes/Ultraschall_2/black-tcp-v-meters/track_env.png new file mode 100644 index 0000000..1cb7143 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-tcp-v-meters/track_env.png differ diff --git a/ColorThemes/Ultraschall_2/black-tcp-v-meters/track_env_latch.png b/ColorThemes/Ultraschall_2/black-tcp-v-meters/track_env_latch.png new file mode 100644 index 0000000..479b37b Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-tcp-v-meters/track_env_latch.png differ diff --git a/ColorThemes/Ultraschall_2/black-tcp-v-meters/track_env_read.png b/ColorThemes/Ultraschall_2/black-tcp-v-meters/track_env_read.png new file mode 100644 index 0000000..d34bc2b Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-tcp-v-meters/track_env_read.png differ diff --git a/ColorThemes/Ultraschall_2/black-tcp-v-meters/track_env_touch.png b/ColorThemes/Ultraschall_2/black-tcp-v-meters/track_env_touch.png new file mode 100644 index 0000000..8c56841 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-tcp-v-meters/track_env_touch.png differ diff --git a/ColorThemes/Ultraschall_2/black-tcp-v-meters/track_env_write.png b/ColorThemes/Ultraschall_2/black-tcp-v-meters/track_env_write.png new file mode 100644 index 0000000..f70ec1c Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-tcp-v-meters/track_env_write.png differ diff --git a/ColorThemes/Ultraschall_2/black-tcp-v-meters/track_fx_dis.png b/ColorThemes/Ultraschall_2/black-tcp-v-meters/track_fx_dis.png new file mode 100644 index 0000000..0ad5bf9 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-tcp-v-meters/track_fx_dis.png differ diff --git a/ColorThemes/Ultraschall_2/black-tcp-v-meters/track_fx_empty.png b/ColorThemes/Ultraschall_2/black-tcp-v-meters/track_fx_empty.png new file mode 100644 index 0000000..3f2c3e6 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-tcp-v-meters/track_fx_empty.png differ diff --git a/ColorThemes/Ultraschall_2/black-tcp-v-meters/track_fx_in_empty.png b/ColorThemes/Ultraschall_2/black-tcp-v-meters/track_fx_in_empty.png new file mode 100644 index 0000000..25c76db Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-tcp-v-meters/track_fx_in_empty.png differ diff --git a/ColorThemes/Ultraschall_2/black-tcp-v-meters/track_fx_norm.png b/ColorThemes/Ultraschall_2/black-tcp-v-meters/track_fx_norm.png new file mode 100644 index 0000000..ac05636 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-tcp-v-meters/track_fx_norm.png differ diff --git a/ColorThemes/Ultraschall_2/black-tcp-v-meters/track_fx_norm__.png b/ColorThemes/Ultraschall_2/black-tcp-v-meters/track_fx_norm__.png new file mode 100644 index 0000000..684b5af Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-tcp-v-meters/track_fx_norm__.png differ diff --git a/ColorThemes/Ultraschall_2/black-tcp-v-meters/track_fx_norm_green2.png b/ColorThemes/Ultraschall_2/black-tcp-v-meters/track_fx_norm_green2.png new file mode 100644 index 0000000..3189eaf Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-tcp-v-meters/track_fx_norm_green2.png differ diff --git a/ColorThemes/Ultraschall_2/black-tcp-v-meters/track_fxempty_h.png b/ColorThemes/Ultraschall_2/black-tcp-v-meters/track_fxempty_h.png new file mode 100644 index 0000000..0c3a186 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-tcp-v-meters/track_fxempty_h.png differ diff --git a/ColorThemes/Ultraschall_2/black-tcp-v-meters/track_fxoff_h.png b/ColorThemes/Ultraschall_2/black-tcp-v-meters/track_fxoff_h.png new file mode 100644 index 0000000..e9846c2 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-tcp-v-meters/track_fxoff_h.png differ diff --git a/ColorThemes/Ultraschall_2/black-tcp-v-meters/track_fxon_h.png b/ColorThemes/Ultraschall_2/black-tcp-v-meters/track_fxon_h.png new file mode 100644 index 0000000..830ec1a Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-tcp-v-meters/track_fxon_h.png differ diff --git a/ColorThemes/Ultraschall_2/black-tcp-v-meters/track_fxon_h__.png b/ColorThemes/Ultraschall_2/black-tcp-v-meters/track_fxon_h__.png new file mode 100644 index 0000000..d7051b7 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-tcp-v-meters/track_fxon_h__.png differ diff --git a/ColorThemes/Ultraschall_2/black-tcp-v-meters/track_fxon_h_green2.png b/ColorThemes/Ultraschall_2/black-tcp-v-meters/track_fxon_h_green2.png new file mode 100644 index 0000000..6db7cea Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-tcp-v-meters/track_fxon_h_green2.png differ diff --git a/ColorThemes/Ultraschall_2/black-tcp-v-meters/track_io.png b/ColorThemes/Ultraschall_2/black-tcp-v-meters/track_io.png new file mode 100644 index 0000000..aa64ae0 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-tcp-v-meters/track_io.png differ diff --git a/ColorThemes/Ultraschall_2/black-tcp-v-meters/track_io_dis.png b/ColorThemes/Ultraschall_2/black-tcp-v-meters/track_io_dis.png new file mode 100644 index 0000000..7219667 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-tcp-v-meters/track_io_dis.png differ diff --git a/ColorThemes/Ultraschall_2/black-tcp-v-meters/track_io_r.png b/ColorThemes/Ultraschall_2/black-tcp-v-meters/track_io_r.png new file mode 100644 index 0000000..3f3f409 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-tcp-v-meters/track_io_r.png differ diff --git a/ColorThemes/Ultraschall_2/black-tcp-v-meters/track_io_r_dis.png b/ColorThemes/Ultraschall_2/black-tcp-v-meters/track_io_r_dis.png new file mode 100644 index 0000000..7a9eb40 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-tcp-v-meters/track_io_r_dis.png differ diff --git a/ColorThemes/Ultraschall_2/black-tcp-v-meters/track_io_s.png b/ColorThemes/Ultraschall_2/black-tcp-v-meters/track_io_s.png new file mode 100644 index 0000000..69a946c Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-tcp-v-meters/track_io_s.png differ diff --git a/ColorThemes/Ultraschall_2/black-tcp-v-meters/track_io_s_dis.png b/ColorThemes/Ultraschall_2/black-tcp-v-meters/track_io_s_dis.png new file mode 100644 index 0000000..70fe95f Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-tcp-v-meters/track_io_s_dis.png differ diff --git a/ColorThemes/Ultraschall_2/black-tcp-v-meters/track_io_s_r.png b/ColorThemes/Ultraschall_2/black-tcp-v-meters/track_io_s_r.png new file mode 100644 index 0000000..2d2e53c Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-tcp-v-meters/track_io_s_r.png differ diff --git a/ColorThemes/Ultraschall_2/black-tcp-v-meters/track_io_s_r_dis.png b/ColorThemes/Ultraschall_2/black-tcp-v-meters/track_io_s_r_dis.png new file mode 100644 index 0000000..f928006 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-tcp-v-meters/track_io_s_r_dis.png differ diff --git a/ColorThemes/Ultraschall_2/black-tcp-v-meters/track_monitor_off.png b/ColorThemes/Ultraschall_2/black-tcp-v-meters/track_monitor_off.png new file mode 100644 index 0000000..5adaa42 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-tcp-v-meters/track_monitor_off.png differ diff --git a/ColorThemes/Ultraschall_2/black-tcp-v-meters/track_mute_off.png b/ColorThemes/Ultraschall_2/black-tcp-v-meters/track_mute_off.png new file mode 100644 index 0000000..f3cd9bd Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-tcp-v-meters/track_mute_off.png differ diff --git a/ColorThemes/Ultraschall_2/black-tcp-v-meters/track_mute_on.png b/ColorThemes/Ultraschall_2/black-tcp-v-meters/track_mute_on.png new file mode 100644 index 0000000..988a3cd Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-tcp-v-meters/track_mute_on.png differ diff --git a/ColorThemes/Ultraschall_2/black-tcp-v-meters/track_phase_norm.png b/ColorThemes/Ultraschall_2/black-tcp-v-meters/track_phase_norm.png new file mode 100644 index 0000000..6a07aa3 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-tcp-v-meters/track_phase_norm.png differ diff --git a/ColorThemes/Ultraschall_2/black-tcp-v-meters/track_phase_norm2.png b/ColorThemes/Ultraschall_2/black-tcp-v-meters/track_phase_norm2.png new file mode 100644 index 0000000..542ee2c Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-tcp-v-meters/track_phase_norm2.png differ diff --git a/ColorThemes/Ultraschall_2/black-tcp-v-meters/track_recarm_auto.png b/ColorThemes/Ultraschall_2/black-tcp-v-meters/track_recarm_auto.png new file mode 100644 index 0000000..3f10471 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-tcp-v-meters/track_recarm_auto.png differ diff --git a/ColorThemes/Ultraschall_2/black-tcp-v-meters/track_recarm_auto_on.png b/ColorThemes/Ultraschall_2/black-tcp-v-meters/track_recarm_auto_on.png new file mode 100644 index 0000000..0108254 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-tcp-v-meters/track_recarm_auto_on.png differ diff --git a/ColorThemes/Ultraschall_2/black-tcp-v-meters/track_recarm_off.png b/ColorThemes/Ultraschall_2/black-tcp-v-meters/track_recarm_off.png new file mode 100644 index 0000000..b3a485c Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-tcp-v-meters/track_recarm_off.png differ diff --git a/ColorThemes/Ultraschall_2/black-tcp-v-meters/track_recarm_on.png b/ColorThemes/Ultraschall_2/black-tcp-v-meters/track_recarm_on.png new file mode 100644 index 0000000..0bd8c6e Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-tcp-v-meters/track_recarm_on.png differ diff --git a/ColorThemes/Ultraschall_2/black-tcp-v-meters/track_recmode_in.png b/ColorThemes/Ultraschall_2/black-tcp-v-meters/track_recmode_in.png new file mode 100644 index 0000000..343372d Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-tcp-v-meters/track_recmode_in.png differ diff --git a/ColorThemes/Ultraschall_2/black-tcp-v-meters/track_recmode_off.png b/ColorThemes/Ultraschall_2/black-tcp-v-meters/track_recmode_off.png new file mode 100644 index 0000000..3934294 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-tcp-v-meters/track_recmode_off.png differ diff --git a/ColorThemes/Ultraschall_2/black-tcp-v-meters/track_recmode_out.png b/ColorThemes/Ultraschall_2/black-tcp-v-meters/track_recmode_out.png new file mode 100644 index 0000000..1218fe6 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-tcp-v-meters/track_recmode_out.png differ diff --git a/ColorThemes/Ultraschall_2/black-tcp-v-meters/track_solo_off.png b/ColorThemes/Ultraschall_2/black-tcp-v-meters/track_solo_off.png new file mode 100644 index 0000000..ee9b0f9 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-tcp-v-meters/track_solo_off.png differ diff --git a/ColorThemes/Ultraschall_2/black-tcp-v-meters/track_solo_on.png b/ColorThemes/Ultraschall_2/black-tcp-v-meters/track_solo_on.png new file mode 100644 index 0000000..0a9e163 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-tcp-v-meters/track_solo_on.png differ diff --git a/ColorThemes/Ultraschall_2/black-tcp-v-meters/track_solodefeat_on.png b/ColorThemes/Ultraschall_2/black-tcp-v-meters/track_solodefeat_on.png new file mode 100644 index 0000000..2f97a64 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-tcp-v-meters/track_solodefeat_on.png differ diff --git a/ColorThemes/Ultraschall_2/black-tcp-v-meters/track_stereo.png b/ColorThemes/Ultraschall_2/black-tcp-v-meters/track_stereo.png new file mode 100644 index 0000000..c7bb68c Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-tcp-v-meters/track_stereo.png differ diff --git a/ColorThemes/Ultraschall_2/black-tcp/00_Small_buttons_composit.psd b/ColorThemes/Ultraschall_2/black-tcp/00_Small_buttons_composit.psd new file mode 100644 index 0000000..fac25a7 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-tcp/00_Small_buttons_composit.psd differ diff --git a/ColorThemes/Ultraschall_2/black-tcp/folder_start.png b/ColorThemes/Ultraschall_2/black-tcp/folder_start.png new file mode 100644 index 0000000..ce79e2f Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-tcp/folder_start.png differ diff --git a/ColorThemes/Ultraschall_2/black-tcp/mcp_bg.png b/ColorThemes/Ultraschall_2/black-tcp/mcp_bg.png new file mode 100644 index 0000000..110f0c9 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-tcp/mcp_bg.png differ diff --git a/ColorThemes/Ultraschall_2/black-tcp/mcp_mainbg.png b/ColorThemes/Ultraschall_2/black-tcp/mcp_mainbg.png new file mode 100644 index 0000000..05e5ed2 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-tcp/mcp_mainbg.png differ diff --git a/ColorThemes/Ultraschall_2/black-tcp/mcp_volthumb.png b/ColorThemes/Ultraschall_2/black-tcp/mcp_volthumb.png new file mode 100644 index 0000000..921f5e7 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-tcp/mcp_volthumb.png differ diff --git a/ColorThemes/Ultraschall_2/black-tcp/meter_bg_h.png b/ColorThemes/Ultraschall_2/black-tcp/meter_bg_h.png new file mode 100644 index 0000000..23aa323 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-tcp/meter_bg_h.png differ diff --git a/ColorThemes/Ultraschall_2/black-tcp/meter_bg_tcp.png b/ColorThemes/Ultraschall_2/black-tcp/meter_bg_tcp.png new file mode 100644 index 0000000..5a980aa Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-tcp/meter_bg_tcp.png differ diff --git a/ColorThemes/Ultraschall_2/black-tcp/meter_bg_v.png b/ColorThemes/Ultraschall_2/black-tcp/meter_bg_v.png new file mode 100644 index 0000000..b8d1de2 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-tcp/meter_bg_v.png differ diff --git a/ColorThemes/Ultraschall_2/black-tcp/meter_strip_h.png b/ColorThemes/Ultraschall_2/black-tcp/meter_strip_h.png new file mode 100644 index 0000000..566c2f6 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-tcp/meter_strip_h.png differ diff --git a/ColorThemes/Ultraschall_2/black-tcp/meter_strip_h_verde.png b/ColorThemes/Ultraschall_2/black-tcp/meter_strip_h_verde.png new file mode 100644 index 0000000..fe94f89 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-tcp/meter_strip_h_verde.png differ diff --git a/ColorThemes/Ultraschall_2/black-tcp/meter_strip_v.png b/ColorThemes/Ultraschall_2/black-tcp/meter_strip_v.png new file mode 100644 index 0000000..98560bf Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-tcp/meter_strip_v.png differ diff --git a/ColorThemes/Ultraschall_2/black-tcp/tcp_bg.png b/ColorThemes/Ultraschall_2/black-tcp/tcp_bg.png new file mode 100644 index 0000000..9d3dc33 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-tcp/tcp_bg.png differ diff --git a/ColorThemes/Ultraschall_2/black-tcp/tcp_bg_old.png b/ColorThemes/Ultraschall_2/black-tcp/tcp_bg_old.png new file mode 100644 index 0000000..934cc0b Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-tcp/tcp_bg_old.png differ diff --git a/ColorThemes/Ultraschall_2/black-tcp/tcp_bgsel.png b/ColorThemes/Ultraschall_2/black-tcp/tcp_bgsel.png new file mode 100644 index 0000000..ba41640 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-tcp/tcp_bgsel.png differ diff --git a/ColorThemes/Ultraschall_2/black-tcp/tcp_bgsel_old.png b/ColorThemes/Ultraschall_2/black-tcp/tcp_bgsel_old.png new file mode 100644 index 0000000..16aba78 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-tcp/tcp_bgsel_old.png differ diff --git a/ColorThemes/Ultraschall_2/black-tcp/tcp_iconbg.png b/ColorThemes/Ultraschall_2/black-tcp/tcp_iconbg.png new file mode 100644 index 0000000..9fdd3cb Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-tcp/tcp_iconbg.png differ diff --git a/ColorThemes/Ultraschall_2/black-tcp/tcp_namebg.png b/ColorThemes/Ultraschall_2/black-tcp/tcp_namebg.png new file mode 100644 index 0000000..2d855ed Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-tcp/tcp_namebg.png differ diff --git a/ColorThemes/Ultraschall_2/black-tcp/tcp_pan_knob_small.png b/ColorThemes/Ultraschall_2/black-tcp/tcp_pan_knob_small.png new file mode 100644 index 0000000..f55e73f Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-tcp/tcp_pan_knob_small.png differ diff --git a/ColorThemes/Ultraschall_2/black-tcp/tcp_pan_label.png b/ColorThemes/Ultraschall_2/black-tcp/tcp_pan_label.png new file mode 100644 index 0000000..2edce00 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-tcp/tcp_pan_label.png differ diff --git a/ColorThemes/Ultraschall_2/black-tcp/tcp_recinput.png b/ColorThemes/Ultraschall_2/black-tcp/tcp_recinput.png new file mode 100644 index 0000000..2bd60b1 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-tcp/tcp_recinput.png differ diff --git a/ColorThemes/Ultraschall_2/black-tcp/tcp_solodefeat_on.png b/ColorThemes/Ultraschall_2/black-tcp/tcp_solodefeat_on.png new file mode 100644 index 0000000..d7cd125 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-tcp/tcp_solodefeat_on.png differ diff --git a/ColorThemes/Ultraschall_2/black-tcp/tcp_vol_knob_small.png b/ColorThemes/Ultraschall_2/black-tcp/tcp_vol_knob_small.png new file mode 100644 index 0000000..d17b6b6 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-tcp/tcp_vol_knob_small.png differ diff --git a/ColorThemes/Ultraschall_2/black-tcp/tcp_vol_label.png b/ColorThemes/Ultraschall_2/black-tcp/tcp_vol_label.png new file mode 100644 index 0000000..7ede419 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-tcp/tcp_vol_label.png differ diff --git a/ColorThemes/Ultraschall_2/black-tcp/tcp_volbg.png b/ColorThemes/Ultraschall_2/black-tcp/tcp_volbg.png new file mode 100644 index 0000000..eaca949 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-tcp/tcp_volbg.png differ diff --git a/ColorThemes/Ultraschall_2/black-tcp/tcp_volthumb.png b/ColorThemes/Ultraschall_2/black-tcp/tcp_volthumb.png new file mode 100644 index 0000000..43267ff Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-tcp/tcp_volthumb.png differ diff --git a/ColorThemes/Ultraschall_2/black-tcp/tcp_volthumb2.png b/ColorThemes/Ultraschall_2/black-tcp/tcp_volthumb2.png new file mode 100644 index 0000000..b328e78 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-tcp/tcp_volthumb2.png differ diff --git a/ColorThemes/Ultraschall_2/black-tcp/tcp_wid_label.png b/ColorThemes/Ultraschall_2/black-tcp/tcp_wid_label.png new file mode 100644 index 0000000..2edce00 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-tcp/tcp_wid_label.png differ diff --git a/ColorThemes/Ultraschall_2/black-tcp/tcp_width_knob_small.png b/ColorThemes/Ultraschall_2/black-tcp/tcp_width_knob_small.png new file mode 100644 index 0000000..0416d2b Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-tcp/tcp_width_knob_small.png differ diff --git a/ColorThemes/Ultraschall_2/black-tcp/track_env.png b/ColorThemes/Ultraschall_2/black-tcp/track_env.png new file mode 100644 index 0000000..1cb7143 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-tcp/track_env.png differ diff --git a/ColorThemes/Ultraschall_2/black-tcp/track_env_latch.png b/ColorThemes/Ultraschall_2/black-tcp/track_env_latch.png new file mode 100644 index 0000000..479b37b Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-tcp/track_env_latch.png differ diff --git a/ColorThemes/Ultraschall_2/black-tcp/track_env_read.png b/ColorThemes/Ultraschall_2/black-tcp/track_env_read.png new file mode 100644 index 0000000..d34bc2b Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-tcp/track_env_read.png differ diff --git a/ColorThemes/Ultraschall_2/black-tcp/track_env_touch.png b/ColorThemes/Ultraschall_2/black-tcp/track_env_touch.png new file mode 100644 index 0000000..8c56841 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-tcp/track_env_touch.png differ diff --git a/ColorThemes/Ultraschall_2/black-tcp/track_env_write.png b/ColorThemes/Ultraschall_2/black-tcp/track_env_write.png new file mode 100644 index 0000000..f70ec1c Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-tcp/track_env_write.png differ diff --git a/ColorThemes/Ultraschall_2/black-tcp/track_fx_dis.png b/ColorThemes/Ultraschall_2/black-tcp/track_fx_dis.png new file mode 100644 index 0000000..0ad5bf9 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-tcp/track_fx_dis.png differ diff --git a/ColorThemes/Ultraschall_2/black-tcp/track_fx_empty.png b/ColorThemes/Ultraschall_2/black-tcp/track_fx_empty.png new file mode 100644 index 0000000..3f2c3e6 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-tcp/track_fx_empty.png differ diff --git a/ColorThemes/Ultraschall_2/black-tcp/track_fx_in_empty.png b/ColorThemes/Ultraschall_2/black-tcp/track_fx_in_empty.png new file mode 100644 index 0000000..25c76db Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-tcp/track_fx_in_empty.png differ diff --git a/ColorThemes/Ultraschall_2/black-tcp/track_fx_norm.png b/ColorThemes/Ultraschall_2/black-tcp/track_fx_norm.png new file mode 100644 index 0000000..ac05636 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-tcp/track_fx_norm.png differ diff --git a/ColorThemes/Ultraschall_2/black-tcp/track_fxempty_h.png b/ColorThemes/Ultraschall_2/black-tcp/track_fxempty_h.png new file mode 100644 index 0000000..0c3a186 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-tcp/track_fxempty_h.png differ diff --git a/ColorThemes/Ultraschall_2/black-tcp/track_fxoff_h.png b/ColorThemes/Ultraschall_2/black-tcp/track_fxoff_h.png new file mode 100644 index 0000000..e9846c2 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-tcp/track_fxoff_h.png differ diff --git a/ColorThemes/Ultraschall_2/black-tcp/track_fxon_h.png b/ColorThemes/Ultraschall_2/black-tcp/track_fxon_h.png new file mode 100644 index 0000000..830ec1a Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-tcp/track_fxon_h.png differ diff --git a/ColorThemes/Ultraschall_2/black-tcp/track_fxon_v.png b/ColorThemes/Ultraschall_2/black-tcp/track_fxon_v.png new file mode 100644 index 0000000..c208560 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-tcp/track_fxon_v.png differ diff --git a/ColorThemes/Ultraschall_2/black-tcp/track_io.png b/ColorThemes/Ultraschall_2/black-tcp/track_io.png new file mode 100644 index 0000000..aa64ae0 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-tcp/track_io.png differ diff --git a/ColorThemes/Ultraschall_2/black-tcp/track_io_dis.png b/ColorThemes/Ultraschall_2/black-tcp/track_io_dis.png new file mode 100644 index 0000000..7219667 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-tcp/track_io_dis.png differ diff --git a/ColorThemes/Ultraschall_2/black-tcp/track_io_r.png b/ColorThemes/Ultraschall_2/black-tcp/track_io_r.png new file mode 100644 index 0000000..3f3f409 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-tcp/track_io_r.png differ diff --git a/ColorThemes/Ultraschall_2/black-tcp/track_io_r_dis.png b/ColorThemes/Ultraschall_2/black-tcp/track_io_r_dis.png new file mode 100644 index 0000000..7a9eb40 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-tcp/track_io_r_dis.png differ diff --git a/ColorThemes/Ultraschall_2/black-tcp/track_io_s.png b/ColorThemes/Ultraschall_2/black-tcp/track_io_s.png new file mode 100644 index 0000000..69a946c Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-tcp/track_io_s.png differ diff --git a/ColorThemes/Ultraschall_2/black-tcp/track_io_s_dis.png b/ColorThemes/Ultraschall_2/black-tcp/track_io_s_dis.png new file mode 100644 index 0000000..70fe95f Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-tcp/track_io_s_dis.png differ diff --git a/ColorThemes/Ultraschall_2/black-tcp/track_io_s_r.png b/ColorThemes/Ultraschall_2/black-tcp/track_io_s_r.png new file mode 100644 index 0000000..2d2e53c Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-tcp/track_io_s_r.png differ diff --git a/ColorThemes/Ultraschall_2/black-tcp/track_io_s_r_dis.png b/ColorThemes/Ultraschall_2/black-tcp/track_io_s_r_dis.png new file mode 100644 index 0000000..f928006 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-tcp/track_io_s_r_dis.png differ diff --git a/ColorThemes/Ultraschall_2/black-tcp/track_monitor_off.png b/ColorThemes/Ultraschall_2/black-tcp/track_monitor_off.png new file mode 100644 index 0000000..5adaa42 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-tcp/track_monitor_off.png differ diff --git a/ColorThemes/Ultraschall_2/black-tcp/track_mute_off.png b/ColorThemes/Ultraschall_2/black-tcp/track_mute_off.png new file mode 100644 index 0000000..0ba3343 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-tcp/track_mute_off.png differ diff --git a/ColorThemes/Ultraschall_2/black-tcp/track_mute_off2.png b/ColorThemes/Ultraschall_2/black-tcp/track_mute_off2.png new file mode 100644 index 0000000..f3cd9bd Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-tcp/track_mute_off2.png differ diff --git a/ColorThemes/Ultraschall_2/black-tcp/track_mute_on.png b/ColorThemes/Ultraschall_2/black-tcp/track_mute_on.png new file mode 100644 index 0000000..776c689 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-tcp/track_mute_on.png differ diff --git a/ColorThemes/Ultraschall_2/black-tcp/track_mute_on2.png b/ColorThemes/Ultraschall_2/black-tcp/track_mute_on2.png new file mode 100644 index 0000000..988a3cd Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-tcp/track_mute_on2.png differ diff --git a/ColorThemes/Ultraschall_2/black-tcp/track_phase_norm.png b/ColorThemes/Ultraschall_2/black-tcp/track_phase_norm.png new file mode 100644 index 0000000..6a07aa3 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-tcp/track_phase_norm.png differ diff --git a/ColorThemes/Ultraschall_2/black-tcp/track_phase_norm2.png b/ColorThemes/Ultraschall_2/black-tcp/track_phase_norm2.png new file mode 100644 index 0000000..542ee2c Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-tcp/track_phase_norm2.png differ diff --git a/ColorThemes/Ultraschall_2/black-tcp/track_recarm_auto.png b/ColorThemes/Ultraschall_2/black-tcp/track_recarm_auto.png new file mode 100644 index 0000000..3f10471 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-tcp/track_recarm_auto.png differ diff --git a/ColorThemes/Ultraschall_2/black-tcp/track_recarm_auto_on.png b/ColorThemes/Ultraschall_2/black-tcp/track_recarm_auto_on.png new file mode 100644 index 0000000..0108254 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-tcp/track_recarm_auto_on.png differ diff --git a/ColorThemes/Ultraschall_2/black-tcp/track_recarm_off.png b/ColorThemes/Ultraschall_2/black-tcp/track_recarm_off.png new file mode 100644 index 0000000..60291d7 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-tcp/track_recarm_off.png differ diff --git a/ColorThemes/Ultraschall_2/black-tcp/track_recarm_on.png b/ColorThemes/Ultraschall_2/black-tcp/track_recarm_on.png new file mode 100644 index 0000000..0bd8c6e Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-tcp/track_recarm_on.png differ diff --git a/ColorThemes/Ultraschall_2/black-tcp/track_recmode_in.png b/ColorThemes/Ultraschall_2/black-tcp/track_recmode_in.png new file mode 100644 index 0000000..343372d Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-tcp/track_recmode_in.png differ diff --git a/ColorThemes/Ultraschall_2/black-tcp/track_recmode_off.png b/ColorThemes/Ultraschall_2/black-tcp/track_recmode_off.png new file mode 100644 index 0000000..3934294 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-tcp/track_recmode_off.png differ diff --git a/ColorThemes/Ultraschall_2/black-tcp/track_recmode_out.png b/ColorThemes/Ultraschall_2/black-tcp/track_recmode_out.png new file mode 100644 index 0000000..1218fe6 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-tcp/track_recmode_out.png differ diff --git a/ColorThemes/Ultraschall_2/black-tcp/track_solo_off.png b/ColorThemes/Ultraschall_2/black-tcp/track_solo_off.png new file mode 100644 index 0000000..302c0fa Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-tcp/track_solo_off.png differ diff --git a/ColorThemes/Ultraschall_2/black-tcp/track_solo_off2.png b/ColorThemes/Ultraschall_2/black-tcp/track_solo_off2.png new file mode 100644 index 0000000..ee9b0f9 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-tcp/track_solo_off2.png differ diff --git a/ColorThemes/Ultraschall_2/black-tcp/track_solo_on.png b/ColorThemes/Ultraschall_2/black-tcp/track_solo_on.png new file mode 100644 index 0000000..664dc1b Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-tcp/track_solo_on.png differ diff --git a/ColorThemes/Ultraschall_2/black-tcp/track_solo_on2.png b/ColorThemes/Ultraschall_2/black-tcp/track_solo_on2.png new file mode 100644 index 0000000..0a9e163 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-tcp/track_solo_on2.png differ diff --git a/ColorThemes/Ultraschall_2/black-tcp/track_solodefeat_on.png b/ColorThemes/Ultraschall_2/black-tcp/track_solodefeat_on.png new file mode 100644 index 0000000..2f97a64 Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-tcp/track_solodefeat_on.png differ diff --git a/ColorThemes/Ultraschall_2/black-tcp/track_stereo.png b/ColorThemes/Ultraschall_2/black-tcp/track_stereo.png new file mode 100644 index 0000000..c7bb68c Binary files /dev/null and b/ColorThemes/Ultraschall_2/black-tcp/track_stereo.png differ diff --git a/ColorThemes/Ultraschall_2/chain.png b/ColorThemes/Ultraschall_2/chain.png new file mode 100644 index 0000000..2480e9c Binary files /dev/null and b/ColorThemes/Ultraschall_2/chain.png differ diff --git a/ColorThemes/Ultraschall_2/color areas.rtf b/ColorThemes/Ultraschall_2/color areas.rtf new file mode 100644 index 0000000..97e7ff0 --- /dev/null +++ b/ColorThemes/Ultraschall_2/color areas.rtf @@ -0,0 +1,12 @@ +{\rtf1\ansi\ansicpg1252\cocoartf1404\cocoasubrtf410 +{\fonttbl\f0\fswiss\fcharset0 Helvetica;} +{\colortbl;\red255\green255\blue255;} +\paperw11900\paperh16840\margl1440\margr1440\vieww10800\viewh8400\viewkind0 +\pard\tx566\tx1133\tx1700\tx2267\tx2834\tx3401\tx3968\tx4535\tx5102\tx5669\tx6236\tx6803\pardirnatural\partightenfactor0 + +\f0\fs24 \cf0 Main window/transport background\ +Main window pane resize area\ +Toolbar frame when floating or docked\ +\ +Tab control selected tab\ +Tab control unselected tab} \ No newline at end of file diff --git a/ColorThemes/Ultraschall_2/composite_toolbar_overlay backup.png b/ColorThemes/Ultraschall_2/composite_toolbar_overlay backup.png new file mode 100644 index 0000000..0eb6aec Binary files /dev/null and b/ColorThemes/Ultraschall_2/composite_toolbar_overlay backup.png differ diff --git a/ColorThemes/Ultraschall_2/composite_toolbar_overlay.png b/ColorThemes/Ultraschall_2/composite_toolbar_overlay.png new file mode 100644 index 0000000..3e3157e Binary files /dev/null and b/ColorThemes/Ultraschall_2/composite_toolbar_overlay.png differ diff --git a/ColorThemes/Ultraschall_2/envcp_arm_off.png b/ColorThemes/Ultraschall_2/envcp_arm_off.png new file mode 100644 index 0000000..bcaf119 Binary files /dev/null and b/ColorThemes/Ultraschall_2/envcp_arm_off.png differ diff --git a/ColorThemes/Ultraschall_2/envcp_arm_on.png b/ColorThemes/Ultraschall_2/envcp_arm_on.png new file mode 100644 index 0000000..9443ee9 Binary files /dev/null and b/ColorThemes/Ultraschall_2/envcp_arm_on.png differ diff --git a/ColorThemes/Ultraschall_2/envcp_bg.png b/ColorThemes/Ultraschall_2/envcp_bg.png new file mode 100644 index 0000000..e92bf4f Binary files /dev/null and b/ColorThemes/Ultraschall_2/envcp_bg.png differ diff --git a/ColorThemes/Ultraschall_2/envcp_bgsel.png b/ColorThemes/Ultraschall_2/envcp_bgsel.png new file mode 100644 index 0000000..e92bf4f Binary files /dev/null and b/ColorThemes/Ultraschall_2/envcp_bgsel.png differ diff --git a/ColorThemes/Ultraschall_2/envcp_bypass_off.png b/ColorThemes/Ultraschall_2/envcp_bypass_off.png new file mode 100644 index 0000000..cb1d352 Binary files /dev/null and b/ColorThemes/Ultraschall_2/envcp_bypass_off.png differ diff --git a/ColorThemes/Ultraschall_2/envcp_bypass_off_old.png b/ColorThemes/Ultraschall_2/envcp_bypass_off_old.png new file mode 100644 index 0000000..b148791 Binary files /dev/null and b/ColorThemes/Ultraschall_2/envcp_bypass_off_old.png differ diff --git a/ColorThemes/Ultraschall_2/envcp_bypass_on.png b/ColorThemes/Ultraschall_2/envcp_bypass_on.png new file mode 100644 index 0000000..24e1400 Binary files /dev/null and b/ColorThemes/Ultraschall_2/envcp_bypass_on.png differ diff --git a/ColorThemes/Ultraschall_2/envcp_bypass_on_old.png b/ColorThemes/Ultraschall_2/envcp_bypass_on_old.png new file mode 100644 index 0000000..e534c35 Binary files /dev/null and b/ColorThemes/Ultraschall_2/envcp_bypass_on_old.png differ diff --git a/ColorThemes/Ultraschall_2/envcp_faderbg.png b/ColorThemes/Ultraschall_2/envcp_faderbg.png new file mode 100644 index 0000000..6762f81 Binary files /dev/null and b/ColorThemes/Ultraschall_2/envcp_faderbg.png differ diff --git a/ColorThemes/Ultraschall_2/envcp_hide.png b/ColorThemes/Ultraschall_2/envcp_hide.png new file mode 100644 index 0000000..f573c69 Binary files /dev/null and b/ColorThemes/Ultraschall_2/envcp_hide.png differ diff --git a/ColorThemes/Ultraschall_2/envcp_hide_old.png b/ColorThemes/Ultraschall_2/envcp_hide_old.png new file mode 100644 index 0000000..fee4aee Binary files /dev/null and b/ColorThemes/Ultraschall_2/envcp_hide_old.png differ diff --git a/ColorThemes/Ultraschall_2/envcp_learn.png b/ColorThemes/Ultraschall_2/envcp_learn.png new file mode 100644 index 0000000..1f2ea06 Binary files /dev/null and b/ColorThemes/Ultraschall_2/envcp_learn.png differ diff --git a/ColorThemes/Ultraschall_2/envcp_learn_on.png b/ColorThemes/Ultraschall_2/envcp_learn_on.png new file mode 100644 index 0000000..dc2d305 Binary files /dev/null and b/ColorThemes/Ultraschall_2/envcp_learn_on.png differ diff --git a/ColorThemes/Ultraschall_2/envcp_namebg.png b/ColorThemes/Ultraschall_2/envcp_namebg.png new file mode 100644 index 0000000..72b1a14 Binary files /dev/null and b/ColorThemes/Ultraschall_2/envcp_namebg.png differ diff --git a/ColorThemes/Ultraschall_2/envcp_parammod.png b/ColorThemes/Ultraschall_2/envcp_parammod.png new file mode 100644 index 0000000..55b66ff Binary files /dev/null and b/ColorThemes/Ultraschall_2/envcp_parammod.png differ diff --git a/ColorThemes/Ultraschall_2/envcp_parammod_on.png b/ColorThemes/Ultraschall_2/envcp_parammod_on.png new file mode 100644 index 0000000..e75c88f Binary files /dev/null and b/ColorThemes/Ultraschall_2/envcp_parammod_on.png differ diff --git a/ColorThemes/Ultraschall_2/folder_end.png b/ColorThemes/Ultraschall_2/folder_end.png new file mode 100644 index 0000000..c3dec9e Binary files /dev/null and b/ColorThemes/Ultraschall_2/folder_end.png differ diff --git a/ColorThemes/Ultraschall_2/folder_indent.png b/ColorThemes/Ultraschall_2/folder_indent.png new file mode 100644 index 0000000..eb0eb70 Binary files /dev/null and b/ColorThemes/Ultraschall_2/folder_indent.png differ diff --git a/ColorThemes/Ultraschall_2/folder_start.png b/ColorThemes/Ultraschall_2/folder_start.png new file mode 100644 index 0000000..60fbe46 Binary files /dev/null and b/ColorThemes/Ultraschall_2/folder_start.png differ diff --git a/ColorThemes/Ultraschall_2/gen_end.png b/ColorThemes/Ultraschall_2/gen_end.png new file mode 100644 index 0000000..76e4184 Binary files /dev/null and b/ColorThemes/Ultraschall_2/gen_end.png differ diff --git a/ColorThemes/Ultraschall_2/gen_env.png b/ColorThemes/Ultraschall_2/gen_env.png new file mode 100644 index 0000000..0ba4302 Binary files /dev/null and b/ColorThemes/Ultraschall_2/gen_env.png differ diff --git a/ColorThemes/Ultraschall_2/gen_env_latch.png b/ColorThemes/Ultraschall_2/gen_env_latch.png new file mode 100644 index 0000000..b3d506c Binary files /dev/null and b/ColorThemes/Ultraschall_2/gen_env_latch.png differ diff --git a/ColorThemes/Ultraschall_2/gen_env_read.png b/ColorThemes/Ultraschall_2/gen_env_read.png new file mode 100644 index 0000000..4f714f8 Binary files /dev/null and b/ColorThemes/Ultraschall_2/gen_env_read.png differ diff --git a/ColorThemes/Ultraschall_2/gen_env_touch.png b/ColorThemes/Ultraschall_2/gen_env_touch.png new file mode 100644 index 0000000..5ccab05 Binary files /dev/null and b/ColorThemes/Ultraschall_2/gen_env_touch.png differ diff --git a/ColorThemes/Ultraschall_2/gen_env_write.png b/ColorThemes/Ultraschall_2/gen_env_write.png new file mode 100644 index 0000000..34cfe69 Binary files /dev/null and b/ColorThemes/Ultraschall_2/gen_env_write.png differ diff --git a/ColorThemes/Ultraschall_2/gen_home.png b/ColorThemes/Ultraschall_2/gen_home.png new file mode 100644 index 0000000..2429d6f Binary files /dev/null and b/ColorThemes/Ultraschall_2/gen_home.png differ diff --git a/ColorThemes/Ultraschall_2/gen_io.png b/ColorThemes/Ultraschall_2/gen_io.png new file mode 100644 index 0000000..74a5ed4 Binary files /dev/null and b/ColorThemes/Ultraschall_2/gen_io.png differ diff --git a/ColorThemes/Ultraschall_2/gen_knob_bg_large.png b/ColorThemes/Ultraschall_2/gen_knob_bg_large.png new file mode 100644 index 0000000..5147b32 Binary files /dev/null and b/ColorThemes/Ultraschall_2/gen_knob_bg_large.png differ diff --git a/ColorThemes/Ultraschall_2/gen_knob_bg_small.png b/ColorThemes/Ultraschall_2/gen_knob_bg_small.png new file mode 100644 index 0000000..149e0d6 Binary files /dev/null and b/ColorThemes/Ultraschall_2/gen_knob_bg_small.png differ diff --git a/ColorThemes/Ultraschall_2/gen_midi_off.png b/ColorThemes/Ultraschall_2/gen_midi_off.png new file mode 100644 index 0000000..62c5d5a Binary files /dev/null and b/ColorThemes/Ultraschall_2/gen_midi_off.png differ diff --git a/ColorThemes/Ultraschall_2/gen_midi_on.png b/ColorThemes/Ultraschall_2/gen_midi_on.png new file mode 100644 index 0000000..f483ce6 Binary files /dev/null and b/ColorThemes/Ultraschall_2/gen_midi_on.png differ diff --git a/ColorThemes/Ultraschall_2/gen_mono.png b/ColorThemes/Ultraschall_2/gen_mono.png new file mode 100644 index 0000000..045e1be Binary files /dev/null and b/ColorThemes/Ultraschall_2/gen_mono.png differ diff --git a/ColorThemes/Ultraschall_2/gen_mute_off.png b/ColorThemes/Ultraschall_2/gen_mute_off.png new file mode 100644 index 0000000..47ff59e Binary files /dev/null and b/ColorThemes/Ultraschall_2/gen_mute_off.png differ diff --git a/ColorThemes/Ultraschall_2/gen_mute_on.png b/ColorThemes/Ultraschall_2/gen_mute_on.png new file mode 100644 index 0000000..1efa2e0 Binary files /dev/null and b/ColorThemes/Ultraschall_2/gen_mute_on.png differ diff --git a/ColorThemes/Ultraschall_2/gen_next.png b/ColorThemes/Ultraschall_2/gen_next.png new file mode 100644 index 0000000..bb11b05 Binary files /dev/null and b/ColorThemes/Ultraschall_2/gen_next.png differ diff --git a/ColorThemes/Ultraschall_2/gen_panbg_horz.png b/ColorThemes/Ultraschall_2/gen_panbg_horz.png new file mode 100644 index 0000000..0b98740 Binary files /dev/null and b/ColorThemes/Ultraschall_2/gen_panbg_horz.png differ diff --git a/ColorThemes/Ultraschall_2/gen_panthumb_horz.png b/ColorThemes/Ultraschall_2/gen_panthumb_horz.png new file mode 100644 index 0000000..9608f8e Binary files /dev/null and b/ColorThemes/Ultraschall_2/gen_panthumb_horz.png differ diff --git a/ColorThemes/Ultraschall_2/gen_pause.png b/ColorThemes/Ultraschall_2/gen_pause.png new file mode 100644 index 0000000..dc6c329 Binary files /dev/null and b/ColorThemes/Ultraschall_2/gen_pause.png differ diff --git a/ColorThemes/Ultraschall_2/gen_pause_on.png b/ColorThemes/Ultraschall_2/gen_pause_on.png new file mode 100644 index 0000000..c10dec3 Binary files /dev/null and b/ColorThemes/Ultraschall_2/gen_pause_on.png differ diff --git a/ColorThemes/Ultraschall_2/gen_phase_inv.png b/ColorThemes/Ultraschall_2/gen_phase_inv.png new file mode 100644 index 0000000..16f4c73 Binary files /dev/null and b/ColorThemes/Ultraschall_2/gen_phase_inv.png differ diff --git a/ColorThemes/Ultraschall_2/gen_phase_norm.png b/ColorThemes/Ultraschall_2/gen_phase_norm.png new file mode 100644 index 0000000..a5a9f13 Binary files /dev/null and b/ColorThemes/Ultraschall_2/gen_phase_norm.png differ diff --git a/ColorThemes/Ultraschall_2/gen_play.png b/ColorThemes/Ultraschall_2/gen_play.png new file mode 100644 index 0000000..725df21 Binary files /dev/null and b/ColorThemes/Ultraschall_2/gen_play.png differ diff --git a/ColorThemes/Ultraschall_2/gen_play_on.png b/ColorThemes/Ultraschall_2/gen_play_on.png new file mode 100644 index 0000000..1ffb2e0 Binary files /dev/null and b/ColorThemes/Ultraschall_2/gen_play_on.png differ diff --git a/ColorThemes/Ultraschall_2/gen_record.png b/ColorThemes/Ultraschall_2/gen_record.png new file mode 100644 index 0000000..c6dd724 Binary files /dev/null and b/ColorThemes/Ultraschall_2/gen_record.png differ diff --git a/ColorThemes/Ultraschall_2/gen_record_on.png b/ColorThemes/Ultraschall_2/gen_record_on.png new file mode 100644 index 0000000..b677cb0 Binary files /dev/null and b/ColorThemes/Ultraschall_2/gen_record_on.png differ diff --git a/ColorThemes/Ultraschall_2/gen_repeat_off.png b/ColorThemes/Ultraschall_2/gen_repeat_off.png new file mode 100644 index 0000000..7aedb23 Binary files /dev/null and b/ColorThemes/Ultraschall_2/gen_repeat_off.png differ diff --git a/ColorThemes/Ultraschall_2/gen_repeat_on.png b/ColorThemes/Ultraschall_2/gen_repeat_on.png new file mode 100644 index 0000000..326a254 Binary files /dev/null and b/ColorThemes/Ultraschall_2/gen_repeat_on.png differ diff --git a/ColorThemes/Ultraschall_2/gen_solo_off.png b/ColorThemes/Ultraschall_2/gen_solo_off.png new file mode 100644 index 0000000..e8bca7a Binary files /dev/null and b/ColorThemes/Ultraschall_2/gen_solo_off.png differ diff --git a/ColorThemes/Ultraschall_2/gen_solo_on.png b/ColorThemes/Ultraschall_2/gen_solo_on.png new file mode 100644 index 0000000..de387e0 Binary files /dev/null and b/ColorThemes/Ultraschall_2/gen_solo_on.png differ diff --git a/ColorThemes/Ultraschall_2/gen_stereo.png b/ColorThemes/Ultraschall_2/gen_stereo.png new file mode 100644 index 0000000..7c68312 Binary files /dev/null and b/ColorThemes/Ultraschall_2/gen_stereo.png differ diff --git a/ColorThemes/Ultraschall_2/gen_stop.png b/ColorThemes/Ultraschall_2/gen_stop.png new file mode 100644 index 0000000..da7d30f Binary files /dev/null and b/ColorThemes/Ultraschall_2/gen_stop.png differ diff --git a/ColorThemes/Ultraschall_2/gen_volbg_horz.png b/ColorThemes/Ultraschall_2/gen_volbg_horz.png new file mode 100644 index 0000000..52bbe0e Binary files /dev/null and b/ColorThemes/Ultraschall_2/gen_volbg_horz.png differ diff --git a/ColorThemes/Ultraschall_2/gen_volbg_vert.png b/ColorThemes/Ultraschall_2/gen_volbg_vert.png new file mode 100644 index 0000000..2be5d70 Binary files /dev/null and b/ColorThemes/Ultraschall_2/gen_volbg_vert.png differ diff --git a/ColorThemes/Ultraschall_2/gen_volthumb_horz.png b/ColorThemes/Ultraschall_2/gen_volthumb_horz.png new file mode 100644 index 0000000..5298d39 Binary files /dev/null and b/ColorThemes/Ultraschall_2/gen_volthumb_horz.png differ diff --git a/ColorThemes/Ultraschall_2/gen_volthumb_vert.png b/ColorThemes/Ultraschall_2/gen_volthumb_vert.png new file mode 100644 index 0000000..cab292c Binary files /dev/null and b/ColorThemes/Ultraschall_2/gen_volthumb_vert.png differ diff --git a/ColorThemes/Ultraschall_2/global_bypass.png b/ColorThemes/Ultraschall_2/global_bypass.png new file mode 100644 index 0000000..aa5c338 Binary files /dev/null and b/ColorThemes/Ultraschall_2/global_bypass.png differ diff --git a/ColorThemes/Ultraschall_2/global_latch.png b/ColorThemes/Ultraschall_2/global_latch.png new file mode 100644 index 0000000..71d044b Binary files /dev/null and b/ColorThemes/Ultraschall_2/global_latch.png differ diff --git a/ColorThemes/Ultraschall_2/global_off.png b/ColorThemes/Ultraschall_2/global_off.png new file mode 100644 index 0000000..0514546 Binary files /dev/null and b/ColorThemes/Ultraschall_2/global_off.png differ diff --git a/ColorThemes/Ultraschall_2/global_read.png b/ColorThemes/Ultraschall_2/global_read.png new file mode 100644 index 0000000..8d77d11 Binary files /dev/null and b/ColorThemes/Ultraschall_2/global_read.png differ diff --git a/ColorThemes/Ultraschall_2/global_touch.png b/ColorThemes/Ultraschall_2/global_touch.png new file mode 100644 index 0000000..42eaef5 Binary files /dev/null and b/ColorThemes/Ultraschall_2/global_touch.png differ diff --git a/ColorThemes/Ultraschall_2/global_trim.png b/ColorThemes/Ultraschall_2/global_trim.png new file mode 100644 index 0000000..d3ff453 Binary files /dev/null and b/ColorThemes/Ultraschall_2/global_trim.png differ diff --git a/ColorThemes/Ultraschall_2/global_write.png b/ColorThemes/Ultraschall_2/global_write.png new file mode 100644 index 0000000..57a87bd Binary files /dev/null and b/ColorThemes/Ultraschall_2/global_write.png differ diff --git a/ColorThemes/Ultraschall_2/item_bg Kopie.png b/ColorThemes/Ultraschall_2/item_bg Kopie.png new file mode 100644 index 0000000..9c838fa Binary files /dev/null and b/ColorThemes/Ultraschall_2/item_bg Kopie.png differ diff --git a/ColorThemes/Ultraschall_2/item_bg.png b/ColorThemes/Ultraschall_2/item_bg.png new file mode 100644 index 0000000..5b1ef42 Binary files /dev/null and b/ColorThemes/Ultraschall_2/item_bg.png differ diff --git a/ColorThemes/Ultraschall_2/item_bg_sel Kopie.png b/ColorThemes/Ultraschall_2/item_bg_sel Kopie.png new file mode 100644 index 0000000..a619776 Binary files /dev/null and b/ColorThemes/Ultraschall_2/item_bg_sel Kopie.png differ diff --git a/ColorThemes/Ultraschall_2/item_bg_sel.png b/ColorThemes/Ultraschall_2/item_bg_sel.png new file mode 100644 index 0000000..b008793 Binary files /dev/null and b/ColorThemes/Ultraschall_2/item_bg_sel.png differ diff --git a/ColorThemes/Ultraschall_2/item_bg_sel2.png b/ColorThemes/Ultraschall_2/item_bg_sel2.png new file mode 100644 index 0000000..9c838fa Binary files /dev/null and b/ColorThemes/Ultraschall_2/item_bg_sel2.png differ diff --git a/ColorThemes/Ultraschall_2/item_fx_off.png b/ColorThemes/Ultraschall_2/item_fx_off.png new file mode 100644 index 0000000..652357e Binary files /dev/null and b/ColorThemes/Ultraschall_2/item_fx_off.png differ diff --git a/ColorThemes/Ultraschall_2/item_fx_on.png b/ColorThemes/Ultraschall_2/item_fx_on.png new file mode 100644 index 0000000..ad22590 Binary files /dev/null and b/ColorThemes/Ultraschall_2/item_fx_on.png differ diff --git a/ColorThemes/Ultraschall_2/item_group.png b/ColorThemes/Ultraschall_2/item_group.png new file mode 100644 index 0000000..5257f8a Binary files /dev/null and b/ColorThemes/Ultraschall_2/item_group.png differ diff --git a/ColorThemes/Ultraschall_2/item_group_sel.png b/ColorThemes/Ultraschall_2/item_group_sel.png new file mode 100644 index 0000000..f176033 Binary files /dev/null and b/ColorThemes/Ultraschall_2/item_group_sel.png differ diff --git a/ColorThemes/Ultraschall_2/item_lock_off.png b/ColorThemes/Ultraschall_2/item_lock_off.png new file mode 100644 index 0000000..7d4c179 Binary files /dev/null and b/ColorThemes/Ultraschall_2/item_lock_off.png differ diff --git a/ColorThemes/Ultraschall_2/item_lock_on.png b/ColorThemes/Ultraschall_2/item_lock_on.png new file mode 100644 index 0000000..bf98858 Binary files /dev/null and b/ColorThemes/Ultraschall_2/item_lock_on.png differ diff --git a/ColorThemes/Ultraschall_2/item_mute_off.png b/ColorThemes/Ultraschall_2/item_mute_off.png new file mode 100644 index 0000000..18b49da Binary files /dev/null and b/ColorThemes/Ultraschall_2/item_mute_off.png differ diff --git a/ColorThemes/Ultraschall_2/item_mute_on.png b/ColorThemes/Ultraschall_2/item_mute_on.png new file mode 100644 index 0000000..4c521c3 Binary files /dev/null and b/ColorThemes/Ultraschall_2/item_mute_on.png differ diff --git a/ColorThemes/Ultraschall_2/item_note_off.png b/ColorThemes/Ultraschall_2/item_note_off.png new file mode 100644 index 0000000..fbd0976 Binary files /dev/null and b/ColorThemes/Ultraschall_2/item_note_off.png differ diff --git a/ColorThemes/Ultraschall_2/item_note_on.png b/ColorThemes/Ultraschall_2/item_note_on.png new file mode 100644 index 0000000..14e6c66 Binary files /dev/null and b/ColorThemes/Ultraschall_2/item_note_on.png differ diff --git a/ColorThemes/Ultraschall_2/item_props.png b/ColorThemes/Ultraschall_2/item_props.png new file mode 100644 index 0000000..f729f57 Binary files /dev/null and b/ColorThemes/Ultraschall_2/item_props.png differ diff --git a/ColorThemes/Ultraschall_2/item_props_on.png b/ColorThemes/Ultraschall_2/item_props_on.png new file mode 100644 index 0000000..78ee83c Binary files /dev/null and b/ColorThemes/Ultraschall_2/item_props_on.png differ diff --git a/ColorThemes/Ultraschall_2/item_volknob.png b/ColorThemes/Ultraschall_2/item_volknob.png new file mode 100644 index 0000000..7e1d2d8 Binary files /dev/null and b/ColorThemes/Ultraschall_2/item_volknob.png differ diff --git a/ColorThemes/Ultraschall_2/mcp_arrowbuttons_ud.png b/ColorThemes/Ultraschall_2/mcp_arrowbuttons_ud.png new file mode 100644 index 0000000..af13abf Binary files /dev/null and b/ColorThemes/Ultraschall_2/mcp_arrowbuttons_ud.png differ diff --git a/ColorThemes/Ultraschall_2/mcp_bg.png b/ColorThemes/Ultraschall_2/mcp_bg.png new file mode 100644 index 0000000..c59246d Binary files /dev/null and b/ColorThemes/Ultraschall_2/mcp_bg.png differ diff --git a/ColorThemes/Ultraschall_2/mcp_bgsel.png b/ColorThemes/Ultraschall_2/mcp_bgsel.png new file mode 100644 index 0000000..5e665fc Binary files /dev/null and b/ColorThemes/Ultraschall_2/mcp_bgsel.png differ diff --git a/ColorThemes/Ultraschall_2/mcp_env.png b/ColorThemes/Ultraschall_2/mcp_env.png new file mode 100644 index 0000000..69202b0 Binary files /dev/null and b/ColorThemes/Ultraschall_2/mcp_env.png differ diff --git a/ColorThemes/Ultraschall_2/mcp_env_latch.png b/ColorThemes/Ultraschall_2/mcp_env_latch.png new file mode 100644 index 0000000..95c7f3d Binary files /dev/null and b/ColorThemes/Ultraschall_2/mcp_env_latch.png differ diff --git a/ColorThemes/Ultraschall_2/mcp_env_read.png b/ColorThemes/Ultraschall_2/mcp_env_read.png new file mode 100644 index 0000000..5024bf4 Binary files /dev/null and b/ColorThemes/Ultraschall_2/mcp_env_read.png differ diff --git a/ColorThemes/Ultraschall_2/mcp_env_touch.png b/ColorThemes/Ultraschall_2/mcp_env_touch.png new file mode 100644 index 0000000..c58abfa Binary files /dev/null and b/ColorThemes/Ultraschall_2/mcp_env_touch.png differ diff --git a/ColorThemes/Ultraschall_2/mcp_env_write.png b/ColorThemes/Ultraschall_2/mcp_env_write.png new file mode 100644 index 0000000..386d0aa Binary files /dev/null and b/ColorThemes/Ultraschall_2/mcp_env_write.png differ diff --git a/ColorThemes/Ultraschall_2/mcp_extmixbg.png b/ColorThemes/Ultraschall_2/mcp_extmixbg.png new file mode 100644 index 0000000..27e1b7c Binary files /dev/null and b/ColorThemes/Ultraschall_2/mcp_extmixbg.png differ diff --git a/ColorThemes/Ultraschall_2/mcp_fcomp_off.png b/ColorThemes/Ultraschall_2/mcp_fcomp_off.png new file mode 100644 index 0000000..9df5253 Binary files /dev/null and b/ColorThemes/Ultraschall_2/mcp_fcomp_off.png differ diff --git a/ColorThemes/Ultraschall_2/mcp_fcomp_tiny.png b/ColorThemes/Ultraschall_2/mcp_fcomp_tiny.png new file mode 100644 index 0000000..49c0d2e Binary files /dev/null and b/ColorThemes/Ultraschall_2/mcp_fcomp_tiny.png differ diff --git a/ColorThemes/Ultraschall_2/mcp_folder_last.png b/ColorThemes/Ultraschall_2/mcp_folder_last.png new file mode 100644 index 0000000..619fb89 Binary files /dev/null and b/ColorThemes/Ultraschall_2/mcp_folder_last.png differ diff --git a/ColorThemes/Ultraschall_2/mcp_fx_dis.png b/ColorThemes/Ultraschall_2/mcp_fx_dis.png new file mode 100644 index 0000000..0a2fd65 Binary files /dev/null and b/ColorThemes/Ultraschall_2/mcp_fx_dis.png differ diff --git a/ColorThemes/Ultraschall_2/mcp_fx_empty.png b/ColorThemes/Ultraschall_2/mcp_fx_empty.png new file mode 100644 index 0000000..584bfd3 Binary files /dev/null and b/ColorThemes/Ultraschall_2/mcp_fx_empty.png differ diff --git a/ColorThemes/Ultraschall_2/mcp_fx_empty_.png b/ColorThemes/Ultraschall_2/mcp_fx_empty_.png new file mode 100644 index 0000000..3307607 Binary files /dev/null and b/ColorThemes/Ultraschall_2/mcp_fx_empty_.png differ diff --git a/ColorThemes/Ultraschall_2/mcp_fx_in_empty.png b/ColorThemes/Ultraschall_2/mcp_fx_in_empty.png new file mode 100644 index 0000000..de30815 Binary files /dev/null and b/ColorThemes/Ultraschall_2/mcp_fx_in_empty.png differ diff --git a/ColorThemes/Ultraschall_2/mcp_fx_in_norm.png b/ColorThemes/Ultraschall_2/mcp_fx_in_norm.png new file mode 100644 index 0000000..34d2c89 Binary files /dev/null and b/ColorThemes/Ultraschall_2/mcp_fx_in_norm.png differ diff --git a/ColorThemes/Ultraschall_2/mcp_fx_norm.png b/ColorThemes/Ultraschall_2/mcp_fx_norm.png new file mode 100644 index 0000000..8512337 Binary files /dev/null and b/ColorThemes/Ultraschall_2/mcp_fx_norm.png differ diff --git a/ColorThemes/Ultraschall_2/mcp_fxlist_arrows.png b/ColorThemes/Ultraschall_2/mcp_fxlist_arrows.png new file mode 100644 index 0000000..f88a084 Binary files /dev/null and b/ColorThemes/Ultraschall_2/mcp_fxlist_arrows.png differ diff --git a/ColorThemes/Ultraschall_2/mcp_fxlist_bg.png b/ColorThemes/Ultraschall_2/mcp_fxlist_bg.png new file mode 100644 index 0000000..4a63421 Binary files /dev/null and b/ColorThemes/Ultraschall_2/mcp_fxlist_bg.png differ diff --git a/ColorThemes/Ultraschall_2/mcp_fxlist_byp.png b/ColorThemes/Ultraschall_2/mcp_fxlist_byp.png new file mode 100644 index 0000000..608cb8b Binary files /dev/null and b/ColorThemes/Ultraschall_2/mcp_fxlist_byp.png differ diff --git a/ColorThemes/Ultraschall_2/mcp_fxlist_empty.png b/ColorThemes/Ultraschall_2/mcp_fxlist_empty.png new file mode 100644 index 0000000..7a222ff Binary files /dev/null and b/ColorThemes/Ultraschall_2/mcp_fxlist_empty.png differ diff --git a/ColorThemes/Ultraschall_2/mcp_fxlist_norm.png b/ColorThemes/Ultraschall_2/mcp_fxlist_norm.png new file mode 100644 index 0000000..88f16e7 Binary files /dev/null and b/ColorThemes/Ultraschall_2/mcp_fxlist_norm.png differ diff --git a/ColorThemes/Ultraschall_2/mcp_fxlist_off.png b/ColorThemes/Ultraschall_2/mcp_fxlist_off.png new file mode 100644 index 0000000..608cb8b Binary files /dev/null and b/ColorThemes/Ultraschall_2/mcp_fxlist_off.png differ diff --git a/ColorThemes/Ultraschall_2/mcp_fxparm_arrows.png b/ColorThemes/Ultraschall_2/mcp_fxparm_arrows.png new file mode 100644 index 0000000..2b560c6 Binary files /dev/null and b/ColorThemes/Ultraschall_2/mcp_fxparm_arrows.png differ diff --git a/ColorThemes/Ultraschall_2/mcp_fxparm_bg.png b/ColorThemes/Ultraschall_2/mcp_fxparm_bg.png new file mode 100644 index 0000000..9da5417 Binary files /dev/null and b/ColorThemes/Ultraschall_2/mcp_fxparm_bg.png differ diff --git a/ColorThemes/Ultraschall_2/mcp_fxparm_byp.png b/ColorThemes/Ultraschall_2/mcp_fxparm_byp.png new file mode 100644 index 0000000..01d5c3c Binary files /dev/null and b/ColorThemes/Ultraschall_2/mcp_fxparm_byp.png differ diff --git a/ColorThemes/Ultraschall_2/mcp_fxparm_empty.png b/ColorThemes/Ultraschall_2/mcp_fxparm_empty.png new file mode 100644 index 0000000..b1dfe5c Binary files /dev/null and b/ColorThemes/Ultraschall_2/mcp_fxparm_empty.png differ diff --git a/ColorThemes/Ultraschall_2/mcp_fxparm_knob.png b/ColorThemes/Ultraschall_2/mcp_fxparm_knob.png new file mode 100644 index 0000000..b8cec3a Binary files /dev/null and b/ColorThemes/Ultraschall_2/mcp_fxparm_knob.png differ diff --git a/ColorThemes/Ultraschall_2/mcp_fxparm_knob_bg.png b/ColorThemes/Ultraschall_2/mcp_fxparm_knob_bg.png new file mode 100644 index 0000000..c6f21a1 Binary files /dev/null and b/ColorThemes/Ultraschall_2/mcp_fxparm_knob_bg.png differ diff --git a/ColorThemes/Ultraschall_2/mcp_fxparm_norm.png b/ColorThemes/Ultraschall_2/mcp_fxparm_norm.png new file mode 100644 index 0000000..0d18f30 Binary files /dev/null and b/ColorThemes/Ultraschall_2/mcp_fxparm_norm.png differ diff --git a/ColorThemes/Ultraschall_2/mcp_fxparm_off.png b/ColorThemes/Ultraschall_2/mcp_fxparm_off.png new file mode 100644 index 0000000..01d5c3c Binary files /dev/null and b/ColorThemes/Ultraschall_2/mcp_fxparm_off.png differ diff --git a/ColorThemes/Ultraschall_2/mcp_iconbg.png b/ColorThemes/Ultraschall_2/mcp_iconbg.png new file mode 100644 index 0000000..85b2466 Binary files /dev/null and b/ColorThemes/Ultraschall_2/mcp_iconbg.png differ diff --git a/ColorThemes/Ultraschall_2/mcp_iconbgsel.png b/ColorThemes/Ultraschall_2/mcp_iconbgsel.png new file mode 100644 index 0000000..2adf77d Binary files /dev/null and b/ColorThemes/Ultraschall_2/mcp_iconbgsel.png differ diff --git a/ColorThemes/Ultraschall_2/mcp_idxbg_sel.png b/ColorThemes/Ultraschall_2/mcp_idxbg_sel.png new file mode 100644 index 0000000..fa4f2f0 Binary files /dev/null and b/ColorThemes/Ultraschall_2/mcp_idxbg_sel.png differ diff --git a/ColorThemes/Ultraschall_2/mcp_io.png b/ColorThemes/Ultraschall_2/mcp_io.png new file mode 100644 index 0000000..dcffddd Binary files /dev/null and b/ColorThemes/Ultraschall_2/mcp_io.png differ diff --git a/ColorThemes/Ultraschall_2/mcp_io_dis.png b/ColorThemes/Ultraschall_2/mcp_io_dis.png new file mode 100644 index 0000000..f3c09c9 Binary files /dev/null and b/ColorThemes/Ultraschall_2/mcp_io_dis.png differ diff --git a/ColorThemes/Ultraschall_2/mcp_io_r.png b/ColorThemes/Ultraschall_2/mcp_io_r.png new file mode 100644 index 0000000..c902a81 Binary files /dev/null and b/ColorThemes/Ultraschall_2/mcp_io_r.png differ diff --git a/ColorThemes/Ultraschall_2/mcp_io_r_dis.png b/ColorThemes/Ultraschall_2/mcp_io_r_dis.png new file mode 100644 index 0000000..def97b3 Binary files /dev/null and b/ColorThemes/Ultraschall_2/mcp_io_r_dis.png differ diff --git a/ColorThemes/Ultraschall_2/mcp_io_s.png b/ColorThemes/Ultraschall_2/mcp_io_s.png new file mode 100644 index 0000000..fa8c4b1 Binary files /dev/null and b/ColorThemes/Ultraschall_2/mcp_io_s.png differ diff --git a/ColorThemes/Ultraschall_2/mcp_io_s_dis.png b/ColorThemes/Ultraschall_2/mcp_io_s_dis.png new file mode 100644 index 0000000..6cb5e8e Binary files /dev/null and b/ColorThemes/Ultraschall_2/mcp_io_s_dis.png differ diff --git a/ColorThemes/Ultraschall_2/mcp_io_s_r.png b/ColorThemes/Ultraschall_2/mcp_io_s_r.png new file mode 100644 index 0000000..3101388 Binary files /dev/null and b/ColorThemes/Ultraschall_2/mcp_io_s_r.png differ diff --git a/ColorThemes/Ultraschall_2/mcp_io_s_r_dis.png b/ColorThemes/Ultraschall_2/mcp_io_s_r_dis.png new file mode 100644 index 0000000..23bad82 Binary files /dev/null and b/ColorThemes/Ultraschall_2/mcp_io_s_r_dis.png differ diff --git a/ColorThemes/Ultraschall_2/mcp_main_namebg_sel.png b/ColorThemes/Ultraschall_2/mcp_main_namebg_sel.png new file mode 100644 index 0000000..fa4f2f0 Binary files /dev/null and b/ColorThemes/Ultraschall_2/mcp_main_namebg_sel.png differ diff --git a/ColorThemes/Ultraschall_2/mcp_mainbg.png b/ColorThemes/Ultraschall_2/mcp_mainbg.png new file mode 100644 index 0000000..73fbaa2 Binary files /dev/null and b/ColorThemes/Ultraschall_2/mcp_mainbg.png differ diff --git a/ColorThemes/Ultraschall_2/mcp_mainbgsel.png b/ColorThemes/Ultraschall_2/mcp_mainbgsel.png new file mode 100644 index 0000000..c442179 Binary files /dev/null and b/ColorThemes/Ultraschall_2/mcp_mainbgsel.png differ diff --git a/ColorThemes/Ultraschall_2/mcp_monitor_auto.png b/ColorThemes/Ultraschall_2/mcp_monitor_auto.png new file mode 100644 index 0000000..fb7c179 Binary files /dev/null and b/ColorThemes/Ultraschall_2/mcp_monitor_auto.png differ diff --git a/ColorThemes/Ultraschall_2/mcp_monitor_off.png b/ColorThemes/Ultraschall_2/mcp_monitor_off.png new file mode 100644 index 0000000..1587609 Binary files /dev/null and b/ColorThemes/Ultraschall_2/mcp_monitor_off.png differ diff --git a/ColorThemes/Ultraschall_2/mcp_monitor_on.png b/ColorThemes/Ultraschall_2/mcp_monitor_on.png new file mode 100644 index 0000000..b32052a Binary files /dev/null and b/ColorThemes/Ultraschall_2/mcp_monitor_on.png differ diff --git a/ColorThemes/Ultraschall_2/mcp_mono.png b/ColorThemes/Ultraschall_2/mcp_mono.png new file mode 100644 index 0000000..c7dc7b8 Binary files /dev/null and b/ColorThemes/Ultraschall_2/mcp_mono.png differ diff --git a/ColorThemes/Ultraschall_2/mcp_mute_off.png b/ColorThemes/Ultraschall_2/mcp_mute_off.png new file mode 100644 index 0000000..eb770ef Binary files /dev/null and b/ColorThemes/Ultraschall_2/mcp_mute_off.png differ diff --git a/ColorThemes/Ultraschall_2/mcp_namebg.png b/ColorThemes/Ultraschall_2/mcp_namebg.png new file mode 100644 index 0000000..adebe94 Binary files /dev/null and b/ColorThemes/Ultraschall_2/mcp_namebg.png differ diff --git a/ColorThemes/Ultraschall_2/mcp_pan_knob_large.png b/ColorThemes/Ultraschall_2/mcp_pan_knob_large.png new file mode 100644 index 0000000..303ee6f Binary files /dev/null and b/ColorThemes/Ultraschall_2/mcp_pan_knob_large.png differ diff --git a/ColorThemes/Ultraschall_2/mcp_pan_knob_small.png b/ColorThemes/Ultraschall_2/mcp_pan_knob_small.png new file mode 100644 index 0000000..a09087d Binary files /dev/null and b/ColorThemes/Ultraschall_2/mcp_pan_knob_small.png differ diff --git a/ColorThemes/Ultraschall_2/mcp_pan_label.png b/ColorThemes/Ultraschall_2/mcp_pan_label.png new file mode 100644 index 0000000..2a6b526 Binary files /dev/null and b/ColorThemes/Ultraschall_2/mcp_pan_label.png differ diff --git a/ColorThemes/Ultraschall_2/mcp_panbg.png b/ColorThemes/Ultraschall_2/mcp_panbg.png new file mode 100644 index 0000000..adebe94 Binary files /dev/null and b/ColorThemes/Ultraschall_2/mcp_panbg.png differ diff --git a/ColorThemes/Ultraschall_2/mcp_panbg_vert.png b/ColorThemes/Ultraschall_2/mcp_panbg_vert.png new file mode 100644 index 0000000..adebe94 Binary files /dev/null and b/ColorThemes/Ultraschall_2/mcp_panbg_vert.png differ diff --git a/ColorThemes/Ultraschall_2/mcp_phase_norm.png b/ColorThemes/Ultraschall_2/mcp_phase_norm.png new file mode 100644 index 0000000..cc2e552 Binary files /dev/null and b/ColorThemes/Ultraschall_2/mcp_phase_norm.png differ diff --git a/ColorThemes/Ultraschall_2/mcp_recarm_auto.png b/ColorThemes/Ultraschall_2/mcp_recarm_auto.png new file mode 100644 index 0000000..b2616aa Binary files /dev/null and b/ColorThemes/Ultraschall_2/mcp_recarm_auto.png differ diff --git a/ColorThemes/Ultraschall_2/mcp_recarm_auto_on.png b/ColorThemes/Ultraschall_2/mcp_recarm_auto_on.png new file mode 100644 index 0000000..86d5add Binary files /dev/null and b/ColorThemes/Ultraschall_2/mcp_recarm_auto_on.png differ diff --git a/ColorThemes/Ultraschall_2/mcp_recarm_off.png b/ColorThemes/Ultraschall_2/mcp_recarm_off.png new file mode 100644 index 0000000..8232684 Binary files /dev/null and b/ColorThemes/Ultraschall_2/mcp_recarm_off.png differ diff --git a/ColorThemes/Ultraschall_2/mcp_recarm_on.png b/ColorThemes/Ultraschall_2/mcp_recarm_on.png new file mode 100644 index 0000000..f280693 Binary files /dev/null and b/ColorThemes/Ultraschall_2/mcp_recarm_on.png differ diff --git a/ColorThemes/Ultraschall_2/mcp_recinput.png b/ColorThemes/Ultraschall_2/mcp_recinput.png new file mode 100644 index 0000000..96a28bb Binary files /dev/null and b/ColorThemes/Ultraschall_2/mcp_recinput.png differ diff --git a/ColorThemes/Ultraschall_2/mcp_recmode_in.png b/ColorThemes/Ultraschall_2/mcp_recmode_in.png new file mode 100644 index 0000000..42454eb Binary files /dev/null and b/ColorThemes/Ultraschall_2/mcp_recmode_in.png differ diff --git a/ColorThemes/Ultraschall_2/mcp_recmode_off.png b/ColorThemes/Ultraschall_2/mcp_recmode_off.png new file mode 100644 index 0000000..1fab68b Binary files /dev/null and b/ColorThemes/Ultraschall_2/mcp_recmode_off.png differ diff --git a/ColorThemes/Ultraschall_2/mcp_recmode_out.png b/ColorThemes/Ultraschall_2/mcp_recmode_out.png new file mode 100644 index 0000000..ce163d7 Binary files /dev/null and b/ColorThemes/Ultraschall_2/mcp_recmode_out.png differ diff --git a/ColorThemes/Ultraschall_2/mcp_sendlist_arrows.png b/ColorThemes/Ultraschall_2/mcp_sendlist_arrows.png new file mode 100644 index 0000000..7b0c445 Binary files /dev/null and b/ColorThemes/Ultraschall_2/mcp_sendlist_arrows.png differ diff --git a/ColorThemes/Ultraschall_2/mcp_sendlist_bg.png b/ColorThemes/Ultraschall_2/mcp_sendlist_bg.png new file mode 100644 index 0000000..7efdc63 Binary files /dev/null and b/ColorThemes/Ultraschall_2/mcp_sendlist_bg.png differ diff --git a/ColorThemes/Ultraschall_2/mcp_sendlist_empty.png b/ColorThemes/Ultraschall_2/mcp_sendlist_empty.png new file mode 100644 index 0000000..39404eb Binary files /dev/null and b/ColorThemes/Ultraschall_2/mcp_sendlist_empty.png differ diff --git a/ColorThemes/Ultraschall_2/mcp_sendlist_knob.png b/ColorThemes/Ultraschall_2/mcp_sendlist_knob.png new file mode 100644 index 0000000..ccf49a0 Binary files /dev/null and b/ColorThemes/Ultraschall_2/mcp_sendlist_knob.png differ diff --git a/ColorThemes/Ultraschall_2/mcp_sendlist_knob_bg.png b/ColorThemes/Ultraschall_2/mcp_sendlist_knob_bg.png new file mode 100644 index 0000000..20dca2d Binary files /dev/null and b/ColorThemes/Ultraschall_2/mcp_sendlist_knob_bg.png differ diff --git a/ColorThemes/Ultraschall_2/mcp_sendlist_meter.png b/ColorThemes/Ultraschall_2/mcp_sendlist_meter.png new file mode 100644 index 0000000..93fbd5b Binary files /dev/null and b/ColorThemes/Ultraschall_2/mcp_sendlist_meter.png differ diff --git a/ColorThemes/Ultraschall_2/mcp_sendlist_mute.png b/ColorThemes/Ultraschall_2/mcp_sendlist_mute.png new file mode 100644 index 0000000..4754274 Binary files /dev/null and b/ColorThemes/Ultraschall_2/mcp_sendlist_mute.png differ diff --git a/ColorThemes/Ultraschall_2/mcp_sendlist_norm.png b/ColorThemes/Ultraschall_2/mcp_sendlist_norm.png new file mode 100644 index 0000000..23c7fde Binary files /dev/null and b/ColorThemes/Ultraschall_2/mcp_sendlist_norm.png differ diff --git a/ColorThemes/Ultraschall_2/mcp_solo_off.png b/ColorThemes/Ultraschall_2/mcp_solo_off.png new file mode 100644 index 0000000..4ce0dca Binary files /dev/null and b/ColorThemes/Ultraschall_2/mcp_solo_off.png differ diff --git a/ColorThemes/Ultraschall_2/mcp_solodefeat_on.png b/ColorThemes/Ultraschall_2/mcp_solodefeat_on.png new file mode 100644 index 0000000..87dadb5 Binary files /dev/null and b/ColorThemes/Ultraschall_2/mcp_solodefeat_on.png differ diff --git a/ColorThemes/Ultraschall_2/mcp_stereo.png b/ColorThemes/Ultraschall_2/mcp_stereo.png new file mode 100644 index 0000000..d71dc10 Binary files /dev/null and b/ColorThemes/Ultraschall_2/mcp_stereo.png differ diff --git a/ColorThemes/Ultraschall_2/mcp_vol_knob_small.png b/ColorThemes/Ultraschall_2/mcp_vol_knob_small.png new file mode 100644 index 0000000..f9f1527 Binary files /dev/null and b/ColorThemes/Ultraschall_2/mcp_vol_knob_small.png differ diff --git a/ColorThemes/Ultraschall_2/mcp_vol_label.png b/ColorThemes/Ultraschall_2/mcp_vol_label.png new file mode 100644 index 0000000..97f8718 Binary files /dev/null and b/ColorThemes/Ultraschall_2/mcp_vol_label.png differ diff --git a/ColorThemes/Ultraschall_2/mcp_volbg.png b/ColorThemes/Ultraschall_2/mcp_volbg.png new file mode 100644 index 0000000..8aaeb4f Binary files /dev/null and b/ColorThemes/Ultraschall_2/mcp_volbg.png differ diff --git a/ColorThemes/Ultraschall_2/mcp_volbg_horz.png b/ColorThemes/Ultraschall_2/mcp_volbg_horz.png new file mode 100644 index 0000000..adebe94 Binary files /dev/null and b/ColorThemes/Ultraschall_2/mcp_volbg_horz.png differ diff --git a/ColorThemes/Ultraschall_2/mcp_volthumb.png b/ColorThemes/Ultraschall_2/mcp_volthumb.png new file mode 100644 index 0000000..b2d6695 Binary files /dev/null and b/ColorThemes/Ultraschall_2/mcp_volthumb.png differ diff --git a/ColorThemes/Ultraschall_2/mcp_volthumb_.png b/ColorThemes/Ultraschall_2/mcp_volthumb_.png new file mode 100644 index 0000000..fab4384 Binary files /dev/null and b/ColorThemes/Ultraschall_2/mcp_volthumb_.png differ diff --git a/ColorThemes/Ultraschall_2/mcp_width_knob_small.png b/ColorThemes/Ultraschall_2/mcp_width_knob_small.png new file mode 100644 index 0000000..b168537 Binary files /dev/null and b/ColorThemes/Ultraschall_2/mcp_width_knob_small.png differ diff --git a/ColorThemes/Ultraschall_2/mcp_widthbg.png b/ColorThemes/Ultraschall_2/mcp_widthbg.png new file mode 100644 index 0000000..32ddb0d Binary files /dev/null and b/ColorThemes/Ultraschall_2/mcp_widthbg.png differ diff --git a/ColorThemes/Ultraschall_2/meter_bg_h.png b/ColorThemes/Ultraschall_2/meter_bg_h.png new file mode 100644 index 0000000..2bc2891 Binary files /dev/null and b/ColorThemes/Ultraschall_2/meter_bg_h.png differ diff --git a/ColorThemes/Ultraschall_2/meter_bg_h_tcp.png b/ColorThemes/Ultraschall_2/meter_bg_h_tcp.png new file mode 100644 index 0000000..ab371f9 Binary files /dev/null and b/ColorThemes/Ultraschall_2/meter_bg_h_tcp.png differ diff --git a/ColorThemes/Ultraschall_2/meter_bg_mcp.png b/ColorThemes/Ultraschall_2/meter_bg_mcp.png new file mode 100644 index 0000000..4bc0fd3 Binary files /dev/null and b/ColorThemes/Ultraschall_2/meter_bg_mcp.png differ diff --git a/ColorThemes/Ultraschall_2/meter_bg_mcp_master.png b/ColorThemes/Ultraschall_2/meter_bg_mcp_master.png new file mode 100644 index 0000000..07eb746 Binary files /dev/null and b/ColorThemes/Ultraschall_2/meter_bg_mcp_master.png differ diff --git a/ColorThemes/Ultraschall_2/meter_bg_mcp_v.png b/ColorThemes/Ultraschall_2/meter_bg_mcp_v.png new file mode 100644 index 0000000..89e1788 Binary files /dev/null and b/ColorThemes/Ultraschall_2/meter_bg_mcp_v.png differ diff --git a/ColorThemes/Ultraschall_2/meter_bg_tcp.png b/ColorThemes/Ultraschall_2/meter_bg_tcp.png new file mode 100644 index 0000000..946fed5 Binary files /dev/null and b/ColorThemes/Ultraschall_2/meter_bg_tcp.png differ diff --git a/ColorThemes/Ultraschall_2/meter_bg_tcp_h.png b/ColorThemes/Ultraschall_2/meter_bg_tcp_h.png new file mode 100644 index 0000000..6a5c9d2 Binary files /dev/null and b/ColorThemes/Ultraschall_2/meter_bg_tcp_h.png differ diff --git a/ColorThemes/Ultraschall_2/meter_bg_v2.png b/ColorThemes/Ultraschall_2/meter_bg_v2.png new file mode 100644 index 0000000..3a3aeae Binary files /dev/null and b/ColorThemes/Ultraschall_2/meter_bg_v2.png differ diff --git a/ColorThemes/Ultraschall_2/meter_bg_v_mcp.png b/ColorThemes/Ultraschall_2/meter_bg_v_mcp.png new file mode 100644 index 0000000..ab0e0bd Binary files /dev/null and b/ColorThemes/Ultraschall_2/meter_bg_v_mcp.png differ diff --git a/ColorThemes/Ultraschall_2/meter_clip_h.png b/ColorThemes/Ultraschall_2/meter_clip_h.png new file mode 100644 index 0000000..c3b76c8 Binary files /dev/null and b/ColorThemes/Ultraschall_2/meter_clip_h.png differ diff --git a/ColorThemes/Ultraschall_2/meter_clip_v.png b/ColorThemes/Ultraschall_2/meter_clip_v.png new file mode 100644 index 0000000..6239239 Binary files /dev/null and b/ColorThemes/Ultraschall_2/meter_clip_v.png differ diff --git a/ColorThemes/Ultraschall_2/meter_clip_v_rms2.png b/ColorThemes/Ultraschall_2/meter_clip_v_rms2.png new file mode 100644 index 0000000..3805dfa Binary files /dev/null and b/ColorThemes/Ultraschall_2/meter_clip_v_rms2.png differ diff --git a/ColorThemes/Ultraschall_2/meter_clip_v_rms3.png b/ColorThemes/Ultraschall_2/meter_clip_v_rms3.png new file mode 100644 index 0000000..eebb37f Binary files /dev/null and b/ColorThemes/Ultraschall_2/meter_clip_v_rms3.png differ diff --git a/ColorThemes/Ultraschall_2/meter_foldermute.png b/ColorThemes/Ultraschall_2/meter_foldermute.png new file mode 100644 index 0000000..c7ef040 Binary files /dev/null and b/ColorThemes/Ultraschall_2/meter_foldermute.png differ diff --git a/ColorThemes/Ultraschall_2/meter_mute.png b/ColorThemes/Ultraschall_2/meter_mute.png new file mode 100644 index 0000000..7d4c03c Binary files /dev/null and b/ColorThemes/Ultraschall_2/meter_mute.png differ diff --git a/ColorThemes/Ultraschall_2/meter_solodim.png b/ColorThemes/Ultraschall_2/meter_solodim.png new file mode 100644 index 0000000..6b66650 Binary files /dev/null and b/ColorThemes/Ultraschall_2/meter_solodim.png differ diff --git a/ColorThemes/Ultraschall_2/meter_strip_h.png b/ColorThemes/Ultraschall_2/meter_strip_h.png new file mode 100644 index 0000000..566c2f6 Binary files /dev/null and b/ColorThemes/Ultraschall_2/meter_strip_h.png differ diff --git a/ColorThemes/Ultraschall_2/meter_strip_v.old.png b/ColorThemes/Ultraschall_2/meter_strip_v.old.png new file mode 100644 index 0000000..f8978b2 Binary files /dev/null and b/ColorThemes/Ultraschall_2/meter_strip_v.old.png differ diff --git a/ColorThemes/Ultraschall_2/meter_strip_v.png b/ColorThemes/Ultraschall_2/meter_strip_v.png new file mode 100644 index 0000000..afbc341 Binary files /dev/null and b/ColorThemes/Ultraschall_2/meter_strip_v.png differ diff --git a/ColorThemes/Ultraschall_2/meter_strip_v_rms.png b/ColorThemes/Ultraschall_2/meter_strip_v_rms.png new file mode 100644 index 0000000..c57c916 Binary files /dev/null and b/ColorThemes/Ultraschall_2/meter_strip_v_rms.png differ diff --git a/ColorThemes/Ultraschall_2/meter_unsolo.png b/ColorThemes/Ultraschall_2/meter_unsolo.png new file mode 100644 index 0000000..a0cb725 Binary files /dev/null and b/ColorThemes/Ultraschall_2/meter_unsolo.png differ diff --git a/ColorThemes/Ultraschall_2/midi_inline_ccwithitems_off.png b/ColorThemes/Ultraschall_2/midi_inline_ccwithitems_off.png new file mode 100644 index 0000000..833d3fa Binary files /dev/null and b/ColorThemes/Ultraschall_2/midi_inline_ccwithitems_off.png differ diff --git a/ColorThemes/Ultraschall_2/midi_inline_ccwithitems_on.png b/ColorThemes/Ultraschall_2/midi_inline_ccwithitems_on.png new file mode 100644 index 0000000..e0ef13f Binary files /dev/null and b/ColorThemes/Ultraschall_2/midi_inline_ccwithitems_on.png differ diff --git a/ColorThemes/Ultraschall_2/midi_inline_close.png b/ColorThemes/Ultraschall_2/midi_inline_close.png new file mode 100644 index 0000000..aaef41f Binary files /dev/null and b/ColorThemes/Ultraschall_2/midi_inline_close.png differ diff --git a/ColorThemes/Ultraschall_2/midi_inline_fold_none.png b/ColorThemes/Ultraschall_2/midi_inline_fold_none.png new file mode 100644 index 0000000..dd94cd5 Binary files /dev/null and b/ColorThemes/Ultraschall_2/midi_inline_fold_none.png differ diff --git a/ColorThemes/Ultraschall_2/midi_inline_fold_unnamed.png b/ColorThemes/Ultraschall_2/midi_inline_fold_unnamed.png new file mode 100644 index 0000000..0e956d7 Binary files /dev/null and b/ColorThemes/Ultraschall_2/midi_inline_fold_unnamed.png differ diff --git a/ColorThemes/Ultraschall_2/midi_inline_fold_unused_unnamed.png b/ColorThemes/Ultraschall_2/midi_inline_fold_unused_unnamed.png new file mode 100644 index 0000000..2f7a6d1 Binary files /dev/null and b/ColorThemes/Ultraschall_2/midi_inline_fold_unused_unnamed.png differ diff --git a/ColorThemes/Ultraschall_2/midi_inline_noteview_diamond.png b/ColorThemes/Ultraschall_2/midi_inline_noteview_diamond.png new file mode 100644 index 0000000..a0626a7 Binary files /dev/null and b/ColorThemes/Ultraschall_2/midi_inline_noteview_diamond.png differ diff --git a/ColorThemes/Ultraschall_2/midi_inline_noteview_rect.png b/ColorThemes/Ultraschall_2/midi_inline_noteview_rect.png new file mode 100644 index 0000000..41e610c Binary files /dev/null and b/ColorThemes/Ultraschall_2/midi_inline_noteview_rect.png differ diff --git a/ColorThemes/Ultraschall_2/midi_inline_noteview_triangle.png b/ColorThemes/Ultraschall_2/midi_inline_noteview_triangle.png new file mode 100644 index 0000000..f14acfa Binary files /dev/null and b/ColorThemes/Ultraschall_2/midi_inline_noteview_triangle.png differ diff --git a/ColorThemes/Ultraschall_2/midi_inline_scroll.png b/ColorThemes/Ultraschall_2/midi_inline_scroll.png new file mode 100644 index 0000000..838cb8d Binary files /dev/null and b/ColorThemes/Ultraschall_2/midi_inline_scroll.png differ diff --git a/ColorThemes/Ultraschall_2/midi_inline_scrollbar.png b/ColorThemes/Ultraschall_2/midi_inline_scrollbar.png new file mode 100644 index 0000000..836cbd7 Binary files /dev/null and b/ColorThemes/Ultraschall_2/midi_inline_scrollbar.png differ diff --git a/ColorThemes/Ultraschall_2/midi_inline_scrollthumb.png b/ColorThemes/Ultraschall_2/midi_inline_scrollthumb.png new file mode 100644 index 0000000..2b95980 Binary files /dev/null and b/ColorThemes/Ultraschall_2/midi_inline_scrollthumb.png differ diff --git a/ColorThemes/Ultraschall_2/midi_note_colormap.png b/ColorThemes/Ultraschall_2/midi_note_colormap.png new file mode 100644 index 0000000..81ae334 Binary files /dev/null and b/ColorThemes/Ultraschall_2/midi_note_colormap.png differ diff --git a/ColorThemes/Ultraschall_2/midi_note_colormap_old.png b/ColorThemes/Ultraschall_2/midi_note_colormap_old.png new file mode 100644 index 0000000..24bd31e Binary files /dev/null and b/ColorThemes/Ultraschall_2/midi_note_colormap_old.png differ diff --git a/ColorThemes/Ultraschall_2/mixer_menu.png b/ColorThemes/Ultraschall_2/mixer_menu.png new file mode 100644 index 0000000..eee3b4e Binary files /dev/null and b/ColorThemes/Ultraschall_2/mixer_menu.png differ diff --git a/ColorThemes/Ultraschall_2/piano_black_key.png b/ColorThemes/Ultraschall_2/piano_black_key.png new file mode 100644 index 0000000..26c82b3 Binary files /dev/null and b/ColorThemes/Ultraschall_2/piano_black_key.png differ diff --git a/ColorThemes/Ultraschall_2/piano_black_key_sel.png b/ColorThemes/Ultraschall_2/piano_black_key_sel.png new file mode 100644 index 0000000..7ae65de Binary files /dev/null and b/ColorThemes/Ultraschall_2/piano_black_key_sel.png differ diff --git a/ColorThemes/Ultraschall_2/piano_white_key.png b/ColorThemes/Ultraschall_2/piano_white_key.png new file mode 100644 index 0000000..806cc29 Binary files /dev/null and b/ColorThemes/Ultraschall_2/piano_white_key.png differ diff --git a/ColorThemes/Ultraschall_2/piano_white_key_sel.png b/ColorThemes/Ultraschall_2/piano_white_key_sel.png new file mode 100644 index 0000000..70eec15 Binary files /dev/null and b/ColorThemes/Ultraschall_2/piano_white_key_sel.png differ diff --git a/ColorThemes/Ultraschall_2/routing_snapshots.png b/ColorThemes/Ultraschall_2/routing_snapshots.png new file mode 100644 index 0000000..ced2e94 Binary files /dev/null and b/ColorThemes/Ultraschall_2/routing_snapshots.png differ diff --git a/ColorThemes/Ultraschall_2/rtconfig - Copy.txt b/ColorThemes/Ultraschall_2/rtconfig - Copy.txt new file mode 100644 index 0000000..f49a69a --- /dev/null +++ b/ColorThemes/Ultraschall_2/rtconfig - Copy.txt @@ -0,0 +1,1857 @@ +use_pngs 1 +tcp_showborders 0 +mcp_showborders 0 +tcp_vupeakwidth 2 +mcp_vupeakheight 4 ;default +;mcp_vupeakheight 1 +mcp_mastervupeakheight 4 +mcp_altmeterpos 0 +use_overlays 0 +transport_showborders 0 +tcp_vol_zeroline 85000000 +tcp_pan_zeroline 85000000 +mcp_vol_zeroline FF000000 +mcp_pan_zeroline 85000000 +trans_speed_zeroline 85000000 +gen_vol_zeroline FF000000 +gen_pan_zeroline FF000000 +item_volknobfg 85000000 FF778485 00474F4F +mcp_min_height 230 +mcp_voltext_flags 5 5 +tcp_voltext_flags 5 5 + + + + +; ----------WALTER------------ + +clear tcp.* +set tcp.size [400 100 160] +tcp_heights 4 24 49 73 ; supercollapsed, collapsed, small(norecarm), recarm size +tcp_folderindent 13 +set y_align ?tcp_fxparms w<211 h<125 [0 0 0 0 0 0.5 0 0.5] [0 0 0 0 0 0 0 0] h<90 [0 0 0 0 0 0.5 0 0.5] [0 0 0 0 0 0 0 0] [0 0 0 0 0 0.5 0 0.5] +set tcp.margin +:maxfolderdepth:1 [13 0 0 0] +set tcp.margin +:folderdepth:1 [-13 0 0 0] +set reverse_margin * [-1] tcp.margin +set margin_to_width [0 0 tcp.margin{x}] +set tcp.foldercomp [382 0 18 19 1 0 1 0] +set tcp.folder h<32 [0] [382 86 18 14 1 1 1 1] +front tcp.io tcp.fxin +set tcp_yanchor w<360 w<211 h<117 h<95 h<73 h<51 [0 41] [0 30] [0 19] [0 8] trackpanmode>=4 [0 -3] [0 8] h<73 h<51 [0 41] [0 30] [0 19] h<73 h<51 [0 41] [0 30] trackpanmode>=4 [0 19] [0 30] +set tcp_yanchor ?tcp_fxparms w<211 h>=125 [0 8] . h>=90 [0 8] . +set tcp.meter + tcp_yanchor w<211 h<51 [0] [342 26 29 9 1 y_align 1 y_align] h>4 [286 4 42 9 1 y_align 1 y_align] [286 -42 42 4 1 0 1 0] +set tcp.meter.readout.color h>23 [255 255 255 140 255 255 255 200] [0 0 0 0 0 0 0 0] +set tcp.meter.vu.div [1] +set tcp.fx + tcp_yanchor w<211 h<73 [0] [338 44 24 18 1 y_align 1 y_align] h<51 [0] [338 22 24 18 1 y_align 1 y_align] +set tcp.fxbyp tcp.fx{x}>0 + [tcp.fx tcp.fx 13 18 1 y_align 1 y_align] [tcp.fx{w}] [0] +set tcp.recarm.fullmargin + tcp_yanchor [7 0 18 18 0 y_align 0 y_align] +set tcp.recarm + reverse_margin tcp.recarm.fullmargin +set tcp_label_fullmargin + tcp_yanchor w<211 [25 0 285 17 0 y_align 1 y_align] w<270 [25 0 229 17 0 y_align 1 y_align] w<360 [25 0 193 17 0 y_align 1 y_align] [25 0 75 17 0 y_align 0.5 y_align] +set tcp.label + + reverse_margin tcp_label_fullmargin margin_to_width +set tcp.label.color ?recarm [255 97 97] [191 191 191] +set tcp.label.margin [3 2 6 3] +set tcp.io + tcp_yanchor w<211 [310 0 22 18 1 y_align 1 y_align] w<270 [254 0 22 18 1 y_align 1 y_align] w<360 [218 0 58 18 1 y_align 1 y_align] [100 0 58 18 0.5 y_align 0.5 y_align] ; additional definition below +set tcp.mute + tcp_yanchor [338 0 17 18 1 y_align 1 y_align] +set tcp.solo + tcp_yanchor [358 0 17 18 1 y_align 1 y_align] +set tcp.volume + tcp_yanchor w<211 h<51 [0] [7 23 322 16 0 y_align 1 y_align] w<270 h<51 [0] [7 23 266 16 0 y_align 1 y_align] w<360 h<51 [0] [7 23 241 16 0 y_align 1 y_align] [164 0 84 18 0.5 y_align 1 y_align] +set tcp.volume.label tcp.volume{x}>0 + [tcp.volume{w}] w<211 [tcp.volume tcp.volume 3 tcp.volume tcp.volume{rs} y_align tcp.volume{rs} y_align] w<270 [tcp.volume tcp.volume 3 tcp.volume tcp.volume{rs} y_align tcp.volume{rs} y_align] [tcp.volume tcp.volume 28 tcp.volume tcp.volume{rs} y_align tcp.volume{rs} y_align] +set tcp.volume.label.color [215 215 215] +set tcp.volume.label.margin [1 1 3 0 1] +set tcp.phase + tcp_yanchor w<211 h<95 [0] [63 66 15 16 0 y_align 0 y_align] w<270 h<73 [0] [28 45 15 16 0 y_align 0 y_align] w<360 h<73 [0] [55 45 15 16 0 y_align 0 y_align] h<51 [0] [55 23 15 16 0 y_align 0 y_align] +set tcp.recmon + tcp_yanchor w<211 h<95 [0] [338 66 15 16 1 y_align 1 y_align] w<360 h<73 [0] [338 45 15 16 1 y_align 1 y_align] h<51 [0] [239 23 15 16 1 y_align 1 y_align] +set tcp.recmode + tcp_yanchor w<211 h<95 [0] [352 66 23 16 1 y_align 1 y_align] w<360 h<73 [0] [352 45 23 16 1 y_align 1 y_align] h<51 [0] [253 23 23 16 1 y_align 1 y_align] +set tcp.recinput + tcp_yanchor w<211 h<73 [0] [28 45 304 16 0 y_align 1 y_align] w<270 h<73 [0] [49 45 227 16 0 y_align 1 y_align] w<360 h<73 [0] [76 45 200 16 0 y_align 1 y_align] h<51 [0] [76 23 157 16 0 y_align 1 y_align] +set tcp.recinput.color [221 224 224] +set tcp.recinput.margin [4 0 16 0] +set tcp.env + tcp_yanchor w<270 h<73 [0] [7 45 15 16 0 y_align 0 y_align] w<360 h<73 [0] [7 45 42 16 0 y_align 0 y_align] h<51 [0] [7 23 42 16 0 y_align 0 y_align] +set tcp.fxin ?recarm tcp.io{w}==58 + tcp_yanchor w<211 [0] w<270 [254 0 36 18 1 y_align 1 y_align] w<360 [218 0 36 18 1 y_align 1 y_align] [100 0 36 18 0.5 y_align 0.5 y_align] [0] [0] +set tcp.io ?recarm tcp.io{w}==58 + [36] [tcp.io tcp.io 22 18 tcp.io tcp.io tcp.io tcp.io] +set tcp.pan + tcp_yanchor w<211 h<95 [0] [6 65 18 18 0 y_align 0 y_align] h<51 [0] [281 22 18 18 1 y_align 1 y_align] +set tcp.pan.color [51 51 51 191 0 0 0 0] +set tcp.pan.label tcp.pan{x}>0 + [tcp.pan{w} 1] [tcp.pan tcp.pan 32 16 tcp.pan y_align tcp.pan y_align] [0] +set tcp.pan.label.color [221 224 224] +set tcp.pan.label.margin [0 0 3 0 1] +set tcp.width trackpanmode>=4 + tcp_yanchor w<211 h<117 [0] [6 86 18 18 0 y_align 0 y_align] h<73 [0] [281 44 18 18 1 y_align 1 y_align] [0] +set tcp.width.color [51 51 51 225 0 0 0 0] +set tcp.width.label trackpanmode>=4 tcp.width{x}>0 + [tcp.width{w} 1] [tcp.width tcp.width 32 16 tcp.width y_align tcp.width y_align] [0] [0] +set tcp.width.label.color [221 224 224] +set tcp.width.label.margin [0 0 3 0 1] +set tcp.fxparm w<360 w<211 trackpanmode>=4 [7 118 368 -24 0 0 1 1] [7 97 368 -3 0 0 1 1] [7 76 368 18 0 0 1 1] trackpanmode>=4 [7 76 368 18 0 0 1 1] [7 54 368 40 0 0 1 1] +set tcp.trackidx [382 41 18 18 1 0.5 1 0.5] +set tcp.trackidx.margin [0 0 0 0 0.5] +set tcp.trackidx.color ?recarm [200 0 0] [115 115 115] +set tcp.toosmall [10 10 10 10 0 0 0 0] + + + Layout "3. Black Default TCP (vertical meters)" "analog-black-v" + set tcp.size [402 100 160] + set tcp.foldercomp [384 0 18 19 1 0 1 0] + set tcp.folder h<32 [0] [384 86 18 14 1 1 1 1] + set tcp.meter + tcp_yanchor w<211 h<51 [0] [342 26 29 9 1 y_align 1 y_align] [80 -42 42 4 1 0 1 0] + set tcp.meter w>=211 h>4 [368 4 15 92 1 0 1 1] [80 -42 42 4 1 0 1 0] + set tcp.meter.readout.color h>=90 [255 255 255 140 255 255 255 200] [0 0 0 0 0 0 0 0] + set tcp.meter.scale.color.unlit.top h<90 [0 0 0 0 0 0 0 0] [99 99 99 100 0 0 0 255] + set tcp.meter.scale.color.unlit.bottom h<90 [0 0 0 0 0 0 0 0] [70 70 70 100 0 0 0 255] + set tcp.meter.scale.color.lit.top h<90 [0 0 0 0 0 0 0 0] [170 207 202 255 0 0 0 50] + set tcp.meter.scale.color.lit.bottom h<90 [0 0 0 0 0 0 0 0] [170 207 202 255 0 0 0 50] + set tcp.fx + tcp_yanchor w<211 h<73 [0] [338 44 24 18 1 y_align 1 y_align] h>4 [280 0 24 18 1 y_align 1 y_align] + set tcp.fxbyp tcp.fx{x}>0 + [tcp.fx tcp.fx 13 18 1 y_align 1 y_align] [tcp.fx{w}] [0] + set tcp.mute + tcp_yanchor w<211 [338 0 17 18 1 y_align 1 y_align] h>4 [323 0 17 18 1 y_align 1 y_align] + set tcp.solo + tcp_yanchor w<211 [358 0 17 18 1 y_align 1 y_align] h>4 [343 0 17 18 1 y_align 1 y_align] + set tcp.recmon + tcp_yanchor w<211 h<95 [0] [338 66 15 16 1 y_align 1 y_align] w<360 h<73 [0] [280 45 15 16 1 y_align 1 y_align] h<51 [0] [239 23 15 16 1 y_align 1 y_align] + set tcp.recmode + tcp_yanchor w<211 h<95 [0] [352 66 23 16 1 y_align 1 y_align] w<360 h<73 [0] [294 45 23 16 1 y_align 1 y_align] h<51 [0] [253 23 23 16 1 y_align 1 y_align] + set tcp.trackidx [384 41 18 18 1 0.5 1 0.5] + set tcp.volume tcp.volume +set tcp.label.color ?recarm [255 97 97] [150 150 150] +set tcp.recinput.color [140 140 140] +set tcp.pan.color [190 190 190 191 0 0 0 0] +set tcp.pan.label.color [150 150 150] +set tcp.width.color [190 190 190 225 0 0 0 0] +set tcp.width.label.color [150 150 150] +set tcp.volume.label.color [150 150 150] + EndLayout ; end of "- Black (vertical meters)" + +Layout "1. Classic Default TCP" +set tcp.volume tcp.volume +EndLayout + + + Layout "1. Classic Default TCP (vertical meters)" "analog-classic-v" + set tcp.size [402 100 160] + set tcp.foldercomp [384 0 18 19 1 0 1 0] + set tcp.folder h<32 [0] [384 86 18 14 1 1 1 1] + set tcp.meter + tcp_yanchor w<211 h<51 [0] [342 26 29 9 1 y_align 1 y_align] [80 -42 42 4 1 0 1 0] + set tcp.meter w>=211 h>4 [368 4 15 92 1 0 1 1] [80 -42 42 4 1 0 1 0] + set tcp.meter.readout.color h>=90 [255 255 255 140 255 255 255 200] [0 0 0 0 0 0 0 0] + set tcp.meter.scale.color.unlit.top h<90 [0 0 0 0 0 0 0 0] [120 120 120 100 0 0 0 255] + set tcp.meter.scale.color.unlit.bottom h<90 [0 0 0 0 0 0 0 0] [70 70 70 100 0 0 0 255] + set tcp.meter.scale.color.lit.top h<90 [0 0 0 0 0 0 0 0] [197 226 222 255 0 0 0 50] + set tcp.meter.scale.color.lit.bottom h<90 [0 0 0 0 0 0 0 0] [197 226 222 255 0 0 0 50] + set tcp.fx + tcp_yanchor w<211 h<73 [0] [338 44 24 18 1 y_align 1 y_align] h>4 [280 0 24 18 1 y_align 1 y_align] + set tcp.fxbyp tcp.fx{x}>0 + [tcp.fx tcp.fx 13 18 1 y_align 1 y_align] [tcp.fx{w}] [0] + set tcp.mute + tcp_yanchor w<211 [338 0 17 18 1 y_align 1 y_align] h>4 [323 0 17 18 1 y_align 1 y_align] + set tcp.solo + tcp_yanchor w<211 [358 0 17 18 1 y_align 1 y_align] h>4 [343 0 17 18 1 y_align 1 y_align] + set tcp.recmon + tcp_yanchor w<211 h<95 [0] [338 66 15 16 1 y_align 1 y_align] w<360 h<73 [0] [280 45 15 16 1 y_align 1 y_align] h<51 [0] [239 23 15 16 1 y_align 1 y_align] + set tcp.recmode + tcp_yanchor w<211 h<95 [0] [352 66 23 16 1 y_align 1 y_align] w<360 h<73 [0] [294 45 23 16 1 y_align 1 y_align] h<51 [0] [253 23 23 16 1 y_align 1 y_align] + set tcp.trackidx [384 41 18 18 1 0.5 1 0.5] + EndLayout ; end of "- Default (vertical meters)" + + Layout "2. Silver Default TCP (vertical meters)" "analog-silver-v" + set tcp.size [402 100 160] + set tcp.foldercomp [384 0 18 19 1 0 1 0] + set tcp.folder h<32 [0] [384 86 18 14 1 1 1 1] + set tcp.meter + tcp_yanchor w<211 h<51 [0] [342 26 29 9 1 y_align 1 y_align] [80 -42 42 4 1 0 1 0] + set tcp.meter w>=211 h>4 [368 4 15 92 1 0 1 1] [80 -42 42 4 1 0 1 0] + set tcp.meter.readout.color h>=90 [255 255 255 140 255 255 255 200] [0 0 0 0 0 0 0 0] + set tcp.meter.scale.color.unlit.top h<90 [0 0 0 0 0 0 0 0] [120 120 120 100 0 0 0 255] + set tcp.meter.scale.color.unlit.bottom h<90 [0 0 0 0 0 0 0 0] [70 70 70 100 0 0 0 255] + set tcp.meter.scale.color.lit.top h<90 [0 0 0 0 0 0 0 0] [184 223 218 255 0 0 0 50] + set tcp.meter.scale.color.lit.bottom h<90 [0 0 0 0 0 0 0 0] [184 223 218 255 0 0 0 50] + set tcp.fx + tcp_yanchor w<211 h<73 [0] [338 44 24 18 1 y_align 1 y_align] h>4 [280 0 24 18 1 y_align 1 y_align] + set tcp.fxbyp tcp.fx{x}>0 + [tcp.fx tcp.fx 13 18 1 y_align 1 y_align] [tcp.fx{w}] [0] + set tcp.mute + tcp_yanchor w<211 [338 0 17 18 1 y_align 1 y_align] h>4 [323 0 17 18 1 y_align 1 y_align] + set tcp.solo + tcp_yanchor w<211 [358 0 17 18 1 y_align 1 y_align] h>4 [343 0 17 18 1 y_align 1 y_align] + set tcp.recmon + tcp_yanchor w<211 h<95 [0] [338 66 15 16 1 y_align 1 y_align] w<360 h<73 [0] [280 45 15 16 1 y_align 1 y_align] h<51 [0] [239 23 15 16 1 y_align 1 y_align] + set tcp.recmode + tcp_yanchor w<211 h<95 [0] [352 66 23 16 1 y_align 1 y_align] w<360 h<73 [0] [294 45 23 16 1 y_align 1 y_align] h<51 [0] [253 23 23 16 1 y_align 1 y_align] + set tcp.trackidx [384 41 18 18 1 0.5 1 0.5] + + set tcp.volume.label.color [210 210 210] + + EndLayout ; end of "- Silver Track Panel (vertical meters)" + + + ;Layout "2. Silver Minimal Track (vertical meters)" "analog-silver-v" + + ;set tcp.size [402 100 160] + ;set tcp.foldercomp [384 0 18 19 1 0 1 0] + ;set tcp.folder h<32 [0] [384 86 18 14 1 1 1 1] + ;set tcp.meter + tcp_yanchor w<211 h<51 [0] [342 26 29 9 1 y_align 1 y_align] [80 -42 42 4 1 0 1 0] + ;set tcp.meter w>=211 h>4 [368 4 15 92 1 0 1 1] [80 -42 42 4 1 0 1 0] + ;set tcp.meter.readout.color h>=90 [255 255 255 140 255 255 255 200] [0 0 0 0 0 0 0 0] + ;set tcp.meter.scale.color.unlit.top h<90 [0 0 0 0 0 0 0 0] [120 120 120 100 0 0 0 255] + ;set tcp.meter.scale.color.unlit.bottom h<90 [0 0 0 0 0 0 0 0] [70 70 70 100 0 0 0 255] + ;set tcp.meter.scale.color.lit.top h<90 [0 0 0 0 0 0 0 0] [184 223 218 255 0 0 0 50] + ;set tcp.meter.scale.color.lit.bottom h<90 [0 0 0 0 0 0 0 0] [184 223 218 255 0 0 0 50] + ;set tcp.fx + tcp_yanchor w<211 h<73 [0] [338 44 24 18 1 y_align 1 y_align] h>4 [280 0 24 18 1 y_align 1 y_align] + ;set tcp.fxbyp tcp.fx{x}>0 + [tcp.fx tcp.fx 13 18 1 y_align 1 y_align] [tcp.fx{w}] [0] + ;set tcp.mute + tcp_yanchor w<211 [338 0 17 18 1 y_align 1 y_align] h>4 [323 0 17 18 1 y_align 1 y_align] + ;set tcp.solo + tcp_yanchor w<211 [358 0 17 18 1 y_align 1 y_align] h>4 [343 0 17 18 1 y_align 1 y_align] + ;set tcp.recmode + tcp_yanchor w<211 h<95 [0] [352 66 23 16 1 y_align 1 y_align] w<360 h<73 [0] [294 45 23 16 1 y_align 1 y_align] h<51 [0] [253 23 23 16 1 ;y_align 1 y_align] + ;set tcp.trackidx [384 41 18 18 1 0.5 1 0.5] + ;EndLayout ; end of "- Minimal Silver (vertical meters)" + + + + +; Layout "2. Silver Default TCP (vertical meters)" "analog-silver" +; set tcp.size [402 100 160] +; set tcp.foldercomp [384 0 18 19 1 0 1 0] +; set tcp.folder h<32 [0] [384 86 18 14 1 1 1 1] +; set tcp.meter + tcp_yanchor w<211 h<51 [0] [342 26 29 9 1 y_align 1 y_align] [80 -42 42 4 1 0 1 0] +; set tcp.meter w>=200 h>4 [365 4 15 92 1 0 1 1] [80 -42 42 4 1 0 1 0] +; set tcp.meter.readout.color h>=90 [255 255 255 140 255 255 255 200] [0 0 0 0 0 0 0 0] +; set tcp.meter.scale.color.unlit.top h<90 [0 0 0 0 0 0 0 0] [255 255 255 75 0 0 0 100] +; set tcp.meter.scale.color.unlit.bottom h<90 [0 0 0 0 0 0 0 0] [150 150 150 150 75 0 0 0 100] +; set tcp.meter.scale.color.lit.top h<90 [0 0 0 0 0 0 0 0] [255 255 255 255 0 0 0 50] +; set tcp.meter.scale.color.lit.bottom h<90 [0 0 0 0 0 0 0 0] [255 255 255 255 0 0 0 50] +; set tcp.fx + tcp_yanchor w<200 h<73 [0] [338 44 24 18 1 y_align 1 y_align] h>4 [280 0 24 18 1 y_align 1 y_align] +; set tcp.fxbyp tcp.fx{x}>0 + [tcp.fx tcp.fx 13 18 1 y_align 1 y_align] [tcp.fx{w}] [0] +; set tcp.mute + tcp_yanchor w<200 [338 0 17 18 1 y_align 1 y_align] h>4 [323 0 17 18 1 y_align 1 y_align] +; set tcp.solo + tcp_yanchor w<200 [358 0 17 18 1 y_align 1 y_align] h>4 [343 0 17 18 1 y_align 1 y_align] +; set tcp.recmon + tcp_yanchor w<200 h<95 [0] [338 66 15 16 1 y_align 1 y_align] w<360 h<73 [0] [280 45 15 16 1 y_align 1 y_align] h<51 [0] [239 23 15 16 1 y_align 1 y_align] +; set tcp.recmode + tcp_yanchor w<200 h<95 [0] [352 66 23 16 1 y_align 1 y_align] w<360 h<73 [0] [294 45 23 16 1 y_align 1 y_align] h<51 [0] [253 23 23 16 1 y_align 1 y_align] +; set tcp.trackidx [384 41 18 18 1 0.5 1 0.5] +; EndLayout ; end of "- D.A. Pro vertical meters" + + +Layout "3. Black Default TCP" "analog-black" + set tcp.volume tcp.volume +set tcp.label.color ?recarm [255 97 97] [150 150 150] +set tcp.recinput.color [140 140 140] +set tcp.pan.color [190 190 190 191 0 0 0 0] +set tcp.pan.label.color [150 150 150] +set tcp.width.color [190 190 190 225 0 0 0 0] +set tcp.width.label.color [150 150 150] +set tcp.volume.label.color [150 150 150] +EndLayout + +Layout "2. Silver Default TCP" "analog-silver" +set tcp.volume tcp.volume +set tcp.pan.color [44 44 44 191 0 0 0 0] +set tcp.width.color [44 44 44 191 0 0 0 0] +set tcp.volume.label.color [210 210 210] +EndLayout + + +Layout "2. Silver Default MCP" "analog-silver-mcp" + +clear mcp.* + +set mcp.size [73 319] +front mcp.width.label mcp.pan.label mcp.recmon mcp.volume.label +set mcp.folder folderstate<0 [66 300 7 18 0 1 0 1] [0 300 18 18 0 1 0 1] +set mcp.label [1 35 70 18 0 0 0 0] +set mcp.label.margin [2 0 2 0 0.5] +set mcp.label.color ?recarm [255 87 87] [140 140 140] +set mcp_column_anchor [48 105] +set mcp.mute + mcp_column_anchor [0 0 17 18 0 0 0 0] +set mcp.solo + mcp_column_anchor [0 21 17 18 0 0 0 0] +set mcp.recmon + mcp_column_anchor h>273 [0 42 17 14 0 0 0 0] [0 42 17 14 0 0 0 0] +set mcp.recmode + mcp_column_anchor h>273 [0 54 17 22 0 0 0 0] [0] +set mcp.env + mcp_column_anchor h>283 [0 79 17 26 0 0 0 0] h>273 [0 79 17 14 0 0 0 0] h>233 [0 59 17 14 0 0 0 0] [0] +set mcp.phase + mcp_column_anchor h>283 [1 108 15 16 0 0 0 0] h>273 [1 96 15 16 0 0 0 0] h>251 [1 76 15 16 0 0 0 0] [0] +set mcp.recarm [41 260 20 33 0 1 0 1] +set mcp.meter.vu.div [2 1] +set mcp.meter h>273 [27 123 12 166 0 0 0 1] [27 112 12 177 0 0 0 1] +set mcp.meter.readout.color [255 255 255 140 255 255 255 200] +set mcp.volume h>273 [9 119 17 173 0 0 0 1] [9 108 17 184 0 0 0 1] +set mcp.volume.label h>273 [7 105 35 14 0 0 0 0] [7 105 35 3 0 0 0 0] +set mcp.volume.label.color [165 165 165] +set mcp.volume.label.margin h>273 [1 5 0 0 0.5] [52 5 53 0 0.5] +set mcp.pan trackpanmode>=4 [6 62 18 18 0 0 0 0] [4 65 30 30 0 0 0 0] +set mcp.pan.color [42 42 42 191 0 0 0 0] +set mcp.pan.label trackpanmode>=4 [24 63 41 16 0 0 0 0] [31 72 34 16 0 0 0 0] +set mcp.pan.label.color [221 224 224] +set mcp.pan.label.margin [0 0 3 0 1] +set mcp.width trackpanmode>=4 [6 82 18 18 0 0 0 0] [0] +set mcp.width.color [51 51 51 225 0 0 0 0] +set mcp.width.label trackpanmode>=4 [24 83 41 16 0 0 0 0] [0] +set mcp.width.label.color [221 224 224] +set mcp.width.label.margin [0 0 3 0 1] +set mcp.io ?recarm [30 18 39 16 0 0 0 0] [30 3 39 31 0 0 0 0] +set mcp.fx [3 17 23 17 0 0 0 0] +set mcp.fxbyp [3 3 23 14 0 0 0 0] +set mcp.fxin ?recarm [30 3 39 14 0 0 0 0] [0] +set mcp.extmixer.mode [0] +set mcp.trackidx [19 300 35 18 0 1 0 1] +set mcp.trackidx.margin [0 3 0 5 0.5] +set mcp.trackidx.color ?recarm [200 0 0] [100 100 100] +EndLayout + + + +Layout "3. Black Default MCP" "analog-black-mcp" + +clear mcp.* + +set mcp.size [73 319] +front mcp.width.label mcp.pan.label mcp.recmon mcp.volume.label +set mcp.folder folderstate<0 [66 300 7 18 0 1 0 1] [0 300 18 18 0 1 0 1] +set mcp.label [1 35 70 18 0 0 0 0] +set mcp.label.margin [2 0 2 0 0.5] +set mcp.label.color ?recarm [255 87 87] [125 125 125] +set mcp_column_anchor [48 105] +set mcp.mute + mcp_column_anchor [0 0 17 18 0 0 0 0] +set mcp.solo + mcp_column_anchor [0 21 17 18 0 0 0 0] +set mcp.recmon + mcp_column_anchor h>273 [0 42 17 14 0 0 0 0] [0 42 17 14 0 0 0 0] +set mcp.recmode + mcp_column_anchor h>273 [0 54 17 22 0 0 0 0] [0] +set mcp.env + mcp_column_anchor h>283 [0 79 17 26 0 0 0 0] h>273 [0 79 17 14 0 0 0 0] h>233 [0 59 17 14 0 0 0 0] [0] +set mcp.phase + mcp_column_anchor h>283 [1 108 15 16 0 0 0 0] h>273 [1 96 15 16 0 0 0 0] h>251 [1 76 15 16 0 0 0 0] [0] +set mcp.recarm [41 260 20 33 0 1 0 1] +set mcp.meter.vu.div [2 1] +set mcp.meter h>273 [27 123 12 166 0 0 0 1] [27 112 12 177 0 0 0 1] +set mcp.meter.readout.color [255 255 255 140 255 255 255 200] +set mcp.volume h>273 [9 119 17 173 0 0 0 1] [9 108 17 184 0 0 0 1] +set mcp.volume.label h>273 [7 105 35 14 0 0 0 0] [7 105 35 3 0 0 0 0] +set mcp.volume.label.color [128 128 128] +set mcp.volume.label.margin h>273 [1 5 0 0 0.5] [52 5 53 0 0.5] +set mcp.pan trackpanmode>=4 [6 62 18 18 0 0 0 0] [4 65 30 30 0 0 0 0] +set mcp.pan.color [180 180 180 191 0 0 0 0] +set mcp.pan.label trackpanmode>=4 [24 63 41 16 0 0 0 0] [31 72 34 16 0 0 0 0] +set mcp.pan.label.color [155 155 155] +set mcp.pan.label.margin [0 0 3 0 1] +set mcp.width trackpanmode>=4 [6 82 18 18 0 0 0 0] [0] +set mcp.width.color [180 180 180 225 0 0 0 0] +set mcp.width.label trackpanmode>=4 [24 83 41 16 0 0 0 0] [0] +set mcp.width.label.color [155 155 155] +set mcp.width.label.margin [0 0 3 0 1] +set mcp.io ?recarm [30 18 39 16 0 0 0 0] [30 3 39 31 0 0 0 0] +set mcp.fx [3 17 23 17 0 0 0 0] +set mcp.fxbyp [3 3 23 14 0 0 0 0] +set mcp.fxin ?recarm [30 3 39 14 0 0 0 0] [0] +set mcp.extmixer.mode [0] +set mcp.trackidx [19 300 35 18 0 1 0 1] +set mcp.trackidx.margin [0 3 0 5 0.5] +set mcp.trackidx.color ?recarm [200 0 0] [100 100 100] +EndLayout + + + + + + + Layout "1. Classic Tracking" + set tcp.io + tcp_yanchor w<211 [310 0 22 18 1 y_align 1 y_align] w<360 [254 0 22 18 1 y_align 1 y_align] [136 0 22 18 0.5 y_align 0.5 y_align] + set tcp.fxin + tcp_yanchor w<270 [0] w<360 [218 0 36 18 1 y_align 1 y_align] [100 0 36 18 0.5 y_align 0.5 y_align] + set tcp.volume + tcp_yanchor w<211 h<73 [0] [7 45 322 16 0 y_align 1 y_align] w<270 h<73 [0] [7 45 266 16 0 y_align 1 y_align] w<360 h<73 [0] [7 45 241 16 0 y_align 1 y_align] h<73 [0] [76 23 172 16 0 y_align 1 y_align] + set tcp.volume.label tcp.volume{x}>0 + [tcp.volume{w}] w<211 [tcp.volume tcp.volume 3 tcp.volume tcp.volume{rs} y_align tcp.volume{rs} y_align] w<270 [tcp.volume tcp.volume 3 tcp.volume tcp.volume{rs} y_align tcp.volume{rs} y_align] [tcp.volume tcp.volume 28 tcp.volume tcp.volume{rs} y_align tcp.volume{rs} y_align] [0] + set tcp.recinput + tcp_yanchor w<211 h<51 [0] [28 23 304 16 0 y_align 1 y_align] w<270 h<51 [0] [49 23 227 16 0 y_align 1 y_align] w<360 h<51 [0] [76 23 200 16 0 y_align 1 y_align] [164 1 69 16 0.5 y_align 1 y_align] + set tcp.recmon + tcp_yanchor w<211 h<95 [0] [338 66 15 16 1 y_align 1 y_align] w<360 h<73 [0] [338 23 15 16 1 y_align 1 y_align] [239 1 15 16 1 y_align 1 y_align] + set tcp.recmode + tcp_yanchor w<211 h<95 [0] [352 66 23 16 1 y_align 1 y_align] w<360 h<73 [0] [352 23 23 16 1 y_align 1 y_align] [253 1 23 16 1 y_align 1 y_align] + set tcp.phase + tcp_yanchor w<211 h<95 [0] [63 66 15 16 0 y_align 0 y_align] w<270 h<51 [0] [28 23 15 16 0 y_align 0 y_align] w<360 h<51 [0] [55 23 15 16 0 y_align 0 y_align] h<51 [0] [55 23 15 16 0 y_align 0 y_align] + set tcp.fx + tcp_yanchor w<211 h<73 [0] [338 44 24 18 1 y_align 1 y_align] w<360 h<73 [0] [338 44 24 18 1 y_align 1 y_align] h<51 [0] [338 22 24 18 1 y_align 1 y_align] + set tcp.fxbyp tcp.fx{x}>0 + [tcp.fx tcp.fx 13 18 1 y_align 1 y_align] [tcp.fx{w}] [0] + set tcp.env + tcp_yanchor w<270 h<51 [0] [7 23 15 16 0 y_align 0 y_align] h<51 [0] [7 23 42 16 0 y_align 0 y_align] + EndLayout ; end of "Alt 1 Tracking" + + Layout "2. Silver Tracking" "analog-silver" + set tcp.io + tcp_yanchor w<211 [310 0 22 18 1 y_align 1 y_align] w<360 [254 0 22 18 1 y_align 1 y_align] [136 0 22 18 0.5 y_align 0.5 y_align] + set tcp.fxin + tcp_yanchor w<270 [0] w<360 [218 0 36 18 1 y_align 1 y_align] [100 0 36 18 0.5 y_align 0.5 y_align] + set tcp.volume + tcp_yanchor w<211 h<73 [0] [7 45 322 16 0 y_align 1 y_align] w<270 h<73 [0] [7 45 266 16 0 y_align 1 y_align] w<360 h<73 [0] [7 45 241 16 0 y_align 1 y_align] h<73 [0] [76 23 172 16 0 y_align 1 y_align] + set tcp.volume.label tcp.volume{x}>0 + [tcp.volume{w}] w<211 [tcp.volume tcp.volume 3 tcp.volume tcp.volume{rs} y_align tcp.volume{rs} y_align] w<270 [tcp.volume tcp.volume 3 tcp.volume tcp.volume{rs} y_align tcp.volume{rs} y_align] [tcp.volume tcp.volume 28 tcp.volume tcp.volume{rs} y_align tcp.volume{rs} y_align] [0] + set tcp.recinput + tcp_yanchor w<211 h<51 [0] [28 23 304 16 0 y_align 1 y_align] w<270 h<51 [0] [49 23 227 16 0 y_align 1 y_align] w<360 h<51 [0] [76 23 200 16 0 y_align 1 y_align] [164 1 69 16 0.5 y_align 1 y_align] + set tcp.recmon + tcp_yanchor w<211 h<95 [0] [338 66 15 16 1 y_align 1 y_align] w<360 h<73 [0] [338 23 15 16 1 y_align 1 y_align] [239 1 15 16 1 y_align 1 y_align] + set tcp.recmode + tcp_yanchor w<211 h<95 [0] [352 66 23 16 1 y_align 1 y_align] w<360 h<73 [0] [352 23 23 16 1 y_align 1 y_align] [253 1 23 16 1 y_align 1 y_align] + set tcp.phase + tcp_yanchor w<211 h<95 [0] [63 66 15 16 0 y_align 0 y_align] w<270 h<51 [0] [28 23 15 16 0 y_align 0 y_align] w<360 h<51 [0] [55 23 15 16 0 y_align 0 y_align] h<51 [0] [55 23 15 16 0 y_align 0 y_align] + set tcp.fx + tcp_yanchor w<211 h<73 [0] [338 44 24 18 1 y_align 1 y_align] w<360 h<73 [0] [338 44 24 18 1 y_align 1 y_align] h<51 [0] [338 22 24 18 1 y_align 1 y_align] + set tcp.fxbyp tcp.fx{x}>0 + [tcp.fx tcp.fx 13 18 1 y_align 1 y_align] [tcp.fx{w}] [0] + set tcp.env + tcp_yanchor w<270 h<51 [0] [7 23 15 16 0 y_align 0 y_align] h<51 [0] [7 23 42 16 0 y_align 0 y_align] + EndLayout ; end of "Alt 1 Tracking (silver)" + + Layout "3. Black Tracking" "analog-black" + set tcp.io + tcp_yanchor w<211 [310 0 22 18 1 y_align 1 y_align] w<360 [254 0 22 18 1 y_align 1 y_align] [136 0 22 18 0.5 y_align 0.5 y_align] + set tcp.fxin + tcp_yanchor w<270 [0] w<360 [218 0 36 18 1 y_align 1 y_align] [100 0 36 18 0.5 y_align 0.5 y_align] + set tcp.volume + tcp_yanchor w<211 h<73 [0] [7 45 322 16 0 y_align 1 y_align] w<270 h<73 [0] [7 45 266 16 0 y_align 1 y_align] w<360 h<73 [0] [7 45 241 16 0 y_align 1 y_align] h<73 [0] [76 23 172 16 0 y_align 1 y_align] + set tcp.volume.label tcp.volume{x}>0 + [tcp.volume{w}] w<211 [tcp.volume tcp.volume 3 tcp.volume tcp.volume{rs} y_align tcp.volume{rs} y_align] w<270 [tcp.volume tcp.volume 3 tcp.volume tcp.volume{rs} y_align tcp.volume{rs} y_align] [tcp.volume tcp.volume 28 tcp.volume tcp.volume{rs} y_align tcp.volume{rs} y_align] [0] + set tcp.recinput + tcp_yanchor w<211 h<51 [0] [28 23 304 16 0 y_align 1 y_align] w<270 h<51 [0] [49 23 227 16 0 y_align 1 y_align] w<360 h<51 [0] [76 23 200 16 0 y_align 1 y_align] [164 1 69 16 0.5 y_align 1 y_align] + set tcp.recmon + tcp_yanchor w<211 h<95 [0] [338 66 15 16 1 y_align 1 y_align] w<360 h<73 [0] [338 23 15 16 1 y_align 1 y_align] [239 1 15 16 1 y_align 1 y_align] + set tcp.recmode + tcp_yanchor w<211 h<95 [0] [352 66 23 16 1 y_align 1 y_align] w<360 h<73 [0] [352 23 23 16 1 y_align 1 y_align] [253 1 23 16 1 y_align 1 y_align] + set tcp.phase + tcp_yanchor w<211 h<95 [0] [63 66 15 16 0 y_align 0 y_align] w<270 h<51 [0] [28 23 15 16 0 y_align 0 y_align] w<360 h<51 [0] [55 23 15 16 0 y_align 0 y_align] h<51 [0] [55 23 15 16 0 y_align 0 y_align] + set tcp.fx + tcp_yanchor w<211 h<73 [0] [338 44 24 18 1 y_align 1 y_align] w<360 h<73 [0] [338 44 24 18 1 y_align 1 y_align] h<51 [0] [338 22 24 18 1 y_align 1 y_align] + set tcp.fxbyp tcp.fx{x}>0 + [tcp.fx tcp.fx 13 18 1 y_align 1 y_align] [tcp.fx{w}] [0] + set tcp.env + tcp_yanchor w<270 h<51 [0] [7 23 15 16 0 y_align 0 y_align] h<51 [0] [7 23 42 16 0 y_align 0 y_align] + + set tcp.volume tcp.volume +set tcp.label.color ?recarm [255 97 97] [150 150 150] +set tcp.recinput.color [140 140 140] +set tcp.pan.color [190 190 190 191 0 0 0 0] +set tcp.pan.label.color [150 150 150] +set tcp.width.color [190 190 190 225 0 0 0 0] +set tcp.width.label.color [150 150 150] +set tcp.volume.label.color [150 150 150] + + EndLayout ; end of "Alt 1 Tracking (black)" + + + Layout "1. Classic Reduced" + set tcp_yanchor w<360 w<211 h<117 h<95 h<73 h<51 [0 41] [0 30] [0 19] [0 8] [0 8] h<73 h<51 [0 41] [0 30] [0 19] h<73 h<51 [0 41] [0 30] [0 30] + set y_align [0 0 0 0 0 0.5 0 0.5] + set tcp.fx + tcp_yanchor w<211 h<73 [0] [338 44 24 18 1 y_align 1 y_align] h<51 [0] [338 22 24 18 1 y_align 1 y_align] + set tcp.fxbyp tcp.fx{x}>0 + [tcp.fx tcp.fx 13 18 1 y_align 1 y_align] [tcp.fx{w}] [0] + set tcp.recarm.fullmargin + tcp_yanchor [7 0 18 18 0 y_align 0 y_align] + set tcp.recarm + reverse_margin tcp.recarm.fullmargin + set tcp_label_fullmargin + tcp_yanchor w<211 [25 0 307 17 0 y_align 1 y_align] w<360 [25 0 251 17 0 y_align 1 y_align] [25 0 78 17 0 y_align 0.5 y_align] + set tcp.label + + reverse_margin tcp_label_fullmargin margin_to_width + set tcp.label.margin [3 2 3 3] + set tcp.mute + tcp_yanchor [338 0 17 18 1 y_align 1 y_align] + set tcp.solo + tcp_yanchor [358 0 17 18 1 y_align 1 y_align] + set tcp.volume + tcp_yanchor w<211 h<51 [0] [7 23 322 16 0 y_align 1 y_align] w<270 h<51 [0] [7 23 266 16 0 y_align 1 y_align] w<360 h<51 [0] [7 23 241 16 0 y_align 1 y_align] [109 0 139 18 0.5 y_align 1 y_align] + set tcp.volume.label tcp.volume{x}>0 + [tcp.volume{w}] w<211 [tcp.volume tcp.volume 3 tcp.volume tcp.volume{rs} y_align tcp.volume{rs} y_align] w<270 [tcp.volume tcp.volume 3 tcp.volume tcp.volume{rs} y_align tcp.volume{rs} y_align] [tcp.volume tcp.volume 28 tcp.volume tcp.volume{rs} y_align tcp.volume{rs} y_align] + set tcp.volume.label.margin [1 1 3 0 1] + set tcp.recmode [0] + set tcp.recinput ?recarm + tcp_yanchor w<211 h<73 [0] [49 45 283 16 0 y_align 1 y_align] w<360 h<73 [0] [49 45 227 16 0 y_align 1 y_align] h<51 [0] [49 23 171 16 0 y_align 1 y_align] [0] + set tcp.env + tcp_yanchor w<270 h<73 [0] [7 45 15 16 0 y_align 0 y_align] w<360 h<73 [0] [7 45 15 16 0 y_align 0 y_align] h<51 [0] [7 23 15 16 0 y_align 0 y_align] + set tcp.recmon tcp.env{x}>0 + [21] [tcp.env tcp.env 15 16 tcp.env tcp.env tcp.env tcp.env] [0] + set tcp.phase [0] + set tcp.fxin [0] + set tcp.io [0] + set tcp.pan + tcp_yanchor w<211 h<95 [0] [7 65 18 18 0 y_align 0 y_align] h<51 [0] [281 22 18 18 1 y_align 1 y_align] + set tcp.pan.label tcp.pan{x}>0 + [tcp.pan{w} 1] [tcp.pan tcp.pan 32 16 tcp.pan y_align tcp.pan y_align] [0] + set tcp.width trackpanmode>=4 + tcp_yanchor w<211 h<95 [0] [63 65 18 18 0 y_align 0 y_align] w<360 h<73 [0] [281 44 18 18 1 y_align 1 y_align] h<51 [0] [225 22 18 18 1 y_align 1 y_align] [0] + set tcp.width.label trackpanmode>=4 tcp.width{x}>0 + [tcp.width{w} 1] [tcp.width tcp.width 32 16 tcp.width y_align tcp.width y_align] [0] [0] + set tcp.fxparm [0] + + Layout "1. Classic Minimal" + set tcp_yanchor ?recarm w<211 h<73 h<51 [0 41] [0 30] [0 19] h<51 [0 41] [0 30] w<360 h<51 [0 41] [0 30] [0 41] + set tcp.recarm.fullmargin + tcp_yanchor [7 0 18 18 0 y_align 0 y_align] + set tcp.recarm + reverse_margin tcp.recarm.fullmargin + set tcp_label_fullmargin + tcp_yanchor w<211 [25 0 307 17 0 y_align 1 y_align] w<360 [25 0 251 17 0 y_align 1 y_align] [25 0 78 17 0 y_align 0.5 y_align] + set tcp.label + + reverse_margin tcp_label_fullmargin margin_to_width + set tcp.meter + tcp_yanchor w<211 h<51 [0] [342 26 29 9 1 y_align 1 y_align] [286 4 42 9 1 y_align 1 y_align] + set tcp.mute + tcp_yanchor [338 0 17 18 1 y_align 1 y_align] + set tcp.solo + tcp_yanchor [358 0 17 18 1 y_align 1 y_align] + set tcp.volume + tcp_yanchor w<211 h<51 [0] [7 23 322 16 0 y_align 1 y_align] w<270 h<51 [0] [7 23 266 16 0 y_align 1 y_align] w<360 h<51 [0] [7 23 241 16 0 y_align 1 y_align] [109 0 139 18 0.5 y_align 1 y_align] + set tcp.volume.label tcp.volume{x}>0 + [tcp.volume{w}] w<211 [tcp.volume tcp.volume 3 tcp.volume tcp.volume{rs} y_align tcp.volume{rs} y_align] w<270 [tcp.volume tcp.volume 3 tcp.volume tcp.volume{rs} y_align tcp.volume{rs} y_align] [tcp.volume tcp.volume 28 tcp.volume tcp.volume{rs} y_align tcp.volume{rs} y_align] + set tcp.pan [0] + set tcp.pan.label [0] + set tcp.width [0] + set tcp.width.label [0] + set tcp.env [0] + set tcp.recmon [0] + set tcp.fx [0] + set tcp.fxbyp [0] + set tcp.recinput ?recarm + tcp_yanchor w<211 h<73 [0] [7 45 325 16 0 y_align 1 y_align] w<360 h<51 [0] [282 22 93 16 1 y_align 1 y_align] h<51 [0] [109 23 167 16 0.5 y_align 1 y_align] [0] + EndLayout ; end of "Minimal" + + EndLayout ; end of "Reduced" + + Layout "2. Silver Reduced" "analog-silver" + set tcp_yanchor w<360 w<211 h<117 h<95 h<73 h<51 [0 41] [0 30] [0 19] [0 8] [0 8] h<73 h<51 [0 41] [0 30] [0 19] h<73 h<51 [0 41] [0 30] [0 30] + set y_align [0 0 0 0 0 0.5 0 0.5] + set tcp.fx + tcp_yanchor w<211 h<73 [0] [338 44 24 18 1 y_align 1 y_align] h<51 [0] [338 22 24 18 1 y_align 1 y_align] + set tcp.fxbyp tcp.fx{x}>0 + [tcp.fx tcp.fx 13 18 1 y_align 1 y_align] [tcp.fx{w}] [0] + set tcp.recarm.fullmargin + tcp_yanchor [7 0 18 18 0 y_align 0 y_align] + set tcp.recarm + reverse_margin tcp.recarm.fullmargin + set tcp_label_fullmargin + tcp_yanchor w<211 [25 0 307 17 0 y_align 1 y_align] w<360 [25 0 251 17 0 y_align 1 y_align] [25 0 78 17 0 y_align 0.5 y_align] + set tcp.label + + reverse_margin tcp_label_fullmargin margin_to_width + set tcp.label.margin [3 2 3 3] + set tcp.mute + tcp_yanchor [338 0 17 18 1 y_align 1 y_align] + set tcp.solo + tcp_yanchor [358 0 17 18 1 y_align 1 y_align] + set tcp.volume + tcp_yanchor w<211 h<51 [0] [7 23 322 16 0 y_align 1 y_align] w<270 h<51 [0] [7 23 266 16 0 y_align 1 y_align] w<360 h<51 [0] [7 23 241 16 0 y_align 1 y_align] [109 0 139 18 0.5 y_align 1 y_align] + set tcp.volume.label tcp.volume{x}>0 + [tcp.volume{w}] w<211 [tcp.volume tcp.volume 3 tcp.volume tcp.volume{rs} y_align tcp.volume{rs} y_align] w<270 [tcp.volume tcp.volume 3 tcp.volume tcp.volume{rs} y_align tcp.volume{rs} y_align] [tcp.volume tcp.volume 28 tcp.volume tcp.volume{rs} y_align tcp.volume{rs} y_align] + set tcp.volume.label.margin [1 1 3 0 1] + set tcp.recmode [0] + set tcp.recinput ?recarm + tcp_yanchor w<211 h<73 [0] [49 45 283 16 0 y_align 1 y_align] w<360 h<73 [0] [49 45 227 16 0 y_align 1 y_align] h<51 [0] [49 23 171 16 0 y_align 1 y_align] [0] + set tcp.env + tcp_yanchor w<270 h<73 [0] [7 45 15 16 0 y_align 0 y_align] w<360 h<73 [0] [7 45 15 16 0 y_align 0 y_align] h<51 [0] [7 23 15 16 0 y_align 0 y_align] + set tcp.recmon tcp.env{x}>0 + [21] [tcp.env tcp.env 15 16 tcp.env tcp.env tcp.env tcp.env] [0] + set tcp.phase [0] + set tcp.fxin [0] + set tcp.io [0] + set tcp.pan + tcp_yanchor w<211 h<95 [0] [7 65 18 18 0 y_align 0 y_align] h<51 [0] [281 22 18 18 1 y_align 1 y_align] + set tcp.pan.label tcp.pan{x}>0 + [tcp.pan{w} 1] [tcp.pan tcp.pan 32 16 tcp.pan y_align tcp.pan y_align] [0] + set tcp.width trackpanmode>=4 + tcp_yanchor w<211 h<95 [0] [63 65 18 18 0 y_align 0 y_align] w<360 h<73 [0] [281 44 18 18 1 y_align 1 y_align] h<51 [0] [225 22 18 18 1 y_align 1 y_align] [0] + set tcp.width.label trackpanmode>=4 tcp.width{x}>0 + [tcp.width{w} 1] [tcp.width tcp.width 32 16 tcp.width y_align tcp.width y_align] [0] [0] + set tcp.fxparm [0] + + Layout "2. Silver Minimal" "analog-silver" + set tcp_yanchor ?recarm w<211 h<73 h<51 [0 41] [0 30] [0 19] h<51 [0 41] [0 30] w<360 h<51 [0 41] [0 30] [0 41] + set tcp.recarm.fullmargin + tcp_yanchor [7 0 18 18 0 y_align 0 y_align] + set tcp.recarm + reverse_margin tcp.recarm.fullmargin + set tcp_label_fullmargin + tcp_yanchor w<211 [25 0 307 17 0 y_align 1 y_align] w<360 [25 0 251 17 0 y_align 1 y_align] [25 0 78 17 0 y_align 0.5 y_align] + set tcp.label + + reverse_margin tcp_label_fullmargin margin_to_width + set tcp.meter + tcp_yanchor w<211 h<51 [0] [342 26 29 9 1 y_align 1 y_align] [286 4 42 9 1 y_align 1 y_align] + set tcp.mute + tcp_yanchor [338 0 17 18 1 y_align 1 y_align] + set tcp.solo + tcp_yanchor [358 0 17 18 1 y_align 1 y_align] + set tcp.volume + tcp_yanchor w<211 h<51 [0] [7 23 322 16 0 y_align 1 y_align] w<270 h<51 [0] [7 23 266 16 0 y_align 1 y_align] w<360 h<51 [0] [7 23 241 16 0 y_align 1 y_align] [109 0 139 18 0.5 y_align 1 y_align] + set tcp.volume.label tcp.volume{x}>0 + [tcp.volume{w}] w<211 [tcp.volume tcp.volume 3 tcp.volume tcp.volume{rs} y_align tcp.volume{rs} y_align] w<270 [tcp.volume tcp.volume 3 tcp.volume tcp.volume{rs} y_align tcp.volume{rs} y_align] [tcp.volume tcp.volume 28 tcp.volume tcp.volume{rs} y_align tcp.volume{rs} y_align] + set tcp.pan [0] + set tcp.pan.label [0] + set tcp.width [0] + set tcp.width.label [0] + set tcp.env [0] + set tcp.recmon [0] + set tcp.fx [0] + set tcp.fxbyp [0] + set tcp.recinput ?recarm + tcp_yanchor w<211 h<73 [0] [7 45 325 16 0 y_align 1 y_align] w<360 h<51 [0] [282 22 93 16 1 y_align 1 y_align] h<51 [0] [109 23 167 16 0.5 y_align 1 y_align] [0] + EndLayout ; end of "Minimal (silver)" + + EndLayout ; end of "Reduced (silver)" + + Layout "3. Black Reduced" "analog-black" + set tcp_yanchor w<360 w<211 h<117 h<95 h<73 h<51 [0 41] [0 30] [0 19] [0 8] [0 8] h<73 h<51 [0 41] [0 30] [0 19] h<73 h<51 [0 41] [0 30] [0 30] + set y_align [0 0 0 0 0 0.5 0 0.5] + set tcp.fx + tcp_yanchor w<211 h<73 [0] [338 44 24 18 1 y_align 1 y_align] h<51 [0] [338 22 24 18 1 y_align 1 y_align] + set tcp.fxbyp tcp.fx{x}>0 + [tcp.fx tcp.fx 13 18 1 y_align 1 y_align] [tcp.fx{w}] [0] + set tcp.recarm.fullmargin + tcp_yanchor [7 0 18 18 0 y_align 0 y_align] + set tcp.recarm + reverse_margin tcp.recarm.fullmargin + set tcp_label_fullmargin + tcp_yanchor w<211 [25 0 307 17 0 y_align 1 y_align] w<360 [25 0 251 17 0 y_align 1 y_align] [25 0 78 17 0 y_align 0.5 y_align] + set tcp.label + + reverse_margin tcp_label_fullmargin margin_to_width + set tcp.label.margin [3 2 3 3] + set tcp.mute + tcp_yanchor [338 0 17 18 1 y_align 1 y_align] + set tcp.solo + tcp_yanchor [358 0 17 18 1 y_align 1 y_align] + set tcp.volume + tcp_yanchor w<211 h<51 [0] [7 23 322 16 0 y_align 1 y_align] w<270 h<51 [0] [7 23 266 16 0 y_align 1 y_align] w<360 h<51 [0] [7 23 241 16 0 y_align 1 y_align] [109 0 139 18 0.5 y_align 1 y_align] + set tcp.volume.label tcp.volume{x}>0 + [tcp.volume{w}] w<211 [tcp.volume tcp.volume 3 tcp.volume tcp.volume{rs} y_align tcp.volume{rs} y_align] w<270 [tcp.volume tcp.volume 3 tcp.volume tcp.volume{rs} y_align tcp.volume{rs} y_align] [tcp.volume tcp.volume 28 tcp.volume tcp.volume{rs} y_align tcp.volume{rs} y_align] + set tcp.volume.label.margin [1 1 3 0 1] + set tcp.recmode [0] + set tcp.recinput ?recarm + tcp_yanchor w<211 h<73 [0] [49 45 283 16 0 y_align 1 y_align] w<360 h<73 [0] [49 45 227 16 0 y_align 1 y_align] h<51 [0] [49 23 171 16 0 y_align 1 y_align] [0] + set tcp.env + tcp_yanchor w<270 h<73 [0] [7 45 15 16 0 y_align 0 y_align] w<360 h<73 [0] [7 45 15 16 0 y_align 0 y_align] h<51 [0] [7 23 15 16 0 y_align 0 y_align] + set tcp.recmon tcp.env{x}>0 + [21] [tcp.env tcp.env 15 16 tcp.env tcp.env tcp.env tcp.env] [0] + set tcp.phase [0] + set tcp.fxin [0] + set tcp.io [0] + set tcp.pan + tcp_yanchor w<211 h<95 [0] [7 65 18 18 0 y_align 0 y_align] h<51 [0] [281 22 18 18 1 y_align 1 y_align] + set tcp.pan.label tcp.pan{x}>0 + [tcp.pan{w} 1] [tcp.pan tcp.pan 32 16 tcp.pan y_align tcp.pan y_align] [0] + set tcp.width trackpanmode>=4 + tcp_yanchor w<211 h<95 [0] [63 65 18 18 0 y_align 0 y_align] w<360 h<73 [0] [281 44 18 18 1 y_align 1 y_align] h<51 [0] [225 22 18 18 1 y_align 1 y_align] [0] + set tcp.width.label trackpanmode>=4 tcp.width{x}>0 + [tcp.width{w} 1] [tcp.width tcp.width 32 16 tcp.width y_align tcp.width y_align] [0] [0] + set tcp.fxparm [0] + + set tcp.volume tcp.volume +set tcp.label.color ?recarm [255 97 97] [150 150 150] +set tcp.recinput.color [140 140 140] +set tcp.pan.color [190 190 190 191 0 0 0 0] +set tcp.pan.label.color [150 150 150] +set tcp.width.color [190 190 190 225 0 0 0 0] +set tcp.width.label.color [150 150 150] +set tcp.volume.label.color [150 150 150] + + Layout "3. Black Minimal" "analog-black" + set tcp_yanchor ?recarm w<211 h<73 h<51 [0 41] [0 30] [0 19] h<51 [0 41] [0 30] w<360 h<51 [0 41] [0 30] [0 41] + set tcp.recarm.fullmargin + tcp_yanchor [7 0 18 18 0 y_align 0 y_align] + set tcp.recarm + reverse_margin tcp.recarm.fullmargin + set tcp_label_fullmargin + tcp_yanchor w<211 [25 0 307 17 0 y_align 1 y_align] w<360 [25 0 251 17 0 y_align 1 y_align] [25 0 78 17 0 y_align 0.5 y_align] + set tcp.label + + reverse_margin tcp_label_fullmargin margin_to_width + set tcp.meter + tcp_yanchor w<211 h<51 [0] [342 26 29 9 1 y_align 1 y_align] [286 4 42 9 1 y_align 1 y_align] + set tcp.mute + tcp_yanchor [338 0 17 18 1 y_align 1 y_align] + set tcp.solo + tcp_yanchor [358 0 17 18 1 y_align 1 y_align] + set tcp.volume + tcp_yanchor w<211 h<51 [0] [7 23 322 16 0 y_align 1 y_align] w<270 h<51 [0] [7 23 266 16 0 y_align 1 y_align] w<360 h<51 [0] [7 23 241 16 0 y_align 1 y_align] [109 0 139 18 0.5 y_align 1 y_align] + set tcp.volume.label tcp.volume{x}>0 + [tcp.volume{w}] w<211 [tcp.volume tcp.volume 3 tcp.volume tcp.volume{rs} y_align tcp.volume{rs} y_align] w<270 [tcp.volume tcp.volume 3 tcp.volume tcp.volume{rs} y_align tcp.volume{rs} y_align] [tcp.volume tcp.volume 28 tcp.volume tcp.volume{rs} y_align tcp.volume{rs} y_align] + set tcp.pan [0] + set tcp.pan.label [0] + set tcp.width [0] + set tcp.width.label [0] + set tcp.env [0] + set tcp.recmon [0] + set tcp.fx [0] + set tcp.fxbyp [0] + set tcp.recinput ?recarm + tcp_yanchor w<211 h<73 [0] [7 45 325 16 0 y_align 1 y_align] w<360 h<51 [0] [282 22 93 16 1 y_align 1 y_align] h<51 [0] [109 23 167 16 0.5 y_align 1 y_align] [0] + EndLayout ; end of "Minimal (black)" + + EndLayout ; end of "Reduced (black)" + + + Layout "1. Classic Top Aligned" + set y_align h<51 [0 0 0 0 0 0.5 0 0.5] [0 0 0 0 0 0 0 0] + set tcp_yanchor w<211 h>=51 [0 8] . h>=51 [0 8] + set tcp.meter + tcp_yanchor w<211 h<51 [0] [342 26 29 9 1 y_align 1 y_align] [286 4 42 9 1 y_align 1 y_align] + set tcp.fx + tcp_yanchor w<211 h<73 [0] [338 44 24 18 1 y_align 1 y_align] h<51 [0] [338 22 24 18 1 y_align 1 y_align] + set tcp.fxbyp tcp.fx{x}>0 + [tcp.fx tcp.fx 13 18 1 y_align 1 y_align] [tcp.fx{w}] [0] + set tcp.recarm.fullmargin + tcp_yanchor [7 0 18 18 0 y_align 0 y_align] + set tcp.recarm + reverse_margin tcp.recarm.fullmargin + set tcp_label_fullmargin + tcp_yanchor w<211 [25 0 285 17 0 y_align 1 y_align] w<270 [25 0 229 17 0 y_align 1 y_align] w<360 [25 0 193 17 0 y_align 1 y_align] [25 0 75 17 0 y_align 0.5 y_align] + set tcp.label + + reverse_margin tcp_label_fullmargin margin_to_width + set tcp.io + tcp_yanchor w<211 [310 0 22 18 1 y_align 1 y_align] w<270 [254 0 22 18 1 y_align 1 y_align] w<360 [218 0 58 18 1 y_align 1 y_align] [100 0 58 18 0.5 y_align 0.5 y_align] ; additional definition below + set tcp.mute + tcp_yanchor [338 0 17 18 1 y_align 1 y_align] + set tcp.solo + tcp_yanchor [358 0 17 18 1 y_align 1 y_align] + set tcp.volume + tcp_yanchor w<211 h<51 [0] [7 23 322 16 0 y_align 1 y_align] w<270 h<51 [0] [7 23 266 16 0 y_align 1 y_align] w<360 h<51 [0] [7 23 241 16 0 y_align 1 y_align] [164 0 84 18 0.5 y_align 1 y_align] + set tcp.volume.label tcp.volume{x}>0 + [tcp.volume{w}] w<211 [tcp.volume tcp.volume 3 tcp.volume tcp.volume{rs} y_align tcp.volume{rs} y_align] w<270 [tcp.volume tcp.volume 3 tcp.volume tcp.volume{rs} y_align tcp.volume{rs} y_align] [tcp.volume tcp.volume 28 tcp.volume tcp.volume{rs} y_align tcp.volume{rs} y_align] + set tcp.phase + tcp_yanchor w<211 h<95 [0] [63 66 15 16 0 y_align 0 y_align] w<270 h<73 [0] [28 45 15 16 0 y_align 0 y_align] w<360 h<73 [0] [55 45 15 16 0 y_align 0 y_align] h<51 [0] [55 23 15 16 0 y_align 0 y_align] + set tcp.recmon + tcp_yanchor w<211 h<95 [0] [338 66 15 16 1 y_align 1 y_align] w<360 h<73 [0] [338 45 15 16 1 y_align 1 y_align] h<51 [0] [239 23 15 16 1 y_align 1 y_align] + set tcp.recmode + tcp_yanchor w<211 h<95 [0] [352 66 23 16 1 y_align 1 y_align] w<360 h<73 [0] [352 45 23 16 1 y_align 1 y_align] h<51 [0] [253 23 23 16 1 y_align 1 y_align] + set tcp.recinput + tcp_yanchor w<211 h<73 [0] [28 45 304 16 0 y_align 1 y_align] w<270 h<73 [0] [49 45 227 16 0 y_align 1 y_align] w<360 h<73 [0] [76 45 200 16 0 y_align 1 y_align] h<51 [0] [76 23 157 16 0 y_align 1 y_align] + set tcp.recinput.margin [4 0 16 0] + set tcp.env + tcp_yanchor w<270 h<73 [0] [7 45 15 16 0 y_align 0 y_align] w<360 h<73 [0] [7 45 42 16 0 y_align 0 y_align] h<51 [0] [7 23 42 16 0 y_align 0 y_align] + set tcp.fxin ?recarm tcp.io{w}==58 + tcp_yanchor w<211 [0] w<270 [254 0 36 18 1 y_align 1 y_align] w<360 [218 0 36 18 1 y_align 1 y_align] [100 0 36 18 0.5 y_align 0.5 y_align] [0] [0] + set tcp.io ?recarm tcp.io{w}==58 + [36] [tcp.io tcp.io 22 18 tcp.io tcp.io tcp.io tcp.io] + set tcp.pan + tcp_yanchor w<211 h<95 [0] [6 65 18 18 0 y_align 0 y_align] h<51 [0] [281 22 18 18 1 y_align 1 y_align] + set tcp.pan.label tcp.pan{x}>0 + [tcp.pan{w} 1] [tcp.pan tcp.pan 32 16 tcp.pan y_align tcp.pan y_align] [0] + set tcp.width trackpanmode>=4 + tcp_yanchor w<211 h<117 [0] [6 86 18 18 0 y_align 0 y_align] h<73 [0] [281 44 18 18 1 y_align 1 y_align] [0] + set tcp.width.label trackpanmode>=4 tcp.width{x}>0 + [tcp.width{w} 1] [tcp.width tcp.width 32 16 tcp.width y_align tcp.width y_align] [0] [0] + set tcp.fxparm w<360 w<211 trackpanmode>=4 [7 118 368 -24 0 0 1 1] [7 97 368 -3 0 0 1 1] [7 76 368 18 0 0 1 1] trackpanmode>=4 [7 76 368 18 0 0 1 1] [7 54 368 40 0 0 1 1] + EndLayout ; end of "Top Aligned" + + Layout "2. Silver Top Aligned" "analog-silver" + set y_align h<51 [0 0 0 0 0 0.5 0 0.5] [0 0 0 0 0 0 0 0] + set tcp_yanchor w<211 h>=51 [0 8] . h>=51 [0 8] + set tcp.meter + tcp_yanchor w<211 h<51 [0] [342 26 29 9 1 y_align 1 y_align] [286 4 42 9 1 y_align 1 y_align] + set tcp.fx + tcp_yanchor w<211 h<73 [0] [338 44 24 18 1 y_align 1 y_align] h<51 [0] [338 22 24 18 1 y_align 1 y_align] + set tcp.fxbyp tcp.fx{x}>0 + [tcp.fx tcp.fx 13 18 1 y_align 1 y_align] [tcp.fx{w}] [0] + set tcp.recarm.fullmargin + tcp_yanchor [7 0 18 18 0 y_align 0 y_align] + set tcp.recarm + reverse_margin tcp.recarm.fullmargin + set tcp_label_fullmargin + tcp_yanchor w<211 [25 0 285 17 0 y_align 1 y_align] w<270 [25 0 229 17 0 y_align 1 y_align] w<360 [25 0 193 17 0 y_align 1 y_align] [25 0 75 17 0 y_align 0.5 y_align] + set tcp.label + + reverse_margin tcp_label_fullmargin margin_to_width + set tcp.io + tcp_yanchor w<211 [310 0 22 18 1 y_align 1 y_align] w<270 [254 0 22 18 1 y_align 1 y_align] w<360 [218 0 58 18 1 y_align 1 y_align] [100 0 58 18 0.5 y_align 0.5 y_align] ; additional definition below + set tcp.mute + tcp_yanchor [338 0 17 18 1 y_align 1 y_align] + set tcp.solo + tcp_yanchor [358 0 17 18 1 y_align 1 y_align] + set tcp.volume + tcp_yanchor w<211 h<51 [0] [7 23 322 16 0 y_align 1 y_align] w<270 h<51 [0] [7 23 266 16 0 y_align 1 y_align] w<360 h<51 [0] [7 23 241 16 0 y_align 1 y_align] [164 0 84 18 0.5 y_align 1 y_align] + set tcp.volume.label tcp.volume{x}>0 + [tcp.volume{w}] w<211 [tcp.volume tcp.volume 3 tcp.volume tcp.volume{rs} y_align tcp.volume{rs} y_align] w<270 [tcp.volume tcp.volume 3 tcp.volume tcp.volume{rs} y_align tcp.volume{rs} y_align] [tcp.volume tcp.volume 28 tcp.volume tcp.volume{rs} y_align tcp.volume{rs} y_align] + set tcp.phase + tcp_yanchor w<211 h<95 [0] [63 66 15 16 0 y_align 0 y_align] w<270 h<73 [0] [28 45 15 16 0 y_align 0 y_align] w<360 h<73 [0] [55 45 15 16 0 y_align 0 y_align] h<51 [0] [55 23 15 16 0 y_align 0 y_align] + set tcp.recmon + tcp_yanchor w<211 h<95 [0] [338 66 15 16 1 y_align 1 y_align] w<360 h<73 [0] [338 45 15 16 1 y_align 1 y_align] h<51 [0] [239 23 15 16 1 y_align 1 y_align] + set tcp.recmode + tcp_yanchor w<211 h<95 [0] [352 66 23 16 1 y_align 1 y_align] w<360 h<73 [0] [352 45 23 16 1 y_align 1 y_align] h<51 [0] [253 23 23 16 1 y_align 1 y_align] + set tcp.recinput + tcp_yanchor w<211 h<73 [0] [28 45 304 16 0 y_align 1 y_align] w<270 h<73 [0] [49 45 227 16 0 y_align 1 y_align] w<360 h<73 [0] [76 45 200 16 0 y_align 1 y_align] h<51 [0] [76 23 157 16 0 y_align 1 y_align] + set tcp.recinput.margin [4 0 16 0] + set tcp.env + tcp_yanchor w<270 h<73 [0] [7 45 15 16 0 y_align 0 y_align] w<360 h<73 [0] [7 45 42 16 0 y_align 0 y_align] h<51 [0] [7 23 42 16 0 y_align 0 y_align] + set tcp.fxin ?recarm tcp.io{w}==58 + tcp_yanchor w<211 [0] w<270 [254 0 36 18 1 y_align 1 y_align] w<360 [218 0 36 18 1 y_align 1 y_align] [100 0 36 18 0.5 y_align 0.5 y_align] [0] [0] + set tcp.io ?recarm tcp.io{w}==58 + [36] [tcp.io tcp.io 22 18 tcp.io tcp.io tcp.io tcp.io] + set tcp.pan + tcp_yanchor w<211 h<95 [0] [6 65 18 18 0 y_align 0 y_align] h<51 [0] [281 22 18 18 1 y_align 1 y_align] + set tcp.pan.label tcp.pan{x}>0 + [tcp.pan{w} 1] [tcp.pan tcp.pan 32 16 tcp.pan y_align tcp.pan y_align] [0] + set tcp.width trackpanmode>=4 + tcp_yanchor w<211 h<117 [0] [6 86 18 18 0 y_align 0 y_align] h<73 [0] [281 44 18 18 1 y_align 1 y_align] [0] + set tcp.width.label trackpanmode>=4 tcp.width{x}>0 + [tcp.width{w} 1] [tcp.width tcp.width 32 16 tcp.width y_align tcp.width y_align] [0] [0] + set tcp.fxparm w<360 w<211 trackpanmode>=4 [7 118 368 -24 0 0 1 1] [7 97 368 -3 0 0 1 1] [7 76 368 18 0 0 1 1] trackpanmode>=4 [7 76 368 18 0 0 1 1] [7 54 368 40 0 0 1 1] + EndLayout ; end of "Top Aligned (silver)" + + + Layout "3. Black Top Aligned" "analog-black" + set y_align h<51 [0 0 0 0 0 0.5 0 0.5] [0 0 0 0 0 0 0 0] + set tcp_yanchor w<211 h>=51 [0 8] . h>=51 [0 8] + set tcp.meter + tcp_yanchor w<211 h<51 [0] [342 26 29 9 1 y_align 1 y_align] [286 4 42 9 1 y_align 1 y_align] + set tcp.fx + tcp_yanchor w<211 h<73 [0] [338 44 24 18 1 y_align 1 y_align] h<51 [0] [338 22 24 18 1 y_align 1 y_align] + set tcp.fxbyp tcp.fx{x}>0 + [tcp.fx tcp.fx 13 18 1 y_align 1 y_align] [tcp.fx{w}] [0] + set tcp.recarm.fullmargin + tcp_yanchor [7 0 18 18 0 y_align 0 y_align] + set tcp.recarm + reverse_margin tcp.recarm.fullmargin + set tcp_label_fullmargin + tcp_yanchor w<211 [25 0 285 17 0 y_align 1 y_align] w<270 [25 0 229 17 0 y_align 1 y_align] w<360 [25 0 193 17 0 y_align 1 y_align] [25 0 75 17 0 y_align 0.5 y_align] + set tcp.label + + reverse_margin tcp_label_fullmargin margin_to_width + set tcp.io + tcp_yanchor w<211 [310 0 22 18 1 y_align 1 y_align] w<270 [254 0 22 18 1 y_align 1 y_align] w<360 [218 0 58 18 1 y_align 1 y_align] [100 0 58 18 0.5 y_align 0.5 y_align] ; additional definition below + set tcp.mute + tcp_yanchor [338 0 17 18 1 y_align 1 y_align] + set tcp.solo + tcp_yanchor [358 0 17 18 1 y_align 1 y_align] + set tcp.volume + tcp_yanchor w<211 h<51 [0] [7 23 322 16 0 y_align 1 y_align] w<270 h<51 [0] [7 23 266 16 0 y_align 1 y_align] w<360 h<51 [0] [7 23 241 16 0 y_align 1 y_align] [164 0 84 18 0.5 y_align 1 y_align] + set tcp.volume.label tcp.volume{x}>0 + [tcp.volume{w}] w<211 [tcp.volume tcp.volume 3 tcp.volume tcp.volume{rs} y_align tcp.volume{rs} y_align] w<270 [tcp.volume tcp.volume 3 tcp.volume tcp.volume{rs} y_align tcp.volume{rs} y_align] [tcp.volume tcp.volume 28 tcp.volume tcp.volume{rs} y_align tcp.volume{rs} y_align] + set tcp.phase + tcp_yanchor w<211 h<95 [0] [63 66 15 16 0 y_align 0 y_align] w<270 h<73 [0] [28 45 15 16 0 y_align 0 y_align] w<360 h<73 [0] [55 45 15 16 0 y_align 0 y_align] h<51 [0] [55 23 15 16 0 y_align 0 y_align] + set tcp.recmon + tcp_yanchor w<211 h<95 [0] [338 66 15 16 1 y_align 1 y_align] w<360 h<73 [0] [338 45 15 16 1 y_align 1 y_align] h<51 [0] [239 23 15 16 1 y_align 1 y_align] + set tcp.recmode + tcp_yanchor w<211 h<95 [0] [352 66 23 16 1 y_align 1 y_align] w<360 h<73 [0] [352 45 23 16 1 y_align 1 y_align] h<51 [0] [253 23 23 16 1 y_align 1 y_align] + set tcp.recinput + tcp_yanchor w<211 h<73 [0] [28 45 304 16 0 y_align 1 y_align] w<270 h<73 [0] [49 45 227 16 0 y_align 1 y_align] w<360 h<73 [0] [76 45 200 16 0 y_align 1 y_align] h<51 [0] [76 23 157 16 0 y_align 1 y_align] + set tcp.recinput.margin [4 0 16 0] + set tcp.env + tcp_yanchor w<270 h<73 [0] [7 45 15 16 0 y_align 0 y_align] w<360 h<73 [0] [7 45 42 16 0 y_align 0 y_align] h<51 [0] [7 23 42 16 0 y_align 0 y_align] + set tcp.fxin ?recarm tcp.io{w}==58 + tcp_yanchor w<211 [0] w<270 [254 0 36 18 1 y_align 1 y_align] w<360 [218 0 36 18 1 y_align 1 y_align] [100 0 36 18 0.5 y_align 0.5 y_align] [0] [0] + set tcp.io ?recarm tcp.io{w}==58 + [36] [tcp.io tcp.io 22 18 tcp.io tcp.io tcp.io tcp.io] + set tcp.pan + tcp_yanchor w<211 h<95 [0] [6 65 18 18 0 y_align 0 y_align] h<51 [0] [281 22 18 18 1 y_align 1 y_align] + set tcp.pan.label tcp.pan{x}>0 + [tcp.pan{w} 1] [tcp.pan tcp.pan 32 16 tcp.pan y_align tcp.pan y_align] [0] + set tcp.width trackpanmode>=4 + tcp_yanchor w<211 h<117 [0] [6 86 18 18 0 y_align 0 y_align] h<73 [0] [281 44 18 18 1 y_align 1 y_align] [0] + set tcp.width.label trackpanmode>=4 tcp.width{x}>0 + [tcp.width{w} 1] [tcp.width tcp.width 32 16 tcp.width y_align tcp.width y_align] [0] [0] + set tcp.fxparm w<360 w<211 trackpanmode>=4 [7 118 368 -24 0 0 1 1] [7 97 368 -3 0 0 1 1] [7 76 368 18 0 0 1 1] trackpanmode>=4 [7 76 368 18 0 0 1 1] [7 54 368 40 0 0 1 1] + + set tcp.volume tcp.volume +set tcp.label.color ?recarm [255 97 97] [150 150 150] +set tcp.recinput.color [140 140 140] +set tcp.pan.color [190 190 190 191 0 0 0 0] +set tcp.pan.label.color [150 150 150] +set tcp.width.color [190 190 190 225 0 0 0 0] +set tcp.width.label.color [150 150 150] +set tcp.volume.label.color [150 150 150] + + EndLayout ; end of "Top Aligned (black)" + + Layout "1. Classic Shy Meter" + set y_align ?tcp_fxparms w<211 h<125 [0 0 0 0 0 0.5 0 0.5] [0 0 0 0 0 0 0 0] h<90 [0 0 0 0 0 0.5 0 0.5] [0 0 0 0 0 0 0 0] [0 0 0 0 0 0.5 0 0.5] + set tcp_yanchor w<211 h<117 h<95 h<73 h<51 [0 41] [0 30] [0 19] [0 8] trackpanmode>=4 [0 -3] [0 8] h<73 h<51 [0 41] [0 30] [0 19] h<73 h<51 [0 41] [0 30] + set tcp_yanchor ?tcp_fxparms w<211 h>=125 [0 8] . h>=90 [0 8] . + set tcp.meter + tcp_yanchor w<211 h<73 [0] [11 48 261 9 0 y_align 1 y_align] h<73 [0] [11 48 261 9 0 y_align 1 y_align] + set tcp.fx + tcp_yanchor h<51 [0] [338 22 24 18 1 y_align 1 y_align] + set tcp.fxbyp tcp.fx{x}>0 + [tcp.fx tcp.fx 13 18 1 y_align 1 y_align] [tcp.fx{w}] [0] + set tcp.recarm.fullmargin + tcp_yanchor [7 0 18 18 0 y_align 0 y_align] + set tcp.recarm + reverse_margin tcp.recarm.fullmargin + set tcp_label_fullmargin + tcp_yanchor w<211 [25 0 285 17 0 y_align 1 y_align] w<270 [25 0 229 17 0 y_align 1 y_align] [25 0 193 17 0 y_align 1 y_align] + set tcp.label + + reverse_margin tcp_label_fullmargin margin_to_width + set tcp.io + tcp_yanchor w<211 [310 0 22 18 1 y_align 1 y_align] w<270 [254 0 22 18 1 y_align 1 y_align] [218 0 58 18 1 y_align 1 y_align] ; additional definition below + set tcp.mute + tcp_yanchor [338 0 17 18 1 y_align 1 y_align] + set tcp.solo + tcp_yanchor [358 0 17 18 1 y_align 1 y_align] + set tcp.volume + tcp_yanchor w<211 h<73 [0] [281 44 18 18 1 y_align 1 y_align] [281 0 18 18 1 y_align 1 y_align] + set tcp.volume.label tcp.volume{x}>0 + [tcp.volume{w}] [tcp.volume tcp.volume 33 tcp.volume tcp.volume{rs} y_align tcp.volume{rs} y_align] [0] + set tcp.phase + tcp_yanchor w<211 h<95 [0] [63 66 15 16 0 y_align 0 y_align] w<270 h<51 [0] [28 23 15 16 0 y_align 0 y_align] w<360 h<51 [0] [55 23 15 16 0 y_align 0 y_align] h<51 [0] [55 23 15 16 0 y_align 0 y_align] + set tcp.recmon + tcp_yanchor h<73 [0] [338 45 15 16 1 y_align 1 y_align] + set tcp.recmode + tcp_yanchor h<73 [0] [352 45 23 16 1 y_align 1 y_align] + set tcp.recinput + tcp_yanchor w<211 h<51 [0] [28 23 304 16 0 y_align 1 y_align] w<270 h<51 [0] [49 23 227 16 0 y_align 1 y_align] h<51 [0] [76 23 200 16 0 y_align 1 y_align] + set tcp.env + tcp_yanchor w<270 h<51 [0] [7 23 15 16 0 y_align 0 y_align] w<360 h<51 [0] [7 23 42 16 0 y_align 0 y_align] h<51 [0] [7 23 42 16 0 y_align 0 y_align] + set tcp.fxin ?recarm tcp.io{w}==58 + tcp_yanchor w<211 [0] w<270 [254 0 36 18 1 y_align 1 y_align] [218 0 36 18 1 y_align 1 y_align] [0] [0] + set tcp.io ?recarm tcp.io{w}==58 + [36] [tcp.io tcp.io 22 18 tcp.io tcp.io tcp.io tcp.io] + set tcp.pan + tcp_yanchor w<211 h<95 [0] [6 65 18 18 0 y_align 0 y_align] h<51 [0] [281 22 18 18 1 y_align 1 y_align] + set tcp.pan.label tcp.pan{x}>0 + [tcp.pan{w} 1] [tcp.pan tcp.pan 32 16 tcp.pan y_align tcp.pan y_align] [0] + set tcp.width trackpanmode>=4 + tcp_yanchor w<211 h<117 [0] [6 86 18 18 0 y_align 0 y_align] h<73 [0] [281 44 18 18 1 y_align 1 y_align] [0] + set tcp.width.label trackpanmode>=4 tcp.width{x}>0 + [tcp.width{w} 1] [tcp.width tcp.width 32 16 tcp.width y_align tcp.width y_align] [0] [0] + set tcp.fxparm w<211 trackpanmode>=4 [7 118 368 -24 0 0 1 1] [7 97 368 -3 0 0 1 1] [7 76 368 18 0 0 1 1] + EndLayout ; end of "Shy Meter" + + Layout "2. Silver Shy Meter" "analog-silver" + set y_align ?tcp_fxparms w<211 h<125 [0 0 0 0 0 0.5 0 0.5] [0 0 0 0 0 0 0 0] h<90 [0 0 0 0 0 0.5 0 0.5] [0 0 0 0 0 0 0 0] [0 0 0 0 0 0.5 0 0.5] + set tcp_yanchor w<211 h<117 h<95 h<73 h<51 [0 41] [0 30] [0 19] [0 8] trackpanmode>=4 [0 -3] [0 8] h<73 h<51 [0 41] [0 30] [0 19] h<73 h<51 [0 41] [0 30] + set tcp_yanchor ?tcp_fxparms w<211 h>=125 [0 8] . h>=90 [0 8] . + set tcp.meter + tcp_yanchor w<211 h<73 [0] [11 48 261 9 0 y_align 1 y_align] h<73 [0] [11 48 261 9 0 y_align 1 y_align] + set tcp.fx + tcp_yanchor h<51 [0] [338 22 24 18 1 y_align 1 y_align] + set tcp.fxbyp tcp.fx{x}>0 + [tcp.fx tcp.fx 13 18 1 y_align 1 y_align] [tcp.fx{w}] [0] + set tcp.recarm.fullmargin + tcp_yanchor [7 0 18 18 0 y_align 0 y_align] + set tcp.recarm + reverse_margin tcp.recarm.fullmargin + set tcp_label_fullmargin + tcp_yanchor w<211 [25 0 285 17 0 y_align 1 y_align] w<270 [25 0 229 17 0 y_align 1 y_align] [25 0 193 17 0 y_align 1 y_align] + set tcp.label + + reverse_margin tcp_label_fullmargin margin_to_width + set tcp.io + tcp_yanchor w<211 [310 0 22 18 1 y_align 1 y_align] w<270 [254 0 22 18 1 y_align 1 y_align] [218 0 58 18 1 y_align 1 y_align] ; additional definition below + set tcp.mute + tcp_yanchor [338 0 17 18 1 y_align 1 y_align] + set tcp.solo + tcp_yanchor [358 0 17 18 1 y_align 1 y_align] + set tcp.volume + tcp_yanchor w<211 h<73 [0] [281 44 18 18 1 y_align 1 y_align] [281 0 18 18 1 y_align 1 y_align] + set tcp.volume.label tcp.volume{x}>0 + [tcp.volume{w}] [tcp.volume tcp.volume 33 tcp.volume tcp.volume{rs} y_align tcp.volume{rs} y_align] [0] + set tcp.phase + tcp_yanchor w<211 h<95 [0] [63 66 15 16 0 y_align 0 y_align] w<270 h<51 [0] [28 23 15 16 0 y_align 0 y_align] w<360 h<51 [0] [55 23 15 16 0 y_align 0 y_align] h<51 [0] [55 23 15 16 0 y_align 0 y_align] + set tcp.recmon + tcp_yanchor h<73 [0] [338 45 15 16 1 y_align 1 y_align] + set tcp.recmode + tcp_yanchor h<73 [0] [352 45 23 16 1 y_align 1 y_align] + set tcp.recinput + tcp_yanchor w<211 h<51 [0] [28 23 304 16 0 y_align 1 y_align] w<270 h<51 [0] [49 23 227 16 0 y_align 1 y_align] h<51 [0] [76 23 200 16 0 y_align 1 y_align] + set tcp.env + tcp_yanchor w<270 h<51 [0] [7 23 15 16 0 y_align 0 y_align] w<360 h<51 [0] [7 23 42 16 0 y_align 0 y_align] h<51 [0] [7 23 42 16 0 y_align 0 y_align] + set tcp.fxin ?recarm tcp.io{w}==58 + tcp_yanchor w<211 [0] w<270 [254 0 36 18 1 y_align 1 y_align] [218 0 36 18 1 y_align 1 y_align] [0] [0] + set tcp.io ?recarm tcp.io{w}==58 + [36] [tcp.io tcp.io 22 18 tcp.io tcp.io tcp.io tcp.io] + set tcp.pan + tcp_yanchor w<211 h<95 [0] [6 65 18 18 0 y_align 0 y_align] h<51 [0] [281 22 18 18 1 y_align 1 y_align] + set tcp.pan.label tcp.pan{x}>0 + [tcp.pan{w} 1] [tcp.pan tcp.pan 32 16 tcp.pan y_align tcp.pan y_align] [0] + set tcp.width trackpanmode>=4 + tcp_yanchor w<211 h<117 [0] [6 86 18 18 0 y_align 0 y_align] h<73 [0] [281 44 18 18 1 y_align 1 y_align] [0] + set tcp.width.label trackpanmode>=4 tcp.width{x}>0 + [tcp.width{w} 1] [tcp.width tcp.width 32 16 tcp.width y_align tcp.width y_align] [0] [0] + set tcp.fxparm w<211 trackpanmode>=4 [7 118 368 -24 0 0 1 1] [7 97 368 -3 0 0 1 1] [7 76 368 18 0 0 1 1] + EndLayout ; end of "Shy Meter (silver)" + + Layout "3. Black Shy Meter" "analog-black" + set y_align ?tcp_fxparms w<211 h<125 [0 0 0 0 0 0.5 0 0.5] [0 0 0 0 0 0 0 0] h<90 [0 0 0 0 0 0.5 0 0.5] [0 0 0 0 0 0 0 0] [0 0 0 0 0 0.5 0 0.5] + set tcp_yanchor w<211 h<117 h<95 h<73 h<51 [0 41] [0 30] [0 19] [0 8] trackpanmode>=4 [0 -3] [0 8] h<73 h<51 [0 41] [0 30] [0 19] h<73 h<51 [0 41] [0 30] + set tcp_yanchor ?tcp_fxparms w<211 h>=125 [0 8] . h>=90 [0 8] . + set tcp.meter + tcp_yanchor w<211 h<73 [0] [11 48 261 9 0 y_align 1 y_align] h<73 [0] [11 48 261 9 0 y_align 1 y_align] + + ;set tcp.meter.readout.color [120 120 120 140 255 255 255 200] [0 0 0 0 0 0 0 0] + ;set tcp.meter.scale.color.unlit.left [0 0 0 0 0 0 0 0] [80 80 80 100 0 0 0 255] + ;set tcp.meter.scale.color.unlit.right [0 0 0 0 0 0 0 0] [120 120 120 100 0 0 0 255] + ;set tcp.meter.scale.color.lit.left [0 0 0 0 0 0 0 0] [150 150 150 255 0 0 0 50] + ;set tcp.meter.scale.color.lit.right [0 0 0 0 0 0 0 0] [150 150 150 255 0 0 0 50] + + + set tcp.fx + tcp_yanchor h<51 [0] [338 22 24 18 1 y_align 1 y_align] + set tcp.fxbyp tcp.fx{x}>0 + [tcp.fx tcp.fx 13 18 1 y_align 1 y_align] [tcp.fx{w}] [0] + set tcp.recarm.fullmargin + tcp_yanchor [7 0 18 18 0 y_align 0 y_align] + set tcp.recarm + reverse_margin tcp.recarm.fullmargin + set tcp_label_fullmargin + tcp_yanchor w<211 [25 0 285 17 0 y_align 1 y_align] w<270 [25 0 229 17 0 y_align 1 y_align] [25 0 193 17 0 y_align 1 y_align] + set tcp.label + + reverse_margin tcp_label_fullmargin margin_to_width + set tcp.io + tcp_yanchor w<211 [310 0 22 18 1 y_align 1 y_align] w<270 [254 0 22 18 1 y_align 1 y_align] [218 0 58 18 1 y_align 1 y_align] ; additional definition below + set tcp.mute + tcp_yanchor [338 0 17 18 1 y_align 1 y_align] + set tcp.solo + tcp_yanchor [358 0 17 18 1 y_align 1 y_align] + set tcp.volume + tcp_yanchor w<211 h<73 [0] [281 44 18 18 1 y_align 1 y_align] [281 0 18 18 1 y_align 1 y_align] + set tcp.volume.label tcp.volume{x}>0 + [tcp.volume{w}] [tcp.volume tcp.volume 33 tcp.volume tcp.volume{rs} y_align tcp.volume{rs} y_align] [0] + set tcp.phase + tcp_yanchor w<211 h<95 [0] [63 66 15 16 0 y_align 0 y_align] w<270 h<51 [0] [28 23 15 16 0 y_align 0 y_align] w<360 h<51 [0] [55 23 15 16 0 y_align 0 y_align] h<51 [0] [55 23 15 16 0 y_align 0 y_align] + set tcp.recmon + tcp_yanchor h<73 [0] [338 45 15 16 1 y_align 1 y_align] + set tcp.recmode + tcp_yanchor h<73 [0] [352 45 23 16 1 y_align 1 y_align] + set tcp.recinput + tcp_yanchor w<211 h<51 [0] [28 23 304 16 0 y_align 1 y_align] w<270 h<51 [0] [49 23 227 16 0 y_align 1 y_align] h<51 [0] [76 23 200 16 0 y_align 1 y_align] + set tcp.env + tcp_yanchor w<270 h<51 [0] [7 23 15 16 0 y_align 0 y_align] w<360 h<51 [0] [7 23 42 16 0 y_align 0 y_align] h<51 [0] [7 23 42 16 0 y_align 0 y_align] + set tcp.fxin ?recarm tcp.io{w}==58 + tcp_yanchor w<211 [0] w<270 [254 0 36 18 1 y_align 1 y_align] [218 0 36 18 1 y_align 1 y_align] [0] [0] + set tcp.io ?recarm tcp.io{w}==58 + [36] [tcp.io tcp.io 22 18 tcp.io tcp.io tcp.io tcp.io] + set tcp.pan + tcp_yanchor w<211 h<95 [0] [6 65 18 18 0 y_align 0 y_align] h<51 [0] [281 22 18 18 1 y_align 1 y_align] + set tcp.pan.label tcp.pan{x}>0 + [tcp.pan{w} 1] [tcp.pan tcp.pan 32 16 tcp.pan y_align tcp.pan y_align] [0] + set tcp.width trackpanmode>=4 + tcp_yanchor w<211 h<117 [0] [6 86 18 18 0 y_align 0 y_align] h<73 [0] [281 44 18 18 1 y_align 1 y_align] [0] + set tcp.width.label trackpanmode>=4 tcp.width{x}>0 + [tcp.width{w} 1] [tcp.width tcp.width 32 16 tcp.width y_align tcp.width y_align] [0] [0] + set tcp.fxparm w<211 trackpanmode>=4 [7 118 368 -24 0 0 1 1] [7 97 368 -3 0 0 1 1] [7 76 368 18 0 0 1 1] + + set tcp.volume tcp.volume +set tcp.label.color ?recarm [255 97 97] [150 150 150] +set tcp.recinput.color [140 140 140] +set tcp.pan.color [190 190 190 191 0 0 0 0] +set tcp.pan.label.color [150 150 150] +set tcp.width.color [190 190 190 225 0 0 0 0] +set tcp.width.label.color [150 150 150] +set tcp.volume.label.color [150 150 150] + + + + + EndLayout ; end of "Shy Meter (black)" + + + + Layout "1. Classic Vertical" "vertical" + clear tcp.* + front tcp.io tcp.volume + set tcp.size [400 100 128 88] + set tcp.foldercomp [382 0 18 19 1 0 1 0] + set tcp.folder h<32 [0] [382 86 18 14 1 1 1 1] + set tcp.trackidx [382 41 18 18 1 0.5 1 0.5] + set tcp.trackidx.margin [0 0 0 0 0.5] + set tcp.trackidx.color ?recarm [200 0 0] [100 100 100] + set tcp.toosmall [10 10 10 10 0 0 0 0] + set tcp.volume h>153 [6 21 19 71 0 0 0 1] h>87 [6 10 19 82 0 0 0 1] [4 29 23 23 0 0.5 0 0.5] + set tcp.volume.label h>153 [5 7 35 14 0 0 0 0] h>87 [5 7 35 3 0 0 0 0] [5 30 35 3 0 0.5 0 0.5] + set tcp.volume.label.color [179 179 179] + set tcp.volume.label.margin h>153 [1 5 0 0 0.5] [52 5 53 0 0.5] + set tcp.meter h>153 [25 25 12 64 0 0 0 1] h>87 [25 14 12 75 0 0 0 1] [25 37 12 28 0 0.5 0 0.5] + set tcp.meter.vu.div [3] + set tcp.recarm h>87 [39 60 20 33 0 1 0 1] [39 36 20 33 0 0.5 0 0.5] + set tcp.column.anchor [46 7] + set tcp.mute h>87 + tcp.column.anchor [0 0 17 18 0 0 0 0] [65 31 17 18 0 0.5 0 0.5] + set tcp.solo h>87 + tcp.column.anchor [0 21 17 18 0 0 0 0] [65 51 17 18 0 0.5 0 0.5] + set tcp.recmon + tcp.column.anchor h>98 [0 42 17 14 0 0 0 0] [0] + set tcp.recmode + tcp.column.anchor h>153 [0 54 17 22 0 0 0 0] [0] + set tcp.env + tcp.column.anchor h>164 [0 79 17 26 0 0 0 0] h>153 [0 79 17 14 0 0 0 0] h>115 [0 59 17 14 0 0 0 0] [0] + set tcp.phase + tcp.column.anchor h>164 [1 108 15 16 0 0 0 0] h>153 [1 96 15 16 0 0 0 0] h>133 [1 76 15 16 0 0 0 0] [0] + set tcp.pan h<128 h<88 w<186 [0] [119 34 22 22 0 0.5 0 0.5] w<167 [0] [100 8 22 22 0 0 0 0] w<137 [0] [70 45 22 22 0 0 0 0] + set tcp.pan.label tcp.pan{x}<1 [0] + [-6 27] [tcp.pan tcp.pan 34 7 0 tcp.pan 0 tcp.pan] + set tcp.pan.label.margin [0 0 0 0 0.5] + set tcp.pan.label.color [96 92 85] + set tcp.width trackpanmode<4 [0] h<128 h<88 w<218 [0] [149 34 22 22 0 0.5 0 0.5] w<167 [0] [100 49 22 22 0 0 0 0] w<137 [0] [70 86 22 22 0 0 0 0] + set tcp.width.label tcp.width{x}<1 [0] + [-6 27] [tcp.width tcp.width 34 7 0 tcp.width 0 tcp.width] + set tcp.width.label.margin [0 0 0 0 0.5] + set tcp.width.label.color [96 92 85] + set tcp.fxbyp h>87 w<137 [0] [69 7 24 14 0 0 0 0] w<157 [0] [88 35 24 14 0 0.5 0 0.5] + set tcp.fx tcp.fxbyp{x}>0 + [0 tcp.fxbyp{h}] [tcp.fxbyp tcp.fxbyp 24 17 0 tcp.fxbyp 0 tcp.fxbyp] [0] + set tcp.fxparm h<128 h<88 w<297 [0] [179 36 176 26 0 0.5 1 0.5] w<297 [0] [130 8 202 85 0 0 1 1] w<239 [0] [100 8 232 85 0 0 1 1] + set tcp.io h>164 !recarm [362 0 19 59 1 0 1 0] [362 0 19 22 1 0 1 0] h>115 [362 0 19 22 1 0 1 0] [0] + set tcp.fxin h>164 !recarm [0] [362 21 19 37 1 0 1 0] [0] + set tcp_recinput_toothin h<128 [190] [160] + set tcp.recinput h>87 w164 [363 58 18 42 1 0 1 1] h>115 [363 21 18 79 1 0 1 1] [363 0 18 100 1 0 1 1] + set tcp.label.margin [3 2 3 2 0.5] + set tcp.label.color ?recarm [217 74 74] [191 191 191] + EndLayout ; end of "Vertical" + + Layout "1. Classic Vertical" "vertical" + clear tcp.* + front tcp.io tcp.volume + set tcp.size [400 100 128 88] + set tcp.foldercomp [382 0 18 19 1 0 1 0] + set tcp.folder h<32 [0] [382 86 18 14 1 1 1 1] + set tcp.trackidx [382 41 18 18 1 0.5 1 0.5] + set tcp.trackidx.margin [0 0 0 0 0.5] + set tcp.trackidx.color ?recarm [200 0 0] [100 100 100] + set tcp.toosmall [10 10 10 10 0 0 0 0] + set tcp.volume h>153 [6 21 19 71 0 0 0 1] h>87 [6 10 19 82 0 0 0 1] [4 29 23 23 0 0.5 0 0.5] + set tcp.volume.label h>153 [5 7 35 14 0 0 0 0] h>87 [5 7 35 3 0 0 0 0] [5 30 35 3 0 0.5 0 0.5] + set tcp.volume.label.color [179 179 179] + set tcp.volume.label.margin h>153 [1 5 0 0 0.5] [52 5 53 0 0.5] + set tcp.meter h>153 [25 25 12 64 0 0 0 1] h>87 [25 14 12 75 0 0 0 1] [25 37 12 28 0 0.5 0 0.5] + set tcp.meter.vu.div [3] + set tcp.recarm h>87 [39 60 20 33 0 1 0 1] [39 36 20 33 0 0.5 0 0.5] + set tcp.column.anchor [46 7] + set tcp.mute h>87 + tcp.column.anchor [0 0 17 18 0 0 0 0] [65 31 17 18 0 0.5 0 0.5] + set tcp.solo h>87 + tcp.column.anchor [0 21 17 18 0 0 0 0] [65 51 17 18 0 0.5 0 0.5] + set tcp.recmon + tcp.column.anchor h>98 [0 42 17 14 0 0 0 0] [0] + set tcp.recmode + tcp.column.anchor h>153 [0 54 17 22 0 0 0 0] [0] + set tcp.env + tcp.column.anchor h>164 [0 79 17 26 0 0 0 0] h>153 [0 79 17 14 0 0 0 0] h>115 [0 59 17 14 0 0 0 0] [0] + set tcp.phase + tcp.column.anchor h>164 [1 108 15 16 0 0 0 0] h>153 [1 96 15 16 0 0 0 0] h>133 [1 76 15 16 0 0 0 0] [0] + set tcp.pan h<128 h<88 w<186 [0] [119 34 22 22 0 0.5 0 0.5] w<167 [0] [100 8 22 22 0 0 0 0] w<137 [0] [70 45 22 22 0 0 0 0] + set tcp.pan.label tcp.pan{x}<1 [0] + [-6 27] [tcp.pan tcp.pan 34 7 0 tcp.pan 0 tcp.pan] + set tcp.pan.label.margin [0 0 0 0 0.5] + set tcp.pan.label.color [96 92 85] + set tcp.width trackpanmode<4 [0] h<128 h<88 w<218 [0] [149 34 22 22 0 0.5 0 0.5] w<167 [0] [100 49 22 22 0 0 0 0] w<137 [0] [70 86 22 22 0 0 0 0] + set tcp.width.label tcp.width{x}<1 [0] + [-6 27] [tcp.width tcp.width 34 7 0 tcp.width 0 tcp.width] + set tcp.width.label.margin [0 0 0 0 0.5] + set tcp.width.label.color [96 92 85] + set tcp.fxbyp h>87 w<137 [0] [69 7 24 14 0 0 0 0] w<157 [0] [88 35 24 14 0 0.5 0 0.5] + set tcp.fx tcp.fxbyp{x}>0 + [0 tcp.fxbyp{h}] [tcp.fxbyp tcp.fxbyp 24 17 0 tcp.fxbyp 0 tcp.fxbyp] [0] + set tcp.fxparm h<128 h<88 w<297 [0] [179 36 176 26 0 0.5 1 0.5] w<297 [0] [130 8 202 85 0 0 1 1] w<239 [0] [100 8 232 85 0 0 1 1] + set tcp.io h>164 !recarm [362 0 19 59 1 0 1 0] [362 0 19 22 1 0 1 0] h>115 [362 0 19 22 1 0 1 0] [0] + set tcp.fxin h>164 !recarm [0] [362 21 19 37 1 0 1 0] [0] + set tcp_recinput_toothin h<128 [190] [160] + set tcp.recinput h>87 w164 [363 58 18 42 1 0 1 1] h>115 [363 21 18 79 1 0 1 1] [363 0 18 100 1 0 1 1] + set tcp.label.margin [3 2 3 2 0.5] + set tcp.label.color ?recarm [217 74 74] [191 191 191] + EndLayout ; end of "Vertical" + + + +Layout "1. Classic Big Meter" "big_meter" +clear tcp.* +set tcp.size [400 100 80 .] +set tcp.foldercomp [382 0 18 19 1 0 1 0] +set tcp.folder h<32 [0] [382 86 18 14 1 1 1 1] +set tcp.trackidx [382 41 18 18 1 0.5 1 0.5] +set tcp.trackidx.margin [0 0 0 0 0.5] +set tcp.trackidx.color ?recarm [200 0 0] [100 100 100] +set tcp.io h>164 !recarm [362 0 19 59 1 0 1 0] [362 0 19 22 1 0 1 0] h>115 [362 0 19 22 1 0 1 0] [0] +set tcp.fxin h>164 !recarm [0] [362 21 19 37 1 0 1 0] [0] +set tcp.meter h>34 [12 12 339 76 0 0 1 1] h>4 [12 45 339 10 0 0.5 1 0.5] [12 -1 339 4 0 0 1 0] +set tcp.meter.vu.div [2] +set tcp.meter.readout.color h>23 [255 255 255 140 255 255 255 200] [0 0 0 0 0 0 0 0] +set tcp.meter.scale.color.unlit.top h<20 [0 0 0 0 0 0 0 0] [255 255 255 75 0 0 0 100] +set tcp.meter.scale.color.unlit.bottom h<20 [0 0 0 0 0 0 0 0] [255 255 255 75 0 0 0 100] +set tcp.meter.scale.color.lit.top h<20 [0 0 0 0 0 0 0 0] [255 255 255 255 0 0 0 50] +set tcp.meter.scale.color.lit.bottom h<20 [0 0 0 0 0 0 0 0] [255 255 255 255 0 0 0 50] +set tcp.meter.inputlabel.color [255 255 255 150] +set tcp.meter.inputlabelbox.color [255 255 255 25 255 255 255 50] +set tcp.label h>164 [363 58 18 42 1 0 1 1] h>115 [363 21 18 79 1 0 1 1] [363 0 18 100 1 0 1 1] +set tcp.label.margin [3 2 3 2 0.5] +set tcp.label.color ?recarm [217 74 74] [191 191 191] +EndLayout ; end of "Big Meter" + + +; ------------------------------------------- + + +clear master.tcp.* +set master.tcp.size [400 100 160 48] +front master.tcp.volume.label master.tcp.pan.label +set tcp_master_yanchor ?tcp_fxparms [0 8] [0 19] +set master_y_align ?tcp_fxparms [0 0 0 0 0 0 0 0] [0 0 0 0 0 0.5 0 0.5] +set master.tcp.meter + tcp_master_yanchor [11 4 295 9 0 master_y_align 1 master_y_align] +set master.tcp.fx + tcp_master_yanchor [338 23 24 18 1 master_y_align 1 master_y_align] +set master.tcp.fxbyp master.tcp.fx{x}>0 + [master.tcp.fx master.tcp.fx 13 18 1 master_y_align 1 master_y_align] [master.tcp.fx{w}] [0] +set master.tcp.io + + [master.tcp.meter master.tcp.meter 22 18 1 master_y_align 1 master_y_align] [4 -4] [master.tcp.meter{w}] +set master.tcp.mono + tcp_master_yanchor [338 46 36 16 1 master_y_align 1 master_y_align] +set master.tcp.mute + tcp_master_yanchor [338 0 17 18 1 master_y_align 1 master_y_align] +set master.tcp.solo + tcp_master_yanchor [358 0 17 18 1 master_y_align 1 master_y_align] +set master.tcp.env + tcp_master_yanchor w<172 [7 46 15 16 0 master_y_align 0 master_y_align] [7 46 42 16 0 master_y_align 0 master_y_align] +set master.tcp.volume + tcp_master_yanchor w<211 [7 23 323 18 0 master_y_align 1 master_y_align] [7 23 292 18 0 master_y_align 1 master_y_align] +set master.tcp.volume.label master.tcp.volume{x}>0 + [master.tcp.volume{w}] w<211 [master.tcp.volume master.tcp.volume 3 master.tcp.volume master.tcp.volume{rs} master_y_align master.tcp.volume{rs} master_y_align] [master.tcp.volume master.tcp.volume 33 master.tcp.volume master.tcp.volume{rs} master_y_align master.tcp.volume{rs} master_y_align] +set master.tcp.volume.label.color [179 179 179] +set master.tcp.volume.label.margin [1 1 3 0 1] +set master.tcp.pan + tcp_master_yanchor [281 45 18 18 1 master_y_align 1 master_y_align] +set master.tcp.pan.color [51 51 51 191 0 0 0 0] +set master.tcp.pan.label + [master.tcp.pan{w} 1] [master.tcp.pan master.tcp.pan 32 16 master.tcp.pan master_y_align master.tcp.pan master_y_align] +set master.tcp.pan.label.color [221 224 224] +set master.tcp.pan.label.margin [0 0 3 0 1] +set master.tcp.label [382 0 18 100 1 0 1 1] +set master.tcp.label.margin [0 0 0 0 0.5] +set master.tcp.label.color tcp.trackidx.color +set master.tcp.fxparm [7 76 368 18 0 0 1 1] + + + Layout "2. Silver Master Track" "analog-silver" + set master.tcp.volume master.tcp.volume + EndLayout ; end of "- Silver Master Track" + + Layout "3. Black Master Track" "analog-black" + set master.tcp.volume master.tcp.volume + EndLayout ; end of "- Black Master Track" + + + Layout "1. Classic Top Aligned" + set tcp_master_yanchor [0 8] + set master.tcp.meter + tcp_master_yanchor [11 4 295 9 0 0 1 0] + set master.tcp.fx + tcp_master_yanchor [338 23 24 18 1 0 1 0] + set master.tcp.fxbyp master.tcp.fx{x}>0 + [master.tcp.fx master.tcp.fx 13 18 1 0 1 0] [master.tcp.fx{w}] [0] + set master.tcp.io + + [master.tcp.meter master.tcp.meter 22 18 1 0 1 0] [4 -4] [master.tcp.meter{w}] + set master.tcp.mono + tcp_master_yanchor [338 46 36 16 1 0 1 0] + set master.tcp.mute + tcp_master_yanchor [338 0 17 18 1 0 1 0] + set master.tcp.solo + tcp_master_yanchor [358 0 17 18 1 0 1 0] + set master.tcp.env + tcp_master_yanchor w<172 [7 46 15 16 0 0 0 0] [7 46 42 16 0 0 0 0] + set master.tcp.volume + tcp_master_yanchor w<211 [7 23 323 18 0 0 1 0] [7 23 292 18 0 0 1 0] + set master.tcp.volume.label master.tcp.volume{x}>0 + [master.tcp.volume{w}] w<211 [master.tcp.volume master.tcp.volume 3 master.tcp.volume master.tcp.volume{rs} 0 master.tcp.volume{rs} 0] [master.tcp.volume master.tcp.volume 33 master.tcp.volume master.tcp.volume{rs} 0 master.tcp.volume{rs} 0] + set master.tcp.pan + tcp_master_yanchor [281 45 18 18 1 0 1 0] + set master.tcp.pan.label + [master.tcp.pan{w} 1] [master.tcp.pan master.tcp.pan 32 16 master.tcp.pan 0 master.tcp.pan 0] + EndLayout ; end of "Top Aligned" + + Layout "1. Classic Big Meter" "big_meter" + clear master.tcp.* + set master.tcp.size [400 100 160 48] + set master.tcp.meter h>34 [12 12 358 76 0 0 1 1] [12 45 358 10 0 0.5 1 0.5] + set master.tcp.label [382 0 18 100 1 0 1 1] + EndLayout ; end of "Big Meter" + + + +; -------------------------------------------------------------------------------------- + +clear envcp.* +set envcp.size [400 100 160] +set envcp.margin +:maxfolderdepth:1 [13 0 0 0] +set envcp.margin +:folderdepth:1 [-13 0 0 0] +set envcp.yanchor h<51 [0 41] [0 30] +set envcp.arm + envcp.yanchor [7 0 18 18 0 0.5 0 0.5] +set envcp.label + envcp.yanchor w<370 w<281 [25 0 288 18 0 0.5 1 0.5] [25 0 238 18 0 0.5 1 0.5] [25 0 117 18 0 0.5 0.5 0.5] +set envcp.label.margin [3 2 3 4] +set envcp.label.color [191 191 191] +set envcp.bypass + envcp.yanchor w>280 [269 0 19 18 1 0.5 1 0.5] h<51 [0] [331 24 19 18 1 0.5 1 0.5] +set envcp.hide + envcp.yanchor w>280 [288 0 25 18 1 0.5 1 0.5] h<51 [0] [350 24 25 18 1 0.5 1 0.5] +set envcp.mod + envcp.yanchor w>280 h<51 [0] [269 24 57 18 1 0.5 1 0.5] h<51 [0] [280 24 20 18 1 0.5 1 0.5] +set envcp.learn + envcp.yanchor w>280 h<51 [0] [332 24 43 18 1 0.5 1 0.5] h<51 [0] [306 24 19 18 1 0.5 1 0.5] +set envcp.fader + envcp.yanchor w<370 w<281 w<240 h<51 [0] [18 25 16 16 0 0.5 0 0.5] h<51 [0] envcp_type==4 [25 24 248 18 0 0.5 1 0.5] [25 24 299 18 0 0.5 1 0.5] h<51 [0] [25 24 238 18 0 0.5 1 0.5] [148 0 115 18 0.5 0.5 1 0.5] +set envcp.value + envcp.yanchor [319 -1 56 20 1 0.5 1 0.5] +set envcp.value.margin [0 0 0 0 1] +set envcp.value.color [48 51 51] + +; -------------------------------------------------------------------------------------- + + +clear mcp.* + +set mcp.size [73 319] +front mcp.width.label mcp.pan.label mcp.recmon mcp.volume.label +set mcp.folder folderstate<0 [66 300 7 18 0 1 0 1] [0 300 18 18 0 1 0 1] +set mcp.label [1 35 70 18 0 0 0 0] +set mcp.label.margin [2 0 2 0 0.5] +set mcp.label.color ?recarm [255 87 87] [184 184 184] +set mcp_column_anchor [48 105] +set mcp.mute + mcp_column_anchor [0 0 17 18 0 0 0 0] +set mcp.solo + mcp_column_anchor [0 21 17 18 0 0 0 0] +set mcp.recmon + mcp_column_anchor h>273 [0 42 17 14 0 0 0 0] [0 42 17 14 0 0 0 0] +set mcp.recmode + mcp_column_anchor h>273 [0 54 17 22 0 0 0 0] [0] +set mcp.env + mcp_column_anchor h>283 [0 79 17 26 0 0 0 0] h>273 [0 79 17 14 0 0 0 0] h>233 [0 59 17 14 0 0 0 0] [0] +set mcp.phase + mcp_column_anchor h>283 [1 108 15 16 0 0 0 0] h>273 [1 96 15 16 0 0 0 0] h>251 [1 76 15 16 0 0 0 0] [0] +set mcp.recarm [41 260 20 33 0 1 0 1] +set mcp.meter.vu.div [2 1] +set mcp.meter h>273 [27 123 12 166 0 0 0 1] [27 112 12 177 0 0 0 1] +set mcp.meter.readout.color [255 255 255 140 255 255 255 200] +set mcp.volume h>273 [9 119 17 173 0 0 0 1] [9 108 17 184 0 0 0 1] +set mcp.volume.label h>273 [7 105 35 14 0 0 0 0] [7 105 35 3 0 0 0 0] +set mcp.volume.label.color [179 179 179] +set mcp.volume.label.margin h>273 [1 5 0 0 0.5] [52 5 53 0 0.5] +set mcp.pan trackpanmode>=4 [6 62 18 18 0 0 0 0] [4 65 30 30 0 0 0 0] +set mcp.pan.color [51 51 51 191 0 0 0 0] +set mcp.pan.label trackpanmode>=4 [24 63 41 16 0 0 0 0] [31 72 34 16 0 0 0 0] +set mcp.pan.label.color [221 224 224] +set mcp.pan.label.margin [0 0 3 0 1] +set mcp.width trackpanmode>=4 [6 82 18 18 0 0 0 0] [0] +set mcp.width.color [51 51 51 225 0 0 0 0] +set mcp.width.label trackpanmode>=4 [24 83 41 16 0 0 0 0] [0] +set mcp.width.label.color [221 224 224] +set mcp.width.label.margin [0 0 3 0 1] +set mcp.io ?recarm [30 18 39 16 0 0 0 0] [30 3 39 31 0 0 0 0] +set mcp.fx [3 17 23 17 0 0 0 0] +set mcp.fxbyp [3 3 23 14 0 0 0 0] +set mcp.fxin ?recarm [30 3 39 14 0 0 0 0] [0] +set mcp.extmixer.mode [0] +set mcp.trackidx [19 300 35 18 0 1 0 1] +set mcp.trackidx.margin [0 3 0 5 0.5] +set mcp.trackidx.color ?recarm [200 0 0] [100 100 100] + +Layout "1. Classic Default (pan at bottom)" +set mcp.pan trackpanmode>=4 [6 256 18 18 0 1 0 1] [4 259 30 30 0 1 0 1] +set mcp.pan.label trackpanmode>=4 [24 257 41 16 0 1 0 1] [31 266 34 16 0 1 0 1] +set mcp.width trackpanmode>=4 [6 275 18 18 0 1 0 1] [0] +set mcp.width.label trackpanmode>=4 [24 276 41 16 0 1 0 1] [0] +set mcp_column_anchor [48 62] +set mcp.mute + mcp_column_anchor [0 0 17 18 0 0 0 0] +set mcp.solo + mcp_column_anchor [0 21 17 18 0 0 0 0] +set mcp.recmon + mcp_column_anchor h>273 [0 42 17 14 0 0 0 0] [0 42 17 14 0 0 0 0] +set mcp.recmode + mcp_column_anchor h>273 [0 55 17 21 0 0 0 0] [0] +set mcp.env + mcp_column_anchor h>283 [0 79 17 26 0 0 0 0] h>273 [0 79 17 14 0 0 0 0] h>233 [0 59 17 14 0 0 0 0] [0] +set mcp.phase + mcp_column_anchor h>283 [1 108 15 16 0 0 0 0] h>273 [1 96 15 16 0 0 0 0] h>251 [1 76 15 16 0 0 0 0] [0] +set mcp.recarm [41 217 20 33 0 1 0 1] +set mcp.meter h>273 [27 80 12 166 0 0 0 1] [27 69 12 177 0 0 0 1] +set mcp.volume h>273 [8 76 19 173 0 0 0 1] [8 65 19 184 0 0 0 1] +set mcp.volume.label h>273 [7 62 35 14 0 0 0 0] [7 62 35 3 0 0 0 0] +EndLayout ; end of "Default (pan at bottom)" + +Layout "2. Silver Default MCP (pan at bottom)" "analog-silver-mcp" +set mcp.pan trackpanmode>=4 [6 256 18 18 0 1 0 1] [4 259 30 30 0 1 0 1] +set mcp.pan.label trackpanmode>=4 [24 257 41 16 0 1 0 1] [31 266 34 16 0 1 0 1] +set mcp.width trackpanmode>=4 [6 275 18 18 0 1 0 1] [0] +set mcp.width.label trackpanmode>=4 [24 276 41 16 0 1 0 1] [0] +set mcp_column_anchor [48 62] +set mcp.mute + mcp_column_anchor [0 0 17 18 0 0 0 0] +set mcp.solo + mcp_column_anchor [0 21 17 18 0 0 0 0] +set mcp.recmon + mcp_column_anchor h>273 [0 42 17 14 0 0 0 0] [0 42 17 14 0 0 0 0] +set mcp.recmode + mcp_column_anchor h>273 [0 55 17 21 0 0 0 0] [0] +set mcp.env + mcp_column_anchor h>283 [0 79 17 26 0 0 0 0] h>273 [0 79 17 14 0 0 0 0] h>233 [0 59 17 14 0 0 0 0] [0] +set mcp.phase + mcp_column_anchor h>283 [1 108 15 16 0 0 0 0] h>273 [1 96 15 16 0 0 0 0] h>251 [1 76 15 16 0 0 0 0] [0] +set mcp.recarm [41 217 20 33 0 1 0 1] +set mcp.meter h>273 [27 80 12 166 0 0 0 1] [27 69 12 177 0 0 0 1] +set mcp.volume h>273 [8 76 19 173 0 0 0 1] [8 65 19 184 0 0 0 1] +set mcp.volume.label h>273 [7 62 35 14 0 0 0 0] [7 62 35 3 0 0 0 0] +EndLayout ; end of "Default (silver, pan at bottom)" + +Layout "3. Black Default MCP (pan at bottom)" "analog-black-mcp" +set mcp.pan trackpanmode>=4 [6 256 18 18 0 1 0 1] [4 259 30 30 0 1 0 1] +set mcp.pan.label trackpanmode>=4 [24 257 41 16 0 1 0 1] [31 266 34 16 0 1 0 1] +set mcp.width trackpanmode>=4 [6 275 18 18 0 1 0 1] [0] +set mcp.width.label trackpanmode>=4 [24 276 41 16 0 1 0 1] [0] +set mcp_column_anchor [48 62] +set mcp.mute + mcp_column_anchor [0 0 17 18 0 0 0 0] +set mcp.solo + mcp_column_anchor [0 21 17 18 0 0 0 0] +set mcp.recmon + mcp_column_anchor h>273 [0 42 17 14 0 0 0 0] [0 42 17 14 0 0 0 0] +set mcp.recmode + mcp_column_anchor h>273 [0 55 17 21 0 0 0 0] [0] +set mcp.env + mcp_column_anchor h>283 [0 79 17 26 0 0 0 0] h>273 [0 79 17 14 0 0 0 0] h>233 [0 59 17 14 0 0 0 0] [0] +set mcp.phase + mcp_column_anchor h>283 [1 108 15 16 0 0 0 0] h>273 [1 96 15 16 0 0 0 0] h>251 [1 76 15 16 0 0 0 0] [0] +set mcp.recarm [41 217 20 33 0 1 0 1] +set mcp.meter h>273 [27 80 12 166 0 0 0 1] [27 69 12 177 0 0 0 1] +set mcp.volume h>273 [8 76 19 173 0 0 0 1] [8 65 19 184 0 0 0 1] +set mcp.volume.label h>273 [7 62 35 14 0 0 0 0] [7 62 35 3 0 0 0 0] +EndLayout ; end of "Default (black, pan at bottom)" + + + +Layout "1. Classic Recording Meter" "small" +set mcp.size [30 319] +set mcp.io [4 3 21 20 0 0 0 0] +set mcp.label [4 26 21 76 0 0 0 0] +set mcp.label.margin [3 3 1 3 0] +set mcp.label.color ?recarm [217 74 74] [184 184 184] +set mcp.mute [6 257 17 18 0 1 0 1] +set mcp.solo [6 278 17 18 0 1 0 1] +set mcp.recarm [4 233 21 21 0 1 0 1] +set mcp.meter h<400 [7 114 15 119 0 0 0 1] [7 114 15 103 0 0 0 1] +set mcp.volume h<400 [0] [5 217 19 19 0 1 0 1] +set mcp.volume.label [0] +set mcp.volume.label.color [179 179 179] +set mcp.volume.label.margin [0] +set mcp.recmon [0] +set mcp.recmode [0] +set mcp.env [0] +set mcp.phase [0] +set mcp.pan [0] +set mcp.pan.label [0] +set mcp.width [0] +set mcp.width.label [0] +set mcp.fx [0] +set mcp.fxbyp [0] +set mcp.fxin [0] +set mcp.extmixer.mode [1] +set mcp.extmixer [0] +set mcp.folder folderstate<0 [23 300 7 18 0 1 0 1] [0 300 18 18 0 1 0 1] +set mcp.trackidx folderstate<0 [1 300 20 18 0 1 0 1] [1 300 27 18 0 1 0 1] +set mcp.trackidx.margin [0 3 0 5 0.5] +set mcp.trackidx.color ?recarm [200 0 0] [100 100 100] +EndLayout ; end of "Recording Meter" + +Layout "3. Black Recording Meter" "small-black" +set mcp.size [30 319] +set mcp.io [4 3 21 20 0 0 0 0] +set mcp.label [4 26 21 76 0 0 0 0] +set mcp.label.margin [3 3 1 3 0] +set mcp.label.color ?recarm [217 74 74] [184 184 184] +set mcp.mute [6 257 17 18 0 1 0 1] +set mcp.solo [6 278 17 18 0 1 0 1] +set mcp.recarm [4 233 21 21 0 1 0 1] +set mcp.meter h<400 [7 114 15 119 0 0 0 1] [7 114 15 103 0 0 0 1] +set mcp.volume h<400 [0] [5 217 19 19 0 1 0 1] +set mcp.volume.label [0] +set mcp.volume.color [10 10 10 191 0 0 0 0] +set mcp.volume.label.color [179 179 179] +set mcp.volume.label.margin [0] +set mcp.recmon [0] +set mcp.recmode [0] +set mcp.env [0] +set mcp.phase [0] +set mcp.pan [0] +set mcp.pan.label [0] +set mcp.width [0] +set mcp.width.label [0] +set mcp.fx [0] +set mcp.fxbyp [0] +set mcp.fxin [0] +set mcp.extmixer.mode [1] +set mcp.extmixer [0] +set mcp.folder folderstate<0 [23 300 7 18 0 1 0 1] [0 300 18 18 0 1 0 1] +set mcp.trackidx folderstate<0 [1 300 20 18 0 1 0 1] [1 300 27 18 0 1 0 1] +set mcp.trackidx.margin [0 3 0 5 0.5] +set mcp.trackidx.color ?recarm [200 0 0] [100 100 100] +set mcp.meter.readout.color [141 141 141 220 255 150 150 255] +set mcp.meter.rmsreadout.color [255 255 150 200] +set mcp.meter.scale.color.unlit.top [100 100 100 100 0 0 0 255] +set mcp.meter.scale.color.unlit.bottom [70 70 70 100 0 0 0 255] +set mcp.meter.scale.color.lit.top [220 220 220 255 0 0 0 150] +set mcp.meter.scale.color.lit.bottom [200 200 200 255 0 0 0 150] +EndLayout ; end of "Recording Meter" + + +Layout "1. Classic Narrow" "narrow" +set mcp.size [52 319] +front mcp.recarm +set mcp.folder folderstate<0 [46 300 7 18 0 1 0 1] [0 300 18 18 0 1 0 1] +set mcp.label [1 56 49 18 0 0 0 0] +set mcp_column_anchor h>350 [7 227] h>327 [7 239] h>308 [7 258] [7 275] +set mcp.mute + mcp_column_anchor h>291 [0 0 17 18 0 1 0 1] [0] +set mcp.solo + mcp_column_anchor h>291 [20 0 17 18 0 1 0 1] [0] +set mcp.recmon + mcp_column_anchor h>308 [20 21 17 14 0 1 0 1] [0] +set mcp.recmode + mcp_column_anchor h>327 [20 33 17 22 0 1 0 1][0] +set mcp.env + mcp_column_anchor h>350 [0 21 17 26 0 1 0 1] h>308 [0 21 17 14 0 1 0 1] [0] +set mcp.phase + mcp_column_anchor h>350 [1 50 15 16 0 1 0 1] h>327 [1 38 15 16 0 1 0 1] [0] +set mcp.recarm h>350 [8 196 35 28 0 1 0 1] h>327 [8 208 35 28 0 1 0 1] h>308 [8 227 35 28 0 1 0 1] h>291 [8 244 35 28 0 1 0 1] [8 265 35 28 0 1 0 1] +set mcp.meter h>350 [28 145 12 51 0 0 0 1] h>327 [28 134 12 74 0 0 0 1] h>308 [28 134 12 93 0 0 0 1] h>291 [28 134 12 110 0 0 0 1] h>274 [28 134 12 131 0 0 0 1] [28 121 12 144 0 0 0 1] +set mcp.volume h>350 [9 137 19 63 0 0 0 1] h>327 [9 126 19 86 0 0 0 1] h>308 [9 126 19 100 0 0 0 1] h>291 [9 126 19 122 0 0 0 1] h>274 [9 126 19 143 0 0 0 1] [9 113 19 156 0 0 0 1] +set mcp.volume.label h>350 [8 126 35 14 0 0 0 0] h>274 [8 126 35 3 0 0 0 0] [8 113 35 3 0 0 0 0] +set mcp.volume.label.margin h>350 [1 5 0 0 0.5] [52 5 53 0 0.5] +set mcp.pan trackpanmode>=4 h>274 [6 92 18 18 0 0 0 0] [6 86 18 18 0 0 0 0] h>274 [10 80 30 30 0 0 0 0] [10 79 30 30 0 0 0 0] +set mcp.pan.label h>274 trackpanmode>=4 [7 83 37 7 0 0 0 0] [1 111 49 8 0 0 0 0] [0] +set mcp.pan.label.color [96 92 85] +set mcp.pan.label.margin trackpanmode>=4 [0 0 0 0 0] [0 0 0 0 0.5] +set mcp.width trackpanmode>=4 h>274 [27 92 18 18 0 0 0 0] [27 86 18 18 0 0 0 0] [0] +set mcp.width.label h>274 trackpanmode>=4 [7 115 37 7 0 0 0 0] [0] [0] +set mcp.width.label.color [96 92 85] +set mcp.width.label.margin [0 0 0 0 1] +set mcp.io [6 23 39 31 0 0 0 0] +set mcp.fx [6 3 24 18 0 0 0 0] +set mcp.fxbyp [30 3 15 18 0 0 0 0] +set mcp.fxin [0] +set mcp.extmixer.mode h<500 [1] [0] +set mcp.extmixer [0] +set mcp.trackidx [9 300 35 18 0 1 0 1] + + Layout "1. Classic Narrow (pan at bottom)" + set pan_shift h>274 [-44] [-32] + set mcp.volume + [0 pan_shift{x}] mcp.volume + set mcp.volume.label + [0 pan_shift{x}] mcp.volume.label + set mcp.meter + [0 pan_shift{x}] mcp.meter + set mcp.recarm + [0 pan_shift{x}] mcp.recarm + set mcp.mute + [0 pan_shift{x}] mcp.mute + set mcp.solo + [0 pan_shift{x}] mcp.solo + set mcp.recmon + [0 pan_shift{x}] mcp.recmon + set mcp.recmode + [0 pan_shift{x}] mcp.recmode + set mcp.env + [0 pan_shift{x}] mcp.env + set mcp.phase + [0 pan_shift{x}] mcp.phase + set mcp.pan trackpanmode>=4 h>274 [6 265 18 18 0 1 0 1] [6 271 18 18 0 1 0 1] h>274 [10 253 30 30 0 1 0 1] [10 264 30 30 0 1 0 1] + set mcp.pan.label h>274 trackpanmode>=4 [7 256 37 7 0 1 0 1] [1 284 49 8 0 1 0 1] [0] + set mcp.width trackpanmode>=4 h>274 [27 265 18 18 0 1 0 1] [27 271 18 18 0 1 0 1] [0] + set mcp.width.label h>274 trackpanmode>=4 [7 288 37 7 0 1 0 1] [0] [0] + EndLayout ; end of "Narrow (pan at bottom)" + +EndLayout ; end of "Narrow" + + +Layout "3. Black Narrow" "narrow-black" +set mcp.size [52 319] +front mcp.recarm +set mcp.folder folderstate<0 [46 300 7 18 0 1 0 1] [0 300 18 18 0 1 0 1] +set mcp.label [1 56 49 18 0 0 0 0] +set mcp.label.color [141 141 141] +set mcp_column_anchor h>350 [7 227] h>327 [7 239] h>308 [7 258] [7 275] +set mcp.mute + mcp_column_anchor h>291 [0 0 17 18 0 1 0 1] [0] +set mcp.solo + mcp_column_anchor h>291 [20 0 17 18 0 1 0 1] [0] +set mcp.recmon + mcp_column_anchor h>308 [20 21 17 14 0 1 0 1] [0] +set mcp.recmode + mcp_column_anchor h>327 [20 33 17 22 0 1 0 1][0] +set mcp.env + mcp_column_anchor h>350 [0 21 17 26 0 1 0 1] h>308 [0 21 17 14 0 1 0 1] [0] +set mcp.phase + mcp_column_anchor h>350 [1 50 15 16 0 1 0 1] h>327 [1 38 15 16 0 1 0 1] [0] +set mcp.recarm h>350 [8 196 35 28 0 1 0 1] h>327 [8 208 35 28 0 1 0 1] h>308 [8 227 35 28 0 1 0 1] h>291 [8 244 35 28 0 1 0 1] [8 265 35 28 0 1 0 1] +set mcp.meter h>350 [28 145 12 51 0 0 0 1] h>327 [28 134 12 74 0 0 0 1] h>308 [28 134 12 93 0 0 0 1] h>291 [28 134 12 110 0 0 0 1] h>274 [28 134 12 131 0 0 0 1] [28 121 12 144 0 0 0 1] +set mcp.volume h>350 [9 137 19 63 0 0 0 1] h>327 [9 126 19 86 0 0 0 1] h>308 [9 126 19 100 0 0 0 1] h>291 [9 126 19 122 0 0 0 1] h>274 [9 126 19 143 0 0 0 1] [9 113 19 156 0 0 0 1] +set mcp.volume.label h>350 [8 126 35 14 0 0 0 0] h>274 [8 126 35 3 0 0 0 0] [8 113 35 3 0 0 0 0] +set mcp.volume.label.margin h>350 [1 5 0 0 0.5] [52 5 53 0 0.5] +set mcp.volume.label.color [141 141 141] +set mcp.pan trackpanmode>=4 h>274 [6 92 18 18 0 0 0 0] [6 86 18 18 0 0 0 0] h>274 [10 80 30 30 0 0 0 0] [10 79 30 30 0 0 0 0] +set mcp.pan.label h>274 trackpanmode>=4 [7 83 37 7 0 0 0 0] [1 111 49 8 0 0 0 0] [0] +set mcp.pan.color [180 180 180 191 0 0 0 0] +set mcp.pan.label.color [128 128 128] +set mcp.pan.label.margin trackpanmode>=4 [0 0 0 0 0] [0 0 0 0 0.5] +set mcp.width trackpanmode>=4 h>274 [27 92 18 18 0 0 0 0] [27 86 18 18 0 0 0 0] [0] +set mcp.width.label h>274 trackpanmode>=4 [7 115 37 7 0 0 0 0] [0] [0] +set mcp.width.color [180 180 180 191 0 0 0 0] +set mcp.width.label.color [128 128 128] +set mcp.width.label.margin [0 0 0 0 1] +set mcp.io [6 23 39 31 0 0 0 0] +set mcp.fx [6 3 24 18 0 0 0 0] +set mcp.fxbyp [30 3 15 18 0 0 0 0] +set mcp.fxin [0] +set mcp.extmixer.mode h<500 [1] [0] +set mcp.extmixer [0] +set mcp.trackidx [9 300 35 18 0 1 0 1] + + Layout "3. Black Narrow (pan at bottom)" + set pan_shift h>274 [-44] [-32] + set mcp.volume + [0 pan_shift{x}] mcp.volume + set mcp.volume.label + [0 pan_shift{x}] mcp.volume.label + set mcp.meter + [0 pan_shift{x}] mcp.meter + set mcp.recarm + [0 pan_shift{x}] mcp.recarm + set mcp.mute + [0 pan_shift{x}] mcp.mute + set mcp.solo + [0 pan_shift{x}] mcp.solo + set mcp.recmon + [0 pan_shift{x}] mcp.recmon + set mcp.recmode + [0 pan_shift{x}] mcp.recmode + set mcp.env + [0 pan_shift{x}] mcp.env + set mcp.phase + [0 pan_shift{x}] mcp.phase + set mcp.pan trackpanmode>=4 h>274 [6 265 18 18 0 1 0 1] [6 271 18 18 0 1 0 1] h>274 [10 253 30 30 0 1 0 1] [10 264 30 30 0 1 0 1] + set mcp.pan.label h>274 trackpanmode>=4 [7 256 37 7 0 1 0 1] [1 284 49 8 0 1 0 1] [0] + set mcp.width trackpanmode>=4 h>274 [27 265 18 18 0 1 0 1] [27 271 18 18 0 1 0 1] [0] + set mcp.width.label h>274 trackpanmode>=4 [7 288 37 7 0 1 0 1] [0] [0] + EndLayout ; end of "Narrow (pan at bottom)" + +EndLayout ; end of "Black Narrow" + + +Layout "1. Classic Sidebar" "sidebar" +set mcp.size [151 319] +set mcp.label [1 35 148 18 0 0 0 0] +set mcp.io [30 3 39 31 0 0 0 0] +set mcp.fxin [73 3 74 15 0 0 0 0] +set mcp.recinput [73 17 74 17 0 0 0 0] +set mcp.recinput.color [160 160 160] +set mcp.recinput.margin [4 0 18 0] +set mcp.extmixer.mode [1] +set mcp.extmixer.position [73 65 70 225 0 0 0 1] +set mcp.trackidx [54 300 35 18 0 1 0 1] +set mcp.folder folderstate<0 [144 300 7 18 0 1 0 1] [0 300 18 18 0 1 0 1] + + Layout "1. Classic Sidebar (pan at bottom)" + set mcp.pan trackpanmode>=4 [6 256 18 18 0 1 0 1] [4 259 30 30 0 1 0 1] + set mcp.pan.label trackpanmode>=4 [24 257 41 16 0 1 0 1] [31 266 34 16 0 1 0 1] + set mcp.width trackpanmode>=4 [6 275 18 18 0 1 0 1] [0] + set mcp.width.label trackpanmode>=4 [24 276 41 16 0 1 0 1] [0] + set mcp_column_anchor [48 62] + set mcp.mute + mcp_column_anchor [0 0 17 18 0 0 0 0] + set mcp.solo + mcp_column_anchor [0 21 17 18 0 0 0 0] + set mcp.recmon + mcp_column_anchor h>273 [0 42 17 14 0 0 0 0] [0 42 17 14 0 0 0 0] + set mcp.recmode + mcp_column_anchor h>273 [0 55 17 21 0 0 0 0] [0] + set mcp.env + mcp_column_anchor h>283 [0 79 17 26 0 0 0 0] h>273 [0 79 17 14 0 0 0 0] h>233 [0 59 17 14 0 0 0 0] [0] + set mcp.phase + mcp_column_anchor h>283 [1 108 15 16 0 0 0 0] h>273 [1 96 15 16 0 0 0 0] h>251 [1 76 15 16 0 0 0 0] [0] + set mcp.recarm [41 217 20 33 0 1 0 1] + set mcp.meter h>273 [27 80 12 166 0 0 0 1] [27 69 12 177 0 0 0 1] + set mcp.volume h>273 [8 76 19 173 0 0 0 1] [8 65 19 184 0 0 0 1] + set mcp.volume.label h>273 [7 62 35 14 0 0 0 0] [7 62 35 3 0 0 0 0] + EndLayout ; end of "Sidebar (pan at bottom)" + +EndLayout ; end of "Sidebar" + + + +Layout "1. Classic Large" "large" +set mcp.size [93 319] +front mcp.volume.label mcp.recmon mcp.recarm +set mcp.folder folderstate<0 [86 300 7 18 0 1 0 1] [0 300 18 18 0 1 0 1] +set mcp.label [1 57 90 18 0 0 0 0] +set mcp.label.margin [3 0 3 0 0.5] +set mcp.label.color ?recarm [217 74 74] [184 184 184] +set mcp_column_anchor [62 126] +set mcp.mute + mcp_column_anchor [0 0 23 20 0 0 0 0] +set mcp.solo + mcp_column_anchor [0 23 23 20 0 0 0 0] +set mcp.recmon + mcp_column_anchor h>304 [0 49 23 17 0 0 0 0] h>239 [0 46 23 17 0 0 0 0] [0] +set mcp.recmode + mcp_column_anchor h>304 [0 65 23 13 0 0 0 0] [0] +set mcp.env + mcp_column_anchor h>314 [0 84 23 30 0 0 0 0] h>304 [0 84 23 18 0 0 0 0] h>261 [0 66 23 18 0 0 0 0] [0] +set mcp.phase + mcp_column_anchor h>314 [4 120 15 16 0 0 0 0] h>304 [4 108 15 16 0 0 0 0] h>279 [4 87 15 16 0 0 0 0] [0] +set mcp.recarm [55 260 20 33 0 1 0 1] +set mcp.meter h>273 [34 144 19 145 0 0 0 1] [34 133 19 156 0 0 0 1] +set mcp.volume h>273 [12 140 19 152 0 0 0 1] [12 129 19 163 0 0 0 1] +set mcp.volume.label h>273 [7 126 49 14 0 0 0 0] [7 126 49 3 0 0 0 0] +set mcp.volume.label.color [179 179 179] +set mcp.volume.label.margin h>273 [1 5 0 0 0.5] [52 5 53 0 0.5] +set mcp.pan trackpanmode>=4 [17 86 22 22 0 0 0 0] [35 86 22 22 0 0 0 0] +set mcp.pan.color [51 51 51 191 0 0 0 0] +set mcp.pan.label trackpanmode>=4 [11 113 34 7 0 0 0 0] [29 113 34 7 0 0 0 0] +set mcp.pan.label.color [96 92 85] +set mcp.pan.label.margin [0 0 0 0 0.5] +set mcp.width trackpanmode>=4 [53 86 22 22 0 0 0 0] [0] +set mcp.width.color [51 51 51 225 0 0 0 0] +set mcp.width.label trackpanmode>=4 [47 113 34 7 0 0 0 0] [0] +set mcp.width.label.color [96 92 85] +set mcp.width.label.margin [0 0 0 0 0.5] +set mcp.io [32 4 55 19 0 0 0 0] +set mcp.recinput [5 39 82 17 0 0 0 0] +set mcp.recinput.color [160 160 160] +set mcp.recinput.margin [4 0 18 0] +set mcp.fx [5 18 23 17 0 0 0 0] +set mcp.fxbyp [5 4 23 14 0 0 0 0] +set mcp.fxin [32 23 55 12 0 0 0 0] +set mcp.extmixer.mode [0] +set mcp.trackidx [29 300 35 18 0 1 0 1] +set mcp.trackidx.margin [0 3 0 5 0.5] +set mcp.trackidx.color ?recarm [200 0 0] [100 100 100] + + Layout "1. Classic Large (pan at bottom)" + set mcp.pan trackpanmode>=4 [17 259 22 22 0 1 0 1] [35 259 22 22 0 1 0 1] + set mcp.pan.label trackpanmode>=4 [11 286 34 7 0 1 0 1] [29 286 34 7 0 1 0 1] + set mcp.width trackpanmode>=4 [53 259 22 22 0 1 0 1] [0] + set mcp.width.label trackpanmode>=4 [47 286z 34 7 0 1 0 1] [0] + set mcp_column_anchor [62 85] + set mcp.mute + mcp_column_anchor [0 0 23 20 0 0 0 0] + set mcp.solo + mcp_column_anchor [0 23 23 20 0 0 0 0] + set mcp.recmon + mcp_column_anchor h>304 [0 49 23 17 0 0 0 0] h>239 [0 46 23 17 0 0 0 0] [0] + set mcp.recmode + mcp_column_anchor h>304 [0 65 23 13 0 0 0 0] [0] + set mcp.env + mcp_column_anchor h>314 [0 84 23 30 0 0 0 0] h>304 [0 84 23 18 0 0 0 0] h>261 [0 66 23 18 0 0 0 0] [0] + set mcp.phase + mcp_column_anchor h>314 [4 120 15 16 0 0 0 0] h>304 [4 108 15 16 0 0 0 0] h>279 [4 87 15 16 0 0 0 0] [0] + set mcp.recarm [55 219 20 33 0 1 0 1] + set mcp.meter h>273 [34 103 19 145 0 0 0 1] [34 92 19 156 0 0 0 1] + set mcp.volume h>273 [12 99 19 152 0 0 0 1] [12 88 19 163 0 0 0 1] + set mcp.volume.label h>273 [7 85 49 14 0 0 0 0] [7 85 49 3 0 0 0 0] + EndLayout ; end of "Large (pan at bottom)" + +EndLayout ; end of "Large" + + +Layout "2. Silver Large" "large_silver" +set mcp.size [93 319] +front mcp.volume.label mcp.recmon mcp.recarm +set mcp.folder folderstate<0 [86 300 7 18 0 1 0 1] [0 300 18 18 0 1 0 1] +set mcp.label [1 57 90 18 0 0 0 0] +set mcp.label.margin [3 0 3 0 0.5] +set mcp.label.color ?recarm [217 74 74] [141 141 141] +set mcp_column_anchor [62 126] +set mcp.mute + mcp_column_anchor [0 0 23 20 0 0 0 0] +set mcp.solo + mcp_column_anchor [0 23 23 20 0 0 0 0] +set mcp.recmon + mcp_column_anchor h>304 [0 49 23 17 0 0 0 0] h>239 [0 46 23 17 0 0 0 0] [0] +set mcp.recmode + mcp_column_anchor h>304 [0 65 23 13 0 0 0 0] [0] +set mcp.env + mcp_column_anchor h>314 [0 84 23 30 0 0 0 0] h>304 [0 84 23 18 0 0 0 0] h>261 [0 66 23 18 0 0 0 0] [0] +set mcp.phase + mcp_column_anchor h>314 [4 120 15 16 0 0 0 0] h>304 [4 108 15 16 0 0 0 0] h>279 [4 87 15 16 0 0 0 0] [0] +set mcp.recarm [55 260 20 33 0 1 0 1] +set mcp.meter h>273 [34 144 19 145 0 0 0 1] [34 133 19 156 0 0 0 1] +set mcp.volume h>273 [12 140 19 152 0 0 0 1] [12 129 19 163 0 0 0 1] +set mcp.volume.label h>273 [7 126 49 14 0 0 0 0] [7 126 49 3 0 0 0 0] +set mcp.volume.label.color [141 141 141] +set mcp.volume.label.margin h>273 [1 5 0 0 0.5] [52 5 53 0 0.5] +set mcp.pan trackpanmode>=4 [17 86 22 22 0 0 0 0] [35 86 22 22 0 0 0 0] +set mcp.pan.color [42 42 42 191 0 0 0 0] +set mcp.pan.label trackpanmode>=4 [11 113 34 7 0 0 0 0] [29 113 34 7 0 0 0 0] +set mcp.pan.label.color [210 210 210] +set mcp.pan.label.margin [0 0 0 0 0.5] +set mcp.width trackpanmode>=4 [53 86 22 22 0 0 0 0] [0] +set mcp.width.color [42 42 42 225 0 0 0 0] +set mcp.width.label trackpanmode>=4 [47 113 34 7 0 0 0 0] [0] +set mcp.width.label.color [210 210 210] +set mcp.width.label.margin [0 0 0 0 0.5] +set mcp.io [32 4 55 19 0 0 0 0] +set mcp.recinput [5 39 82 17 0 0 0 0] +set mcp.recinput.color [130 130 130] +set mcp.recinput.margin [4 0 18 0] +set mcp.fx [5 18 23 17 0 0 0 0] +set mcp.fxbyp [5 4 23 14 0 0 0 0] +set mcp.fxin [32 23 55 12 0 0 0 0] +set mcp.extmixer.mode [0] +set mcp.trackidx [29 300 35 18 0 1 0 1] +set mcp.trackidx.margin [0 3 0 5 0.5] +set mcp.trackidx.color ?recarm [200 0 0] [100 100 100] +set mcp.meter.readout.color [141 141 141 220 255 150 150 255] +set mcp.meter.rmsreadout.color [255 255 150 200] +set mcp.meter.scale.color.unlit.top [100 100 100 100 0 0 0 255] +set mcp.meter.scale.color.unlit.bottom [70 70 70 100 0 0 0 255] +set mcp.meter.scale.color.lit.top [220 220 220 255 0 0 0 150] +set mcp.meter.scale.color.lit.bottom [200 200 200 255 0 0 0 150] + + + Layout "3. Black Large (pan at bottom)" + set mcp.pan trackpanmode>=4 [17 259 22 22 0 1 0 1] [35 259 22 22 0 1 0 1] + set mcp.pan.label trackpanmode>=4 [11 286 34 7 0 1 0 1] [29 286 34 7 0 1 0 1] + set mcp.width trackpanmode>=4 [53 259 22 22 0 1 0 1] [0] + set mcp.width.label trackpanmode>=4 [47 286z 34 7 0 1 0 1] [0] + set mcp_column_anchor [62 85] + set mcp.mute + mcp_column_anchor [0 0 23 20 0 0 0 0] + set mcp.solo + mcp_column_anchor [0 23 23 20 0 0 0 0] + set mcp.recmon + mcp_column_anchor h>304 [0 49 23 17 0 0 0 0] h>239 [0 46 23 17 0 0 0 0] [0] + set mcp.recmode + mcp_column_anchor h>304 [0 65 23 13 0 0 0 0] [0] + set mcp.env + mcp_column_anchor h>314 [0 84 23 30 0 0 0 0] h>304 [0 84 23 18 0 0 0 0] h>261 [0 66 23 18 0 0 0 0] [0] + set mcp.phase + mcp_column_anchor h>314 [4 120 15 16 0 0 0 0] h>304 [4 108 15 16 0 0 0 0] h>279 [4 87 15 16 0 0 0 0] [0] + set mcp.recarm [55 219 20 33 0 1 0 1] + set mcp.meter h>273 [34 103 19 145 0 0 0 1] [34 92 19 156 0 0 0 1] + set mcp.volume h>273 [12 99 19 152 0 0 0 1] [12 88 19 163 0 0 0 1] + set mcp.volume.label h>273 [7 85 49 14 0 0 0 0] [7 85 49 3 0 0 0 0] + EndLayout ; end of "Large (pan at bottom, black)" + +EndLayout ; end of "Large (black)" + + +Layout "3. Black Large" "large_black" +set mcp.size [93 319] +front mcp.volume.label mcp.recmon mcp.recarm +set mcp.folder folderstate<0 [86 300 7 18 0 1 0 1] [0 300 18 18 0 1 0 1] +set mcp.label [1 57 90 18 0 0 0 0] +set mcp.label.margin [3 0 3 0 0.5] +set mcp.label.color ?recarm [217 74 74] [141 141 141] +set mcp_column_anchor [62 126] +set mcp.mute + mcp_column_anchor [0 0 23 20 0 0 0 0] +set mcp.solo + mcp_column_anchor [0 23 23 20 0 0 0 0] +set mcp.recmon + mcp_column_anchor h>304 [0 49 23 17 0 0 0 0] h>239 [0 46 23 17 0 0 0 0] [0] +set mcp.recmode + mcp_column_anchor h>304 [0 65 23 13 0 0 0 0] [0] +set mcp.env + mcp_column_anchor h>314 [0 84 23 30 0 0 0 0] h>304 [0 84 23 18 0 0 0 0] h>261 [0 66 23 18 0 0 0 0] [0] +set mcp.phase + mcp_column_anchor h>314 [4 120 15 16 0 0 0 0] h>304 [4 108 15 16 0 0 0 0] h>279 [4 87 15 16 0 0 0 0] [0] +set mcp.recarm [55 260 20 33 0 1 0 1] +set mcp.meter h>273 [34 144 19 145 0 0 0 1] [34 133 19 156 0 0 0 1] +set mcp.volume h>273 [12 140 19 152 0 0 0 1] [12 129 19 163 0 0 0 1] +set mcp.volume.label h>273 [7 126 49 14 0 0 0 0] [7 126 49 3 0 0 0 0] +set mcp.volume.label.color [141 141 141] +set mcp.volume.label.margin h>273 [1 5 0 0 0.5] [52 5 53 0 0.5] +set mcp.pan trackpanmode>=4 [17 86 22 22 0 0 0 0] [35 86 22 22 0 0 0 0] +set mcp.pan.color [180 180 180 191 0 0 0 0] +set mcp.pan.label trackpanmode>=4 [11 113 34 7 0 0 0 0] [29 113 34 7 0 0 0 0] +set mcp.pan.label.color [138 138 138] +set mcp.pan.label.margin [0 0 0 0 0.5] +set mcp.width trackpanmode>=4 [53 86 22 22 0 0 0 0] [0] +set mcp.width.color [180 180 180 225 0 0 0 0] +set mcp.width.label trackpanmode>=4 [47 113 34 7 0 0 0 0] [0] +set mcp.width.label.color [140 140 140] +set mcp.width.label.margin [0 0 0 0 0.5] +set mcp.io [32 4 55 19 0 0 0 0] +set mcp.recinput [5 39 82 17 0 0 0 0] +set mcp.recinput.color [130 130 130] +set mcp.recinput.margin [4 0 18 0] +set mcp.fx [5 18 23 17 0 0 0 0] +set mcp.fxbyp [5 4 23 14 0 0 0 0] +set mcp.fxin [32 23 55 12 0 0 0 0] +set mcp.extmixer.mode [0] +set mcp.trackidx [29 300 35 18 0 1 0 1] +set mcp.trackidx.margin [0 3 0 5 0.5] +set mcp.trackidx.color ?recarm [200 0 0] [100 100 100] +set mcp.meter.readout.color [141 141 141 220 255 150 150 255] +set mcp.meter.rmsreadout.color [255 255 150 200] +set mcp.meter.scale.color.unlit.top [100 100 100 100 0 0 0 255] +set mcp.meter.scale.color.unlit.bottom [70 70 70 100 0 0 0 255] +set mcp.meter.scale.color.lit.top [220 220 220 255 0 0 0 150] +set mcp.meter.scale.color.lit.bottom [200 200 200 255 0 0 0 150] + + + Layout "3. Black Large (pan at bottom)" + set mcp.pan trackpanmode>=4 [17 259 22 22 0 1 0 1] [35 259 22 22 0 1 0 1] + set mcp.pan.label trackpanmode>=4 [11 286 34 7 0 1 0 1] [29 286 34 7 0 1 0 1] + set mcp.width trackpanmode>=4 [53 259 22 22 0 1 0 1] [0] + set mcp.width.label trackpanmode>=4 [47 286z 34 7 0 1 0 1] [0] + set mcp_column_anchor [62 85] + set mcp.mute + mcp_column_anchor [0 0 23 20 0 0 0 0] + set mcp.solo + mcp_column_anchor [0 23 23 20 0 0 0 0] + set mcp.recmon + mcp_column_anchor h>304 [0 49 23 17 0 0 0 0] h>239 [0 46 23 17 0 0 0 0] [0] + set mcp.recmode + mcp_column_anchor h>304 [0 65 23 13 0 0 0 0] [0] + set mcp.env + mcp_column_anchor h>314 [0 84 23 30 0 0 0 0] h>304 [0 84 23 18 0 0 0 0] h>261 [0 66 23 18 0 0 0 0] [0] + set mcp.phase + mcp_column_anchor h>314 [4 120 15 16 0 0 0 0] h>304 [4 108 15 16 0 0 0 0] h>279 [4 87 15 16 0 0 0 0] [0] + set mcp.recarm [55 219 20 33 0 1 0 1] + set mcp.meter h>273 [34 103 19 145 0 0 0 1] [34 92 19 156 0 0 0 1] + set mcp.volume h>273 [12 99 19 152 0 0 0 1] [12 88 19 163 0 0 0 1] + set mcp.volume.label h>273 [7 85 49 14 0 0 0 0] [7 85 49 3 0 0 0 0] + EndLayout ; end of "Large (pan at bottom, black)" + +EndLayout ; end of "Large (black)" + + +Layout "1. Classic Big Meter" "big_meter" +set mcp.size [93 319] +front mcp.volume.label +set med [373] +set sml [300] +set mcp.folder folderstate<0 [86 300 7 18 0 1 0 1] [0 300 18 18 0 1 0 1] +set mcp.label [2 57 88 18 0 0 0 0] +set mcp.label.margin [2 0 2 0 0.5] +set mcp.label.color ?recarm [217 74 74] [184 184 184] +set mcp_bottom_anchor h=4 [17 86 22 22 0 0 0 0] [35 86 22 22 0 0 0 0] +set mcp.pan.color [51 51 51 191 0 0 0 0] +set mcp.pan.label h=4 [11 113 34 7 0 0 0 0] [29 113 34 7 0 0 0 0] +set mcp.pan.label.color [96 92 85] +set mcp.pan.label.margin [0 0 0 0 0.5] +set mcp.width h=4 [53 86 22 22 0 0 0 0] [0] +set mcp.width.color [51 51 51 225 0 0 0 0] +set mcp.width.label h=4 [47 113 34 7 0 0 0 0] [0] +set mcp.width.label.color [96 92 85] +set mcp.width.label.margin [0 0 0 0 0.5] +set mcp.io [32 4 55 19 0 0 0 0] +set mcp.recinput [5 39 82 17 0 0 0 0] +set mcp.recinput.color [160 160 160] +set mcp.recinput.margin [4 0 18 0] +set mcp.fx [5 18 23 17 0 0 0 0] +set mcp.fxbyp [5 4 23 14 0 0 0 0] +set mcp.fxin [32 23 55 12 0 0 0 0] +set mcp.extmixer.mode [1] +set mcp.extmixer [0] +set mcp.trackidx [29 300 35 18 0 1 0 1] +set mcp.trackidx.margin [0 3 0 5 0.5] +set mcp.trackidx.color ?recarm [200 0 0] [100 100 100] + + Layout "1. Classic Big Meter (pan at bottom)" + + set mcp.volume h=4 [17 243 22 22 0 1 0 1] [35 243 22 22 0 1 0 1] trackpanmode>=4 [17 203 22 22 0 1 0 1] [35 203 22 22 0 1 0 1] + set mcp.pan.label h=4 [11 230 34 7 0 1 0 1] [29 230 34 7 0 1 0 1] + set mcp.width h=4 [53 243 22 22 0 1 0 1] [0] trackpanmode>=4 [53 203 22 22 0 1 0 1] [0] + set mcp.width.label h=4 [47 230 34 7 0 1 0 1] [0] + + EndLayout ; end of "Big Meter (pan at bottom)" + +EndLayout ; end of "Big Meter" + + +Layout "2. Silver Big Meter" "big_meter_silver" +set mcp.size [93 319] +front mcp.volume.label +set med [373] +set sml [300] +set mcp.folder folderstate<0 [86 300 7 18 0 1 0 1] [0 300 18 18 0 1 0 1] +set mcp.label [2 57 88 18 0 0 0 0] +set mcp.label.margin [2 0 2 0 0.5] +set mcp.label.color ?recarm [217 74 74] [141 141 141] +set mcp_bottom_anchor h=4 [17 86 22 22 0 0 0 0] [35 86 22 22 0 0 0 0] +set mcp.pan.color [42 42 42 191 0 0 0 0] +set mcp.pan.label h=4 [11 113 34 7 0 0 0 0] [29 113 34 7 0 0 0 0] +set mcp.pan.label.color [210 210 210] +set mcp.pan.label.margin [0 0 0 0 0.5] +set mcp.width h=4 [53 86 22 22 0 0 0 0] [0] +set mcp.width.color [42 42 42 225 0 0 0 0] +set mcp.width.label h=4 [47 113 34 7 0 0 0 0] [0] +set mcp.width.label.color [220 220 220] +set mcp.width.label.margin [0 0 0 0 0.5] +set mcp.io [32 4 55 19 0 0 0 0] +set mcp.recinput [5 39 82 17 0 0 0 0] +set mcp.recinput.color [160 160 160] +set mcp.recinput.margin [4 0 18 0] +set mcp.fx [5 18 23 17 0 0 0 0] +set mcp.fxbyp [5 4 23 14 0 0 0 0] +set mcp.fxin [32 23 55 12 0 0 0 0] +set mcp.extmixer.mode [1] +set mcp.extmixer [0] +set mcp.trackidx [29 300 35 18 0 1 0 1] +set mcp.trackidx.margin [0 3 0 5 0.5] +set mcp.trackidx.color ?recarm [200 0 0] [100 100 100] +set mcp.meter.readout.color [184 184 184 220 255 150 150 255] +set mcp.meter.rmsreadout.color [255 255 150 200] +set mcp.meter.scale.color.unlit.top [140 140 140 100 0 0 0 255] +set mcp.meter.scale.color.unlit.bottom [90 90 90 100 0 0 0 255] +set mcp.meter.scale.color.lit.top [255 255 255 255 0 0 0 150] +set mcp.meter.scale.color.lit.bottom [200 200 200 255 0 0 0 150] + + Layout "2. Silver Big Meter (pan at bottom)" + + set mcp.volume h=4 [17 243 22 22 0 1 0 1] [35 243 22 22 0 1 0 1] trackpanmode>=4 [17 203 22 22 0 1 0 1] [35 203 22 22 0 1 0 1] + set mcp.pan.label h=4 [11 230 34 7 0 1 0 1] [29 230 34 7 0 1 0 1] + set mcp.width h=4 [53 243 22 22 0 1 0 1] [0] trackpanmode>=4 [53 203 22 22 0 1 0 1] [0] + set mcp.width.label h=4 [47 230 34 7 0 1 0 1] [0] + + EndLayout ; end of "Big Meter (pan at bottom)" + +EndLayout ; end of "Big Meter" + + +Layout "3. Black Big Meter" "big_meter_black" +set mcp.size [93 319] +front mcp.volume.label +set med [373] +set sml [300] +set mcp.folder folderstate<0 [86 300 7 18 0 1 0 1] [0 300 18 18 0 1 0 1] +set mcp.label [2 57 88 18 0 0 0 0] +set mcp.label.margin [2 0 2 0 0.5] +set mcp.label.color ?recarm [217 74 74] [184 184 184] +set mcp_bottom_anchor h=4 [17 86 22 22 0 0 0 0] [35 86 22 22 0 0 0 0] +set mcp.pan.color [174 174 174 191 0 0 0 0] +set mcp.pan.label h=4 [11 113 34 7 0 0 0 0] [29 113 34 7 0 0 0 0] +set mcp.pan.label.color [141 141 141] +set mcp.pan.label.margin [0 0 0 0 0.5] +set mcp.width h=4 [53 86 22 22 0 0 0 0] [0] +set mcp.width.color [174 174 174 225 0 0 0 0] +set mcp.width.label h=4 [47 113 34 7 0 0 0 0] [0] +set mcp.width.label.color [141 141 141] +set mcp.width.label.margin [0 0 0 0 0.5] +set mcp.io [32 4 55 19 0 0 0 0] +set mcp.recinput [5 39 82 17 0 0 0 0] +set mcp.recinput.color [160 160 160] +set mcp.recinput.margin [4 0 18 0] +set mcp.fx [5 18 23 17 0 0 0 0] +set mcp.fxbyp [5 4 23 14 0 0 0 0] +set mcp.fxin [32 23 55 12 0 0 0 0] +set mcp.extmixer.mode [1] +set mcp.extmixer [0] +set mcp.trackidx [29 300 35 18 0 1 0 1] +set mcp.trackidx.margin [0 3 0 5 0.5] +set mcp.trackidx.color ?recarm [200 0 0] [100 100 100] +set mcp.meter.readout.color [184 184 184 220 255 150 150 255] +set mcp.meter.rmsreadout.color [255 255 150 200] +set mcp.meter.scale.color.unlit.top [150 150 150 100 0 0 0 255] +set mcp.meter.scale.color.unlit.bottom [70 70 70 100 0 0 0 255] +set mcp.meter.scale.color.lit.top [255 255 255 255 0 0 0 150] +set mcp.meter.scale.color.lit.bottom [200 200 200 255 0 0 0 150] + + + + Layout "3. Black Big Meter (pan at bottom)" + + set mcp.volume h=4 [17 243 22 22 0 1 0 1] [35 243 22 22 0 1 0 1] trackpanmode>=4 [17 203 22 22 0 1 0 1] [35 203 22 22 0 1 0 1] + set mcp.pan.label h=4 [11 230 34 7 0 1 0 1] [29 230 34 7 0 1 0 1] + set mcp.width h=4 [53 243 22 22 0 1 0 1] [0] trackpanmode>=4 [53 203 22 22 0 1 0 1] [0] + set mcp.width.label h=4 [47 230 34 7 0 1 0 1] [0] + + EndLayout ; end of "Big Meter (pan at bottom, black)" + +EndLayout ; end of "Big Meter (black)" + + + +; -------------------------------------------------------------------------------------- + + + + + +clear master.mcp.* +set master.mcp.size [121 319] +front master.mcp.volume.label +set master.mcp.fx mcp.fx +set master.mcp.fxbyp mcp.fxbyp +set master.mcp.io [30 3 39 16 0 0 0 0] +set master.mcp.mono [8 52 41 16 0 0 0 0] +set master.mcp.label [30 22 48 10 0 0 0 0] +set master.mcp.label.margin [0 0 0 0 0] +set master.mcp.label.color mcp.label.color +set master.mcp_column_anchor [96 79] +set master.mcp.mute + master.mcp_column_anchor [0 0 17 18 0 0 0 0] +set master.mcp.solo + master.mcp_column_anchor [0 21 17 18 0 0 0 0] +set master.mcp.env + master.mcp_column_anchor [0 42 17 26 0 0 0 0] +set master.mcp.volume h>273 [10 91 17 219 0 0 0 1] [10 80 17 230 0 0 0 1] +set master.mcp.volume.label h>273 [8 79 82 14 0 0 0 0] [8 79 82 3 0 0 0 0] +set master.mcp.volume.label.color h>273 mcp.volume.label.color [83 83 83] +set master.mcp.volume.label.margin [1 5 0 0 0.5] +set master.mcp.meter h>273 [30 97 57 210 0 0 0 1] [30 86 57 221 0 0 0 1] +set master.mcp.meter.vu.div [6] +set master.mcp.meter.vu.rmsdiv [6] +set master.mcp.meter.readout.color [255 255 255 220 255 150 150 255] +set master.mcp.meter.rmsreadout.color [255 255 150 200] +set master.mcp.meter.scale.color.unlit.top [255 255 255 100 0 0 0 255] +set master.mcp.meter.scale.color.unlit.bottom [255 255 255 100 0 0 0 255] +set master.mcp.meter.scale.color.lit.top [255 255 255 255 0 0 0 150] +set master.mcp.meter.scale.color.lit.bottom [255 255 255 255 0 0 0 150] +set master.mcp.pan + [48 -20] mcp.pan +set master.mcp.pan.color mcp.pan.color +set master.mcp.pan.label [79 52 34 16 0 0 0 0] +set master.mcp.pan.label.color mcp.pan.label.color +set master.mcp.pan.label.margin mcp.pan.label.margin +set master.mcp.menubutton [96 261 24 40 0 1 0 1] + + + + +Layout "Alt 1" +set master.mcp.pan [54 47 18 18 0 0 0 0] +set master.mcp.pan.label [72 48 41 16 0 0 0 0] +set master.mcp.mono [8 48 41 16 0 0 0 0] +set master.mcp.volume h>273 [9 82 19 228 0 0 0 1] [9 71 19 239 0 0 0 1] +set master.mcp.volume.label h>273 [8 70 82 14 0 0 0 0] [8 70 82 3 0 0 0 0] +set master.mcp.meter h>273 [30 88 57 219 0 0 0 1] [30 77 57 230 0 0 0 1] +set master.mcp_column_anchor [96 70] +set master.mcp.mute + master.mcp_column_anchor [0 0 17 18 0 0 0 0] +set master.mcp.solo + master.mcp_column_anchor [0 21 17 18 0 0 0 0] +set master.mcp.env + master.mcp_column_anchor [0 42 17 26 0 0 0 0] +EndLayout ; end of "Alt 1" + + +Layout "Alt 2" "alt2" +set master.mcp.label [1 35 119 18 0 0 0 0] +set master.mcp.label.margin [2 0 2 0 0.5] +set master.mcp.io [30 3 39 31 0 0 0 0] +set master.mcp.pan [54 61 18 18 0 0 0 0] +set master.mcp.pan.label [72 62 41 16 0 0 0 0] +set master.mcp.mono [8 62 41 16 0 0 0 0] +set master.mcp.volume.label h>273 [8 84 82 14 0 0 0 0] [8 84 82 3 0 0 0 0] +set master.mcp_column_anchor [96 84] +set master.mcp.mute + master.mcp_column_anchor [0 0 17 18 0 0 0 0] +set master.mcp.solo + master.mcp_column_anchor [0 21 17 18 0 0 0 0] +set master.mcp.env + master.mcp_column_anchor [0 42 17 26 0 0 0 0] +set master.mcp.volume h>273 [9 98 19 212 0 0 0 1] [9 87 19 223 0 0 0 1] +set master.mcp.meter h>273 [30 102 57 205 0 0 0 1] [30 91 57 216 0 0 0 1] +EndLayout ; end of "Alt 2" + +Layout "Large" "large" +set master.mcp.size [141 319] +set master.mcp.io [30 3 20 19 0 0 0 0] +set master.mcp.mono [54 4 44 16 0 0 0 0] +set master.mcp.pan [111 50 22 22 0 0 0 0] +set master.mcp.pan.color [51 51 51 191 0 0 0 0] +set master.mcp.pan.label [105 77 34 7 0 0 0 0] +set master.mcp.pan.label.color [96 92 85] +set master.mcp.pan.label.margin [0 0 0 0 0.5] +set master.mcp.menubutton [116 261 24 40 0 1 0 1] +set master.mcp.volume.label h>273 [8 49 96 14 0 0 0 0] [8 49 96 3 0 0 0 0] +set master.mcp.volume h>273 [9 63 19 247 0 0 0 1] [9 52 19 258 0 0 0 1] +set master.mcp.meter h>273 [30 67 71 240 0 0 0 1] [30 56 71 251 0 0 0 1] +set master.mcp_column_anchor [110 90] +set master.mcp.mute + master.mcp_column_anchor [0 0 23 20 0 0 0 0] +set master.mcp.solo + master.mcp_column_anchor [0 23 23 20 0 0 0 0] +set master.mcp.env + master.mcp_column_anchor [0 46 23 30 0 0 0 0] +EndLayout ; end of "Large" + + +Layout "2. Silver Master" "analog-silver-mcp" + +set master.mcp.size [121 319] + +EndLayout + + +Layout "3. Black Master" "analog-black-mcp" + +set master.mcp.size [121 319] +set master.mcp.pan.color [174 174 174 191 0 0 0 0] +set master.mcp.pan.label.color [155 155 155] + +EndLayout + + + + +; ------------------------------------------- + + +clear trans.* +set trans.size [1041 85] +set trans.size.minmax [540 40 2048 200] +set trans.size.dockedheight [43] +set trans.margin [2 2 2 2] +set trans_border [6] ; HELLO USER! you can edit this number (<- <-) to expand/contract overall spacing +set trans_others_width h<85 w<1000 + [250] [trans_border{x}] + [360] [trans_border{x}] [61] +set trans_controls_anchor ?trans_flags&1 + + [3] trans_others_width [trans_border{x}] [3 0] +set trans.rew + trans_controls_anchor [0 3 29 33] +set trans.stop + trans_controls_anchor [28 3 31 33] +set trans.play + trans_controls_anchor [58 3 31 33] +set trans.pause + trans_controls_anchor [88 3 31 33] +set trans.fwd + trans_controls_anchor [118 3 29 33] +set trans.rec + trans_controls_anchor [153 3 31 33] +set trans.repeat + + [5] [trans.rec{w}] trans.rec +set trans_controls_width + * [-1] [trans.rew{x}] + [trans.repeat{x}] [trans.repeat{w}] +set trans_others_anchor ?trans_flags&1 [2] + trans_controls_anchor + trans_controls_width [trans_border{x}] +set trans.automode + trans_others_anchor [0 1 61 34] +set trans_status_width + trans_others_width * [-1] + [trans.automode{w}] [trans_border{x}] +set trans.status h>84 [2 64 1037 19 0 0 1 1] + + + [trans.automode{x}] [trans.automode{w}] [trans_border{x}] w<1000 [0 1 trans_status_width{x} 18] [0 1 trans_status_width{x} 34] +set trans.status.margin w<1000 h<85 [5 1 5 0] [7 1 7 0] [7 1 7 0] +set trans.bpm.tap + + + trans_others_width trans_controls_width * [2] [trans_border{x}] [3 1 45 16] +set trans.bpm.tap.margin [2 4 2 0 0.5] +set trans.bpm.edit [trans.bpm.tap 17 trans.bpm.tap 18] +set trans.bpm.edit.margin [0 0 0 2 0.5] +set trans.curtimesig ?trans_flags&4 + + + [trans.bpm.tap{x}] [trans.bpm.tap{w}] [trans_border{x}] [0 1 33 34] [0] +set trans.rate ?trans_flags&2 + + + + + [trans.bpm.tap{x}] [trans.bpm.tap{w}] [trans.curtimesig{w}] [trans_border{x}] ?trans_flags&4 [trans_border{x}] [0] h>84 [0 1 200 17 0 0 0.1 0] w<1000 [0 1 60 17 0 0 0 0] w>1400 [0 1 205 17 0 0 0 0] [0 1 100 17 0 0 0.3 0] [0] +set trans.rate.fader ?trans_flags&2 w<1000 h<85 [trans.rate 19 16 16 0 0 0 0] [trans.rate 18 trans.rate 17 0 0 trans.rate 0] [trans.rate 18 trans.rate 17 0 0 trans.rate 0] [0] +set trans.sel h>84 [2 40 220 18 0 0 0 0] w<1000 [trans.status 19 trans.status 16 0 0 0 0] [811 10 220 17 1 0 1 0] + +Layout "1. Classic Small" "small" +clear trans.* +set trans.size [1041 28] +set trans.size.minmax [514 28 2048 54] +set trans.margin [0 0 0 0] +set trans_border [6] +set doublerow + + [880] ?trans_flags&4 + [33] trans_border{x} [0] ?trans_flags&2 + [76] trans_border{x} [0] +set trans.size.dockedheight w>T C P - Settings +; +; Global, detailed settings and behavior-description for the Track-Control-Panels(TCP) + +clear tcp.* +set tcp.size [400 100 160] ; ! +tcp_heights 4 24 24 24 ; ! Track-heights for: supercollapsed, collapsed, small(norecarm), recarm size +tcp_folderindent 20 ; how much is the indent of Folder-tracks, compared to their "superior"-tracks +set y_align ?tcp_fxparms w<211 h<125 [0 0 0 0 0 0.5 0 0.5] [0 0 0 0 0 0 0 0] h<90 [0 0 0 0 0 0.5 0 0.5] [0 0 0 0 0 0 0 0] [0 0 0 0 0 0.5 0 0.5] ; ! Track Buttons general position +set tcp.margin +:maxfolderdepth:1 [13 0 0 0] ; ! Track Buttons general - position incl folder-tracks +set tcp.margin +:folderdepth:1 [-13 0 0 0] ; ! Track Buttons only in folders - position +set reverse_margin * [-1] tcp.margin ; !horizontal position of Track Buttons +set margin_to_width [0 0 tcp.margin{x}] ; !horizontal width of Track Buttons +set tcp.foldercomp [382 0 18 19 1 0 1 0] ; Folder-Cycle-Button +set tcp.folder h<32 [0] [382 86 18 14 1 1 1 1] ; Folder-Cycle-Button position + +front mcp.pan.label tcp.io tcp.fxin ;? + + ;set tcp_yanchor w<360 w<211 h<117 h<95 h<73 h<51 [0 41] [0 30] [0 19] [0 8] trackpanmode>=4 [0 -3] [0 8] h<73 h<51 [0 41] [0 30] [0 19] h<73 h<51 [0 41] [0 30] trackpanmode>=4 [0 19] [0 30] ;? + ;set tcp_yanchor ?tcp_fxparms w<211 h>=125 [0 8] . h>=90 [0 8] . ;? + ;set tcp.meter + tcp_yanchor w<211 h<51 [0] [342 26 29 9 1 y_align 1 y_align] h>4 [286 4 42 9 1 y_align 1 y_align] [286 -42 42 4 1 0 1 0] ;? + ;set tcp.meter.readout.color h>23 [255 255 255 140 255 255 255 200] [0 0 0 0 0 0 0 0] ;? + ;set tcp.meter.vu.div [1] ;? + ;set tcp.fx + tcp_yanchor w<211 h<73 [0] [338 44 24 18 1 y_align 1 y_align] h<51 [0] [338 22 24 18 1 y_align 1 y_align] ;? + ;set tcp.fxbyp tcp.fx{x}>0 + [tcp.fx tcp.fx 13 18 1 y_align 1 y_align] [tcp.fx{w}] [0] ;? + ;set tcp.recarm.fullmargin + tcp_yanchor [7 0 18 18 0 y_align 0 y_align] ;? + ;set tcp.recarm + reverse_margin tcp.recarm.fullmargin ;? + ;set tcp_label_fullmargin + tcp_yanchor w<211 [25 0 285 17 0 y_align 1 y_align] w<270 [25 0 229 17 0 y_align 1 y_align] w<360 [25 0 193 17 0 y_align 1 y_align] [25 0 75 17 0 y_align 0.5 y_align] ;? + ;set tcp.label + + reverse_margin tcp_label_fullmargin margin_to_width ;? + ;set tcp.label.color [210 10 10] ;? + +; set tcp.io + tcp_yanchor w<211 [310 0 22 18 1 y_align 1 y_align] w<270 [254 0 22 18 1 y_align 1 y_align] w<360 [218 0 58 18 1 y_align 1 y_align] [100 0 58 18 0.5 y_align 0.5 y_align] ; unused additional definition below +; set tcp.mute + tcp_yanchor [338 0 17 18 1 y_align 1 y_align] ; Kann raus +; set tcp.solo + tcp_yanchor [358 0 17 18 1 y_align 1 y_align] ; Kann raus +; set tcp.volume + tcp_yanchor w<211 h<51 [0] [7 23 322 16 0 y_align 1 y_align] w<270 h<51 [0] [7 23 266 16 0 y_align 1 y_align] w<360 h<51 [0] [7 23 241 16 0 y_align 1 y_align] [164 0 84 18 0.5 y_align 1 y_align] ;Kann raus +; set tcp.volume.label tcp.volume{x}>0 + [tcp.volume{w}] w<211 [tcp.volume tcp.volume 3 tcp.volume tcp.volume{rs} y_align tcp.volume{rs} y_align] w<270 [tcp.volume tcp.volume 3 tcp.volume tcp.volume{rs} y_align tcp.volume{rs} y_align] [tcp.volume tcp.volume 28 tcp.volume tcp.volume{rs} y_align tcp.volume{rs} y_align] ;Kann raus +; set tcp.volume.label.color [215 215 215] ;Kann raus +; set tcp.volume.label.margin [1 1 3 0 1] ;Kann raus +; set tcp.phase + tcp_yanchor w<211 h<95 [0] [63 66 15 16 0 y_align 0 y_align] w<270 h<73 [0] [28 45 15 16 0 y_align 0 y_align] w<360 h<73 [0] [55 45 15 16 0 y_align 0 y_align] h<51 [0] [55 23 15 16 0 y_align 0 y_align] ;Kann raus +; set tcp.recmon + tcp_yanchor w<211 h<95 [0] [338 66 15 16 1 y_align 1 y_align] w<360 h<73 [0] [338 45 15 16 1 y_align 1 y_align] h<51 [0] [239 23 15 16 1 y_align 1 y_align] ;Kann raus +; set tcp.recmode + tcp_yanchor w<211 h<95 [0] [352 66 23 16 1 y_align 1 y_align] w<360 h<73 [0] [352 45 23 16 1 y_align 1 y_align] h<51 [0] [253 23 23 16 1 y_align 1 y_align] ;Kann raus +; set tcp.recinput + tcp_yanchor w<211 h<73 [0] [28 45 304 16 0 y_align 1 y_align] w<270 h<73 [0] [49 45 227 16 0 y_align 1 y_align] w<360 h<73 [0] [76 45 200 16 0 y_align 1 y_align] h<51 [0] [76 23 157 16 0 y_align 1 y_align] ;Kann raus +; set tcp.recinput.color [221 224 224] ;Kann raus +; set tcp.recinput.margin [4 0 16 0] ;Kann raus +; set tcp.env + tcp_yanchor w<270 h<73 [0] [7 45 15 16 0 y_align 0 y_align] w<360 h<73 [0] [7 45 42 16 0 y_align 0 y_align] h<51 [0] [7 23 42 16 0 y_align 0 y_align] ;Kann raus +; set tcp.fxin ?recarm tcp.io{w}==58 + tcp_yanchor w<211 [0] w<270 [254 0 36 18 1 y_align 1 y_align] w<360 [218 0 36 18 1 y_align 1 y_align] [100 0 36 18 0.5 y_align 0.5 y_align] [0] [0] ; Kann raus +; set tcp.io ?recarm tcp.io{w}==58 + [36] [tcp.io tcp.io 22 18 tcp.io tcp.io tcp.io tcp.io] ; Kann raus +; set tcp.pan + tcp_yanchor w<211 h<95 [0] [6 65 18 18 0 y_align 0 y_align] h<51 [0] [281 22 18 18 1 y_align 1 y_align] ;Kann raus +; set tcp.pan.color [242 42 42 191 255 0 0 0] ; Kann raus +; set tcp.pan.label tcp.pan{x}>0 + [tcp.pan{w} 1] [tcp.pan tcp.pan 32 16 tcp.pan y_align tcp.pan y_align] [0] ;Kann raus +; set tcp.pan.label.color [240 243 243] ;Kann raus +; set tcp.pan.label.margin [0 0 3 0 1] ;Kann raus + ;set tcp.width trackpanmode>=4 + tcp_yanchor w<211 h<117 [0] [6 86 18 18 0 y_align 0 y_align] h<73 [0] [281 44 18 18 1 y_align 1 y_align] [0] ;? + ;set tcp.width.color [42 42 42 225 0 0 0 255] ;? vermutlich kann raus + ;set tcp.width.label trackpanmode>=4 tcp.width{x}>0 + [tcp.width{w} 1] [tcp.width tcp.width 32 16 tcp.width y_align tcp.width y_align] [0] [0] ;? vermutlich kann raus + ;set tcp.width.label.color [240 243 243] ;? vermutlich kann raus + ;set tcp.width.label.margin [0 0 3 0 1] ;? vermutlich kann raus + ;set tcp.fxparm w<360 w<211 trackpanmode>=4 [7 118 368 -24 0 0 1 1] [7 97 368 -3 0 0 1 1] [7 76 368 18 0 0 1 1] trackpanmode>=4 [7 76 368 18 0 0 1 1] [7 54 368 40 0 0 1 1] ;? + + ;set tcp.toosmall [100 10 10 10 0 0 0 0] ;? + + +;Ultraschall Layout for the TCP, using the TCP-theme graphics from the theme-folder "black-tcp" +Layout "Ultraschall 2" "black-tcp" +; The following setup the TCP-elements used in the Ultraschall-Theme + + set tcp_yanchor [0 40] ;! top position-anchor of all tcp-elements + set tcp.recarm.fullmargin + tcp_yanchor [7 0 19 19 0 y_align 0 y_align] ;! More RecArm Button placement + set tcp.recarm + reverse_margin tcp.recarm.fullmargin ;! More RecArm Button placement + set tcp_label_fullmargin + tcp_yanchor w<211 [26 0 349 18 0 y_align 1 y_align] [26 0 229 18 0 y_align 1 y_align] ;! Track-label placement + set tcp.label + + reverse_margin tcp_label_fullmargin margin_to_width ;! More Track-label placement + set tcp.meter + tcp_yanchor w<211 [0] [258 4 60 10 1 y_align 1 y_align] ;! VU-Meter placement + set tcp.label.color ?1 [180 180 180 100 250 250 250 200] ;! Color of Track-labels + set tcp.mute + tcp_yanchor w<211 [0] [326 0 24 19 1 y_align 1 y_align] ;! Mute Button Placement + set tcp.solo + tcp_yanchor w<211 [0] [354 0 24 19 1 y_align 1 y_align] ;! Solo Button Placement + set tcp.meter.readout.color [0] ;! No text in Vu-Meter + set tcp.label.margin [3 3 6 3] ;! Trackname-Label position + set tcp.trackidx [382 41 18 18 1 0.5 1 0.5] ;! Track number position + set tcp.trackidx.margin [0 0 0 0 0.5] ;! Track number transform + set tcp.trackidx.color ?recarm [220 26 0] [155 155 155] ;! if Rec is armed, draw trackIDx in color 260 26 0, else 155 155 155 + +; The following Track-elements are set to invisible. Only normal tracks, not the master track! + + set tcp.volume ?1 [0] + set tcp.recinput ?1 [0] + set tcp.volume.label ?1 [0] + set tcp.io ?1 [0] + set tcp.phase ?1 [0] + set tcp.pan ?1 [0] + set tcp.pan.label ?1 [0] + set tcp.width ?1 [0] + set tcp.width.label ?1 [0] + set tcp.env ?1 [0] + set tcp.recmon ?1 [0] + set tcp.fx ?1 [0] + set tcp.fxbyp ?1 [0] + set tcp.recmode ?1 [1] + set tcp.fxin ?1 [0] + + +; ultraschall_____________________________________________________________________________________________________ + +EndLayout ; end of "Ultraschall 2"-specific-TCP-layout + + +; The following are global-settings for the Master Track in the TCP + +clear master.tcp.* ;! +set master.tcp.size [400 100 160 48] ;! Size of the Master-Track in TCP +front master.tcp.volume.label master.tcp.pan.label ;? +set tcp_master_yanchor ?tcp_fxparms [0 8] [0 19] ;! +set master_y_align ?tcp_fxparms [0 0 0 0 0 0 0 0] [0 0 0 0 0 0.5 0 0.5] ;! +set master.tcp.meter + tcp_master_yanchor [11 4 295 9 0 master_y_align 1 master_y_align] ;! VU-Meter +set master.tcp.fx + tcp_master_yanchor [338 23 24 18 1 master_y_align 1 master_y_align] ;! FX-Button +set master.tcp.fxbyp master.tcp.fx{x}>0 + [master.tcp.fx master.tcp.fx 13 18 1 master_y_align 1 master_y_align] [master.tcp.fx{w}] [0] ;! FX-Bypass +set master.tcp.io + + [master.tcp.meter master.tcp.meter 22 18 1 master_y_align 1 master_y_align] [4 -4] [master.tcp.meter{w}] ;! IO-Button +set master.tcp.mono + tcp_master_yanchor [338 46 36 16 1 master_y_align 1 master_y_align] ;! Mono Button +set master.tcp.mute + tcp_master_yanchor [338 0 17 18 1 master_y_align 1 master_y_align] ;! Mute Button +set master.tcp.solo + tcp_master_yanchor [358 0 17 18 1 master_y_align 1 master_y_align] ;! Solo Button +set master.tcp.env + tcp_master_yanchor w<172 [7 46 15 16 0 master_y_align 0 master_y_align] [7 46 42 16 0 master_y_align 0 master_y_align] ;! Envelope Button +set master.tcp.volume + tcp_master_yanchor w<211 [7 23 323 18 0 master_y_align 1 master_y_align] [7 23 292 18 0 master_y_align 1 master_y_align] ;! Volume-fader +set master.tcp.volume.label master.tcp.volume{x}>0 + [master.tcp.volume{w}] w<211 [master.tcp.volume master.tcp.volume 3 master.tcp.volume master.tcp.volume{rs} master_y_align master.tcp.volume{rs} master_y_align] [master.tcp.volume master.tcp.volume 33 master.tcp.volume master.tcp.volume{rs} master_y_align master.tcp.volume{rs} master_y_align] ;! Volume-label +set master.tcp.volume.label.color [179 179 179] ;! Color of the Volume Label +set master.tcp.volume.label.margin [1 1 3 0 1] ;! Margin of the Volume Label +set master.tcp.pan + tcp_master_yanchor [281 45 18 18 1 master_y_align 1 master_y_align] ;! Pan-Knob + ;set master.tcp.pan.color [51 51 251 191 0 0 0 0] ; Kann raus +set master.tcp.pan.label + [master.tcp.pan{w} 1] [master.tcp.pan master.tcp.pan 32 16 master.tcp.pan master_y_align master.tcp.pan master_y_align] ;! Pan Label placement +set master.tcp.pan.label.color [221 224 224] ;! Pan Label Color +set master.tcp.pan.label.margin [0 0 3 0 1] ;! Pan Label position +set master.tcp.label [382 0 18 100 1 0 1 1] ;! Track Label +set master.tcp.label.margin [0 0 0 0 0.5] ;! Track Label position +set master.tcp.label.color tcp.trackidx.color ;!Track Label color + ;set master.tcp.fxparm [7 76 368 18 0 0 1 1] ;? + + + +; The following are the global-settings for Envelope-Tracks(envcp) + +clear envcp.* ;! +set envcp.size [400 100 160] ;! Size of Envelope-track +set envcp.margin +:maxfolderdepth:1 [13 0 0 0] ;! Envelope-Track-Button position incl folder tracks +set envcp.margin +:folderdepth:1 [-13 0 0 0] ;! Envelope-Track-Button position in folder-tracks-only +set envcp.yanchor h<51 [0 20] [0 20] ;! Envelope-track-button position + ; set envcp.arm + envcp.yanchor [7 0 18 18 0 0.5 0 0.5] +;set envcp.label + envcp.yanchor w<370 w<281 h>40 [25 0 288 18 0 0.5 1 0.5] [25 0 238 18 0 0.5 1 0.5] [25 0 117 18 0 0.5 0.5 0.5] +set envcp.label + envcp.yanchor h>67 [25 0 232 18 0 0.5 1 0.5] ;size of envelope-label, when height of envcp is bigger than 67 +set envcp.label.margin [3 2 3 4] ;Positioning of the Envelope-Label +set envcp.label.color [150 150 150 0] ;Color of Envelope-Label +set envcp.bypass + envcp.yanchor [326 20 24 19 1 0.5 1 0.5] ;! Bypass-button in envelope track +set envcp.hide + envcp.yanchor [353 20 24 19 1 0.5 1 0.5] ;! Hide/Clear-button in envelope track + ;set envcp.mod + envcp.yanchor w>280 h<51 [0] [269 24 57 18 1 0.5 1 0.5] h<51 [0] [280 24 20 18 1 0.5 1 0.5] ;? + ;set envcp.learn + envcp.yanchor w>280 h<51 [0] [332 24 43 18 1 0.5 1 0.5] h<51 [0] [306 24 19 18 1 0.5 1 0.5] ;? + + ; set envcp.fader + envcp.yanchor w<370 w<281 w<240 h<51 [0] [18 25 16 16 0 0.5 0 0.5] h<51 [0] envcp_type==4 [25 24 248 18 0 0.5 1 0.5] [25 24 299 18 0 0.5 1 0.5] h<51 [0] [25 24 238 18 0 0.5 1 0.5] [148 0 115 18 0.5 0.5 1 0.5] + ; set envcp.fader.color [200 200 200] ;? + +set envcp.fader + envcp.yanchor [25 20 232 18 0 0.5 1 0.5] ;Envelope Track Fader +set envcp.value + envcp.yanchor [259 19 56 20 1 0.5 1 0.5] ;! Value of Fader + +set envcp.value.margin [0 0 0 0 1] ;! Position of Value +set envcp.value.color [160 160 160] ;! Color of Value + + +; +; >> M C P - Settings +; +; Global settings for Master Track in Mixer-Panel-Control (MCP) +clear master.mcp.* + ;set master.mcp.size [121 319] ;? + ;front master.mcp.volume.label ;? + + + ;set master.mcp.extmixer [0] ;? eventuell kann raus, da von Ultraschall 2-Layout auch gendert + + ;set master.mcp.fx mcp.fx + ;set master.mcp.fxbyp mcp.fxbyp + ;set master.mcp.io [30 3 39 16 0 0 0 0] + ;set master.mcp.mono [8 52 41 16 0 0 0 0] + ;set master.mcp.label [30 22 48 10 0 0 0 0] + ;set master.mcp.label.margin [0 0 0 0 0] + ;set master.mcp.label.color mcp.label.color + ;set master.mcp_column_anchor [96 79] ;? + ;set master.mcp.mute + master.mcp_column_anchor [0 0 17 18 0 0 0 0] + ;set master.mcp.solo + master.mcp_column_anchor [0 21 17 18 0 0 0 0] + ;set master.mcp.env + master.mcp_column_anchor [0 42 17 26 0 0 0 0] + ;set master.mcp.volume h>273 [10 91 17 219 0 0 0 1] [10 80 17 230 0 0 0 1] + ;set master.mcp.volume.label h>273 [8 79 82 14 0 0 0 0] [8 79 82 3 0 0 0 0] + ;set master.mcp.volume.label.color h>273 mcp.volume.label.color [83 83 83] + ;set master.mcp.volume.label.margin [1 5 0 0 0.5] + ;set master.mcp.meter h>273 [30 97 57 210 0 0 0 1] [30 86 57 221 0 0 0 1] + ;set master.mcp.meter.vu.div [6] + ;set master.mcp.meter.vu.rmsdiv [6] + ;set master.mcp.meter.readout.color [255 255 255 220 255 150 150 255] + ;set master.mcp.meter.rmsreadout.color [255 255 150 200] + ;set master.mcp.meter.scale.color.unlit.top [255 255 255 100 0 0 0 255] + ;set master.mcp.meter.scale.color.unlit.bottom [255 255 255 50 0 0 0 255] + ;set master.mcp.meter.scale.color.lit.top [255 255 255 255 0 0 0 150] + ;set master.mcp.meter.scale.color.lit.bottom [255 255 255 255 0 0 0 150] + ;set master.mcp.pan + [48 -20] mcp.pan + ;set master.mcp.pan.color mcp.pan.color + ;set master.mcp.pan.label [79 52 34 16 0 0 0 0] + ;set master.mcp.pan.label.color mcp.pan.label.color + ;set master.mcp.pan.label.margin mcp.pan.label.margin + ; set master.mcp.menubutton [96 261 24 40 0 1 0 1] + + + +;Mixer-settings for Mixer Control Panel(MCP), using the theme graphics from theme-folder "ultraschall_master" +Layout "Ultraschall 2" "ultraschall_master" + +;variables + set med [300] + set big [500] + set big_space h=4 [11 24 26 26 -10 -10 -10 -10] [23 22 26 26 -10 -10 -10 -10] + set master.mcp.pan.fadermode [1] + set master.mcp.pan.margin [10 10 10 10] + set master.mcp.pan.color [155 155 155] + set master.mcp.pan.label h=4 [0 49 70 16 0 0 0 0] [0 49 70 16 0 0 0 0] + set master.mcp.pan.label.color [157 157 157 0 0 0 0 0] + set master.mcp.pan.label.margin trackpanmode>=4 [2 0 34 0 0.5] [2 0 2 0 0.5] + +;Volume Fader/Label settings + set master.mcp.volume h=4 [12 24 26 26 -10 -10 -10 -10] [19 22 26 26 -10 -10 -10 -10] + set mcp.pan.fadermode [1] + set mcp.pan.margin [10 10 10 10] + set mcp.pan.color [155 155 155] + set mcp.pan.label h=4 [0 49 70 16 0 0 0 0] [1 49 70 16 0 0 0 0] + set mcp.pan.label.color [180 180 180 0 0 0 0 0] + set mcp.pan.label.margin trackpanmode>=4 [0 0 34 0 0.5] [-7 0 2 0 0.5] + +;Recording Buttons settings + set mcp.recmon h> TRANSPORT - Settings +; + + ;clear trans.* + + ;front set trans.status set trans.rate + + ;set trans.size [1041 85] + ;set trans.size.minmax [540 40 2048 200] + ;set trans.size.dockedheight [43] + ;set trans.margin [230 2 2 2] + + + +Layout "Ultraschall 2 Trans" + +; ultraschall _______________ + +clear trans.* + +front trans.rate.fader + +;Transport settings +set trans_offset [50] +set trans.size [1041 85] +set trans.size.minmax [540 40 2048 200] +set trans.size.dockedheight [43] +set trans.margin [230 2 2 2] + + ;set trans.bpm.tap ?1 [0] + ;set trans.bpm.edit ?1 [0] + ;set trans.automode ?1 [0] + ;set trans.curtimesig ?1 [0] + ;set trans.repeat ?1 [0] + +;Selection-display off + ;set trans.sel [752 10 180 20 ] + ;set trans.sel.margin [5 0 0 0] + ;set trans.sel.color [230 230 230] +set trans.sel ?1 [0] + +;Time/Beats display +set trans.status + trans_offset [394 5 244 31 0.5 0 0.5 0] +set trans.status.color ?recarm [227 115 115] +set trans.status.margin [-60 3 30 4] +set trans.status.font [8] + +;Rec/Play/Button/Rew/Ffwd/etc-Buttons +set trans.rew + trans_offset [150 5 36 36 0.5 0 0.5 0] +set trans.stop + trans_offset [185 5 36 36 0.5 0 0.5 0] +set trans.play + trans_offset [220 5 36 36 0.5 0 0.5 0] +set trans.pause + trans_offset [255 5 36 36 0.5 0 0.5 0] +set trans.fwd + trans_offset [290 5 36 36 0.5 0 0.5 0] +set trans.repeat + trans_offset [325 5 36 36 0.5 0 0.5 0] +set trans.rec + trans_offset [360 5 36 36 0.5 0 0.5 0] + + ; set trans.rate ?trans_flags&2 + + + + + [trans.bpm.tap{x}] [trans.bpm.tap{w}] [trans.curtimesig{w}] [trans_border{x}] ?trans_flags&4 [trans_border{x}] [0] h>84 [0 1 200 17 0 0 0.1 0] w<300 [0 1 60 17 0 0 0.5 0] w>1400 [0 1 205 17 0 0 0 0] [600 1 100 17 0 0 0.5 0] [0] + ; set trans.rate.fader + trans_offset ?trans_flags&2 w<300 h<85 [trans.rate 19 16 16 0 0 0 0] [trans.rate 18 trans.rate 17 0 0 trans.rate 0] [trans.rate 18 trans.rate 17 0 0 trans.rate 0] [0] + +;Playrate Fader settings +set trans.rate w<600 [0] ?trans_flags&2 [889 13 64 13 1 0 1 0] +set trans.rate.margin [6 1 5 1] +set trans.rate.color [150 150 150 100 155 155 155 1] +set trans.rate.font [8] +set trans.rate.fader w<600 [0] ?trans_flags&2 [949 9 80 18 1 0 1 0] + + ; set trans.rate [890 4 100 19 1 0 1 0] + ; set trans.rate.margin [10] + ; set trans.rate.fader [trans.rate 23 trans.rate 17 trans.rate 0 trans.rate 0] + ; set trans.rate.color [203 0 0 0 200 200 20 250] + ; set trans.rate.fader.color [203 0 0] + +; ultraschall _______________ + +EndLayout ; end of "Ultraschall 2 Trans" + + + + + + + + +;Ultraschall layout for Notes; using theme-images from image-folder "black-tcp" +Layout "Ultraschall 2 Notes" "black-tcp" + +clear tcp.* +set tcp.label.color [191 191 191] +set tcp.size [400 100 160] +set tcp_label_fullmargin + tcp_yanchor w<211 [25 0 307 17 0 y_align 1 y_align] w<360 [25 0 251 17 0 y_align 1 y_align] [25 0 78 17 0 y_align 0.5 y_align] +set tcp.label + + reverse_margin tcp_label_fullmargin +EndLayout ; end of "Ultraschall 2 Notes" + diff --git a/ColorThemes/Ultraschall_2/rtconfug-white.txt b/ColorThemes/Ultraschall_2/rtconfug-white.txt new file mode 100644 index 0000000..ebc22f3 --- /dev/null +++ b/ColorThemes/Ultraschall_2/rtconfug-white.txt @@ -0,0 +1,2196 @@ +use_pngs 1 +tcp_showborders 0 +mcp_showborders 0 +tcp_vupeakwidth 2 +mcp_vupeakheight 4 ;default +;mcp_vupeakheight 1 +mcp_mastervupeakheight 4 +mcp_altmeterpos 0 +use_overlays 0 +transport_showborders 0 +tcp_vol_zeroline 85000000 +tcp_pan_zeroline 85000000 +mcp_vol_zeroline FF000000 +mcp_pan_zeroline 85000000 +trans_speed_zeroline 85000000 +gen_vol_zeroline FF000000 +gen_pan_zeroline FF000000 +item_volknobfg 85000000 FF778485 00474F4F +mcp_min_height 230 +mcp_voltext_flags 5 5 +tcp_voltext_flags 5 5 + + + + +; ----------WALTER------------ + +clear tcp.* +set tcp.size [400 100 160] +tcp_heights 4 24 49 73 ; supercollapsed, collapsed, small(norecarm), recarm size +tcp_folderindent 13 +set y_align ?tcp_fxparms w<211 h<125 [0 0 0 0 0 0.5 0 0.5] [0 0 0 0 0 0 0 0] h<90 [0 0 0 0 0 0.5 0 0.5] [0 0 0 0 0 0 0 0] [0 0 0 0 0 0.5 0 0.5] +set tcp.margin +:maxfolderdepth:1 [13 0 0 0] +set tcp.margin +:folderdepth:1 [-13 0 0 0] +set reverse_margin * [-1] tcp.margin +set margin_to_width [0 0 tcp.margin{x}] +set tcp.foldercomp [382 0 18 19 1 0 1 0] +set tcp.folder h<32 [0] [382 86 18 14 1 1 1 1] +front tcp.io tcp.fxin +set tcp_yanchor w<360 w<211 h<117 h<95 h<73 h<51 [0 41] [0 30] [0 19] [0 8] trackpanmode>=4 [0 -3] [0 8] h<73 h<51 [0 41] [0 30] [0 19] h<73 h<51 [0 41] [0 30] trackpanmode>=4 [0 19] [0 30] +set tcp_yanchor ?tcp_fxparms w<211 h>=125 [0 8] . h>=90 [0 8] . +set tcp.meter + tcp_yanchor w<211 h<51 [0] [342 26 29 9 1 y_align 1 y_align] h>4 [286 4 42 9 1 y_align 1 y_align] [286 -42 42 4 1 0 1 0] +set tcp.meter.readout.color h>23 [255 255 255 140 255 255 255 200] [0 0 0 0 0 0 0 0] +set tcp.meter.vu.div [1] +set tcp.fx + tcp_yanchor w<211 h<73 [0] [338 44 24 18 1 y_align 1 y_align] h<51 [0] [338 22 24 18 1 y_align 1 y_align] +set tcp.fxbyp tcp.fx{x}>0 + [tcp.fx tcp.fx 13 18 1 y_align 1 y_align] [tcp.fx{w}] [0] +set tcp.recarm.fullmargin + tcp_yanchor [7 0 18 18 0 y_align 0 y_align] +set tcp.recarm + reverse_margin tcp.recarm.fullmargin +set tcp_label_fullmargin + tcp_yanchor w<211 [25 0 285 17 0 y_align 1 y_align] w<270 [25 0 229 17 0 y_align 1 y_align] w<360 [25 0 193 17 0 y_align 1 y_align] [25 0 75 17 0 y_align 0.5 y_align] +set tcp.label + + reverse_margin tcp_label_fullmargin margin_to_width +set tcp.label.color [191 191 191] +set tcp.label.margin [3 3 6 3] +set tcp.io + tcp_yanchor w<211 [310 0 22 18 1 y_align 1 y_align] w<270 [254 0 22 18 1 y_align 1 y_align] w<360 [218 0 58 18 1 y_align 1 y_align] [100 0 58 18 0.5 y_align 0.5 y_align] ; additional definition below +set tcp.mute + tcp_yanchor [338 0 17 18 1 y_align 1 y_align] +set tcp.solo + tcp_yanchor [358 0 17 18 1 y_align 1 y_align] +set tcp.volume + tcp_yanchor w<211 h<51 [0] [7 23 322 16 0 y_align 1 y_align] w<270 h<51 [0] [7 23 266 16 0 y_align 1 y_align] w<360 h<51 [0] [7 23 241 16 0 y_align 1 y_align] [164 0 84 18 0.5 y_align 1 y_align] +set tcp.volume.label tcp.volume{x}>0 + [tcp.volume{w}] w<211 [tcp.volume tcp.volume 3 tcp.volume tcp.volume{rs} y_align tcp.volume{rs} y_align] w<270 [tcp.volume tcp.volume 3 tcp.volume tcp.volume{rs} y_align tcp.volume{rs} y_align] [tcp.volume tcp.volume 28 tcp.volume tcp.volume{rs} y_align tcp.volume{rs} y_align] +set tcp.volume.label.color [215 215 215] +set tcp.volume.label.margin [1 1 3 0 1] +set tcp.phase + tcp_yanchor w<211 h<95 [0] [63 66 15 16 0 y_align 0 y_align] w<270 h<73 [0] [28 45 15 16 0 y_align 0 y_align] w<360 h<73 [0] [55 45 15 16 0 y_align 0 y_align] h<51 [0] [55 23 15 16 0 y_align 0 y_align] +set tcp.recmon + tcp_yanchor w<211 h<95 [0] [338 66 15 16 1 y_align 1 y_align] w<360 h<73 [0] [338 45 15 16 1 y_align 1 y_align] h<51 [0] [239 23 15 16 1 y_align 1 y_align] +set tcp.recmode + tcp_yanchor w<211 h<95 [0] [352 66 23 16 1 y_align 1 y_align] w<360 h<73 [0] [352 45 23 16 1 y_align 1 y_align] h<51 [0] [253 23 23 16 1 y_align 1 y_align] +set tcp.recinput + tcp_yanchor w<211 h<73 [0] [28 45 304 16 0 y_align 1 y_align] w<270 h<73 [0] [49 45 227 16 0 y_align 1 y_align] w<360 h<73 [0] [76 45 200 16 0 y_align 1 y_align] h<51 [0] [76 23 157 16 0 y_align 1 y_align] +set tcp.recinput.color [221 224 224] +set tcp.recinput.margin [4 0 16 0] +set tcp.env + tcp_yanchor w<270 h<73 [0] [7 45 15 16 0 y_align 0 y_align] w<360 h<73 [0] [7 45 42 16 0 y_align 0 y_align] h<51 [0] [7 23 42 16 0 y_align 0 y_align] +set tcp.fxin ?recarm tcp.io{w}==58 + tcp_yanchor w<211 [0] w<270 [254 0 36 18 1 y_align 1 y_align] w<360 [218 0 36 18 1 y_align 1 y_align] [100 0 36 18 0.5 y_align 0.5 y_align] [0] [0] +set tcp.io ?recarm tcp.io{w}==58 + [36] [tcp.io tcp.io 22 18 tcp.io tcp.io tcp.io tcp.io] +set tcp.pan + tcp_yanchor w<211 h<95 [0] [6 65 18 18 0 y_align 0 y_align] h<51 [0] [281 22 18 18 1 y_align 1 y_align] +set tcp.pan.color [51 51 51 191 0 0 0 0] +set tcp.pan.label tcp.pan{x}>0 + [tcp.pan{w} 1] [tcp.pan tcp.pan 32 16 tcp.pan y_align tcp.pan y_align] [0] +set tcp.pan.label.color [221 224 224] +set tcp.pan.label.margin [0 0 3 0 1] +set tcp.width trackpanmode>=4 + tcp_yanchor w<211 h<117 [0] [6 86 18 18 0 y_align 0 y_align] h<73 [0] [281 44 18 18 1 y_align 1 y_align] [0] +set tcp.width.color [51 51 51 225 0 0 0 0] +set tcp.width.label trackpanmode>=4 tcp.width{x}>0 + [tcp.width{w} 1] [tcp.width tcp.width 32 16 tcp.width y_align tcp.width y_align] [0] [0] +set tcp.width.label.color [221 224 224] +set tcp.width.label.margin [0 0 3 0 1] +set tcp.fxparm w<360 w<211 trackpanmode>=4 [7 118 368 -24 0 0 1 1] [7 97 368 -3 0 0 1 1] [7 76 368 18 0 0 1 1] trackpanmode>=4 [7 76 368 18 0 0 1 1] [7 54 368 40 0 0 1 1] +set tcp.trackidx [382 41 18 18 1 0.5 1 0.5] +set tcp.trackidx.margin [0 0 0 0 0.5] +set tcp.trackidx.color ?recarm [220 26 0] [115 115 115] +set tcp.toosmall [10 10 10 10 0 0 0 0] + + + Layout "3. Black Default TCP (vertical meters)" black-tcp-v-meters + + + + + set tcp.size [405 100 160] + set tcp.foldercomp [387 0 18 19 1 0 1 0] + set tcp.folder h<32 [0] [388 86 18 14 1 1 1 1] + + set tcp.meter + tcp_yanchor w<211 h<51 [0] [342 26 29 9 1 y_align 1 y_align] [80 -42 42 4 1 0 1 0] + set tcp.meter w>=211 h>4 [372 4 11 92 1 0 1 1] [80 -42 42 4 1 0 1 0] + set tcp.meter.readout.color h>=90 [255 255 255 140 255 255 255 200] [0 0 0 0 0 0 0 0] + set tcp.meter.scale.color.unlit.top h<90 [0 0 0 0 0 0 0 0] [99 99 99 100 0 0 0 255] + set tcp.meter.scale.color.unlit.bottom h<90 [0 0 0 0 0 0 0 0] [70 70 70 100 0 0 0 255] + set tcp.meter.scale.color.lit.top h<90 [0 0 0 0 0 0 0 0] [170 207 202 255 0 0 0 50] + set tcp.meter.scale.color.lit.bottom h<90 [0 0 0 0 0 0 0 0] [170 207 202 255 0 0 0 50] + + set tcp.fx + tcp_yanchor w<211 h<73 [0] [338 44 24 18 1 y_align 1 y_align] h>4 [280 0 24 18 1 y_align 1 y_align] + set tcp.fxbyp tcp.fx{x}>0 + [tcp.fx tcp.fx 13 18 1 y_align 1 y_align] [tcp.fx{w}] [0] + set tcp.mute + tcp_yanchor w<211 [338 0 17 18 1 y_align 1 y_align] h>4 [323 0 17 18 1 y_align 1 y_align] + set tcp.solo + tcp_yanchor w<211 [358 0 17 18 1 y_align 1 y_align] h>4 [343 0 17 18 1 y_align 1 y_align] + set tcp.recmon + tcp_yanchor w<211 h<95 [0] [6 23 15 16 1 y_align 1 y_align] h<51 [0] [323 23 15 16 1 y_align 1 y_align] + set tcp.recmode + tcp_yanchor w<211 h<95 [0] [20 23 23 16 1 y_align 1 y_align] h<51 [0] [337 23 23 16 1 y_align 1 y_align] + set tcp.trackidx [387 41 18 18 1 0.5 1 0.5] + + set tcp.recinput + tcp_yanchor w<211 h<73 [0] [28 45 304 16 0 y_align 1 y_align] w<270 h<73 [0] [47 45 229 16 0 y_align 1 y_align] w<360 h<73 [0] [76 45 200 16 0 y_align 1 y_align] h<51 [0] [76 23 157 16 0 y_align 1 y_align] + set tcp.recinput.color [221 224 224] + set tcp.recinput.margin [2 0 16 0] + set tcp.pan + tcp_yanchor w<211 h<95 [0] [6 65 18 18 0 y_align 0 y_align] h<51 [0] [279 22 18 18 1 y_align 1 y_align] + set tcp.pan.color [51 51 51 191 0 0 0 0] + set tcp.pan.label tcp.pan{x}>0 + [tcp.pan{w} 1] [tcp.pan tcp.pan 20 16 tcp.pan y_align tcp.pan y_align] [0] + set tcp.pan.label.color [221 224 224] + set tcp.pan.label.margin [0 0 3 0 1] + set tcp.width trackpanmode>=4 + tcp_yanchor w<211 h<117 [0] [6 86 18 18 0 y_align 0 y_align] h<73 [0] [279 44 18 18 1 y_align 1 y_align] [0] + set tcp.width.color [51 51 51 225 0 0 0 0] + set tcp.width.label trackpanmode>=4 tcp.width{x}>0 + [tcp.width{w} 1] [tcp.width tcp.width 20 16 tcp.width y_align tcp.width y_align] [0] [0] + set tcp.width.label.color [221 224 224] + set tcp.width.label.margin [0 0 3 0 1] + + set tcp.volume tcp.volume + +set tcp.label.color [150 150 150] +set tcp.recinput.color [140 140 140] +set tcp.pan.color [190 190 190 191 0 0 0 0] +set tcp.pan.label.color [130 130 130] +set tcp.width.color [190 190 190 225 0 0 0 0] +set tcp.width.label.color [130 130 130] +set tcp.volume.label.color [150 150 150] + + EndLayout ; end of "3. Black Default TCP (vertical meters)" + +Layout "1. Classic Default TCP" +set tcp.volume tcp.volume +EndLayout + + + Layout "1. Classic Default TCP (vertical meters)" "classic-tcp-v-meters" + + set tcp.size [405 100 160] + set tcp.foldercomp [387 0 18 19 1 0 1 0] + set tcp.folder h<32 [0] [388 86 18 14 1 1 1 1] + set tcp.meter + tcp_yanchor w<211 h<51 [0] [342 26 29 9 1 y_align 1 y_align] [80 -42 42 4 1 0 1 0] + set tcp.meter w>=211 h>4 [372 4 11 92 1 0 1 1] [80 -42 42 4 1 0 1 0] + set tcp.meter.readout.color h>=90 [255 255 255 140 255 255 255 200] [0 0 0 0 0 0 0 0] + set tcp.meter.scale.color.unlit.top h<90 [0 0 0 0 0 0 0 0] [120 120 120 100 0 0 0 255] + set tcp.meter.scale.color.unlit.bottom h<90 [0 0 0 0 0 0 0 0] [70 70 70 100 0 0 0 255] + set tcp.meter.scale.color.lit.top h<90 [0 0 0 0 0 0 0 0] [184 223 218 255 0 0 0 50] + set tcp.meter.scale.color.lit.bottom h<90 [0 0 0 0 0 0 0 0] [184 223 218 255 0 0 0 50] + set tcp.fx + tcp_yanchor w<211 h<73 [0] [338 44 24 18 1 y_align 1 y_align] h>4 [280 0 24 18 1 y_align 1 y_align] + set tcp.fxbyp tcp.fx{x}>0 + [tcp.fx tcp.fx 13 18 1 y_align 1 y_align] [tcp.fx{w}] [0] + set tcp.mute + tcp_yanchor w<211 [338 0 17 18 1 y_align 1 y_align] h>4 [323 0 17 18 1 y_align 1 y_align] + set tcp.solo + tcp_yanchor w<211 [358 0 17 18 1 y_align 1 y_align] h>4 [343 0 17 18 1 y_align 1 y_align] + set tcp.recmon + tcp_yanchor w<211 h<95 [0] [6 23 15 16 1 y_align 1 y_align] h<51 [0] [323 23 15 16 1 y_align 1 y_align] + set tcp.recmode + tcp_yanchor w<211 h<95 [0] [20 23 23 16 1 y_align 1 y_align] h<51 [0] [337 23 23 16 1 y_align 1 y_align] + set tcp.trackidx [387 41 18 18 1 0.5 1 0.5] + set tcp.volume.label.color [210 210 210] + set tcp.recinput + tcp_yanchor w<211 h<73 [0] [28 45 304 16 0 y_align 1 y_align] w<270 h<73 [0] [47 45 229 16 0 y_align 1 y_align] w<360 h<73 [0] [76 45 200 16 0 y_align 1 y_align] h<51 [0] [76 23 157 16 0 y_align 1 y_align] + set tcp.recinput.color [221 224 224] + set tcp.recinput.margin [2 0 16 0] + set tcp.pan + tcp_yanchor w<211 h<95 [0] [6 65 18 18 0 y_align 0 y_align] h<51 [0] [279 22 18 18 1 y_align 1 y_align] + set tcp.pan.color [51 51 51 191 0 0 0 0] + set tcp.pan.label tcp.pan{x}>0 + [tcp.pan{w} 1] [tcp.pan tcp.pan 20 16 tcp.pan y_align tcp.pan y_align] [0] + set tcp.pan.label.color [221 224 224] + set tcp.pan.label.margin [0 0 3 0 1] + set tcp.width trackpanmode>=4 + tcp_yanchor w<211 h<117 [0] [6 86 18 18 0 y_align 0 y_align] h<73 [0] [279 44 18 18 1 y_align 1 y_align] [0] + set tcp.width.color [51 51 51 225 0 0 0 0] + set tcp.width.label trackpanmode>=4 tcp.width{x}>0 + [tcp.width{w} 1] [tcp.width tcp.width 20 16 tcp.width y_align tcp.width y_align] [0] [0] + set tcp.width.label.color [221 224 224] + set tcp.width.label.margin [0 0 3 0 1] + + EndLayout ; end of "Classic Default TCP (vertical meters)" + + + + + Layout "2. Silver Default TCP (vertical meters)" "silver-tcp-v-meters" + + set tcp.size [405 100 160] + set tcp.foldercomp [387 0 18 19 1 0 1 0] + set tcp.folder h<32 [0] [388 86 18 14 1 1 1 1] + set tcp.meter + tcp_yanchor w<211 h<51 [0] [342 26 29 9 1 y_align 1 y_align] [80 -42 42 4 1 0 1 0] + set tcp.meter w>=211 h>4 [372 4 11 92 1 0 1 1] [80 -42 42 4 1 0 1 0] + set tcp.meter.readout.color h>=90 [255 255 255 140 255 255 255 200] [0 0 0 0 0 0 0 0] + set tcp.meter.scale.color.unlit.top h<90 [0 0 0 0 0 0 0 0] [120 120 120 100 0 0 0 255] + set tcp.meter.scale.color.unlit.bottom h<90 [0 0 0 0 0 0 0 0] [70 70 70 100 0 0 0 255] + set tcp.meter.scale.color.lit.top h<90 [0 0 0 0 0 0 0 0] [184 223 218 255 0 0 0 50] + set tcp.meter.scale.color.lit.bottom h<90 [0 0 0 0 0 0 0 0] [184 223 218 255 0 0 0 50] + set tcp.fx + tcp_yanchor w<211 h<73 [0] [338 44 24 18 1 y_align 1 y_align] h>4 [280 0 24 18 1 y_align 1 y_align] + set tcp.fxbyp tcp.fx{x}>0 + [tcp.fx tcp.fx 13 18 1 y_align 1 y_align] [tcp.fx{w}] [0] + set tcp.mute + tcp_yanchor w<211 [338 0 17 18 1 y_align 1 y_align] h>4 [323 0 17 18 1 y_align 1 y_align] + set tcp.solo + tcp_yanchor w<211 [358 0 17 18 1 y_align 1 y_align] h>4 [343 0 17 18 1 y_align 1 y_align] + set tcp.recmon + tcp_yanchor w<211 h<95 [0] [6 23 15 16 1 y_align 1 y_align] h<51 [0] [323 23 15 16 1 y_align 1 y_align] + set tcp.recmode + tcp_yanchor w<211 h<95 [0] [20 23 23 16 1 y_align 1 y_align] h<51 [0] [337 23 23 16 1 y_align 1 y_align] + set tcp.trackidx [387 41 18 18 1 0.5 1 0.5] + set tcp.volume.label.color [210 210 210] + set tcp.recinput + tcp_yanchor w<211 h<73 [0] [28 45 304 16 0 y_align 1 y_align] w<270 h<73 [0] [47 45 229 16 0 y_align 1 y_align] w<360 h<73 [0] [76 45 200 16 0 y_align 1 y_align] h<51 [0] [76 23 157 16 0 y_align 1 y_align] + set tcp.recinput.color [221 224 224] + set tcp.recinput.margin [2 0 16 0] + set tcp.pan + tcp_yanchor w<211 h<95 [0] [6 65 18 18 0 y_align 0 y_align] h<51 [0] [279 22 18 18 1 y_align 1 y_align] + set tcp.pan.color [51 51 51 191 0 0 0 0] + + + set tcp.volume.color [55 55 55 0] + set tcp.pan.color [55 55 55 0] + set tcp.width.color [55 55 55 0] + + set tcp.pan.label tcp.pan{x}>0 + [tcp.pan{w} 1] [tcp.pan tcp.pan 20 16 tcp.pan y_align tcp.pan y_align] [0] + set tcp.pan.label.color [221 224 224] + set tcp.pan.label.margin [0 0 3 0 1] + set tcp.width trackpanmode>=4 + tcp_yanchor w<211 h<117 [0] [6 86 18 18 0 y_align 0 y_align] h<73 [0] [279 44 18 18 1 y_align 1 y_align] [0] + set tcp.width.color [51 51 51 225 0 0 0 0] + set tcp.width.label trackpanmode>=4 tcp.width{x}>0 + [tcp.width{w} 1] [tcp.width tcp.width 20 16 tcp.width y_align tcp.width y_align] [0] [0] + set tcp.width.label.color [221 224 224] + set tcp.width.label.margin [0 0 3 0 1] + + ;set tcp.recmon + tcp_yanchor w<211 h<95 [0] [338 23 15 16 1 y_align 1 y_align] w<360 h<73 [0] [280 23 15 16 1 y_align 1 y_align] h<51 [0] [239 23 15 16 1 y_align 1 y_align] + + EndLayout ; end of "Silver Default TCP (vertical meters)" + + + +Layout "3. Black Default TCP" "black-tcp" + set tcp.volume tcp.volume +set tcp.label.color [150 150 150] +set tcp.recinput.color [140 140 140] +set tcp.pan.color [190 190 190 191 0 0 0 0] +set tcp.pan.label.color [150 150 150] +set tcp.width.color [190 190 190 225 0 0 0 0] +set tcp.width.label.color [150 150 150] +set tcp.volume.label.color [150 150 150] +EndLayout + +Layout "2. Silver Default TCP" "silver-tcp" +set tcp.volume tcp.volume +set tcp.pan.color [44 44 44 191 0 0 0 0] +set tcp.width.color [44 44 44 191 0 0 0 0] +set tcp.volume.label.color [210 210 210] +set tcp.trackidx.color ?recarm [220 20 34] [120 120 120] + + set tcp.volume.color [55 55 55 0] + set tcp.pan.color [55 55 55 0] + set tcp.width.color [55 55 55 0] + +EndLayout + + +Layout "2. Silver Default MCP" "silver-mcp-default" + +clear mcp.* + +set mcp.size [73 319] +front mcp.width.label mcp.pan.label mcp.recmon mcp.volume.label +set mcp.folder folderstate<0 [66 300 7 18 0 1 0 1] [0 300 18 18 0 1 0 1] + +set mcp.trackidx [1 35 70 18 0 0 0 0] +set mcp.trackidx.margin [2 0 2 0 0.5] +set mcp.trackidx.color ?recarm [220 26 0] [100 100 100] + +set mcp.label [1 301 70 17 0 1 0 1] +set mcp.label.margin [2 3 2 4 0.5] +set mcp.label.color [150 150 150] + +set mcp_column_anchor [48 105] +set mcp.mute + mcp_column_anchor [0 0 17 18 0 0 0 0] +set mcp.solo + mcp_column_anchor [0 21 17 18 0 0 0 0] +set mcp.recmon + mcp_column_anchor h>273 [0 42 17 14 0 0 0 0] [0 42 17 14 0 0 0 0] +set mcp.recmode + mcp_column_anchor h>273 [0 54 17 22 0 0 0 0] [0] +set mcp.env + mcp_column_anchor h>283 [0 79 17 26 0 0 0 0] h>273 [0 79 17 14 0 0 0 0] h>233 [0 59 17 14 0 0 0 0] [0] +set mcp.phase + mcp_column_anchor h>283 [1 108 15 16 0 0 0 0] h>273 [1 96 15 16 0 0 0 0] h>251 [1 76 15 16 0 0 0 0] [0] +set mcp.recarm [41 260 20 33 0 1 0 1] +set mcp.meter.vu.div [2 1] +set mcp.meter h>273 [27 123 12 166 0 0 0 1] [27 112 12 177 0 0 0 1] +set mcp.meter.readout.color [255 255 255 140 255 255 255 200] +set mcp.volume h>273 [9 119 17 173 0 0 0 1] [9 108 17 184 0 0 0 1] +set mcp.volume.label h>273 [7 105 35 14 0 0 0 0] [7 105 35 3 0 0 0 0] +set mcp.volume.label.color [165 165 165] +set mcp.volume.label.margin h>273 [1 5 0 0 0.5] [52 5 53 0 0.5] +set mcp.pan trackpanmode>=4 [6 62 18 18 0 0 0 0] [4 65 30 30 0 0 0 0] +set mcp.pan.color [42 42 42 191 0 0 0 0] +set mcp.pan.label trackpanmode>=4 [24 63 41 16 0 0 0 0] [31 72 34 16 0 0 0 0] +set mcp.pan.label.color [221 224 224] +set mcp.pan.label.margin [0 0 3 0 1] +set mcp.width trackpanmode>=4 [6 82 18 18 0 0 0 0] [0] +set mcp.width.color [51 51 51 225 0 0 0 0] +set mcp.width.label trackpanmode>=4 [24 83 41 16 0 0 0 0] [0] +set mcp.width.label.color [221 224 224] +set mcp.width.label.margin [0 0 3 0 1] +set mcp.io ?recarm [30 18 39 16 0 0 0 0] [30 3 39 31 0 0 0 0] +set mcp.fx [3 17 23 17 0 0 0 0] +set mcp.fxbyp [3 3 23 14 0 0 0 0] +set mcp.fxin ?recarm [30 3 39 14 0 0 0 0] [0] +set mcp.extmixer.mode [0] + +EndLayout + + + +Layout "3. Black Default MCP" black-mcp-default + +clear mcp.* + +set mcp.size [73 319] +front mcp.width.label mcp.pan.label mcp.recmon mcp.volume.label +set mcp.folder folderstate<0 [66 300 7 18 0 1 0 1] [0 300 18 18 0 1 0 1] + + + + +set mcp.trackidx [1 36 70 18 0 0 0 0] +set mcp.trackidx.margin [2 0 2 0 0.5] +set mcp.trackidx.color ?recarm [220 26 0] [125 125 125] + +set mcp.label [1 301 70 17 0 1 0 1] +set mcp.label.margin [2 3 2 4 0.5] +set mcp.label.color [125 125 125] + +set mcp_column_anchor [48 105] +set mcp.mute + mcp_column_anchor [0 0 17 18 0 0 0 0] +set mcp.solo + mcp_column_anchor [0 21 17 18 0 0 0 0] +set mcp.recmon + mcp_column_anchor h>273 [0 42 17 14 0 0 0 0] [0 42 17 14 0 0 0 0] +set mcp.recmode + mcp_column_anchor h>273 [0 54 17 22 0 0 0 0] [0] +set mcp.env + mcp_column_anchor h>283 [0 79 17 26 0 0 0 0] h>273 [0 79 17 14 0 0 0 0] h>233 [0 59 17 14 0 0 0 0] [0] +set mcp.phase + mcp_column_anchor h>283 [1 108 15 16 0 0 0 0] h>273 [1 96 15 16 0 0 0 0] h>251 [1 76 15 16 0 0 0 0] [0] +set mcp.recarm [41 260 20 33 0 1 0 1] +set mcp.meter.vu.div [2 1] +set mcp.meter h>273 [27 123 12 166 0 0 0 1] [27 112 12 177 0 0 0 1] +set mcp.meter.readout.color [255 255 255 140 255 255 255 200] +set mcp.volume h>273 [9 119 17 173 0 0 0 1] [9 108 17 184 0 0 0 1] +set mcp.volume.label h>273 [7 105 35 14 0 0 0 0] [7 105 35 3 0 0 0 0] +set mcp.volume.label.color [128 128 128] +set mcp.volume.label.margin h>273 [1 5 0 0 0.5] [52 5 53 0 0.5] +set mcp.pan trackpanmode>=4 [6 62 18 18 0 0 0 0] [4 65 30 30 0 0 0 0] +set mcp.pan.color [180 180 180 191 0 0 0 0] +set mcp.pan.label trackpanmode>=4 [24 63 41 16 0 0 0 0] [31 72 34 16 0 0 0 0] +set mcp.pan.label.color [155 155 155] +set mcp.pan.label.margin [0 0 3 0 1] +set mcp.width trackpanmode>=4 [6 82 18 18 0 0 0 0] [0] +set mcp.width.color [180 180 180 225 0 0 0 0] +set mcp.width.label trackpanmode>=4 [24 83 41 16 0 0 0 0] [0] +set mcp.width.label.color [155 155 155] +set mcp.width.label.margin [0 0 3 0 1] +set mcp.io ?recarm [30 18 39 16 0 0 0 0] [30 3 39 31 0 0 0 0] +set mcp.fx [3 17 23 17 0 0 0 0] +set mcp.fxbyp [3 3 23 14 0 0 0 0] +set mcp.fxin ?recarm [30 3 39 14 0 0 0 0] [0] +set mcp.extmixer.mode [0] + + + + + +EndLayout + + + + + + + Layout "1. Classic Tracking" + set tcp.io + tcp_yanchor w<211 [310 0 22 18 1 y_align 1 y_align] w<360 [254 0 22 18 1 y_align 1 y_align] [136 0 22 18 0.5 y_align 0.5 y_align] + set tcp.fxin + tcp_yanchor w<270 [0] w<360 [218 0 36 18 1 y_align 1 y_align] [100 0 36 18 0.5 y_align 0.5 y_align] + set tcp.volume + tcp_yanchor w<211 h<73 [0] [7 45 322 16 0 y_align 1 y_align] w<270 h<73 [0] [7 45 266 16 0 y_align 1 y_align] w<360 h<73 [0] [7 45 241 16 0 y_align 1 y_align] h<73 [0] [76 23 172 16 0 y_align 1 y_align] + set tcp.volume.label tcp.volume{x}>0 + [tcp.volume{w}] w<211 [tcp.volume tcp.volume 3 tcp.volume tcp.volume{rs} y_align tcp.volume{rs} y_align] w<270 [tcp.volume tcp.volume 3 tcp.volume tcp.volume{rs} y_align tcp.volume{rs} y_align] [tcp.volume tcp.volume 28 tcp.volume tcp.volume{rs} y_align tcp.volume{rs} y_align] [0] + set tcp.recinput + tcp_yanchor w<211 h<51 [0] [28 23 304 16 0 y_align 1 y_align] w<270 h<51 [0] [49 23 227 16 0 y_align 1 y_align] w<360 h<51 [0] [76 23 200 16 0 y_align 1 y_align] [164 1 69 16 0.5 y_align 1 y_align] + set tcp.recmon + tcp_yanchor w<211 h<95 [0] [338 66 15 16 1 y_align 1 y_align] w<360 h<73 [0] [338 23 15 16 1 y_align 1 y_align] [239 1 15 16 1 y_align 1 y_align] + set tcp.recmode + tcp_yanchor w<211 h<95 [0] [352 66 23 16 1 y_align 1 y_align] w<360 h<73 [0] [352 23 23 16 1 y_align 1 y_align] [253 1 23 16 1 y_align 1 y_align] + set tcp.phase + tcp_yanchor w<211 h<95 [0] [63 66 15 16 0 y_align 0 y_align] w<270 h<51 [0] [28 23 15 16 0 y_align 0 y_align] w<360 h<51 [0] [55 23 15 16 0 y_align 0 y_align] h<51 [0] [55 23 15 16 0 y_align 0 y_align] + set tcp.fx + tcp_yanchor w<211 h<73 [0] [338 44 24 18 1 y_align 1 y_align] w<360 h<73 [0] [338 44 24 18 1 y_align 1 y_align] h<51 [0] [338 22 24 18 1 y_align 1 y_align] + set tcp.fxbyp tcp.fx{x}>0 + [tcp.fx tcp.fx 13 18 1 y_align 1 y_align] [tcp.fx{w}] [0] + set tcp.env + tcp_yanchor w<270 h<51 [0] [7 23 15 16 0 y_align 0 y_align] h<51 [0] [7 23 42 16 0 y_align 0 y_align] + EndLayout ; end of "Alt 1 Tracking" + + Layout "2. Silver Tracking" "silver-tcp" + set tcp.io + tcp_yanchor w<211 [310 0 22 18 1 y_align 1 y_align] w<360 [254 0 22 18 1 y_align 1 y_align] [136 0 22 18 0.5 y_align 0.5 y_align] + set tcp.fxin + tcp_yanchor w<270 [0] w<360 [218 0 36 18 1 y_align 1 y_align] [100 0 36 18 0.5 y_align 0.5 y_align] + set tcp.volume + tcp_yanchor w<211 h<73 [0] [7 45 322 16 0 y_align 1 y_align] w<270 h<73 [0] [7 45 266 16 0 y_align 1 y_align] w<360 h<73 [0] [7 45 241 16 0 y_align 1 y_align] h<73 [0] [76 23 172 16 0 y_align 1 y_align] + set tcp.volume.label tcp.volume{x}>0 + [tcp.volume{w}] w<211 [tcp.volume tcp.volume 3 tcp.volume tcp.volume{rs} y_align tcp.volume{rs} y_align] w<270 [tcp.volume tcp.volume 3 tcp.volume tcp.volume{rs} y_align tcp.volume{rs} y_align] [tcp.volume tcp.volume 28 tcp.volume tcp.volume{rs} y_align tcp.volume{rs} y_align] [0] + set tcp.recinput + tcp_yanchor w<211 h<51 [0] [28 23 304 16 0 y_align 1 y_align] w<270 h<51 [0] [49 23 227 16 0 y_align 1 y_align] w<360 h<51 [0] [76 23 200 16 0 y_align 1 y_align] [164 1 69 16 0.5 y_align 1 y_align] + set tcp.recmon + tcp_yanchor w<211 h<95 [0] [338 66 15 16 1 y_align 1 y_align] w<360 h<73 [0] [338 23 15 16 1 y_align 1 y_align] [239 1 15 16 1 y_align 1 y_align] + set tcp.recmode + tcp_yanchor w<211 h<95 [0] [352 66 23 16 1 y_align 1 y_align] w<360 h<73 [0] [352 23 23 16 1 y_align 1 y_align] [253 1 23 16 1 y_align 1 y_align] + set tcp.phase + tcp_yanchor w<211 h<95 [0] [63 66 15 16 0 y_align 0 y_align] w<270 h<51 [0] [28 23 15 16 0 y_align 0 y_align] w<360 h<51 [0] [55 23 15 16 0 y_align 0 y_align] h<51 [0] [55 23 15 16 0 y_align 0 y_align] + set tcp.fx + tcp_yanchor w<211 h<73 [0] [338 44 24 18 1 y_align 1 y_align] w<360 h<73 [0] [338 44 24 18 1 y_align 1 y_align] h<51 [0] [338 22 24 18 1 y_align 1 y_align] + set tcp.fxbyp tcp.fx{x}>0 + [tcp.fx tcp.fx 13 18 1 y_align 1 y_align] [tcp.fx{w}] [0] + set tcp.env + tcp_yanchor w<270 h<51 [0] [7 23 15 16 0 y_align 0 y_align] h<51 [0] [7 23 42 16 0 y_align 0 y_align] + EndLayout ; end of "Alt 1 Tracking (silver)" + + Layout "3. Black Tracking" "black-tcp" + set tcp.io + tcp_yanchor w<211 [310 0 22 18 1 y_align 1 y_align] w<360 [254 0 22 18 1 y_align 1 y_align] [136 0 22 18 0.5 y_align 0.5 y_align] + set tcp.fxin + tcp_yanchor w<270 [0] w<360 [218 0 36 18 1 y_align 1 y_align] [100 0 36 18 0.5 y_align 0.5 y_align] + set tcp.volume + tcp_yanchor w<211 h<73 [0] [7 45 322 16 0 y_align 1 y_align] w<270 h<73 [0] [7 45 266 16 0 y_align 1 y_align] w<360 h<73 [0] [7 45 241 16 0 y_align 1 y_align] h<73 [0] [76 23 172 16 0 y_align 1 y_align] + set tcp.volume.label tcp.volume{x}>0 + [tcp.volume{w}] w<211 [tcp.volume tcp.volume 3 tcp.volume tcp.volume{rs} y_align tcp.volume{rs} y_align] w<270 [tcp.volume tcp.volume 3 tcp.volume tcp.volume{rs} y_align tcp.volume{rs} y_align] [tcp.volume tcp.volume 28 tcp.volume tcp.volume{rs} y_align tcp.volume{rs} y_align] [0] + set tcp.recinput + tcp_yanchor w<211 h<51 [0] [28 23 304 16 0 y_align 1 y_align] w<270 h<51 [0] [49 23 227 16 0 y_align 1 y_align] w<360 h<51 [0] [76 23 200 16 0 y_align 1 y_align] [164 1 69 16 0.5 y_align 1 y_align] + set tcp.recmon + tcp_yanchor w<211 h<95 [0] [338 66 15 16 1 y_align 1 y_align] w<360 h<73 [0] [338 23 15 16 1 y_align 1 y_align] [239 1 15 16 1 y_align 1 y_align] + set tcp.recmode + tcp_yanchor w<211 h<95 [0] [352 66 23 16 1 y_align 1 y_align] w<360 h<73 [0] [352 23 23 16 1 y_align 1 y_align] [253 1 23 16 1 y_align 1 y_align] + set tcp.phase + tcp_yanchor w<211 h<95 [0] [63 66 15 16 0 y_align 0 y_align] w<270 h<51 [0] [28 23 15 16 0 y_align 0 y_align] w<360 h<51 [0] [55 23 15 16 0 y_align 0 y_align] h<51 [0] [55 23 15 16 0 y_align 0 y_align] + set tcp.fx + tcp_yanchor w<211 h<73 [0] [338 44 24 18 1 y_align 1 y_align] w<360 h<73 [0] [338 44 24 18 1 y_align 1 y_align] h<51 [0] [338 22 24 18 1 y_align 1 y_align] + set tcp.fxbyp tcp.fx{x}>0 + [tcp.fx tcp.fx 13 18 1 y_align 1 y_align] [tcp.fx{w}] [0] + set tcp.env + tcp_yanchor w<270 h<51 [0] [7 23 15 16 0 y_align 0 y_align] h<51 [0] [7 23 42 16 0 y_align 0 y_align] + + set tcp.volume tcp.volume +set tcp.label.color [150 150 150] +set tcp.recinput.color [140 140 140] +set tcp.pan.color [190 190 190 191 0 0 0 0] +set tcp.pan.label.color [150 150 150] +set tcp.width.color [190 190 190 225 0 0 0 0] +set tcp.width.label.color [150 150 150] +set tcp.volume.label.color [150 150 150] + + EndLayout ; end of "Alt 1 Tracking (black)" + + + Layout "1. Classic Reduced" + set tcp_yanchor w<360 w<211 h<117 h<95 h<73 h<51 [0 41] [0 30] [0 19] [0 8] [0 8] h<73 h<51 [0 41] [0 30] [0 19] h<73 h<51 [0 41] [0 30] [0 30] + set y_align [0 0 0 0 0 0.5 0 0.5] + set tcp.fx + tcp_yanchor w<211 h<73 [0] [338 44 24 18 1 y_align 1 y_align] h<51 [0] [338 22 24 18 1 y_align 1 y_align] + set tcp.fxbyp tcp.fx{x}>0 + [tcp.fx tcp.fx 13 18 1 y_align 1 y_align] [tcp.fx{w}] [0] + set tcp.recarm.fullmargin + tcp_yanchor [7 0 18 18 0 y_align 0 y_align] + set tcp.recarm + reverse_margin tcp.recarm.fullmargin + set tcp_label_fullmargin + tcp_yanchor w<211 [25 0 307 17 0 y_align 1 y_align] w<360 [25 0 251 17 0 y_align 1 y_align] [25 0 78 17 0 y_align 0.5 y_align] + set tcp.label + + reverse_margin tcp_label_fullmargin margin_to_width + set tcp.label.margin [3 2 3 3] + set tcp.mute + tcp_yanchor [338 0 17 18 1 y_align 1 y_align] + set tcp.solo + tcp_yanchor [358 0 17 18 1 y_align 1 y_align] + set tcp.volume + tcp_yanchor w<211 h<51 [0] [7 23 322 16 0 y_align 1 y_align] w<270 h<51 [0] [7 23 266 16 0 y_align 1 y_align] w<360 h<51 [0] [7 23 241 16 0 y_align 1 y_align] [109 0 139 18 0.5 y_align 1 y_align] + set tcp.volume.label tcp.volume{x}>0 + [tcp.volume{w}] w<211 [tcp.volume tcp.volume 3 tcp.volume tcp.volume{rs} y_align tcp.volume{rs} y_align] w<270 [tcp.volume tcp.volume 3 tcp.volume tcp.volume{rs} y_align tcp.volume{rs} y_align] [tcp.volume tcp.volume 28 tcp.volume tcp.volume{rs} y_align tcp.volume{rs} y_align] + set tcp.volume.label.margin [1 1 3 0 1] + set tcp.recmode [0] + set tcp.recinput ?recarm + tcp_yanchor w<211 h<73 [0] [49 45 283 16 0 y_align 1 y_align] w<360 h<73 [0] [49 45 227 16 0 y_align 1 y_align] h<51 [0] [49 23 171 16 0 y_align 1 y_align] [0] + set tcp.env + tcp_yanchor w<270 h<73 [0] [7 45 15 16 0 y_align 0 y_align] w<360 h<73 [0] [7 45 15 16 0 y_align 0 y_align] h<51 [0] [7 23 15 16 0 y_align 0 y_align] + set tcp.recmon tcp.env{x}>0 + [21] [tcp.env tcp.env 15 16 tcp.env tcp.env tcp.env tcp.env] [0] + set tcp.phase [0] + set tcp.fxin [0] + set tcp.io [0] + set tcp.pan + tcp_yanchor w<211 h<95 [0] [7 65 18 18 0 y_align 0 y_align] h<51 [0] [281 22 18 18 1 y_align 1 y_align] + set tcp.pan.label tcp.pan{x}>0 + [tcp.pan{w} 1] [tcp.pan tcp.pan 32 16 tcp.pan y_align tcp.pan y_align] [0] + set tcp.width trackpanmode>=4 + tcp_yanchor w<211 h<95 [0] [63 65 18 18 0 y_align 0 y_align] w<360 h<73 [0] [281 44 18 18 1 y_align 1 y_align] h<51 [0] [225 22 18 18 1 y_align 1 y_align] [0] + set tcp.width.label trackpanmode>=4 tcp.width{x}>0 + [tcp.width{w} 1] [tcp.width tcp.width 32 16 tcp.width y_align tcp.width y_align] [0] [0] + set tcp.fxparm [0] + + Layout "1. Classic Minimal" + set tcp_yanchor ?recarm w<211 h<73 h<51 [0 41] [0 30] [0 19] h<51 [0 41] [0 30] w<360 h<51 [0 41] [0 30] [0 41] + set tcp.recarm.fullmargin + tcp_yanchor [7 0 18 18 0 y_align 0 y_align] + set tcp.recarm + reverse_margin tcp.recarm.fullmargin + set tcp_label_fullmargin + tcp_yanchor w<211 [25 0 307 17 0 y_align 1 y_align] w<360 [25 0 251 17 0 y_align 1 y_align] [25 0 78 17 0 y_align 0.5 y_align] + set tcp.label + + reverse_margin tcp_label_fullmargin margin_to_width + set tcp.meter + tcp_yanchor w<211 h<51 [0] [342 26 29 9 1 y_align 1 y_align] [286 4 42 9 1 y_align 1 y_align] + set tcp.mute + tcp_yanchor [338 0 17 18 1 y_align 1 y_align] + set tcp.solo + tcp_yanchor [358 0 17 18 1 y_align 1 y_align] + set tcp.volume + tcp_yanchor w<211 h<51 [0] [7 23 322 16 0 y_align 1 y_align] w<270 h<51 [0] [7 23 266 16 0 y_align 1 y_align] w<360 h<51 [0] [7 23 241 16 0 y_align 1 y_align] [109 0 139 18 0.5 y_align 1 y_align] + set tcp.volume.label tcp.volume{x}>0 + [tcp.volume{w}] w<211 [tcp.volume tcp.volume 3 tcp.volume tcp.volume{rs} y_align tcp.volume{rs} y_align] w<270 [tcp.volume tcp.volume 3 tcp.volume tcp.volume{rs} y_align tcp.volume{rs} y_align] [tcp.volume tcp.volume 28 tcp.volume tcp.volume{rs} y_align tcp.volume{rs} y_align] + set tcp.pan [0] + set tcp.pan.label [0] + set tcp.width [0] + set tcp.width.label [0] + set tcp.env [0] + set tcp.recmon [0] + set tcp.fx [0] + set tcp.fxbyp [0] + set tcp.recinput ?recarm + tcp_yanchor w<211 h<73 [0] [7 45 325 16 0 y_align 1 y_align] w<360 h<51 [0] [282 22 93 16 1 y_align 1 y_align] h<51 [0] [109 23 167 16 0.5 y_align 1 y_align] [0] + EndLayout ; end of "Minimal" + + EndLayout ; end of "Reduced" + + Layout "2. Silver Reduced" "silver-tcp" + set tcp_yanchor w<360 w<211 h<117 h<95 h<73 h<51 [0 41] [0 30] [0 19] [0 8] [0 8] h<73 h<51 [0 41] [0 30] [0 19] h<73 h<51 [0 41] [0 30] [0 30] + set y_align [0 0 0 0 0 0.5 0 0.5] + set tcp.fx + tcp_yanchor w<211 h<73 [0] [338 44 24 18 1 y_align 1 y_align] h<51 [0] [338 22 24 18 1 y_align 1 y_align] + set tcp.fxbyp tcp.fx{x}>0 + [tcp.fx tcp.fx 13 18 1 y_align 1 y_align] [tcp.fx{w}] [0] + set tcp.recarm.fullmargin + tcp_yanchor [7 0 18 18 0 y_align 0 y_align] + set tcp.recarm + reverse_margin tcp.recarm.fullmargin + set tcp_label_fullmargin + tcp_yanchor w<211 [25 0 307 17 0 y_align 1 y_align] w<360 [25 0 251 17 0 y_align 1 y_align] [25 0 78 17 0 y_align 0.5 y_align] + set tcp.label + + reverse_margin tcp_label_fullmargin margin_to_width + set tcp.label.margin [3 2 3 3] + set tcp.mute + tcp_yanchor [338 0 17 18 1 y_align 1 y_align] + set tcp.solo + tcp_yanchor [358 0 17 18 1 y_align 1 y_align] + set tcp.volume + tcp_yanchor w<211 h<51 [0] [7 23 322 16 0 y_align 1 y_align] w<270 h<51 [0] [7 23 266 16 0 y_align 1 y_align] w<360 h<51 [0] [7 23 241 16 0 y_align 1 y_align] [109 0 139 18 0.5 y_align 1 y_align] + set tcp.volume.label tcp.volume{x}>0 + [tcp.volume{w}] w<211 [tcp.volume tcp.volume 3 tcp.volume tcp.volume{rs} y_align tcp.volume{rs} y_align] w<270 [tcp.volume tcp.volume 3 tcp.volume tcp.volume{rs} y_align tcp.volume{rs} y_align] [tcp.volume tcp.volume 28 tcp.volume tcp.volume{rs} y_align tcp.volume{rs} y_align] + set tcp.volume.label.margin [1 1 3 0 1] + set tcp.recmode [0] + set tcp.recinput ?recarm + tcp_yanchor w<211 h<73 [0] [49 45 283 16 0 y_align 1 y_align] w<360 h<73 [0] [49 45 227 16 0 y_align 1 y_align] h<51 [0] [49 23 171 16 0 y_align 1 y_align] [0] + set tcp.env + tcp_yanchor w<270 h<73 [0] [7 45 15 16 0 y_align 0 y_align] w<360 h<73 [0] [7 45 15 16 0 y_align 0 y_align] h<51 [0] [7 23 15 16 0 y_align 0 y_align] + set tcp.recmon tcp.env{x}>0 + [21] [tcp.env tcp.env 15 16 tcp.env tcp.env tcp.env tcp.env] [0] + set tcp.phase [0] + set tcp.fxin [0] + set tcp.io [0] + set tcp.pan + tcp_yanchor w<211 h<95 [0] [7 65 18 18 0 y_align 0 y_align] h<51 [0] [281 22 18 18 1 y_align 1 y_align] + set tcp.pan.label tcp.pan{x}>0 + [tcp.pan{w} 1] [tcp.pan tcp.pan 32 16 tcp.pan y_align tcp.pan y_align] [0] + set tcp.width trackpanmode>=4 + tcp_yanchor w<211 h<95 [0] [63 65 18 18 0 y_align 0 y_align] w<360 h<73 [0] [281 44 18 18 1 y_align 1 y_align] h<51 [0] [225 22 18 18 1 y_align 1 y_align] [0] + set tcp.width.label trackpanmode>=4 tcp.width{x}>0 + [tcp.width{w} 1] [tcp.width tcp.width 32 16 tcp.width y_align tcp.width y_align] [0] [0] + set tcp.fxparm [0] + + Layout "2. Silver Minimal" "silver-tcp" + set tcp_yanchor ?recarm w<211 h<73 h<51 [0 41] [0 30] [0 19] h<51 [0 41] [0 30] w<360 h<51 [0 41] [0 30] [0 41] + set tcp.recarm.fullmargin + tcp_yanchor [7 0 18 18 0 y_align 0 y_align] + set tcp.recarm + reverse_margin tcp.recarm.fullmargin + set tcp_label_fullmargin + tcp_yanchor w<211 [25 0 307 17 0 y_align 1 y_align] w<360 [25 0 251 17 0 y_align 1 y_align] [25 0 78 17 0 y_align 0.5 y_align] + set tcp.label + + reverse_margin tcp_label_fullmargin margin_to_width + set tcp.meter + tcp_yanchor w<211 h<51 [0] [342 26 29 9 1 y_align 1 y_align] [286 4 42 9 1 y_align 1 y_align] + set tcp.mute + tcp_yanchor [338 0 17 18 1 y_align 1 y_align] + set tcp.solo + tcp_yanchor [358 0 17 18 1 y_align 1 y_align] + set tcp.volume + tcp_yanchor w<211 h<51 [0] [7 23 322 16 0 y_align 1 y_align] w<270 h<51 [0] [7 23 266 16 0 y_align 1 y_align] w<360 h<51 [0] [7 23 241 16 0 y_align 1 y_align] [109 0 139 18 0.5 y_align 1 y_align] + set tcp.volume.label tcp.volume{x}>0 + [tcp.volume{w}] w<211 [tcp.volume tcp.volume 3 tcp.volume tcp.volume{rs} y_align tcp.volume{rs} y_align] w<270 [tcp.volume tcp.volume 3 tcp.volume tcp.volume{rs} y_align tcp.volume{rs} y_align] [tcp.volume tcp.volume 28 tcp.volume tcp.volume{rs} y_align tcp.volume{rs} y_align] + set tcp.pan [0] + set tcp.pan.label [0] + set tcp.width [0] + set tcp.width.label [0] + set tcp.env [0] + set tcp.recmon [0] + set tcp.fx [0] + set tcp.fxbyp [0] + set tcp.recinput ?recarm + tcp_yanchor w<211 h<73 [0] [7 45 325 16 0 y_align 1 y_align] w<360 h<51 [0] [282 22 93 16 1 y_align 1 y_align] h<51 [0] [109 23 167 16 0.5 y_align 1 y_align] [0] + EndLayout ; end of "Minimal (silver)" + + EndLayout ; end of "Reduced (silver)" + + Layout "3. Black Reduced" "black-tcp" + set tcp_yanchor w<360 w<211 h<117 h<95 h<73 h<51 [0 41] [0 30] [0 19] [0 8] [0 8] h<73 h<51 [0 41] [0 30] [0 19] h<73 h<51 [0 41] [0 30] [0 30] + set y_align [0 0 0 0 0 0.5 0 0.5] + set tcp.fx + tcp_yanchor w<211 h<73 [0] [338 44 24 18 1 y_align 1 y_align] h<51 [0] [338 22 24 18 1 y_align 1 y_align] + set tcp.fxbyp tcp.fx{x}>0 + [tcp.fx tcp.fx 13 18 1 y_align 1 y_align] [tcp.fx{w}] [0] + set tcp.recarm.fullmargin + tcp_yanchor [7 0 18 18 0 y_align 0 y_align] + set tcp.recarm + reverse_margin tcp.recarm.fullmargin + set tcp_label_fullmargin + tcp_yanchor w<211 [25 0 307 17 0 y_align 1 y_align] w<360 [25 0 251 17 0 y_align 1 y_align] [25 0 78 17 0 y_align 0.5 y_align] + set tcp.label + + reverse_margin tcp_label_fullmargin margin_to_width + set tcp.label.margin [3 2 3 3] + set tcp.mute + tcp_yanchor [338 0 17 18 1 y_align 1 y_align] + set tcp.solo + tcp_yanchor [358 0 17 18 1 y_align 1 y_align] + set tcp.volume + tcp_yanchor w<211 h<51 [0] [7 23 322 16 0 y_align 1 y_align] w<270 h<51 [0] [7 23 266 16 0 y_align 1 y_align] w<360 h<51 [0] [7 23 241 16 0 y_align 1 y_align] [109 0 139 18 0.5 y_align 1 y_align] + set tcp.volume.label tcp.volume{x}>0 + [tcp.volume{w}] w<211 [tcp.volume tcp.volume 3 tcp.volume tcp.volume{rs} y_align tcp.volume{rs} y_align] w<270 [tcp.volume tcp.volume 3 tcp.volume tcp.volume{rs} y_align tcp.volume{rs} y_align] [tcp.volume tcp.volume 28 tcp.volume tcp.volume{rs} y_align tcp.volume{rs} y_align] + set tcp.volume.label.margin [1 1 3 0 1] + set tcp.recmode [0] + set tcp.recinput ?recarm + tcp_yanchor w<211 h<73 [0] [49 45 283 16 0 y_align 1 y_align] w<360 h<73 [0] [49 45 227 16 0 y_align 1 y_align] h<51 [0] [49 23 171 16 0 y_align 1 y_align] [0] + set tcp.env + tcp_yanchor w<270 h<73 [0] [7 45 15 16 0 y_align 0 y_align] w<360 h<73 [0] [7 45 15 16 0 y_align 0 y_align] h<51 [0] [7 23 15 16 0 y_align 0 y_align] + set tcp.recmon tcp.env{x}>0 + [21] [tcp.env tcp.env 15 16 tcp.env tcp.env tcp.env tcp.env] [0] + set tcp.phase [0] + set tcp.fxin [0] + set tcp.io [0] + set tcp.pan + tcp_yanchor w<211 h<95 [0] [7 65 18 18 0 y_align 0 y_align] h<51 [0] [281 22 18 18 1 y_align 1 y_align] + set tcp.pan.label tcp.pan{x}>0 + [tcp.pan{w} 1] [tcp.pan tcp.pan 32 16 tcp.pan y_align tcp.pan y_align] [0] + set tcp.width trackpanmode>=4 + tcp_yanchor w<211 h<95 [0] [63 65 18 18 0 y_align 0 y_align] w<360 h<73 [0] [281 44 18 18 1 y_align 1 y_align] h<51 [0] [225 22 18 18 1 y_align 1 y_align] [0] + set tcp.width.label trackpanmode>=4 tcp.width{x}>0 + [tcp.width{w} 1] [tcp.width tcp.width 32 16 tcp.width y_align tcp.width y_align] [0] [0] + set tcp.fxparm [0] + + set tcp.volume tcp.volume +set tcp.label.color [150 150 150] +set tcp.recinput.color [140 140 140] +set tcp.pan.color [190 190 190 191 0 0 0 0] +set tcp.pan.label.color [150 150 150] +set tcp.width.color [190 190 190 225 0 0 0 0] +set tcp.width.label.color [150 150 150] +set tcp.volume.label.color [150 150 150] + + Layout "3. Black Minimal" "black-tcp" + set tcp_yanchor ?recarm w<211 h<73 h<51 [0 41] [0 30] [0 19] h<51 [0 41] [0 30] w<360 h<51 [0 41] [0 30] [0 41] + set tcp.recarm.fullmargin + tcp_yanchor [7 0 18 18 0 y_align 0 y_align] + set tcp.recarm + reverse_margin tcp.recarm.fullmargin + set tcp_label_fullmargin + tcp_yanchor w<211 [25 0 307 17 0 y_align 1 y_align] w<360 [25 0 251 17 0 y_align 1 y_align] [25 0 78 17 0 y_align 0.5 y_align] + set tcp.label + + reverse_margin tcp_label_fullmargin margin_to_width + set tcp.meter + tcp_yanchor w<211 h<51 [0] [342 26 29 9 1 y_align 1 y_align] [286 4 42 9 1 y_align 1 y_align] + set tcp.mute + tcp_yanchor [338 0 17 18 1 y_align 1 y_align] + set tcp.solo + tcp_yanchor [358 0 17 18 1 y_align 1 y_align] + set tcp.volume + tcp_yanchor w<211 h<51 [0] [7 23 322 16 0 y_align 1 y_align] w<270 h<51 [0] [7 23 266 16 0 y_align 1 y_align] w<360 h<51 [0] [7 23 241 16 0 y_align 1 y_align] [109 0 139 18 0.5 y_align 1 y_align] + set tcp.volume.label tcp.volume{x}>0 + [tcp.volume{w}] w<211 [tcp.volume tcp.volume 3 tcp.volume tcp.volume{rs} y_align tcp.volume{rs} y_align] w<270 [tcp.volume tcp.volume 3 tcp.volume tcp.volume{rs} y_align tcp.volume{rs} y_align] [tcp.volume tcp.volume 28 tcp.volume tcp.volume{rs} y_align tcp.volume{rs} y_align] + set tcp.pan [0] + set tcp.pan.label [0] + set tcp.width [0] + set tcp.width.label [0] + set tcp.env [0] + set tcp.recmon [0] + set tcp.fx [0] + set tcp.fxbyp [0] + set tcp.recinput ?recarm + tcp_yanchor w<211 h<73 [0] [7 45 325 16 0 y_align 1 y_align] w<360 h<51 [0] [282 22 93 16 1 y_align 1 y_align] h<51 [0] [109 23 167 16 0.5 y_align 1 y_align] [0] + EndLayout ; end of "Minimal (black)" + + EndLayout ; end of "Reduced (black)" + + + Layout "1. Classic Top Aligned" + set y_align h<51 [0 0 0 0 0 0.5 0 0.5] [0 0 0 0 0 0 0 0] + set tcp_yanchor w<211 h>=51 [0 8] . h>=51 [0 8] + set tcp.meter + tcp_yanchor w<211 h<51 [0] [342 26 29 9 1 y_align 1 y_align] [286 4 42 9 1 y_align 1 y_align] + set tcp.fx + tcp_yanchor w<211 h<73 [0] [338 44 24 18 1 y_align 1 y_align] h<51 [0] [338 22 24 18 1 y_align 1 y_align] + set tcp.fxbyp tcp.fx{x}>0 + [tcp.fx tcp.fx 13 18 1 y_align 1 y_align] [tcp.fx{w}] [0] + set tcp.recarm.fullmargin + tcp_yanchor [7 0 18 18 0 y_align 0 y_align] + set tcp.recarm + reverse_margin tcp.recarm.fullmargin + set tcp_label_fullmargin + tcp_yanchor w<211 [25 0 285 17 0 y_align 1 y_align] w<270 [25 0 229 17 0 y_align 1 y_align] w<360 [25 0 193 17 0 y_align 1 y_align] [25 0 75 17 0 y_align 0.5 y_align] + set tcp.label + + reverse_margin tcp_label_fullmargin margin_to_width + set tcp.io + tcp_yanchor w<211 [310 0 22 18 1 y_align 1 y_align] w<270 [254 0 22 18 1 y_align 1 y_align] w<360 [218 0 58 18 1 y_align 1 y_align] [100 0 58 18 0.5 y_align 0.5 y_align] ; additional definition below + set tcp.mute + tcp_yanchor [338 0 17 18 1 y_align 1 y_align] + set tcp.solo + tcp_yanchor [358 0 17 18 1 y_align 1 y_align] + set tcp.volume + tcp_yanchor w<211 h<51 [0] [7 23 322 16 0 y_align 1 y_align] w<270 h<51 [0] [7 23 266 16 0 y_align 1 y_align] w<360 h<51 [0] [7 23 241 16 0 y_align 1 y_align] [164 0 84 18 0.5 y_align 1 y_align] + set tcp.volume.label tcp.volume{x}>0 + [tcp.volume{w}] w<211 [tcp.volume tcp.volume 3 tcp.volume tcp.volume{rs} y_align tcp.volume{rs} y_align] w<270 [tcp.volume tcp.volume 3 tcp.volume tcp.volume{rs} y_align tcp.volume{rs} y_align] [tcp.volume tcp.volume 28 tcp.volume tcp.volume{rs} y_align tcp.volume{rs} y_align] + set tcp.phase + tcp_yanchor w<211 h<95 [0] [63 66 15 16 0 y_align 0 y_align] w<270 h<73 [0] [28 45 15 16 0 y_align 0 y_align] w<360 h<73 [0] [55 45 15 16 0 y_align 0 y_align] h<51 [0] [55 23 15 16 0 y_align 0 y_align] + set tcp.recmon + tcp_yanchor w<211 h<95 [0] [338 66 15 16 1 y_align 1 y_align] w<360 h<73 [0] [338 45 15 16 1 y_align 1 y_align] h<51 [0] [239 23 15 16 1 y_align 1 y_align] + set tcp.recmode + tcp_yanchor w<211 h<95 [0] [352 66 23 16 1 y_align 1 y_align] w<360 h<73 [0] [352 45 23 16 1 y_align 1 y_align] h<51 [0] [253 23 23 16 1 y_align 1 y_align] + set tcp.recinput + tcp_yanchor w<211 h<73 [0] [28 45 304 16 0 y_align 1 y_align] w<270 h<73 [0] [49 45 227 16 0 y_align 1 y_align] w<360 h<73 [0] [76 45 200 16 0 y_align 1 y_align] h<51 [0] [76 23 157 16 0 y_align 1 y_align] + set tcp.recinput.margin [4 0 16 0] + set tcp.env + tcp_yanchor w<270 h<73 [0] [7 45 15 16 0 y_align 0 y_align] w<360 h<73 [0] [7 45 42 16 0 y_align 0 y_align] h<51 [0] [7 23 42 16 0 y_align 0 y_align] + set tcp.fxin ?recarm tcp.io{w}==58 + tcp_yanchor w<211 [0] w<270 [254 0 36 18 1 y_align 1 y_align] w<360 [218 0 36 18 1 y_align 1 y_align] [100 0 36 18 0.5 y_align 0.5 y_align] [0] [0] + set tcp.io ?recarm tcp.io{w}==58 + [36] [tcp.io tcp.io 22 18 tcp.io tcp.io tcp.io tcp.io] + set tcp.pan + tcp_yanchor w<211 h<95 [0] [6 65 18 18 0 y_align 0 y_align] h<51 [0] [281 22 18 18 1 y_align 1 y_align] + set tcp.pan.label tcp.pan{x}>0 + [tcp.pan{w} 1] [tcp.pan tcp.pan 32 16 tcp.pan y_align tcp.pan y_align] [0] + set tcp.width trackpanmode>=4 + tcp_yanchor w<211 h<117 [0] [6 86 18 18 0 y_align 0 y_align] h<73 [0] [281 44 18 18 1 y_align 1 y_align] [0] + set tcp.width.label trackpanmode>=4 tcp.width{x}>0 + [tcp.width{w} 1] [tcp.width tcp.width 32 16 tcp.width y_align tcp.width y_align] [0] [0] + set tcp.fxparm w<360 w<211 trackpanmode>=4 [7 118 368 -24 0 0 1 1] [7 97 368 -3 0 0 1 1] [7 76 368 18 0 0 1 1] trackpanmode>=4 [7 76 368 18 0 0 1 1] [7 54 368 40 0 0 1 1] + EndLayout ; end of "Top Aligned" + + Layout "2. Silver Top Aligned" "silver-tcp" + set y_align h<51 [0 0 0 0 0 0.5 0 0.5] [0 0 0 0 0 0 0 0] + set tcp_yanchor w<211 h>=51 [0 8] . h>=51 [0 8] + set tcp.meter + tcp_yanchor w<211 h<51 [0] [342 26 29 9 1 y_align 1 y_align] [286 4 42 9 1 y_align 1 y_align] + set tcp.fx + tcp_yanchor w<211 h<73 [0] [338 44 24 18 1 y_align 1 y_align] h<51 [0] [338 22 24 18 1 y_align 1 y_align] + set tcp.fxbyp tcp.fx{x}>0 + [tcp.fx tcp.fx 13 18 1 y_align 1 y_align] [tcp.fx{w}] [0] + set tcp.recarm.fullmargin + tcp_yanchor [7 0 18 18 0 y_align 0 y_align] + set tcp.recarm + reverse_margin tcp.recarm.fullmargin + set tcp_label_fullmargin + tcp_yanchor w<211 [25 0 285 17 0 y_align 1 y_align] w<270 [25 0 229 17 0 y_align 1 y_align] w<360 [25 0 193 17 0 y_align 1 y_align] [25 0 75 17 0 y_align 0.5 y_align] + set tcp.label + + reverse_margin tcp_label_fullmargin margin_to_width + set tcp.io + tcp_yanchor w<211 [310 0 22 18 1 y_align 1 y_align] w<270 [254 0 22 18 1 y_align 1 y_align] w<360 [218 0 58 18 1 y_align 1 y_align] [100 0 58 18 0.5 y_align 0.5 y_align] ; additional definition below + set tcp.mute + tcp_yanchor [338 0 17 18 1 y_align 1 y_align] + set tcp.solo + tcp_yanchor [358 0 17 18 1 y_align 1 y_align] + set tcp.volume + tcp_yanchor w<211 h<51 [0] [7 23 322 16 0 y_align 1 y_align] w<270 h<51 [0] [7 23 266 16 0 y_align 1 y_align] w<360 h<51 [0] [7 23 241 16 0 y_align 1 y_align] [164 0 84 18 0.5 y_align 1 y_align] + set tcp.volume.label tcp.volume{x}>0 + [tcp.volume{w}] w<211 [tcp.volume tcp.volume 3 tcp.volume tcp.volume{rs} y_align tcp.volume{rs} y_align] w<270 [tcp.volume tcp.volume 3 tcp.volume tcp.volume{rs} y_align tcp.volume{rs} y_align] [tcp.volume tcp.volume 28 tcp.volume tcp.volume{rs} y_align tcp.volume{rs} y_align] + set tcp.phase + tcp_yanchor w<211 h<95 [0] [63 66 15 16 0 y_align 0 y_align] w<270 h<73 [0] [28 45 15 16 0 y_align 0 y_align] w<360 h<73 [0] [55 45 15 16 0 y_align 0 y_align] h<51 [0] [55 23 15 16 0 y_align 0 y_align] + set tcp.recmon + tcp_yanchor w<211 h<95 [0] [338 66 15 16 1 y_align 1 y_align] w<360 h<73 [0] [338 45 15 16 1 y_align 1 y_align] h<51 [0] [239 23 15 16 1 y_align 1 y_align] + set tcp.recmode + tcp_yanchor w<211 h<95 [0] [352 66 23 16 1 y_align 1 y_align] w<360 h<73 [0] [352 45 23 16 1 y_align 1 y_align] h<51 [0] [253 23 23 16 1 y_align 1 y_align] + set tcp.recinput + tcp_yanchor w<211 h<73 [0] [28 45 304 16 0 y_align 1 y_align] w<270 h<73 [0] [49 45 227 16 0 y_align 1 y_align] w<360 h<73 [0] [76 45 200 16 0 y_align 1 y_align] h<51 [0] [76 23 157 16 0 y_align 1 y_align] + set tcp.recinput.margin [4 0 16 0] + set tcp.env + tcp_yanchor w<270 h<73 [0] [7 45 15 16 0 y_align 0 y_align] w<360 h<73 [0] [7 45 42 16 0 y_align 0 y_align] h<51 [0] [7 23 42 16 0 y_align 0 y_align] + set tcp.fxin ?recarm tcp.io{w}==58 + tcp_yanchor w<211 [0] w<270 [254 0 36 18 1 y_align 1 y_align] w<360 [218 0 36 18 1 y_align 1 y_align] [100 0 36 18 0.5 y_align 0.5 y_align] [0] [0] + set tcp.io ?recarm tcp.io{w}==58 + [36] [tcp.io tcp.io 22 18 tcp.io tcp.io tcp.io tcp.io] + set tcp.pan + tcp_yanchor w<211 h<95 [0] [6 65 18 18 0 y_align 0 y_align] h<51 [0] [281 22 18 18 1 y_align 1 y_align] + set tcp.pan.label tcp.pan{x}>0 + [tcp.pan{w} 1] [tcp.pan tcp.pan 32 16 tcp.pan y_align tcp.pan y_align] [0] + set tcp.width trackpanmode>=4 + tcp_yanchor w<211 h<117 [0] [6 86 18 18 0 y_align 0 y_align] h<73 [0] [281 44 18 18 1 y_align 1 y_align] [0] + set tcp.width.label trackpanmode>=4 tcp.width{x}>0 + [tcp.width{w} 1] [tcp.width tcp.width 32 16 tcp.width y_align tcp.width y_align] [0] [0] + set tcp.fxparm w<360 w<211 trackpanmode>=4 [7 118 368 -24 0 0 1 1] [7 97 368 -3 0 0 1 1] [7 76 368 18 0 0 1 1] trackpanmode>=4 [7 76 368 18 0 0 1 1] [7 54 368 40 0 0 1 1] + EndLayout ; end of "Top Aligned (silver)" + + + Layout "3. Black Top Aligned" "black-tcp" + set y_align h<51 [0 0 0 0 0 0.5 0 0.5] [0 0 0 0 0 0 0 0] + set tcp_yanchor w<211 h>=51 [0 8] . h>=51 [0 8] + set tcp.meter + tcp_yanchor w<211 h<51 [0] [342 26 29 9 1 y_align 1 y_align] [286 4 42 9 1 y_align 1 y_align] + set tcp.fx + tcp_yanchor w<211 h<73 [0] [338 44 24 18 1 y_align 1 y_align] h<51 [0] [338 22 24 18 1 y_align 1 y_align] + set tcp.fxbyp tcp.fx{x}>0 + [tcp.fx tcp.fx 13 18 1 y_align 1 y_align] [tcp.fx{w}] [0] + set tcp.recarm.fullmargin + tcp_yanchor [7 0 18 18 0 y_align 0 y_align] + set tcp.recarm + reverse_margin tcp.recarm.fullmargin + set tcp_label_fullmargin + tcp_yanchor w<211 [25 0 285 17 0 y_align 1 y_align] w<270 [25 0 229 17 0 y_align 1 y_align] w<360 [25 0 193 17 0 y_align 1 y_align] [25 0 75 17 0 y_align 0.5 y_align] + set tcp.label + + reverse_margin tcp_label_fullmargin margin_to_width + set tcp.io + tcp_yanchor w<211 [310 0 22 18 1 y_align 1 y_align] w<270 [254 0 22 18 1 y_align 1 y_align] w<360 [218 0 58 18 1 y_align 1 y_align] [100 0 58 18 0.5 y_align 0.5 y_align] ; additional definition below + set tcp.mute + tcp_yanchor [338 0 17 18 1 y_align 1 y_align] + set tcp.solo + tcp_yanchor [358 0 17 18 1 y_align 1 y_align] + set tcp.volume + tcp_yanchor w<211 h<51 [0] [7 23 322 16 0 y_align 1 y_align] w<270 h<51 [0] [7 23 266 16 0 y_align 1 y_align] w<360 h<51 [0] [7 23 241 16 0 y_align 1 y_align] [164 0 84 18 0.5 y_align 1 y_align] + set tcp.volume.label tcp.volume{x}>0 + [tcp.volume{w}] w<211 [tcp.volume tcp.volume 3 tcp.volume tcp.volume{rs} y_align tcp.volume{rs} y_align] w<270 [tcp.volume tcp.volume 3 tcp.volume tcp.volume{rs} y_align tcp.volume{rs} y_align] [tcp.volume tcp.volume 28 tcp.volume tcp.volume{rs} y_align tcp.volume{rs} y_align] + set tcp.phase + tcp_yanchor w<211 h<95 [0] [63 66 15 16 0 y_align 0 y_align] w<270 h<73 [0] [28 45 15 16 0 y_align 0 y_align] w<360 h<73 [0] [55 45 15 16 0 y_align 0 y_align] h<51 [0] [55 23 15 16 0 y_align 0 y_align] + set tcp.recmon + tcp_yanchor w<211 h<95 [0] [338 66 15 16 1 y_align 1 y_align] w<360 h<73 [0] [338 45 15 16 1 y_align 1 y_align] h<51 [0] [239 23 15 16 1 y_align 1 y_align] + set tcp.recmode + tcp_yanchor w<211 h<95 [0] [352 66 23 16 1 y_align 1 y_align] w<360 h<73 [0] [352 45 23 16 1 y_align 1 y_align] h<51 [0] [253 23 23 16 1 y_align 1 y_align] + set tcp.recinput + tcp_yanchor w<211 h<73 [0] [28 45 304 16 0 y_align 1 y_align] w<270 h<73 [0] [49 45 227 16 0 y_align 1 y_align] w<360 h<73 [0] [76 45 200 16 0 y_align 1 y_align] h<51 [0] [76 23 157 16 0 y_align 1 y_align] + set tcp.recinput.margin [4 0 16 0] + set tcp.env + tcp_yanchor w<270 h<73 [0] [7 45 15 16 0 y_align 0 y_align] w<360 h<73 [0] [7 45 42 16 0 y_align 0 y_align] h<51 [0] [7 23 42 16 0 y_align 0 y_align] + set tcp.fxin ?recarm tcp.io{w}==58 + tcp_yanchor w<211 [0] w<270 [254 0 36 18 1 y_align 1 y_align] w<360 [218 0 36 18 1 y_align 1 y_align] [100 0 36 18 0.5 y_align 0.5 y_align] [0] [0] + set tcp.io ?recarm tcp.io{w}==58 + [36] [tcp.io tcp.io 22 18 tcp.io tcp.io tcp.io tcp.io] + set tcp.pan + tcp_yanchor w<211 h<95 [0] [6 65 18 18 0 y_align 0 y_align] h<51 [0] [281 22 18 18 1 y_align 1 y_align] + set tcp.pan.label tcp.pan{x}>0 + [tcp.pan{w} 1] [tcp.pan tcp.pan 32 16 tcp.pan y_align tcp.pan y_align] [0] + set tcp.width trackpanmode>=4 + tcp_yanchor w<211 h<117 [0] [6 86 18 18 0 y_align 0 y_align] h<73 [0] [281 44 18 18 1 y_align 1 y_align] [0] + set tcp.width.label trackpanmode>=4 tcp.width{x}>0 + [tcp.width{w} 1] [tcp.width tcp.width 32 16 tcp.width y_align tcp.width y_align] [0] [0] + set tcp.fxparm w<360 w<211 trackpanmode>=4 [7 118 368 -24 0 0 1 1] [7 97 368 -3 0 0 1 1] [7 76 368 18 0 0 1 1] trackpanmode>=4 [7 76 368 18 0 0 1 1] [7 54 368 40 0 0 1 1] + + set tcp.volume tcp.volume +set tcp.label.color [150 150 150] +set tcp.recinput.color [140 140 140] +set tcp.pan.color [190 190 190 191 0 0 0 0] +set tcp.pan.label.color [150 150 150] +set tcp.width.color [190 190 190 225 0 0 0 0] +set tcp.width.label.color [150 150 150] +set tcp.volume.label.color [150 150 150] + + EndLayout ; end of "Top Aligned (black)" + + Layout "1. Classic Shy Meter" + set y_align ?tcp_fxparms w<211 h<125 [0 0 0 0 0 0.5 0 0.5] [0 0 0 0 0 0 0 0] h<90 [0 0 0 0 0 0.5 0 0.5] [0 0 0 0 0 0 0 0] [0 0 0 0 0 0.5 0 0.5] + set tcp_yanchor w<211 h<117 h<95 h<73 h<51 [0 41] [0 30] [0 19] [0 8] trackpanmode>=4 [0 -3] [0 8] h<73 h<51 [0 41] [0 30] [0 19] h<73 h<51 [0 41] [0 30] + set tcp_yanchor ?tcp_fxparms w<211 h>=125 [0 8] . h>=90 [0 8] . + set tcp.meter + tcp_yanchor w<211 h<73 [0] [11 48 261 9 0 y_align 1 y_align] h<73 [0] [11 48 261 9 0 y_align 1 y_align] + set tcp.fx + tcp_yanchor h<51 [0] [338 22 24 18 1 y_align 1 y_align] + set tcp.fxbyp tcp.fx{x}>0 + [tcp.fx tcp.fx 13 18 1 y_align 1 y_align] [tcp.fx{w}] [0] + set tcp.recarm.fullmargin + tcp_yanchor [7 0 18 18 0 y_align 0 y_align] + set tcp.recarm + reverse_margin tcp.recarm.fullmargin + set tcp_label_fullmargin + tcp_yanchor w<211 [25 0 285 17 0 y_align 1 y_align] w<270 [25 0 229 17 0 y_align 1 y_align] [25 0 193 17 0 y_align 1 y_align] + set tcp.label + + reverse_margin tcp_label_fullmargin margin_to_width + set tcp.io + tcp_yanchor w<211 [310 0 22 18 1 y_align 1 y_align] w<270 [254 0 22 18 1 y_align 1 y_align] [218 0 58 18 1 y_align 1 y_align] ; additional definition below + set tcp.mute + tcp_yanchor [338 0 17 18 1 y_align 1 y_align] + set tcp.solo + tcp_yanchor [358 0 17 18 1 y_align 1 y_align] + set tcp.volume + tcp_yanchor w<211 h<73 [0] [281 44 18 18 1 y_align 1 y_align] [281 0 18 18 1 y_align 1 y_align] + set tcp.volume.label tcp.volume{x}>0 + [tcp.volume{w}] [tcp.volume tcp.volume 33 tcp.volume tcp.volume{rs} y_align tcp.volume{rs} y_align] [0] + + set tcp.volume.color [55 55 55 0] + set tcp.pan.color [55 55 55 0] + set tcp.width.color [55 55 55 0] + + set tcp.phase + tcp_yanchor w<211 h<95 [0] [63 66 15 16 0 y_align 0 y_align] w<270 h<51 [0] [28 23 15 16 0 y_align 0 y_align] w<360 h<51 [0] [55 23 15 16 0 y_align 0 y_align] h<51 [0] [55 23 15 16 0 y_align 0 y_align] + set tcp.recmon + tcp_yanchor h<73 [0] [338 45 15 16 1 y_align 1 y_align] + set tcp.recmode + tcp_yanchor h<73 [0] [352 45 23 16 1 y_align 1 y_align] + set tcp.recinput + tcp_yanchor w<211 h<51 [0] [28 23 304 16 0 y_align 1 y_align] w<270 h<51 [0] [49 23 227 16 0 y_align 1 y_align] h<51 [0] [76 23 200 16 0 y_align 1 y_align] + set tcp.env + tcp_yanchor w<270 h<51 [0] [7 23 15 16 0 y_align 0 y_align] w<360 h<51 [0] [7 23 42 16 0 y_align 0 y_align] h<51 [0] [7 23 42 16 0 y_align 0 y_align] + set tcp.fxin ?recarm tcp.io{w}==58 + tcp_yanchor w<211 [0] w<270 [254 0 36 18 1 y_align 1 y_align] [218 0 36 18 1 y_align 1 y_align] [0] [0] + set tcp.io ?recarm tcp.io{w}==58 + [36] [tcp.io tcp.io 22 18 tcp.io tcp.io tcp.io tcp.io] + set tcp.pan + tcp_yanchor w<211 h<95 [0] [6 65 18 18 0 y_align 0 y_align] h<51 [0] [281 22 18 18 1 y_align 1 y_align] + set tcp.pan.label tcp.pan{x}>0 + [tcp.pan{w} 1] [tcp.pan tcp.pan 32 16 tcp.pan y_align tcp.pan y_align] [0] + set tcp.width trackpanmode>=4 + tcp_yanchor w<211 h<117 [0] [6 86 18 18 0 y_align 0 y_align] h<73 [0] [281 44 18 18 1 y_align 1 y_align] [0] + set tcp.width.label trackpanmode>=4 tcp.width{x}>0 + [tcp.width{w} 1] [tcp.width tcp.width 32 16 tcp.width y_align tcp.width y_align] [0] [0] + set tcp.fxparm w<211 trackpanmode>=4 [7 118 368 -24 0 0 1 1] [7 97 368 -3 0 0 1 1] [7 76 368 18 0 0 1 1] + EndLayout ; end of "Shy Meter" + + Layout "2. Silver Shy Meter" "silver-tcp" + set y_align ?tcp_fxparms w<211 h<125 [0 0 0 0 0 0.5 0 0.5] [0 0 0 0 0 0 0 0] h<90 [0 0 0 0 0 0.5 0 0.5] [0 0 0 0 0 0 0 0] [0 0 0 0 0 0.5 0 0.5] + set tcp_yanchor w<211 h<117 h<95 h<73 h<51 [0 41] [0 30] [0 19] [0 8] trackpanmode>=4 [0 -3] [0 8] h<73 h<51 [0 41] [0 30] [0 19] h<73 h<51 [0 41] [0 30] + set tcp_yanchor ?tcp_fxparms w<211 h>=125 [0 8] . h>=90 [0 8] . + set tcp.meter + tcp_yanchor w<211 h<73 [0] [11 48 261 9 0 y_align 1 y_align] h<73 [0] [11 48 261 9 0 y_align 1 y_align] + set tcp.fx + tcp_yanchor h<51 [0] [338 22 24 18 1 y_align 1 y_align] + set tcp.fxbyp tcp.fx{x}>0 + [tcp.fx tcp.fx 13 18 1 y_align 1 y_align] [tcp.fx{w}] [0] + set tcp.recarm.fullmargin + tcp_yanchor [7 0 18 18 0 y_align 0 y_align] + set tcp.recarm + reverse_margin tcp.recarm.fullmargin + set tcp_label_fullmargin + tcp_yanchor w<211 [25 0 285 17 0 y_align 1 y_align] w<270 [25 0 229 17 0 y_align 1 y_align] [25 0 193 17 0 y_align 1 y_align] + set tcp.label + + reverse_margin tcp_label_fullmargin margin_to_width + set tcp.io + tcp_yanchor w<211 [310 0 22 18 1 y_align 1 y_align] w<270 [254 0 22 18 1 y_align 1 y_align] [218 0 58 18 1 y_align 1 y_align] ; additional definition below + set tcp.mute + tcp_yanchor [338 0 17 18 1 y_align 1 y_align] + set tcp.solo + tcp_yanchor [358 0 17 18 1 y_align 1 y_align] + set tcp.volume + tcp_yanchor w<211 h<73 [0] [281 44 18 18 1 y_align 1 y_align] [281 0 18 18 1 y_align 1 y_align] + set tcp.volume.label tcp.volume{x}>0 + [tcp.volume{w}] [tcp.volume tcp.volume 33 tcp.volume tcp.volume{rs} y_align tcp.volume{rs} y_align] [0] + set tcp.volume.color [55 55 55 0] + set tcp.pan.color [55 55 55 0] + set tcp.width.color [55 55 55 0] + set tcp.phase + tcp_yanchor w<211 h<95 [0] [63 66 15 16 0 y_align 0 y_align] w<270 h<51 [0] [28 23 15 16 0 y_align 0 y_align] w<360 h<51 [0] [55 23 15 16 0 y_align 0 y_align] h<51 [0] [55 23 15 16 0 y_align 0 y_align] + set tcp.recmon + tcp_yanchor h<73 [0] [338 45 15 16 1 y_align 1 y_align] + set tcp.recmode + tcp_yanchor h<73 [0] [352 45 23 16 1 y_align 1 y_align] + set tcp.recinput + tcp_yanchor w<211 h<51 [0] [28 23 304 16 0 y_align 1 y_align] w<270 h<51 [0] [49 23 227 16 0 y_align 1 y_align] h<51 [0] [76 23 200 16 0 y_align 1 y_align] + set tcp.env + tcp_yanchor w<270 h<51 [0] [7 23 15 16 0 y_align 0 y_align] w<360 h<51 [0] [7 23 42 16 0 y_align 0 y_align] h<51 [0] [7 23 42 16 0 y_align 0 y_align] + set tcp.fxin ?recarm tcp.io{w}==58 + tcp_yanchor w<211 [0] w<270 [254 0 36 18 1 y_align 1 y_align] [218 0 36 18 1 y_align 1 y_align] [0] [0] + set tcp.io ?recarm tcp.io{w}==58 + [36] [tcp.io tcp.io 22 18 tcp.io tcp.io tcp.io tcp.io] + set tcp.pan + tcp_yanchor w<211 h<95 [0] [6 65 18 18 0 y_align 0 y_align] h<51 [0] [281 22 18 18 1 y_align 1 y_align] + set tcp.pan.label tcp.pan{x}>0 + [tcp.pan{w} 1] [tcp.pan tcp.pan 32 16 tcp.pan y_align tcp.pan y_align] [0] + set tcp.width trackpanmode>=4 + tcp_yanchor w<211 h<117 [0] [6 86 18 18 0 y_align 0 y_align] h<73 [0] [281 44 18 18 1 y_align 1 y_align] [0] + set tcp.width.label trackpanmode>=4 tcp.width{x}>0 + [tcp.width{w} 1] [tcp.width tcp.width 32 16 tcp.width y_align tcp.width y_align] [0] [0] + set tcp.fxparm w<211 trackpanmode>=4 [7 118 368 -24 0 0 1 1] [7 97 368 -3 0 0 1 1] [7 76 368 18 0 0 1 1] + EndLayout ; end of "Shy Meter (silver)" + + Layout "3. Black Shy Meter" "black-tcp" + set y_align ?tcp_fxparms w<211 h<125 [0 0 0 0 0 0.5 0 0.5] [0 0 0 0 0 0 0 0] h<90 [0 0 0 0 0 0.5 0 0.5] [0 0 0 0 0 0 0 0] [0 0 0 0 0 0.5 0 0.5] + set tcp_yanchor w<211 h<117 h<95 h<73 h<51 [0 41] [0 30] [0 19] [0 8] trackpanmode>=4 [0 -3] [0 8] h<73 h<51 [0 41] [0 30] [0 19] h<73 h<51 [0 41] [0 30] + set tcp_yanchor ?tcp_fxparms w<211 h>=125 [0 8] . h>=90 [0 8] . + set tcp.meter + tcp_yanchor w<211 h<73 [0] [11 48 261 9 0 y_align 1 y_align] h<73 [0] [11 48 261 9 0 y_align 1 y_align] + + ;set tcp.meter.readout.color [120 120 120 140 255 255 255 200] [0 0 0 0 0 0 0 0] + ;set tcp.meter.scale.color.unlit.left [0 0 0 0 0 0 0 0] [80 80 80 100 0 0 0 255] + ;set tcp.meter.scale.color.unlit.right [0 0 0 0 0 0 0 0] [120 120 120 100 0 0 0 255] + ;set tcp.meter.scale.color.lit.left [0 0 0 0 0 0 0 0] [150 150 150 255 0 0 0 50] + ;set tcp.meter.scale.color.lit.right [0 0 0 0 0 0 0 0] [150 150 150 255 0 0 0 50] + + + set tcp.fx + tcp_yanchor h<51 [0] [338 22 24 18 1 y_align 1 y_align] + set tcp.fxbyp tcp.fx{x}>0 + [tcp.fx tcp.fx 13 18 1 y_align 1 y_align] [tcp.fx{w}] [0] + set tcp.recarm.fullmargin + tcp_yanchor [7 0 18 18 0 y_align 0 y_align] + set tcp.recarm + reverse_margin tcp.recarm.fullmargin + set tcp_label_fullmargin + tcp_yanchor w<211 [25 0 285 17 0 y_align 1 y_align] w<270 [25 0 229 17 0 y_align 1 y_align] [25 0 193 17 0 y_align 1 y_align] + set tcp.label + + reverse_margin tcp_label_fullmargin margin_to_width + set tcp.io + tcp_yanchor w<211 [310 0 22 18 1 y_align 1 y_align] w<270 [254 0 22 18 1 y_align 1 y_align] [218 0 58 18 1 y_align 1 y_align] ; additional definition below + set tcp.mute + tcp_yanchor [338 0 17 18 1 y_align 1 y_align] + set tcp.solo + tcp_yanchor [358 0 17 18 1 y_align 1 y_align] + set tcp.volume + tcp_yanchor w<211 h<73 [0] [281 44 18 18 1 y_align 1 y_align] [281 0 18 18 1 y_align 1 y_align] + set tcp.volume.label tcp.volume{x}>0 + [tcp.volume{w}] [tcp.volume tcp.volume 33 tcp.volume tcp.volume{rs} y_align tcp.volume{rs} y_align] [0] + set tcp.phase + tcp_yanchor w<211 h<95 [0] [63 66 15 16 0 y_align 0 y_align] w<270 h<51 [0] [28 23 15 16 0 y_align 0 y_align] w<360 h<51 [0] [55 23 15 16 0 y_align 0 y_align] h<51 [0] [55 23 15 16 0 y_align 0 y_align] + set tcp.recmon + tcp_yanchor h<73 [0] [338 45 15 16 1 y_align 1 y_align] + set tcp.recmode + tcp_yanchor h<73 [0] [352 45 23 16 1 y_align 1 y_align] + set tcp.recinput + tcp_yanchor w<211 h<51 [0] [28 23 304 16 0 y_align 1 y_align] w<270 h<51 [0] [49 23 227 16 0 y_align 1 y_align] h<51 [0] [76 23 200 16 0 y_align 1 y_align] + set tcp.env + tcp_yanchor w<270 h<51 [0] [7 23 15 16 0 y_align 0 y_align] w<360 h<51 [0] [7 23 42 16 0 y_align 0 y_align] h<51 [0] [7 23 42 16 0 y_align 0 y_align] + set tcp.fxin ?recarm tcp.io{w}==58 + tcp_yanchor w<211 [0] w<270 [254 0 36 18 1 y_align 1 y_align] [218 0 36 18 1 y_align 1 y_align] [0] [0] + set tcp.io ?recarm tcp.io{w}==58 + [36] [tcp.io tcp.io 22 18 tcp.io tcp.io tcp.io tcp.io] + set tcp.pan + tcp_yanchor w<211 h<95 [0] [6 65 18 18 0 y_align 0 y_align] h<51 [0] [281 22 18 18 1 y_align 1 y_align] + set tcp.pan.label tcp.pan{x}>0 + [tcp.pan{w} 1] [tcp.pan tcp.pan 32 16 tcp.pan y_align tcp.pan y_align] [0] + set tcp.width trackpanmode>=4 + tcp_yanchor w<211 h<117 [0] [6 86 18 18 0 y_align 0 y_align] h<73 [0] [281 44 18 18 1 y_align 1 y_align] [0] + set tcp.width.label trackpanmode>=4 tcp.width{x}>0 + [tcp.width{w} 1] [tcp.width tcp.width 32 16 tcp.width y_align tcp.width y_align] [0] [0] + set tcp.fxparm w<211 trackpanmode>=4 [7 118 368 -24 0 0 1 1] [7 97 368 -3 0 0 1 1] [7 76 368 18 0 0 1 1] + + set tcp.volume tcp.volume +set tcp.label.color [150 150 150] +set tcp.recinput.color [140 140 140] +set tcp.pan.color [190 190 190 191 0 0 0 0] +set tcp.pan.label.color [150 150 150] +set tcp.width.color [190 190 190 225 0 0 0 0] +set tcp.width.label.color [150 150 150] +set tcp.volume.label.color [150 150 150] + + + + + EndLayout ; end of "Shy Meter (black)" + + + + Layout "1. Classic Vertical" "classic-tcp-vertical" + clear tcp.* + front tcp.io tcp.volume + set tcp.size [400 100 128 88] + set tcp.foldercomp [382 0 18 19 1 0 1 0] + set tcp.folder h<32 [0] [382 86 18 14 1 1 1 1] + set tcp.trackidx [382 41 18 18 1 0.5 1 0.5] + set tcp.trackidx.margin [0 0 0 0 0.5] + set tcp.trackidx.color ?recarm [200 0 0] [100 100 100] + set tcp.toosmall [10 10 10 10 0 0 0 0] + set tcp.volume h>153 [6 21 19 71 0 0 0 1] h>87 [6 10 19 82 0 0 0 1] [4 29 23 23 0 0.5 0 0.5] + set tcp.volume.label h>153 [5 7 35 14 0 0 0 0] h>87 [5 7 35 3 0 0 0 0] [5 30 35 3 0 0.5 0 0.5] + set tcp.volume.label.color [179 179 179] + set tcp.volume.label.margin h>153 [1 5 0 0 0.5] [52 5 53 0 0.5] + set tcp.meter h>153 [25 25 12 64 0 0 0 1] h>87 [25 14 12 75 0 0 0 1] [25 37 12 28 0 0.5 0 0.5] + set tcp.meter.vu.div [3] + set tcp.recarm h>87 [39 60 20 33 0 1 0 1] [39 36 20 33 0 0.5 0 0.5] + set tcp.column.anchor [46 7] + set tcp.mute h>87 + tcp.column.anchor [0 0 17 18 0 0 0 0] [65 31 17 18 0 0.5 0 0.5] + set tcp.solo h>87 + tcp.column.anchor [0 21 17 18 0 0 0 0] [65 51 17 18 0 0.5 0 0.5] + set tcp.recmon + tcp.column.anchor h>98 [0 42 17 14 0 0 0 0] [0] + set tcp.recmode + tcp.column.anchor h>153 [0 54 17 22 0 0 0 0] [0] + set tcp.env + tcp.column.anchor h>164 [0 79 17 26 0 0 0 0] h>153 [0 79 17 14 0 0 0 0] h>115 [0 59 17 14 0 0 0 0] [0] + set tcp.phase + tcp.column.anchor h>164 [1 108 15 16 0 0 0 0] h>153 [1 96 15 16 0 0 0 0] h>133 [1 76 15 16 0 0 0 0] [0] + set tcp.pan h<128 h<88 w<186 [0] [119 34 22 22 0 0.5 0 0.5] w<167 [0] [100 8 22 22 0 0 0 0] w<137 [0] [70 45 22 22 0 0 0 0] + set tcp.pan.label tcp.pan{x}<1 [0] + [-6 27] [tcp.pan tcp.pan 34 7 0 tcp.pan 0 tcp.pan] + set tcp.pan.label.margin [0 0 0 0 0.5] + set tcp.pan.label.color [96 92 85] + set tcp.width trackpanmode<4 [0] h<128 h<88 w<218 [0] [149 34 22 22 0 0.5 0 0.5] w<167 [0] [100 49 22 22 0 0 0 0] w<137 [0] [70 86 22 22 0 0 0 0] + set tcp.width.label tcp.width{x}<1 [0] + [-6 27] [tcp.width tcp.width 34 7 0 tcp.width 0 tcp.width] + set tcp.width.label.margin [0 0 0 0 0.5] + set tcp.width.label.color [96 92 85] + set tcp.fxbyp h>87 w<137 [0] [69 7 24 14 0 0 0 0] w<157 [0] [88 35 24 14 0 0.5 0 0.5] + set tcp.fx tcp.fxbyp{x}>0 + [0 tcp.fxbyp{h}] [tcp.fxbyp tcp.fxbyp 24 17 0 tcp.fxbyp 0 tcp.fxbyp] [0] + set tcp.fxparm h<128 h<88 w<297 [0] [179 36 176 26 0 0.5 1 0.5] w<297 [0] [130 8 202 85 0 0 1 1] w<239 [0] [100 8 232 85 0 0 1 1] + set tcp.io h>164 !recarm [362 0 19 59 1 0 1 0] [362 0 19 22 1 0 1 0] h>115 [362 0 19 22 1 0 1 0] [0] + set tcp.fxin h>164 !recarm [0] [362 21 19 37 1 0 1 0] [0] + set tcp_recinput_toothin h<128 [190] [160] + set tcp.recinput h>87 w164 [363 58 18 42 1 0 1 1] h>115 [363 21 18 79 1 0 1 1] [363 0 18 100 1 0 1 1] + set tcp.label.margin [3 2 3 2 0.5] + set tcp.label.color [191 191 191] + EndLayout ; end of "Vertical" + + Layout "1. Classic Vertical" "vertical" + clear tcp.* + front tcp.io tcp.volume + set tcp.size [400 100 128 88] + set tcp.foldercomp [382 0 18 19 1 0 1 0] + set tcp.folder h<32 [0] [382 86 18 14 1 1 1 1] + set tcp.trackidx [382 41 18 18 1 0.5 1 0.5] + set tcp.trackidx.margin [0 0 0 0 0.5] + set tcp.trackidx.color ?recarm [200 0 0] [100 100 100] + set tcp.toosmall [10 10 10 10 0 0 0 0] + set tcp.volume h>153 [6 21 19 71 0 0 0 1] h>87 [6 10 19 82 0 0 0 1] [4 29 23 23 0 0.5 0 0.5] + set tcp.volume.label h>153 [5 7 35 14 0 0 0 0] h>87 [5 7 35 3 0 0 0 0] [5 30 35 3 0 0.5 0 0.5] + set tcp.volume.label.color [179 179 179] + set tcp.volume.label.margin h>153 [1 5 0 0 0.5] [52 5 53 0 0.5] + set tcp.meter h>153 [25 25 12 64 0 0 0 1] h>87 [25 14 12 75 0 0 0 1] [25 37 12 28 0 0.5 0 0.5] + set tcp.meter.vu.div [3] + set tcp.recarm h>87 [39 60 20 33 0 1 0 1] [39 36 20 33 0 0.5 0 0.5] + set tcp.column.anchor [46 7] + set tcp.mute h>87 + tcp.column.anchor [0 0 17 18 0 0 0 0] [65 31 17 18 0 0.5 0 0.5] + set tcp.solo h>87 + tcp.column.anchor [0 21 17 18 0 0 0 0] [65 51 17 18 0 0.5 0 0.5] + set tcp.recmon + tcp.column.anchor h>98 [0 42 17 14 0 0 0 0] [0] + set tcp.recmode + tcp.column.anchor h>153 [0 54 17 22 0 0 0 0] [0] + set tcp.env + tcp.column.anchor h>164 [0 79 17 26 0 0 0 0] h>153 [0 79 17 14 0 0 0 0] h>115 [0 59 17 14 0 0 0 0] [0] + set tcp.phase + tcp.column.anchor h>164 [1 108 15 16 0 0 0 0] h>153 [1 96 15 16 0 0 0 0] h>133 [1 76 15 16 0 0 0 0] [0] + set tcp.pan h<128 h<88 w<186 [0] [119 34 22 22 0 0.5 0 0.5] w<167 [0] [100 8 22 22 0 0 0 0] w<137 [0] [70 45 22 22 0 0 0 0] + set tcp.pan.label tcp.pan{x}<1 [0] + [-6 27] [tcp.pan tcp.pan 34 7 0 tcp.pan 0 tcp.pan] + set tcp.pan.label.margin [0 0 0 0 0.5] + set tcp.pan.label.color [96 92 85] + set tcp.width trackpanmode<4 [0] h<128 h<88 w<218 [0] [149 34 22 22 0 0.5 0 0.5] w<167 [0] [100 49 22 22 0 0 0 0] w<137 [0] [70 86 22 22 0 0 0 0] + set tcp.width.label tcp.width{x}<1 [0] + [-6 27] [tcp.width tcp.width 34 7 0 tcp.width 0 tcp.width] + set tcp.width.label.margin [0 0 0 0 0.5] + set tcp.width.label.color [96 92 85] + set tcp.fxbyp h>87 w<137 [0] [69 7 24 14 0 0 0 0] w<157 [0] [88 35 24 14 0 0.5 0 0.5] + set tcp.fx tcp.fxbyp{x}>0 + [0 tcp.fxbyp{h}] [tcp.fxbyp tcp.fxbyp 24 17 0 tcp.fxbyp 0 tcp.fxbyp] [0] + set tcp.fxparm h<128 h<88 w<297 [0] [179 36 176 26 0 0.5 1 0.5] w<297 [0] [130 8 202 85 0 0 1 1] w<239 [0] [100 8 232 85 0 0 1 1] + set tcp.io h>164 !recarm [362 0 19 59 1 0 1 0] [362 0 19 22 1 0 1 0] h>115 [362 0 19 22 1 0 1 0] [0] + set tcp.fxin h>164 !recarm [0] [362 21 19 37 1 0 1 0] [0] + set tcp_recinput_toothin h<128 [190] [160] + set tcp.recinput h>87 w164 [363 58 18 42 1 0 1 1] h>115 [363 21 18 79 1 0 1 1] [363 0 18 100 1 0 1 1] + set tcp.label.margin [3 2 3 2 0.5] + set tcp.label.color [191 191 191] + EndLayout ; end of "Vertical" + + + +Layout "1. Classic Big Meter" "classic-mcp-big-meter" +clear tcp.* +set tcp.size [400 100 80 .] +set tcp.foldercomp [382 0 18 19 1 0 1 0] +set tcp.folder h<32 [0] [382 86 18 14 1 1 1 1] +set tcp.trackidx [382 41 18 18 1 0.5 1 0.5] +set tcp.trackidx.margin [0 0 0 0 0.5] +set tcp.trackidx.color ?recarm [220 26 0] [100 100 100] +set tcp.io h>164 !recarm [362 0 19 59 1 0 1 0] [362 0 19 22 1 0 1 0] h>115 [362 0 19 22 1 0 1 0] [0] +set tcp.fxin h>164 !recarm [0] [362 21 19 37 1 0 1 0] [0] +set tcp.meter h>34 [12 12 339 76 0 0 1 1] h>4 [12 45 339 10 0 0.5 1 0.5] [12 -1 339 4 0 0 1 0] +set tcp.meter.vu.div [2] +set tcp.meter.readout.color h>23 [255 255 255 140 255 255 255 200] [0 0 0 0 0 0 0 0] +set tcp.meter.scale.color.unlit.top h<20 [0 0 0 0 0 0 0 0] [255 255 255 75 0 0 0 100] +set tcp.meter.scale.color.unlit.bottom h<20 [0 0 0 0 0 0 0 0] [255 255 255 75 0 0 0 100] +set tcp.meter.scale.color.lit.top h<20 [0 0 0 0 0 0 0 0] [255 255 255 255 0 0 0 50] +set tcp.meter.scale.color.lit.bottom h<20 [0 0 0 0 0 0 0 0] [255 255 255 255 0 0 0 50] +set tcp.meter.inputlabel.color [255 255 255 150] +set tcp.meter.inputlabelbox.color [255 255 255 25 255 255 255 50] + +set tcp.label h>164 [363 58 18 42 1 0 1 1] h>115 [363 21 18 79 1 0 1 1] [363 0 18 100 1 0 1 1] +set tcp.label.margin [3 2 3 2 0.5] +set tcp.label.color [191 191 191] + +EndLayout ; end of "Big Meter" + + +; ------------------------------------------- + + +clear master.tcp.* +set master.tcp.size [400 100 160 48] +front master.tcp.volume.label master.tcp.pan.label +set tcp_master_yanchor ?tcp_fxparms [0 8] [0 19] +set master_y_align ?tcp_fxparms [0 0 0 0 0 0 0 0] [0 0 0 0 0 0.5 0 0.5] +set master.tcp.meter + tcp_master_yanchor [11 4 295 9 0 master_y_align 1 master_y_align] +set master.tcp.fx + tcp_master_yanchor [338 23 24 18 1 master_y_align 1 master_y_align] +set master.tcp.fxbyp master.tcp.fx{x}>0 + [master.tcp.fx master.tcp.fx 13 18 1 master_y_align 1 master_y_align] [master.tcp.fx{w}] [0] +set master.tcp.io + + [master.tcp.meter master.tcp.meter 22 18 1 master_y_align 1 master_y_align] [4 -4] [master.tcp.meter{w}] +set master.tcp.mono + tcp_master_yanchor [338 46 36 16 1 master_y_align 1 master_y_align] +set master.tcp.mute + tcp_master_yanchor [338 0 17 18 1 master_y_align 1 master_y_align] +set master.tcp.solo + tcp_master_yanchor [358 0 17 18 1 master_y_align 1 master_y_align] +set master.tcp.env + tcp_master_yanchor w<172 [7 46 15 16 0 master_y_align 0 master_y_align] [7 46 42 16 0 master_y_align 0 master_y_align] +set master.tcp.volume + tcp_master_yanchor w<211 [7 23 323 18 0 master_y_align 1 master_y_align] [7 23 292 18 0 master_y_align 1 master_y_align] +set master.tcp.volume.label master.tcp.volume{x}>0 + [master.tcp.volume{w}] w<211 [master.tcp.volume master.tcp.volume 3 master.tcp.volume master.tcp.volume{rs} master_y_align master.tcp.volume{rs} master_y_align] [master.tcp.volume master.tcp.volume 33 master.tcp.volume master.tcp.volume{rs} master_y_align master.tcp.volume{rs} master_y_align] +set master.tcp.volume.label.color [179 179 179] +set master.tcp.volume.label.margin [1 1 3 0 1] +set master.tcp.pan + tcp_master_yanchor [281 45 18 18 1 master_y_align 1 master_y_align] +set master.tcp.pan.color [51 51 51 191 0 0 0 0] +set master.tcp.pan.label + [master.tcp.pan{w} 1] [master.tcp.pan master.tcp.pan 32 16 master.tcp.pan master_y_align master.tcp.pan master_y_align] +set master.tcp.pan.label.color [221 224 224] +set master.tcp.pan.label.margin [0 0 3 0 1] +set master.tcp.label [382 0 18 100 1 0 1 1] +set master.tcp.label.margin [0 0 0 0 0.5] +set master.tcp.label.color tcp.trackidx.color +set master.tcp.fxparm [7 76 368 18 0 0 1 1] + + + Layout "2. Silver Master Track" "silver-tcp" + set master.tcp.volume master.tcp.volume + EndLayout ; end of "- Silver Master Track" + + Layout "3. Black Master Track" "black-tcp" + set master.tcp.volume master.tcp.volume + EndLayout ; end of "- Black Master Track" + + + Layout "1. Classic Top Aligned" + set tcp_master_yanchor [0 8] + set master.tcp.meter + tcp_master_yanchor [11 4 295 9 0 0 1 0] + set master.tcp.fx + tcp_master_yanchor [338 23 24 18 1 0 1 0] + set master.tcp.fxbyp master.tcp.fx{x}>0 + [master.tcp.fx master.tcp.fx 13 18 1 0 1 0] [master.tcp.fx{w}] [0] + set master.tcp.io + + [master.tcp.meter master.tcp.meter 22 18 1 0 1 0] [4 -4] [master.tcp.meter{w}] + set master.tcp.mono + tcp_master_yanchor [338 46 36 16 1 0 1 0] + set master.tcp.mute + tcp_master_yanchor [338 0 17 18 1 0 1 0] + set master.tcp.solo + tcp_master_yanchor [358 0 17 18 1 0 1 0] + set master.tcp.env + tcp_master_yanchor w<172 [7 46 15 16 0 0 0 0] [7 46 42 16 0 0 0 0] + set master.tcp.volume + tcp_master_yanchor w<211 [7 23 323 18 0 0 1 0] [7 23 292 18 0 0 1 0] + set master.tcp.volume.label master.tcp.volume{x}>0 + [master.tcp.volume{w}] w<211 [master.tcp.volume master.tcp.volume 3 master.tcp.volume master.tcp.volume{rs} 0 master.tcp.volume{rs} 0] [master.tcp.volume master.tcp.volume 33 master.tcp.volume master.tcp.volume{rs} 0 master.tcp.volume{rs} 0] + set master.tcp.pan + tcp_master_yanchor [281 45 18 18 1 0 1 0] + set master.tcp.pan.label + [master.tcp.pan{w} 1] [master.tcp.pan master.tcp.pan 32 16 master.tcp.pan 0 master.tcp.pan 0] + EndLayout ; end of "Top Aligned" + + Layout "1. Classic Big Meter" "classic-mcp-big-meter" + clear master.tcp.* + set master.tcp.size [400 100 160 48] + set master.tcp.meter h>34 [12 12 358 76 0 0 1 1] [12 45 358 10 0 0.5 1 0.5] + set master.tcp.label [382 0 18 100 1 0 1 1] + EndLayout ; end of "Big Meter" + + + +; -------------------------------------------------------------------------------------- + +clear envcp.* +set envcp.size [400 100 160] +set envcp.margin +:maxfolderdepth:1 [13 0 0 0] +set envcp.margin +:folderdepth:1 [-13 0 0 0] +set envcp.yanchor h<51 [0 41] [0 30] +set envcp.arm + envcp.yanchor [7 0 18 18 0 0.5 0 0.5] +set envcp.label + envcp.yanchor w<370 w<281 [25 0 288 18 0 0.5 1 0.5] [25 0 238 18 0 0.5 1 0.5] [25 0 117 18 0 0.5 0.5 0.5] +set envcp.label.margin [3 2 3 4] +set envcp.label.color [191 191 191] +set envcp.bypass + envcp.yanchor w>280 [269 0 19 18 1 0.5 1 0.5] h<51 [0] [331 24 19 18 1 0.5 1 0.5] +set envcp.hide + envcp.yanchor w>280 [288 0 25 18 1 0.5 1 0.5] h<51 [0] [350 24 25 18 1 0.5 1 0.5] +set envcp.mod + envcp.yanchor w>280 h<51 [0] [269 24 57 18 1 0.5 1 0.5] h<51 [0] [280 24 20 18 1 0.5 1 0.5] +set envcp.learn + envcp.yanchor w>280 h<51 [0] [332 24 43 18 1 0.5 1 0.5] h<51 [0] [306 24 19 18 1 0.5 1 0.5] +set envcp.fader + envcp.yanchor w<370 w<281 w<240 h<51 [0] [18 25 16 16 0 0.5 0 0.5] h<51 [0] envcp_type==4 [25 24 248 18 0 0.5 1 0.5] [25 24 299 18 0 0.5 1 0.5] h<51 [0] [25 24 238 18 0 0.5 1 0.5] [148 0 115 18 0.5 0.5 1 0.5] +set envcp.value + envcp.yanchor [319 -1 56 20 1 0.5 1 0.5] +set envcp.value.margin [0 0 0 0 1] +set envcp.value.color [48 51 51] + +; -------------------------------------------------------------------------------------- + + +clear mcp.* + + +set mcp.size [73 319] +front mcp.width.label mcp.pan.label mcp.recmon mcp.volume.label +set mcp.folder folderstate<0 [66 300 7 18 0 1 0 1] [0 300 18 18 0 1 0 1] + +set mcp.trackidx [1 35 70 18 0 0 0 0] +set mcp.trackidx.margin [2 0 2 0 0.5] +set mcp.trackidx.color ?recarm [200 0 0] [100 100 100] + +set mcp_column_anchor [48 105] +set mcp.mute + mcp_column_anchor [0 0 17 18 0 0 0 0] +set mcp.solo + mcp_column_anchor [0 21 17 18 0 0 0 0] +set mcp.recmon + mcp_column_anchor h>273 [0 42 17 14 0 0 0 0] [0 42 17 14 0 0 0 0] +set mcp.recmode + mcp_column_anchor h>273 [0 54 17 22 0 0 0 0] [0] +set mcp.env + mcp_column_anchor h>283 [0 79 17 26 0 0 0 0] h>273 [0 79 17 14 0 0 0 0] h>233 [0 59 17 14 0 0 0 0] [0] +set mcp.phase + mcp_column_anchor h>283 [1 108 15 16 0 0 0 0] h>273 [1 96 15 16 0 0 0 0] h>251 [1 76 15 16 0 0 0 0] [0] +set mcp.recarm [41 260 20 33 0 1 0 1] +set mcp.meter.vu.div [2 1] +set mcp.meter h>273 [27 123 12 166 0 0 0 1] [27 112 12 177 0 0 0 1] +set mcp.meter.readout.color [255 255 255 140 255 255 255 200] +set mcp.volume h>273 [9 119 17 173 0 0 0 1] [9 108 17 184 0 0 0 1] +set mcp.volume.label h>273 [7 105 35 14 0 0 0 0] [7 105 35 3 0 0 0 0] +set mcp.volume.label.color [179 179 179] +set mcp.volume.label.margin h>273 [1 5 0 0 0.5] [52 5 53 0 0.5] +set mcp.pan trackpanmode>=4 [6 62 18 18 0 0 0 0] [4 65 30 30 0 0 0 0] +set mcp.pan.color [51 51 51 191 0 0 0 0] +set mcp.pan.label trackpanmode>=4 [24 63 41 16 0 0 0 0] [31 72 34 16 0 0 0 0] +set mcp.pan.label.color [221 224 224] +set mcp.pan.label.margin [0 0 3 0 1] +set mcp.width trackpanmode>=4 [6 82 18 18 0 0 0 0] [0] +set mcp.width.color [51 51 51 225 0 0 0 0] +set mcp.width.label trackpanmode>=4 [24 83 41 16 0 0 0 0] [0] +set mcp.width.label.color [221 224 224] +set mcp.width.label.margin [0 0 3 0 1] +set mcp.io ?recarm [30 18 39 16 0 0 0 0] [30 3 39 31 0 0 0 0] +set mcp.fx [3 17 23 17 0 0 0 0] +set mcp.fxbyp [3 3 23 14 0 0 0 0] +set mcp.fxin ?recarm [30 3 39 14 0 0 0 0] [0] +set mcp.extmixer.mode [0] + +;set mcp.trackidx [19 300 35 18 0 1 0 1] +;set mcp.trackidx.margin [0 3 0 5 0.5] +;set mcp.trackidx.color ?recarm [200 0 0] [100 100 100] + +set mcp.label [0 300 72 18 0 1 0 1] +set mcp.label.margin [2 3 2 4 0.5] +set mcp.label.color [218 218 218] + +Layout "1. Classic Default (pan at bottom)" +set mcp.pan trackpanmode>=4 [6 256 18 18 0 1 0 1] [4 259 30 30 0 1 0 1] +set mcp.pan.label trackpanmode>=4 [24 257 41 16 0 1 0 1] [31 266 34 16 0 1 0 1] +set mcp.width trackpanmode>=4 [6 275 18 18 0 1 0 1] [0] +set mcp.width.label trackpanmode>=4 [24 276 41 16 0 1 0 1] [0] +set mcp_column_anchor [48 62] +set mcp.mute + mcp_column_anchor [0 0 17 18 0 0 0 0] +set mcp.solo + mcp_column_anchor [0 21 17 18 0 0 0 0] +set mcp.recmon + mcp_column_anchor h>273 [0 42 17 14 0 0 0 0] [0 42 17 14 0 0 0 0] +set mcp.recmode + mcp_column_anchor h>273 [0 55 17 21 0 0 0 0] [0] +set mcp.env + mcp_column_anchor h>283 [0 79 17 26 0 0 0 0] h>273 [0 79 17 14 0 0 0 0] h>233 [0 59 17 14 0 0 0 0] [0] +set mcp.phase + mcp_column_anchor h>283 [1 108 15 16 0 0 0 0] h>273 [1 96 15 16 0 0 0 0] h>251 [1 76 15 16 0 0 0 0] [0] +set mcp.recarm [41 217 20 33 0 1 0 1] +set mcp.meter h>273 [27 80 12 166 0 0 0 1] [27 69 12 177 0 0 0 1] +set mcp.volume h>273 [8 76 19 173 0 0 0 1] [8 65 19 184 0 0 0 1] +set mcp.volume.label h>273 [7 62 35 14 0 0 0 0] [7 62 35 3 0 0 0 0] +EndLayout ; end of "Default (pan at bottom)" + +Layout "2. Silver Default MCP (pan at bottom)" "silver-mcp-default" +set mcp.pan trackpanmode>=4 [6 256 18 18 0 1 0 1] [4 259 30 30 0 1 0 1] +set mcp.pan.label trackpanmode>=4 [24 257 41 16 0 1 0 1] [31 266 34 16 0 1 0 1] +set mcp.width trackpanmode>=4 [6 275 18 18 0 1 0 1] [0] +set mcp.width.label trackpanmode>=4 [24 276 41 16 0 1 0 1] [0] +set mcp_column_anchor [48 62] +set mcp.mute + mcp_column_anchor [0 0 17 18 0 0 0 0] +set mcp.solo + mcp_column_anchor [0 21 17 18 0 0 0 0] +set mcp.recmon + mcp_column_anchor h>273 [0 42 17 14 0 0 0 0] [0 42 17 14 0 0 0 0] +set mcp.recmode + mcp_column_anchor h>273 [0 55 17 21 0 0 0 0] [0] +set mcp.env + mcp_column_anchor h>283 [0 79 17 26 0 0 0 0] h>273 [0 79 17 14 0 0 0 0] h>233 [0 59 17 14 0 0 0 0] [0] +set mcp.phase + mcp_column_anchor h>283 [1 108 15 16 0 0 0 0] h>273 [1 96 15 16 0 0 0 0] h>251 [1 76 15 16 0 0 0 0] [0] +set mcp.recarm [41 217 20 33 0 1 0 1] +set mcp.meter h>273 [27 80 12 166 0 0 0 1] [27 69 12 177 0 0 0 1] +set mcp.volume h>273 [8 76 19 173 0 0 0 1] [8 65 19 184 0 0 0 1] +set mcp.volume.label h>273 [7 62 35 14 0 0 0 0] [7 62 35 3 0 0 0 0] +EndLayout ; end of "Default (silver, pan at bottom)" + +Layout "3. Black Default MCP (pan at bottom)" black-mcp-default +set mcp.pan trackpanmode>=4 [6 256 18 18 0 1 0 1] [4 259 30 30 0 1 0 1] +set mcp.pan.label trackpanmode>=4 [24 257 41 16 0 1 0 1] [31 266 34 16 0 1 0 1] +set mcp.width trackpanmode>=4 [6 275 18 18 0 1 0 1] [0] +set mcp.width.label trackpanmode>=4 [24 276 41 16 0 1 0 1] [0] +set mcp_column_anchor [48 62] +set mcp.mute + mcp_column_anchor [0 0 17 18 0 0 0 0] +set mcp.solo + mcp_column_anchor [0 21 17 18 0 0 0 0] +set mcp.recmon + mcp_column_anchor h>273 [0 42 17 14 0 0 0 0] [0 42 17 14 0 0 0 0] +set mcp.recmode + mcp_column_anchor h>273 [0 55 17 21 0 0 0 0] [0] +set mcp.env + mcp_column_anchor h>283 [0 79 17 26 0 0 0 0] h>273 [0 79 17 14 0 0 0 0] h>233 [0 59 17 14 0 0 0 0] [0] +set mcp.phase + mcp_column_anchor h>283 [1 108 15 16 0 0 0 0] h>273 [1 96 15 16 0 0 0 0] h>251 [1 76 15 16 0 0 0 0] [0] +set mcp.recarm [41 217 20 33 0 1 0 1] +set mcp.meter h>273 [27 80 12 166 0 0 0 1] [27 69 12 177 0 0 0 1] +set mcp.volume h>273 [8 76 19 173 0 0 0 1] [8 65 19 184 0 0 0 1] +set mcp.volume.label h>273 [7 62 35 14 0 0 0 0] [7 62 35 3 0 0 0 0] +EndLayout ; end of "Default (black, pan at bottom)" + + + +Layout "1. Classic Recording Meter" "classic-mcp-rec-meter" +set mcp.size [30 319] +set mcp.io [4 3 21 20 0 0 0 0] +set mcp.label [4 26 21 76 0 0 0 0] +set mcp.label.margin [3 3 1 3 0] +set mcp.label.color [184 184 184] +set mcp.mute [6 257 17 18 0 1 0 1] +set mcp.solo [6 278 17 18 0 1 0 1] +set mcp.recarm [4 233 21 21 0 1 0 1] +set mcp.meter h<400 [7 114 15 119 0 0 0 1] [7 114 15 103 0 0 0 1] +set mcp.volume h<400 [0] [5 217 19 19 0 1 0 1] +set mcp.volume.label [0] +set mcp.volume.label.color [179 179 179] +set mcp.volume.label.margin [0] +set mcp.recmon [0] +set mcp.recmode [0] +set mcp.env [0] +set mcp.phase [0] +set mcp.pan [0] +set mcp.pan.label [0] +set mcp.width [0] +set mcp.width.label [0] +set mcp.fx [0] +set mcp.fxbyp [0] +set mcp.fxin [0] +set mcp.extmixer.mode [1] +set mcp.extmixer [0] +set mcp.folder folderstate<0 [23 300 7 18 0 1 0 1] [0 300 18 18 0 1 0 1] +set mcp.trackidx folderstate<0 [1 300 20 18 0 1 0 1] [1 300 27 18 0 1 0 1] +set mcp.trackidx.margin [0 3 0 5 0.5] +set mcp.trackidx.color ?recarm [220 26 0] [100 100 100] +EndLayout ; end of "1. Classic Recording Meter" + +Layout "3. Black Recording Meter" "black-mcp-rec-meter" +set mcp.size [30 319] +set mcp.io [4 3 21 20 0 0 0 0] +set mcp.label [4 26 21 76 0 0 0 0] +set mcp.label.margin [3 3 1 3 0] +set mcp.label.color ?recarm [220 26 0] [184 184 184] +set mcp.mute [6 257 17 18 0 1 0 1] +set mcp.solo [6 278 17 18 0 1 0 1] +set mcp.recarm [4 233 21 21 0 1 0 1] +set mcp.meter h<400 [7 114 15 119 0 0 0 1] [7 114 15 103 0 0 0 1] +set mcp.volume h<400 [0] [5 217 19 19 0 1 0 1] +set mcp.volume.label [0] +set mcp.volume.color [10 10 10 191 0 0 0 0] +set mcp.volume.label.color [179 179 179] +set mcp.volume.label.margin [0] +set mcp.recmon [0] +set mcp.recmode [0] +set mcp.env [0] +set mcp.phase [0] +set mcp.pan [0] +set mcp.pan.label [0] +set mcp.width [0] +set mcp.width.label [0] +set mcp.fx [0] +set mcp.fxbyp [0] +set mcp.fxin [0] +set mcp.extmixer.mode [1] +set mcp.extmixer [0] +set mcp.folder folderstate<0 [23 300 7 18 0 1 0 1] [0 300 18 18 0 1 0 1] + +set mcp.trackidx folderstate<0 [1 302 20 18 0 1 0 1] [1 302 27 18 0 1 0 1] +set mcp.trackidx.margin [0 3 0 5 0.5] +set mcp.trackidx.color ?recarm [220 26 0] [100 100 100] + +set mcp.meter.readout.color [141 141 141 220 255 150 150 255] +set mcp.meter.rmsreadout.color [255 255 150 200] +set mcp.meter.scale.color.unlit.top [100 100 100 100 0 0 0 255] +set mcp.meter.scale.color.unlit.bottom [70 70 70 100 0 0 0 255] +set mcp.meter.scale.color.lit.top [220 220 220 255 0 0 0 150] +set mcp.meter.scale.color.lit.bottom [200 200 200 255 0 0 0 150] +EndLayout ; end of "3. Black Recording Meter" + + + + + + + +Layout "1. Classic Small" "classic-mcp-small" +set mcp.size [29 319] + + +set mcp.trackidx [0 1 27 14 0 0 0 0] +set mcp.trackidx.color ?recarm [220 26 0] [115 115 115] + +set mcp.label [1 300 28 18 0 1 0 1] +set mcp.label.margin [2 3 3 3 0] +set mcp.label.color ?recarm [220 26 0] [210 210 210] + +set mcp.volume [5 234 19 19 0 1 0 1] +set mcp.volume.label [0] +set mcp.volume.color [51 51 51 291 0 0 0 0] +set mcp.volume.label.color [179 179 179] +set mcp.volume.label.margin [0] + +set mcp.mute [6 257 17 18 0 1 0 1] +set mcp.solo [6 278 17 18 0 1 0 1] +set mcp.recarm [4 211 21 21 0 1 0 1] +set mcp.meter [7 27 15 184 0 0 0 1] + +set mcp.recmon [0] +set mcp.recmode [0] +set mcp.env [0] +set mcp.phase [0] +set mcp.pan [0] +set mcp.pan.label [0] +set mcp.width [0] +set mcp.width.label [0] +set mcp.fx [0] +set mcp.fxbyp [0] +set mcp.fxin [0] +set mcp.extmixer.mode [1] +set mcp.extmixer [0] +set mcp.folder folderstate<0 [23 300 7 18 0 1 0 1] [0 300 18 18 0 1 0 1] + +set mcp.meter.readout.color [141 141 141 220 255 150 150 255] +set mcp.meter.rmsreadout.color [255 255 150 200] +set mcp.meter.scale.color.unlit.top [100 100 100 100 0 0 0 255] +set mcp.meter.scale.color.unlit.bottom [70 70 70 100 0 0 0 255] +set mcp.meter.scale.color.lit.top [220 220 220 255 0 0 0 150] +set mcp.meter.scale.color.lit.bottom [200 200 200 255 0 0 0 150] +EndLayout ; end of "1. Classic Small" + + +Layout "2. Silver Small" "silver-mcp-small" +set mcp.size [29 319] + + +set mcp.trackidx [0 1 27 14 0 0 0 0] +set mcp.trackidx.color ?recarm [220 26 0] [115 115 115] + +set mcp.label [1 300 28 18 0 1 0 1] +set mcp.label.margin [2 3 3 3 0] +set mcp.label.color ?recarm [220 26 0] [210 210 210] + +set mcp.volume [5 234 19 19 0 1 0 1] +set mcp.volume.label [0] +set mcp.volume.color [42 42 42 291 0 0 0 0] +set mcp.volume.label.color [179 179 179] +set mcp.volume.label.margin [0] + +set mcp.mute [6 257 17 18 0 1 0 1] +set mcp.solo [6 278 17 18 0 1 0 1] +set mcp.recarm [4 211 21 21 0 1 0 1] +set mcp.meter [7 27 15 184 0 0 0 1] + +set mcp.recmon [0] +set mcp.recmode [0] +set mcp.env [0] +set mcp.phase [0] +set mcp.pan [0] +set mcp.pan.label [0] +set mcp.width [0] +set mcp.width.label [0] +set mcp.fx [0] +set mcp.fxbyp [0] +set mcp.fxin [0] +set mcp.extmixer.mode [1] +set mcp.extmixer [0] +set mcp.folder folderstate<0 [23 300 7 18 0 1 0 1] [0 300 18 18 0 1 0 1] + +set mcp.meter.readout.color [141 141 141 220 255 150 150 255] +set mcp.meter.rmsreadout.color [255 255 150 200] +set mcp.meter.scale.color.unlit.top [100 100 100 100 0 0 0 255] +set mcp.meter.scale.color.unlit.bottom [70 70 70 100 0 0 0 255] +set mcp.meter.scale.color.lit.top [220 220 220 255 0 0 0 150] +set mcp.meter.scale.color.lit.bottom [200 200 200 255 0 0 0 150] +EndLayout ; end of "2. Silver Small" + + + +Layout "3. Black Small" "black-mcp-small" +set mcp.size [29 319] + + +;set mcp.fxbyp [2 1 1 1 0 0 0 0] +;set mcp.fx [3 14 1 17 0 0 0 0] + +set mcp.trackidx [0 1 27 14 0 0 0 0] +set mcp.trackidx.color ?recarm [220 26 0] [100 100 100] + +;set mcp.io [4 3 21 20 0 0 0 0] +;set mcp.label [0] + +set mcp.label [1 300 28 18 0 1 0 1] +set mcp.label.margin [2 3 3 3 0] +set mcp.label.color ?recarm [220 26 0] [125 125 125] + +set mcp.volume [5 234 19 19 0 1 0 1] +set mcp.volume.label [0] +set mcp.volume.color [200 200 200 291 0 0 0 0] +set mcp.volume.label.color [179 179 179] +set mcp.volume.label.margin [0] + + +set mcp.mute [6 257 17 18 0 1 0 1] +set mcp.solo [6 278 17 18 0 1 0 1] +set mcp.recarm [4 211 21 21 0 1 0 1] +set mcp.meter [7 27 15 184 0 0 0 1] +;set mcp.meter h<400 [7 24 15 209 0 0 0 1] [7 114 15 103 0 0 0 1] + +;set mcp.volume [0] + + +;set mcp.volume h<400 [0] [5 217 19 19 0 1 0 1] + +set mcp.recmon [0] +set mcp.recmode [0] +set mcp.env [0] +set mcp.phase [0] +set mcp.pan [0] +set mcp.pan.label [0] +set mcp.width [0] +set mcp.width.label [0] +set mcp.fx [0] +set mcp.fxbyp [0] +set mcp.fxin [0] +set mcp.extmixer.mode [1] +set mcp.extmixer [0] +set mcp.folder folderstate<0 [23 300 7 18 0 1 0 1] [0 300 18 18 0 1 0 1] + +;set mcp.trackidx folderstate<0 [1 302 20 18 0 1 0 1] [1 302 27 18 0 1 0 1] +;set mcp.trackidx.margin [0 3 0 5 0.5] +;set mcp.trackidx.color ?recarm [220 26 0] [100 100 100] + +set mcp.meter.readout.color [141 141 141 220 255 150 150 255] +set mcp.meter.rmsreadout.color [255 255 150 200] + +set mcp.meter.readout.font [2] + +set mcp.meter.scale.color.unlit.top [100 100 100 100 0 0 0 255] +set mcp.meter.scale.color.unlit.bottom [70 70 70 100 0 0 0 255] +set mcp.meter.scale.color.lit.top [220 220 220 255 0 0 0 150] +set mcp.meter.scale.color.lit.bottom [200 200 200 255 0 0 0 150] +EndLayout ; end of "3. Black Small" + + + +Layout "1. Classic Narrow" "classic-mcp-narrow" +set mcp.size [52 319] +front mcp.recarm +set mcp.folder folderstate<0 [46 300 7 18 0 1 0 1] [0 300 18 18 0 1 0 1] + +set mcp.label [1 300 49 18 0 1 0 1] +set mcp.label.color [218 218 218] + +set mcp_column_anchor h>350 [7 227] h>327 [7 239] h>308 [7 258] [7 275] +set mcp.mute + mcp_column_anchor h>291 [0 0 17 18 0 1 0 1] [0] +set mcp.solo + mcp_column_anchor h>291 [20 0 17 18 0 1 0 1] [0] +set mcp.recmon + mcp_column_anchor h>308 [20 21 17 14 0 1 0 1] [0] +set mcp.recmode + mcp_column_anchor h>327 [20 33 17 22 0 1 0 1][0] +set mcp.env + mcp_column_anchor h>350 [0 21 17 26 0 1 0 1] h>308 [0 21 17 14 0 1 0 1] [0] +set mcp.phase + mcp_column_anchor h>350 [1 50 15 16 0 1 0 1] h>327 [1 38 15 16 0 1 0 1] [0] +set mcp.recarm h>350 [8 196 35 28 0 1 0 1] h>327 [8 208 35 28 0 1 0 1] h>308 [8 227 35 28 0 1 0 1] h>291 [8 244 35 28 0 1 0 1] [8 265 35 28 0 1 0 1] +set mcp.meter h>350 [28 145 12 51 0 0 0 1] h>327 [28 134 12 74 0 0 0 1] h>308 [28 134 12 93 0 0 0 1] h>291 [28 134 12 110 0 0 0 1] h>274 [28 134 12 131 0 0 0 1] [28 121 12 144 0 0 0 1] +set mcp.volume h>350 [9 137 19 63 0 0 0 1] h>327 [9 126 19 86 0 0 0 1] h>308 [9 126 19 100 0 0 0 1] h>291 [9 126 19 122 0 0 0 1] h>274 [9 126 19 143 0 0 0 1] [9 113 19 156 0 0 0 1] +set mcp.volume.label h>350 [8 126 35 14 0 0 0 0] h>274 [8 126 35 3 0 0 0 0] [8 113 35 3 0 0 0 0] +set mcp.volume.label.margin h>350 [1 5 0 0 0.5] [52 5 53 0 0.5] +set mcp.pan trackpanmode>=4 h>274 [6 92 18 18 0 0 0 0] [6 86 18 18 0 0 0 0] h>274 [10 80 30 30 0 0 0 0] [10 79 30 30 0 0 0 0] +set mcp.pan.label h>274 trackpanmode>=4 [7 85 37 7 0 0 0 0] [1 113 49 8 0 0 0 0] [0] +set mcp.pan.label.color [74 70 64] +set mcp.pan.label.margin trackpanmode>=4 [0 0 0 0 0] [0 0 0 0 0.5] +set mcp.width trackpanmode>=4 h>274 [27 92 18 18 0 0 0 0] [27 86 18 18 0 0 0 0] [0] +set mcp.width.label h>274 trackpanmode>=4 [7 115 37 7 0 0 0 0] [0] [0] +set mcp.width.label.color [96 92 85] +set mcp.width.label.margin [0 0 0 0 1] +set mcp.io [6 23 39 31 0 0 0 0] +set mcp.fx [6 3 24 18 0 0 0 0] +set mcp.fxbyp [30 3 15 18 0 0 0 0] +set mcp.fxin [0] +set mcp.extmixer.mode h<500 [1] [0] +set mcp.extmixer [0] + +set mcp.trackidx [1 56 49 18 0 0 0 0] + + Layout "1. Classic Narrow (pan at bottom)" + set pan_shift h>274 [-44] [-32] + set mcp.volume + [0 pan_shift{x}] mcp.volume + set mcp.volume.label + [0 pan_shift{x}] mcp.volume.label + set mcp.meter + [0 pan_shift{x}] mcp.meter + set mcp.recarm + [0 pan_shift{x}] mcp.recarm + set mcp.mute + [0 pan_shift{x}] mcp.mute + set mcp.solo + [0 pan_shift{x}] mcp.solo + set mcp.recmon + [0 pan_shift{x}] mcp.recmon + set mcp.recmode + [0 pan_shift{x}] mcp.recmode + set mcp.env + [0 pan_shift{x}] mcp.env + set mcp.phase + [0 pan_shift{x}] mcp.phase + set mcp.pan trackpanmode>=4 h>274 [6 265 18 18 0 1 0 1] [6 271 18 18 0 1 0 1] h>274 [10 253 30 30 0 1 0 1] [10 264 30 30 0 1 0 1] + set mcp.pan.label h>274 trackpanmode>=4 [7 256 37 7 0 1 0 1] [1 284 49 8 0 1 0 1] [0] + set mcp.width trackpanmode>=4 h>274 [27 265 18 18 0 1 0 1] [27 271 18 18 0 1 0 1] [0] + set mcp.width.label h>274 trackpanmode>=4 [7 288 37 7 0 1 0 1] [0] [0] + EndLayout ; end of "Narrow (pan at bottom)" + +EndLayout ; end of "Narrow" + + +Layout "2. Silver Narrow" "silver-mcp-narrow" +set mcp.size [52 319] +front mcp.recarm +set mcp.folder folderstate<0 [46 300 7 18 0 1 0 1] [0 300 18 18 0 1 0 1] + +set mcp.trackidx [1 56 49 18 0 0 0 0] +set mcp.trackidx.color ?recarm [220 26 0] [100 100 100] + +set mcp_column_anchor h>350 [7 227] h>327 [7 239] h>308 [7 258] [7 275] +set mcp.mute + mcp_column_anchor h>291 [0 0 17 18 0 1 0 1] [0] +set mcp.solo + mcp_column_anchor h>291 [20 0 17 18 0 1 0 1] [0] +set mcp.recmon + mcp_column_anchor h>308 [20 21 17 14 0 1 0 1] [0] +set mcp.recmode + mcp_column_anchor h>327 [20 33 17 22 0 1 0 1][0] +set mcp.env + mcp_column_anchor h>350 [0 21 17 26 0 1 0 1] h>308 [0 21 17 14 0 1 0 1] [0] +set mcp.phase + mcp_column_anchor h>350 [1 50 15 16 0 1 0 1] h>327 [1 38 15 16 0 1 0 1] [0] +set mcp.recarm h>350 [8 196 35 28 0 1 0 1] h>327 [8 208 35 28 0 1 0 1] h>308 [8 227 35 28 0 1 0 1] h>291 [8 244 35 28 0 1 0 1] [8 265 35 28 0 1 0 1] +set mcp.meter h>350 [28 145 12 51 0 0 0 1] h>327 [28 134 12 74 0 0 0 1] h>308 [28 134 12 93 0 0 0 1] h>291 [28 134 12 110 0 0 0 1] h>274 [28 134 12 131 0 0 0 1] [28 121 12 144 0 0 0 1] +set mcp.volume h>350 [9 137 19 63 0 0 0 1] h>327 [9 126 19 86 0 0 0 1] h>308 [9 126 19 100 0 0 0 1] h>291 [9 126 19 122 0 0 0 1] h>274 [9 126 19 143 0 0 0 1] [9 113 19 156 0 0 0 1] +set mcp.volume.label h>350 [8 126 35 14 0 0 0 0] h>274 [8 126 35 3 0 0 0 0] [8 113 35 3 0 0 0 0] +set mcp.volume.label.margin h>350 [1 5 0 0 0.5] [52 5 53 0 0.5] +set mcp.volume.label.color [141 141 141] +set mcp.pan trackpanmode>=4 h>274 [6 92 18 18 0 0 0 0] [6 86 18 18 0 0 0 0] h>274 [10 80 30 30 0 0 0 0] [10 79 30 30 0 0 0 0] +set mcp.pan.label h>274 trackpanmode>=4 [7 82 37 7 0 0 0 0] [1 111 49 8 0 0 0 0] [0] +set mcp.pan.color [36 36 36 191 0 0 0 0] +set mcp.pan.label.color [47 47 47] +set mcp.pan.label.margin trackpanmode>=4 [0 0 0 0 0] [0 0 0 0 0.5] +set mcp.width trackpanmode>=4 h>274 [27 92 18 18 0 0 0 0] [27 86 18 18 0 0 0 0] [0] +set mcp.width.label h>274 trackpanmode>=4 [7 115 37 7 0 0 0 0] [0] [0] +set mcp.width.color [36 36 36 191 0 0 0 0] +set mcp.width.label.color [128 128 128] +set mcp.width.label.margin [0 0 0 0 1] +set mcp.io [6 23 39 31 0 0 0 0] +set mcp.fx [6 3 24 18 0 0 0 0] +set mcp.fxbyp [30 3 15 18 0 0 0 0] +set mcp.fxin [0] +set mcp.extmixer.mode h<500 [1] [0] +set mcp.extmixer [0] + +set mcp.label [1 301 49 18 0 1 0 1] +set mcp.label.color [141 141 141] + + Layout "2. Silver Narrow (pan at bottom)" + set pan_shift h>274 [-44] [-32] + set mcp.volume + [0 pan_shift{x}] mcp.volume + set mcp.volume.label + [0 pan_shift{x}] mcp.volume.label + set mcp.meter + [0 pan_shift{x}] mcp.meter + set mcp.recarm + [0 pan_shift{x}] mcp.recarm + set mcp.mute + [0 pan_shift{x}] mcp.mute + set mcp.solo + [0 pan_shift{x}] mcp.solo + set mcp.recmon + [0 pan_shift{x}] mcp.recmon + set mcp.recmode + [0 pan_shift{x}] mcp.recmode + set mcp.env + [0 pan_shift{x}] mcp.env + set mcp.phase + [0 pan_shift{x}] mcp.phase + set mcp.pan trackpanmode>=4 h>274 [6 265 18 18 0 1 0 1] [6 271 18 18 0 1 0 1] h>274 [10 253 30 30 0 1 0 1] [10 264 30 30 0 1 0 1] + set mcp.pan.label h>274 trackpanmode>=4 [7 256 37 7 0 1 0 1] [1 284 49 8 0 1 0 1] [0] + set mcp.width trackpanmode>=4 h>274 [27 265 18 18 0 1 0 1] [27 271 18 18 0 1 0 1] [0] + set mcp.width.label h>274 trackpanmode>=4 [7 288 37 7 0 1 0 1] [0] [0] + EndLayout ; end of "Narrow (pan at bottom)" + +EndLayout ; end of "Silver Narrow" + + +Layout "3. Black Narrow" "black-mcp-narrow" +set mcp.size [52 319] +front mcp.recarm +set mcp.folder folderstate<0 [46 300 7 18 0 1 0 1] [0 300 18 18 0 1 0 1] + +set mcp.trackidx [1 56 49 18 0 0 0 0] +set mcp.trackidx.color ?recarm [220 26 0] [100 100 100] + +set mcp_column_anchor h>350 [7 227] h>327 [7 239] h>308 [7 258] [7 275] +set mcp.mute + mcp_column_anchor h>291 [0 0 17 18 0 1 0 1] [0] +set mcp.solo + mcp_column_anchor h>291 [20 0 17 18 0 1 0 1] [0] +set mcp.recmon + mcp_column_anchor h>308 [20 21 17 14 0 1 0 1] [0] +set mcp.recmode + mcp_column_anchor h>327 [20 33 17 22 0 1 0 1][0] +set mcp.env + mcp_column_anchor h>350 [0 21 17 26 0 1 0 1] h>308 [0 21 17 14 0 1 0 1] [0] +set mcp.phase + mcp_column_anchor h>350 [1 50 15 16 0 1 0 1] h>327 [1 38 15 16 0 1 0 1] [0] +set mcp.recarm h>350 [8 196 35 28 0 1 0 1] h>327 [8 208 35 28 0 1 0 1] h>308 [8 227 35 28 0 1 0 1] h>291 [8 244 35 28 0 1 0 1] [8 265 35 28 0 1 0 1] +set mcp.meter h>350 [28 145 12 51 0 0 0 1] h>327 [28 134 12 74 0 0 0 1] h>308 [28 134 12 93 0 0 0 1] h>291 [28 134 12 110 0 0 0 1] h>274 [28 134 12 131 0 0 0 1] [28 121 12 144 0 0 0 1] +set mcp.volume h>350 [9 137 19 63 0 0 0 1] h>327 [9 126 19 86 0 0 0 1] h>308 [9 126 19 100 0 0 0 1] h>291 [9 126 19 122 0 0 0 1] h>274 [9 126 19 143 0 0 0 1] [9 113 19 156 0 0 0 1] +set mcp.volume.label h>350 [8 126 35 14 0 0 0 0] h>274 [8 126 35 3 0 0 0 0] [8 113 35 3 0 0 0 0] +set mcp.volume.label.margin h>350 [1 5 0 0 0.5] [52 5 53 0 0.5] +set mcp.volume.label.color [141 141 141] +set mcp.pan trackpanmode>=4 h>274 [6 92 18 18 0 0 0 0] [6 86 18 18 0 0 0 0] h>274 [10 80 30 30 0 0 0 0] [10 79 30 30 0 0 0 0] +set mcp.pan.label h>274 trackpanmode>=4 [7 85 37 7 0 0 0 0] [1 113 49 8 0 0 0 0] [0] +set mcp.pan.color [180 180 180 191 0 0 0 0] +set mcp.pan.label.color [128 128 128] +set mcp.pan.label.margin trackpanmode>=4 [0 0 0 0 0] [0 0 0 0 0.5] +set mcp.width trackpanmode>=4 h>274 [27 92 18 18 0 0 0 0] [27 86 18 18 0 0 0 0] [0] +set mcp.width.label h>274 trackpanmode>=4 [7 115 37 7 0 0 0 0] [0] [0] +set mcp.width.color [180 180 180 191 0 0 0 0] +set mcp.width.label.color [128 128 128] +set mcp.width.label.margin [0 0 0 0 1] +set mcp.io [6 23 39 31 0 0 0 0] +set mcp.fx [6 3 24 18 0 0 0 0] +set mcp.fxbyp [30 3 15 18 0 0 0 0] +set mcp.fxin [0] +set mcp.extmixer.mode h<500 [1] [0] +set mcp.extmixer [0] + +set mcp.label [1 301 50 18 0 1 0 1] +set mcp.label.color [125 125 125] + + Layout "3. Black Narrow (pan at bottom)" + set pan_shift h>274 [-44] [-32] + set mcp.volume + [0 pan_shift{x}] mcp.volume + set mcp.volume.label + [0 pan_shift{x}] mcp.volume.label + set mcp.meter + [0 pan_shift{x}] mcp.meter + set mcp.recarm + [0 pan_shift{x}] mcp.recarm + set mcp.mute + [0 pan_shift{x}] mcp.mute + set mcp.solo + [0 pan_shift{x}] mcp.solo + set mcp.recmon + [0 pan_shift{x}] mcp.recmon + set mcp.recmode + [0 pan_shift{x}] mcp.recmode + set mcp.env + [0 pan_shift{x}] mcp.env + set mcp.phase + [0 pan_shift{x}] mcp.phase + set mcp.pan trackpanmode>=4 h>274 [6 265 18 18 0 1 0 1] [6 271 18 18 0 1 0 1] h>274 [10 253 30 30 0 1 0 1] [10 264 30 30 0 1 0 1] + set mcp.pan.label h>274 trackpanmode>=4 [7 256 37 7 0 1 0 1] [1 284 49 8 0 1 0 1] [0] + set mcp.width trackpanmode>=4 h>274 [27 265 18 18 0 1 0 1] [27 271 18 18 0 1 0 1] [0] + set mcp.width.label h>274 trackpanmode>=4 [7 288 37 7 0 1 0 1] [0] [0] + EndLayout ; end of "Narrow (pan at bottom)" + +EndLayout ; end of "Black Narrow" + + +Layout "1. Classic Sidebar" "classic-mcp-sidebar" +set mcp.size [151 319] + + +set mcp.label [1 300 148 18 0 1 0 1] + +set mcp.trackidx [1 35 148 18 0 0 0 0] + +set mcp.io [30 3 39 31 0 0 0 0] +set mcp.fxin [73 3 74 15 0 0 0 0] +set mcp.recinput [73 17 74 17 0 0 0 0] +set mcp.recinput.color [160 160 160] +set mcp.recinput.margin [4 0 18 0] +set mcp.extmixer.mode [1] +set mcp.extmixer.position [73 65 70 225 0 0 0 1] + +set mcp.folder folderstate<0 [144 300 7 18 0 1 0 1] [0 300 18 18 0 1 0 1] + + Layout "1. Classic Sidebar (pan at bottom)" + set mcp.pan trackpanmode>=4 [6 256 18 18 0 1 0 1] [4 259 30 30 0 1 0 1] + set mcp.pan.label trackpanmode>=4 [24 257 41 16 0 1 0 1] [31 266 34 16 0 1 0 1] + set mcp.width trackpanmode>=4 [6 275 18 18 0 1 0 1] [0] + set mcp.width.label trackpanmode>=4 [24 276 41 16 0 1 0 1] [0] + set mcp_column_anchor [48 62] + set mcp.mute + mcp_column_anchor [0 0 17 18 0 0 0 0] + set mcp.solo + mcp_column_anchor [0 21 17 18 0 0 0 0] + set mcp.recmon + mcp_column_anchor h>273 [0 42 17 14 0 0 0 0] [0 42 17 14 0 0 0 0] + set mcp.recmode + mcp_column_anchor h>273 [0 55 17 21 0 0 0 0] [0] + set mcp.env + mcp_column_anchor h>283 [0 79 17 26 0 0 0 0] h>273 [0 79 17 14 0 0 0 0] h>233 [0 59 17 14 0 0 0 0] [0] + set mcp.phase + mcp_column_anchor h>283 [1 108 15 16 0 0 0 0] h>273 [1 96 15 16 0 0 0 0] h>251 [1 76 15 16 0 0 0 0] [0] + set mcp.recarm [41 217 20 33 0 1 0 1] + set mcp.meter h>273 [27 80 12 166 0 0 0 1] [27 69 12 177 0 0 0 1] + set mcp.volume h>273 [8 76 19 173 0 0 0 1] [8 65 19 184 0 0 0 1] + set mcp.volume.label h>273 [7 62 35 14 0 0 0 0] [7 62 35 3 0 0 0 0] + EndLayout ; end of "Sidebar (pan at bottom)" + +EndLayout ; end of "Sidebar" + + + +Layout "1. Classic Large" "classic-mcp-large" +set mcp.size [93 319] +front mcp.volume.label mcp.recmon mcp.recarm +set mcp.folder folderstate<0 [86 300 7 18 0 1 0 1] [0 300 18 18 0 1 0 1] + +set mcp.label [1 300 91 18 0 1 0 1] +set mcp.label.margin [3 0 3 0 0.5] +set mcp.label.color [218 218 218] + +set mcp.trackidx [1 58 90 18 0 0 0 0] +set mcp.trackidx.margin [0 3 0 5 0.5] +set mcp.trackidx.color ?recarm [200 0 0] [100 100 100] + +set mcp_column_anchor [62 126] +set mcp.mute + mcp_column_anchor [0 0 23 20 0 0 0 0] +set mcp.solo + mcp_column_anchor [0 23 23 20 0 0 0 0] +set mcp.recmon + mcp_column_anchor h>304 [0 49 23 17 0 0 0 0] h>239 [0 46 23 17 0 0 0 0] [0] +set mcp.recmode + mcp_column_anchor h>304 [0 65 23 13 0 0 0 0] [0] +set mcp.env + mcp_column_anchor h>314 [0 84 23 30 0 0 0 0] h>304 [0 84 23 18 0 0 0 0] h>261 [0 66 23 18 0 0 0 0] [0] +set mcp.phase + mcp_column_anchor h>314 [4 120 15 16 0 0 0 0] h>304 [4 108 15 16 0 0 0 0] h>279 [4 87 15 16 0 0 0 0] [0] +set mcp.recarm [55 260 20 33 0 1 0 1] +set mcp.meter h>273 [34 144 19 145 0 0 0 1] [34 133 19 156 0 0 0 1] +set mcp.volume h>273 [12 140 19 152 0 0 0 1] [12 129 19 163 0 0 0 1] +set mcp.volume.label h>273 [7 126 49 14 0 0 0 0] [7 126 49 3 0 0 0 0] +set mcp.volume.label.color [179 179 179] +set mcp.volume.label.margin h>273 [1 5 0 0 0.5] [52 5 53 0 0.5] +set mcp.pan trackpanmode>=4 [17 86 22 22 0 0 0 0] [35 86 22 22 0 0 0 0] +set mcp.pan.color [51 51 51 191 0 0 0 0] +set mcp.pan.label trackpanmode>=4 [11 113 34 7 0 0 0 0] [29 113 34 7 0 0 0 0] +set mcp.pan.label.color [74 70 64] +set mcp.pan.label.margin [0 0 0 0 0.5] +set mcp.width trackpanmode>=4 [53 86 22 22 0 0 0 0] [0] +set mcp.width.color [51 51 51 225 0 0 0 0] +set mcp.width.label trackpanmode>=4 [47 113 34 7 0 0 0 0] [0] +set mcp.width.label.color [96 92 85] +set mcp.width.label.margin [0 0 0 0 0.5] +set mcp.io [32 4 55 19 0 0 0 0] +set mcp.recinput [5 39 82 17 0 0 0 0] +set mcp.recinput.color [160 160 160] +set mcp.recinput.margin [4 0 18 0] +set mcp.fx [5 18 23 17 0 0 0 0] +set mcp.fxbyp [5 4 23 14 0 0 0 0] +set mcp.fxin [32 23 55 12 0 0 0 0] +set mcp.extmixer.mode [0] + + + + + Layout "1. Classic Large (pan at bottom)" + set mcp.pan trackpanmode>=4 [17 259 22 22 0 1 0 1] [35 259 22 22 0 1 0 1] + set mcp.pan.label trackpanmode>=4 [11 286 34 7 0 1 0 1] [29 286 34 7 0 1 0 1] + set mcp.width trackpanmode>=4 [53 259 22 22 0 1 0 1] [0] + set mcp.width.label trackpanmode>=4 [47 286z 34 7 0 1 0 1] [0] + set mcp_column_anchor [62 85] + set mcp.mute + mcp_column_anchor [0 0 23 20 0 0 0 0] + set mcp.solo + mcp_column_anchor [0 23 23 20 0 0 0 0] + set mcp.recmon + mcp_column_anchor h>304 [0 49 23 17 0 0 0 0] h>239 [0 46 23 17 0 0 0 0] [0] + set mcp.recmode + mcp_column_anchor h>304 [0 65 23 13 0 0 0 0] [0] + set mcp.env + mcp_column_anchor h>314 [0 84 23 30 0 0 0 0] h>304 [0 84 23 18 0 0 0 0] h>261 [0 66 23 18 0 0 0 0] [0] + set mcp.phase + mcp_column_anchor h>314 [4 120 15 16 0 0 0 0] h>304 [4 108 15 16 0 0 0 0] h>279 [4 87 15 16 0 0 0 0] [0] + set mcp.recarm [55 219 20 33 0 1 0 1] + set mcp.meter h>273 [34 103 19 145 0 0 0 1] [34 92 19 156 0 0 0 1] + set mcp.volume h>273 [12 99 19 152 0 0 0 1] [12 88 19 163 0 0 0 1] + set mcp.volume.label h>273 [7 85 49 14 0 0 0 0] [7 85 49 3 0 0 0 0] + EndLayout ; end of "Large (pan at bottom)" + +EndLayout ; end of "Large" + + +Layout "2. Silver Large" "silver-mcp-large" +set mcp.size [93 319] +front mcp.volume.label mcp.recmon mcp.recarm +set mcp.folder folderstate<0 [86 300 7 18 0 1 0 1] [0 300 18 18 0 1 0 1] + + + +set mcp.trackidx [1 58 90 18 0 0 0 0] +set mcp.trackidx.margin [0 3 0 5 0.5] +set mcp.trackidx.color ?recarm [220 26 0] [100 100 100] + +set mcp_column_anchor [62 126] +set mcp.mute + mcp_column_anchor [0 0 23 20 0 0 0 0] +set mcp.solo + mcp_column_anchor [0 23 23 20 0 0 0 0] +set mcp.recmon + mcp_column_anchor h>304 [0 49 23 17 0 0 0 0] h>239 [0 46 23 17 0 0 0 0] [0] +set mcp.recmode + mcp_column_anchor h>304 [0 65 23 13 0 0 0 0] [0] +set mcp.env + mcp_column_anchor h>314 [0 84 23 30 0 0 0 0] h>304 [0 84 23 18 0 0 0 0] h>261 [0 66 23 18 0 0 0 0] [0] +set mcp.phase + mcp_column_anchor h>314 [4 120 15 16 0 0 0 0] h>304 [4 108 15 16 0 0 0 0] h>279 [4 87 15 16 0 0 0 0] [0] +set mcp.recarm [55 260 20 33 0 1 0 1] +set mcp.meter h>273 [34 144 19 145 0 0 0 1] [34 133 19 156 0 0 0 1] +set mcp.volume h>273 [12 140 19 152 0 0 0 1] [12 129 19 163 0 0 0 1] +set mcp.volume.label h>273 [7 126 49 14 0 0 0 0] [7 126 49 3 0 0 0 0] +set mcp.volume.label.color [141 141 141] +set mcp.volume.label.margin h>273 [1 5 0 0 0.5] [52 5 53 0 0.5] +set mcp.pan trackpanmode>=4 [17 85 22 22 0 0 0 0] [35 85 22 22 0 0 0 0] +set mcp.pan.color [42 42 42 191 0 0 0 0] +set mcp.pan.label trackpanmode>=4 [11 113 34 7 0 0 0 0] [29 113 34 7 0 0 0 0] +set mcp.pan.label.color [220 220 220] +set mcp.pan.label.margin [0 0 0 0 0.5] +set mcp.width trackpanmode>=4 [53 85 22 22 0 0 0 0] [0] +set mcp.width.color [42 42 42 225 0 0 0 0] +set mcp.width.label trackpanmode>=4 [47 113 34 7 0 0 0 0] [0] +set mcp.width.label.color [220 220 220] +set mcp.width.label.margin [0 0 0 0 0.5] +set mcp.io [32 4 55 19 0 0 0 0] +set mcp.recinput [5 39 82 17 0 0 0 0] +set mcp.recinput.color [130 130 130] +set mcp.recinput.margin [4 0 18 0] +set mcp.fx [5 18 23 17 0 0 0 0] +set mcp.fxbyp [5 4 23 14 0 0 0 0] +set mcp.fxin [32 23 55 12 0 0 0 0] +set mcp.extmixer.mode [0] + +set mcp.label [1 300 91 18 0 1 0 1] +set mcp.label.margin [3 0 3 0 0.5] +set mcp.label.color [160 160 160] + + +set mcp.meter.readout.color [141 141 141 220 255 150 150 255] +set mcp.meter.rmsreadout.color [255 255 150 200] +set mcp.meter.scale.color.unlit.top [100 100 100 100 0 0 0 255] +set mcp.meter.scale.color.unlit.bottom [70 70 70 100 0 0 0 255] +set mcp.meter.scale.color.lit.top [220 220 220 255 0 0 0 150] +set mcp.meter.scale.color.lit.bottom [200 200 200 255 0 0 0 150] + + + Layout "3. Black Large (pan at bottom)" "black-mcp-large" + set mcp.pan trackpanmode>=4 [17 259 22 22 0 1 0 1] [35 259 22 22 0 1 0 1] + set mcp.pan.label trackpanmode>=4 [11 286 34 7 0 1 0 1] [29 286 34 7 0 1 0 1] + set mcp.width trackpanmode>=4 [53 259 22 22 0 1 0 1] [0] + set mcp.width.label trackpanmode>=4 [47 286z 34 7 0 1 0 1] [0] + set mcp_column_anchor [62 85] + set mcp.mute + mcp_column_anchor [0 0 23 20 0 0 0 0] + set mcp.solo + mcp_column_anchor [0 23 23 20 0 0 0 0] + set mcp.recmon + mcp_column_anchor h>304 [0 49 23 17 0 0 0 0] h>239 [0 46 23 17 0 0 0 0] [0] + set mcp.recmode + mcp_column_anchor h>304 [0 65 23 13 0 0 0 0] [0] + set mcp.env + mcp_column_anchor h>314 [0 84 23 30 0 0 0 0] h>304 [0 84 23 18 0 0 0 0] h>261 [0 66 23 18 0 0 0 0] [0] + set mcp.phase + mcp_column_anchor h>314 [4 120 15 16 0 0 0 0] h>304 [4 108 15 16 0 0 0 0] h>279 [4 87 15 16 0 0 0 0] [0] + set mcp.recarm [55 219 20 33 0 1 0 1] + set mcp.meter h>273 [34 103 19 145 0 0 0 1] [34 92 19 156 0 0 0 1] + set mcp.volume h>273 [12 99 19 152 0 0 0 1] [12 88 19 163 0 0 0 1] + set mcp.volume.label h>273 [7 85 49 14 0 0 0 0] [7 85 49 3 0 0 0 0] + EndLayout ; end of "Large (pan at bottom, black)" + +EndLayout ; end of "Large (black)" + + +Layout "3. Black Large" "black-mcp-large" +set mcp.size [93 319] +front mcp.volume.label mcp.recmon mcp.recarm +set mcp.folder folderstate<0 [86 300 7 18 0 1 0 1] [0 300 18 18 0 1 0 1] + +set mcp.label [1 300 91 18 0 1 0 1] +set mcp.label.margin [3 0 3 0 0.5] +set mcp.label.color [125 125 125] + +set mcp.trackidx [1 58 90 18 0 0 0 0] +set mcp.trackidx.margin [0 3 0 5 0.5] +set mcp.trackidx.color ?recarm [220 26 0] [100 100 100] + +set mcp_column_anchor [62 126] +set mcp.mute + mcp_column_anchor [0 0 23 20 0 0 0 0] +set mcp.solo + mcp_column_anchor [0 23 23 20 0 0 0 0] +set mcp.recmon + mcp_column_anchor h>304 [0 49 23 17 0 0 0 0] h>239 [0 46 23 17 0 0 0 0] [0] +set mcp.recmode + mcp_column_anchor h>304 [0 65 23 13 0 0 0 0] [0] +set mcp.env + mcp_column_anchor h>314 [0 84 23 30 0 0 0 0] h>304 [0 84 23 18 0 0 0 0] h>261 [0 66 23 18 0 0 0 0] [0] +set mcp.phase + mcp_column_anchor h>314 [4 120 15 16 0 0 0 0] h>304 [4 108 15 16 0 0 0 0] h>279 [4 87 15 16 0 0 0 0] [0] +set mcp.recarm [55 260 20 33 0 1 0 1] +set mcp.meter h>273 [34 144 19 145 0 0 0 1] [34 133 19 156 0 0 0 1] +set mcp.volume h>273 [12 140 19 152 0 0 0 1] [12 129 19 163 0 0 0 1] +set mcp.volume.label h>273 [7 126 49 14 0 0 0 0] [7 126 49 3 0 0 0 0] +set mcp.volume.label.color [125 125 125] +set mcp.volume.label.margin h>273 [1 5 0 0 0.5] [52 5 53 0 0.5] +set mcp.pan trackpanmode>=4 [17 85 22 22 0 0 0 0] [35 85 22 22 0 0 0 0] +set mcp.pan.color [180 180 180 191 0 0 0 0] +set mcp.pan.label trackpanmode>=4 [11 113 34 7 0 0 0 0] [29 113 34 7 0 0 0 0] +set mcp.pan.label.color [138 138 138] +set mcp.pan.label.margin [0 0 0 0 0.5] +set mcp.width trackpanmode>=4 [53 85 22 22 0 0 0 0] [0] +set mcp.width.color [180 180 180 225 0 0 0 0] +set mcp.width.label trackpanmode>=4 [47 113 34 7 0 0 0 0] [0] +set mcp.width.label.color [138 138 138] +set mcp.width.label.margin [0 0 0 0 0.5] +set mcp.io [32 4 55 19 0 0 0 0] +set mcp.recinput [5 39 82 17 0 0 0 0] +set mcp.recinput.color [130 130 130] +set mcp.recinput.margin [4 0 18 0] +set mcp.fx [5 18 23 17 0 0 0 0] +set mcp.fxbyp [5 4 23 14 0 0 0 0] +set mcp.fxin [32 23 55 12 0 0 0 0] +set mcp.extmixer.mode [0] + + + + +set mcp.meter.readout.color [125 125 125 220 255 150 150 255] +set mcp.meter.rmsreadout.color [255 255 150 200] +set mcp.meter.scale.color.unlit.top [100 100 100 100 0 0 0 255] +set mcp.meter.scale.color.unlit.bottom [70 70 70 100 0 0 0 255] +set mcp.meter.scale.color.lit.top [220 220 220 255 0 0 0 150] +set mcp.meter.scale.color.lit.bottom [200 200 200 255 0 0 0 150] + + + Layout "3. Black Large (pan at bottom)" + set mcp.pan trackpanmode>=4 [17 259 22 22 0 1 0 1] [35 259 22 22 0 1 0 1] + set mcp.pan.label trackpanmode>=4 [11 286 34 7 0 1 0 1] [29 286 34 7 0 1 0 1] + set mcp.width trackpanmode>=4 [53 259 22 22 0 1 0 1] [0] + set mcp.width.label trackpanmode>=4 [47 286z 34 7 0 1 0 1] [0] + set mcp_column_anchor [62 85] + set mcp.mute + mcp_column_anchor [0 0 23 20 0 0 0 0] + set mcp.solo + mcp_column_anchor [0 23 23 20 0 0 0 0] + set mcp.recmon + mcp_column_anchor h>304 [0 49 23 17 0 0 0 0] h>239 [0 46 23 17 0 0 0 0] [0] + set mcp.recmode + mcp_column_anchor h>304 [0 65 23 13 0 0 0 0] [0] + set mcp.env + mcp_column_anchor h>314 [0 84 23 30 0 0 0 0] h>304 [0 84 23 18 0 0 0 0] h>261 [0 66 23 18 0 0 0 0] [0] + set mcp.phase + mcp_column_anchor h>314 [4 120 15 16 0 0 0 0] h>304 [4 108 15 16 0 0 0 0] h>279 [4 87 15 16 0 0 0 0] [0] + set mcp.recarm [55 219 20 33 0 1 0 1] + set mcp.meter h>273 [34 103 19 145 0 0 0 1] [34 92 19 156 0 0 0 1] + set mcp.volume h>273 [12 99 19 152 0 0 0 1] [12 88 19 163 0 0 0 1] + set mcp.volume.label h>273 [7 85 49 14 0 0 0 0] [7 85 49 3 0 0 0 0] + EndLayout ; end of "Large (pan at bottom, black)" + +EndLayout ; end of "Large (black)" + + +Layout "1. Classic Big Meter" "classic-mcp-big-meter" +set mcp.size [93 319] +front mcp.volume.label +set med [373] +set sml [300] +set mcp.folder folderstate<0 [86 300 7 18 0 1 0 1] [0 300 18 18 0 1 0 1] + +set mcp.trackidx [2 57 88 18 0 0 0 0] +set mcp.trackidx.margin [0 3 0 5 0.5] +set mcp.trackidx.color ?recarm [220 26 0] [100 100 100] + + + +set mcp_bottom_anchor h=4 [17 86 22 22 0 0 0 0] [35 86 22 22 0 0 0 0] +set mcp.pan.color [51 51 51 191 0 0 0 0] +set mcp.pan.label h=4 [11 113 34 7 0 0 0 0] [29 113 34 7 0 0 0 0] +set mcp.pan.label.color [92 88 82] +set mcp.pan.label.margin [0 0 0 0 0.5] +set mcp.width h=4 [53 86 22 22 0 0 0 0] [0] +set mcp.width.color [51 51 51 225 0 0 0 0] +set mcp.width.label h=4 [47 113 34 7 0 0 0 0] [0] +set mcp.width.label.color [96 92 85] +set mcp.width.label.margin [0 0 0 0 0.5] +set mcp.io [32 4 55 19 0 0 0 0] +set mcp.recinput [5 39 82 17 0 0 0 0] +set mcp.recinput.color [160 160 160] +set mcp.recinput.margin [4 0 18 0] +set mcp.fx [5 18 23 17 0 0 0 0] +set mcp.fxbyp [5 4 23 14 0 0 0 0] +set mcp.fxin [32 23 55 12 0 0 0 0] +set mcp.extmixer.mode [1] +set mcp.extmixer [0] + +set mcp.label [0 300 92 18 0 1 0 1] +set mcp.label.margin [2 0 3 0 0.5] +set mcp.label.color [218 218 218] + + Layout "1. Classic Big Meter (pan at bottom)" + + set mcp.volume h=4 [17 243 22 22 0 1 0 1] [35 243 22 22 0 1 0 1] trackpanmode>=4 [17 203 22 22 0 1 0 1] [35 203 22 22 0 1 0 1] + set mcp.pan.label h=4 [11 230 34 7 0 1 0 1] [29 230 34 7 0 1 0 1] + set mcp.width h=4 [53 243 22 22 0 1 0 1] [0] trackpanmode>=4 [53 203 22 22 0 1 0 1] [0] + set mcp.width.label h=4 [47 230 34 7 0 1 0 1] [0] + + EndLayout ; end of "Big Meter (pan at bottom)" + +EndLayout ; end of "Big Meter" + + +Layout "2. Silver Big Meter" "silver-mcp-big-meter" +set mcp.size [93 319] +front mcp.volume.label +set med [373] +set sml [300] +set mcp.folder folderstate<0 [86 300 7 18 0 1 0 1] [0 300 18 18 0 1 0 1] + +set mcp.trackidx [2 58 88 18 0 0 0 0] +set mcp.trackidx.margin [0 3 0 5 0.5] +set mcp.trackidx.color ?recarm [220 26 0] [100 100 100] + +set mcp_bottom_anchor h=4 [17 86 22 22 0 0 0 0] [35 86 22 22 0 0 0 0] +set mcp.pan.color [42 42 42 191 0 0 0 0] +set mcp.pan.label h=4 [11 113 34 7 0 0 0 0] [29 113 34 7 0 0 0 0] +set mcp.pan.label.color [47 47 47] +set mcp.pan.label.margin [0 0 0 0 0.5] +set mcp.width h=4 [53 86 22 22 0 0 0 0] [0] +set mcp.width.color [42 42 42 225 0 0 0 0] +set mcp.width.label h=4 [47 113 34 7 0 0 0 0] [0] +set mcp.width.label.color [220 220 220] +set mcp.width.label.margin [0 0 0 0 0.5] +set mcp.io [32 4 55 19 0 0 0 0] +set mcp.recinput [5 39 82 17 0 0 0 0] +set mcp.recinput.color [160 160 160] +set mcp.recinput.margin [4 0 18 0] +set mcp.fx [5 18 23 17 0 0 0 0] +set mcp.fxbyp [5 4 23 14 0 0 0 0] +set mcp.fxin [32 23 55 12 0 0 0 0] +set mcp.extmixer.mode [1] +set mcp.extmixer [0] + +set mcp.label [2 300 88 18 0 1 0 1] +set mcp.label.margin [2 0 2 0 0.5] +set mcp.label.color [150 150 150] + +set mcp.meter.readout.color [184 184 184 220 255 150 150 255] +set mcp.meter.rmsreadout.color [255 255 150 200] +set mcp.meter.scale.color.unlit.top [140 140 140 100 0 0 0 255] +set mcp.meter.scale.color.unlit.bottom [90 90 90 100 0 0 0 255] +set mcp.meter.scale.color.lit.top [255 255 255 255 0 0 0 150] +set mcp.meter.scale.color.lit.bottom [200 200 200 255 0 0 0 150] + + Layout "2. Silver Big Meter (pan at bottom)" + + set mcp.volume h=4 [17 243 22 22 0 1 0 1] [35 243 22 22 0 1 0 1] trackpanmode>=4 [17 203 22 22 0 1 0 1] [35 203 22 22 0 1 0 1] + set mcp.pan.label h=4 [11 230 34 7 0 1 0 1] [29 230 34 7 0 1 0 1] + set mcp.width h=4 [53 243 22 22 0 1 0 1] [0] trackpanmode>=4 [53 203 22 22 0 1 0 1] [0] + set mcp.width.label h=4 [47 230 34 7 0 1 0 1] [0] + + EndLayout ; end of "Big Meter (pan at bottom)" + +EndLayout ; end of "Big Meter" + + +Layout "3. Black Big Meter" "black-mcp-big-meter" +set mcp.size [93 319] +front mcp.volume.label +set med [373] +set sml [300] +set mcp.folder folderstate<0 [86 300 7 18 0 1 0 1] [0 300 18 18 0 1 0 1] + +set mcp.label [1 300 91 18 0 1 0 1] +set mcp.label.margin [2 0 2 0 0.5] +set mcp.label.color [125 125 125] + +set mcp.trackidx [2 58 88 18 0 0 0 0] +set mcp.trackidx.margin [0 3 0 5 0.5] +set mcp.trackidx.color ?recarm [220 26 0] [100 100 100] + +set mcp_bottom_anchor h=4 [17 86 22 22 0 0 0 0] [35 86 22 22 0 0 0 0] +set mcp.pan.color [174 174 174 191 0 0 0 0] +set mcp.pan.label h=4 [11 113 34 7 0 0 0 0] [29 113 34 7 0 0 0 0] +set mcp.pan.label.color [141 141 141] +set mcp.pan.label.margin [0 0 0 0 0.5] +set mcp.width h=4 [53 86 22 22 0 0 0 0] [0] +set mcp.width.color [174 174 174 225 0 0 0 0] +set mcp.width.label h=4 [47 113 34 7 0 0 0 0] [0] +set mcp.width.label.color [141 141 141] +set mcp.width.label.margin [0 0 0 0 0.5] +set mcp.io [32 4 55 19 0 0 0 0] +set mcp.recinput [5 39 82 17 0 0 0 0] +set mcp.recinput.color [160 160 160] +set mcp.recinput.margin [4 0 18 0] +set mcp.fx [5 18 23 17 0 0 0 0] +set mcp.fxbyp [5 4 23 14 0 0 0 0] +set mcp.fxin [32 23 55 12 0 0 0 0] +set mcp.extmixer.mode [1] +set mcp.extmixer [0] + + + +set mcp.meter.readout.color [184 184 184 220 255 150 150 255] +set mcp.meter.rmsreadout.color [255 255 150 200] +set mcp.meter.scale.color.unlit.top [150 150 150 100 0 0 0 255] +set mcp.meter.scale.color.unlit.bottom [70 70 70 100 0 0 0 255] +set mcp.meter.scale.color.lit.top [255 255 255 255 0 0 0 150] +set mcp.meter.scale.color.lit.bottom [200 200 200 255 0 0 0 150] + + + + Layout "3. Black Big Meter (pan at bottom)" + + set mcp.volume h=4 [17 243 22 22 0 1 0 1] [35 243 22 22 0 1 0 1] trackpanmode>=4 [17 203 22 22 0 1 0 1] [35 203 22 22 0 1 0 1] + set mcp.pan.label h=4 [11 230 34 7 0 1 0 1] [29 230 34 7 0 1 0 1] + set mcp.width h=4 [53 243 22 22 0 1 0 1] [0] trackpanmode>=4 [53 203 22 22 0 1 0 1] [0] + set mcp.width.label h=4 [47 230 34 7 0 1 0 1] [0] + + EndLayout ; end of "Big Meter (pan at bottom, black)" + +EndLayout ; end of "Big Meter (black)" + + + +; -------------------------------------------------------------------------------------- + + + + + +clear master.mcp.* +set master.mcp.size [121 319] +front master.mcp.volume.label +set master.mcp.fx mcp.fx +set master.mcp.fxbyp mcp.fxbyp +set master.mcp.io [30 3 39 16 0 0 0 0] +set master.mcp.mono [8 52 41 16 0 0 0 0] +set master.mcp.label [30 22 48 10 0 0 0 0] +set master.mcp.label.margin [0 0 0 0 0] +set master.mcp.label.color mcp.label.color +set master.mcp_column_anchor [96 79] +set master.mcp.mute + master.mcp_column_anchor [0 0 17 18 0 0 0 0] +set master.mcp.solo + master.mcp_column_anchor [0 21 17 18 0 0 0 0] +set master.mcp.env + master.mcp_column_anchor [0 42 17 26 0 0 0 0] +set master.mcp.volume h>273 [10 91 17 219 0 0 0 1] [10 80 17 230 0 0 0 1] +set master.mcp.volume.label h>273 [8 79 82 14 0 0 0 0] [8 79 82 3 0 0 0 0] +set master.mcp.volume.label.color h>273 mcp.volume.label.color [83 83 83] +set master.mcp.volume.label.margin [1 5 0 0 0.5] +set master.mcp.meter h>273 [30 97 57 210 0 0 0 1] [30 86 57 221 0 0 0 1] +set master.mcp.meter.vu.div [6] +set master.mcp.meter.vu.rmsdiv [6] +set master.mcp.meter.readout.color [255 255 255 220 255 150 150 255] +set master.mcp.meter.rmsreadout.color [255 255 150 200] +set master.mcp.meter.scale.color.unlit.top [255 255 255 100 0 0 0 255] +set master.mcp.meter.scale.color.unlit.bottom [255 255 255 100 0 0 0 255] +set master.mcp.meter.scale.color.lit.top [255 255 255 255 0 0 0 150] +set master.mcp.meter.scale.color.lit.bottom [255 255 255 255 0 0 0 150] +set master.mcp.pan + [48 -20] mcp.pan +set master.mcp.pan.color mcp.pan.color +set master.mcp.pan.label [79 52 34 16 0 0 0 0] +set master.mcp.pan.label.color mcp.pan.label.color +set master.mcp.pan.label.margin mcp.pan.label.margin +set master.mcp.menubutton [96 261 24 40 0 1 0 1] + + + + +Layout "Alt 1" +set master.mcp.pan [54 47 18 18 0 0 0 0] +set master.mcp.pan.label [72 48 41 16 0 0 0 0] +set master.mcp.mono [8 48 41 16 0 0 0 0] +set master.mcp.volume h>273 [9 82 19 228 0 0 0 1] [9 71 19 239 0 0 0 1] +set master.mcp.volume.label h>273 [8 70 82 14 0 0 0 0] [8 70 82 3 0 0 0 0] +set master.mcp.meter h>273 [30 88 57 219 0 0 0 1] [30 77 57 230 0 0 0 1] +set master.mcp_column_anchor [96 70] +set master.mcp.mute + master.mcp_column_anchor [0 0 17 18 0 0 0 0] +set master.mcp.solo + master.mcp_column_anchor [0 21 17 18 0 0 0 0] +set master.mcp.env + master.mcp_column_anchor [0 42 17 26 0 0 0 0] +EndLayout ; end of "Alt 1" + + +Layout "Alt 2" "alt2" +set master.mcp.label [1 35 119 18 0 0 0 0] +set master.mcp.label.margin [2 0 2 0 0.5] +set master.mcp.io [30 3 39 31 0 0 0 0] +set master.mcp.pan [54 61 18 18 0 0 0 0] +set master.mcp.pan.label [72 62 41 16 0 0 0 0] +set master.mcp.mono [8 62 41 16 0 0 0 0] +set master.mcp.volume.label h>273 [8 84 82 14 0 0 0 0] [8 84 82 3 0 0 0 0] +set master.mcp_column_anchor [96 84] +set master.mcp.mute + master.mcp_column_anchor [0 0 17 18 0 0 0 0] +set master.mcp.solo + master.mcp_column_anchor [0 21 17 18 0 0 0 0] +set master.mcp.env + master.mcp_column_anchor [0 42 17 26 0 0 0 0] +set master.mcp.volume h>273 [9 98 19 212 0 0 0 1] [9 87 19 223 0 0 0 1] +set master.mcp.meter h>273 [30 102 57 205 0 0 0 1] [30 91 57 216 0 0 0 1] +EndLayout ; end of "Alt 2" + +Layout "Large Master" "classic-mcp-large" +set master.mcp.size [141 319] +set master.mcp.io [30 3 20 19 0 0 0 0] +set master.mcp.mono [54 4 44 16 0 0 0 0] +set master.mcp.pan [111 50 22 22 0 0 0 0] +set master.mcp.pan.color [51 51 51 191 0 0 0 0] +set master.mcp.pan.label [105 77 34 7 0 0 0 0] +set master.mcp.pan.label.color [96 92 85] +set master.mcp.pan.label.margin [0 0 0 0 0.5] +set master.mcp.menubutton [116 261 24 40 0 1 0 1] +set master.mcp.volume.label h>273 [8 49 96 14 0 0 0 0] [8 49 96 3 0 0 0 0] +set master.mcp.volume h>273 [9 63 19 247 0 0 0 1] [9 52 19 258 0 0 0 1] +set master.mcp.meter h>273 [30 67 71 240 0 0 0 1] [30 56 71 251 0 0 0 1] +set master.mcp_column_anchor [110 90] +set master.mcp.mute + master.mcp_column_anchor [0 0 23 20 0 0 0 0] +set master.mcp.solo + master.mcp_column_anchor [0 23 23 20 0 0 0 0] +set master.mcp.env + master.mcp_column_anchor [0 46 23 30 0 0 0 0] +EndLayout ; end of "Large Master" + + +Layout "2. Silver Master" "silver-mcp-default" + +set master.mcp.size [121 319] + +EndLayout + + +Layout "3. Black Master" black-mcp-default + +set master.mcp.size [121 319] +set master.mcp.pan.color [174 174 174 191 0 0 0 0] +set master.mcp.pan.label.color [155 155 155] + +EndLayout + + + + +; ------------------------------------------- + + +clear trans.* +set trans.size [1041 85] +set trans.size.minmax [540 40 2048 200] +set trans.size.dockedheight [43] +set trans.margin [2 2 2 2] +set trans_border [6] ; HELLO USER! you can edit this number (<- <-) to expand/contract overall spacing +set trans_others_width h<85 w<1000 + [250] [trans_border{x}] + [360] [trans_border{x}] [61] +set trans_controls_anchor ?trans_flags&1 + + [3] trans_others_width [trans_border{x}] [3 0] +set trans.rew + trans_controls_anchor [0 3 29 33] +set trans.stop + trans_controls_anchor [28 3 31 33] +set trans.play + trans_controls_anchor [58 3 31 33] +set trans.pause + trans_controls_anchor [88 3 31 33] +set trans.fwd + trans_controls_anchor [118 3 29 33] +set trans.rec + trans_controls_anchor [153 3 31 33] +set trans.repeat + + [5] [trans.rec{w}] trans.rec +set trans_controls_width + * [-1] [trans.rew{x}] + [trans.repeat{x}] [trans.repeat{w}] +set trans_others_anchor ?trans_flags&1 [2] + trans_controls_anchor + trans_controls_width [trans_border{x}] +set trans.automode + trans_others_anchor [0 1 61 34] +set trans_status_width + trans_others_width * [-1] + [trans.automode{w}] [trans_border{x}] +set trans.status h>84 [2 64 1037 19 0 0 1 1] + + + [trans.automode{x}] [trans.automode{w}] [trans_border{x}] w<1000 [0 1 trans_status_width{x} 18] [0 1 trans_status_width{x} 34] +set trans.status.margin w<1000 h<85 [5 1 5 0] [7 1 7 0] [7 1 7 0] +set trans.bpm.tap + + + trans_others_width trans_controls_width * [2] [trans_border{x}] [3 1 45 16] +set trans.bpm.tap.margin [2 4 2 0 0.5] +set trans.bpm.edit [trans.bpm.tap 17 trans.bpm.tap 18] +set trans.bpm.edit.margin [0 0 0 2 0.5] +set trans.curtimesig ?trans_flags&4 + + + [trans.bpm.tap{x}] [trans.bpm.tap{w}] [trans_border{x}] [0 1 33 34] [0] +set trans.rate ?trans_flags&2 + + + + + [trans.bpm.tap{x}] [trans.bpm.tap{w}] [trans.curtimesig{w}] [trans_border{x}] ?trans_flags&4 [trans_border{x}] [0] h>84 [0 1 200 17 0 0 0.1 0] w<1000 [0 1 60 17 0 0 0 0] w>1400 [0 1 205 17 0 0 0 0] [0 1 100 17 0 0 0.3 0] [0] +set trans.rate.fader ?trans_flags&2 w<1000 h<85 [trans.rate 19 16 16 0 0 0 0] [trans.rate 18 trans.rate 17 0 0 trans.rate 0] [trans.rate 18 trans.rate 17 0 0 trans.rate 0] [0] +set trans.sel h>84 [2 40 220 18 0 0 0 0] w<1000 [trans.status 19 trans.status 16 0 0 0 0] [811 10 220 17 1 0 1 0] + +Layout "1. Classic Small" "classic-mcp-small" +clear trans.* +set trans.size [1041 28] +set trans.size.minmax [514 28 2048 54] +set trans.margin [0 0 0 0] +set trans_border [6] +set doublerow + + [880] ?trans_flags&4 + [33] trans_border{x} [0] ?trans_flags&2 + [76] trans_border{x} [0] +set trans.size.dockedheight w=4 [0 -3] [0 8] h<73 h<51 [0 41] [0 30] [0 19] h<73 h<51 [0 41] [0 30] trackpanmode>=4 [0 19] [0 30] +set tcp_yanchor ?tcp_fxparms w<211 h>=125 [0 8] . h>=90 [0 8] . +set tcp.meter + tcp_yanchor w<211 h<51 [0] [342 26 29 9 1 y_align 1 y_align] h>4 [286 4 42 9 1 y_align 1 y_align] [286 -42 42 4 1 0 1 0] +set tcp.meter.readout.color h>23 [255 255 255 140 255 255 255 200] [0 0 0 0 0 0 0 0] +set tcp.meter.vu.div [1] +set tcp.fx + tcp_yanchor w<211 h<73 [0] [338 44 24 18 1 y_align 1 y_align] h<51 [0] [338 22 24 18 1 y_align 1 y_align] +set tcp.fxbyp tcp.fx{x}>0 + [tcp.fx tcp.fx 13 18 1 y_align 1 y_align] [tcp.fx{w}] [0] +set tcp.recarm.fullmargin + tcp_yanchor [7 0 18 18 0 y_align 0 y_align] +set tcp.recarm + reverse_margin tcp.recarm.fullmargin +set tcp_label_fullmargin + tcp_yanchor w<211 [25 0 285 17 0 y_align 1 y_align] w<270 [25 0 229 17 0 y_align 1 y_align] w<360 [25 0 193 17 0 y_align 1 y_align] [25 0 75 17 0 y_align 0.5 y_align] +set tcp.label + + reverse_margin tcp_label_fullmargin margin_to_width +set tcp.label.color [191 191 191] +set tcp.label.margin [3 3 6 3] +set tcp.io + tcp_yanchor w<211 [310 0 22 18 1 y_align 1 y_align] w<270 [254 0 22 18 1 y_align 1 y_align] w<360 [218 0 58 18 1 y_align 1 y_align] [100 0 58 18 0.5 y_align 0.5 y_align] ; additional definition below +set tcp.mute + tcp_yanchor [338 0 17 18 1 y_align 1 y_align] +set tcp.solo + tcp_yanchor [358 0 17 18 1 y_align 1 y_align] +set tcp.volume + tcp_yanchor w<211 h<51 [0] [7 23 322 16 0 y_align 1 y_align] w<270 h<51 [0] [7 23 266 16 0 y_align 1 y_align] w<360 h<51 [0] [7 23 241 16 0 y_align 1 y_align] [164 0 84 18 0.5 y_align 1 y_align] +set tcp.volume.label tcp.volume{x}>0 + [tcp.volume{w}] w<211 [tcp.volume tcp.volume 3 tcp.volume tcp.volume{rs} y_align tcp.volume{rs} y_align] w<270 [tcp.volume tcp.volume 3 tcp.volume tcp.volume{rs} y_align tcp.volume{rs} y_align] [tcp.volume tcp.volume 28 tcp.volume tcp.volume{rs} y_align tcp.volume{rs} y_align] +set tcp.volume.label.color [215 215 215] +set tcp.volume.label.margin [1 1 3 0 1] +set tcp.phase + tcp_yanchor w<211 h<95 [0] [63 66 15 16 0 y_align 0 y_align] w<270 h<73 [0] [28 45 15 16 0 y_align 0 y_align] w<360 h<73 [0] [55 45 15 16 0 y_align 0 y_align] h<51 [0] [55 23 15 16 0 y_align 0 y_align] +set tcp.recmon + tcp_yanchor w<211 h<95 [0] [338 66 15 16 1 y_align 1 y_align] w<360 h<73 [0] [338 45 15 16 1 y_align 1 y_align] h<51 [0] [239 23 15 16 1 y_align 1 y_align] +set tcp.recmode + tcp_yanchor w<211 h<95 [0] [352 66 23 16 1 y_align 1 y_align] w<360 h<73 [0] [352 45 23 16 1 y_align 1 y_align] h<51 [0] [253 23 23 16 1 y_align 1 y_align] +set tcp.recinput + tcp_yanchor w<211 h<73 [0] [28 45 304 16 0 y_align 1 y_align] w<270 h<73 [0] [49 45 227 16 0 y_align 1 y_align] w<360 h<73 [0] [76 45 200 16 0 y_align 1 y_align] h<51 [0] [76 23 157 16 0 y_align 1 y_align] +set tcp.recinput.color [221 224 224] +set tcp.recinput.margin [4 0 16 0] +set tcp.env + tcp_yanchor w<270 h<73 [0] [7 45 15 16 0 y_align 0 y_align] w<360 h<73 [0] [7 45 42 16 0 y_align 0 y_align] h<51 [0] [7 23 42 16 0 y_align 0 y_align] +set tcp.fxin ?recarm tcp.io{w}==58 + tcp_yanchor w<211 [0] w<270 [254 0 36 18 1 y_align 1 y_align] w<360 [218 0 36 18 1 y_align 1 y_align] [100 0 36 18 0.5 y_align 0.5 y_align] [0] [0] +set tcp.io ?recarm tcp.io{w}==58 + [36] [tcp.io tcp.io 22 18 tcp.io tcp.io tcp.io tcp.io] +set tcp.pan + tcp_yanchor w<211 h<95 [0] [6 65 18 18 0 y_align 0 y_align] h<51 [0] [281 22 18 18 1 y_align 1 y_align] +set tcp.pan.color [51 51 51 191 0 0 0 0] +set tcp.pan.label tcp.pan{x}>0 + [tcp.pan{w} 1] [tcp.pan tcp.pan 32 16 tcp.pan y_align tcp.pan y_align] [0] +set tcp.pan.label.color [221 224 224] +set tcp.pan.label.margin [0 0 3 0 1] +set tcp.width trackpanmode>=4 + tcp_yanchor w<211 h<117 [0] [6 86 18 18 0 y_align 0 y_align] h<73 [0] [281 44 18 18 1 y_align 1 y_align] [0] +set tcp.width.color [51 51 51 225 0 0 0 0] +set tcp.width.label trackpanmode>=4 tcp.width{x}>0 + [tcp.width{w} 1] [tcp.width tcp.width 32 16 tcp.width y_align tcp.width y_align] [0] [0] +set tcp.width.label.color [221 224 224] +set tcp.width.label.margin [0 0 3 0 1] +set tcp.fxparm w<360 w<211 trackpanmode>=4 [7 118 368 -24 0 0 1 1] [7 97 368 -3 0 0 1 1] [7 76 368 18 0 0 1 1] trackpanmode>=4 [7 76 368 18 0 0 1 1] [7 54 368 40 0 0 1 1] +set tcp.trackidx [382 41 18 18 1 0.5 1 0.5] +set tcp.trackidx.margin [0 0 0 0 0.5] +set tcp.trackidx.color ?recarm [220 26 0] [115 115 115] +set tcp.toosmall [10 10 10 10 0 0 0 0] + + + Layout "3. Black Default TCP (vertical meters)" black-tcp-v-meters + + + + + set tcp.size [405 100 160] + set tcp.foldercomp [387 0 18 19 1 0 1 0] + set tcp.folder h<32 [0] [388 86 18 14 1 1 1 1] + + set tcp.meter + tcp_yanchor w<211 h<51 [0] [342 26 29 9 1 y_align 1 y_align] [80 -42 42 4 1 0 1 0] + set tcp.meter w>=211 h>4 [372 4 11 92 1 0 1 1] [80 -42 42 4 1 0 1 0] + set tcp.meter.readout.color h>=90 [255 255 255 140 255 255 255 200] [0 0 0 0 0 0 0 0] + set tcp.meter.scale.color.unlit.top h<90 [0 0 0 0 0 0 0 0] [99 99 99 100 0 0 0 255] + set tcp.meter.scale.color.unlit.bottom h<90 [0 0 0 0 0 0 0 0] [70 70 70 100 0 0 0 255] + set tcp.meter.scale.color.lit.top h<90 [0 0 0 0 0 0 0 0] [170 207 202 255 0 0 0 50] + set tcp.meter.scale.color.lit.bottom h<90 [0 0 0 0 0 0 0 0] [170 207 202 255 0 0 0 50] + + set tcp.fx + tcp_yanchor w<211 h<73 [0] [338 44 24 18 1 y_align 1 y_align] h>4 [280 0 24 18 1 y_align 1 y_align] + set tcp.fxbyp tcp.fx{x}>0 + [tcp.fx tcp.fx 13 18 1 y_align 1 y_align] [tcp.fx{w}] [0] + set tcp.mute + tcp_yanchor w<211 [338 0 17 18 1 y_align 1 y_align] h>4 [323 0 17 18 1 y_align 1 y_align] + set tcp.solo + tcp_yanchor w<211 [358 0 17 18 1 y_align 1 y_align] h>4 [343 0 17 18 1 y_align 1 y_align] + set tcp.recmon + tcp_yanchor w<211 h<95 [0] [6 23 15 16 1 y_align 1 y_align] h<51 [0] [323 23 15 16 1 y_align 1 y_align] + set tcp.recmode + tcp_yanchor w<211 h<95 [0] [20 23 23 16 1 y_align 1 y_align] h<51 [0] [337 23 23 16 1 y_align 1 y_align] + set tcp.trackidx [387 41 18 18 1 0.5 1 0.5] + + set tcp.recinput + tcp_yanchor w<211 h<73 [0] [28 45 304 16 0 y_align 1 y_align] w<270 h<73 [0] [47 45 229 16 0 y_align 1 y_align] w<360 h<73 [0] [76 45 200 16 0 y_align 1 y_align] h<51 [0] [76 23 157 16 0 y_align 1 y_align] + set tcp.recinput.color [221 224 224] + set tcp.recinput.margin [2 0 16 0] + set tcp.pan + tcp_yanchor w<211 h<95 [0] [6 65 18 18 0 y_align 0 y_align] h<51 [0] [279 22 18 18 1 y_align 1 y_align] + set tcp.pan.color [51 51 51 191 0 0 0 0] + set tcp.pan.label tcp.pan{x}>0 + [tcp.pan{w} 1] [tcp.pan tcp.pan 20 16 tcp.pan y_align tcp.pan y_align] [0] + set tcp.pan.label.color [221 224 224] + set tcp.pan.label.margin [0 0 3 0 1] + set tcp.width trackpanmode>=4 + tcp_yanchor w<211 h<117 [0] [6 86 18 18 0 y_align 0 y_align] h<73 [0] [279 44 18 18 1 y_align 1 y_align] [0] + set tcp.width.color [51 51 51 225 0 0 0 0] + set tcp.width.label trackpanmode>=4 tcp.width{x}>0 + [tcp.width{w} 1] [tcp.width tcp.width 20 16 tcp.width y_align tcp.width y_align] [0] [0] + set tcp.width.label.color [221 224 224] + set tcp.width.label.margin [0 0 3 0 1] + + set tcp.volume tcp.volume + +set tcp.label.color [150 150 150] +set tcp.recinput.color [140 140 140] +set tcp.pan.color [190 190 190 191 0 0 0 0] +set tcp.pan.label.color [130 130 130] +set tcp.width.color [190 190 190 225 0 0 0 0] +set tcp.width.label.color [130 130 130] +set tcp.volume.label.color [150 150 150] + + EndLayout ; end of "3. Black Default TCP (vertical meters)" + +Layout "1. Classic Default TCP" +set tcp.volume tcp.volume +EndLayout + + + Layout "1. Classic Default TCP (vertical meters)" "classic-tcp-v-meters" + + set tcp.size [405 100 160] + set tcp.foldercomp [387 0 18 19 1 0 1 0] + set tcp.folder h<32 [0] [388 86 18 14 1 1 1 1] + set tcp.meter + tcp_yanchor w<211 h<51 [0] [342 26 29 9 1 y_align 1 y_align] [80 -42 42 4 1 0 1 0] + set tcp.meter w>=211 h>4 [372 4 11 92 1 0 1 1] [80 -42 42 4 1 0 1 0] + set tcp.meter.readout.color h>=90 [255 255 255 140 255 255 255 200] [0 0 0 0 0 0 0 0] + set tcp.meter.scale.color.unlit.top h<90 [0 0 0 0 0 0 0 0] [120 120 120 100 0 0 0 255] + set tcp.meter.scale.color.unlit.bottom h<90 [0 0 0 0 0 0 0 0] [70 70 70 100 0 0 0 255] + set tcp.meter.scale.color.lit.top h<90 [0 0 0 0 0 0 0 0] [184 223 218 255 0 0 0 50] + set tcp.meter.scale.color.lit.bottom h<90 [0 0 0 0 0 0 0 0] [184 223 218 255 0 0 0 50] + set tcp.fx + tcp_yanchor w<211 h<73 [0] [338 44 24 18 1 y_align 1 y_align] h>4 [280 0 24 18 1 y_align 1 y_align] + set tcp.fxbyp tcp.fx{x}>0 + [tcp.fx tcp.fx 13 18 1 y_align 1 y_align] [tcp.fx{w}] [0] + set tcp.mute + tcp_yanchor w<211 [338 0 17 18 1 y_align 1 y_align] h>4 [323 0 17 18 1 y_align 1 y_align] + set tcp.solo + tcp_yanchor w<211 [358 0 17 18 1 y_align 1 y_align] h>4 [343 0 17 18 1 y_align 1 y_align] + set tcp.recmon + tcp_yanchor w<211 h<95 [0] [6 23 15 16 1 y_align 1 y_align] h<51 [0] [323 23 15 16 1 y_align 1 y_align] + set tcp.recmode + tcp_yanchor w<211 h<95 [0] [20 23 23 16 1 y_align 1 y_align] h<51 [0] [337 23 23 16 1 y_align 1 y_align] + set tcp.trackidx [387 41 18 18 1 0.5 1 0.5] + set tcp.volume.label.color [210 210 210] + set tcp.recinput + tcp_yanchor w<211 h<73 [0] [28 45 304 16 0 y_align 1 y_align] w<270 h<73 [0] [47 45 229 16 0 y_align 1 y_align] w<360 h<73 [0] [76 45 200 16 0 y_align 1 y_align] h<51 [0] [76 23 157 16 0 y_align 1 y_align] + set tcp.recinput.color [221 224 224] + set tcp.recinput.margin [2 0 16 0] + set tcp.pan + tcp_yanchor w<211 h<95 [0] [6 65 18 18 0 y_align 0 y_align] h<51 [0] [279 22 18 18 1 y_align 1 y_align] + set tcp.pan.color [51 51 51 191 0 0 0 0] + set tcp.pan.label tcp.pan{x}>0 + [tcp.pan{w} 1] [tcp.pan tcp.pan 20 16 tcp.pan y_align tcp.pan y_align] [0] + set tcp.pan.label.color [221 224 224] + set tcp.pan.label.margin [0 0 3 0 1] + set tcp.width trackpanmode>=4 + tcp_yanchor w<211 h<117 [0] [6 86 18 18 0 y_align 0 y_align] h<73 [0] [279 44 18 18 1 y_align 1 y_align] [0] + set tcp.width.color [51 51 51 225 0 0 0 0] + set tcp.width.label trackpanmode>=4 tcp.width{x}>0 + [tcp.width{w} 1] [tcp.width tcp.width 20 16 tcp.width y_align tcp.width y_align] [0] [0] + set tcp.width.label.color [221 224 224] + set tcp.width.label.margin [0 0 3 0 1] + + EndLayout ; end of "Classic Default TCP (vertical meters)" + + + + + Layout "2. Silver Default TCP (vertical meters)" "silver-tcp-v-meters" + + set tcp.size [405 100 160] + set tcp.foldercomp [387 0 18 19 1 0 1 0] + set tcp.folder h<32 [0] [388 86 18 14 1 1 1 1] + set tcp.meter + tcp_yanchor w<211 h<51 [0] [342 26 29 9 1 y_align 1 y_align] [80 -42 42 4 1 0 1 0] + set tcp.meter w>=211 h>4 [372 4 11 92 1 0 1 1] [80 -42 42 4 1 0 1 0] + set tcp.meter.readout.color h>=90 [255 255 255 140 255 255 255 200] [0 0 0 0 0 0 0 0] + set tcp.meter.scale.color.unlit.top h<90 [0 0 0 0 0 0 0 0] [120 120 120 100 0 0 0 255] + set tcp.meter.scale.color.unlit.bottom h<90 [0 0 0 0 0 0 0 0] [70 70 70 100 0 0 0 255] + set tcp.meter.scale.color.lit.top h<90 [0 0 0 0 0 0 0 0] [184 223 218 255 0 0 0 50] + set tcp.meter.scale.color.lit.bottom h<90 [0 0 0 0 0 0 0 0] [184 223 218 255 0 0 0 50] + set tcp.fx + tcp_yanchor w<211 h<73 [0] [338 44 24 18 1 y_align 1 y_align] h>4 [280 0 24 18 1 y_align 1 y_align] + set tcp.fxbyp tcp.fx{x}>0 + [tcp.fx tcp.fx 13 18 1 y_align 1 y_align] [tcp.fx{w}] [0] + set tcp.mute + tcp_yanchor w<211 [338 0 17 18 1 y_align 1 y_align] h>4 [323 0 17 18 1 y_align 1 y_align] + set tcp.solo + tcp_yanchor w<211 [358 0 17 18 1 y_align 1 y_align] h>4 [343 0 17 18 1 y_align 1 y_align] + set tcp.recmon + tcp_yanchor w<211 h<95 [0] [6 23 15 16 1 y_align 1 y_align] h<51 [0] [323 23 15 16 1 y_align 1 y_align] + set tcp.recmode + tcp_yanchor w<211 h<95 [0] [20 23 23 16 1 y_align 1 y_align] h<51 [0] [337 23 23 16 1 y_align 1 y_align] + set tcp.trackidx [387 41 18 18 1 0.5 1 0.5] + set tcp.volume.label.color [210 210 210] + set tcp.recinput + tcp_yanchor w<211 h<73 [0] [28 45 304 16 0 y_align 1 y_align] w<270 h<73 [0] [47 45 229 16 0 y_align 1 y_align] w<360 h<73 [0] [76 45 200 16 0 y_align 1 y_align] h<51 [0] [76 23 157 16 0 y_align 1 y_align] + set tcp.recinput.color [221 224 224] + set tcp.recinput.margin [2 0 16 0] + set tcp.pan + tcp_yanchor w<211 h<95 [0] [6 65 18 18 0 y_align 0 y_align] h<51 [0] [279 22 18 18 1 y_align 1 y_align] + set tcp.pan.color [51 51 51 191 0 0 0 0] + + + set tcp.volume.color [55 55 55 0] + set tcp.pan.color [55 55 55 0] + set tcp.width.color [55 55 55 0] + + set tcp.pan.label tcp.pan{x}>0 + [tcp.pan{w} 1] [tcp.pan tcp.pan 20 16 tcp.pan y_align tcp.pan y_align] [0] + set tcp.pan.label.color [221 224 224] + set tcp.pan.label.margin [0 0 3 0 1] + set tcp.width trackpanmode>=4 + tcp_yanchor w<211 h<117 [0] [6 86 18 18 0 y_align 0 y_align] h<73 [0] [279 44 18 18 1 y_align 1 y_align] [0] + set tcp.width.color [51 51 51 225 0 0 0 0] + set tcp.width.label trackpanmode>=4 tcp.width{x}>0 + [tcp.width{w} 1] [tcp.width tcp.width 20 16 tcp.width y_align tcp.width y_align] [0] [0] + set tcp.width.label.color [221 224 224] + set tcp.width.label.margin [0 0 3 0 1] + + ;set tcp.recmon + tcp_yanchor w<211 h<95 [0] [338 23 15 16 1 y_align 1 y_align] w<360 h<73 [0] [280 23 15 16 1 y_align 1 y_align] h<51 [0] [239 23 15 16 1 y_align 1 y_align] + + EndLayout ; end of "Silver Default TCP (vertical meters)" + + + +Layout "3. Black Default TCP" "black-tcp" + set tcp.volume tcp.volume +set tcp.label.color [150 150 150] +set tcp.recinput.color [140 140 140] +set tcp.pan.color [190 190 190 191 0 0 0 0] +set tcp.pan.label.color [150 150 150] +set tcp.width.color [190 190 190 225 0 0 0 0] +set tcp.width.label.color [150 150 150] +set tcp.volume.label.color [150 150 150] +EndLayout + +Layout "2. Silver Default TCP" "silver-tcp" +set tcp.volume tcp.volume +set tcp.pan.color [44 44 44 191 0 0 0 0] +set tcp.width.color [44 44 44 191 0 0 0 0] +set tcp.volume.label.color [210 210 210] +set tcp.trackidx.color ?recarm [220 20 34] [120 120 120] + + set tcp.volume.color [55 55 55 0] + set tcp.pan.color [55 55 55 0] + set tcp.width.color [55 55 55 0] + +EndLayout + + +Layout "2. Silver Default MCP" "silver-mcp-default" + +clear mcp.* + +set mcp.size [73 319] +front mcp.width.label mcp.pan.label mcp.recmon mcp.volume.label +set mcp.folder folderstate<0 [66 300 7 18 0 1 0 1] [0 300 18 18 0 1 0 1] + +set mcp.trackidx [1 35 70 18 0 0 0 0] +set mcp.trackidx.margin [2 0 2 0 0.5] +set mcp.trackidx.color ?recarm [220 26 0] [100 100 100] + +set mcp.label [1 301 70 17 0 1 0 1] +set mcp.label.margin [2 3 2 4 0.5] +set mcp.label.color [150 150 150] + +set mcp_column_anchor [48 105] +set mcp.mute + mcp_column_anchor [0 0 17 18 0 0 0 0] +set mcp.solo + mcp_column_anchor [0 21 17 18 0 0 0 0] +set mcp.recmon + mcp_column_anchor h>273 [0 42 17 14 0 0 0 0] [0 42 17 14 0 0 0 0] +set mcp.recmode + mcp_column_anchor h>273 [0 54 17 22 0 0 0 0] [0] +set mcp.env + mcp_column_anchor h>283 [0 79 17 26 0 0 0 0] h>273 [0 79 17 14 0 0 0 0] h>233 [0 59 17 14 0 0 0 0] [0] +set mcp.phase + mcp_column_anchor h>283 [1 108 15 16 0 0 0 0] h>273 [1 96 15 16 0 0 0 0] h>251 [1 76 15 16 0 0 0 0] [0] +set mcp.recarm [41 260 20 33 0 1 0 1] +set mcp.meter.vu.div [2 1] +set mcp.meter h>273 [27 123 12 166 0 0 0 1] [27 112 12 177 0 0 0 1] +set mcp.meter.readout.color [255 255 255 140 255 255 255 200] +set mcp.volume h>273 [9 119 17 173 0 0 0 1] [9 108 17 184 0 0 0 1] +set mcp.volume.label h>273 [7 105 35 14 0 0 0 0] [7 105 35 3 0 0 0 0] +set mcp.volume.label.color [165 165 165] +set mcp.volume.label.margin h>273 [1 5 0 0 0.5] [52 5 53 0 0.5] +set mcp.pan trackpanmode>=4 [6 62 18 18 0 0 0 0] [4 65 30 30 0 0 0 0] +set mcp.pan.color [42 42 42 191 0 0 0 0] +set mcp.pan.label trackpanmode>=4 [24 63 41 16 0 0 0 0] [31 72 34 16 0 0 0 0] +set mcp.pan.label.color [221 224 224] +set mcp.pan.label.margin [0 0 3 0 1] +set mcp.width trackpanmode>=4 [6 82 18 18 0 0 0 0] [0] +set mcp.width.color [51 51 51 225 0 0 0 0] +set mcp.width.label trackpanmode>=4 [24 83 41 16 0 0 0 0] [0] +set mcp.width.label.color [221 224 224] +set mcp.width.label.margin [0 0 3 0 1] +set mcp.io ?recarm [30 18 39 16 0 0 0 0] [30 3 39 31 0 0 0 0] +set mcp.fx [3 17 23 17 0 0 0 0] +set mcp.fxbyp [3 3 23 14 0 0 0 0] +set mcp.fxin ?recarm [30 3 39 14 0 0 0 0] [0] +set mcp.extmixer.mode [0] + +EndLayout + + + +Layout "3. Black Default MCP" black-mcp-default + +clear mcp.* + +set mcp.size [73 319] +front mcp.width.label mcp.pan.label mcp.recmon mcp.volume.label +set mcp.folder folderstate<0 [66 300 7 18 0 1 0 1] [0 300 18 18 0 1 0 1] + + + + +set mcp.trackidx [1 36 70 18 0 0 0 0] +set mcp.trackidx.margin [2 0 2 0 0.5] +set mcp.trackidx.color ?recarm [220 26 0] [125 125 125] + +set mcp.label [1 301 70 17 0 1 0 1] +set mcp.label.margin [2 3 2 4 0.5] +set mcp.label.color [125 125 125] + +set mcp_column_anchor [48 105] +set mcp.mute + mcp_column_anchor [0 0 17 18 0 0 0 0] +set mcp.solo + mcp_column_anchor [0 21 17 18 0 0 0 0] +set mcp.recmon + mcp_column_anchor h>273 [0 42 17 14 0 0 0 0] [0 42 17 14 0 0 0 0] +set mcp.recmode + mcp_column_anchor h>273 [0 54 17 22 0 0 0 0] [0] +set mcp.env + mcp_column_anchor h>283 [0 79 17 26 0 0 0 0] h>273 [0 79 17 14 0 0 0 0] h>233 [0 59 17 14 0 0 0 0] [0] +set mcp.phase + mcp_column_anchor h>283 [1 108 15 16 0 0 0 0] h>273 [1 96 15 16 0 0 0 0] h>251 [1 76 15 16 0 0 0 0] [0] +set mcp.recarm [41 260 20 33 0 1 0 1] +set mcp.meter.vu.div [2 1] +set mcp.meter h>273 [27 123 12 166 0 0 0 1] [27 112 12 177 0 0 0 1] +set mcp.meter.readout.color [255 255 255 140 255 255 255 200] +set mcp.volume h>273 [9 119 17 173 0 0 0 1] [9 108 17 184 0 0 0 1] +set mcp.volume.label h>273 [7 105 35 14 0 0 0 0] [7 105 35 3 0 0 0 0] +set mcp.volume.label.color [126 122 91] +set mcp.volume.label.margin h>273 [1 5 0 0 0.5] [52 5 53 0 0.5] +set mcp.pan trackpanmode>=4 [6 62 18 18 0 0 0 0] [4 65 30 30 0 0 0 0] +set mcp.pan.color [255 220 82 191 0 0 0 0] +set mcp.pan.label trackpanmode>=4 [24 63 41 16 0 0 0 0] [31 72 34 16 0 0 0 0] +set mcp.pan.label.color [155 150 112] +set mcp.pan.label.margin [0 0 3 0 1] +set mcp.width trackpanmode>=4 [6 82 18 18 0 0 0 0] [0] +set mcp.width.color [180 180 180 225 0 0 0 0] +set mcp.width.label trackpanmode>=4 [24 83 41 16 0 0 0 0] [0] +set mcp.width.label.color [155 155 155] +set mcp.width.label.margin [0 0 3 0 1] +set mcp.io ?recarm [30 18 39 16 0 0 0 0] [30 3 39 31 0 0 0 0] +set mcp.fx [3 17 23 17 0 0 0 0] +set mcp.fxbyp [3 3 23 14 0 0 0 0] +set mcp.fxin ?recarm [30 3 39 14 0 0 0 0] [0] +set mcp.extmixer.mode [0] + + + + + +EndLayout + + + + + + + Layout "1. Classic Tracking" + set tcp.io + tcp_yanchor w<211 [310 0 22 18 1 y_align 1 y_align] w<360 [254 0 22 18 1 y_align 1 y_align] [136 0 22 18 0.5 y_align 0.5 y_align] + set tcp.fxin + tcp_yanchor w<270 [0] w<360 [218 0 36 18 1 y_align 1 y_align] [100 0 36 18 0.5 y_align 0.5 y_align] + set tcp.volume + tcp_yanchor w<211 h<73 [0] [7 45 322 16 0 y_align 1 y_align] w<270 h<73 [0] [7 45 266 16 0 y_align 1 y_align] w<360 h<73 [0] [7 45 241 16 0 y_align 1 y_align] h<73 [0] [76 23 172 16 0 y_align 1 y_align] + set tcp.volume.label tcp.volume{x}>0 + [tcp.volume{w}] w<211 [tcp.volume tcp.volume 3 tcp.volume tcp.volume{rs} y_align tcp.volume{rs} y_align] w<270 [tcp.volume tcp.volume 3 tcp.volume tcp.volume{rs} y_align tcp.volume{rs} y_align] [tcp.volume tcp.volume 28 tcp.volume tcp.volume{rs} y_align tcp.volume{rs} y_align] [0] + set tcp.recinput + tcp_yanchor w<211 h<51 [0] [28 23 304 16 0 y_align 1 y_align] w<270 h<51 [0] [49 23 227 16 0 y_align 1 y_align] w<360 h<51 [0] [76 23 200 16 0 y_align 1 y_align] [164 1 69 16 0.5 y_align 1 y_align] + set tcp.recmon + tcp_yanchor w<211 h<95 [0] [338 66 15 16 1 y_align 1 y_align] w<360 h<73 [0] [338 23 15 16 1 y_align 1 y_align] [239 1 15 16 1 y_align 1 y_align] + set tcp.recmode + tcp_yanchor w<211 h<95 [0] [352 66 23 16 1 y_align 1 y_align] w<360 h<73 [0] [352 23 23 16 1 y_align 1 y_align] [253 1 23 16 1 y_align 1 y_align] + set tcp.phase + tcp_yanchor w<211 h<95 [0] [63 66 15 16 0 y_align 0 y_align] w<270 h<51 [0] [28 23 15 16 0 y_align 0 y_align] w<360 h<51 [0] [55 23 15 16 0 y_align 0 y_align] h<51 [0] [55 23 15 16 0 y_align 0 y_align] + set tcp.fx + tcp_yanchor w<211 h<73 [0] [338 44 24 18 1 y_align 1 y_align] w<360 h<73 [0] [338 44 24 18 1 y_align 1 y_align] h<51 [0] [338 22 24 18 1 y_align 1 y_align] + set tcp.fxbyp tcp.fx{x}>0 + [tcp.fx tcp.fx 13 18 1 y_align 1 y_align] [tcp.fx{w}] [0] + set tcp.env + tcp_yanchor w<270 h<51 [0] [7 23 15 16 0 y_align 0 y_align] h<51 [0] [7 23 42 16 0 y_align 0 y_align] + EndLayout ; end of "Alt 1 Tracking" + + Layout "2. Silver Tracking" "silver-tcp" + set tcp.io + tcp_yanchor w<211 [310 0 22 18 1 y_align 1 y_align] w<360 [254 0 22 18 1 y_align 1 y_align] [136 0 22 18 0.5 y_align 0.5 y_align] + set tcp.fxin + tcp_yanchor w<270 [0] w<360 [218 0 36 18 1 y_align 1 y_align] [100 0 36 18 0.5 y_align 0.5 y_align] + set tcp.volume + tcp_yanchor w<211 h<73 [0] [7 45 322 16 0 y_align 1 y_align] w<270 h<73 [0] [7 45 266 16 0 y_align 1 y_align] w<360 h<73 [0] [7 45 241 16 0 y_align 1 y_align] h<73 [0] [76 23 172 16 0 y_align 1 y_align] + set tcp.volume.label tcp.volume{x}>0 + [tcp.volume{w}] w<211 [tcp.volume tcp.volume 3 tcp.volume tcp.volume{rs} y_align tcp.volume{rs} y_align] w<270 [tcp.volume tcp.volume 3 tcp.volume tcp.volume{rs} y_align tcp.volume{rs} y_align] [tcp.volume tcp.volume 28 tcp.volume tcp.volume{rs} y_align tcp.volume{rs} y_align] [0] + set tcp.recinput + tcp_yanchor w<211 h<51 [0] [28 23 304 16 0 y_align 1 y_align] w<270 h<51 [0] [49 23 227 16 0 y_align 1 y_align] w<360 h<51 [0] [76 23 200 16 0 y_align 1 y_align] [164 1 69 16 0.5 y_align 1 y_align] + set tcp.recmon + tcp_yanchor w<211 h<95 [0] [338 66 15 16 1 y_align 1 y_align] w<360 h<73 [0] [338 23 15 16 1 y_align 1 y_align] [239 1 15 16 1 y_align 1 y_align] + set tcp.recmode + tcp_yanchor w<211 h<95 [0] [352 66 23 16 1 y_align 1 y_align] w<360 h<73 [0] [352 23 23 16 1 y_align 1 y_align] [253 1 23 16 1 y_align 1 y_align] + set tcp.phase + tcp_yanchor w<211 h<95 [0] [63 66 15 16 0 y_align 0 y_align] w<270 h<51 [0] [28 23 15 16 0 y_align 0 y_align] w<360 h<51 [0] [55 23 15 16 0 y_align 0 y_align] h<51 [0] [55 23 15 16 0 y_align 0 y_align] + set tcp.fx + tcp_yanchor w<211 h<73 [0] [338 44 24 18 1 y_align 1 y_align] w<360 h<73 [0] [338 44 24 18 1 y_align 1 y_align] h<51 [0] [338 22 24 18 1 y_align 1 y_align] + set tcp.fxbyp tcp.fx{x}>0 + [tcp.fx tcp.fx 13 18 1 y_align 1 y_align] [tcp.fx{w}] [0] + set tcp.env + tcp_yanchor w<270 h<51 [0] [7 23 15 16 0 y_align 0 y_align] h<51 [0] [7 23 42 16 0 y_align 0 y_align] + EndLayout ; end of "Alt 1 Tracking (silver)" + + Layout "3. Black Tracking" "black-tcp" + set tcp.io + tcp_yanchor w<211 [310 0 22 18 1 y_align 1 y_align] w<360 [254 0 22 18 1 y_align 1 y_align] [136 0 22 18 0.5 y_align 0.5 y_align] + set tcp.fxin + tcp_yanchor w<270 [0] w<360 [218 0 36 18 1 y_align 1 y_align] [100 0 36 18 0.5 y_align 0.5 y_align] + set tcp.volume + tcp_yanchor w<211 h<73 [0] [7 45 322 16 0 y_align 1 y_align] w<270 h<73 [0] [7 45 266 16 0 y_align 1 y_align] w<360 h<73 [0] [7 45 241 16 0 y_align 1 y_align] h<73 [0] [76 23 172 16 0 y_align 1 y_align] + set tcp.volume.label tcp.volume{x}>0 + [tcp.volume{w}] w<211 [tcp.volume tcp.volume 3 tcp.volume tcp.volume{rs} y_align tcp.volume{rs} y_align] w<270 [tcp.volume tcp.volume 3 tcp.volume tcp.volume{rs} y_align tcp.volume{rs} y_align] [tcp.volume tcp.volume 28 tcp.volume tcp.volume{rs} y_align tcp.volume{rs} y_align] [0] + set tcp.recinput + tcp_yanchor w<211 h<51 [0] [28 23 304 16 0 y_align 1 y_align] w<270 h<51 [0] [49 23 227 16 0 y_align 1 y_align] w<360 h<51 [0] [76 23 200 16 0 y_align 1 y_align] [164 1 69 16 0.5 y_align 1 y_align] + set tcp.recmon + tcp_yanchor w<211 h<95 [0] [338 66 15 16 1 y_align 1 y_align] w<360 h<73 [0] [338 23 15 16 1 y_align 1 y_align] [239 1 15 16 1 y_align 1 y_align] + set tcp.recmode + tcp_yanchor w<211 h<95 [0] [352 66 23 16 1 y_align 1 y_align] w<360 h<73 [0] [352 23 23 16 1 y_align 1 y_align] [253 1 23 16 1 y_align 1 y_align] + set tcp.phase + tcp_yanchor w<211 h<95 [0] [63 66 15 16 0 y_align 0 y_align] w<270 h<51 [0] [28 23 15 16 0 y_align 0 y_align] w<360 h<51 [0] [55 23 15 16 0 y_align 0 y_align] h<51 [0] [55 23 15 16 0 y_align 0 y_align] + set tcp.fx + tcp_yanchor w<211 h<73 [0] [338 44 24 18 1 y_align 1 y_align] w<360 h<73 [0] [338 44 24 18 1 y_align 1 y_align] h<51 [0] [338 22 24 18 1 y_align 1 y_align] + set tcp.fxbyp tcp.fx{x}>0 + [tcp.fx tcp.fx 13 18 1 y_align 1 y_align] [tcp.fx{w}] [0] + set tcp.env + tcp_yanchor w<270 h<51 [0] [7 23 15 16 0 y_align 0 y_align] h<51 [0] [7 23 42 16 0 y_align 0 y_align] + + set tcp.volume tcp.volume +set tcp.label.color [150 150 150] +set tcp.recinput.color [140 140 140] +set tcp.pan.color [190 190 190 191 0 0 0 0] +set tcp.pan.label.color [150 150 150] +set tcp.width.color [190 190 190 225 0 0 0 0] +set tcp.width.label.color [150 150 150] +set tcp.volume.label.color [150 150 150] + + EndLayout ; end of "Alt 1 Tracking (black)" + + + Layout "1. Classic Reduced" + set tcp_yanchor w<360 w<211 h<117 h<95 h<73 h<51 [0 41] [0 30] [0 19] [0 8] [0 8] h<73 h<51 [0 41] [0 30] [0 19] h<73 h<51 [0 41] [0 30] [0 30] + set y_align [0 0 0 0 0 0.5 0 0.5] + set tcp.fx + tcp_yanchor w<211 h<73 [0] [338 44 24 18 1 y_align 1 y_align] h<51 [0] [338 22 24 18 1 y_align 1 y_align] + set tcp.fxbyp tcp.fx{x}>0 + [tcp.fx tcp.fx 13 18 1 y_align 1 y_align] [tcp.fx{w}] [0] + set tcp.recarm.fullmargin + tcp_yanchor [7 0 18 18 0 y_align 0 y_align] + set tcp.recarm + reverse_margin tcp.recarm.fullmargin + set tcp_label_fullmargin + tcp_yanchor w<211 [25 0 307 17 0 y_align 1 y_align] w<360 [25 0 251 17 0 y_align 1 y_align] [25 0 78 17 0 y_align 0.5 y_align] + set tcp.label + + reverse_margin tcp_label_fullmargin margin_to_width + set tcp.label.margin [3 2 3 3] + set tcp.mute + tcp_yanchor [338 0 17 18 1 y_align 1 y_align] + set tcp.solo + tcp_yanchor [358 0 17 18 1 y_align 1 y_align] + set tcp.volume + tcp_yanchor w<211 h<51 [0] [7 23 322 16 0 y_align 1 y_align] w<270 h<51 [0] [7 23 266 16 0 y_align 1 y_align] w<360 h<51 [0] [7 23 241 16 0 y_align 1 y_align] [109 0 139 18 0.5 y_align 1 y_align] + set tcp.volume.label tcp.volume{x}>0 + [tcp.volume{w}] w<211 [tcp.volume tcp.volume 3 tcp.volume tcp.volume{rs} y_align tcp.volume{rs} y_align] w<270 [tcp.volume tcp.volume 3 tcp.volume tcp.volume{rs} y_align tcp.volume{rs} y_align] [tcp.volume tcp.volume 28 tcp.volume tcp.volume{rs} y_align tcp.volume{rs} y_align] + set tcp.volume.label.margin [1 1 3 0 1] + set tcp.recmode [0] + set tcp.recinput ?recarm + tcp_yanchor w<211 h<73 [0] [49 45 283 16 0 y_align 1 y_align] w<360 h<73 [0] [49 45 227 16 0 y_align 1 y_align] h<51 [0] [49 23 171 16 0 y_align 1 y_align] [0] + set tcp.env + tcp_yanchor w<270 h<73 [0] [7 45 15 16 0 y_align 0 y_align] w<360 h<73 [0] [7 45 15 16 0 y_align 0 y_align] h<51 [0] [7 23 15 16 0 y_align 0 y_align] + set tcp.recmon tcp.env{x}>0 + [21] [tcp.env tcp.env 15 16 tcp.env tcp.env tcp.env tcp.env] [0] + set tcp.phase [0] + set tcp.fxin [0] + set tcp.io [0] + set tcp.pan + tcp_yanchor w<211 h<95 [0] [7 65 18 18 0 y_align 0 y_align] h<51 [0] [281 22 18 18 1 y_align 1 y_align] + set tcp.pan.label tcp.pan{x}>0 + [tcp.pan{w} 1] [tcp.pan tcp.pan 32 16 tcp.pan y_align tcp.pan y_align] [0] + set tcp.width trackpanmode>=4 + tcp_yanchor w<211 h<95 [0] [63 65 18 18 0 y_align 0 y_align] w<360 h<73 [0] [281 44 18 18 1 y_align 1 y_align] h<51 [0] [225 22 18 18 1 y_align 1 y_align] [0] + set tcp.width.label trackpanmode>=4 tcp.width{x}>0 + [tcp.width{w} 1] [tcp.width tcp.width 32 16 tcp.width y_align tcp.width y_align] [0] [0] + set tcp.fxparm [0] + + Layout "1. Classic Minimal" + set tcp_yanchor ?recarm w<211 h<73 h<51 [0 41] [0 30] [0 19] h<51 [0 41] [0 30] w<360 h<51 [0 41] [0 30] [0 41] + set tcp.recarm.fullmargin + tcp_yanchor [7 0 18 18 0 y_align 0 y_align] + set tcp.recarm + reverse_margin tcp.recarm.fullmargin + set tcp_label_fullmargin + tcp_yanchor w<211 [25 0 307 17 0 y_align 1 y_align] w<360 [25 0 251 17 0 y_align 1 y_align] [25 0 78 17 0 y_align 0.5 y_align] + set tcp.label + + reverse_margin tcp_label_fullmargin margin_to_width + set tcp.meter + tcp_yanchor w<211 h<51 [0] [342 26 29 9 1 y_align 1 y_align] [286 4 42 9 1 y_align 1 y_align] + set tcp.mute + tcp_yanchor [338 0 17 18 1 y_align 1 y_align] + set tcp.solo + tcp_yanchor [358 0 17 18 1 y_align 1 y_align] + set tcp.volume + tcp_yanchor w<211 h<51 [0] [7 23 322 16 0 y_align 1 y_align] w<270 h<51 [0] [7 23 266 16 0 y_align 1 y_align] w<360 h<51 [0] [7 23 241 16 0 y_align 1 y_align] [109 0 139 18 0.5 y_align 1 y_align] + set tcp.volume.label tcp.volume{x}>0 + [tcp.volume{w}] w<211 [tcp.volume tcp.volume 3 tcp.volume tcp.volume{rs} y_align tcp.volume{rs} y_align] w<270 [tcp.volume tcp.volume 3 tcp.volume tcp.volume{rs} y_align tcp.volume{rs} y_align] [tcp.volume tcp.volume 28 tcp.volume tcp.volume{rs} y_align tcp.volume{rs} y_align] + set tcp.pan [0] + set tcp.pan.label [0] + set tcp.width [0] + set tcp.width.label [0] + set tcp.env [0] + set tcp.recmon [0] + set tcp.fx [0] + set tcp.fxbyp [0] + set tcp.recinput ?recarm + tcp_yanchor w<211 h<73 [0] [7 45 325 16 0 y_align 1 y_align] w<360 h<51 [0] [282 22 93 16 1 y_align 1 y_align] h<51 [0] [109 23 167 16 0.5 y_align 1 y_align] [0] + EndLayout ; end of "Minimal" + + EndLayout ; end of "Reduced" + + Layout "2. Silver Reduced" "silver-tcp" + set tcp_yanchor w<360 w<211 h<117 h<95 h<73 h<51 [0 41] [0 30] [0 19] [0 8] [0 8] h<73 h<51 [0 41] [0 30] [0 19] h<73 h<51 [0 41] [0 30] [0 30] + set y_align [0 0 0 0 0 0.5 0 0.5] + set tcp.fx + tcp_yanchor w<211 h<73 [0] [338 44 24 18 1 y_align 1 y_align] h<51 [0] [338 22 24 18 1 y_align 1 y_align] + set tcp.fxbyp tcp.fx{x}>0 + [tcp.fx tcp.fx 13 18 1 y_align 1 y_align] [tcp.fx{w}] [0] + set tcp.recarm.fullmargin + tcp_yanchor [7 0 18 18 0 y_align 0 y_align] + set tcp.recarm + reverse_margin tcp.recarm.fullmargin + set tcp_label_fullmargin + tcp_yanchor w<211 [25 0 307 17 0 y_align 1 y_align] w<360 [25 0 251 17 0 y_align 1 y_align] [25 0 78 17 0 y_align 0.5 y_align] + set tcp.label + + reverse_margin tcp_label_fullmargin margin_to_width + set tcp.label.margin [3 2 3 3] + set tcp.mute + tcp_yanchor [338 0 17 18 1 y_align 1 y_align] + set tcp.solo + tcp_yanchor [358 0 17 18 1 y_align 1 y_align] + set tcp.volume + tcp_yanchor w<211 h<51 [0] [7 23 322 16 0 y_align 1 y_align] w<270 h<51 [0] [7 23 266 16 0 y_align 1 y_align] w<360 h<51 [0] [7 23 241 16 0 y_align 1 y_align] [109 0 139 18 0.5 y_align 1 y_align] + set tcp.volume.label tcp.volume{x}>0 + [tcp.volume{w}] w<211 [tcp.volume tcp.volume 3 tcp.volume tcp.volume{rs} y_align tcp.volume{rs} y_align] w<270 [tcp.volume tcp.volume 3 tcp.volume tcp.volume{rs} y_align tcp.volume{rs} y_align] [tcp.volume tcp.volume 28 tcp.volume tcp.volume{rs} y_align tcp.volume{rs} y_align] + set tcp.volume.label.margin [1 1 3 0 1] + set tcp.recmode [0] + set tcp.recinput ?recarm + tcp_yanchor w<211 h<73 [0] [49 45 283 16 0 y_align 1 y_align] w<360 h<73 [0] [49 45 227 16 0 y_align 1 y_align] h<51 [0] [49 23 171 16 0 y_align 1 y_align] [0] + set tcp.env + tcp_yanchor w<270 h<73 [0] [7 45 15 16 0 y_align 0 y_align] w<360 h<73 [0] [7 45 15 16 0 y_align 0 y_align] h<51 [0] [7 23 15 16 0 y_align 0 y_align] + set tcp.recmon tcp.env{x}>0 + [21] [tcp.env tcp.env 15 16 tcp.env tcp.env tcp.env tcp.env] [0] + set tcp.phase [0] + set tcp.fxin [0] + set tcp.io [0] + set tcp.pan + tcp_yanchor w<211 h<95 [0] [7 65 18 18 0 y_align 0 y_align] h<51 [0] [281 22 18 18 1 y_align 1 y_align] + set tcp.pan.label tcp.pan{x}>0 + [tcp.pan{w} 1] [tcp.pan tcp.pan 32 16 tcp.pan y_align tcp.pan y_align] [0] + set tcp.width trackpanmode>=4 + tcp_yanchor w<211 h<95 [0] [63 65 18 18 0 y_align 0 y_align] w<360 h<73 [0] [281 44 18 18 1 y_align 1 y_align] h<51 [0] [225 22 18 18 1 y_align 1 y_align] [0] + set tcp.width.label trackpanmode>=4 tcp.width{x}>0 + [tcp.width{w} 1] [tcp.width tcp.width 32 16 tcp.width y_align tcp.width y_align] [0] [0] + set tcp.fxparm [0] + + Layout "2. Silver Minimal" "silver-tcp" + set tcp_yanchor ?recarm w<211 h<73 h<51 [0 41] [0 30] [0 19] h<51 [0 41] [0 30] w<360 h<51 [0 41] [0 30] [0 41] + set tcp.recarm.fullmargin + tcp_yanchor [7 0 18 18 0 y_align 0 y_align] + set tcp.recarm + reverse_margin tcp.recarm.fullmargin + set tcp_label_fullmargin + tcp_yanchor w<211 [25 0 307 17 0 y_align 1 y_align] w<360 [25 0 251 17 0 y_align 1 y_align] [25 0 78 17 0 y_align 0.5 y_align] + set tcp.label + + reverse_margin tcp_label_fullmargin margin_to_width + set tcp.meter + tcp_yanchor w<211 h<51 [0] [342 26 29 9 1 y_align 1 y_align] [286 4 42 9 1 y_align 1 y_align] + set tcp.mute + tcp_yanchor [338 0 17 18 1 y_align 1 y_align] + set tcp.solo + tcp_yanchor [358 0 17 18 1 y_align 1 y_align] + set tcp.volume + tcp_yanchor w<211 h<51 [0] [7 23 322 16 0 y_align 1 y_align] w<270 h<51 [0] [7 23 266 16 0 y_align 1 y_align] w<360 h<51 [0] [7 23 241 16 0 y_align 1 y_align] [109 0 139 18 0.5 y_align 1 y_align] + set tcp.volume.label tcp.volume{x}>0 + [tcp.volume{w}] w<211 [tcp.volume tcp.volume 3 tcp.volume tcp.volume{rs} y_align tcp.volume{rs} y_align] w<270 [tcp.volume tcp.volume 3 tcp.volume tcp.volume{rs} y_align tcp.volume{rs} y_align] [tcp.volume tcp.volume 28 tcp.volume tcp.volume{rs} y_align tcp.volume{rs} y_align] + set tcp.pan [0] + set tcp.pan.label [0] + set tcp.width [0] + set tcp.width.label [0] + set tcp.env [0] + set tcp.recmon [0] + set tcp.fx [0] + set tcp.fxbyp [0] + set tcp.recinput ?recarm + tcp_yanchor w<211 h<73 [0] [7 45 325 16 0 y_align 1 y_align] w<360 h<51 [0] [282 22 93 16 1 y_align 1 y_align] h<51 [0] [109 23 167 16 0.5 y_align 1 y_align] [0] + EndLayout ; end of "Minimal (silver)" + + EndLayout ; end of "Reduced (silver)" + + Layout "3. Black Reduced" "black-tcp" + set tcp_yanchor w<360 w<211 h<117 h<95 h<73 h<51 [0 41] [0 30] [0 19] [0 8] [0 8] h<73 h<51 [0 41] [0 30] [0 19] h<73 h<51 [0 41] [0 30] [0 30] + set y_align [0 0 0 0 0 0.5 0 0.5] + set tcp.fx + tcp_yanchor w<211 h<73 [0] [338 44 24 18 1 y_align 1 y_align] h<51 [0] [338 22 24 18 1 y_align 1 y_align] + set tcp.fxbyp tcp.fx{x}>0 + [tcp.fx tcp.fx 13 18 1 y_align 1 y_align] [tcp.fx{w}] [0] + set tcp.recarm.fullmargin + tcp_yanchor [7 0 18 18 0 y_align 0 y_align] + set tcp.recarm + reverse_margin tcp.recarm.fullmargin + set tcp_label_fullmargin + tcp_yanchor w<211 [25 0 307 17 0 y_align 1 y_align] w<360 [25 0 251 17 0 y_align 1 y_align] [25 0 78 17 0 y_align 0.5 y_align] + set tcp.label + + reverse_margin tcp_label_fullmargin margin_to_width + set tcp.label.margin [3 2 3 3] + set tcp.mute + tcp_yanchor [338 0 17 18 1 y_align 1 y_align] + set tcp.solo + tcp_yanchor [358 0 17 18 1 y_align 1 y_align] + set tcp.volume + tcp_yanchor w<211 h<51 [0] [7 23 322 16 0 y_align 1 y_align] w<270 h<51 [0] [7 23 266 16 0 y_align 1 y_align] w<360 h<51 [0] [7 23 241 16 0 y_align 1 y_align] [109 0 139 18 0.5 y_align 1 y_align] + set tcp.volume.label tcp.volume{x}>0 + [tcp.volume{w}] w<211 [tcp.volume tcp.volume 3 tcp.volume tcp.volume{rs} y_align tcp.volume{rs} y_align] w<270 [tcp.volume tcp.volume 3 tcp.volume tcp.volume{rs} y_align tcp.volume{rs} y_align] [tcp.volume tcp.volume 28 tcp.volume tcp.volume{rs} y_align tcp.volume{rs} y_align] + set tcp.volume.label.margin [1 1 3 0 1] + set tcp.recmode [0] + set tcp.recinput ?recarm + tcp_yanchor w<211 h<73 [0] [49 45 283 16 0 y_align 1 y_align] w<360 h<73 [0] [49 45 227 16 0 y_align 1 y_align] h<51 [0] [49 23 171 16 0 y_align 1 y_align] [0] + set tcp.env + tcp_yanchor w<270 h<73 [0] [7 45 15 16 0 y_align 0 y_align] w<360 h<73 [0] [7 45 15 16 0 y_align 0 y_align] h<51 [0] [7 23 15 16 0 y_align 0 y_align] + set tcp.recmon tcp.env{x}>0 + [21] [tcp.env tcp.env 15 16 tcp.env tcp.env tcp.env tcp.env] [0] + set tcp.phase [0] + set tcp.fxin [0] + set tcp.io [0] + set tcp.pan + tcp_yanchor w<211 h<95 [0] [7 65 18 18 0 y_align 0 y_align] h<51 [0] [281 22 18 18 1 y_align 1 y_align] + set tcp.pan.label tcp.pan{x}>0 + [tcp.pan{w} 1] [tcp.pan tcp.pan 32 16 tcp.pan y_align tcp.pan y_align] [0] + set tcp.width trackpanmode>=4 + tcp_yanchor w<211 h<95 [0] [63 65 18 18 0 y_align 0 y_align] w<360 h<73 [0] [281 44 18 18 1 y_align 1 y_align] h<51 [0] [225 22 18 18 1 y_align 1 y_align] [0] + set tcp.width.label trackpanmode>=4 tcp.width{x}>0 + [tcp.width{w} 1] [tcp.width tcp.width 32 16 tcp.width y_align tcp.width y_align] [0] [0] + set tcp.fxparm [0] + + set tcp.volume tcp.volume +set tcp.label.color [150 150 150] +set tcp.recinput.color [140 140 140] +set tcp.pan.color [190 190 190 191 0 0 0 0] +set tcp.pan.label.color [150 150 150] +set tcp.width.color [190 190 190 225 0 0 0 0] +set tcp.width.label.color [150 150 150] +set tcp.volume.label.color [150 150 150] + + Layout "3. Black Minimal" "black-tcp" + set tcp_yanchor ?recarm w<211 h<73 h<51 [0 41] [0 30] [0 19] h<51 [0 41] [0 30] w<360 h<51 [0 41] [0 30] [0 41] + set tcp.recarm.fullmargin + tcp_yanchor [7 0 18 18 0 y_align 0 y_align] + set tcp.recarm + reverse_margin tcp.recarm.fullmargin + set tcp_label_fullmargin + tcp_yanchor w<211 [25 0 307 17 0 y_align 1 y_align] w<360 [25 0 251 17 0 y_align 1 y_align] [25 0 78 17 0 y_align 0.5 y_align] + set tcp.label + + reverse_margin tcp_label_fullmargin margin_to_width + set tcp.meter + tcp_yanchor w<211 h<51 [0] [342 26 29 9 1 y_align 1 y_align] [286 4 42 9 1 y_align 1 y_align] + set tcp.mute + tcp_yanchor [338 0 17 18 1 y_align 1 y_align] + set tcp.solo + tcp_yanchor [358 0 17 18 1 y_align 1 y_align] + set tcp.volume + tcp_yanchor w<211 h<51 [0] [7 23 322 16 0 y_align 1 y_align] w<270 h<51 [0] [7 23 266 16 0 y_align 1 y_align] w<360 h<51 [0] [7 23 241 16 0 y_align 1 y_align] [109 0 139 18 0.5 y_align 1 y_align] + set tcp.volume.label tcp.volume{x}>0 + [tcp.volume{w}] w<211 [tcp.volume tcp.volume 3 tcp.volume tcp.volume{rs} y_align tcp.volume{rs} y_align] w<270 [tcp.volume tcp.volume 3 tcp.volume tcp.volume{rs} y_align tcp.volume{rs} y_align] [tcp.volume tcp.volume 28 tcp.volume tcp.volume{rs} y_align tcp.volume{rs} y_align] + set tcp.pan [0] + set tcp.pan.label [0] + set tcp.width [0] + set tcp.width.label [0] + set tcp.env [0] + set tcp.recmon [0] + set tcp.fx [0] + set tcp.fxbyp [0] + set tcp.recinput ?recarm + tcp_yanchor w<211 h<73 [0] [7 45 325 16 0 y_align 1 y_align] w<360 h<51 [0] [282 22 93 16 1 y_align 1 y_align] h<51 [0] [109 23 167 16 0.5 y_align 1 y_align] [0] + EndLayout ; end of "Minimal (black)" + + EndLayout ; end of "Reduced (black)" + + + Layout "1. Classic Top Aligned" + set y_align h<51 [0 0 0 0 0 0.5 0 0.5] [0 0 0 0 0 0 0 0] + set tcp_yanchor w<211 h>=51 [0 8] . h>=51 [0 8] + set tcp.meter + tcp_yanchor w<211 h<51 [0] [342 26 29 9 1 y_align 1 y_align] [286 4 42 9 1 y_align 1 y_align] + set tcp.fx + tcp_yanchor w<211 h<73 [0] [338 44 24 18 1 y_align 1 y_align] h<51 [0] [338 22 24 18 1 y_align 1 y_align] + set tcp.fxbyp tcp.fx{x}>0 + [tcp.fx tcp.fx 13 18 1 y_align 1 y_align] [tcp.fx{w}] [0] + set tcp.recarm.fullmargin + tcp_yanchor [7 0 18 18 0 y_align 0 y_align] + set tcp.recarm + reverse_margin tcp.recarm.fullmargin + set tcp_label_fullmargin + tcp_yanchor w<211 [25 0 285 17 0 y_align 1 y_align] w<270 [25 0 229 17 0 y_align 1 y_align] w<360 [25 0 193 17 0 y_align 1 y_align] [25 0 75 17 0 y_align 0.5 y_align] + set tcp.label + + reverse_margin tcp_label_fullmargin margin_to_width + set tcp.io + tcp_yanchor w<211 [310 0 22 18 1 y_align 1 y_align] w<270 [254 0 22 18 1 y_align 1 y_align] w<360 [218 0 58 18 1 y_align 1 y_align] [100 0 58 18 0.5 y_align 0.5 y_align] ; additional definition below + set tcp.mute + tcp_yanchor [338 0 17 18 1 y_align 1 y_align] + set tcp.solo + tcp_yanchor [358 0 17 18 1 y_align 1 y_align] + set tcp.volume + tcp_yanchor w<211 h<51 [0] [7 23 322 16 0 y_align 1 y_align] w<270 h<51 [0] [7 23 266 16 0 y_align 1 y_align] w<360 h<51 [0] [7 23 241 16 0 y_align 1 y_align] [164 0 84 18 0.5 y_align 1 y_align] + set tcp.volume.label tcp.volume{x}>0 + [tcp.volume{w}] w<211 [tcp.volume tcp.volume 3 tcp.volume tcp.volume{rs} y_align tcp.volume{rs} y_align] w<270 [tcp.volume tcp.volume 3 tcp.volume tcp.volume{rs} y_align tcp.volume{rs} y_align] [tcp.volume tcp.volume 28 tcp.volume tcp.volume{rs} y_align tcp.volume{rs} y_align] + set tcp.phase + tcp_yanchor w<211 h<95 [0] [63 66 15 16 0 y_align 0 y_align] w<270 h<73 [0] [28 45 15 16 0 y_align 0 y_align] w<360 h<73 [0] [55 45 15 16 0 y_align 0 y_align] h<51 [0] [55 23 15 16 0 y_align 0 y_align] + set tcp.recmon + tcp_yanchor w<211 h<95 [0] [338 66 15 16 1 y_align 1 y_align] w<360 h<73 [0] [338 45 15 16 1 y_align 1 y_align] h<51 [0] [239 23 15 16 1 y_align 1 y_align] + set tcp.recmode + tcp_yanchor w<211 h<95 [0] [352 66 23 16 1 y_align 1 y_align] w<360 h<73 [0] [352 45 23 16 1 y_align 1 y_align] h<51 [0] [253 23 23 16 1 y_align 1 y_align] + set tcp.recinput + tcp_yanchor w<211 h<73 [0] [28 45 304 16 0 y_align 1 y_align] w<270 h<73 [0] [49 45 227 16 0 y_align 1 y_align] w<360 h<73 [0] [76 45 200 16 0 y_align 1 y_align] h<51 [0] [76 23 157 16 0 y_align 1 y_align] + set tcp.recinput.margin [4 0 16 0] + set tcp.env + tcp_yanchor w<270 h<73 [0] [7 45 15 16 0 y_align 0 y_align] w<360 h<73 [0] [7 45 42 16 0 y_align 0 y_align] h<51 [0] [7 23 42 16 0 y_align 0 y_align] + set tcp.fxin ?recarm tcp.io{w}==58 + tcp_yanchor w<211 [0] w<270 [254 0 36 18 1 y_align 1 y_align] w<360 [218 0 36 18 1 y_align 1 y_align] [100 0 36 18 0.5 y_align 0.5 y_align] [0] [0] + set tcp.io ?recarm tcp.io{w}==58 + [36] [tcp.io tcp.io 22 18 tcp.io tcp.io tcp.io tcp.io] + set tcp.pan + tcp_yanchor w<211 h<95 [0] [6 65 18 18 0 y_align 0 y_align] h<51 [0] [281 22 18 18 1 y_align 1 y_align] + set tcp.pan.label tcp.pan{x}>0 + [tcp.pan{w} 1] [tcp.pan tcp.pan 32 16 tcp.pan y_align tcp.pan y_align] [0] + set tcp.width trackpanmode>=4 + tcp_yanchor w<211 h<117 [0] [6 86 18 18 0 y_align 0 y_align] h<73 [0] [281 44 18 18 1 y_align 1 y_align] [0] + set tcp.width.label trackpanmode>=4 tcp.width{x}>0 + [tcp.width{w} 1] [tcp.width tcp.width 32 16 tcp.width y_align tcp.width y_align] [0] [0] + set tcp.fxparm w<360 w<211 trackpanmode>=4 [7 118 368 -24 0 0 1 1] [7 97 368 -3 0 0 1 1] [7 76 368 18 0 0 1 1] trackpanmode>=4 [7 76 368 18 0 0 1 1] [7 54 368 40 0 0 1 1] + EndLayout ; end of "Top Aligned" + + Layout "2. Silver Top Aligned" "silver-tcp" + set y_align h<51 [0 0 0 0 0 0.5 0 0.5] [0 0 0 0 0 0 0 0] + set tcp_yanchor w<211 h>=51 [0 8] . h>=51 [0 8] + set tcp.meter + tcp_yanchor w<211 h<51 [0] [342 26 29 9 1 y_align 1 y_align] [286 4 42 9 1 y_align 1 y_align] + set tcp.fx + tcp_yanchor w<211 h<73 [0] [338 44 24 18 1 y_align 1 y_align] h<51 [0] [338 22 24 18 1 y_align 1 y_align] + set tcp.fxbyp tcp.fx{x}>0 + [tcp.fx tcp.fx 13 18 1 y_align 1 y_align] [tcp.fx{w}] [0] + set tcp.recarm.fullmargin + tcp_yanchor [7 0 18 18 0 y_align 0 y_align] + set tcp.recarm + reverse_margin tcp.recarm.fullmargin + set tcp_label_fullmargin + tcp_yanchor w<211 [25 0 285 17 0 y_align 1 y_align] w<270 [25 0 229 17 0 y_align 1 y_align] w<360 [25 0 193 17 0 y_align 1 y_align] [25 0 75 17 0 y_align 0.5 y_align] + set tcp.label + + reverse_margin tcp_label_fullmargin margin_to_width + set tcp.io + tcp_yanchor w<211 [310 0 22 18 1 y_align 1 y_align] w<270 [254 0 22 18 1 y_align 1 y_align] w<360 [218 0 58 18 1 y_align 1 y_align] [100 0 58 18 0.5 y_align 0.5 y_align] ; additional definition below + set tcp.mute + tcp_yanchor [338 0 17 18 1 y_align 1 y_align] + set tcp.solo + tcp_yanchor [358 0 17 18 1 y_align 1 y_align] + set tcp.volume + tcp_yanchor w<211 h<51 [0] [7 23 322 16 0 y_align 1 y_align] w<270 h<51 [0] [7 23 266 16 0 y_align 1 y_align] w<360 h<51 [0] [7 23 241 16 0 y_align 1 y_align] [164 0 84 18 0.5 y_align 1 y_align] + set tcp.volume.label tcp.volume{x}>0 + [tcp.volume{w}] w<211 [tcp.volume tcp.volume 3 tcp.volume tcp.volume{rs} y_align tcp.volume{rs} y_align] w<270 [tcp.volume tcp.volume 3 tcp.volume tcp.volume{rs} y_align tcp.volume{rs} y_align] [tcp.volume tcp.volume 28 tcp.volume tcp.volume{rs} y_align tcp.volume{rs} y_align] + set tcp.phase + tcp_yanchor w<211 h<95 [0] [63 66 15 16 0 y_align 0 y_align] w<270 h<73 [0] [28 45 15 16 0 y_align 0 y_align] w<360 h<73 [0] [55 45 15 16 0 y_align 0 y_align] h<51 [0] [55 23 15 16 0 y_align 0 y_align] + set tcp.recmon + tcp_yanchor w<211 h<95 [0] [338 66 15 16 1 y_align 1 y_align] w<360 h<73 [0] [338 45 15 16 1 y_align 1 y_align] h<51 [0] [239 23 15 16 1 y_align 1 y_align] + set tcp.recmode + tcp_yanchor w<211 h<95 [0] [352 66 23 16 1 y_align 1 y_align] w<360 h<73 [0] [352 45 23 16 1 y_align 1 y_align] h<51 [0] [253 23 23 16 1 y_align 1 y_align] + set tcp.recinput + tcp_yanchor w<211 h<73 [0] [28 45 304 16 0 y_align 1 y_align] w<270 h<73 [0] [49 45 227 16 0 y_align 1 y_align] w<360 h<73 [0] [76 45 200 16 0 y_align 1 y_align] h<51 [0] [76 23 157 16 0 y_align 1 y_align] + set tcp.recinput.margin [4 0 16 0] + set tcp.env + tcp_yanchor w<270 h<73 [0] [7 45 15 16 0 y_align 0 y_align] w<360 h<73 [0] [7 45 42 16 0 y_align 0 y_align] h<51 [0] [7 23 42 16 0 y_align 0 y_align] + set tcp.fxin ?recarm tcp.io{w}==58 + tcp_yanchor w<211 [0] w<270 [254 0 36 18 1 y_align 1 y_align] w<360 [218 0 36 18 1 y_align 1 y_align] [100 0 36 18 0.5 y_align 0.5 y_align] [0] [0] + set tcp.io ?recarm tcp.io{w}==58 + [36] [tcp.io tcp.io 22 18 tcp.io tcp.io tcp.io tcp.io] + set tcp.pan + tcp_yanchor w<211 h<95 [0] [6 65 18 18 0 y_align 0 y_align] h<51 [0] [281 22 18 18 1 y_align 1 y_align] + set tcp.pan.label tcp.pan{x}>0 + [tcp.pan{w} 1] [tcp.pan tcp.pan 32 16 tcp.pan y_align tcp.pan y_align] [0] + set tcp.width trackpanmode>=4 + tcp_yanchor w<211 h<117 [0] [6 86 18 18 0 y_align 0 y_align] h<73 [0] [281 44 18 18 1 y_align 1 y_align] [0] + set tcp.width.label trackpanmode>=4 tcp.width{x}>0 + [tcp.width{w} 1] [tcp.width tcp.width 32 16 tcp.width y_align tcp.width y_align] [0] [0] + set tcp.fxparm w<360 w<211 trackpanmode>=4 [7 118 368 -24 0 0 1 1] [7 97 368 -3 0 0 1 1] [7 76 368 18 0 0 1 1] trackpanmode>=4 [7 76 368 18 0 0 1 1] [7 54 368 40 0 0 1 1] + EndLayout ; end of "Top Aligned (silver)" + + + Layout "3. Black Top Aligned" "black-tcp" + set y_align h<51 [0 0 0 0 0 0.5 0 0.5] [0 0 0 0 0 0 0 0] + set tcp_yanchor w<211 h>=51 [0 8] . h>=51 [0 8] + set tcp.meter + tcp_yanchor w<211 h<51 [0] [342 26 29 9 1 y_align 1 y_align] [286 4 42 9 1 y_align 1 y_align] + set tcp.fx + tcp_yanchor w<211 h<73 [0] [338 44 24 18 1 y_align 1 y_align] h<51 [0] [338 22 24 18 1 y_align 1 y_align] + set tcp.fxbyp tcp.fx{x}>0 + [tcp.fx tcp.fx 13 18 1 y_align 1 y_align] [tcp.fx{w}] [0] + set tcp.recarm.fullmargin + tcp_yanchor [7 0 18 18 0 y_align 0 y_align] + set tcp.recarm + reverse_margin tcp.recarm.fullmargin + set tcp_label_fullmargin + tcp_yanchor w<211 [25 0 285 17 0 y_align 1 y_align] w<270 [25 0 229 17 0 y_align 1 y_align] w<360 [25 0 193 17 0 y_align 1 y_align] [25 0 75 17 0 y_align 0.5 y_align] + set tcp.label + + reverse_margin tcp_label_fullmargin margin_to_width + set tcp.io + tcp_yanchor w<211 [310 0 22 18 1 y_align 1 y_align] w<270 [254 0 22 18 1 y_align 1 y_align] w<360 [218 0 58 18 1 y_align 1 y_align] [100 0 58 18 0.5 y_align 0.5 y_align] ; additional definition below + set tcp.mute + tcp_yanchor [338 0 17 18 1 y_align 1 y_align] + set tcp.solo + tcp_yanchor [358 0 17 18 1 y_align 1 y_align] + set tcp.volume + tcp_yanchor w<211 h<51 [0] [7 23 322 16 0 y_align 1 y_align] w<270 h<51 [0] [7 23 266 16 0 y_align 1 y_align] w<360 h<51 [0] [7 23 241 16 0 y_align 1 y_align] [164 0 84 18 0.5 y_align 1 y_align] + set tcp.volume.label tcp.volume{x}>0 + [tcp.volume{w}] w<211 [tcp.volume tcp.volume 3 tcp.volume tcp.volume{rs} y_align tcp.volume{rs} y_align] w<270 [tcp.volume tcp.volume 3 tcp.volume tcp.volume{rs} y_align tcp.volume{rs} y_align] [tcp.volume tcp.volume 28 tcp.volume tcp.volume{rs} y_align tcp.volume{rs} y_align] + set tcp.phase + tcp_yanchor w<211 h<95 [0] [63 66 15 16 0 y_align 0 y_align] w<270 h<73 [0] [28 45 15 16 0 y_align 0 y_align] w<360 h<73 [0] [55 45 15 16 0 y_align 0 y_align] h<51 [0] [55 23 15 16 0 y_align 0 y_align] + set tcp.recmon + tcp_yanchor w<211 h<95 [0] [338 66 15 16 1 y_align 1 y_align] w<360 h<73 [0] [338 45 15 16 1 y_align 1 y_align] h<51 [0] [239 23 15 16 1 y_align 1 y_align] + set tcp.recmode + tcp_yanchor w<211 h<95 [0] [352 66 23 16 1 y_align 1 y_align] w<360 h<73 [0] [352 45 23 16 1 y_align 1 y_align] h<51 [0] [253 23 23 16 1 y_align 1 y_align] + set tcp.recinput + tcp_yanchor w<211 h<73 [0] [28 45 304 16 0 y_align 1 y_align] w<270 h<73 [0] [49 45 227 16 0 y_align 1 y_align] w<360 h<73 [0] [76 45 200 16 0 y_align 1 y_align] h<51 [0] [76 23 157 16 0 y_align 1 y_align] + set tcp.recinput.margin [4 0 16 0] + set tcp.env + tcp_yanchor w<270 h<73 [0] [7 45 15 16 0 y_align 0 y_align] w<360 h<73 [0] [7 45 42 16 0 y_align 0 y_align] h<51 [0] [7 23 42 16 0 y_align 0 y_align] + set tcp.fxin ?recarm tcp.io{w}==58 + tcp_yanchor w<211 [0] w<270 [254 0 36 18 1 y_align 1 y_align] w<360 [218 0 36 18 1 y_align 1 y_align] [100 0 36 18 0.5 y_align 0.5 y_align] [0] [0] + set tcp.io ?recarm tcp.io{w}==58 + [36] [tcp.io tcp.io 22 18 tcp.io tcp.io tcp.io tcp.io] + set tcp.pan + tcp_yanchor w<211 h<95 [0] [6 65 18 18 0 y_align 0 y_align] h<51 [0] [281 22 18 18 1 y_align 1 y_align] + set tcp.pan.label tcp.pan{x}>0 + [tcp.pan{w} 1] [tcp.pan tcp.pan 32 16 tcp.pan y_align tcp.pan y_align] [0] + set tcp.width trackpanmode>=4 + tcp_yanchor w<211 h<117 [0] [6 86 18 18 0 y_align 0 y_align] h<73 [0] [281 44 18 18 1 y_align 1 y_align] [0] + set tcp.width.label trackpanmode>=4 tcp.width{x}>0 + [tcp.width{w} 1] [tcp.width tcp.width 32 16 tcp.width y_align tcp.width y_align] [0] [0] + set tcp.fxparm w<360 w<211 trackpanmode>=4 [7 118 368 -24 0 0 1 1] [7 97 368 -3 0 0 1 1] [7 76 368 18 0 0 1 1] trackpanmode>=4 [7 76 368 18 0 0 1 1] [7 54 368 40 0 0 1 1] + + set tcp.volume tcp.volume +set tcp.label.color [150 150 150] +set tcp.recinput.color [140 140 140] +set tcp.pan.color [190 190 190 191 0 0 0 0] +set tcp.pan.label.color [150 150 150] +set tcp.width.color [190 190 190 225 0 0 0 0] +set tcp.width.label.color [150 150 150] +set tcp.volume.label.color [150 150 150] + + EndLayout ; end of "Top Aligned (black)" + + Layout "1. Classic Shy Meter" + set y_align ?tcp_fxparms w<211 h<125 [0 0 0 0 0 0.5 0 0.5] [0 0 0 0 0 0 0 0] h<90 [0 0 0 0 0 0.5 0 0.5] [0 0 0 0 0 0 0 0] [0 0 0 0 0 0.5 0 0.5] + set tcp_yanchor w<211 h<117 h<95 h<73 h<51 [0 41] [0 30] [0 19] [0 8] trackpanmode>=4 [0 -3] [0 8] h<73 h<51 [0 41] [0 30] [0 19] h<73 h<51 [0 41] [0 30] + set tcp_yanchor ?tcp_fxparms w<211 h>=125 [0 8] . h>=90 [0 8] . + set tcp.meter + tcp_yanchor w<211 h<73 [0] [11 48 261 9 0 y_align 1 y_align] h<73 [0] [11 48 261 9 0 y_align 1 y_align] + set tcp.fx + tcp_yanchor h<51 [0] [338 22 24 18 1 y_align 1 y_align] + set tcp.fxbyp tcp.fx{x}>0 + [tcp.fx tcp.fx 13 18 1 y_align 1 y_align] [tcp.fx{w}] [0] + set tcp.recarm.fullmargin + tcp_yanchor [7 0 18 18 0 y_align 0 y_align] + set tcp.recarm + reverse_margin tcp.recarm.fullmargin + set tcp_label_fullmargin + tcp_yanchor w<211 [25 0 285 17 0 y_align 1 y_align] w<270 [25 0 229 17 0 y_align 1 y_align] [25 0 193 17 0 y_align 1 y_align] + set tcp.label + + reverse_margin tcp_label_fullmargin margin_to_width + set tcp.io + tcp_yanchor w<211 [310 0 22 18 1 y_align 1 y_align] w<270 [254 0 22 18 1 y_align 1 y_align] [218 0 58 18 1 y_align 1 y_align] ; additional definition below + set tcp.mute + tcp_yanchor [338 0 17 18 1 y_align 1 y_align] + set tcp.solo + tcp_yanchor [358 0 17 18 1 y_align 1 y_align] + set tcp.volume + tcp_yanchor w<211 h<73 [0] [281 44 18 18 1 y_align 1 y_align] [281 0 18 18 1 y_align 1 y_align] + set tcp.volume.label tcp.volume{x}>0 + [tcp.volume{w}] [tcp.volume tcp.volume 33 tcp.volume tcp.volume{rs} y_align tcp.volume{rs} y_align] [0] + + set tcp.volume.color [55 55 55 0] + set tcp.pan.color [55 55 55 0] + set tcp.width.color [55 55 55 0] + + set tcp.phase + tcp_yanchor w<211 h<95 [0] [63 66 15 16 0 y_align 0 y_align] w<270 h<51 [0] [28 23 15 16 0 y_align 0 y_align] w<360 h<51 [0] [55 23 15 16 0 y_align 0 y_align] h<51 [0] [55 23 15 16 0 y_align 0 y_align] + set tcp.recmon + tcp_yanchor h<73 [0] [338 45 15 16 1 y_align 1 y_align] + set tcp.recmode + tcp_yanchor h<73 [0] [352 45 23 16 1 y_align 1 y_align] + set tcp.recinput + tcp_yanchor w<211 h<51 [0] [28 23 304 16 0 y_align 1 y_align] w<270 h<51 [0] [49 23 227 16 0 y_align 1 y_align] h<51 [0] [76 23 200 16 0 y_align 1 y_align] + set tcp.env + tcp_yanchor w<270 h<51 [0] [7 23 15 16 0 y_align 0 y_align] w<360 h<51 [0] [7 23 42 16 0 y_align 0 y_align] h<51 [0] [7 23 42 16 0 y_align 0 y_align] + set tcp.fxin ?recarm tcp.io{w}==58 + tcp_yanchor w<211 [0] w<270 [254 0 36 18 1 y_align 1 y_align] [218 0 36 18 1 y_align 1 y_align] [0] [0] + set tcp.io ?recarm tcp.io{w}==58 + [36] [tcp.io tcp.io 22 18 tcp.io tcp.io tcp.io tcp.io] + set tcp.pan + tcp_yanchor w<211 h<95 [0] [6 65 18 18 0 y_align 0 y_align] h<51 [0] [281 22 18 18 1 y_align 1 y_align] + set tcp.pan.label tcp.pan{x}>0 + [tcp.pan{w} 1] [tcp.pan tcp.pan 32 16 tcp.pan y_align tcp.pan y_align] [0] + set tcp.width trackpanmode>=4 + tcp_yanchor w<211 h<117 [0] [6 86 18 18 0 y_align 0 y_align] h<73 [0] [281 44 18 18 1 y_align 1 y_align] [0] + set tcp.width.label trackpanmode>=4 tcp.width{x}>0 + [tcp.width{w} 1] [tcp.width tcp.width 32 16 tcp.width y_align tcp.width y_align] [0] [0] + set tcp.fxparm w<211 trackpanmode>=4 [7 118 368 -24 0 0 1 1] [7 97 368 -3 0 0 1 1] [7 76 368 18 0 0 1 1] + EndLayout ; end of "Shy Meter" + + Layout "2. Silver Shy Meter" "silver-tcp" + set y_align ?tcp_fxparms w<211 h<125 [0 0 0 0 0 0.5 0 0.5] [0 0 0 0 0 0 0 0] h<90 [0 0 0 0 0 0.5 0 0.5] [0 0 0 0 0 0 0 0] [0 0 0 0 0 0.5 0 0.5] + set tcp_yanchor w<211 h<117 h<95 h<73 h<51 [0 41] [0 30] [0 19] [0 8] trackpanmode>=4 [0 -3] [0 8] h<73 h<51 [0 41] [0 30] [0 19] h<73 h<51 [0 41] [0 30] + set tcp_yanchor ?tcp_fxparms w<211 h>=125 [0 8] . h>=90 [0 8] . + set tcp.meter + tcp_yanchor w<211 h<73 [0] [11 48 261 9 0 y_align 1 y_align] h<73 [0] [11 48 261 9 0 y_align 1 y_align] + set tcp.fx + tcp_yanchor h<51 [0] [338 22 24 18 1 y_align 1 y_align] + set tcp.fxbyp tcp.fx{x}>0 + [tcp.fx tcp.fx 13 18 1 y_align 1 y_align] [tcp.fx{w}] [0] + set tcp.recarm.fullmargin + tcp_yanchor [7 0 18 18 0 y_align 0 y_align] + set tcp.recarm + reverse_margin tcp.recarm.fullmargin + set tcp_label_fullmargin + tcp_yanchor w<211 [25 0 285 17 0 y_align 1 y_align] w<270 [25 0 229 17 0 y_align 1 y_align] [25 0 193 17 0 y_align 1 y_align] + set tcp.label + + reverse_margin tcp_label_fullmargin margin_to_width + set tcp.io + tcp_yanchor w<211 [310 0 22 18 1 y_align 1 y_align] w<270 [254 0 22 18 1 y_align 1 y_align] [218 0 58 18 1 y_align 1 y_align] ; additional definition below + set tcp.mute + tcp_yanchor [338 0 17 18 1 y_align 1 y_align] + set tcp.solo + tcp_yanchor [358 0 17 18 1 y_align 1 y_align] + set tcp.volume + tcp_yanchor w<211 h<73 [0] [281 44 18 18 1 y_align 1 y_align] [281 0 18 18 1 y_align 1 y_align] + set tcp.volume.label tcp.volume{x}>0 + [tcp.volume{w}] [tcp.volume tcp.volume 33 tcp.volume tcp.volume{rs} y_align tcp.volume{rs} y_align] [0] + set tcp.volume.color [55 55 55 0] + set tcp.pan.color [55 55 55 0] + set tcp.width.color [55 55 55 0] + set tcp.phase + tcp_yanchor w<211 h<95 [0] [63 66 15 16 0 y_align 0 y_align] w<270 h<51 [0] [28 23 15 16 0 y_align 0 y_align] w<360 h<51 [0] [55 23 15 16 0 y_align 0 y_align] h<51 [0] [55 23 15 16 0 y_align 0 y_align] + set tcp.recmon + tcp_yanchor h<73 [0] [338 45 15 16 1 y_align 1 y_align] + set tcp.recmode + tcp_yanchor h<73 [0] [352 45 23 16 1 y_align 1 y_align] + set tcp.recinput + tcp_yanchor w<211 h<51 [0] [28 23 304 16 0 y_align 1 y_align] w<270 h<51 [0] [49 23 227 16 0 y_align 1 y_align] h<51 [0] [76 23 200 16 0 y_align 1 y_align] + set tcp.env + tcp_yanchor w<270 h<51 [0] [7 23 15 16 0 y_align 0 y_align] w<360 h<51 [0] [7 23 42 16 0 y_align 0 y_align] h<51 [0] [7 23 42 16 0 y_align 0 y_align] + set tcp.fxin ?recarm tcp.io{w}==58 + tcp_yanchor w<211 [0] w<270 [254 0 36 18 1 y_align 1 y_align] [218 0 36 18 1 y_align 1 y_align] [0] [0] + set tcp.io ?recarm tcp.io{w}==58 + [36] [tcp.io tcp.io 22 18 tcp.io tcp.io tcp.io tcp.io] + set tcp.pan + tcp_yanchor w<211 h<95 [0] [6 65 18 18 0 y_align 0 y_align] h<51 [0] [281 22 18 18 1 y_align 1 y_align] + set tcp.pan.label tcp.pan{x}>0 + [tcp.pan{w} 1] [tcp.pan tcp.pan 32 16 tcp.pan y_align tcp.pan y_align] [0] + set tcp.width trackpanmode>=4 + tcp_yanchor w<211 h<117 [0] [6 86 18 18 0 y_align 0 y_align] h<73 [0] [281 44 18 18 1 y_align 1 y_align] [0] + set tcp.width.label trackpanmode>=4 tcp.width{x}>0 + [tcp.width{w} 1] [tcp.width tcp.width 32 16 tcp.width y_align tcp.width y_align] [0] [0] + set tcp.fxparm w<211 trackpanmode>=4 [7 118 368 -24 0 0 1 1] [7 97 368 -3 0 0 1 1] [7 76 368 18 0 0 1 1] + EndLayout ; end of "Shy Meter (silver)" + + Layout "3. Black Shy Meter" "black-tcp" + set y_align ?tcp_fxparms w<211 h<125 [0 0 0 0 0 0.5 0 0.5] [0 0 0 0 0 0 0 0] h<90 [0 0 0 0 0 0.5 0 0.5] [0 0 0 0 0 0 0 0] [0 0 0 0 0 0.5 0 0.5] + set tcp_yanchor w<211 h<117 h<95 h<73 h<51 [0 41] [0 30] [0 19] [0 8] trackpanmode>=4 [0 -3] [0 8] h<73 h<51 [0 41] [0 30] [0 19] h<73 h<51 [0 41] [0 30] + set tcp_yanchor ?tcp_fxparms w<211 h>=125 [0 8] . h>=90 [0 8] . + set tcp.meter + tcp_yanchor w<211 h<73 [0] [11 48 261 9 0 y_align 1 y_align] h<73 [0] [11 48 261 9 0 y_align 1 y_align] + + ;set tcp.meter.readout.color [120 120 120 140 255 255 255 200] [0 0 0 0 0 0 0 0] + ;set tcp.meter.scale.color.unlit.left [0 0 0 0 0 0 0 0] [80 80 80 100 0 0 0 255] + ;set tcp.meter.scale.color.unlit.right [0 0 0 0 0 0 0 0] [120 120 120 100 0 0 0 255] + ;set tcp.meter.scale.color.lit.left [0 0 0 0 0 0 0 0] [150 150 150 255 0 0 0 50] + ;set tcp.meter.scale.color.lit.right [0 0 0 0 0 0 0 0] [150 150 150 255 0 0 0 50] + + + set tcp.fx + tcp_yanchor h<51 [0] [338 22 24 18 1 y_align 1 y_align] + set tcp.fxbyp tcp.fx{x}>0 + [tcp.fx tcp.fx 13 18 1 y_align 1 y_align] [tcp.fx{w}] [0] + set tcp.recarm.fullmargin + tcp_yanchor [7 0 18 18 0 y_align 0 y_align] + set tcp.recarm + reverse_margin tcp.recarm.fullmargin + set tcp_label_fullmargin + tcp_yanchor w<211 [25 0 285 17 0 y_align 1 y_align] w<270 [25 0 229 17 0 y_align 1 y_align] [25 0 193 17 0 y_align 1 y_align] + set tcp.label + + reverse_margin tcp_label_fullmargin margin_to_width + set tcp.io + tcp_yanchor w<211 [310 0 22 18 1 y_align 1 y_align] w<270 [254 0 22 18 1 y_align 1 y_align] [218 0 58 18 1 y_align 1 y_align] ; additional definition below + set tcp.mute + tcp_yanchor [338 0 17 18 1 y_align 1 y_align] + set tcp.solo + tcp_yanchor [358 0 17 18 1 y_align 1 y_align] + set tcp.volume + tcp_yanchor w<211 h<73 [0] [281 44 18 18 1 y_align 1 y_align] [281 0 18 18 1 y_align 1 y_align] + set tcp.volume.label tcp.volume{x}>0 + [tcp.volume{w}] [tcp.volume tcp.volume 33 tcp.volume tcp.volume{rs} y_align tcp.volume{rs} y_align] [0] + set tcp.phase + tcp_yanchor w<211 h<95 [0] [63 66 15 16 0 y_align 0 y_align] w<270 h<51 [0] [28 23 15 16 0 y_align 0 y_align] w<360 h<51 [0] [55 23 15 16 0 y_align 0 y_align] h<51 [0] [55 23 15 16 0 y_align 0 y_align] + set tcp.recmon + tcp_yanchor h<73 [0] [338 45 15 16 1 y_align 1 y_align] + set tcp.recmode + tcp_yanchor h<73 [0] [352 45 23 16 1 y_align 1 y_align] + set tcp.recinput + tcp_yanchor w<211 h<51 [0] [28 23 304 16 0 y_align 1 y_align] w<270 h<51 [0] [49 23 227 16 0 y_align 1 y_align] h<51 [0] [76 23 200 16 0 y_align 1 y_align] + set tcp.env + tcp_yanchor w<270 h<51 [0] [7 23 15 16 0 y_align 0 y_align] w<360 h<51 [0] [7 23 42 16 0 y_align 0 y_align] h<51 [0] [7 23 42 16 0 y_align 0 y_align] + set tcp.fxin ?recarm tcp.io{w}==58 + tcp_yanchor w<211 [0] w<270 [254 0 36 18 1 y_align 1 y_align] [218 0 36 18 1 y_align 1 y_align] [0] [0] + set tcp.io ?recarm tcp.io{w}==58 + [36] [tcp.io tcp.io 22 18 tcp.io tcp.io tcp.io tcp.io] + set tcp.pan + tcp_yanchor w<211 h<95 [0] [6 65 18 18 0 y_align 0 y_align] h<51 [0] [281 22 18 18 1 y_align 1 y_align] + set tcp.pan.label tcp.pan{x}>0 + [tcp.pan{w} 1] [tcp.pan tcp.pan 32 16 tcp.pan y_align tcp.pan y_align] [0] + set tcp.width trackpanmode>=4 + tcp_yanchor w<211 h<117 [0] [6 86 18 18 0 y_align 0 y_align] h<73 [0] [281 44 18 18 1 y_align 1 y_align] [0] + set tcp.width.label trackpanmode>=4 tcp.width{x}>0 + [tcp.width{w} 1] [tcp.width tcp.width 32 16 tcp.width y_align tcp.width y_align] [0] [0] + set tcp.fxparm w<211 trackpanmode>=4 [7 118 368 -24 0 0 1 1] [7 97 368 -3 0 0 1 1] [7 76 368 18 0 0 1 1] + + set tcp.volume tcp.volume +set tcp.label.color [150 150 150] +set tcp.recinput.color [140 140 140] +set tcp.pan.color [190 190 190 191 0 0 0 0] +set tcp.pan.label.color [150 150 150] +set tcp.width.color [190 190 190 225 0 0 0 0] +set tcp.width.label.color [150 150 150] +set tcp.volume.label.color [150 150 150] + + + + + EndLayout ; end of "Shy Meter (black)" + + + + Layout "1. Classic Vertical" "classic-tcp-vertical" + clear tcp.* + front tcp.io tcp.volume + set tcp.size [400 100 128 88] + set tcp.foldercomp [382 0 18 19 1 0 1 0] + set tcp.folder h<32 [0] [382 86 18 14 1 1 1 1] + set tcp.trackidx [382 41 18 18 1 0.5 1 0.5] + set tcp.trackidx.margin [0 0 0 0 0.5] + set tcp.trackidx.color ?recarm [200 0 0] [100 100 100] + set tcp.toosmall [10 10 10 10 0 0 0 0] + set tcp.volume h>153 [6 21 19 71 0 0 0 1] h>87 [6 10 19 82 0 0 0 1] [4 29 23 23 0 0.5 0 0.5] + set tcp.volume.label h>153 [5 7 35 14 0 0 0 0] h>87 [5 7 35 3 0 0 0 0] [5 30 35 3 0 0.5 0 0.5] + set tcp.volume.label.color [179 179 179] + set tcp.volume.label.margin h>153 [1 5 0 0 0.5] [52 5 53 0 0.5] + set tcp.meter h>153 [25 25 12 64 0 0 0 1] h>87 [25 14 12 75 0 0 0 1] [25 37 12 28 0 0.5 0 0.5] + set tcp.meter.vu.div [3] + set tcp.recarm h>87 [39 60 20 33 0 1 0 1] [39 36 20 33 0 0.5 0 0.5] + set tcp.column.anchor [46 7] + set tcp.mute h>87 + tcp.column.anchor [0 0 17 18 0 0 0 0] [65 31 17 18 0 0.5 0 0.5] + set tcp.solo h>87 + tcp.column.anchor [0 21 17 18 0 0 0 0] [65 51 17 18 0 0.5 0 0.5] + set tcp.recmon + tcp.column.anchor h>98 [0 42 17 14 0 0 0 0] [0] + set tcp.recmode + tcp.column.anchor h>153 [0 54 17 22 0 0 0 0] [0] + set tcp.env + tcp.column.anchor h>164 [0 79 17 26 0 0 0 0] h>153 [0 79 17 14 0 0 0 0] h>115 [0 59 17 14 0 0 0 0] [0] + set tcp.phase + tcp.column.anchor h>164 [1 108 15 16 0 0 0 0] h>153 [1 96 15 16 0 0 0 0] h>133 [1 76 15 16 0 0 0 0] [0] + set tcp.pan h<128 h<88 w<186 [0] [119 34 22 22 0 0.5 0 0.5] w<167 [0] [100 8 22 22 0 0 0 0] w<137 [0] [70 45 22 22 0 0 0 0] + set tcp.pan.label tcp.pan{x}<1 [0] + [-6 27] [tcp.pan tcp.pan 34 7 0 tcp.pan 0 tcp.pan] + set tcp.pan.label.margin [0 0 0 0 0.5] + set tcp.pan.label.color [96 92 85] + set tcp.width trackpanmode<4 [0] h<128 h<88 w<218 [0] [149 34 22 22 0 0.5 0 0.5] w<167 [0] [100 49 22 22 0 0 0 0] w<137 [0] [70 86 22 22 0 0 0 0] + set tcp.width.label tcp.width{x}<1 [0] + [-6 27] [tcp.width tcp.width 34 7 0 tcp.width 0 tcp.width] + set tcp.width.label.margin [0 0 0 0 0.5] + set tcp.width.label.color [96 92 85] + set tcp.fxbyp h>87 w<137 [0] [69 7 24 14 0 0 0 0] w<157 [0] [88 35 24 14 0 0.5 0 0.5] + set tcp.fx tcp.fxbyp{x}>0 + [0 tcp.fxbyp{h}] [tcp.fxbyp tcp.fxbyp 24 17 0 tcp.fxbyp 0 tcp.fxbyp] [0] + set tcp.fxparm h<128 h<88 w<297 [0] [179 36 176 26 0 0.5 1 0.5] w<297 [0] [130 8 202 85 0 0 1 1] w<239 [0] [100 8 232 85 0 0 1 1] + set tcp.io h>164 !recarm [362 0 19 59 1 0 1 0] [362 0 19 22 1 0 1 0] h>115 [362 0 19 22 1 0 1 0] [0] + set tcp.fxin h>164 !recarm [0] [362 21 19 37 1 0 1 0] [0] + set tcp_recinput_toothin h<128 [190] [160] + set tcp.recinput h>87 w164 [363 58 18 42 1 0 1 1] h>115 [363 21 18 79 1 0 1 1] [363 0 18 100 1 0 1 1] + set tcp.label.margin [3 2 3 2 0.5] + set tcp.label.color [191 191 191] + EndLayout ; end of "Vertical" + + Layout "1. Classic Vertical" "vertical" + clear tcp.* + front tcp.io tcp.volume + set tcp.size [400 100 128 88] + set tcp.foldercomp [382 0 18 19 1 0 1 0] + set tcp.folder h<32 [0] [382 86 18 14 1 1 1 1] + set tcp.trackidx [382 41 18 18 1 0.5 1 0.5] + set tcp.trackidx.margin [0 0 0 0 0.5] + set tcp.trackidx.color ?recarm [200 0 0] [100 100 100] + set tcp.toosmall [10 10 10 10 0 0 0 0] + set tcp.volume h>153 [6 21 19 71 0 0 0 1] h>87 [6 10 19 82 0 0 0 1] [4 29 23 23 0 0.5 0 0.5] + set tcp.volume.label h>153 [5 7 35 14 0 0 0 0] h>87 [5 7 35 3 0 0 0 0] [5 30 35 3 0 0.5 0 0.5] + set tcp.volume.label.color [179 179 179] + set tcp.volume.label.margin h>153 [1 5 0 0 0.5] [52 5 53 0 0.5] + set tcp.meter h>153 [25 25 12 64 0 0 0 1] h>87 [25 14 12 75 0 0 0 1] [25 37 12 28 0 0.5 0 0.5] + set tcp.meter.vu.div [3] + set tcp.recarm h>87 [39 60 20 33 0 1 0 1] [39 36 20 33 0 0.5 0 0.5] + set tcp.column.anchor [46 7] + set tcp.mute h>87 + tcp.column.anchor [0 0 17 18 0 0 0 0] [65 31 17 18 0 0.5 0 0.5] + set tcp.solo h>87 + tcp.column.anchor [0 21 17 18 0 0 0 0] [65 51 17 18 0 0.5 0 0.5] + set tcp.recmon + tcp.column.anchor h>98 [0 42 17 14 0 0 0 0] [0] + set tcp.recmode + tcp.column.anchor h>153 [0 54 17 22 0 0 0 0] [0] + set tcp.env + tcp.column.anchor h>164 [0 79 17 26 0 0 0 0] h>153 [0 79 17 14 0 0 0 0] h>115 [0 59 17 14 0 0 0 0] [0] + set tcp.phase + tcp.column.anchor h>164 [1 108 15 16 0 0 0 0] h>153 [1 96 15 16 0 0 0 0] h>133 [1 76 15 16 0 0 0 0] [0] + set tcp.pan h<128 h<88 w<186 [0] [119 34 22 22 0 0.5 0 0.5] w<167 [0] [100 8 22 22 0 0 0 0] w<137 [0] [70 45 22 22 0 0 0 0] + set tcp.pan.label tcp.pan{x}<1 [0] + [-6 27] [tcp.pan tcp.pan 34 7 0 tcp.pan 0 tcp.pan] + set tcp.pan.label.margin [0 0 0 0 0.5] + set tcp.pan.label.color [96 92 85] + set tcp.width trackpanmode<4 [0] h<128 h<88 w<218 [0] [149 34 22 22 0 0.5 0 0.5] w<167 [0] [100 49 22 22 0 0 0 0] w<137 [0] [70 86 22 22 0 0 0 0] + set tcp.width.label tcp.width{x}<1 [0] + [-6 27] [tcp.width tcp.width 34 7 0 tcp.width 0 tcp.width] + set tcp.width.label.margin [0 0 0 0 0.5] + set tcp.width.label.color [96 92 85] + set tcp.fxbyp h>87 w<137 [0] [69 7 24 14 0 0 0 0] w<157 [0] [88 35 24 14 0 0.5 0 0.5] + set tcp.fx tcp.fxbyp{x}>0 + [0 tcp.fxbyp{h}] [tcp.fxbyp tcp.fxbyp 24 17 0 tcp.fxbyp 0 tcp.fxbyp] [0] + set tcp.fxparm h<128 h<88 w<297 [0] [179 36 176 26 0 0.5 1 0.5] w<297 [0] [130 8 202 85 0 0 1 1] w<239 [0] [100 8 232 85 0 0 1 1] + set tcp.io h>164 !recarm [362 0 19 59 1 0 1 0] [362 0 19 22 1 0 1 0] h>115 [362 0 19 22 1 0 1 0] [0] + set tcp.fxin h>164 !recarm [0] [362 21 19 37 1 0 1 0] [0] + set tcp_recinput_toothin h<128 [190] [160] + set tcp.recinput h>87 w164 [363 58 18 42 1 0 1 1] h>115 [363 21 18 79 1 0 1 1] [363 0 18 100 1 0 1 1] + set tcp.label.margin [3 2 3 2 0.5] + set tcp.label.color [191 191 191] + EndLayout ; end of "Vertical" + + + +Layout "1. Classic Big Meter" "classic-mcp-big-meter" +clear tcp.* +set tcp.size [400 100 80 .] +set tcp.foldercomp [382 0 18 19 1 0 1 0] +set tcp.folder h<32 [0] [382 86 18 14 1 1 1 1] +set tcp.trackidx [382 41 18 18 1 0.5 1 0.5] +set tcp.trackidx.margin [0 0 0 0 0.5] +set tcp.trackidx.color ?recarm [220 26 0] [100 100 100] +set tcp.io h>164 !recarm [362 0 19 59 1 0 1 0] [362 0 19 22 1 0 1 0] h>115 [362 0 19 22 1 0 1 0] [0] +set tcp.fxin h>164 !recarm [0] [362 21 19 37 1 0 1 0] [0] +set tcp.meter h>34 [12 12 339 76 0 0 1 1] h>4 [12 45 339 10 0 0.5 1 0.5] [12 -1 339 4 0 0 1 0] +set tcp.meter.vu.div [2] +set tcp.meter.readout.color h>23 [255 255 255 140 255 255 255 200] [0 0 0 0 0 0 0 0] +set tcp.meter.scale.color.unlit.top h<20 [0 0 0 0 0 0 0 0] [255 255 255 75 0 0 0 100] +set tcp.meter.scale.color.unlit.bottom h<20 [0 0 0 0 0 0 0 0] [255 255 255 75 0 0 0 100] +set tcp.meter.scale.color.lit.top h<20 [0 0 0 0 0 0 0 0] [255 255 255 255 0 0 0 50] +set tcp.meter.scale.color.lit.bottom h<20 [0 0 0 0 0 0 0 0] [255 255 255 255 0 0 0 50] +set tcp.meter.inputlabel.color [255 255 255 150] +set tcp.meter.inputlabelbox.color [255 255 255 25 255 255 255 50] + +set tcp.label h>164 [363 58 18 42 1 0 1 1] h>115 [363 21 18 79 1 0 1 1] [363 0 18 100 1 0 1 1] +set tcp.label.margin [3 2 3 2 0.5] +set tcp.label.color [191 191 191] + +EndLayout ; end of "Big Meter" + + +; ------------------------------------------- + + +clear master.tcp.* +set master.tcp.size [400 100 160 48] +front master.tcp.volume.label master.tcp.pan.label +set tcp_master_yanchor ?tcp_fxparms [0 8] [0 19] +set master_y_align ?tcp_fxparms [0 0 0 0 0 0 0 0] [0 0 0 0 0 0.5 0 0.5] +set master.tcp.meter + tcp_master_yanchor [11 4 295 9 0 master_y_align 1 master_y_align] +set master.tcp.fx + tcp_master_yanchor [338 23 24 18 1 master_y_align 1 master_y_align] +set master.tcp.fxbyp master.tcp.fx{x}>0 + [master.tcp.fx master.tcp.fx 13 18 1 master_y_align 1 master_y_align] [master.tcp.fx{w}] [0] +set master.tcp.io + + [master.tcp.meter master.tcp.meter 22 18 1 master_y_align 1 master_y_align] [4 -4] [master.tcp.meter{w}] +set master.tcp.mono + tcp_master_yanchor [338 46 36 16 1 master_y_align 1 master_y_align] +set master.tcp.mute + tcp_master_yanchor [338 0 17 18 1 master_y_align 1 master_y_align] +set master.tcp.solo + tcp_master_yanchor [358 0 17 18 1 master_y_align 1 master_y_align] +set master.tcp.env + tcp_master_yanchor w<172 [7 46 15 16 0 master_y_align 0 master_y_align] [7 46 42 16 0 master_y_align 0 master_y_align] +set master.tcp.volume + tcp_master_yanchor w<211 [7 23 323 18 0 master_y_align 1 master_y_align] [7 23 292 18 0 master_y_align 1 master_y_align] +set master.tcp.volume.label master.tcp.volume{x}>0 + [master.tcp.volume{w}] w<211 [master.tcp.volume master.tcp.volume 3 master.tcp.volume master.tcp.volume{rs} master_y_align master.tcp.volume{rs} master_y_align] [master.tcp.volume master.tcp.volume 33 master.tcp.volume master.tcp.volume{rs} master_y_align master.tcp.volume{rs} master_y_align] +set master.tcp.volume.label.color [179 179 179] +set master.tcp.volume.label.margin [1 1 3 0 1] +set master.tcp.pan + tcp_master_yanchor [281 45 18 18 1 master_y_align 1 master_y_align] +set master.tcp.pan.color [51 51 51 191 0 0 0 0] +set master.tcp.pan.label + [master.tcp.pan{w} 1] [master.tcp.pan master.tcp.pan 32 16 master.tcp.pan master_y_align master.tcp.pan master_y_align] +set master.tcp.pan.label.color [221 224 224] +set master.tcp.pan.label.margin [0 0 3 0 1] +set master.tcp.label [382 0 18 100 1 0 1 1] +set master.tcp.label.margin [0 0 0 0 0.5] +set master.tcp.label.color tcp.trackidx.color +set master.tcp.fxparm [7 76 368 18 0 0 1 1] + + + Layout "2. Silver Master Track" "silver-tcp" + set master.tcp.volume master.tcp.volume + EndLayout ; end of "- Silver Master Track" + + Layout "3. Black Master Track" "black-tcp" + set master.tcp.volume master.tcp.volume + EndLayout ; end of "- Black Master Track" + + + Layout "1. Classic Top Aligned" + set tcp_master_yanchor [0 8] + set master.tcp.meter + tcp_master_yanchor [11 4 295 9 0 0 1 0] + set master.tcp.fx + tcp_master_yanchor [338 23 24 18 1 0 1 0] + set master.tcp.fxbyp master.tcp.fx{x}>0 + [master.tcp.fx master.tcp.fx 13 18 1 0 1 0] [master.tcp.fx{w}] [0] + set master.tcp.io + + [master.tcp.meter master.tcp.meter 22 18 1 0 1 0] [4 -4] [master.tcp.meter{w}] + set master.tcp.mono + tcp_master_yanchor [338 46 36 16 1 0 1 0] + set master.tcp.mute + tcp_master_yanchor [338 0 17 18 1 0 1 0] + set master.tcp.solo + tcp_master_yanchor [358 0 17 18 1 0 1 0] + set master.tcp.env + tcp_master_yanchor w<172 [7 46 15 16 0 0 0 0] [7 46 42 16 0 0 0 0] + set master.tcp.volume + tcp_master_yanchor w<211 [7 23 323 18 0 0 1 0] [7 23 292 18 0 0 1 0] + set master.tcp.volume.label master.tcp.volume{x}>0 + [master.tcp.volume{w}] w<211 [master.tcp.volume master.tcp.volume 3 master.tcp.volume master.tcp.volume{rs} 0 master.tcp.volume{rs} 0] [master.tcp.volume master.tcp.volume 33 master.tcp.volume master.tcp.volume{rs} 0 master.tcp.volume{rs} 0] + set master.tcp.pan + tcp_master_yanchor [281 45 18 18 1 0 1 0] + set master.tcp.pan.label + [master.tcp.pan{w} 1] [master.tcp.pan master.tcp.pan 32 16 master.tcp.pan 0 master.tcp.pan 0] + EndLayout ; end of "Top Aligned" + + Layout "1. Classic Big Meter" "classic-mcp-big-meter" + clear master.tcp.* + set master.tcp.size [400 100 160 48] + set master.tcp.meter h>34 [12 12 358 76 0 0 1 1] [12 45 358 10 0 0.5 1 0.5] + set master.tcp.label [382 0 18 100 1 0 1 1] + EndLayout ; end of "Big Meter" + + + +; -------------------------------------------------------------------------------------- + +clear envcp.* +set envcp.size [400 100 160] +set envcp.margin +:maxfolderdepth:1 [13 0 0 0] +set envcp.margin +:folderdepth:1 [-13 0 0 0] +set envcp.yanchor h<51 [0 41] [0 30] +set envcp.arm + envcp.yanchor [7 0 18 18 0 0.5 0 0.5] +set envcp.label + envcp.yanchor w<370 w<281 [25 0 288 18 0 0.5 1 0.5] [25 0 238 18 0 0.5 1 0.5] [25 0 117 18 0 0.5 0.5 0.5] +set envcp.label.margin [3 2 3 4] +set envcp.label.color [191 191 191] +set envcp.bypass + envcp.yanchor w>280 [269 0 19 18 1 0.5 1 0.5] h<51 [0] [331 24 19 18 1 0.5 1 0.5] +set envcp.hide + envcp.yanchor w>280 [288 0 25 18 1 0.5 1 0.5] h<51 [0] [350 24 25 18 1 0.5 1 0.5] +set envcp.mod + envcp.yanchor w>280 h<51 [0] [269 24 57 18 1 0.5 1 0.5] h<51 [0] [280 24 20 18 1 0.5 1 0.5] +set envcp.learn + envcp.yanchor w>280 h<51 [0] [332 24 43 18 1 0.5 1 0.5] h<51 [0] [306 24 19 18 1 0.5 1 0.5] +set envcp.fader + envcp.yanchor w<370 w<281 w<240 h<51 [0] [18 25 16 16 0 0.5 0 0.5] h<51 [0] envcp_type==4 [25 24 248 18 0 0.5 1 0.5] [25 24 299 18 0 0.5 1 0.5] h<51 [0] [25 24 238 18 0 0.5 1 0.5] [148 0 115 18 0.5 0.5 1 0.5] +set envcp.value + envcp.yanchor [319 -1 56 20 1 0.5 1 0.5] +set envcp.value.margin [0 0 0 0 1] +set envcp.value.color [48 51 51] + +; -------------------------------------------------------------------------------------- + + +clear mcp.* + + +set mcp.size [73 319] +front mcp.width.label mcp.pan.label mcp.recmon mcp.volume.label +set mcp.folder folderstate<0 [66 300 7 18 0 1 0 1] [0 300 18 18 0 1 0 1] + +set mcp.trackidx [1 35 70 18 0 0 0 0] +set mcp.trackidx.margin [2 0 2 0 0.5] +set mcp.trackidx.color ?recarm [200 0 0] [100 100 100] + +set mcp_column_anchor [48 105] +set mcp.mute + mcp_column_anchor [0 0 17 18 0 0 0 0] +set mcp.solo + mcp_column_anchor [0 21 17 18 0 0 0 0] +set mcp.recmon + mcp_column_anchor h>273 [0 42 17 14 0 0 0 0] [0 42 17 14 0 0 0 0] +set mcp.recmode + mcp_column_anchor h>273 [0 54 17 22 0 0 0 0] [0] +set mcp.env + mcp_column_anchor h>283 [0 79 17 26 0 0 0 0] h>273 [0 79 17 14 0 0 0 0] h>233 [0 59 17 14 0 0 0 0] [0] +set mcp.phase + mcp_column_anchor h>283 [1 108 15 16 0 0 0 0] h>273 [1 96 15 16 0 0 0 0] h>251 [1 76 15 16 0 0 0 0] [0] +set mcp.recarm [41 260 20 33 0 1 0 1] +set mcp.meter.vu.div [2 1] +set mcp.meter h>273 [27 123 12 166 0 0 0 1] [27 112 12 177 0 0 0 1] +set mcp.meter.readout.color [255 255 255 140 255 255 255 200] +set mcp.volume h>273 [9 119 17 173 0 0 0 1] [9 108 17 184 0 0 0 1] +set mcp.volume.label h>273 [7 105 35 14 0 0 0 0] [7 105 35 3 0 0 0 0] +set mcp.volume.label.color [179 179 179] +set mcp.volume.label.margin h>273 [1 5 0 0 0.5] [52 5 53 0 0.5] +set mcp.pan trackpanmode>=4 [6 62 18 18 0 0 0 0] [4 65 30 30 0 0 0 0] +set mcp.pan.color [51 51 51 191 0 0 0 0] +set mcp.pan.label trackpanmode>=4 [24 63 41 16 0 0 0 0] [31 72 34 16 0 0 0 0] +set mcp.pan.label.color [221 224 224] +set mcp.pan.label.margin [0 0 3 0 1] +set mcp.width trackpanmode>=4 [6 82 18 18 0 0 0 0] [0] +set mcp.width.color [51 51 51 225 0 0 0 0] +set mcp.width.label trackpanmode>=4 [24 83 41 16 0 0 0 0] [0] +set mcp.width.label.color [221 224 224] +set mcp.width.label.margin [0 0 3 0 1] +set mcp.io ?recarm [30 18 39 16 0 0 0 0] [30 3 39 31 0 0 0 0] +set mcp.fx [3 17 23 17 0 0 0 0] +set mcp.fxbyp [3 3 23 14 0 0 0 0] +set mcp.fxin ?recarm [30 3 39 14 0 0 0 0] [0] +set mcp.extmixer.mode [0] + +;set mcp.trackidx [19 300 35 18 0 1 0 1] +;set mcp.trackidx.margin [0 3 0 5 0.5] +;set mcp.trackidx.color ?recarm [200 0 0] [100 100 100] + +set mcp.label [0 300 72 18 0 1 0 1] +set mcp.label.margin [2 3 2 4 0.5] +set mcp.label.color [218 218 218] + +Layout "1. Classic Default (pan at bottom)" +set mcp.pan trackpanmode>=4 [6 256 18 18 0 1 0 1] [4 259 30 30 0 1 0 1] +set mcp.pan.label trackpanmode>=4 [24 257 41 16 0 1 0 1] [31 266 34 16 0 1 0 1] +set mcp.width trackpanmode>=4 [6 275 18 18 0 1 0 1] [0] +set mcp.width.label trackpanmode>=4 [24 276 41 16 0 1 0 1] [0] +set mcp_column_anchor [48 62] +set mcp.mute + mcp_column_anchor [0 0 17 18 0 0 0 0] +set mcp.solo + mcp_column_anchor [0 21 17 18 0 0 0 0] +set mcp.recmon + mcp_column_anchor h>273 [0 42 17 14 0 0 0 0] [0 42 17 14 0 0 0 0] +set mcp.recmode + mcp_column_anchor h>273 [0 55 17 21 0 0 0 0] [0] +set mcp.env + mcp_column_anchor h>283 [0 79 17 26 0 0 0 0] h>273 [0 79 17 14 0 0 0 0] h>233 [0 59 17 14 0 0 0 0] [0] +set mcp.phase + mcp_column_anchor h>283 [1 108 15 16 0 0 0 0] h>273 [1 96 15 16 0 0 0 0] h>251 [1 76 15 16 0 0 0 0] [0] +set mcp.recarm [41 217 20 33 0 1 0 1] +set mcp.meter h>273 [27 80 12 166 0 0 0 1] [27 69 12 177 0 0 0 1] +set mcp.volume h>273 [8 76 19 173 0 0 0 1] [8 65 19 184 0 0 0 1] +set mcp.volume.label h>273 [7 62 35 14 0 0 0 0] [7 62 35 3 0 0 0 0] +EndLayout ; end of "Default (pan at bottom)" + +Layout "2. Silver Default MCP (pan at bottom)" "silver-mcp-default" +set mcp.pan trackpanmode>=4 [6 256 18 18 0 1 0 1] [4 259 30 30 0 1 0 1] +set mcp.pan.label trackpanmode>=4 [24 257 41 16 0 1 0 1] [31 266 34 16 0 1 0 1] +set mcp.width trackpanmode>=4 [6 275 18 18 0 1 0 1] [0] +set mcp.width.label trackpanmode>=4 [24 276 41 16 0 1 0 1] [0] +set mcp_column_anchor [48 62] +set mcp.mute + mcp_column_anchor [0 0 17 18 0 0 0 0] +set mcp.solo + mcp_column_anchor [0 21 17 18 0 0 0 0] +set mcp.recmon + mcp_column_anchor h>273 [0 42 17 14 0 0 0 0] [0 42 17 14 0 0 0 0] +set mcp.recmode + mcp_column_anchor h>273 [0 55 17 21 0 0 0 0] [0] +set mcp.env + mcp_column_anchor h>283 [0 79 17 26 0 0 0 0] h>273 [0 79 17 14 0 0 0 0] h>233 [0 59 17 14 0 0 0 0] [0] +set mcp.phase + mcp_column_anchor h>283 [1 108 15 16 0 0 0 0] h>273 [1 96 15 16 0 0 0 0] h>251 [1 76 15 16 0 0 0 0] [0] +set mcp.recarm [41 217 20 33 0 1 0 1] +set mcp.meter h>273 [27 80 12 166 0 0 0 1] [27 69 12 177 0 0 0 1] +set mcp.volume h>273 [8 76 19 173 0 0 0 1] [8 65 19 184 0 0 0 1] +set mcp.volume.label h>273 [7 62 35 14 0 0 0 0] [7 62 35 3 0 0 0 0] +EndLayout ; end of "Default (silver, pan at bottom)" + +Layout "3. Black Default MCP (pan at bottom)" black-mcp-default +set mcp.pan trackpanmode>=4 [6 256 18 18 0 1 0 1] [4 259 30 30 0 1 0 1] +set mcp.pan.label trackpanmode>=4 [24 257 41 16 0 1 0 1] [31 266 34 16 0 1 0 1] +set mcp.width trackpanmode>=4 [6 275 18 18 0 1 0 1] [0] +set mcp.width.label trackpanmode>=4 [24 276 41 16 0 1 0 1] [0] +set mcp_column_anchor [48 62] +set mcp.mute + mcp_column_anchor [0 0 17 18 0 0 0 0] +set mcp.solo + mcp_column_anchor [0 21 17 18 0 0 0 0] +set mcp.recmon + mcp_column_anchor h>273 [0 42 17 14 0 0 0 0] [0 42 17 14 0 0 0 0] +set mcp.recmode + mcp_column_anchor h>273 [0 55 17 21 0 0 0 0] [0] +set mcp.env + mcp_column_anchor h>283 [0 79 17 26 0 0 0 0] h>273 [0 79 17 14 0 0 0 0] h>233 [0 59 17 14 0 0 0 0] [0] +set mcp.phase + mcp_column_anchor h>283 [1 108 15 16 0 0 0 0] h>273 [1 96 15 16 0 0 0 0] h>251 [1 76 15 16 0 0 0 0] [0] +set mcp.recarm [41 217 20 33 0 1 0 1] +set mcp.meter h>273 [27 80 12 166 0 0 0 1] [27 69 12 177 0 0 0 1] +set mcp.volume h>273 [8 76 19 173 0 0 0 1] [8 65 19 184 0 0 0 1] +set mcp.volume.label h>273 [7 62 35 14 0 0 0 0] [7 62 35 3 0 0 0 0] +EndLayout ; end of "Default (black, pan at bottom)" + + + +Layout "1. Classic Recording Meter" "classic-mcp-rec-meter" +set mcp.size [30 319] +set mcp.io [4 3 21 20 0 0 0 0] +set mcp.label [4 26 21 76 0 0 0 0] +set mcp.label.margin [3 3 1 3 0] +set mcp.label.color [184 184 184] +set mcp.mute [6 257 17 18 0 1 0 1] +set mcp.solo [6 278 17 18 0 1 0 1] +set mcp.recarm [4 233 21 21 0 1 0 1] +set mcp.meter h<400 [7 114 15 119 0 0 0 1] [7 114 15 103 0 0 0 1] +set mcp.volume h<400 [0] [5 217 19 19 0 1 0 1] +set mcp.volume.label [0] +set mcp.volume.label.color [179 179 179] +set mcp.volume.label.margin [0] +set mcp.recmon [0] +set mcp.recmode [0] +set mcp.env [0] +set mcp.phase [0] +set mcp.pan [0] +set mcp.pan.label [0] +set mcp.width [0] +set mcp.width.label [0] +set mcp.fx [0] +set mcp.fxbyp [0] +set mcp.fxin [0] +set mcp.extmixer.mode [1] +set mcp.extmixer [0] +set mcp.folder folderstate<0 [23 300 7 18 0 1 0 1] [0 300 18 18 0 1 0 1] +set mcp.trackidx folderstate<0 [1 300 20 18 0 1 0 1] [1 300 27 18 0 1 0 1] +set mcp.trackidx.margin [0 3 0 5 0.5] +set mcp.trackidx.color ?recarm [220 26 0] [100 100 100] +EndLayout ; end of "1. Classic Recording Meter" + +Layout "3. Black Recording Meter" "black-mcp-rec-meter" +set mcp.size [30 319] +set mcp.io [4 3 21 20 0 0 0 0] +set mcp.label [4 26 21 76 0 0 0 0] +set mcp.label.margin [3 3 1 3 0] +set mcp.label.color ?recarm [220 26 0] [184 184 184] +set mcp.mute [6 257 17 18 0 1 0 1] +set mcp.solo [6 278 17 18 0 1 0 1] +set mcp.recarm [4 233 21 21 0 1 0 1] +set mcp.meter h<400 [7 114 15 119 0 0 0 1] [7 114 15 103 0 0 0 1] +set mcp.volume h<400 [0] [5 217 19 19 0 1 0 1] +set mcp.volume.label [0] +set mcp.volume.color [10 10 10 191 0 0 0 0] +set mcp.volume.label.color [179 179 179] +set mcp.volume.label.margin [0] +set mcp.recmon [0] +set mcp.recmode [0] +set mcp.env [0] +set mcp.phase [0] +set mcp.pan [0] +set mcp.pan.label [0] +set mcp.width [0] +set mcp.width.label [0] +set mcp.fx [0] +set mcp.fxbyp [0] +set mcp.fxin [0] +set mcp.extmixer.mode [1] +set mcp.extmixer [0] +set mcp.folder folderstate<0 [23 300 7 18 0 1 0 1] [0 300 18 18 0 1 0 1] + +set mcp.trackidx folderstate<0 [1 302 20 18 0 1 0 1] [1 302 27 18 0 1 0 1] +set mcp.trackidx.margin [0 3 0 5 0.5] +set mcp.trackidx.color ?recarm [220 26 0] [100 100 100] + +set mcp.meter.readout.color [141 141 141 220 255 150 150 255] +set mcp.meter.rmsreadout.color [255 255 150 200] +set mcp.meter.scale.color.unlit.top [100 100 100 100 0 0 0 255] +set mcp.meter.scale.color.unlit.bottom [70 70 70 100 0 0 0 255] +set mcp.meter.scale.color.lit.top [220 220 220 255 0 0 0 150] +set mcp.meter.scale.color.lit.bottom [200 200 200 255 0 0 0 150] +EndLayout ; end of "3. Black Recording Meter" + + + + + + + +Layout "1. Classic Small" "classic-mcp-small" +set mcp.size [29 319] + + +set mcp.trackidx [0 1 27 14 0 0 0 0] +set mcp.trackidx.color ?recarm [220 26 0] [115 115 115] + +set mcp.label [1 300 28 18 0 1 0 1] +set mcp.label.margin [2 3 3 3 0] +set mcp.label.color ?recarm [220 26 0] [210 210 210] + +set mcp.volume [5 234 19 19 0 1 0 1] +set mcp.volume.label [0] +set mcp.volume.color [51 51 51 291 0 0 0 0] +set mcp.volume.label.color [179 179 179] +set mcp.volume.label.margin [0] + +set mcp.mute [6 257 17 18 0 1 0 1] +set mcp.solo [6 278 17 18 0 1 0 1] +set mcp.recarm [4 211 21 21 0 1 0 1] +set mcp.meter [7 27 15 184 0 0 0 1] + +set mcp.recmon [0] +set mcp.recmode [0] +set mcp.env [0] +set mcp.phase [0] +set mcp.pan [0] +set mcp.pan.label [0] +set mcp.width [0] +set mcp.width.label [0] +set mcp.fx [0] +set mcp.fxbyp [0] +set mcp.fxin [0] +set mcp.extmixer.mode [1] +set mcp.extmixer [0] +set mcp.folder folderstate<0 [23 300 7 18 0 1 0 1] [0 300 18 18 0 1 0 1] + +set mcp.meter.readout.color [141 141 141 220 255 150 150 255] +set mcp.meter.rmsreadout.color [255 255 150 200] +set mcp.meter.scale.color.unlit.top [100 100 100 100 0 0 0 255] +set mcp.meter.scale.color.unlit.bottom [70 70 70 100 0 0 0 255] +set mcp.meter.scale.color.lit.top [220 220 220 255 0 0 0 150] +set mcp.meter.scale.color.lit.bottom [200 200 200 255 0 0 0 150] +EndLayout ; end of "1. Classic Small" + + +Layout "2. Silver Small" "silver-mcp-small" +set mcp.size [29 319] + + +set mcp.trackidx [0 1 27 14 0 0 0 0] +set mcp.trackidx.color ?recarm [220 26 0] [115 115 115] + +set mcp.label [1 300 28 18 0 1 0 1] +set mcp.label.margin [2 3 3 3 0] +set mcp.label.color ?recarm [220 26 0] [210 210 210] + +set mcp.volume [5 234 19 19 0 1 0 1] +set mcp.volume.label [0] +set mcp.volume.color [42 42 42 291 0 0 0 0] +set mcp.volume.label.color [179 179 179] +set mcp.volume.label.margin [0] + +set mcp.mute [6 257 17 18 0 1 0 1] +set mcp.solo [6 278 17 18 0 1 0 1] +set mcp.recarm [4 211 21 21 0 1 0 1] +set mcp.meter [7 27 15 184 0 0 0 1] + +set mcp.recmon [0] +set mcp.recmode [0] +set mcp.env [0] +set mcp.phase [0] +set mcp.pan [0] +set mcp.pan.label [0] +set mcp.width [0] +set mcp.width.label [0] +set mcp.fx [0] +set mcp.fxbyp [0] +set mcp.fxin [0] +set mcp.extmixer.mode [1] +set mcp.extmixer [0] +set mcp.folder folderstate<0 [23 300 7 18 0 1 0 1] [0 300 18 18 0 1 0 1] + +set mcp.meter.readout.color [141 141 141 220 255 150 150 255] +set mcp.meter.rmsreadout.color [255 255 150 200] +set mcp.meter.scale.color.unlit.top [100 100 100 100 0 0 0 255] +set mcp.meter.scale.color.unlit.bottom [70 70 70 100 0 0 0 255] +set mcp.meter.scale.color.lit.top [220 220 220 255 0 0 0 150] +set mcp.meter.scale.color.lit.bottom [200 200 200 255 0 0 0 150] +EndLayout ; end of "2. Silver Small" + + + +Layout "3. Black Small" "black-mcp-small" +set mcp.size [29 319] + + +;set mcp.fxbyp [2 1 1 1 0 0 0 0] +;set mcp.fx [3 14 1 17 0 0 0 0] + +set mcp.trackidx [0 1 27 14 0 0 0 0] +set mcp.trackidx.color ?recarm [220 26 0] [100 100 100] + +;set mcp.io [4 3 21 20 0 0 0 0] +;set mcp.label [0] + +set mcp.label [1 300 28 18 0 1 0 1] +set mcp.label.margin [2 3 3 3 0] +set mcp.label.color ?recarm [220 26 0] [125 125 125] + +set mcp.volume [5 234 19 19 0 1 0 1] +set mcp.volume.label [0] +set mcp.volume.color [200 200 200 291 0 0 0 0] +set mcp.volume.label.color [179 179 179] +set mcp.volume.label.margin [0] + + +set mcp.mute [6 257 17 18 0 1 0 1] +set mcp.solo [6 278 17 18 0 1 0 1] +set mcp.recarm [4 211 21 21 0 1 0 1] +set mcp.meter [7 27 15 184 0 0 0 1] +;set mcp.meter h<400 [7 24 15 209 0 0 0 1] [7 114 15 103 0 0 0 1] + +;set mcp.volume [0] + + +;set mcp.volume h<400 [0] [5 217 19 19 0 1 0 1] + +set mcp.recmon [0] +set mcp.recmode [0] +set mcp.env [0] +set mcp.phase [0] +set mcp.pan [0] +set mcp.pan.label [0] +set mcp.width [0] +set mcp.width.label [0] +set mcp.fx [0] +set mcp.fxbyp [0] +set mcp.fxin [0] +set mcp.extmixer.mode [1] +set mcp.extmixer [0] +set mcp.folder folderstate<0 [23 300 7 18 0 1 0 1] [0 300 18 18 0 1 0 1] + +;set mcp.trackidx folderstate<0 [1 302 20 18 0 1 0 1] [1 302 27 18 0 1 0 1] +;set mcp.trackidx.margin [0 3 0 5 0.5] +;set mcp.trackidx.color ?recarm [220 26 0] [100 100 100] + +set mcp.meter.readout.color [141 141 141 220 255 150 150 255] +set mcp.meter.rmsreadout.color [255 255 150 200] + +set mcp.meter.readout.font [2] + +set mcp.meter.scale.color.unlit.top [100 100 100 100 0 0 0 255] +set mcp.meter.scale.color.unlit.bottom [70 70 70 100 0 0 0 255] +set mcp.meter.scale.color.lit.top [220 220 220 255 0 0 0 150] +set mcp.meter.scale.color.lit.bottom [200 200 200 255 0 0 0 150] +EndLayout ; end of "3. Black Small" + + + +Layout "1. Classic Narrow" "classic-mcp-narrow" +set mcp.size [52 319] +front mcp.recarm +set mcp.folder folderstate<0 [46 300 7 18 0 1 0 1] [0 300 18 18 0 1 0 1] + +set mcp.label [1 300 49 18 0 1 0 1] +set mcp.label.color [218 218 218] + +set mcp_column_anchor h>350 [7 227] h>327 [7 239] h>308 [7 258] [7 275] +set mcp.mute + mcp_column_anchor h>291 [0 0 17 18 0 1 0 1] [0] +set mcp.solo + mcp_column_anchor h>291 [20 0 17 18 0 1 0 1] [0] +set mcp.recmon + mcp_column_anchor h>308 [20 21 17 14 0 1 0 1] [0] +set mcp.recmode + mcp_column_anchor h>327 [20 33 17 22 0 1 0 1][0] +set mcp.env + mcp_column_anchor h>350 [0 21 17 26 0 1 0 1] h>308 [0 21 17 14 0 1 0 1] [0] +set mcp.phase + mcp_column_anchor h>350 [1 50 15 16 0 1 0 1] h>327 [1 38 15 16 0 1 0 1] [0] +set mcp.recarm h>350 [8 196 35 28 0 1 0 1] h>327 [8 208 35 28 0 1 0 1] h>308 [8 227 35 28 0 1 0 1] h>291 [8 244 35 28 0 1 0 1] [8 265 35 28 0 1 0 1] +set mcp.meter h>350 [28 145 12 51 0 0 0 1] h>327 [28 134 12 74 0 0 0 1] h>308 [28 134 12 93 0 0 0 1] h>291 [28 134 12 110 0 0 0 1] h>274 [28 134 12 131 0 0 0 1] [28 121 12 144 0 0 0 1] +set mcp.volume h>350 [9 137 19 63 0 0 0 1] h>327 [9 126 19 86 0 0 0 1] h>308 [9 126 19 100 0 0 0 1] h>291 [9 126 19 122 0 0 0 1] h>274 [9 126 19 143 0 0 0 1] [9 113 19 156 0 0 0 1] +set mcp.volume.label h>350 [8 126 35 14 0 0 0 0] h>274 [8 126 35 3 0 0 0 0] [8 113 35 3 0 0 0 0] +set mcp.volume.label.margin h>350 [1 5 0 0 0.5] [52 5 53 0 0.5] +set mcp.pan trackpanmode>=4 h>274 [6 92 18 18 0 0 0 0] [6 86 18 18 0 0 0 0] h>274 [10 80 30 30 0 0 0 0] [10 79 30 30 0 0 0 0] +set mcp.pan.label h>274 trackpanmode>=4 [7 85 37 7 0 0 0 0] [1 113 49 8 0 0 0 0] [0] +set mcp.pan.label.color [74 70 64] +set mcp.pan.label.margin trackpanmode>=4 [0 0 0 0 0] [0 0 0 0 0.5] +set mcp.width trackpanmode>=4 h>274 [27 92 18 18 0 0 0 0] [27 86 18 18 0 0 0 0] [0] +set mcp.width.label h>274 trackpanmode>=4 [7 115 37 7 0 0 0 0] [0] [0] +set mcp.width.label.color [96 92 85] +set mcp.width.label.margin [0 0 0 0 1] +set mcp.io [6 23 39 31 0 0 0 0] +set mcp.fx [6 3 24 18 0 0 0 0] +set mcp.fxbyp [30 3 15 18 0 0 0 0] +set mcp.fxin [0] +set mcp.extmixer.mode h<500 [1] [0] +set mcp.extmixer [0] + +set mcp.trackidx [1 56 49 18 0 0 0 0] + + Layout "1. Classic Narrow (pan at bottom)" + set pan_shift h>274 [-44] [-32] + set mcp.volume + [0 pan_shift{x}] mcp.volume + set mcp.volume.label + [0 pan_shift{x}] mcp.volume.label + set mcp.meter + [0 pan_shift{x}] mcp.meter + set mcp.recarm + [0 pan_shift{x}] mcp.recarm + set mcp.mute + [0 pan_shift{x}] mcp.mute + set mcp.solo + [0 pan_shift{x}] mcp.solo + set mcp.recmon + [0 pan_shift{x}] mcp.recmon + set mcp.recmode + [0 pan_shift{x}] mcp.recmode + set mcp.env + [0 pan_shift{x}] mcp.env + set mcp.phase + [0 pan_shift{x}] mcp.phase + set mcp.pan trackpanmode>=4 h>274 [6 265 18 18 0 1 0 1] [6 271 18 18 0 1 0 1] h>274 [10 253 30 30 0 1 0 1] [10 264 30 30 0 1 0 1] + set mcp.pan.label h>274 trackpanmode>=4 [7 256 37 7 0 1 0 1] [1 284 49 8 0 1 0 1] [0] + set mcp.width trackpanmode>=4 h>274 [27 265 18 18 0 1 0 1] [27 271 18 18 0 1 0 1] [0] + set mcp.width.label h>274 trackpanmode>=4 [7 288 37 7 0 1 0 1] [0] [0] + EndLayout ; end of "Narrow (pan at bottom)" + +EndLayout ; end of "Narrow" + + +Layout "2. Silver Narrow" "silver-mcp-narrow" +set mcp.size [52 319] +front mcp.recarm +set mcp.folder folderstate<0 [46 300 7 18 0 1 0 1] [0 300 18 18 0 1 0 1] + +set mcp.trackidx [1 56 49 18 0 0 0 0] +set mcp.trackidx.color ?recarm [220 26 0] [100 100 100] + +set mcp_column_anchor h>350 [7 227] h>327 [7 239] h>308 [7 258] [7 275] +set mcp.mute + mcp_column_anchor h>291 [0 0 17 18 0 1 0 1] [0] +set mcp.solo + mcp_column_anchor h>291 [20 0 17 18 0 1 0 1] [0] +set mcp.recmon + mcp_column_anchor h>308 [20 21 17 14 0 1 0 1] [0] +set mcp.recmode + mcp_column_anchor h>327 [20 33 17 22 0 1 0 1][0] +set mcp.env + mcp_column_anchor h>350 [0 21 17 26 0 1 0 1] h>308 [0 21 17 14 0 1 0 1] [0] +set mcp.phase + mcp_column_anchor h>350 [1 50 15 16 0 1 0 1] h>327 [1 38 15 16 0 1 0 1] [0] +set mcp.recarm h>350 [8 196 35 28 0 1 0 1] h>327 [8 208 35 28 0 1 0 1] h>308 [8 227 35 28 0 1 0 1] h>291 [8 244 35 28 0 1 0 1] [8 265 35 28 0 1 0 1] +set mcp.meter h>350 [28 145 12 51 0 0 0 1] h>327 [28 134 12 74 0 0 0 1] h>308 [28 134 12 93 0 0 0 1] h>291 [28 134 12 110 0 0 0 1] h>274 [28 134 12 131 0 0 0 1] [28 121 12 144 0 0 0 1] +set mcp.volume h>350 [9 137 19 63 0 0 0 1] h>327 [9 126 19 86 0 0 0 1] h>308 [9 126 19 100 0 0 0 1] h>291 [9 126 19 122 0 0 0 1] h>274 [9 126 19 143 0 0 0 1] [9 113 19 156 0 0 0 1] +set mcp.volume.label h>350 [8 126 35 14 0 0 0 0] h>274 [8 126 35 3 0 0 0 0] [8 113 35 3 0 0 0 0] +set mcp.volume.label.margin h>350 [1 5 0 0 0.5] [52 5 53 0 0.5] +set mcp.volume.label.color [141 141 141] +set mcp.pan trackpanmode>=4 h>274 [6 92 18 18 0 0 0 0] [6 86 18 18 0 0 0 0] h>274 [10 80 30 30 0 0 0 0] [10 79 30 30 0 0 0 0] +set mcp.pan.label h>274 trackpanmode>=4 [7 82 37 7 0 0 0 0] [1 111 49 8 0 0 0 0] [0] +set mcp.pan.color [36 36 36 191 0 0 0 0] +set mcp.pan.label.color [47 47 47] +set mcp.pan.label.margin trackpanmode>=4 [0 0 0 0 0] [0 0 0 0 0.5] +set mcp.width trackpanmode>=4 h>274 [27 92 18 18 0 0 0 0] [27 86 18 18 0 0 0 0] [0] +set mcp.width.label h>274 trackpanmode>=4 [7 115 37 7 0 0 0 0] [0] [0] +set mcp.width.color [36 36 36 191 0 0 0 0] +set mcp.width.label.color [128 128 128] +set mcp.width.label.margin [0 0 0 0 1] +set mcp.io [6 23 39 31 0 0 0 0] +set mcp.fx [6 3 24 18 0 0 0 0] +set mcp.fxbyp [30 3 15 18 0 0 0 0] +set mcp.fxin [0] +set mcp.extmixer.mode h<500 [1] [0] +set mcp.extmixer [0] + +set mcp.label [1 301 49 18 0 1 0 1] +set mcp.label.color [141 141 141] + + Layout "2. Silver Narrow (pan at bottom)" + set pan_shift h>274 [-44] [-32] + set mcp.volume + [0 pan_shift{x}] mcp.volume + set mcp.volume.label + [0 pan_shift{x}] mcp.volume.label + set mcp.meter + [0 pan_shift{x}] mcp.meter + set mcp.recarm + [0 pan_shift{x}] mcp.recarm + set mcp.mute + [0 pan_shift{x}] mcp.mute + set mcp.solo + [0 pan_shift{x}] mcp.solo + set mcp.recmon + [0 pan_shift{x}] mcp.recmon + set mcp.recmode + [0 pan_shift{x}] mcp.recmode + set mcp.env + [0 pan_shift{x}] mcp.env + set mcp.phase + [0 pan_shift{x}] mcp.phase + set mcp.pan trackpanmode>=4 h>274 [6 265 18 18 0 1 0 1] [6 271 18 18 0 1 0 1] h>274 [10 253 30 30 0 1 0 1] [10 264 30 30 0 1 0 1] + set mcp.pan.label h>274 trackpanmode>=4 [7 256 37 7 0 1 0 1] [1 284 49 8 0 1 0 1] [0] + set mcp.width trackpanmode>=4 h>274 [27 265 18 18 0 1 0 1] [27 271 18 18 0 1 0 1] [0] + set mcp.width.label h>274 trackpanmode>=4 [7 288 37 7 0 1 0 1] [0] [0] + EndLayout ; end of "Narrow (pan at bottom)" + +EndLayout ; end of "Silver Narrow" + + +Layout "3. Black Narrow" "black-mcp-narrow" +set mcp.size [52 319] +front mcp.recarm +set mcp.folder folderstate<0 [46 300 7 18 0 1 0 1] [0 300 18 18 0 1 0 1] + +set mcp.trackidx [1 56 49 18 0 0 0 0] +set mcp.trackidx.color ?recarm [220 26 0] [100 100 100] + +set mcp_column_anchor h>350 [7 227] h>327 [7 239] h>308 [7 258] [7 275] +set mcp.mute + mcp_column_anchor h>291 [0 0 17 18 0 1 0 1] [0] +set mcp.solo + mcp_column_anchor h>291 [20 0 17 18 0 1 0 1] [0] +set mcp.recmon + mcp_column_anchor h>308 [20 21 17 14 0 1 0 1] [0] +set mcp.recmode + mcp_column_anchor h>327 [20 33 17 22 0 1 0 1][0] +set mcp.env + mcp_column_anchor h>350 [0 21 17 26 0 1 0 1] h>308 [0 21 17 14 0 1 0 1] [0] +set mcp.phase + mcp_column_anchor h>350 [1 50 15 16 0 1 0 1] h>327 [1 38 15 16 0 1 0 1] [0] +set mcp.recarm h>350 [8 196 35 28 0 1 0 1] h>327 [8 208 35 28 0 1 0 1] h>308 [8 227 35 28 0 1 0 1] h>291 [8 244 35 28 0 1 0 1] [8 265 35 28 0 1 0 1] +set mcp.meter h>350 [28 145 12 51 0 0 0 1] h>327 [28 134 12 74 0 0 0 1] h>308 [28 134 12 93 0 0 0 1] h>291 [28 134 12 110 0 0 0 1] h>274 [28 134 12 131 0 0 0 1] [28 121 12 144 0 0 0 1] +set mcp.volume h>350 [9 137 19 63 0 0 0 1] h>327 [9 126 19 86 0 0 0 1] h>308 [9 126 19 100 0 0 0 1] h>291 [9 126 19 122 0 0 0 1] h>274 [9 126 19 143 0 0 0 1] [9 113 19 156 0 0 0 1] +set mcp.volume.label h>350 [8 126 35 14 0 0 0 0] h>274 [8 126 35 3 0 0 0 0] [8 113 35 3 0 0 0 0] +set mcp.volume.label.margin h>350 [1 5 0 0 0.5] [52 5 53 0 0.5] +set mcp.volume.label.color [141 141 141] +set mcp.pan trackpanmode>=4 h>274 [6 92 18 18 0 0 0 0] [6 86 18 18 0 0 0 0] h>274 [10 80 30 30 0 0 0 0] [10 79 30 30 0 0 0 0] +set mcp.pan.label h>274 trackpanmode>=4 [7 85 37 7 0 0 0 0] [1 113 49 8 0 0 0 0] [0] +set mcp.pan.color [180 180 180 191 0 0 0 0] +set mcp.pan.label.color [128 128 128] +set mcp.pan.label.margin trackpanmode>=4 [0 0 0 0 0] [0 0 0 0 0.5] +set mcp.width trackpanmode>=4 h>274 [27 92 18 18 0 0 0 0] [27 86 18 18 0 0 0 0] [0] +set mcp.width.label h>274 trackpanmode>=4 [7 115 37 7 0 0 0 0] [0] [0] +set mcp.width.color [180 180 180 191 0 0 0 0] +set mcp.width.label.color [128 128 128] +set mcp.width.label.margin [0 0 0 0 1] +set mcp.io [6 23 39 31 0 0 0 0] +set mcp.fx [6 3 24 18 0 0 0 0] +set mcp.fxbyp [30 3 15 18 0 0 0 0] +set mcp.fxin [0] +set mcp.extmixer.mode h<500 [1] [0] +set mcp.extmixer [0] + +set mcp.label [1 301 50 18 0 1 0 1] +set mcp.label.color [125 125 125] + + Layout "3. Black Narrow (pan at bottom)" + set pan_shift h>274 [-44] [-32] + set mcp.volume + [0 pan_shift{x}] mcp.volume + set mcp.volume.label + [0 pan_shift{x}] mcp.volume.label + set mcp.meter + [0 pan_shift{x}] mcp.meter + set mcp.recarm + [0 pan_shift{x}] mcp.recarm + set mcp.mute + [0 pan_shift{x}] mcp.mute + set mcp.solo + [0 pan_shift{x}] mcp.solo + set mcp.recmon + [0 pan_shift{x}] mcp.recmon + set mcp.recmode + [0 pan_shift{x}] mcp.recmode + set mcp.env + [0 pan_shift{x}] mcp.env + set mcp.phase + [0 pan_shift{x}] mcp.phase + set mcp.pan trackpanmode>=4 h>274 [6 265 18 18 0 1 0 1] [6 271 18 18 0 1 0 1] h>274 [10 253 30 30 0 1 0 1] [10 264 30 30 0 1 0 1] + set mcp.pan.label h>274 trackpanmode>=4 [7 256 37 7 0 1 0 1] [1 284 49 8 0 1 0 1] [0] + set mcp.width trackpanmode>=4 h>274 [27 265 18 18 0 1 0 1] [27 271 18 18 0 1 0 1] [0] + set mcp.width.label h>274 trackpanmode>=4 [7 288 37 7 0 1 0 1] [0] [0] + EndLayout ; end of "Narrow (pan at bottom)" + +EndLayout ; end of "Black Narrow" + + +Layout "1. Classic Sidebar" "classic-mcp-sidebar" +set mcp.size [151 319] + + +set mcp.label [1 300 148 18 0 1 0 1] + +set mcp.trackidx [1 35 148 18 0 0 0 0] + +set mcp.io [30 3 39 31 0 0 0 0] +set mcp.fxin [73 3 74 15 0 0 0 0] +set mcp.recinput [73 17 74 17 0 0 0 0] +set mcp.recinput.color [160 160 160] +set mcp.recinput.margin [4 0 18 0] +set mcp.extmixer.mode [1] +set mcp.extmixer.position [73 65 70 225 0 0 0 1] + +set mcp.folder folderstate<0 [144 300 7 18 0 1 0 1] [0 300 18 18 0 1 0 1] + + Layout "1. Classic Sidebar (pan at bottom)" + set mcp.pan trackpanmode>=4 [6 256 18 18 0 1 0 1] [4 259 30 30 0 1 0 1] + set mcp.pan.label trackpanmode>=4 [24 257 41 16 0 1 0 1] [31 266 34 16 0 1 0 1] + set mcp.width trackpanmode>=4 [6 275 18 18 0 1 0 1] [0] + set mcp.width.label trackpanmode>=4 [24 276 41 16 0 1 0 1] [0] + set mcp_column_anchor [48 62] + set mcp.mute + mcp_column_anchor [0 0 17 18 0 0 0 0] + set mcp.solo + mcp_column_anchor [0 21 17 18 0 0 0 0] + set mcp.recmon + mcp_column_anchor h>273 [0 42 17 14 0 0 0 0] [0 42 17 14 0 0 0 0] + set mcp.recmode + mcp_column_anchor h>273 [0 55 17 21 0 0 0 0] [0] + set mcp.env + mcp_column_anchor h>283 [0 79 17 26 0 0 0 0] h>273 [0 79 17 14 0 0 0 0] h>233 [0 59 17 14 0 0 0 0] [0] + set mcp.phase + mcp_column_anchor h>283 [1 108 15 16 0 0 0 0] h>273 [1 96 15 16 0 0 0 0] h>251 [1 76 15 16 0 0 0 0] [0] + set mcp.recarm [41 217 20 33 0 1 0 1] + set mcp.meter h>273 [27 80 12 166 0 0 0 1] [27 69 12 177 0 0 0 1] + set mcp.volume h>273 [8 76 19 173 0 0 0 1] [8 65 19 184 0 0 0 1] + set mcp.volume.label h>273 [7 62 35 14 0 0 0 0] [7 62 35 3 0 0 0 0] + EndLayout ; end of "Sidebar (pan at bottom)" + +EndLayout ; end of "Sidebar" + + + +Layout "1. Classic Large" "classic-mcp-large" +set mcp.size [93 319] +front mcp.volume.label mcp.recmon mcp.recarm +set mcp.folder folderstate<0 [86 300 7 18 0 1 0 1] [0 300 18 18 0 1 0 1] + +set mcp.label [1 300 91 18 0 1 0 1] +set mcp.label.margin [3 0 3 0 0.5] +set mcp.label.color [218 218 218] + +set mcp.trackidx [1 58 90 18 0 0 0 0] +set mcp.trackidx.margin [0 3 0 5 0.5] +set mcp.trackidx.color ?recarm [200 0 0] [100 100 100] + +set mcp_column_anchor [62 126] +set mcp.mute + mcp_column_anchor [0 0 23 20 0 0 0 0] +set mcp.solo + mcp_column_anchor [0 23 23 20 0 0 0 0] +set mcp.recmon + mcp_column_anchor h>304 [0 49 23 17 0 0 0 0] h>239 [0 46 23 17 0 0 0 0] [0] +set mcp.recmode + mcp_column_anchor h>304 [0 65 23 13 0 0 0 0] [0] +set mcp.env + mcp_column_anchor h>314 [0 84 23 30 0 0 0 0] h>304 [0 84 23 18 0 0 0 0] h>261 [0 66 23 18 0 0 0 0] [0] +set mcp.phase + mcp_column_anchor h>314 [4 120 15 16 0 0 0 0] h>304 [4 108 15 16 0 0 0 0] h>279 [4 87 15 16 0 0 0 0] [0] +set mcp.recarm [55 260 20 33 0 1 0 1] +set mcp.meter h>273 [34 144 19 145 0 0 0 1] [34 133 19 156 0 0 0 1] +set mcp.volume h>273 [12 140 19 152 0 0 0 1] [12 129 19 163 0 0 0 1] +set mcp.volume.label h>273 [7 126 49 14 0 0 0 0] [7 126 49 3 0 0 0 0] +set mcp.volume.label.color [179 179 179] +set mcp.volume.label.margin h>273 [1 5 0 0 0.5] [52 5 53 0 0.5] +set mcp.pan trackpanmode>=4 [17 86 22 22 0 0 0 0] [35 86 22 22 0 0 0 0] +set mcp.pan.color [51 51 51 191 0 0 0 0] +set mcp.pan.label trackpanmode>=4 [11 113 34 7 0 0 0 0] [29 113 34 7 0 0 0 0] +set mcp.pan.label.color [74 70 64] +set mcp.pan.label.margin [0 0 0 0 0.5] +set mcp.width trackpanmode>=4 [53 86 22 22 0 0 0 0] [0] +set mcp.width.color [51 51 51 225 0 0 0 0] +set mcp.width.label trackpanmode>=4 [47 113 34 7 0 0 0 0] [0] +set mcp.width.label.color [96 92 85] +set mcp.width.label.margin [0 0 0 0 0.5] +set mcp.io [32 4 55 19 0 0 0 0] +set mcp.recinput [5 39 82 17 0 0 0 0] +set mcp.recinput.color [160 160 160] +set mcp.recinput.margin [4 0 18 0] +set mcp.fx [5 18 23 17 0 0 0 0] +set mcp.fxbyp [5 4 23 14 0 0 0 0] +set mcp.fxin [32 23 55 12 0 0 0 0] +set mcp.extmixer.mode [0] + + + + + Layout "1. Classic Large (pan at bottom)" + set mcp.pan trackpanmode>=4 [17 259 22 22 0 1 0 1] [35 259 22 22 0 1 0 1] + set mcp.pan.label trackpanmode>=4 [11 286 34 7 0 1 0 1] [29 286 34 7 0 1 0 1] + set mcp.width trackpanmode>=4 [53 259 22 22 0 1 0 1] [0] + set mcp.width.label trackpanmode>=4 [47 286z 34 7 0 1 0 1] [0] + set mcp_column_anchor [62 85] + set mcp.mute + mcp_column_anchor [0 0 23 20 0 0 0 0] + set mcp.solo + mcp_column_anchor [0 23 23 20 0 0 0 0] + set mcp.recmon + mcp_column_anchor h>304 [0 49 23 17 0 0 0 0] h>239 [0 46 23 17 0 0 0 0] [0] + set mcp.recmode + mcp_column_anchor h>304 [0 65 23 13 0 0 0 0] [0] + set mcp.env + mcp_column_anchor h>314 [0 84 23 30 0 0 0 0] h>304 [0 84 23 18 0 0 0 0] h>261 [0 66 23 18 0 0 0 0] [0] + set mcp.phase + mcp_column_anchor h>314 [4 120 15 16 0 0 0 0] h>304 [4 108 15 16 0 0 0 0] h>279 [4 87 15 16 0 0 0 0] [0] + set mcp.recarm [55 219 20 33 0 1 0 1] + set mcp.meter h>273 [34 103 19 145 0 0 0 1] [34 92 19 156 0 0 0 1] + set mcp.volume h>273 [12 99 19 152 0 0 0 1] [12 88 19 163 0 0 0 1] + set mcp.volume.label h>273 [7 85 49 14 0 0 0 0] [7 85 49 3 0 0 0 0] + EndLayout ; end of "Large (pan at bottom)" + +EndLayout ; end of "Large" + + +Layout "2. Silver Large" "silver-mcp-large" +set mcp.size [93 319] +front mcp.volume.label mcp.recmon mcp.recarm +set mcp.folder folderstate<0 [86 300 7 18 0 1 0 1] [0 300 18 18 0 1 0 1] + + + +set mcp.trackidx [1 58 90 18 0 0 0 0] +set mcp.trackidx.margin [0 3 0 5 0.5] +set mcp.trackidx.color ?recarm [220 26 0] [100 100 100] + +set mcp_column_anchor [62 126] +set mcp.mute + mcp_column_anchor [0 0 23 20 0 0 0 0] +set mcp.solo + mcp_column_anchor [0 23 23 20 0 0 0 0] +set mcp.recmon + mcp_column_anchor h>304 [0 49 23 17 0 0 0 0] h>239 [0 46 23 17 0 0 0 0] [0] +set mcp.recmode + mcp_column_anchor h>304 [0 65 23 13 0 0 0 0] [0] +set mcp.env + mcp_column_anchor h>314 [0 84 23 30 0 0 0 0] h>304 [0 84 23 18 0 0 0 0] h>261 [0 66 23 18 0 0 0 0] [0] +set mcp.phase + mcp_column_anchor h>314 [4 120 15 16 0 0 0 0] h>304 [4 108 15 16 0 0 0 0] h>279 [4 87 15 16 0 0 0 0] [0] +set mcp.recarm [55 260 20 33 0 1 0 1] +set mcp.meter h>273 [34 144 19 145 0 0 0 1] [34 133 19 156 0 0 0 1] +set mcp.volume h>273 [12 140 19 152 0 0 0 1] [12 129 19 163 0 0 0 1] +set mcp.volume.label h>273 [7 126 49 14 0 0 0 0] [7 126 49 3 0 0 0 0] +set mcp.volume.label.color [141 141 141] +set mcp.volume.label.margin h>273 [1 5 0 0 0.5] [52 5 53 0 0.5] +set mcp.pan trackpanmode>=4 [17 85 22 22 0 0 0 0] [35 85 22 22 0 0 0 0] +set mcp.pan.color [42 42 42 191 0 0 0 0] +set mcp.pan.label trackpanmode>=4 [11 113 34 7 0 0 0 0] [29 113 34 7 0 0 0 0] +set mcp.pan.label.color [220 220 220] +set mcp.pan.label.margin [0 0 0 0 0.5] +set mcp.width trackpanmode>=4 [53 85 22 22 0 0 0 0] [0] +set mcp.width.color [42 42 42 225 0 0 0 0] +set mcp.width.label trackpanmode>=4 [47 113 34 7 0 0 0 0] [0] +set mcp.width.label.color [220 220 220] +set mcp.width.label.margin [0 0 0 0 0.5] +set mcp.io [32 4 55 19 0 0 0 0] +set mcp.recinput [5 39 82 17 0 0 0 0] +set mcp.recinput.color [130 130 130] +set mcp.recinput.margin [4 0 18 0] +set mcp.fx [5 18 23 17 0 0 0 0] +set mcp.fxbyp [5 4 23 14 0 0 0 0] +set mcp.fxin [32 23 55 12 0 0 0 0] +set mcp.extmixer.mode [0] + +set mcp.label [1 300 91 18 0 1 0 1] +set mcp.label.margin [3 0 3 0 0.5] +set mcp.label.color [160 160 160] + + +set mcp.meter.readout.color [141 141 141 220 255 150 150 255] +set mcp.meter.rmsreadout.color [255 255 150 200] +set mcp.meter.scale.color.unlit.top [100 100 100 100 0 0 0 255] +set mcp.meter.scale.color.unlit.bottom [70 70 70 100 0 0 0 255] +set mcp.meter.scale.color.lit.top [220 220 220 255 0 0 0 150] +set mcp.meter.scale.color.lit.bottom [200 200 200 255 0 0 0 150] + + + Layout "3. Black Large (pan at bottom)" "black-mcp-large" + set mcp.pan trackpanmode>=4 [17 259 22 22 0 1 0 1] [35 259 22 22 0 1 0 1] + set mcp.pan.label trackpanmode>=4 [11 286 34 7 0 1 0 1] [29 286 34 7 0 1 0 1] + set mcp.width trackpanmode>=4 [53 259 22 22 0 1 0 1] [0] + set mcp.width.label trackpanmode>=4 [47 286z 34 7 0 1 0 1] [0] + set mcp_column_anchor [62 85] + set mcp.mute + mcp_column_anchor [0 0 23 20 0 0 0 0] + set mcp.solo + mcp_column_anchor [0 23 23 20 0 0 0 0] + set mcp.recmon + mcp_column_anchor h>304 [0 49 23 17 0 0 0 0] h>239 [0 46 23 17 0 0 0 0] [0] + set mcp.recmode + mcp_column_anchor h>304 [0 65 23 13 0 0 0 0] [0] + set mcp.env + mcp_column_anchor h>314 [0 84 23 30 0 0 0 0] h>304 [0 84 23 18 0 0 0 0] h>261 [0 66 23 18 0 0 0 0] [0] + set mcp.phase + mcp_column_anchor h>314 [4 120 15 16 0 0 0 0] h>304 [4 108 15 16 0 0 0 0] h>279 [4 87 15 16 0 0 0 0] [0] + set mcp.recarm [55 219 20 33 0 1 0 1] + set mcp.meter h>273 [34 103 19 145 0 0 0 1] [34 92 19 156 0 0 0 1] + set mcp.volume h>273 [12 99 19 152 0 0 0 1] [12 88 19 163 0 0 0 1] + set mcp.volume.label h>273 [7 85 49 14 0 0 0 0] [7 85 49 3 0 0 0 0] + EndLayout ; end of "Large (pan at bottom, black)" + +EndLayout ; end of "Large (black)" + + +Layout "3. Black Large" "black-mcp-large" +set mcp.size [93 319] +front mcp.volume.label mcp.recmon mcp.recarm +set mcp.folder folderstate<0 [86 300 7 18 0 1 0 1] [0 300 18 18 0 1 0 1] + +set mcp.label [1 300 91 18 0 1 0 1] +set mcp.label.margin [3 0 3 0 0.5] +set mcp.label.color [125 125 125] + +set mcp.trackidx [1 58 90 18 0 0 0 0] +set mcp.trackidx.margin [0 3 0 5 0.5] +set mcp.trackidx.color ?recarm [220 26 0] [100 100 100] + +set mcp_column_anchor [62 126] +set mcp.mute + mcp_column_anchor [0 0 23 20 0 0 0 0] +set mcp.solo + mcp_column_anchor [0 23 23 20 0 0 0 0] +set mcp.recmon + mcp_column_anchor h>304 [0 49 23 17 0 0 0 0] h>239 [0 46 23 17 0 0 0 0] [0] +set mcp.recmode + mcp_column_anchor h>304 [0 65 23 13 0 0 0 0] [0] +set mcp.env + mcp_column_anchor h>314 [0 84 23 30 0 0 0 0] h>304 [0 84 23 18 0 0 0 0] h>261 [0 66 23 18 0 0 0 0] [0] +set mcp.phase + mcp_column_anchor h>314 [4 120 15 16 0 0 0 0] h>304 [4 108 15 16 0 0 0 0] h>279 [4 87 15 16 0 0 0 0] [0] +set mcp.recarm [55 260 20 33 0 1 0 1] +set mcp.meter h>273 [34 144 19 145 0 0 0 1] [34 133 19 156 0 0 0 1] +set mcp.volume h>273 [12 140 19 152 0 0 0 1] [12 129 19 163 0 0 0 1] +set mcp.volume.label h>273 [7 126 49 14 0 0 0 0] [7 126 49 3 0 0 0 0] +set mcp.volume.label.color [125 125 125] +set mcp.volume.label.margin h>273 [1 5 0 0 0.5] [52 5 53 0 0.5] +set mcp.pan trackpanmode>=4 [17 85 22 22 0 0 0 0] [35 85 22 22 0 0 0 0] +set mcp.pan.color [180 180 180 191 0 0 0 0] +set mcp.pan.label trackpanmode>=4 [11 113 34 7 0 0 0 0] [29 113 34 7 0 0 0 0] +set mcp.pan.label.color [138 138 138] +set mcp.pan.label.margin [0 0 0 0 0.5] +set mcp.width trackpanmode>=4 [53 85 22 22 0 0 0 0] [0] +set mcp.width.color [180 180 180 225 0 0 0 0] +set mcp.width.label trackpanmode>=4 [47 113 34 7 0 0 0 0] [0] +set mcp.width.label.color [138 138 138] +set mcp.width.label.margin [0 0 0 0 0.5] +set mcp.io [32 4 55 19 0 0 0 0] +set mcp.recinput [5 39 82 17 0 0 0 0] +set mcp.recinput.color [130 130 130] +set mcp.recinput.margin [4 0 18 0] +set mcp.fx [5 18 23 17 0 0 0 0] +set mcp.fxbyp [5 4 23 14 0 0 0 0] +set mcp.fxin [32 23 55 12 0 0 0 0] +set mcp.extmixer.mode [0] + + + + +set mcp.meter.readout.color [125 125 125 220 255 150 150 255] +set mcp.meter.rmsreadout.color [255 255 150 200] +set mcp.meter.scale.color.unlit.top [100 100 100 100 0 0 0 255] +set mcp.meter.scale.color.unlit.bottom [70 70 70 100 0 0 0 255] +set mcp.meter.scale.color.lit.top [220 220 220 255 0 0 0 150] +set mcp.meter.scale.color.lit.bottom [200 200 200 255 0 0 0 150] + + + Layout "3. Black Large (pan at bottom)" + set mcp.pan trackpanmode>=4 [17 259 22 22 0 1 0 1] [35 259 22 22 0 1 0 1] + set mcp.pan.label trackpanmode>=4 [11 286 34 7 0 1 0 1] [29 286 34 7 0 1 0 1] + set mcp.width trackpanmode>=4 [53 259 22 22 0 1 0 1] [0] + set mcp.width.label trackpanmode>=4 [47 286z 34 7 0 1 0 1] [0] + set mcp_column_anchor [62 85] + set mcp.mute + mcp_column_anchor [0 0 23 20 0 0 0 0] + set mcp.solo + mcp_column_anchor [0 23 23 20 0 0 0 0] + set mcp.recmon + mcp_column_anchor h>304 [0 49 23 17 0 0 0 0] h>239 [0 46 23 17 0 0 0 0] [0] + set mcp.recmode + mcp_column_anchor h>304 [0 65 23 13 0 0 0 0] [0] + set mcp.env + mcp_column_anchor h>314 [0 84 23 30 0 0 0 0] h>304 [0 84 23 18 0 0 0 0] h>261 [0 66 23 18 0 0 0 0] [0] + set mcp.phase + mcp_column_anchor h>314 [4 120 15 16 0 0 0 0] h>304 [4 108 15 16 0 0 0 0] h>279 [4 87 15 16 0 0 0 0] [0] + set mcp.recarm [55 219 20 33 0 1 0 1] + set mcp.meter h>273 [34 103 19 145 0 0 0 1] [34 92 19 156 0 0 0 1] + set mcp.volume h>273 [12 99 19 152 0 0 0 1] [12 88 19 163 0 0 0 1] + set mcp.volume.label h>273 [7 85 49 14 0 0 0 0] [7 85 49 3 0 0 0 0] + EndLayout ; end of "Large (pan at bottom, black)" + +EndLayout ; end of "Large (black)" + + +Layout "1. Classic Big Meter" "classic-mcp-big-meter" +set mcp.size [93 319] +front mcp.volume.label +set med [373] +set sml [300] +set mcp.folder folderstate<0 [86 300 7 18 0 1 0 1] [0 300 18 18 0 1 0 1] + +set mcp.trackidx [2 57 88 18 0 0 0 0] +set mcp.trackidx.margin [0 3 0 5 0.5] +set mcp.trackidx.color ?recarm [220 26 0] [100 100 100] + + + +set mcp_bottom_anchor h=4 [17 86 22 22 0 0 0 0] [35 86 22 22 0 0 0 0] +set mcp.pan.color [51 51 51 191 0 0 0 0] +set mcp.pan.label h=4 [11 113 34 7 0 0 0 0] [29 113 34 7 0 0 0 0] +set mcp.pan.label.color [92 88 82] +set mcp.pan.label.margin [0 0 0 0 0.5] +set mcp.width h=4 [53 86 22 22 0 0 0 0] [0] +set mcp.width.color [51 51 51 225 0 0 0 0] +set mcp.width.label h=4 [47 113 34 7 0 0 0 0] [0] +set mcp.width.label.color [96 92 85] +set mcp.width.label.margin [0 0 0 0 0.5] +set mcp.io [32 4 55 19 0 0 0 0] +set mcp.recinput [5 39 82 17 0 0 0 0] +set mcp.recinput.color [160 160 160] +set mcp.recinput.margin [4 0 18 0] +set mcp.fx [5 18 23 17 0 0 0 0] +set mcp.fxbyp [5 4 23 14 0 0 0 0] +set mcp.fxin [32 23 55 12 0 0 0 0] +set mcp.extmixer.mode [1] +set mcp.extmixer [0] + +set mcp.label [0 300 92 18 0 1 0 1] +set mcp.label.margin [2 0 3 0 0.5] +set mcp.label.color [218 218 218] + + Layout "1. Classic Big Meter (pan at bottom)" + + set mcp.volume h=4 [17 243 22 22 0 1 0 1] [35 243 22 22 0 1 0 1] trackpanmode>=4 [17 203 22 22 0 1 0 1] [35 203 22 22 0 1 0 1] + set mcp.pan.label h=4 [11 230 34 7 0 1 0 1] [29 230 34 7 0 1 0 1] + set mcp.width h=4 [53 243 22 22 0 1 0 1] [0] trackpanmode>=4 [53 203 22 22 0 1 0 1] [0] + set mcp.width.label h=4 [47 230 34 7 0 1 0 1] [0] + + EndLayout ; end of "Big Meter (pan at bottom)" + +EndLayout ; end of "Big Meter" + + +Layout "2. Silver Big Meter" "silver-mcp-big-meter" +set mcp.size [93 319] +front mcp.volume.label +set med [373] +set sml [300] +set mcp.folder folderstate<0 [86 300 7 18 0 1 0 1] [0 300 18 18 0 1 0 1] + +set mcp.trackidx [2 58 88 18 0 0 0 0] +set mcp.trackidx.margin [0 3 0 5 0.5] +set mcp.trackidx.color ?recarm [220 26 0] [100 100 100] + +set mcp_bottom_anchor h=4 [17 86 22 22 0 0 0 0] [35 86 22 22 0 0 0 0] +set mcp.pan.color [42 42 42 191 0 0 0 0] +set mcp.pan.label h=4 [11 113 34 7 0 0 0 0] [29 113 34 7 0 0 0 0] +set mcp.pan.label.color [47 47 47] +set mcp.pan.label.margin [0 0 0 0 0.5] +set mcp.width h=4 [53 86 22 22 0 0 0 0] [0] +set mcp.width.color [42 42 42 225 0 0 0 0] +set mcp.width.label h=4 [47 113 34 7 0 0 0 0] [0] +set mcp.width.label.color [220 220 220] +set mcp.width.label.margin [0 0 0 0 0.5] +set mcp.io [32 4 55 19 0 0 0 0] +set mcp.recinput [5 39 82 17 0 0 0 0] +set mcp.recinput.color [160 160 160] +set mcp.recinput.margin [4 0 18 0] +set mcp.fx [5 18 23 17 0 0 0 0] +set mcp.fxbyp [5 4 23 14 0 0 0 0] +set mcp.fxin [32 23 55 12 0 0 0 0] +set mcp.extmixer.mode [1] +set mcp.extmixer [0] + +set mcp.label [2 300 88 18 0 1 0 1] +set mcp.label.margin [2 0 2 0 0.5] +set mcp.label.color [150 150 150] + +set mcp.meter.readout.color [184 184 184 220 255 150 150 255] +set mcp.meter.rmsreadout.color [255 255 150 200] +set mcp.meter.scale.color.unlit.top [140 140 140 100 0 0 0 255] +set mcp.meter.scale.color.unlit.bottom [90 90 90 100 0 0 0 255] +set mcp.meter.scale.color.lit.top [255 255 255 255 0 0 0 150] +set mcp.meter.scale.color.lit.bottom [200 200 200 255 0 0 0 150] + + Layout "2. Silver Big Meter (pan at bottom)" + + set mcp.volume h=4 [17 243 22 22 0 1 0 1] [35 243 22 22 0 1 0 1] trackpanmode>=4 [17 203 22 22 0 1 0 1] [35 203 22 22 0 1 0 1] + set mcp.pan.label h=4 [11 230 34 7 0 1 0 1] [29 230 34 7 0 1 0 1] + set mcp.width h=4 [53 243 22 22 0 1 0 1] [0] trackpanmode>=4 [53 203 22 22 0 1 0 1] [0] + set mcp.width.label h=4 [47 230 34 7 0 1 0 1] [0] + + EndLayout ; end of "Big Meter (pan at bottom)" + +EndLayout ; end of "Big Meter" + + +Layout "3. Black Big Meter" "black-mcp-big-meter" +set mcp.size [93 319] +front mcp.volume.label +set med [373] +set sml [300] +set mcp.folder folderstate<0 [86 300 7 18 0 1 0 1] [0 300 18 18 0 1 0 1] + +set mcp.label [1 300 91 18 0 1 0 1] +set mcp.label.margin [2 0 2 0 0.5] +set mcp.label.color [125 125 125] + +set mcp.trackidx [2 58 88 18 0 0 0 0] +set mcp.trackidx.margin [0 3 0 5 0.5] +set mcp.trackidx.color ?recarm [220 26 0] [100 100 100] + +set mcp_bottom_anchor h=4 [17 86 22 22 0 0 0 0] [35 86 22 22 0 0 0 0] +set mcp.pan.color [174 174 174 191 0 0 0 0] +set mcp.pan.label h=4 [11 113 34 7 0 0 0 0] [29 113 34 7 0 0 0 0] +set mcp.pan.label.color [141 141 141] +set mcp.pan.label.margin [0 0 0 0 0.5] +set mcp.width h=4 [53 86 22 22 0 0 0 0] [0] +set mcp.width.color [174 174 174 225 0 0 0 0] +set mcp.width.label h=4 [47 113 34 7 0 0 0 0] [0] +set mcp.width.label.color [141 141 141] +set mcp.width.label.margin [0 0 0 0 0.5] +set mcp.io [32 4 55 19 0 0 0 0] +set mcp.recinput [5 39 82 17 0 0 0 0] +set mcp.recinput.color [160 160 160] +set mcp.recinput.margin [4 0 18 0] +set mcp.fx [5 18 23 17 0 0 0 0] +set mcp.fxbyp [5 4 23 14 0 0 0 0] +set mcp.fxin [32 23 55 12 0 0 0 0] +set mcp.extmixer.mode [1] +set mcp.extmixer [0] + + + +set mcp.meter.readout.color [184 184 184 220 255 150 150 255] +set mcp.meter.rmsreadout.color [255 255 150 200] +set mcp.meter.scale.color.unlit.top [150 150 150 100 0 0 0 255] +set mcp.meter.scale.color.unlit.bottom [70 70 70 100 0 0 0 255] +set mcp.meter.scale.color.lit.top [255 255 255 255 0 0 0 150] +set mcp.meter.scale.color.lit.bottom [200 200 200 255 0 0 0 150] + + + + Layout "3. Black Big Meter (pan at bottom)" + + set mcp.volume h=4 [17 243 22 22 0 1 0 1] [35 243 22 22 0 1 0 1] trackpanmode>=4 [17 203 22 22 0 1 0 1] [35 203 22 22 0 1 0 1] + set mcp.pan.label h=4 [11 230 34 7 0 1 0 1] [29 230 34 7 0 1 0 1] + set mcp.width h=4 [53 243 22 22 0 1 0 1] [0] trackpanmode>=4 [53 203 22 22 0 1 0 1] [0] + set mcp.width.label h=4 [47 230 34 7 0 1 0 1] [0] + + EndLayout ; end of "Big Meter (pan at bottom, black)" + +EndLayout ; end of "Big Meter (black)" + + + +; -------------------------------------------------------------------------------------- + + + + + +clear master.mcp.* +set master.mcp.size [121 319] +front master.mcp.volume.label +set master.mcp.fx mcp.fx +set master.mcp.fxbyp mcp.fxbyp +set master.mcp.io [30 3 39 16 0 0 0 0] +set master.mcp.mono [8 52 41 16 0 0 0 0] +set master.mcp.label [30 22 48 10 0 0 0 0] +set master.mcp.label.margin [0 0 0 0 0] +set master.mcp.label.color mcp.label.color +set master.mcp_column_anchor [96 79] +set master.mcp.mute + master.mcp_column_anchor [0 0 17 18 0 0 0 0] +set master.mcp.solo + master.mcp_column_anchor [0 21 17 18 0 0 0 0] +set master.mcp.env + master.mcp_column_anchor [0 42 17 26 0 0 0 0] +set master.mcp.volume h>273 [10 91 17 219 0 0 0 1] [10 80 17 230 0 0 0 1] +set master.mcp.volume.label h>273 [8 79 82 14 0 0 0 0] [8 79 82 3 0 0 0 0] +set master.mcp.volume.label.color h>273 mcp.volume.label.color [83 83 83] +set master.mcp.volume.label.margin [1 5 0 0 0.5] +set master.mcp.meter h>273 [30 97 57 210 0 0 0 1] [30 86 57 221 0 0 0 1] +set master.mcp.meter.vu.div [6] +set master.mcp.meter.vu.rmsdiv [6] +set master.mcp.meter.readout.color [255 255 255 220 255 150 150 255] +set master.mcp.meter.rmsreadout.color [255 255 150 200] +set master.mcp.meter.scale.color.unlit.top [255 255 255 100 0 0 0 255] +set master.mcp.meter.scale.color.unlit.bottom [255 255 255 100 0 0 0 255] +set master.mcp.meter.scale.color.lit.top [255 255 255 255 0 0 0 150] +set master.mcp.meter.scale.color.lit.bottom [255 255 255 255 0 0 0 150] +set master.mcp.pan + [48 -20] mcp.pan +set master.mcp.pan.color mcp.pan.color +set master.mcp.pan.label [79 52 34 16 0 0 0 0] +set master.mcp.pan.label.color mcp.pan.label.color +set master.mcp.pan.label.margin mcp.pan.label.margin +set master.mcp.menubutton [96 261 24 40 0 1 0 1] + + + + +Layout "Alt 1" +set master.mcp.pan [54 47 18 18 0 0 0 0] +set master.mcp.pan.label [72 48 41 16 0 0 0 0] +set master.mcp.mono [8 48 41 16 0 0 0 0] +set master.mcp.volume h>273 [9 82 19 228 0 0 0 1] [9 71 19 239 0 0 0 1] +set master.mcp.volume.label h>273 [8 70 82 14 0 0 0 0] [8 70 82 3 0 0 0 0] +set master.mcp.meter h>273 [30 88 57 219 0 0 0 1] [30 77 57 230 0 0 0 1] +set master.mcp_column_anchor [96 70] +set master.mcp.mute + master.mcp_column_anchor [0 0 17 18 0 0 0 0] +set master.mcp.solo + master.mcp_column_anchor [0 21 17 18 0 0 0 0] +set master.mcp.env + master.mcp_column_anchor [0 42 17 26 0 0 0 0] +EndLayout ; end of "Alt 1" + + +Layout "Alt 2" "alt2" +set master.mcp.label [1 35 119 18 0 0 0 0] +set master.mcp.label.margin [2 0 2 0 0.5] +set master.mcp.io [30 3 39 31 0 0 0 0] +set master.mcp.pan [54 61 18 18 0 0 0 0] +set master.mcp.pan.label [72 62 41 16 0 0 0 0] +set master.mcp.mono [8 62 41 16 0 0 0 0] +set master.mcp.volume.label h>273 [8 84 82 14 0 0 0 0] [8 84 82 3 0 0 0 0] +set master.mcp_column_anchor [96 84] +set master.mcp.mute + master.mcp_column_anchor [0 0 17 18 0 0 0 0] +set master.mcp.solo + master.mcp_column_anchor [0 21 17 18 0 0 0 0] +set master.mcp.env + master.mcp_column_anchor [0 42 17 26 0 0 0 0] +set master.mcp.volume h>273 [9 98 19 212 0 0 0 1] [9 87 19 223 0 0 0 1] +set master.mcp.meter h>273 [30 102 57 205 0 0 0 1] [30 91 57 216 0 0 0 1] +EndLayout ; end of "Alt 2" + +Layout "Large Master" "classic-mcp-large" +set master.mcp.size [141 319] +set master.mcp.io [30 3 20 19 0 0 0 0] +set master.mcp.mono [54 4 44 16 0 0 0 0] +set master.mcp.pan [111 50 22 22 0 0 0 0] +set master.mcp.pan.color [51 51 51 191 0 0 0 0] +set master.mcp.pan.label [105 77 34 7 0 0 0 0] +set master.mcp.pan.label.color [96 92 85] +set master.mcp.pan.label.margin [0 0 0 0 0.5] +set master.mcp.menubutton [116 261 24 40 0 1 0 1] +set master.mcp.volume.label h>273 [8 49 96 14 0 0 0 0] [8 49 96 3 0 0 0 0] +set master.mcp.volume h>273 [9 63 19 247 0 0 0 1] [9 52 19 258 0 0 0 1] +set master.mcp.meter h>273 [30 67 71 240 0 0 0 1] [30 56 71 251 0 0 0 1] +set master.mcp_column_anchor [110 90] +set master.mcp.mute + master.mcp_column_anchor [0 0 23 20 0 0 0 0] +set master.mcp.solo + master.mcp_column_anchor [0 23 23 20 0 0 0 0] +set master.mcp.env + master.mcp_column_anchor [0 46 23 30 0 0 0 0] +EndLayout ; end of "Large Master" + + +Layout "2. Silver Master" "silver-mcp-default" + +set master.mcp.size [121 319] + +EndLayout + + +Layout "3. Black Master" black-mcp-default + +set master.mcp.size [121 319] +set master.mcp.pan.color [174 174 174 191 0 0 0 0] +set master.mcp.pan.label.color [155 155 155] + +EndLayout + + + + +; ------------------------------------------- + + +clear trans.* +set trans.size [1041 85] +set trans.size.minmax [540 40 2048 200] +set trans.size.dockedheight [43] +set trans.margin [2 2 2 2] +set trans_border [6] ; HELLO USER! you can edit this number (<- <-) to expand/contract overall spacing +set trans_others_width h<85 w<1000 + [250] [trans_border{x}] + [360] [trans_border{x}] [61] +set trans_controls_anchor ?trans_flags&1 + + [3] trans_others_width [trans_border{x}] [3 0] +set trans.rew + trans_controls_anchor [0 3 29 33] +set trans.stop + trans_controls_anchor [28 3 31 33] +set trans.play + trans_controls_anchor [58 3 31 33] +set trans.pause + trans_controls_anchor [88 3 31 33] +set trans.fwd + trans_controls_anchor [118 3 29 33] +set trans.rec + trans_controls_anchor [153 3 31 33] +set trans.repeat + + [5] [trans.rec{w}] trans.rec +set trans_controls_width + * [-1] [trans.rew{x}] + [trans.repeat{x}] [trans.repeat{w}] +set trans_others_anchor ?trans_flags&1 [2] + trans_controls_anchor + trans_controls_width [trans_border{x}] +set trans.automode + trans_others_anchor [0 1 61 34] +set trans_status_width + trans_others_width * [-1] + [trans.automode{w}] [trans_border{x}] +set trans.status h>84 [2 64 1037 19 0 0 1 1] + + + [trans.automode{x}] [trans.automode{w}] [trans_border{x}] w<1000 [0 1 trans_status_width{x} 18] [0 1 trans_status_width{x} 34] +set trans.status.margin w<1000 h<85 [5 1 5 0] [7 1 7 0] [7 1 7 0] +set trans.bpm.tap + + + trans_others_width trans_controls_width * [2] [trans_border{x}] [3 1 45 16] +set trans.bpm.tap.margin [2 4 2 0 0.5] +set trans.bpm.edit [trans.bpm.tap 17 trans.bpm.tap 18] +set trans.bpm.edit.margin [0 0 0 2 0.5] +set trans.curtimesig ?trans_flags&4 + + + [trans.bpm.tap{x}] [trans.bpm.tap{w}] [trans_border{x}] [0 1 33 34] [0] +set trans.rate ?trans_flags&2 + + + + + [trans.bpm.tap{x}] [trans.bpm.tap{w}] [trans.curtimesig{w}] [trans_border{x}] ?trans_flags&4 [trans_border{x}] [0] h>84 [0 1 200 17 0 0 0.1 0] w<1000 [0 1 60 17 0 0 0 0] w>1400 [0 1 205 17 0 0 0 0] [0 1 100 17 0 0 0.3 0] [0] +set trans.rate.fader ?trans_flags&2 w<1000 h<85 [trans.rate 19 16 16 0 0 0 0] [trans.rate 18 trans.rate 17 0 0 trans.rate 0] [trans.rate 18 trans.rate 17 0 0 trans.rate 0] [0] +set trans.sel h>84 [2 40 220 18 0 0 0 0] w<1000 [trans.status 19 trans.status 16 0 0 0 0] [811 10 220 17 1 0 1 0] + +Layout "1. Classic Small" "classic-mcp-small" +clear trans.* +set trans.size [1041 28] +set trans.size.minmax [514 28 2048 54] +set trans.margin [0 0 0 0] +set trans_border [6] +set doublerow + + [880] ?trans_flags&4 + [33] trans_border{x} [0] ?trans_flags&2 + [76] trans_border{x} [0] +set trans.size.dockedheight w 360 if not pointing + +// event(msg1,msg2,msg3) to send events + +// this will send noteons/offs for each button +// first axis will be pitch (14 bit), others will map to CC 1..n MSB/LSB +// ignores povs + + +// memory map +oldaxis = 100; + + +// + +hasrun ? ( + oldbuttons != buttons ? ( + mc=0; + m=1; + loop(numbuttons, + (buttons&m) != (oldbuttons&m) ? ( + event($x90, 64+mc, (buttons&m)?127:0); + ); + m+=m; + mc+=1; + ); + ); // button states + + i=0; + loop(numaxis, + thisaxis = axis(i); + oldaxis[i] != thisaxis ? ( + v=(thisaxis * 8192)+8192; + v<0?v=0:v>16383?v=16383; + i==0 ? ( // pitch for first + event($xe0, v&127, (v/128)|0); + ) : ( + event($xb0, i, (v/128)|0); + event($xb0, i+32, v&127); + ); + ); + i+=1; + ); +) : hasrun=1; + + +oldbuttons = buttons; + +i=0; +loop(numaxis, + oldaxis[i] = axis(i); + i+=1; +); + diff --git a/Data/joystick_midi/rockband_drums.txt b/Data/joystick_midi/rockband_drums.txt new file mode 100644 index 0000000..745ff2c --- /dev/null +++ b/Data/joystick_midi/rockband_drums.txt @@ -0,0 +1,96 @@ +// rockband drum input + +// hold select and hit one of the 4 pads to select skill level (in non-bfd mode) + +// TODO: xbox 360 values below + + + +// buttons (bitmask), numbuttons (valid bits in buttons) +// systime (time in seconds) +// axis(x), numaxis (number actually supported) +// pov(x), numpov, pov(x) > 360 if not pointing + +@submode PS3 +@submode PS3 (for bfd) +@submode XBox360 +@submode XBox360 (for bfd) + +// input config +(submode & 2) ? ( + // (these are for xbox 360) + + // TODO need to correct these for xbox + kick_button = 16; + pads_hit = 1024; + select_button = 256; + pad1 = $x4; + pad2 = $x8; + pad3 = $x1; + pad4 = $x2; +) : ( + // (these are for ps3) + kick_button = 16; + pads_hit = 1024; + select_button = 256; + pad1 = $x4; + pad2 = $x8; + pad3 = $x1; + pad4 = $x2; +); + + +padmask = pad1|pad2|pad3|pad4; + + + +vel1=vel2=vel3=vel4=vel5=127; +// output config +(submode & 1) ? ( +note1 = 36; // kick +note2 = 38; //snare +note3 = 42; // hh +note4 = 45; // tom +note5 = 49; // cymbal +vel5 = 45; + +) : ( + +(buttons & select_button) && (buttons&pads_hit) ? ( + (buttons & pad1) ? skill_level=0; + (buttons & pad2) ? skill_level=1; + (buttons & pad3) ? skill_level=2; + (buttons & pad4) ? skill_level=3; +); +note1 = 60 + skill_level*12; // kick note +note2 = note1+1; // deltas to each extra +note3 = note2+1; +note4 = note3+1; +note5 = note4+1; +); + +(buttons & kick_button) && !(lastbuttons&kick_button) ? ( + event($x90,note1,vel1); + event($x80,note1,0); +); + +(buttons & pads_hit) && !(buttons & select_button) ? ( + (buttons & pad1) && !(lastbuttons & pad1) ? ( + event($x90,note2,vel2); + event($x80,note2,0); + ); + (buttons & pad2) && !(lastbuttons & pad2) ? ( + event($x90,note3,vel3); + event($x80,note3,0); + ); + (buttons & pad3) && !(lastbuttons & pad3) ? ( + event($x90,note4,vel4); + event($x80,note4,0); + ); + (buttons & pad4) && !(lastbuttons & pad4) ? ( + event($x90,note5,vel5); + event($x80,note5,0); + ); +); + +lastbuttons=buttons; \ No newline at end of file diff --git a/Data/joystick_midi/rockband_guitar.txt b/Data/joystick_midi/rockband_guitar.txt new file mode 100644 index 0000000..c1daa91 --- /dev/null +++ b/Data/joystick_midi/rockband_guitar.txt @@ -0,0 +1,124 @@ +// rockband guitar input +// user instructions: + +// for non-musical mode: +// hold select and hit one of the first 4 fret buttons to select skill level (Green=easy, red=medium, yellow=hard, blue=expert) + +// for musical mode: +// hold select and hit one of the first 4 fret buttons for octave adjust +// hold select and strum up or down to adjust semitones + +// developer notes: +// buttons (bitmask), numbuttons (valid bits in buttons) +// systime (time in seconds) +// axis(x), numaxis (number actually supported) +// pov(x), numpov, pov(x) > 360 if not pointing + +@submode PS3 +@submode XBox360 +@submode PS3-musical +@submode XBox360-musical + +// input config +(submode&1) ? ( + // (these are for xbox 360 rockband2 guitar) + octave_button = 256; + buttonmask_1 = 1; + buttonmask_2 = 2; + buttonmask_3 = 8; + buttonmask_4 = 4; + buttonmask_5 = 16; + selectbutton = 512; // todo see what the real button is on the 360 rb2 controller + pitch_axis = 3; +) : ( + // (these are for ps3 rockband2 guitar) + octave_button = 64; + buttonmask_1 = 2; + buttonmask_2 = 4; + buttonmask_3 = 8; + buttonmask_4 = 1; + buttonmask_5 = 16; + pitch_axis = 2; + selectbutton = 256; +); + +allbuttons = buttonmask_1|buttonmask_2|buttonmask_3|buttonmask_4|buttonmask_5; + +(buttons&selectbutton) ?( + (buttons&buttonmask_1) ? skill_level=0; + (buttons&buttonmask_2) ? skill_level=1; + (buttons&buttonmask_3) ? skill_level=2; + (buttons&buttonmask_4) ? skill_level=3; +); + + +// output config + + +(submode&2) ? ( + +// musical mode +(buttons & selectbutton) ?( + strum = pov(0); + (strum!=laststrum && (abs(strum) < 1.0 || abs(strum-180.0)<1.0)) ? ( + musicaloffset = musicaloffset + ((abs(strum) < 1.0) ? 1 : -1); + ); +); +oct=12; + +note1 = 36 + skill_level*12 + musicaloffset; +note2 = note1+3; // deltas to each extra (These are more musical in this mode) +note3 = note2+2; +note4 = note3+2; +note5 = note4+3; + +) : ( + +oct=0; // ignore octaves in this mode + +note1 = 60 + skill_level*12; // base note +note2 = note1+1; // deltas to each extra +note3 = note2+1; +note4 = note3+1; +note5 = note4+1; +); + +pitch = (((axis(pitch_axis)+1)*4096+8192)|0); +pitch<8192?pitch=8192:pitch>16383?pitch=16383; +pitch != lastpitch ? ( + event($xe0,(pitch&127),(pitch/128)|0); + lastpitch=pitch; +); + + + + +strum = pov(0); + +strum != laststrum ? ( + // clear any notes + noteson ? ( + useoct = (noteson&octave_button)? oct:0; + (noteson&buttonmask_1)?event($x80,note1+useoct,0); + (noteson&buttonmask_2)?event($x80,note2+useoct,0); + (noteson&buttonmask_3)?event($x80,note3+useoct,0); + (noteson&buttonmask_4)?event($x80,note4+useoct,0); + (noteson&buttonmask_5)?event($x80,note5+useoct,0); + ); + noteson=0; + + // if on, set any notes + abs(strum) < 1.0 || abs(strum-180.0)<1.0 ? ( + ( noteson = (buttons&(allbuttons|octave_button))) ? ( + useoct = (noteson&octave_button)? oct:0; + (noteson&buttonmask_1)?event($x90,note1+useoct,127); + (noteson&buttonmask_2)?event($x90,note2+useoct,127); + (noteson&buttonmask_3)?event($x90,note3+useoct,127); + (noteson&buttonmask_4)?event($x90,note4+useoct,127); + (noteson&buttonmask_5)?event($x90,note5+useoct,127); + ); + ); + + laststrum=strum; +); + diff --git a/Data/sample.reascale b/Data/sample.reascale new file mode 100644 index 0000000..acafef2 --- /dev/null +++ b/Data/sample.reascale @@ -0,0 +1,39 @@ +# .reascale files can be loaded into the REAPER MIDI editor, via the Scale dropdown list. +# +# Types (the first number): +# -2: end of submenu +# -1: separator +# 0: scale +# 1: chord +# 2: submenu in scale section +# 3: submenu in chord section +# +# Lines starting with '#' are ignored. +# +# To create a scale definition, place each interval number +# at the correct number of semitones from the left (root). +# +# For snapping to scale, all that matters is which values are not zero. +# The actual interval numbers are only used when transposing, and can be repeated. +# If needed (for exotic scales), use A=10, B=11, C=12, etc. +# +# examples: +# +# 0 "Major" 102034050607 +# 1 "Major triad" 100030050000 +# 0 "Blues" 100304450070 +# 1 "Dim 7th chord" 100300500700 + +-1 +0 "Whole Tone" 102030506070 + +2 "Modes" +0 "Dorian" 102304050670 +0 "Phrygian" 120304056070 +0 "Lydian" 102030450607 +0 "Mixolydian" 102034050670 +0 "Aeolian" 102304056070 +0 "Locrian" 120304506070 +-2 + +1 "Tritone" 100000500000 diff --git a/Data/seqbaby_data/_Default Kit.txt b/Data/seqbaby_data/_Default Kit.txt new file mode 100644 index 0000000..c3e0481 --- /dev/null +++ b/Data/seqbaby_data/_Default Kit.txt @@ -0,0 +1,13 @@ +// Default Kit +// +// This is an empty kit. +// +// Note name line syntax: +// MIDI note value, tab, Note name +// +// Here is an example (remove comment marks '//' to take line into use): +//36 Kick +//37 Rim +//38 Snare + + diff --git a/Data/toolbar_icons/composite_toolbar_overlay 2.png b/Data/toolbar_icons/composite_toolbar_overlay 2.png new file mode 100644 index 0000000..70e43cb Binary files /dev/null and b/Data/toolbar_icons/composite_toolbar_overlay 2.png differ diff --git a/Data/toolbar_icons/composite_toolbar_overlay.png b/Data/toolbar_icons/composite_toolbar_overlay.png new file mode 100644 index 0000000..70e43cb Binary files /dev/null and b/Data/toolbar_icons/composite_toolbar_overlay.png differ diff --git a/Data/toolbar_icons/toolbar_audio_waveform.png b/Data/toolbar_icons/toolbar_audio_waveform.png new file mode 100644 index 0000000..6cb4e92 Binary files /dev/null and b/Data/toolbar_icons/toolbar_audio_waveform.png differ diff --git a/Data/toolbar_icons/toolbar_audio_waveform_active.png b/Data/toolbar_icons/toolbar_audio_waveform_active.png new file mode 100644 index 0000000..3471237 Binary files /dev/null and b/Data/toolbar_icons/toolbar_audio_waveform_active.png differ diff --git a/Data/toolbar_icons/toolbar_audio_waveform_delete_remove.png b/Data/toolbar_icons/toolbar_audio_waveform_delete_remove.png new file mode 100644 index 0000000..498f21c Binary files /dev/null and b/Data/toolbar_icons/toolbar_audio_waveform_delete_remove.png differ diff --git a/Data/toolbar_icons/toolbar_audio_waveform_delete_silence.png b/Data/toolbar_icons/toolbar_audio_waveform_delete_silence.png new file mode 100644 index 0000000..8b258c2 Binary files /dev/null and b/Data/toolbar_icons/toolbar_audio_waveform_delete_silence.png differ diff --git a/Data/toolbar_icons/toolbar_audio_waveform_digital_sample_rate.png b/Data/toolbar_icons/toolbar_audio_waveform_digital_sample_rate.png new file mode 100644 index 0000000..9332dfb Binary files /dev/null and b/Data/toolbar_icons/toolbar_audio_waveform_digital_sample_rate.png differ diff --git a/Data/toolbar_icons/toolbar_audio_waveform_disk_load.png b/Data/toolbar_icons/toolbar_audio_waveform_disk_load.png new file mode 100644 index 0000000..dab944b Binary files /dev/null and b/Data/toolbar_icons/toolbar_audio_waveform_disk_load.png differ diff --git a/Data/toolbar_icons/toolbar_audio_waveform_folder.png b/Data/toolbar_icons/toolbar_audio_waveform_folder.png new file mode 100644 index 0000000..983143b Binary files /dev/null and b/Data/toolbar_icons/toolbar_audio_waveform_folder.png differ diff --git a/Data/toolbar_icons/toolbar_audio_waveform_metronome.png b/Data/toolbar_icons/toolbar_audio_waveform_metronome.png new file mode 100644 index 0000000..8b32f34 Binary files /dev/null and b/Data/toolbar_icons/toolbar_audio_waveform_metronome.png differ diff --git a/Data/toolbar_icons/toolbar_audio_waveform_move_grid_quantize.png b/Data/toolbar_icons/toolbar_audio_waveform_move_grid_quantize.png new file mode 100644 index 0000000..c9325d6 Binary files /dev/null and b/Data/toolbar_icons/toolbar_audio_waveform_move_grid_quantize.png differ diff --git a/Data/toolbar_icons/toolbar_audio_waveform_normalize_gain.png b/Data/toolbar_icons/toolbar_audio_waveform_normalize_gain.png new file mode 100644 index 0000000..f36d6b5 Binary files /dev/null and b/Data/toolbar_icons/toolbar_audio_waveform_normalize_gain.png differ diff --git a/Data/toolbar_icons/toolbar_audio_waveform_normalize_gain_common_locked.png b/Data/toolbar_icons/toolbar_audio_waveform_normalize_gain_common_locked.png new file mode 100644 index 0000000..13ba84b Binary files /dev/null and b/Data/toolbar_icons/toolbar_audio_waveform_normalize_gain_common_locked.png differ diff --git a/Data/toolbar_icons/toolbar_audio_waveform_primary_external_editor.png b/Data/toolbar_icons/toolbar_audio_waveform_primary_external_editor.png new file mode 100644 index 0000000..c34bf23 Binary files /dev/null and b/Data/toolbar_icons/toolbar_audio_waveform_primary_external_editor.png differ diff --git a/Data/toolbar_icons/toolbar_audio_waveform_properties.png b/Data/toolbar_icons/toolbar_audio_waveform_properties.png new file mode 100644 index 0000000..09e7739 Binary files /dev/null and b/Data/toolbar_icons/toolbar_audio_waveform_properties.png differ diff --git a/Data/toolbar_icons/toolbar_audio_waveform_render_disk_mono.png b/Data/toolbar_icons/toolbar_audio_waveform_render_disk_mono.png new file mode 100644 index 0000000..c94d639 Binary files /dev/null and b/Data/toolbar_icons/toolbar_audio_waveform_render_disk_mono.png differ diff --git a/Data/toolbar_icons/toolbar_audio_waveform_render_disk_stereo.png b/Data/toolbar_icons/toolbar_audio_waveform_render_disk_stereo.png new file mode 100644 index 0000000..2cf31fc Binary files /dev/null and b/Data/toolbar_icons/toolbar_audio_waveform_render_disk_stereo.png differ diff --git a/Data/toolbar_icons/toolbar_audio_waveform_render_effects_mono.png b/Data/toolbar_icons/toolbar_audio_waveform_render_effects_mono.png new file mode 100644 index 0000000..9a7af5c Binary files /dev/null and b/Data/toolbar_icons/toolbar_audio_waveform_render_effects_mono.png differ diff --git a/Data/toolbar_icons/toolbar_audio_waveform_render_effects_stereo.png b/Data/toolbar_icons/toolbar_audio_waveform_render_effects_stereo.png new file mode 100644 index 0000000..14ebb40 Binary files /dev/null and b/Data/toolbar_icons/toolbar_audio_waveform_render_effects_stereo.png differ diff --git a/Data/toolbar_icons/toolbar_audio_waveform_reverse.png b/Data/toolbar_icons/toolbar_audio_waveform_reverse.png new file mode 100644 index 0000000..010f0a5 Binary files /dev/null and b/Data/toolbar_icons/toolbar_audio_waveform_reverse.png differ diff --git a/Data/toolbar_icons/toolbar_audio_waveform_secondary_external_editor.png b/Data/toolbar_icons/toolbar_audio_waveform_secondary_external_editor.png new file mode 100644 index 0000000..3d6bef1 Binary files /dev/null and b/Data/toolbar_icons/toolbar_audio_waveform_secondary_external_editor.png differ diff --git a/Data/toolbar_icons/toolbar_audio_waveform_selection.png b/Data/toolbar_icons/toolbar_audio_waveform_selection.png new file mode 100644 index 0000000..93113cb Binary files /dev/null and b/Data/toolbar_icons/toolbar_audio_waveform_selection.png differ diff --git a/Data/toolbar_icons/toolbar_audio_waveform_selection_trim.png b/Data/toolbar_icons/toolbar_audio_waveform_selection_trim.png new file mode 100644 index 0000000..e1d7d72 Binary files /dev/null and b/Data/toolbar_icons/toolbar_audio_waveform_selection_trim.png differ diff --git a/Data/toolbar_icons/toolbar_audio_waveform_system.png b/Data/toolbar_icons/toolbar_audio_waveform_system.png new file mode 100644 index 0000000..7fb011e Binary files /dev/null and b/Data/toolbar_icons/toolbar_audio_waveform_system.png differ diff --git a/Data/toolbar_icons/toolbar_audio_waveform_time_selection_render.png b/Data/toolbar_icons/toolbar_audio_waveform_time_selection_render.png new file mode 100644 index 0000000..18c0069 Binary files /dev/null and b/Data/toolbar_icons/toolbar_audio_waveform_time_selection_render.png differ diff --git a/Data/toolbar_icons/toolbar_audio_waveform_time_selection_render_stereo.png b/Data/toolbar_icons/toolbar_audio_waveform_time_selection_render_stereo.png new file mode 100644 index 0000000..0c7c177 Binary files /dev/null and b/Data/toolbar_icons/toolbar_audio_waveform_time_selection_render_stereo.png differ diff --git a/Data/toolbar_icons/toolbar_audio_waveform_transient_dynamic_split.png b/Data/toolbar_icons/toolbar_audio_waveform_transient_dynamic_split.png new file mode 100644 index 0000000..584f83b Binary files /dev/null and b/Data/toolbar_icons/toolbar_audio_waveform_transient_dynamic_split.png differ diff --git a/Data/toolbar_icons/toolbar_audio_waveform_transient_dynamic_split_lines.png b/Data/toolbar_icons/toolbar_audio_waveform_transient_dynamic_split_lines.png new file mode 100644 index 0000000..ab2916d Binary files /dev/null and b/Data/toolbar_icons/toolbar_audio_waveform_transient_dynamic_split_lines.png differ diff --git a/Data/toolbar_icons/toolbar_audio_waveform_transient_dynamic_split_scissors.png b/Data/toolbar_icons/toolbar_audio_waveform_transient_dynamic_split_scissors.png new file mode 100644 index 0000000..9bcd0a9 Binary files /dev/null and b/Data/toolbar_icons/toolbar_audio_waveform_transient_dynamic_split_scissors.png differ diff --git a/Data/toolbar_icons/toolbar_bass_clef_note.png b/Data/toolbar_icons/toolbar_bass_clef_note.png new file mode 100644 index 0000000..dc8b673 Binary files /dev/null and b/Data/toolbar_icons/toolbar_bass_clef_note.png differ diff --git a/Data/toolbar_icons/toolbar_blank.png b/Data/toolbar_icons/toolbar_blank.png new file mode 100644 index 0000000..bafa966 Binary files /dev/null and b/Data/toolbar_icons/toolbar_blank.png differ diff --git a/Data/toolbar_icons/toolbar_clip_properties.png b/Data/toolbar_icons/toolbar_clip_properties.png new file mode 100644 index 0000000..b6b4e90 Binary files /dev/null and b/Data/toolbar_icons/toolbar_clip_properties.png differ diff --git a/Data/toolbar_icons/toolbar_color_dynamic_volume_ff.png b/Data/toolbar_icons/toolbar_color_dynamic_volume_ff.png new file mode 100644 index 0000000..585ba38 Binary files /dev/null and b/Data/toolbar_icons/toolbar_color_dynamic_volume_ff.png differ diff --git a/Data/toolbar_icons/toolbar_color_item.png b/Data/toolbar_icons/toolbar_color_item.png new file mode 100644 index 0000000..30109d9 Binary files /dev/null and b/Data/toolbar_icons/toolbar_color_item.png differ diff --git a/Data/toolbar_icons/toolbar_color_item_selected.png b/Data/toolbar_icons/toolbar_color_item_selected.png new file mode 100644 index 0000000..ec788f5 Binary files /dev/null and b/Data/toolbar_icons/toolbar_color_item_selected.png differ diff --git a/Data/toolbar_icons/toolbar_color_load_disk.png b/Data/toolbar_icons/toolbar_color_load_disk.png new file mode 100644 index 0000000..283e93c Binary files /dev/null and b/Data/toolbar_icons/toolbar_color_load_disk.png differ diff --git a/Data/toolbar_icons/toolbar_color_midi_channel.png b/Data/toolbar_icons/toolbar_color_midi_channel.png new file mode 100644 index 0000000..ebc8bd2 Binary files /dev/null and b/Data/toolbar_icons/toolbar_color_midi_channel.png differ diff --git a/Data/toolbar_icons/toolbar_color_none_delete_remove.png b/Data/toolbar_icons/toolbar_color_none_delete_remove.png new file mode 100644 index 0000000..27c1804 Binary files /dev/null and b/Data/toolbar_icons/toolbar_color_none_delete_remove.png differ diff --git a/Data/toolbar_icons/toolbar_color_note_pitch.png b/Data/toolbar_icons/toolbar_color_note_pitch.png new file mode 100644 index 0000000..b1e9eae Binary files /dev/null and b/Data/toolbar_icons/toolbar_color_note_pitch.png differ diff --git a/Data/toolbar_icons/toolbar_color_properties.png b/Data/toolbar_icons/toolbar_color_properties.png new file mode 100644 index 0000000..6e36490 Binary files /dev/null and b/Data/toolbar_icons/toolbar_color_properties.png differ diff --git a/Data/toolbar_icons/toolbar_color_random_question.png b/Data/toolbar_icons/toolbar_color_random_question.png new file mode 100644 index 0000000..bfc6a36 Binary files /dev/null and b/Data/toolbar_icons/toolbar_color_random_question.png differ diff --git a/Data/toolbar_icons/toolbar_color_region.png b/Data/toolbar_icons/toolbar_color_region.png new file mode 100644 index 0000000..b808092 Binary files /dev/null and b/Data/toolbar_icons/toolbar_color_region.png differ diff --git a/Data/toolbar_icons/toolbar_color_selecte_delete_remove.png b/Data/toolbar_icons/toolbar_color_selecte_delete_remove.png new file mode 100644 index 0000000..ae52d97 Binary files /dev/null and b/Data/toolbar_icons/toolbar_color_selecte_delete_remove.png differ diff --git a/Data/toolbar_icons/toolbar_color_selected.png b/Data/toolbar_icons/toolbar_color_selected.png new file mode 100644 index 0000000..460b42e Binary files /dev/null and b/Data/toolbar_icons/toolbar_color_selected.png differ diff --git a/Data/toolbar_icons/toolbar_color_source_input_channel.png b/Data/toolbar_icons/toolbar_color_source_input_channel.png new file mode 100644 index 0000000..790a7e2 Binary files /dev/null and b/Data/toolbar_icons/toolbar_color_source_input_channel.png differ diff --git a/Data/toolbar_icons/toolbar_color_sws_extension.png b/Data/toolbar_icons/toolbar_color_sws_extension.png new file mode 100644 index 0000000..3747396 Binary files /dev/null and b/Data/toolbar_icons/toolbar_color_sws_extension.png differ diff --git a/Data/toolbar_icons/toolbar_color_take_lane.png b/Data/toolbar_icons/toolbar_color_take_lane.png new file mode 100644 index 0000000..60bdb76 Binary files /dev/null and b/Data/toolbar_icons/toolbar_color_take_lane.png differ diff --git a/Data/toolbar_icons/toolbar_color_track.png b/Data/toolbar_icons/toolbar_color_track.png new file mode 100644 index 0000000..f5fc76c Binary files /dev/null and b/Data/toolbar_icons/toolbar_color_track.png differ diff --git a/Data/toolbar_icons/toolbar_cpu_offline.png b/Data/toolbar_icons/toolbar_cpu_offline.png new file mode 100644 index 0000000..7a27eec Binary files /dev/null and b/Data/toolbar_icons/toolbar_cpu_offline.png differ diff --git a/Data/toolbar_icons/toolbar_cpu_online.png b/Data/toolbar_icons/toolbar_cpu_online.png new file mode 100644 index 0000000..3c91142 Binary files /dev/null and b/Data/toolbar_icons/toolbar_cpu_online.png differ diff --git a/Data/toolbar_icons/toolbar_cpu_properties_performance.png b/Data/toolbar_icons/toolbar_cpu_properties_performance.png new file mode 100644 index 0000000..669efaf Binary files /dev/null and b/Data/toolbar_icons/toolbar_cpu_properties_performance.png differ diff --git a/Data/toolbar_icons/toolbar_disk_properties_resource_path.png b/Data/toolbar_icons/toolbar_disk_properties_resource_path.png new file mode 100644 index 0000000..21387c4 Binary files /dev/null and b/Data/toolbar_icons/toolbar_disk_properties_resource_path.png differ diff --git a/Data/toolbar_icons/toolbar_dotted_note.png b/Data/toolbar_icons/toolbar_dotted_note.png new file mode 100644 index 0000000..860c744 Binary files /dev/null and b/Data/toolbar_icons/toolbar_dotted_note.png differ diff --git a/Data/toolbar_icons/toolbar_eighth_quaver_grid.png b/Data/toolbar_icons/toolbar_eighth_quaver_grid.png new file mode 100644 index 0000000..6dfa4fd Binary files /dev/null and b/Data/toolbar_icons/toolbar_eighth_quaver_grid.png differ diff --git a/Data/toolbar_icons/toolbar_eighth_quaver_note.png b/Data/toolbar_icons/toolbar_eighth_quaver_note.png new file mode 100644 index 0000000..ea0b2ce Binary files /dev/null and b/Data/toolbar_icons/toolbar_eighth_quaver_note.png differ diff --git a/Data/toolbar_icons/toolbar_env_auto_latch.png b/Data/toolbar_icons/toolbar_env_auto_latch.png new file mode 100644 index 0000000..0ffe9a1 Binary files /dev/null and b/Data/toolbar_icons/toolbar_env_auto_latch.png differ diff --git a/Data/toolbar_icons/toolbar_env_auto_preview.png b/Data/toolbar_icons/toolbar_env_auto_preview.png new file mode 100644 index 0000000..1e7e773 Binary files /dev/null and b/Data/toolbar_icons/toolbar_env_auto_preview.png differ diff --git a/Data/toolbar_icons/toolbar_env_auto_read.png b/Data/toolbar_icons/toolbar_env_auto_read.png new file mode 100644 index 0000000..ffbecca Binary files /dev/null and b/Data/toolbar_icons/toolbar_env_auto_read.png differ diff --git a/Data/toolbar_icons/toolbar_env_auto_touch.png b/Data/toolbar_icons/toolbar_env_auto_touch.png new file mode 100644 index 0000000..6adfa77 Binary files /dev/null and b/Data/toolbar_icons/toolbar_env_auto_touch.png differ diff --git a/Data/toolbar_icons/toolbar_env_auto_trim.png b/Data/toolbar_icons/toolbar_env_auto_trim.png new file mode 100644 index 0000000..62258fb Binary files /dev/null and b/Data/toolbar_icons/toolbar_env_auto_trim.png differ diff --git a/Data/toolbar_icons/toolbar_env_auto_write.png b/Data/toolbar_icons/toolbar_env_auto_write.png new file mode 100644 index 0000000..6ff50b3 Binary files /dev/null and b/Data/toolbar_icons/toolbar_env_auto_write.png differ diff --git a/Data/toolbar_icons/toolbar_envelope_copy.png b/Data/toolbar_icons/toolbar_envelope_copy.png new file mode 100644 index 0000000..01ab7f7 Binary files /dev/null and b/Data/toolbar_icons/toolbar_envelope_copy.png differ diff --git a/Data/toolbar_icons/toolbar_envelope_delete_remove.png b/Data/toolbar_icons/toolbar_envelope_delete_remove.png new file mode 100644 index 0000000..2038741 Binary files /dev/null and b/Data/toolbar_icons/toolbar_envelope_delete_remove.png differ diff --git a/Data/toolbar_icons/toolbar_envelope_fade_shape_cycle.png b/Data/toolbar_icons/toolbar_envelope_fade_shape_cycle.png new file mode 100644 index 0000000..0eb644f Binary files /dev/null and b/Data/toolbar_icons/toolbar_envelope_fade_shape_cycle.png differ diff --git a/Data/toolbar_icons/toolbar_envelope_fade_shape_none_default_delete_remove.png b/Data/toolbar_icons/toolbar_envelope_fade_shape_none_default_delete_remove.png new file mode 100644 index 0000000..fe64143 Binary files /dev/null and b/Data/toolbar_icons/toolbar_envelope_fade_shape_none_default_delete_remove.png differ diff --git a/Data/toolbar_icons/toolbar_envelope_insert_four.png b/Data/toolbar_icons/toolbar_envelope_insert_four.png new file mode 100644 index 0000000..e2c7984 Binary files /dev/null and b/Data/toolbar_icons/toolbar_envelope_insert_four.png differ diff --git a/Data/toolbar_icons/toolbar_envelope_item_selected.png b/Data/toolbar_icons/toolbar_envelope_item_selected.png new file mode 100644 index 0000000..bd366c0 Binary files /dev/null and b/Data/toolbar_icons/toolbar_envelope_item_selected.png differ diff --git a/Data/toolbar_icons/toolbar_envelope_item_selected_replace.png b/Data/toolbar_icons/toolbar_envelope_item_selected_replace.png new file mode 100644 index 0000000..01263aa Binary files /dev/null and b/Data/toolbar_icons/toolbar_envelope_item_selected_replace.png differ diff --git a/Data/toolbar_icons/toolbar_envelope_knob_parameter_volume.png b/Data/toolbar_icons/toolbar_envelope_knob_parameter_volume.png new file mode 100644 index 0000000..04752f1 Binary files /dev/null and b/Data/toolbar_icons/toolbar_envelope_knob_parameter_volume.png differ diff --git a/Data/toolbar_icons/toolbar_envelope_lock.png b/Data/toolbar_icons/toolbar_envelope_lock.png new file mode 100644 index 0000000..e09d64a Binary files /dev/null and b/Data/toolbar_icons/toolbar_envelope_lock.png differ diff --git a/Data/toolbar_icons/toolbar_envelope_mute.png b/Data/toolbar_icons/toolbar_envelope_mute.png new file mode 100644 index 0000000..3266308 Binary files /dev/null and b/Data/toolbar_icons/toolbar_envelope_mute.png differ diff --git a/Data/toolbar_icons/toolbar_envelope_new.png b/Data/toolbar_icons/toolbar_envelope_new.png new file mode 100644 index 0000000..669a6f2 Binary files /dev/null and b/Data/toolbar_icons/toolbar_envelope_new.png differ diff --git a/Data/toolbar_icons/toolbar_envelope_pan.png b/Data/toolbar_icons/toolbar_envelope_pan.png new file mode 100644 index 0000000..5baa078 Binary files /dev/null and b/Data/toolbar_icons/toolbar_envelope_pan.png differ diff --git a/Data/toolbar_icons/toolbar_envelope_pitch_note.png b/Data/toolbar_icons/toolbar_envelope_pitch_note.png new file mode 100644 index 0000000..a5a395a Binary files /dev/null and b/Data/toolbar_icons/toolbar_envelope_pitch_note.png differ diff --git a/Data/toolbar_icons/toolbar_envelope_point_delete_remove.png b/Data/toolbar_icons/toolbar_envelope_point_delete_remove.png new file mode 100644 index 0000000..ae1043d Binary files /dev/null and b/Data/toolbar_icons/toolbar_envelope_point_delete_remove.png differ diff --git a/Data/toolbar_icons/toolbar_envelope_point_insert.png b/Data/toolbar_icons/toolbar_envelope_point_insert.png new file mode 100644 index 0000000..aeb6be7 Binary files /dev/null and b/Data/toolbar_icons/toolbar_envelope_point_insert.png differ diff --git a/Data/toolbar_icons/toolbar_envelope_point_move_axis.png b/Data/toolbar_icons/toolbar_envelope_point_move_axis.png new file mode 100644 index 0000000..cc1eeb6 Binary files /dev/null and b/Data/toolbar_icons/toolbar_envelope_point_move_axis.png differ diff --git a/Data/toolbar_icons/toolbar_envelope_point_move_down.png b/Data/toolbar_icons/toolbar_envelope_point_move_down.png new file mode 100644 index 0000000..ea7f60a Binary files /dev/null and b/Data/toolbar_icons/toolbar_envelope_point_move_down.png differ diff --git a/Data/toolbar_icons/toolbar_envelope_point_move_left.png b/Data/toolbar_icons/toolbar_envelope_point_move_left.png new file mode 100644 index 0000000..e1e5b0a Binary files /dev/null and b/Data/toolbar_icons/toolbar_envelope_point_move_left.png differ diff --git a/Data/toolbar_icons/toolbar_envelope_point_move_right.png b/Data/toolbar_icons/toolbar_envelope_point_move_right.png new file mode 100644 index 0000000..5f39c08 Binary files /dev/null and b/Data/toolbar_icons/toolbar_envelope_point_move_right.png differ diff --git a/Data/toolbar_icons/toolbar_envelope_point_move_up.png b/Data/toolbar_icons/toolbar_envelope_point_move_up.png new file mode 100644 index 0000000..3be2af7 Binary files /dev/null and b/Data/toolbar_icons/toolbar_envelope_point_move_up.png differ diff --git a/Data/toolbar_icons/toolbar_envelope_point_new.png b/Data/toolbar_icons/toolbar_envelope_point_new.png new file mode 100644 index 0000000..93758f8 Binary files /dev/null and b/Data/toolbar_icons/toolbar_envelope_point_new.png differ diff --git a/Data/toolbar_icons/toolbar_envelope_point_time_selection_cut_scissors.png b/Data/toolbar_icons/toolbar_envelope_point_time_selection_cut_scissors.png new file mode 100644 index 0000000..a49f29f Binary files /dev/null and b/Data/toolbar_icons/toolbar_envelope_point_time_selection_cut_scissors.png differ diff --git a/Data/toolbar_icons/toolbar_envelope_point_time_selection_delete_remove.png b/Data/toolbar_icons/toolbar_envelope_point_time_selection_delete_remove.png new file mode 100644 index 0000000..5fe23aa Binary files /dev/null and b/Data/toolbar_icons/toolbar_envelope_point_time_selection_delete_remove.png differ diff --git a/Data/toolbar_icons/toolbar_envelope_reduce_number_points_delete_remove.png b/Data/toolbar_icons/toolbar_envelope_reduce_number_points_delete_remove.png new file mode 100644 index 0000000..b8f1bd6 Binary files /dev/null and b/Data/toolbar_icons/toolbar_envelope_reduce_number_points_delete_remove.png differ diff --git a/Data/toolbar_icons/toolbar_envelope_show.png b/Data/toolbar_icons/toolbar_envelope_show.png new file mode 100644 index 0000000..956af81 Binary files /dev/null and b/Data/toolbar_icons/toolbar_envelope_show.png differ diff --git a/Data/toolbar_icons/toolbar_envelope_tempo_time_clock.png b/Data/toolbar_icons/toolbar_envelope_tempo_time_clock.png new file mode 100644 index 0000000..bbda654 Binary files /dev/null and b/Data/toolbar_icons/toolbar_envelope_tempo_time_clock.png differ diff --git a/Data/toolbar_icons/toolbar_envelope_time_selection.png b/Data/toolbar_icons/toolbar_envelope_time_selection.png new file mode 100644 index 0000000..20915b9 Binary files /dev/null and b/Data/toolbar_icons/toolbar_envelope_time_selection.png differ diff --git a/Data/toolbar_icons/toolbar_envelope_vol.png b/Data/toolbar_icons/toolbar_envelope_vol.png new file mode 100644 index 0000000..a4cfd4d Binary files /dev/null and b/Data/toolbar_icons/toolbar_envelope_vol.png differ diff --git a/Data/toolbar_icons/toolbar_folder_add_implode.png b/Data/toolbar_icons/toolbar_folder_add_implode.png new file mode 100644 index 0000000..6d60ec7 Binary files /dev/null and b/Data/toolbar_icons/toolbar_folder_add_implode.png differ diff --git a/Data/toolbar_icons/toolbar_folder_add_new.png b/Data/toolbar_icons/toolbar_folder_add_new.png new file mode 100644 index 0000000..78f4169 Binary files /dev/null and b/Data/toolbar_icons/toolbar_folder_add_new.png differ diff --git a/Data/toolbar_icons/toolbar_folder_combine.png b/Data/toolbar_icons/toolbar_folder_combine.png new file mode 100644 index 0000000..f03e5a2 Binary files /dev/null and b/Data/toolbar_icons/toolbar_folder_combine.png differ diff --git a/Data/toolbar_icons/toolbar_folder_delete_remove.png b/Data/toolbar_icons/toolbar_folder_delete_remove.png new file mode 100644 index 0000000..cdc47d2 Binary files /dev/null and b/Data/toolbar_icons/toolbar_folder_delete_remove.png differ diff --git a/Data/toolbar_icons/toolbar_folder_hide.png b/Data/toolbar_icons/toolbar_folder_hide.png new file mode 100644 index 0000000..72c739d Binary files /dev/null and b/Data/toolbar_icons/toolbar_folder_hide.png differ diff --git a/Data/toolbar_icons/toolbar_folder_item_delete_remove.png b/Data/toolbar_icons/toolbar_folder_item_delete_remove.png new file mode 100644 index 0000000..006ff4c Binary files /dev/null and b/Data/toolbar_icons/toolbar_folder_item_delete_remove.png differ diff --git a/Data/toolbar_icons/toolbar_folder_save_disk.png b/Data/toolbar_icons/toolbar_folder_save_disk.png new file mode 100644 index 0000000..99a4b6d Binary files /dev/null and b/Data/toolbar_icons/toolbar_folder_save_disk.png differ diff --git a/Data/toolbar_icons/toolbar_folder_seperate_explode.png b/Data/toolbar_icons/toolbar_folder_seperate_explode.png new file mode 100644 index 0000000..419a5a8 Binary files /dev/null and b/Data/toolbar_icons/toolbar_folder_seperate_explode.png differ diff --git a/Data/toolbar_icons/toolbar_folder_show_visible.png b/Data/toolbar_icons/toolbar_folder_show_visible.png new file mode 100644 index 0000000..548eb6d Binary files /dev/null and b/Data/toolbar_icons/toolbar_folder_show_visible.png differ diff --git a/Data/toolbar_icons/toolbar_freeze_render_apply_snowflake.png b/Data/toolbar_icons/toolbar_freeze_render_apply_snowflake.png new file mode 100644 index 0000000..5f91477 Binary files /dev/null and b/Data/toolbar_icons/toolbar_freeze_render_apply_snowflake.png differ diff --git a/Data/toolbar_icons/toolbar_glue.png b/Data/toolbar_icons/toolbar_glue.png new file mode 100644 index 0000000..04de3f5 Binary files /dev/null and b/Data/toolbar_icons/toolbar_glue.png differ diff --git a/Data/toolbar_icons/toolbar_glue_time_selection.png b/Data/toolbar_icons/toolbar_glue_time_selection.png new file mode 100644 index 0000000..b9ec324 Binary files /dev/null and b/Data/toolbar_icons/toolbar_glue_time_selection.png differ diff --git a/Data/toolbar_icons/toolbar_grid_adjust_decrease.png b/Data/toolbar_icons/toolbar_grid_adjust_decrease.png new file mode 100644 index 0000000..fb159cb Binary files /dev/null and b/Data/toolbar_icons/toolbar_grid_adjust_decrease.png differ diff --git a/Data/toolbar_icons/toolbar_grid_adjust_increase.png b/Data/toolbar_icons/toolbar_grid_adjust_increase.png new file mode 100644 index 0000000..c0a9a9b Binary files /dev/null and b/Data/toolbar_icons/toolbar_grid_adjust_increase.png differ diff --git a/Data/toolbar_icons/toolbar_group_add_item.png b/Data/toolbar_icons/toolbar_group_add_item.png new file mode 100644 index 0000000..33698ad Binary files /dev/null and b/Data/toolbar_icons/toolbar_group_add_item.png differ diff --git a/Data/toolbar_icons/toolbar_group_add_item_selected.png b/Data/toolbar_icons/toolbar_group_add_item_selected.png new file mode 100644 index 0000000..8c42780 Binary files /dev/null and b/Data/toolbar_icons/toolbar_group_add_item_selected.png differ diff --git a/Data/toolbar_icons/toolbar_group_explode.png b/Data/toolbar_icons/toolbar_group_explode.png new file mode 100644 index 0000000..f6983bb Binary files /dev/null and b/Data/toolbar_icons/toolbar_group_explode.png differ diff --git a/Data/toolbar_icons/toolbar_group_ungroup_remove_item.png b/Data/toolbar_icons/toolbar_group_ungroup_remove_item.png new file mode 100644 index 0000000..58211be Binary files /dev/null and b/Data/toolbar_icons/toolbar_group_ungroup_remove_item.png differ diff --git a/Data/toolbar_icons/toolbar_group_ungroup_remove_item_selected.png b/Data/toolbar_icons/toolbar_group_ungroup_remove_item_selected.png new file mode 100644 index 0000000..0d4b399 Binary files /dev/null and b/Data/toolbar_icons/toolbar_group_ungroup_remove_item_selected.png differ diff --git a/Data/toolbar_icons/toolbar_half_minim_grid.png b/Data/toolbar_icons/toolbar_half_minim_grid.png new file mode 100644 index 0000000..0ec1d66 Binary files /dev/null and b/Data/toolbar_icons/toolbar_half_minim_grid.png differ diff --git a/Data/toolbar_icons/toolbar_half_minim_note.png b/Data/toolbar_icons/toolbar_half_minim_note.png new file mode 100644 index 0000000..060ea9a Binary files /dev/null and b/Data/toolbar_icons/toolbar_half_minim_note.png differ diff --git a/Data/toolbar_icons/toolbar_hide_mixer.png b/Data/toolbar_icons/toolbar_hide_mixer.png new file mode 100644 index 0000000..97504bf Binary files /dev/null and b/Data/toolbar_icons/toolbar_hide_mixer.png differ diff --git a/Data/toolbar_icons/toolbar_hide_selected.png b/Data/toolbar_icons/toolbar_hide_selected.png new file mode 100644 index 0000000..6d9b8db Binary files /dev/null and b/Data/toolbar_icons/toolbar_hide_selected.png differ diff --git a/Data/toolbar_icons/toolbar_hide_tcp.png b/Data/toolbar_icons/toolbar_hide_tcp.png new file mode 100644 index 0000000..ad7cf2e Binary files /dev/null and b/Data/toolbar_icons/toolbar_hide_tcp.png differ diff --git a/Data/toolbar_icons/toolbar_input_fx_effect.png b/Data/toolbar_icons/toolbar_input_fx_effect.png new file mode 100644 index 0000000..f867db2 Binary files /dev/null and b/Data/toolbar_icons/toolbar_input_fx_effect.png differ diff --git a/Data/toolbar_icons/toolbar_item_arpeggiate.png b/Data/toolbar_icons/toolbar_item_arpeggiate.png new file mode 100644 index 0000000..bc8597c Binary files /dev/null and b/Data/toolbar_icons/toolbar_item_arpeggiate.png differ diff --git a/Data/toolbar_icons/toolbar_item_duplicate_copy.png b/Data/toolbar_icons/toolbar_item_duplicate_copy.png new file mode 100644 index 0000000..a3478c0 Binary files /dev/null and b/Data/toolbar_icons/toolbar_item_duplicate_copy.png differ diff --git a/Data/toolbar_icons/toolbar_item_effects_fx_delete_remove.png b/Data/toolbar_icons/toolbar_item_effects_fx_delete_remove.png new file mode 100644 index 0000000..b438f9a Binary files /dev/null and b/Data/toolbar_icons/toolbar_item_effects_fx_delete_remove.png differ diff --git a/Data/toolbar_icons/toolbar_item_effects_fx_show.png b/Data/toolbar_icons/toolbar_item_effects_fx_show.png new file mode 100644 index 0000000..3d6ff5f Binary files /dev/null and b/Data/toolbar_icons/toolbar_item_effects_fx_show.png differ diff --git a/Data/toolbar_icons/toolbar_item_explode_lane_take.png b/Data/toolbar_icons/toolbar_item_explode_lane_take.png new file mode 100644 index 0000000..e7a43e6 Binary files /dev/null and b/Data/toolbar_icons/toolbar_item_explode_lane_take.png differ diff --git a/Data/toolbar_icons/toolbar_item_free_positioning.png b/Data/toolbar_icons/toolbar_item_free_positioning.png new file mode 100644 index 0000000..d44681c Binary files /dev/null and b/Data/toolbar_icons/toolbar_item_free_positioning.png differ diff --git a/Data/toolbar_icons/toolbar_item_green_arrow_selected.png b/Data/toolbar_icons/toolbar_item_green_arrow_selected.png new file mode 100644 index 0000000..f0bf7b8 Binary files /dev/null and b/Data/toolbar_icons/toolbar_item_green_arrow_selected.png differ diff --git a/Data/toolbar_icons/toolbar_item_green_arrow_selected_replace.png b/Data/toolbar_icons/toolbar_item_green_arrow_selected_replace.png new file mode 100644 index 0000000..846b4dd Binary files /dev/null and b/Data/toolbar_icons/toolbar_item_green_arrow_selected_replace.png differ diff --git a/Data/toolbar_icons/toolbar_item_implode_lane_take.png b/Data/toolbar_icons/toolbar_item_implode_lane_take.png new file mode 100644 index 0000000..ff90eb6 Binary files /dev/null and b/Data/toolbar_icons/toolbar_item_implode_lane_take.png differ diff --git a/Data/toolbar_icons/toolbar_item_insert_move_space.png b/Data/toolbar_icons/toolbar_item_insert_move_space.png new file mode 100644 index 0000000..fc538de Binary files /dev/null and b/Data/toolbar_icons/toolbar_item_insert_move_space.png differ diff --git a/Data/toolbar_icons/toolbar_item_left_edge_grow.png b/Data/toolbar_icons/toolbar_item_left_edge_grow.png new file mode 100644 index 0000000..858b6dd Binary files /dev/null and b/Data/toolbar_icons/toolbar_item_left_edge_grow.png differ diff --git a/Data/toolbar_icons/toolbar_item_left_edge_position.png b/Data/toolbar_icons/toolbar_item_left_edge_position.png new file mode 100644 index 0000000..c90de3b Binary files /dev/null and b/Data/toolbar_icons/toolbar_item_left_edge_position.png differ diff --git a/Data/toolbar_icons/toolbar_item_left_edge_shrink.png b/Data/toolbar_icons/toolbar_item_left_edge_shrink.png new file mode 100644 index 0000000..89333e2 Binary files /dev/null and b/Data/toolbar_icons/toolbar_item_left_edge_shrink.png differ diff --git a/Data/toolbar_icons/toolbar_item_next.png b/Data/toolbar_icons/toolbar_item_next.png new file mode 100644 index 0000000..1b05f79 Binary files /dev/null and b/Data/toolbar_icons/toolbar_item_next.png differ diff --git a/Data/toolbar_icons/toolbar_item_previous.png b/Data/toolbar_icons/toolbar_item_previous.png new file mode 100644 index 0000000..b19b1b1 Binary files /dev/null and b/Data/toolbar_icons/toolbar_item_previous.png differ diff --git a/Data/toolbar_icons/toolbar_item_properties.png b/Data/toolbar_icons/toolbar_item_properties.png new file mode 100644 index 0000000..836dff9 Binary files /dev/null and b/Data/toolbar_icons/toolbar_item_properties.png differ diff --git a/Data/toolbar_icons/toolbar_item_red_arrow_selected.png b/Data/toolbar_icons/toolbar_item_red_arrow_selected.png new file mode 100644 index 0000000..9fc982a Binary files /dev/null and b/Data/toolbar_icons/toolbar_item_red_arrow_selected.png differ diff --git a/Data/toolbar_icons/toolbar_item_remove_overlap.png b/Data/toolbar_icons/toolbar_item_remove_overlap.png new file mode 100644 index 0000000..50e319f Binary files /dev/null and b/Data/toolbar_icons/toolbar_item_remove_overlap.png differ diff --git a/Data/toolbar_icons/toolbar_item_right_edge_grow.png b/Data/toolbar_icons/toolbar_item_right_edge_grow.png new file mode 100644 index 0000000..4d046ed Binary files /dev/null and b/Data/toolbar_icons/toolbar_item_right_edge_grow.png differ diff --git a/Data/toolbar_icons/toolbar_item_right_edge_position.png b/Data/toolbar_icons/toolbar_item_right_edge_position.png new file mode 100644 index 0000000..f5f29a2 Binary files /dev/null and b/Data/toolbar_icons/toolbar_item_right_edge_position.png differ diff --git a/Data/toolbar_icons/toolbar_item_right_edge_shrink.png b/Data/toolbar_icons/toolbar_item_right_edge_shrink.png new file mode 100644 index 0000000..525e2b2 Binary files /dev/null and b/Data/toolbar_icons/toolbar_item_right_edge_shrink.png differ diff --git a/Data/toolbar_icons/toolbar_item_select.png b/Data/toolbar_icons/toolbar_item_select.png new file mode 100644 index 0000000..76ec49f Binary files /dev/null and b/Data/toolbar_icons/toolbar_item_select.png differ diff --git a/Data/toolbar_icons/toolbar_item_select_all.png b/Data/toolbar_icons/toolbar_item_select_all.png new file mode 100644 index 0000000..5ab01c6 Binary files /dev/null and b/Data/toolbar_icons/toolbar_item_select_all.png differ diff --git a/Data/toolbar_icons/toolbar_item_select_inverse.png b/Data/toolbar_icons/toolbar_item_select_inverse.png new file mode 100644 index 0000000..5b58bb7 Binary files /dev/null and b/Data/toolbar_icons/toolbar_item_select_inverse.png differ diff --git a/Data/toolbar_icons/toolbar_item_selected_above_move.png b/Data/toolbar_icons/toolbar_item_selected_above_move.png new file mode 100644 index 0000000..deed096 Binary files /dev/null and b/Data/toolbar_icons/toolbar_item_selected_above_move.png differ diff --git a/Data/toolbar_icons/toolbar_item_selected_align.png b/Data/toolbar_icons/toolbar_item_selected_align.png new file mode 100644 index 0000000..e322088 Binary files /dev/null and b/Data/toolbar_icons/toolbar_item_selected_align.png differ diff --git a/Data/toolbar_icons/toolbar_item_selected_area_select_move.png b/Data/toolbar_icons/toolbar_item_selected_area_select_move.png new file mode 100644 index 0000000..48b9906 Binary files /dev/null and b/Data/toolbar_icons/toolbar_item_selected_area_select_move.png differ diff --git a/Data/toolbar_icons/toolbar_item_selected_grow_grid.png b/Data/toolbar_icons/toolbar_item_selected_grow_grid.png new file mode 100644 index 0000000..c49e38b Binary files /dev/null and b/Data/toolbar_icons/toolbar_item_selected_grow_grid.png differ diff --git a/Data/toolbar_icons/toolbar_item_selected_move.png b/Data/toolbar_icons/toolbar_item_selected_move.png new file mode 100644 index 0000000..5b5919a Binary files /dev/null and b/Data/toolbar_icons/toolbar_item_selected_move.png differ diff --git a/Data/toolbar_icons/toolbar_item_selected_move_end.png b/Data/toolbar_icons/toolbar_item_selected_move_end.png new file mode 100644 index 0000000..639385a Binary files /dev/null and b/Data/toolbar_icons/toolbar_item_selected_move_end.png differ diff --git a/Data/toolbar_icons/toolbar_item_selected_move_horizontal_position_time.png b/Data/toolbar_icons/toolbar_item_selected_move_horizontal_position_time.png new file mode 100644 index 0000000..e3a8500 Binary files /dev/null and b/Data/toolbar_icons/toolbar_item_selected_move_horizontal_position_time.png differ diff --git a/Data/toolbar_icons/toolbar_item_selected_move_nudge_left.png b/Data/toolbar_icons/toolbar_item_selected_move_nudge_left.png new file mode 100644 index 0000000..174dd0c Binary files /dev/null and b/Data/toolbar_icons/toolbar_item_selected_move_nudge_left.png differ diff --git a/Data/toolbar_icons/toolbar_item_selected_move_nudge_left_more.png b/Data/toolbar_icons/toolbar_item_selected_move_nudge_left_more.png new file mode 100644 index 0000000..8422807 Binary files /dev/null and b/Data/toolbar_icons/toolbar_item_selected_move_nudge_left_more.png differ diff --git a/Data/toolbar_icons/toolbar_item_selected_move_nudge_right.png b/Data/toolbar_icons/toolbar_item_selected_move_nudge_right.png new file mode 100644 index 0000000..1307377 Binary files /dev/null and b/Data/toolbar_icons/toolbar_item_selected_move_nudge_right.png differ diff --git a/Data/toolbar_icons/toolbar_item_selected_move_nudge_right_more.png b/Data/toolbar_icons/toolbar_item_selected_move_nudge_right_more.png new file mode 100644 index 0000000..5194bb4 Binary files /dev/null and b/Data/toolbar_icons/toolbar_item_selected_move_nudge_right_more.png differ diff --git a/Data/toolbar_icons/toolbar_item_selected_move_vertical_track.png b/Data/toolbar_icons/toolbar_item_selected_move_vertical_track.png new file mode 100644 index 0000000..44eba9b Binary files /dev/null and b/Data/toolbar_icons/toolbar_item_selected_move_vertical_track.png differ diff --git a/Data/toolbar_icons/toolbar_item_selected_snap.png b/Data/toolbar_icons/toolbar_item_selected_snap.png new file mode 100644 index 0000000..54ff2b4 Binary files /dev/null and b/Data/toolbar_icons/toolbar_item_selected_snap.png differ diff --git a/Data/toolbar_icons/toolbar_item_selected_swap.png b/Data/toolbar_icons/toolbar_item_selected_swap.png new file mode 100644 index 0000000..fb2d09c Binary files /dev/null and b/Data/toolbar_icons/toolbar_item_selected_swap.png differ diff --git a/Data/toolbar_icons/toolbar_item_selected_take_delete.png b/Data/toolbar_icons/toolbar_item_selected_take_delete.png new file mode 100644 index 0000000..2cf9371 Binary files /dev/null and b/Data/toolbar_icons/toolbar_item_selected_take_delete.png differ diff --git a/Data/toolbar_icons/toolbar_item_selected_take_delete_invert.png b/Data/toolbar_icons/toolbar_item_selected_take_delete_invert.png new file mode 100644 index 0000000..88fdf59 Binary files /dev/null and b/Data/toolbar_icons/toolbar_item_selected_take_delete_invert.png differ diff --git a/Data/toolbar_icons/toolbar_item_selected_take_extract.png b/Data/toolbar_icons/toolbar_item_selected_take_extract.png new file mode 100644 index 0000000..cbe8a9f Binary files /dev/null and b/Data/toolbar_icons/toolbar_item_selected_take_extract.png differ diff --git a/Data/toolbar_icons/toolbar_item_selected_take_insert.png b/Data/toolbar_icons/toolbar_item_selected_take_insert.png new file mode 100644 index 0000000..8acc1c8 Binary files /dev/null and b/Data/toolbar_icons/toolbar_item_selected_take_insert.png differ diff --git a/Data/toolbar_icons/toolbar_item_selected_take_move_down.png b/Data/toolbar_icons/toolbar_item_selected_take_move_down.png new file mode 100644 index 0000000..b05a3b0 Binary files /dev/null and b/Data/toolbar_icons/toolbar_item_selected_take_move_down.png differ diff --git a/Data/toolbar_icons/toolbar_item_selected_take_move_top.png b/Data/toolbar_icons/toolbar_item_selected_take_move_top.png new file mode 100644 index 0000000..c74e960 Binary files /dev/null and b/Data/toolbar_icons/toolbar_item_selected_take_move_top.png differ diff --git a/Data/toolbar_icons/toolbar_item_selected_take_move_up.png b/Data/toolbar_icons/toolbar_item_selected_take_move_up.png new file mode 100644 index 0000000..18b7579 Binary files /dev/null and b/Data/toolbar_icons/toolbar_item_selected_take_move_up.png differ diff --git a/Data/toolbar_icons/toolbar_item_selection_remove_contents_move_later.png b/Data/toolbar_icons/toolbar_item_selection_remove_contents_move_later.png new file mode 100644 index 0000000..be16581 Binary files /dev/null and b/Data/toolbar_icons/toolbar_item_selection_remove_contents_move_later.png differ diff --git a/Data/toolbar_icons/toolbar_item_source_preferred_position_properties.png b/Data/toolbar_icons/toolbar_item_source_preferred_position_properties.png new file mode 100644 index 0000000..44ec50d Binary files /dev/null and b/Data/toolbar_icons/toolbar_item_source_preferred_position_properties.png differ diff --git a/Data/toolbar_icons/toolbar_item_take.png b/Data/toolbar_icons/toolbar_item_take.png new file mode 100644 index 0000000..795487e Binary files /dev/null and b/Data/toolbar_icons/toolbar_item_take.png differ diff --git a/Data/toolbar_icons/toolbar_item_take_explode.png b/Data/toolbar_icons/toolbar_item_take_explode.png new file mode 100644 index 0000000..8d8ff2f Binary files /dev/null and b/Data/toolbar_icons/toolbar_item_take_explode.png differ diff --git a/Data/toolbar_icons/toolbar_item_take_selected_extract.png b/Data/toolbar_icons/toolbar_item_take_selected_extract.png new file mode 100644 index 0000000..8b2a1df Binary files /dev/null and b/Data/toolbar_icons/toolbar_item_take_selected_extract.png differ diff --git a/Data/toolbar_icons/toolbar_item_take_selected_lock.png b/Data/toolbar_icons/toolbar_item_take_selected_lock.png new file mode 100644 index 0000000..a65b916 Binary files /dev/null and b/Data/toolbar_icons/toolbar_item_take_selected_lock.png differ diff --git a/Data/toolbar_icons/toolbar_jog_back_rewind_little_bit.png b/Data/toolbar_icons/toolbar_jog_back_rewind_little_bit.png new file mode 100644 index 0000000..9dba61a Binary files /dev/null and b/Data/toolbar_icons/toolbar_jog_back_rewind_little_bit.png differ diff --git a/Data/toolbar_icons/toolbar_jog_forward_little_bit.png b/Data/toolbar_icons/toolbar_jog_forward_little_bit.png new file mode 100644 index 0000000..c96ba06 Binary files /dev/null and b/Data/toolbar_icons/toolbar_jog_forward_little_bit.png differ diff --git a/Data/toolbar_icons/toolbar_knob_parameter_learn_lock.png b/Data/toolbar_icons/toolbar_knob_parameter_learn_lock.png new file mode 100644 index 0000000..4673efa Binary files /dev/null and b/Data/toolbar_icons/toolbar_knob_parameter_learn_lock.png differ diff --git a/Data/toolbar_icons/toolbar_knob_parameter_visible_show.png b/Data/toolbar_icons/toolbar_knob_parameter_visible_show.png new file mode 100644 index 0000000..1a7b067 Binary files /dev/null and b/Data/toolbar_icons/toolbar_knob_parameter_visible_show.png differ diff --git a/Data/toolbar_icons/toolbar_marker_delete_remove.png b/Data/toolbar_icons/toolbar_marker_delete_remove.png new file mode 100644 index 0000000..9f70ef3 Binary files /dev/null and b/Data/toolbar_icons/toolbar_marker_delete_remove.png differ diff --git a/Data/toolbar_icons/toolbar_marker_insert_new.png b/Data/toolbar_icons/toolbar_marker_insert_new.png new file mode 100644 index 0000000..91e9c67 Binary files /dev/null and b/Data/toolbar_icons/toolbar_marker_insert_new.png differ diff --git a/Data/toolbar_icons/toolbar_marker_list.png b/Data/toolbar_icons/toolbar_marker_list.png new file mode 100644 index 0000000..7de3edc Binary files /dev/null and b/Data/toolbar_icons/toolbar_marker_list.png differ diff --git a/Data/toolbar_icons/toolbar_marker_load_disk.png b/Data/toolbar_icons/toolbar_marker_load_disk.png new file mode 100644 index 0000000..113d7c5 Binary files /dev/null and b/Data/toolbar_icons/toolbar_marker_load_disk.png differ diff --git a/Data/toolbar_icons/toolbar_marker_lock.png b/Data/toolbar_icons/toolbar_marker_lock.png new file mode 100644 index 0000000..0eb06da Binary files /dev/null and b/Data/toolbar_icons/toolbar_marker_lock.png differ diff --git a/Data/toolbar_icons/toolbar_marker_next.png b/Data/toolbar_icons/toolbar_marker_next.png new file mode 100644 index 0000000..08d248e Binary files /dev/null and b/Data/toolbar_icons/toolbar_marker_next.png differ diff --git a/Data/toolbar_icons/toolbar_marker_previous.png b/Data/toolbar_icons/toolbar_marker_previous.png new file mode 100644 index 0000000..f6db236 Binary files /dev/null and b/Data/toolbar_icons/toolbar_marker_previous.png differ diff --git a/Data/toolbar_icons/toolbar_marker_properties.png b/Data/toolbar_icons/toolbar_marker_properties.png new file mode 100644 index 0000000..a6c6259 Binary files /dev/null and b/Data/toolbar_icons/toolbar_marker_properties.png differ diff --git a/Data/toolbar_icons/toolbar_marker_renum.png b/Data/toolbar_icons/toolbar_marker_renum.png new file mode 100644 index 0000000..8c21254 Binary files /dev/null and b/Data/toolbar_icons/toolbar_marker_renum.png differ diff --git a/Data/toolbar_icons/toolbar_marker_time_selection_delete_remoe.png b/Data/toolbar_icons/toolbar_marker_time_selection_delete_remoe.png new file mode 100644 index 0000000..10ccde5 Binary files /dev/null and b/Data/toolbar_icons/toolbar_marker_time_selection_delete_remoe.png differ diff --git a/Data/toolbar_icons/toolbar_marker_time_tempo_delete_remove.png b/Data/toolbar_icons/toolbar_marker_time_tempo_delete_remove.png new file mode 100644 index 0000000..be39187 Binary files /dev/null and b/Data/toolbar_icons/toolbar_marker_time_tempo_delete_remove.png differ diff --git a/Data/toolbar_icons/toolbar_marker_time_tempo_insert_new.png b/Data/toolbar_icons/toolbar_marker_time_tempo_insert_new.png new file mode 100644 index 0000000..c2faaec Binary files /dev/null and b/Data/toolbar_icons/toolbar_marker_time_tempo_insert_new.png differ diff --git a/Data/toolbar_icons/toolbar_marker_time_tempo_next.png b/Data/toolbar_icons/toolbar_marker_time_tempo_next.png new file mode 100644 index 0000000..2f981f3 Binary files /dev/null and b/Data/toolbar_icons/toolbar_marker_time_tempo_next.png differ diff --git a/Data/toolbar_icons/toolbar_marker_time_tempo_previous.png b/Data/toolbar_icons/toolbar_marker_time_tempo_previous.png new file mode 100644 index 0000000..83420a5 Binary files /dev/null and b/Data/toolbar_icons/toolbar_marker_time_tempo_previous.png differ diff --git a/Data/toolbar_icons/toolbar_marker_time_tempo_properties.png b/Data/toolbar_icons/toolbar_marker_time_tempo_properties.png new file mode 100644 index 0000000..2045cb9 Binary files /dev/null and b/Data/toolbar_icons/toolbar_marker_time_tempo_properties.png differ diff --git a/Data/toolbar_icons/toolbar_marquee_cursor_selection.png b/Data/toolbar_icons/toolbar_marquee_cursor_selection.png new file mode 100644 index 0000000..fbe7aca Binary files /dev/null and b/Data/toolbar_icons/toolbar_marquee_cursor_selection.png differ diff --git a/Data/toolbar_icons/toolbar_midi_cc_above.png b/Data/toolbar_icons/toolbar_midi_cc_above.png new file mode 100644 index 0000000..10c54d1 Binary files /dev/null and b/Data/toolbar_icons/toolbar_midi_cc_above.png differ diff --git a/Data/toolbar_icons/toolbar_midi_cc_below.png b/Data/toolbar_icons/toolbar_midi_cc_below.png new file mode 100644 index 0000000..65bc649 Binary files /dev/null and b/Data/toolbar_icons/toolbar_midi_cc_below.png differ diff --git a/Data/toolbar_icons/toolbar_midi_cc_explode.png b/Data/toolbar_icons/toolbar_midi_cc_explode.png new file mode 100644 index 0000000..d12190c Binary files /dev/null and b/Data/toolbar_icons/toolbar_midi_cc_explode.png differ diff --git a/Data/toolbar_icons/toolbar_midi_cc_pitch_bend.png b/Data/toolbar_icons/toolbar_midi_cc_pitch_bend.png new file mode 100644 index 0000000..d41de23 Binary files /dev/null and b/Data/toolbar_icons/toolbar_midi_cc_pitch_bend.png differ diff --git a/Data/toolbar_icons/toolbar_midi_cc_scale_slope.png b/Data/toolbar_icons/toolbar_midi_cc_scale_slope.png new file mode 100644 index 0000000..8345091 Binary files /dev/null and b/Data/toolbar_icons/toolbar_midi_cc_scale_slope.png differ diff --git a/Data/toolbar_icons/toolbar_midi_cc_selected_decrease.png b/Data/toolbar_icons/toolbar_midi_cc_selected_decrease.png new file mode 100644 index 0000000..98e2b7f Binary files /dev/null and b/Data/toolbar_icons/toolbar_midi_cc_selected_decrease.png differ diff --git a/Data/toolbar_icons/toolbar_midi_cc_selected_increase.png b/Data/toolbar_icons/toolbar_midi_cc_selected_increase.png new file mode 100644 index 0000000..d73994d Binary files /dev/null and b/Data/toolbar_icons/toolbar_midi_cc_selected_increase.png differ diff --git a/Data/toolbar_icons/toolbar_midi_cc_set_scale_fix.png b/Data/toolbar_icons/toolbar_midi_cc_set_scale_fix.png new file mode 100644 index 0000000..f9ad40f Binary files /dev/null and b/Data/toolbar_icons/toolbar_midi_cc_set_scale_fix.png differ diff --git a/Data/toolbar_icons/toolbar_midi_delete_remove_none.png b/Data/toolbar_icons/toolbar_midi_delete_remove_none.png new file mode 100644 index 0000000..1eaf7bf Binary files /dev/null and b/Data/toolbar_icons/toolbar_midi_delete_remove_none.png differ diff --git a/Data/toolbar_icons/toolbar_midi_envelope.png b/Data/toolbar_icons/toolbar_midi_envelope.png new file mode 100644 index 0000000..06f12e8 Binary files /dev/null and b/Data/toolbar_icons/toolbar_midi_envelope.png differ diff --git a/Data/toolbar_icons/toolbar_midi_events_mode_cycle.png b/Data/toolbar_icons/toolbar_midi_events_mode_cycle.png new file mode 100644 index 0000000..2438941 Binary files /dev/null and b/Data/toolbar_icons/toolbar_midi_events_mode_cycle.png differ diff --git a/Data/toolbar_icons/toolbar_midi_events_mode_drum_diamond.png b/Data/toolbar_icons/toolbar_midi_events_mode_drum_diamond.png new file mode 100644 index 0000000..a61fc58 Binary files /dev/null and b/Data/toolbar_icons/toolbar_midi_events_mode_drum_diamond.png differ diff --git a/Data/toolbar_icons/toolbar_midi_events_mode_drum_triangle.png b/Data/toolbar_icons/toolbar_midi_events_mode_drum_triangle.png new file mode 100644 index 0000000..a91e329 Binary files /dev/null and b/Data/toolbar_icons/toolbar_midi_events_mode_drum_triangle.png differ diff --git a/Data/toolbar_icons/toolbar_midi_events_mode_normal_rectangle.png b/Data/toolbar_icons/toolbar_midi_events_mode_normal_rectangle.png new file mode 100644 index 0000000..cfd8e04 Binary files /dev/null and b/Data/toolbar_icons/toolbar_midi_events_mode_normal_rectangle.png differ diff --git a/Data/toolbar_icons/toolbar_midi_folder.png b/Data/toolbar_icons/toolbar_midi_folder.png new file mode 100644 index 0000000..43a5038 Binary files /dev/null and b/Data/toolbar_icons/toolbar_midi_folder.png differ diff --git a/Data/toolbar_icons/toolbar_midi_hide_unused_note_rows.png b/Data/toolbar_icons/toolbar_midi_hide_unused_note_rows.png new file mode 100644 index 0000000..e9eb46e Binary files /dev/null and b/Data/toolbar_icons/toolbar_midi_hide_unused_note_rows.png differ diff --git a/Data/toolbar_icons/toolbar_midi_hide_unused_unnamed_note_rows.png b/Data/toolbar_icons/toolbar_midi_hide_unused_unnamed_note_rows.png new file mode 100644 index 0000000..7d5ca60 Binary files /dev/null and b/Data/toolbar_icons/toolbar_midi_hide_unused_unnamed_note_rows.png differ diff --git a/Data/toolbar_icons/toolbar_midi_item.png b/Data/toolbar_icons/toolbar_midi_item.png new file mode 100644 index 0000000..f4b1acb Binary files /dev/null and b/Data/toolbar_icons/toolbar_midi_item.png differ diff --git a/Data/toolbar_icons/toolbar_midi_item_selected.png b/Data/toolbar_icons/toolbar_midi_item_selected.png new file mode 100644 index 0000000..c02a804 Binary files /dev/null and b/Data/toolbar_icons/toolbar_midi_item_selected.png differ diff --git a/Data/toolbar_icons/toolbar_midi_lengthen_note_grid_unit.png b/Data/toolbar_icons/toolbar_midi_lengthen_note_grid_unit.png new file mode 100644 index 0000000..07ae9c0 Binary files /dev/null and b/Data/toolbar_icons/toolbar_midi_lengthen_note_grid_unit.png differ diff --git a/Data/toolbar_icons/toolbar_midi_lengthen_note_pixel.png b/Data/toolbar_icons/toolbar_midi_lengthen_note_pixel.png new file mode 100644 index 0000000..cdc7f4a Binary files /dev/null and b/Data/toolbar_icons/toolbar_midi_lengthen_note_pixel.png differ diff --git a/Data/toolbar_icons/toolbar_midi_list.png b/Data/toolbar_icons/toolbar_midi_list.png new file mode 100644 index 0000000..5704161 Binary files /dev/null and b/Data/toolbar_icons/toolbar_midi_list.png differ diff --git a/Data/toolbar_icons/toolbar_midi_mode_event_list.png b/Data/toolbar_icons/toolbar_midi_mode_event_list.png new file mode 100644 index 0000000..1016d4f Binary files /dev/null and b/Data/toolbar_icons/toolbar_midi_mode_event_list.png differ diff --git a/Data/toolbar_icons/toolbar_midi_mode_musical_notation.png b/Data/toolbar_icons/toolbar_midi_mode_musical_notation.png new file mode 100644 index 0000000..428c8b3 Binary files /dev/null and b/Data/toolbar_icons/toolbar_midi_mode_musical_notation.png differ diff --git a/Data/toolbar_icons/toolbar_midi_mode_named_notes.png b/Data/toolbar_icons/toolbar_midi_mode_named_notes.png new file mode 100644 index 0000000..f15f27e Binary files /dev/null and b/Data/toolbar_icons/toolbar_midi_mode_named_notes.png differ diff --git a/Data/toolbar_icons/toolbar_midi_mode_piano_roll.png b/Data/toolbar_icons/toolbar_midi_mode_piano_roll.png new file mode 100644 index 0000000..5a2d28a Binary files /dev/null and b/Data/toolbar_icons/toolbar_midi_mode_piano_roll.png differ diff --git a/Data/toolbar_icons/toolbar_midi_notes_force_snap_scale.png b/Data/toolbar_icons/toolbar_midi_notes_force_snap_scale.png new file mode 100644 index 0000000..f481765 Binary files /dev/null and b/Data/toolbar_icons/toolbar_midi_notes_force_snap_scale.png differ diff --git a/Data/toolbar_icons/toolbar_midi_panic_all_notes_off.png b/Data/toolbar_icons/toolbar_midi_panic_all_notes_off.png new file mode 100644 index 0000000..47914fc Binary files /dev/null and b/Data/toolbar_icons/toolbar_midi_panic_all_notes_off.png differ diff --git a/Data/toolbar_icons/toolbar_midi_pitch_decrease_octave.png b/Data/toolbar_icons/toolbar_midi_pitch_decrease_octave.png new file mode 100644 index 0000000..dabbc03 Binary files /dev/null and b/Data/toolbar_icons/toolbar_midi_pitch_decrease_octave.png differ diff --git a/Data/toolbar_icons/toolbar_midi_pitch_decrease_semitone.png b/Data/toolbar_icons/toolbar_midi_pitch_decrease_semitone.png new file mode 100644 index 0000000..f9d76d5 Binary files /dev/null and b/Data/toolbar_icons/toolbar_midi_pitch_decrease_semitone.png differ diff --git a/Data/toolbar_icons/toolbar_midi_pitch_increase_octave.png b/Data/toolbar_icons/toolbar_midi_pitch_increase_octave.png new file mode 100644 index 0000000..324d5d9 Binary files /dev/null and b/Data/toolbar_icons/toolbar_midi_pitch_increase_octave.png differ diff --git a/Data/toolbar_icons/toolbar_midi_pitch_increase_semitone.png b/Data/toolbar_icons/toolbar_midi_pitch_increase_semitone.png new file mode 100644 index 0000000..ac1a846 Binary files /dev/null and b/Data/toolbar_icons/toolbar_midi_pitch_increase_semitone.png differ diff --git a/Data/toolbar_icons/toolbar_midi_pitch_transpose.png b/Data/toolbar_icons/toolbar_midi_pitch_transpose.png new file mode 100644 index 0000000..7654532 Binary files /dev/null and b/Data/toolbar_icons/toolbar_midi_pitch_transpose.png differ diff --git a/Data/toolbar_icons/toolbar_midi_properties.png b/Data/toolbar_icons/toolbar_midi_properties.png new file mode 100644 index 0000000..9e35c75 Binary files /dev/null and b/Data/toolbar_icons/toolbar_midi_properties.png differ diff --git a/Data/toolbar_icons/toolbar_midi_render_apply_audio_waveform.png b/Data/toolbar_icons/toolbar_midi_render_apply_audio_waveform.png new file mode 100644 index 0000000..355df7b Binary files /dev/null and b/Data/toolbar_icons/toolbar_midi_render_apply_audio_waveform.png differ diff --git a/Data/toolbar_icons/toolbar_midi_shorten_note_grid_unit.png b/Data/toolbar_icons/toolbar_midi_shorten_note_grid_unit.png new file mode 100644 index 0000000..b17aeb0 Binary files /dev/null and b/Data/toolbar_icons/toolbar_midi_shorten_note_grid_unit.png differ diff --git a/Data/toolbar_icons/toolbar_midi_shorten_note_pixel.png b/Data/toolbar_icons/toolbar_midi_shorten_note_pixel.png new file mode 100644 index 0000000..232eb2a Binary files /dev/null and b/Data/toolbar_icons/toolbar_midi_shorten_note_pixel.png differ diff --git a/Data/toolbar_icons/toolbar_midi_show_all_note_rows.png b/Data/toolbar_icons/toolbar_midi_show_all_note_rows.png new file mode 100644 index 0000000..7836afa Binary files /dev/null and b/Data/toolbar_icons/toolbar_midi_show_all_note_rows.png differ diff --git a/Data/toolbar_icons/toolbar_midi_size_full.png b/Data/toolbar_icons/toolbar_midi_size_full.png new file mode 100644 index 0000000..77cca3e Binary files /dev/null and b/Data/toolbar_icons/toolbar_midi_size_full.png differ diff --git a/Data/toolbar_icons/toolbar_midi_step.png b/Data/toolbar_icons/toolbar_midi_step.png new file mode 100644 index 0000000..e1f4b15 Binary files /dev/null and b/Data/toolbar_icons/toolbar_midi_step.png differ diff --git a/Data/toolbar_icons/toolbar_midi_waveform_audio.png b/Data/toolbar_icons/toolbar_midi_waveform_audio.png new file mode 100644 index 0000000..eb0a70c Binary files /dev/null and b/Data/toolbar_icons/toolbar_midi_waveform_audio.png differ diff --git a/Data/toolbar_icons/toolbar_midi_zoom.png b/Data/toolbar_icons/toolbar_midi_zoom.png new file mode 100644 index 0000000..de18f58 Binary files /dev/null and b/Data/toolbar_icons/toolbar_midi_zoom.png differ diff --git a/Data/toolbar_icons/toolbar_misc_anarchy.png b/Data/toolbar_icons/toolbar_misc_anarchy.png new file mode 100644 index 0000000..7b5def9 Binary files /dev/null and b/Data/toolbar_icons/toolbar_misc_anarchy.png differ diff --git a/Data/toolbar_icons/toolbar_misc_anchor.png b/Data/toolbar_icons/toolbar_misc_anchor.png new file mode 100644 index 0000000..65d2847 Binary files /dev/null and b/Data/toolbar_icons/toolbar_misc_anchor.png differ diff --git a/Data/toolbar_icons/toolbar_misc_back_left_previous.png b/Data/toolbar_icons/toolbar_misc_back_left_previous.png new file mode 100644 index 0000000..777a4bd Binary files /dev/null and b/Data/toolbar_icons/toolbar_misc_back_left_previous.png differ diff --git a/Data/toolbar_icons/toolbar_misc_back_left_previous_more.png b/Data/toolbar_icons/toolbar_misc_back_left_previous_more.png new file mode 100644 index 0000000..2f991d3 Binary files /dev/null and b/Data/toolbar_icons/toolbar_misc_back_left_previous_more.png differ diff --git a/Data/toolbar_icons/toolbar_misc_bash.png b/Data/toolbar_icons/toolbar_misc_bash.png new file mode 100644 index 0000000..6c0db97 Binary files /dev/null and b/Data/toolbar_icons/toolbar_misc_bash.png differ diff --git a/Data/toolbar_icons/toolbar_misc_bomb.png b/Data/toolbar_icons/toolbar_misc_bomb.png new file mode 100644 index 0000000..2369f32 Binary files /dev/null and b/Data/toolbar_icons/toolbar_misc_bomb.png differ diff --git a/Data/toolbar_icons/toolbar_misc_brush_broom_clean.png b/Data/toolbar_icons/toolbar_misc_brush_broom_clean.png new file mode 100644 index 0000000..6d7d790 Binary files /dev/null and b/Data/toolbar_icons/toolbar_misc_brush_broom_clean.png differ diff --git a/Data/toolbar_icons/toolbar_misc_bulb_idea.png b/Data/toolbar_icons/toolbar_misc_bulb_idea.png new file mode 100644 index 0000000..ae1ac17 Binary files /dev/null and b/Data/toolbar_icons/toolbar_misc_bulb_idea.png differ diff --git a/Data/toolbar_icons/toolbar_misc_calculate_numeric.png b/Data/toolbar_icons/toolbar_misc_calculate_numeric.png new file mode 100644 index 0000000..ea28ebd Binary files /dev/null and b/Data/toolbar_icons/toolbar_misc_calculate_numeric.png differ diff --git a/Data/toolbar_icons/toolbar_misc_car.png b/Data/toolbar_icons/toolbar_misc_car.png new file mode 100644 index 0000000..19f58fe Binary files /dev/null and b/Data/toolbar_icons/toolbar_misc_car.png differ diff --git a/Data/toolbar_icons/toolbar_misc_coffee.png b/Data/toolbar_icons/toolbar_misc_coffee.png new file mode 100644 index 0000000..474ee27 Binary files /dev/null and b/Data/toolbar_icons/toolbar_misc_coffee.png differ diff --git a/Data/toolbar_icons/toolbar_misc_devil.png b/Data/toolbar_icons/toolbar_misc_devil.png new file mode 100644 index 0000000..dbc9382 Binary files /dev/null and b/Data/toolbar_icons/toolbar_misc_devil.png differ diff --git a/Data/toolbar_icons/toolbar_misc_down_next.png b/Data/toolbar_icons/toolbar_misc_down_next.png new file mode 100644 index 0000000..8e3cdc5 Binary files /dev/null and b/Data/toolbar_icons/toolbar_misc_down_next.png differ diff --git a/Data/toolbar_icons/toolbar_misc_down_next_more.png b/Data/toolbar_icons/toolbar_misc_down_next_more.png new file mode 100644 index 0000000..854acb9 Binary files /dev/null and b/Data/toolbar_icons/toolbar_misc_down_next_more.png differ diff --git a/Data/toolbar_icons/toolbar_misc_drum.png b/Data/toolbar_icons/toolbar_misc_drum.png new file mode 100644 index 0000000..8b6861a Binary files /dev/null and b/Data/toolbar_icons/toolbar_misc_drum.png differ diff --git a/Data/toolbar_icons/toolbar_misc_duck.png b/Data/toolbar_icons/toolbar_misc_duck.png new file mode 100644 index 0000000..c7037b1 Binary files /dev/null and b/Data/toolbar_icons/toolbar_misc_duck.png differ diff --git a/Data/toolbar_icons/toolbar_misc_explode.png b/Data/toolbar_icons/toolbar_misc_explode.png new file mode 100644 index 0000000..bd9e694 Binary files /dev/null and b/Data/toolbar_icons/toolbar_misc_explode.png differ diff --git a/Data/toolbar_icons/toolbar_misc_filter.png b/Data/toolbar_icons/toolbar_misc_filter.png new file mode 100644 index 0000000..9922bbf Binary files /dev/null and b/Data/toolbar_icons/toolbar_misc_filter.png differ diff --git a/Data/toolbar_icons/toolbar_misc_finger.png b/Data/toolbar_icons/toolbar_misc_finger.png new file mode 100644 index 0000000..fde4d42 Binary files /dev/null and b/Data/toolbar_icons/toolbar_misc_finger.png differ diff --git a/Data/toolbar_icons/toolbar_misc_firewire.png b/Data/toolbar_icons/toolbar_misc_firewire.png new file mode 100644 index 0000000..8f93dc3 Binary files /dev/null and b/Data/toolbar_icons/toolbar_misc_firewire.png differ diff --git a/Data/toolbar_icons/toolbar_misc_game.png b/Data/toolbar_icons/toolbar_misc_game.png new file mode 100644 index 0000000..f907217 Binary files /dev/null and b/Data/toolbar_icons/toolbar_misc_game.png differ diff --git a/Data/toolbar_icons/toolbar_misc_guitar.png b/Data/toolbar_icons/toolbar_misc_guitar.png new file mode 100644 index 0000000..4e85bdb Binary files /dev/null and b/Data/toolbar_icons/toolbar_misc_guitar.png differ diff --git a/Data/toolbar_icons/toolbar_misc_guitar_headstock.png b/Data/toolbar_icons/toolbar_misc_guitar_headstock.png new file mode 100644 index 0000000..ace1d00 Binary files /dev/null and b/Data/toolbar_icons/toolbar_misc_guitar_headstock.png differ diff --git a/Data/toolbar_icons/toolbar_misc_gun.png b/Data/toolbar_icons/toolbar_misc_gun.png new file mode 100644 index 0000000..20a37ad Binary files /dev/null and b/Data/toolbar_icons/toolbar_misc_gun.png differ diff --git a/Data/toolbar_icons/toolbar_misc_heart.png b/Data/toolbar_icons/toolbar_misc_heart.png new file mode 100644 index 0000000..5d86aee Binary files /dev/null and b/Data/toolbar_icons/toolbar_misc_heart.png differ diff --git a/Data/toolbar_icons/toolbar_misc_horns.png b/Data/toolbar_icons/toolbar_misc_horns.png new file mode 100644 index 0000000..2f55e58 Binary files /dev/null and b/Data/toolbar_icons/toolbar_misc_horns.png differ diff --git a/Data/toolbar_icons/toolbar_misc_house_home.png b/Data/toolbar_icons/toolbar_misc_house_home.png new file mode 100644 index 0000000..63299aa Binary files /dev/null and b/Data/toolbar_icons/toolbar_misc_house_home.png differ diff --git a/Data/toolbar_icons/toolbar_misc_ibeam_cursor_selection.png b/Data/toolbar_icons/toolbar_misc_ibeam_cursor_selection.png new file mode 100644 index 0000000..a3fe4c4 Binary files /dev/null and b/Data/toolbar_icons/toolbar_misc_ibeam_cursor_selection.png differ diff --git a/Data/toolbar_icons/toolbar_misc_jack_input_output.png b/Data/toolbar_icons/toolbar_misc_jack_input_output.png new file mode 100644 index 0000000..4b892ad Binary files /dev/null and b/Data/toolbar_icons/toolbar_misc_jack_input_output.png differ diff --git a/Data/toolbar_icons/toolbar_misc_key_lock.png b/Data/toolbar_icons/toolbar_misc_key_lock.png new file mode 100644 index 0000000..1119911 Binary files /dev/null and b/Data/toolbar_icons/toolbar_misc_key_lock.png differ diff --git a/Data/toolbar_icons/toolbar_misc_keyboard.png b/Data/toolbar_icons/toolbar_misc_keyboard.png new file mode 100644 index 0000000..6562f4b Binary files /dev/null and b/Data/toolbar_icons/toolbar_misc_keyboard.png differ diff --git a/Data/toolbar_icons/toolbar_misc_lips.png b/Data/toolbar_icons/toolbar_misc_lips.png new file mode 100644 index 0000000..d3cdbf7 Binary files /dev/null and b/Data/toolbar_icons/toolbar_misc_lips.png differ diff --git a/Data/toolbar_icons/toolbar_misc_mask.png b/Data/toolbar_icons/toolbar_misc_mask.png new file mode 100644 index 0000000..e615cb7 Binary files /dev/null and b/Data/toolbar_icons/toolbar_misc_mask.png differ diff --git a/Data/toolbar_icons/toolbar_misc_mic.png b/Data/toolbar_icons/toolbar_misc_mic.png new file mode 100644 index 0000000..048e446 Binary files /dev/null and b/Data/toolbar_icons/toolbar_misc_mic.png differ diff --git a/Data/toolbar_icons/toolbar_misc_mixer_control 2.png b/Data/toolbar_icons/toolbar_misc_mixer_control 2.png new file mode 100644 index 0000000..c379e6a Binary files /dev/null and b/Data/toolbar_icons/toolbar_misc_mixer_control 2.png differ diff --git a/Data/toolbar_icons/toolbar_misc_mixer_control.png b/Data/toolbar_icons/toolbar_misc_mixer_control.png new file mode 100644 index 0000000..c379e6a Binary files /dev/null and b/Data/toolbar_icons/toolbar_misc_mixer_control.png differ diff --git a/Data/toolbar_icons/toolbar_misc_mixer_control_active.png b/Data/toolbar_icons/toolbar_misc_mixer_control_active.png new file mode 100644 index 0000000..7f32c91 Binary files /dev/null and b/Data/toolbar_icons/toolbar_misc_mixer_control_active.png differ diff --git a/Data/toolbar_icons/toolbar_misc_monitor_speaker.png b/Data/toolbar_icons/toolbar_misc_monitor_speaker.png new file mode 100644 index 0000000..df7b287 Binary files /dev/null and b/Data/toolbar_icons/toolbar_misc_monitor_speaker.png differ diff --git a/Data/toolbar_icons/toolbar_misc_mouse.png b/Data/toolbar_icons/toolbar_misc_mouse.png new file mode 100644 index 0000000..133c83b Binary files /dev/null and b/Data/toolbar_icons/toolbar_misc_mouse.png differ diff --git a/Data/toolbar_icons/toolbar_misc_mouse_left_click.png b/Data/toolbar_icons/toolbar_misc_mouse_left_click.png new file mode 100644 index 0000000..32c2ef7 Binary files /dev/null and b/Data/toolbar_icons/toolbar_misc_mouse_left_click.png differ diff --git a/Data/toolbar_icons/toolbar_misc_mouse_right_click.png b/Data/toolbar_icons/toolbar_misc_mouse_right_click.png new file mode 100644 index 0000000..ff094eb Binary files /dev/null and b/Data/toolbar_icons/toolbar_misc_mouse_right_click.png differ diff --git a/Data/toolbar_icons/toolbar_misc_network_stream.png b/Data/toolbar_icons/toolbar_misc_network_stream.png new file mode 100644 index 0000000..12f2f89 Binary files /dev/null and b/Data/toolbar_icons/toolbar_misc_network_stream.png differ diff --git a/Data/toolbar_icons/toolbar_misc_phones.png b/Data/toolbar_icons/toolbar_misc_phones.png new file mode 100644 index 0000000..68f3778 Binary files /dev/null and b/Data/toolbar_icons/toolbar_misc_phones.png differ diff --git a/Data/toolbar_icons/toolbar_misc_pointer_cursor.png b/Data/toolbar_icons/toolbar_misc_pointer_cursor.png new file mode 100644 index 0000000..de9003d Binary files /dev/null and b/Data/toolbar_icons/toolbar_misc_pointer_cursor.png differ diff --git a/Data/toolbar_icons/toolbar_misc_pointer_cursor_white.png b/Data/toolbar_icons/toolbar_misc_pointer_cursor_white.png new file mode 100644 index 0000000..b743ac2 Binary files /dev/null and b/Data/toolbar_icons/toolbar_misc_pointer_cursor_white.png differ diff --git a/Data/toolbar_icons/toolbar_misc_question_random.png b/Data/toolbar_icons/toolbar_misc_question_random.png new file mode 100644 index 0000000..453e659 Binary files /dev/null and b/Data/toolbar_icons/toolbar_misc_question_random.png differ diff --git a/Data/toolbar_icons/toolbar_misc_radioactive.png b/Data/toolbar_icons/toolbar_misc_radioactive.png new file mode 100644 index 0000000..95af6f7 Binary files /dev/null and b/Data/toolbar_icons/toolbar_misc_radioactive.png differ diff --git a/Data/toolbar_icons/toolbar_misc_right_forward_next.png b/Data/toolbar_icons/toolbar_misc_right_forward_next.png new file mode 100644 index 0000000..c5ffb49 Binary files /dev/null and b/Data/toolbar_icons/toolbar_misc_right_forward_next.png differ diff --git a/Data/toolbar_icons/toolbar_misc_right_forward_next_more.png b/Data/toolbar_icons/toolbar_misc_right_forward_next_more.png new file mode 100644 index 0000000..8c598c2 Binary files /dev/null and b/Data/toolbar_icons/toolbar_misc_right_forward_next_more.png differ diff --git a/Data/toolbar_icons/toolbar_misc_run_backward.png b/Data/toolbar_icons/toolbar_misc_run_backward.png new file mode 100644 index 0000000..d988885 Binary files /dev/null and b/Data/toolbar_icons/toolbar_misc_run_backward.png differ diff --git a/Data/toolbar_icons/toolbar_misc_run_forward.png b/Data/toolbar_icons/toolbar_misc_run_forward.png new file mode 100644 index 0000000..5f81311 Binary files /dev/null and b/Data/toolbar_icons/toolbar_misc_run_forward.png differ diff --git a/Data/toolbar_icons/toolbar_misc_saint.png b/Data/toolbar_icons/toolbar_misc_saint.png new file mode 100644 index 0000000..972061f Binary files /dev/null and b/Data/toolbar_icons/toolbar_misc_saint.png differ diff --git a/Data/toolbar_icons/toolbar_misc_skull_crossbones.png b/Data/toolbar_icons/toolbar_misc_skull_crossbones.png new file mode 100644 index 0000000..660b734 Binary files /dev/null and b/Data/toolbar_icons/toolbar_misc_skull_crossbones.png differ diff --git a/Data/toolbar_icons/toolbar_misc_speech_note.png b/Data/toolbar_icons/toolbar_misc_speech_note.png new file mode 100644 index 0000000..e985d51 Binary files /dev/null and b/Data/toolbar_icons/toolbar_misc_speech_note.png differ diff --git a/Data/toolbar_icons/toolbar_misc_star.png b/Data/toolbar_icons/toolbar_misc_star.png new file mode 100644 index 0000000..d888b87 Binary files /dev/null and b/Data/toolbar_icons/toolbar_misc_star.png differ diff --git a/Data/toolbar_icons/toolbar_misc_star_green.png b/Data/toolbar_icons/toolbar_misc_star_green.png new file mode 100644 index 0000000..4c0c905 Binary files /dev/null and b/Data/toolbar_icons/toolbar_misc_star_green.png differ diff --git a/Data/toolbar_icons/toolbar_misc_system_reaper.png b/Data/toolbar_icons/toolbar_misc_system_reaper.png new file mode 100644 index 0000000..2461682 Binary files /dev/null and b/Data/toolbar_icons/toolbar_misc_system_reaper.png differ diff --git a/Data/toolbar_icons/toolbar_misc_tape.png b/Data/toolbar_icons/toolbar_misc_tape.png new file mode 100644 index 0000000..a9d6c41 Binary files /dev/null and b/Data/toolbar_icons/toolbar_misc_tape.png differ diff --git a/Data/toolbar_icons/toolbar_misc_tape_active.png b/Data/toolbar_icons/toolbar_misc_tape_active.png new file mode 100644 index 0000000..18e1594 Binary files /dev/null and b/Data/toolbar_icons/toolbar_misc_tape_active.png differ diff --git a/Data/toolbar_icons/toolbar_misc_tea_mmmmm_tea.png b/Data/toolbar_icons/toolbar_misc_tea_mmmmm_tea.png new file mode 100644 index 0000000..de42edd Binary files /dev/null and b/Data/toolbar_icons/toolbar_misc_tea_mmmmm_tea.png differ diff --git a/Data/toolbar_icons/toolbar_misc_thought_idea.png b/Data/toolbar_icons/toolbar_misc_thought_idea.png new file mode 100644 index 0000000..06e854f Binary files /dev/null and b/Data/toolbar_icons/toolbar_misc_thought_idea.png differ diff --git a/Data/toolbar_icons/toolbar_misc_toilet.png b/Data/toolbar_icons/toolbar_misc_toilet.png new file mode 100644 index 0000000..60cb178 Binary files /dev/null and b/Data/toolbar_icons/toolbar_misc_toilet.png differ diff --git a/Data/toolbar_icons/toolbar_misc_trash_bin.png b/Data/toolbar_icons/toolbar_misc_trash_bin.png new file mode 100644 index 0000000..fef40ec Binary files /dev/null and b/Data/toolbar_icons/toolbar_misc_trash_bin.png differ diff --git a/Data/toolbar_icons/toolbar_misc_up_previous.png b/Data/toolbar_icons/toolbar_misc_up_previous.png new file mode 100644 index 0000000..2cea05e Binary files /dev/null and b/Data/toolbar_icons/toolbar_misc_up_previous.png differ diff --git a/Data/toolbar_icons/toolbar_misc_up_previous_more.png b/Data/toolbar_icons/toolbar_misc_up_previous_more.png new file mode 100644 index 0000000..074e628 Binary files /dev/null and b/Data/toolbar_icons/toolbar_misc_up_previous_more.png differ diff --git a/Data/toolbar_icons/toolbar_misc_usb.png b/Data/toolbar_icons/toolbar_misc_usb.png new file mode 100644 index 0000000..b7e728f Binary files /dev/null and b/Data/toolbar_icons/toolbar_misc_usb.png differ diff --git a/Data/toolbar_icons/toolbar_misc_walk_backward.png b/Data/toolbar_icons/toolbar_misc_walk_backward.png new file mode 100644 index 0000000..626a7f7 Binary files /dev/null and b/Data/toolbar_icons/toolbar_misc_walk_backward.png differ diff --git a/Data/toolbar_icons/toolbar_misc_walk_forward.png b/Data/toolbar_icons/toolbar_misc_walk_forward.png new file mode 100644 index 0000000..23ec92f Binary files /dev/null and b/Data/toolbar_icons/toolbar_misc_walk_forward.png differ diff --git a/Data/toolbar_icons/toolbar_mute_envelope.png b/Data/toolbar_icons/toolbar_mute_envelope.png new file mode 100644 index 0000000..dd83858 Binary files /dev/null and b/Data/toolbar_icons/toolbar_mute_envelope.png differ diff --git a/Data/toolbar_icons/toolbar_mute_none_unmute.png b/Data/toolbar_icons/toolbar_mute_none_unmute.png new file mode 100644 index 0000000..4fa2395 Binary files /dev/null and b/Data/toolbar_icons/toolbar_mute_none_unmute.png differ diff --git a/Data/toolbar_icons/toolbar_mute_on.png b/Data/toolbar_icons/toolbar_mute_on.png new file mode 100644 index 0000000..4628ff1 Binary files /dev/null and b/Data/toolbar_icons/toolbar_mute_on.png differ diff --git a/Data/toolbar_icons/toolbar_note_gliss_slide.png b/Data/toolbar_icons/toolbar_note_gliss_slide.png new file mode 100644 index 0000000..3fa0036 Binary files /dev/null and b/Data/toolbar_icons/toolbar_note_gliss_slide.png differ diff --git a/Data/toolbar_icons/toolbar_note_tie.png b/Data/toolbar_icons/toolbar_note_tie.png new file mode 100644 index 0000000..375d63e Binary files /dev/null and b/Data/toolbar_icons/toolbar_note_tie.png differ diff --git a/Data/toolbar_icons/toolbar_parameter_scrub.png b/Data/toolbar_icons/toolbar_parameter_scrub.png new file mode 100644 index 0000000..4249e79 Binary files /dev/null and b/Data/toolbar_icons/toolbar_parameter_scrub.png differ diff --git a/Data/toolbar_icons/toolbar_path_primary_disk.png b/Data/toolbar_icons/toolbar_path_primary_disk.png new file mode 100644 index 0000000..6a727ca Binary files /dev/null and b/Data/toolbar_icons/toolbar_path_primary_disk.png differ diff --git a/Data/toolbar_icons/toolbar_path_primary_secondary_both_disk.png b/Data/toolbar_icons/toolbar_path_primary_secondary_both_disk.png new file mode 100644 index 0000000..b65c7ee Binary files /dev/null and b/Data/toolbar_icons/toolbar_path_primary_secondary_both_disk.png differ diff --git a/Data/toolbar_icons/toolbar_path_secondary_disk.png b/Data/toolbar_icons/toolbar_path_secondary_disk.png new file mode 100644 index 0000000..1e07970 Binary files /dev/null and b/Data/toolbar_icons/toolbar_path_secondary_disk.png differ diff --git a/Data/toolbar_icons/toolbar_pitch_preserve_lock.png b/Data/toolbar_icons/toolbar_pitch_preserve_lock.png new file mode 100644 index 0000000..35c9bfb Binary files /dev/null and b/Data/toolbar_icons/toolbar_pitch_preserve_lock.png differ diff --git a/Data/toolbar_icons/toolbar_preroll_clock.png b/Data/toolbar_icons/toolbar_preroll_clock.png new file mode 100644 index 0000000..e3b5ba0 Binary files /dev/null and b/Data/toolbar_icons/toolbar_preroll_clock.png differ diff --git a/Data/toolbar_icons/toolbar_preroll_clock_record.png b/Data/toolbar_icons/toolbar_preroll_clock_record.png new file mode 100644 index 0000000..e395521 Binary files /dev/null and b/Data/toolbar_icons/toolbar_preroll_clock_record.png differ diff --git a/Data/toolbar_icons/toolbar_project_save_as_new_disk.png b/Data/toolbar_icons/toolbar_project_save_as_new_disk.png new file mode 100644 index 0000000..25eb221 Binary files /dev/null and b/Data/toolbar_icons/toolbar_project_save_as_new_disk.png differ diff --git a/Data/toolbar_icons/toolbar_project_unused_delete_remove_disk.png b/Data/toolbar_icons/toolbar_project_unused_delete_remove_disk.png new file mode 100644 index 0000000..d9fd49f Binary files /dev/null and b/Data/toolbar_icons/toolbar_project_unused_delete_remove_disk.png differ diff --git a/Data/toolbar_icons/toolbar_quarter_crotchet_grid.png b/Data/toolbar_icons/toolbar_quarter_crotchet_grid.png new file mode 100644 index 0000000..384d033 Binary files /dev/null and b/Data/toolbar_icons/toolbar_quarter_crotchet_grid.png differ diff --git a/Data/toolbar_icons/toolbar_quarter_crotchet_note.png b/Data/toolbar_icons/toolbar_quarter_crotchet_note.png new file mode 100644 index 0000000..4fc3602 Binary files /dev/null and b/Data/toolbar_icons/toolbar_quarter_crotchet_note.png differ diff --git a/Data/toolbar_icons/toolbar_record.png b/Data/toolbar_icons/toolbar_record.png new file mode 100644 index 0000000..2302649 Binary files /dev/null and b/Data/toolbar_icons/toolbar_record.png differ diff --git a/Data/toolbar_icons/toolbar_record_arm_all.png b/Data/toolbar_icons/toolbar_record_arm_all.png new file mode 100644 index 0000000..b176a60 Binary files /dev/null and b/Data/toolbar_icons/toolbar_record_arm_all.png differ diff --git a/Data/toolbar_icons/toolbar_record_create_item_seperate_lane.png b/Data/toolbar_icons/toolbar_record_create_item_seperate_lane.png new file mode 100644 index 0000000..8419ebe Binary files /dev/null and b/Data/toolbar_icons/toolbar_record_create_item_seperate_lane.png differ diff --git a/Data/toolbar_icons/toolbar_record_loop_time_selection.png b/Data/toolbar_icons/toolbar_record_loop_time_selection.png new file mode 100644 index 0000000..52fe1ba Binary files /dev/null and b/Data/toolbar_icons/toolbar_record_loop_time_selection.png differ diff --git a/Data/toolbar_icons/toolbar_record_next_beat_measure.png b/Data/toolbar_icons/toolbar_record_next_beat_measure.png new file mode 100644 index 0000000..d90595a Binary files /dev/null and b/Data/toolbar_icons/toolbar_record_next_beat_measure.png differ diff --git a/Data/toolbar_icons/toolbar_record_next_marker.png b/Data/toolbar_icons/toolbar_record_next_marker.png new file mode 100644 index 0000000..7d91d81 Binary files /dev/null and b/Data/toolbar_icons/toolbar_record_next_marker.png differ diff --git a/Data/toolbar_icons/toolbar_record_on.png b/Data/toolbar_icons/toolbar_record_on.png new file mode 100644 index 0000000..70b64b9 Binary files /dev/null and b/Data/toolbar_icons/toolbar_record_on.png differ diff --git a/Data/toolbar_icons/toolbar_record_properties.png b/Data/toolbar_icons/toolbar_record_properties.png new file mode 100644 index 0000000..eff95e7 Binary files /dev/null and b/Data/toolbar_icons/toolbar_record_properties.png differ diff --git a/Data/toolbar_icons/toolbar_record_selected_item_auto_punch.png b/Data/toolbar_icons/toolbar_record_selected_item_auto_punch.png new file mode 100644 index 0000000..c5b9a77 Binary files /dev/null and b/Data/toolbar_icons/toolbar_record_selected_item_auto_punch.png differ diff --git a/Data/toolbar_icons/toolbar_record_split_item_new_take.png b/Data/toolbar_icons/toolbar_record_split_item_new_take.png new file mode 100644 index 0000000..70204b1 Binary files /dev/null and b/Data/toolbar_icons/toolbar_record_split_item_new_take.png differ diff --git a/Data/toolbar_icons/toolbar_record_stop_delete.png b/Data/toolbar_icons/toolbar_record_stop_delete.png new file mode 100644 index 0000000..79beeca Binary files /dev/null and b/Data/toolbar_icons/toolbar_record_stop_delete.png differ diff --git a/Data/toolbar_icons/toolbar_record_stop_save.png b/Data/toolbar_icons/toolbar_record_stop_save.png new file mode 100644 index 0000000..5d5980c Binary files /dev/null and b/Data/toolbar_icons/toolbar_record_stop_save.png differ diff --git a/Data/toolbar_icons/toolbar_record_time_selection_auto_punch.png b/Data/toolbar_icons/toolbar_record_time_selection_auto_punch.png new file mode 100644 index 0000000..86c1024 Binary files /dev/null and b/Data/toolbar_icons/toolbar_record_time_selection_auto_punch.png differ diff --git a/Data/toolbar_icons/toolbar_record_time_selection_selected_item_auto_punch.png b/Data/toolbar_icons/toolbar_record_time_selection_selected_item_auto_punch.png new file mode 100644 index 0000000..43f2127 Binary files /dev/null and b/Data/toolbar_icons/toolbar_record_time_selection_selected_item_auto_punch.png differ diff --git a/Data/toolbar_icons/toolbar_record_trim_item_behind_tape.png b/Data/toolbar_icons/toolbar_record_trim_item_behind_tape.png new file mode 100644 index 0000000..e401134 Binary files /dev/null and b/Data/toolbar_icons/toolbar_record_trim_item_behind_tape.png differ diff --git a/Data/toolbar_icons/toolbar_region_delete_remove_none.png b/Data/toolbar_icons/toolbar_region_delete_remove_none.png new file mode 100644 index 0000000..129193d Binary files /dev/null and b/Data/toolbar_icons/toolbar_region_delete_remove_none.png differ diff --git a/Data/toolbar_icons/toolbar_region_new.png b/Data/toolbar_icons/toolbar_region_new.png new file mode 100644 index 0000000..66e9a14 Binary files /dev/null and b/Data/toolbar_icons/toolbar_region_new.png differ diff --git a/Data/toolbar_icons/toolbar_region_next.png b/Data/toolbar_icons/toolbar_region_next.png new file mode 100644 index 0000000..065af54 Binary files /dev/null and b/Data/toolbar_icons/toolbar_region_next.png differ diff --git a/Data/toolbar_icons/toolbar_region_play_loop.png b/Data/toolbar_icons/toolbar_region_play_loop.png new file mode 100644 index 0000000..9ab49e7 Binary files /dev/null and b/Data/toolbar_icons/toolbar_region_play_loop.png differ diff --git a/Data/toolbar_icons/toolbar_region_previous.png b/Data/toolbar_icons/toolbar_region_previous.png new file mode 100644 index 0000000..2fcf289 Binary files /dev/null and b/Data/toolbar_icons/toolbar_region_previous.png differ diff --git a/Data/toolbar_icons/toolbar_region_properties.png b/Data/toolbar_icons/toolbar_region_properties.png new file mode 100644 index 0000000..9cec0a0 Binary files /dev/null and b/Data/toolbar_icons/toolbar_region_properties.png differ diff --git a/Data/toolbar_icons/toolbar_region_time_selection.png b/Data/toolbar_icons/toolbar_region_time_selection.png new file mode 100644 index 0000000..1bbc097 Binary files /dev/null and b/Data/toolbar_icons/toolbar_region_time_selection.png differ diff --git a/Data/toolbar_icons/toolbar_remove_scissors_selection.png b/Data/toolbar_icons/toolbar_remove_scissors_selection.png new file mode 100644 index 0000000..cd4b950 Binary files /dev/null and b/Data/toolbar_icons/toolbar_remove_scissors_selection.png differ diff --git a/Data/toolbar_icons/toolbar_remove_selection_none.png b/Data/toolbar_icons/toolbar_remove_selection_none.png new file mode 100644 index 0000000..f34a645 Binary files /dev/null and b/Data/toolbar_icons/toolbar_remove_selection_none.png differ diff --git a/Data/toolbar_icons/toolbar_render_effects_midi.png b/Data/toolbar_icons/toolbar_render_effects_midi.png new file mode 100644 index 0000000..b45a37b Binary files /dev/null and b/Data/toolbar_icons/toolbar_render_effects_midi.png differ diff --git a/Data/toolbar_icons/toolbar_screenset_camera_list.png b/Data/toolbar_icons/toolbar_screenset_camera_list.png new file mode 100644 index 0000000..a300301 Binary files /dev/null and b/Data/toolbar_icons/toolbar_screenset_camera_list.png differ diff --git a/Data/toolbar_icons/toolbar_screenset_camera_new.png b/Data/toolbar_icons/toolbar_screenset_camera_new.png new file mode 100644 index 0000000..21d7665 Binary files /dev/null and b/Data/toolbar_icons/toolbar_screenset_camera_new.png differ diff --git a/Data/toolbar_icons/toolbar_screenset_camera_next.png b/Data/toolbar_icons/toolbar_screenset_camera_next.png new file mode 100644 index 0000000..5e544eb Binary files /dev/null and b/Data/toolbar_icons/toolbar_screenset_camera_next.png differ diff --git a/Data/toolbar_icons/toolbar_screenset_camera_previous.png b/Data/toolbar_icons/toolbar_screenset_camera_previous.png new file mode 100644 index 0000000..a0df4f6 Binary files /dev/null and b/Data/toolbar_icons/toolbar_screenset_camera_previous.png differ diff --git a/Data/toolbar_icons/toolbar_screenset_camera_save_disk.png b/Data/toolbar_icons/toolbar_screenset_camera_save_disk.png new file mode 100644 index 0000000..d0b4c11 Binary files /dev/null and b/Data/toolbar_icons/toolbar_screenset_camera_save_disk.png differ diff --git a/Data/toolbar_icons/toolbar_selection_delete_remove.png b/Data/toolbar_icons/toolbar_selection_delete_remove.png new file mode 100644 index 0000000..7453e09 Binary files /dev/null and b/Data/toolbar_icons/toolbar_selection_delete_remove.png differ diff --git a/Data/toolbar_icons/toolbar_selection_inverse_delete_remove.png b/Data/toolbar_icons/toolbar_selection_inverse_delete_remove.png new file mode 100644 index 0000000..7023f74 Binary files /dev/null and b/Data/toolbar_icons/toolbar_selection_inverse_delete_remove.png differ diff --git a/Data/toolbar_icons/toolbar_send_hide_mute.png b/Data/toolbar_icons/toolbar_send_hide_mute.png new file mode 100644 index 0000000..9c32ba4 Binary files /dev/null and b/Data/toolbar_icons/toolbar_send_hide_mute.png differ diff --git a/Data/toolbar_icons/toolbar_send_show_enable.png b/Data/toolbar_icons/toolbar_send_show_enable.png new file mode 100644 index 0000000..dd1a87d Binary files /dev/null and b/Data/toolbar_icons/toolbar_send_show_enable.png differ diff --git a/Data/toolbar_icons/toolbar_shape_bezier.png b/Data/toolbar_icons/toolbar_shape_bezier.png new file mode 100644 index 0000000..007639a Binary files /dev/null and b/Data/toolbar_icons/toolbar_shape_bezier.png differ diff --git a/Data/toolbar_icons/toolbar_shape_fast_end.png b/Data/toolbar_icons/toolbar_shape_fast_end.png new file mode 100644 index 0000000..6261a90 Binary files /dev/null and b/Data/toolbar_icons/toolbar_shape_fast_end.png differ diff --git a/Data/toolbar_icons/toolbar_shape_fast_start.png b/Data/toolbar_icons/toolbar_shape_fast_start.png new file mode 100644 index 0000000..eaaf854 Binary files /dev/null and b/Data/toolbar_icons/toolbar_shape_fast_start.png differ diff --git a/Data/toolbar_icons/toolbar_shape_linear.png b/Data/toolbar_icons/toolbar_shape_linear.png new file mode 100644 index 0000000..508674f Binary files /dev/null and b/Data/toolbar_icons/toolbar_shape_linear.png differ diff --git a/Data/toolbar_icons/toolbar_shape_square.png b/Data/toolbar_icons/toolbar_shape_square.png new file mode 100644 index 0000000..93b3c4f Binary files /dev/null and b/Data/toolbar_icons/toolbar_shape_square.png differ diff --git a/Data/toolbar_icons/toolbar_show selected.png b/Data/toolbar_icons/toolbar_show selected.png new file mode 100644 index 0000000..67f6dd8 Binary files /dev/null and b/Data/toolbar_icons/toolbar_show selected.png differ diff --git a/Data/toolbar_icons/toolbar_show.png b/Data/toolbar_icons/toolbar_show.png new file mode 100644 index 0000000..2f101f0 Binary files /dev/null and b/Data/toolbar_icons/toolbar_show.png differ diff --git a/Data/toolbar_icons/toolbar_show_insert.png b/Data/toolbar_icons/toolbar_show_insert.png new file mode 100644 index 0000000..0f24f99 Binary files /dev/null and b/Data/toolbar_icons/toolbar_show_insert.png differ diff --git a/Data/toolbar_icons/toolbar_show_parameter.png b/Data/toolbar_icons/toolbar_show_parameter.png new file mode 100644 index 0000000..8d94840 Binary files /dev/null and b/Data/toolbar_icons/toolbar_show_parameter.png differ diff --git a/Data/toolbar_icons/toolbar_show_send.png b/Data/toolbar_icons/toolbar_show_send.png new file mode 100644 index 0000000..61fcc18 Binary files /dev/null and b/Data/toolbar_icons/toolbar_show_send.png differ diff --git a/Data/toolbar_icons/toolbar_shuttle_back_rewind.png b/Data/toolbar_icons/toolbar_shuttle_back_rewind.png new file mode 100644 index 0000000..229f160 Binary files /dev/null and b/Data/toolbar_icons/toolbar_shuttle_back_rewind.png differ diff --git a/Data/toolbar_icons/toolbar_shuttle_forward.png b/Data/toolbar_icons/toolbar_shuttle_forward.png new file mode 100644 index 0000000..2dd81a2 Binary files /dev/null and b/Data/toolbar_icons/toolbar_shuttle_forward.png differ diff --git a/Data/toolbar_icons/toolbar_sixteenth_semiquaver_grid.png b/Data/toolbar_icons/toolbar_sixteenth_semiquaver_grid.png new file mode 100644 index 0000000..2db3267 Binary files /dev/null and b/Data/toolbar_icons/toolbar_sixteenth_semiquaver_grid.png differ diff --git a/Data/toolbar_icons/toolbar_sixteenth_semiquaver_note.png b/Data/toolbar_icons/toolbar_sixteenth_semiquaver_note.png new file mode 100644 index 0000000..63823e3 Binary files /dev/null and b/Data/toolbar_icons/toolbar_sixteenth_semiquaver_note.png differ diff --git a/Data/toolbar_icons/toolbar_snap_offset_grid_move.png b/Data/toolbar_icons/toolbar_snap_offset_grid_move.png new file mode 100644 index 0000000..d55466b Binary files /dev/null and b/Data/toolbar_icons/toolbar_snap_offset_grid_move.png differ diff --git a/Data/toolbar_icons/toolbar_solo_in_front_dim.png b/Data/toolbar_icons/toolbar_solo_in_front_dim.png new file mode 100644 index 0000000..e6027ab Binary files /dev/null and b/Data/toolbar_icons/toolbar_solo_in_front_dim.png differ diff --git a/Data/toolbar_icons/toolbar_solo_none_unsolo.png b/Data/toolbar_icons/toolbar_solo_none_unsolo.png new file mode 100644 index 0000000..0107c2d Binary files /dev/null and b/Data/toolbar_icons/toolbar_solo_none_unsolo.png differ diff --git a/Data/toolbar_icons/toolbar_solo_on.png b/Data/toolbar_icons/toolbar_solo_on.png new file mode 100644 index 0000000..768d81a Binary files /dev/null and b/Data/toolbar_icons/toolbar_solo_on.png differ diff --git a/Data/toolbar_icons/toolbar_split_scissors.png b/Data/toolbar_icons/toolbar_split_scissors.png new file mode 100644 index 0000000..3613848 Binary files /dev/null and b/Data/toolbar_icons/toolbar_split_scissors.png differ diff --git a/Data/toolbar_icons/toolbar_stretch_marker_delete_remove.png b/Data/toolbar_icons/toolbar_stretch_marker_delete_remove.png new file mode 100644 index 0000000..2470b95 Binary files /dev/null and b/Data/toolbar_icons/toolbar_stretch_marker_delete_remove.png differ diff --git a/Data/toolbar_icons/toolbar_stretch_marker_insert_new_add.png b/Data/toolbar_icons/toolbar_stretch_marker_insert_new_add.png new file mode 100644 index 0000000..b7efa3c Binary files /dev/null and b/Data/toolbar_icons/toolbar_stretch_marker_insert_new_add.png differ diff --git a/Data/toolbar_icons/toolbar_stretch_marker_locking.png b/Data/toolbar_icons/toolbar_stretch_marker_locking.png new file mode 100644 index 0000000..e9bde06 Binary files /dev/null and b/Data/toolbar_icons/toolbar_stretch_marker_locking.png differ diff --git a/Data/toolbar_icons/toolbar_stretch_marker_next.png b/Data/toolbar_icons/toolbar_stretch_marker_next.png new file mode 100644 index 0000000..a13ed08 Binary files /dev/null and b/Data/toolbar_icons/toolbar_stretch_marker_next.png differ diff --git a/Data/toolbar_icons/toolbar_stretch_marker_previous.png b/Data/toolbar_icons/toolbar_stretch_marker_previous.png new file mode 100644 index 0000000..7f7712c Binary files /dev/null and b/Data/toolbar_icons/toolbar_stretch_marker_previous.png differ diff --git a/Data/toolbar_icons/toolbar_stretch_marker_snap_grid.png b/Data/toolbar_icons/toolbar_stretch_marker_snap_grid.png new file mode 100644 index 0000000..9f7a973 Binary files /dev/null and b/Data/toolbar_icons/toolbar_stretch_marker_snap_grid.png differ diff --git a/Data/toolbar_icons/toolbar_stretch_marker_time_selection_delete_remove.png b/Data/toolbar_icons/toolbar_stretch_marker_time_selection_delete_remove.png new file mode 100644 index 0000000..f8c9d47 Binary files /dev/null and b/Data/toolbar_icons/toolbar_stretch_marker_time_selection_delete_remove.png differ diff --git a/Data/toolbar_icons/toolbar_stretch_marker_time_selection_new_add.png b/Data/toolbar_icons/toolbar_stretch_marker_time_selection_new_add.png new file mode 100644 index 0000000..7bbaf79 Binary files /dev/null and b/Data/toolbar_icons/toolbar_stretch_marker_time_selection_new_add.png differ diff --git a/Data/toolbar_icons/toolbar_stretch_marker_tonal.png b/Data/toolbar_icons/toolbar_stretch_marker_tonal.png new file mode 100644 index 0000000..73c1f6f Binary files /dev/null and b/Data/toolbar_icons/toolbar_stretch_marker_tonal.png differ diff --git a/Data/toolbar_icons/toolbar_sws_extension.png b/Data/toolbar_icons/toolbar_sws_extension.png new file mode 100644 index 0000000..a2438e8 Binary files /dev/null and b/Data/toolbar_icons/toolbar_sws_extension.png differ diff --git a/Data/toolbar_icons/toolbar_sws_extension_properties.png b/Data/toolbar_icons/toolbar_sws_extension_properties.png new file mode 100644 index 0000000..02117a0 Binary files /dev/null and b/Data/toolbar_icons/toolbar_sws_extension_properties.png differ diff --git a/Data/toolbar_icons/toolbar_sync_follow_play.png b/Data/toolbar_icons/toolbar_sync_follow_play.png new file mode 100644 index 0000000..f079e49 Binary files /dev/null and b/Data/toolbar_icons/toolbar_sync_follow_play.png differ diff --git a/Data/toolbar_icons/toolbar_sync_follow_record.png b/Data/toolbar_icons/toolbar_sync_follow_record.png new file mode 100644 index 0000000..578b8f5 Binary files /dev/null and b/Data/toolbar_icons/toolbar_sync_follow_record.png differ diff --git a/Data/toolbar_icons/toolbar_system_external.png b/Data/toolbar_icons/toolbar_system_external.png new file mode 100644 index 0000000..d8b440f Binary files /dev/null and b/Data/toolbar_icons/toolbar_system_external.png differ diff --git a/Data/toolbar_icons/toolbar_system_properties.png b/Data/toolbar_icons/toolbar_system_properties.png new file mode 100644 index 0000000..ee9a2be Binary files /dev/null and b/Data/toolbar_icons/toolbar_system_properties.png differ diff --git a/Data/toolbar_icons/toolbar_system_set_save_default_disk.png b/Data/toolbar_icons/toolbar_system_set_save_default_disk.png new file mode 100644 index 0000000..2424cd2 Binary files /dev/null and b/Data/toolbar_icons/toolbar_system_set_save_default_disk.png differ diff --git a/Data/toolbar_icons/toolbar_theme_next.png b/Data/toolbar_icons/toolbar_theme_next.png new file mode 100644 index 0000000..95f1e60 Binary files /dev/null and b/Data/toolbar_icons/toolbar_theme_next.png differ diff --git a/Data/toolbar_icons/toolbar_theme_previous.png b/Data/toolbar_icons/toolbar_theme_previous.png new file mode 100644 index 0000000..e283210 Binary files /dev/null and b/Data/toolbar_icons/toolbar_theme_previous.png differ diff --git a/Data/toolbar_icons/toolbar_theme_refresh.png b/Data/toolbar_icons/toolbar_theme_refresh.png new file mode 100644 index 0000000..5ccae63 Binary files /dev/null and b/Data/toolbar_icons/toolbar_theme_refresh.png differ diff --git a/Data/toolbar_icons/toolbar_thirty_second_demisemiquaver_.png b/Data/toolbar_icons/toolbar_thirty_second_demisemiquaver_.png new file mode 100644 index 0000000..17396f6 Binary files /dev/null and b/Data/toolbar_icons/toolbar_thirty_second_demisemiquaver_.png differ diff --git a/Data/toolbar_icons/toolbar_thirty_second_demisemiquaver_grid.png b/Data/toolbar_icons/toolbar_thirty_second_demisemiquaver_grid.png new file mode 100644 index 0000000..44071ce Binary files /dev/null and b/Data/toolbar_icons/toolbar_thirty_second_demisemiquaver_grid.png differ diff --git a/Data/toolbar_icons/toolbar_time_beats.png b/Data/toolbar_icons/toolbar_time_beats.png new file mode 100644 index 0000000..8e144c8 Binary files /dev/null and b/Data/toolbar_icons/toolbar_time_beats.png differ diff --git a/Data/toolbar_icons/toolbar_time_clock.png b/Data/toolbar_icons/toolbar_time_clock.png new file mode 100644 index 0000000..4e3c668 Binary files /dev/null and b/Data/toolbar_icons/toolbar_time_clock.png differ diff --git a/Data/toolbar_icons/toolbar_time_clock_properties.png b/Data/toolbar_icons/toolbar_time_clock_properties.png new file mode 100644 index 0000000..bb4f29d Binary files /dev/null and b/Data/toolbar_icons/toolbar_time_clock_properties.png differ diff --git a/Data/toolbar_icons/toolbar_time_hourglass.png b/Data/toolbar_icons/toolbar_time_hourglass.png new file mode 100644 index 0000000..eecce36 Binary files /dev/null and b/Data/toolbar_icons/toolbar_time_hourglass.png differ diff --git a/Data/toolbar_icons/toolbar_time_hours.png b/Data/toolbar_icons/toolbar_time_hours.png new file mode 100644 index 0000000..18ea2f7 Binary files /dev/null and b/Data/toolbar_icons/toolbar_time_hours.png differ diff --git a/Data/toolbar_icons/toolbar_time_measures.png b/Data/toolbar_icons/toolbar_time_measures.png new file mode 100644 index 0000000..1ef1de3 Binary files /dev/null and b/Data/toolbar_icons/toolbar_time_measures.png differ diff --git a/Data/toolbar_icons/toolbar_time_minutes.png b/Data/toolbar_icons/toolbar_time_minutes.png new file mode 100644 index 0000000..76aacdf Binary files /dev/null and b/Data/toolbar_icons/toolbar_time_minutes.png differ diff --git a/Data/toolbar_icons/toolbar_time_sample.png b/Data/toolbar_icons/toolbar_time_sample.png new file mode 100644 index 0000000..aa7ba59 Binary files /dev/null and b/Data/toolbar_icons/toolbar_time_sample.png differ diff --git a/Data/toolbar_icons/toolbar_time_seconds.png b/Data/toolbar_icons/toolbar_time_seconds.png new file mode 100644 index 0000000..2a707d9 Binary files /dev/null and b/Data/toolbar_icons/toolbar_time_seconds.png differ diff --git a/Data/toolbar_icons/toolbar_time_selection_delete_remove.png b/Data/toolbar_icons/toolbar_time_selection_delete_remove.png new file mode 100644 index 0000000..fa17c6b Binary files /dev/null and b/Data/toolbar_icons/toolbar_time_selection_delete_remove.png differ diff --git a/Data/toolbar_icons/toolbar_time_selection_fit_item_selected.png b/Data/toolbar_icons/toolbar_time_selection_fit_item_selected.png new file mode 100644 index 0000000..2ae39c9 Binary files /dev/null and b/Data/toolbar_icons/toolbar_time_selection_fit_item_selected.png differ diff --git a/Data/toolbar_icons/toolbar_time_selection_item_cut.png b/Data/toolbar_icons/toolbar_time_selection_item_cut.png new file mode 100644 index 0000000..f28cc54 Binary files /dev/null and b/Data/toolbar_icons/toolbar_time_selection_item_cut.png differ diff --git a/Data/toolbar_icons/toolbar_time_selection_item_delete_remove.png b/Data/toolbar_icons/toolbar_time_selection_item_delete_remove.png new file mode 100644 index 0000000..9415e4a Binary files /dev/null and b/Data/toolbar_icons/toolbar_time_selection_item_delete_remove.png differ diff --git a/Data/toolbar_icons/toolbar_time_selection_item_selected_grow_expand.png b/Data/toolbar_icons/toolbar_time_selection_item_selected_grow_expand.png new file mode 100644 index 0000000..09d41de Binary files /dev/null and b/Data/toolbar_icons/toolbar_time_selection_item_selected_grow_expand.png differ diff --git a/Data/toolbar_icons/toolbar_time_selection_left.png b/Data/toolbar_icons/toolbar_time_selection_left.png new file mode 100644 index 0000000..e4780ec Binary files /dev/null and b/Data/toolbar_icons/toolbar_time_selection_left.png differ diff --git a/Data/toolbar_icons/toolbar_time_selection_loop_lock.png b/Data/toolbar_icons/toolbar_time_selection_loop_lock.png new file mode 100644 index 0000000..246866b Binary files /dev/null and b/Data/toolbar_icons/toolbar_time_selection_loop_lock.png differ diff --git a/Data/toolbar_icons/toolbar_time_selection_loop_play.png b/Data/toolbar_icons/toolbar_time_selection_loop_play.png new file mode 100644 index 0000000..1203d72 Binary files /dev/null and b/Data/toolbar_icons/toolbar_time_selection_loop_play.png differ diff --git a/Data/toolbar_icons/toolbar_time_selection_new.png b/Data/toolbar_icons/toolbar_time_selection_new.png new file mode 100644 index 0000000..c6b26cd Binary files /dev/null and b/Data/toolbar_icons/toolbar_time_selection_new.png differ diff --git a/Data/toolbar_icons/toolbar_time_selection_play.png b/Data/toolbar_icons/toolbar_time_selection_play.png new file mode 100644 index 0000000..caf0e0f Binary files /dev/null and b/Data/toolbar_icons/toolbar_time_selection_play.png differ diff --git a/Data/toolbar_icons/toolbar_time_selection_properties.png b/Data/toolbar_icons/toolbar_time_selection_properties.png new file mode 100644 index 0000000..f63a732 Binary files /dev/null and b/Data/toolbar_icons/toolbar_time_selection_properties.png differ diff --git a/Data/toolbar_icons/toolbar_time_selection_region.png b/Data/toolbar_icons/toolbar_time_selection_region.png new file mode 100644 index 0000000..28c4272 Binary files /dev/null and b/Data/toolbar_icons/toolbar_time_selection_region.png differ diff --git a/Data/toolbar_icons/toolbar_time_selection_right.png b/Data/toolbar_icons/toolbar_time_selection_right.png new file mode 100644 index 0000000..e386d5e Binary files /dev/null and b/Data/toolbar_icons/toolbar_time_selection_right.png differ diff --git a/Data/toolbar_icons/toolbar_time_stretch.png b/Data/toolbar_icons/toolbar_time_stretch.png new file mode 100644 index 0000000..d1390e1 Binary files /dev/null and b/Data/toolbar_icons/toolbar_time_stretch.png differ diff --git a/Data/toolbar_icons/toolbar_timebase_beats_position.png b/Data/toolbar_icons/toolbar_timebase_beats_position.png new file mode 100644 index 0000000..1052cdd Binary files /dev/null and b/Data/toolbar_icons/toolbar_timebase_beats_position.png differ diff --git a/Data/toolbar_icons/toolbar_timebase_beats_position_length_rate.png b/Data/toolbar_icons/toolbar_timebase_beats_position_length_rate.png new file mode 100644 index 0000000..dc8c2c0 Binary files /dev/null and b/Data/toolbar_icons/toolbar_timebase_beats_position_length_rate.png differ diff --git a/Data/toolbar_icons/toolbar_timebase_time.png b/Data/toolbar_icons/toolbar_timebase_time.png new file mode 100644 index 0000000..370957e Binary files /dev/null and b/Data/toolbar_icons/toolbar_timebase_time.png differ diff --git a/Data/toolbar_icons/toolbar_tool_brush_paint.png b/Data/toolbar_icons/toolbar_tool_brush_paint.png new file mode 100644 index 0000000..3f1dd9c Binary files /dev/null and b/Data/toolbar_icons/toolbar_tool_brush_paint.png differ diff --git a/Data/toolbar_icons/toolbar_tool_crop.png b/Data/toolbar_icons/toolbar_tool_crop.png new file mode 100644 index 0000000..84a34e6 Binary files /dev/null and b/Data/toolbar_icons/toolbar_tool_crop.png differ diff --git a/Data/toolbar_icons/toolbar_tool_erase_delete_remove.png b/Data/toolbar_icons/toolbar_tool_erase_delete_remove.png new file mode 100644 index 0000000..032f5ef Binary files /dev/null and b/Data/toolbar_icons/toolbar_tool_erase_delete_remove.png differ diff --git a/Data/toolbar_icons/toolbar_tool_hammer.png b/Data/toolbar_icons/toolbar_tool_hammer.png new file mode 100644 index 0000000..1138173 Binary files /dev/null and b/Data/toolbar_icons/toolbar_tool_hammer.png differ diff --git a/Data/toolbar_icons/toolbar_tool_knife_trim.png b/Data/toolbar_icons/toolbar_tool_knife_trim.png new file mode 100644 index 0000000..8d46763 Binary files /dev/null and b/Data/toolbar_icons/toolbar_tool_knife_trim.png differ diff --git a/Data/toolbar_icons/toolbar_tool_pencil_draw.png b/Data/toolbar_icons/toolbar_tool_pencil_draw.png new file mode 100644 index 0000000..a1fff9f Binary files /dev/null and b/Data/toolbar_icons/toolbar_tool_pencil_draw.png differ diff --git a/Data/toolbar_icons/toolbar_tool_razor_blade.png b/Data/toolbar_icons/toolbar_tool_razor_blade.png new file mode 100644 index 0000000..e845844 Binary files /dev/null and b/Data/toolbar_icons/toolbar_tool_razor_blade.png differ diff --git a/Data/toolbar_icons/toolbar_tool_scissors_cut_trim.png b/Data/toolbar_icons/toolbar_tool_scissors_cut_trim.png new file mode 100644 index 0000000..4e781b2 Binary files /dev/null and b/Data/toolbar_icons/toolbar_tool_scissors_cut_trim.png differ diff --git a/Data/toolbar_icons/toolbar_track_next.png b/Data/toolbar_icons/toolbar_track_next.png new file mode 100644 index 0000000..b05888c Binary files /dev/null and b/Data/toolbar_icons/toolbar_track_next.png differ diff --git a/Data/toolbar_icons/toolbar_track_previous.png b/Data/toolbar_icons/toolbar_track_previous.png new file mode 100644 index 0000000..bfa8c69 Binary files /dev/null and b/Data/toolbar_icons/toolbar_track_previous.png differ diff --git a/Data/toolbar_icons/toolbar_transport_home_end.png b/Data/toolbar_icons/toolbar_transport_home_end.png new file mode 100644 index 0000000..5fe367e Binary files /dev/null and b/Data/toolbar_icons/toolbar_transport_home_end.png differ diff --git a/Data/toolbar_icons/toolbar_treble_clef_note.png b/Data/toolbar_icons/toolbar_treble_clef_note.png new file mode 100644 index 0000000..3f39e22 Binary files /dev/null and b/Data/toolbar_icons/toolbar_treble_clef_note.png differ diff --git a/Data/toolbar_icons/toolbar_trim_scissors_selection.png b/Data/toolbar_icons/toolbar_trim_scissors_selection.png new file mode 100644 index 0000000..bd6a7f0 Binary files /dev/null and b/Data/toolbar_icons/toolbar_trim_scissors_selection.png differ diff --git a/Data/toolbar_icons/toolbar_triplet_note.png b/Data/toolbar_icons/toolbar_triplet_note.png new file mode 100644 index 0000000..89115e6 Binary files /dev/null and b/Data/toolbar_icons/toolbar_triplet_note.png differ diff --git a/Data/toolbar_icons/toolbar_ultraschall_routing.png b/Data/toolbar_icons/toolbar_ultraschall_routing.png new file mode 100644 index 0000000..338b93e Binary files /dev/null and b/Data/toolbar_icons/toolbar_ultraschall_routing.png differ diff --git a/Data/toolbar_icons/toolbar_ultraschall_views.png b/Data/toolbar_icons/toolbar_ultraschall_views.png new file mode 100644 index 0000000..53445de Binary files /dev/null and b/Data/toolbar_icons/toolbar_ultraschall_views.png differ diff --git a/Data/toolbar_icons/toolbar_unfreeze_render_apply_snowflake.png b/Data/toolbar_icons/toolbar_unfreeze_render_apply_snowflake.png new file mode 100644 index 0000000..8b32ed1 Binary files /dev/null and b/Data/toolbar_icons/toolbar_unfreeze_render_apply_snowflake.png differ diff --git a/Data/toolbar_icons/toolbar_v3_envitem_off.png b/Data/toolbar_icons/toolbar_v3_envitem_off.png new file mode 100644 index 0000000..3ec7ded Binary files /dev/null and b/Data/toolbar_icons/toolbar_v3_envitem_off.png differ diff --git a/Data/toolbar_icons/toolbar_v3_envitem_on.png b/Data/toolbar_icons/toolbar_v3_envitem_on.png new file mode 100644 index 0000000..10473fb Binary files /dev/null and b/Data/toolbar_icons/toolbar_v3_envitem_on.png differ diff --git a/Data/toolbar_icons/toolbar_v3_grid_off.png b/Data/toolbar_icons/toolbar_v3_grid_off.png new file mode 100644 index 0000000..bdd4f83 Binary files /dev/null and b/Data/toolbar_icons/toolbar_v3_grid_off.png differ diff --git a/Data/toolbar_icons/toolbar_v3_grid_on.png b/Data/toolbar_icons/toolbar_v3_grid_on.png new file mode 100644 index 0000000..9fe989c Binary files /dev/null and b/Data/toolbar_icons/toolbar_v3_grid_on.png differ diff --git a/Data/toolbar_icons/toolbar_v3_group_off.png b/Data/toolbar_icons/toolbar_v3_group_off.png new file mode 100644 index 0000000..1e64e9e Binary files /dev/null and b/Data/toolbar_icons/toolbar_v3_group_off.png differ diff --git a/Data/toolbar_icons/toolbar_v3_group_on.png b/Data/toolbar_icons/toolbar_v3_group_on.png new file mode 100644 index 0000000..4f1460e Binary files /dev/null and b/Data/toolbar_icons/toolbar_v3_group_on.png differ diff --git a/Data/toolbar_icons/toolbar_v3_load.png b/Data/toolbar_icons/toolbar_v3_load.png new file mode 100644 index 0000000..de8694c Binary files /dev/null and b/Data/toolbar_icons/toolbar_v3_load.png differ diff --git a/Data/toolbar_icons/toolbar_v3_lock_off.png b/Data/toolbar_icons/toolbar_v3_lock_off.png new file mode 100644 index 0000000..fa9a4d6 Binary files /dev/null and b/Data/toolbar_icons/toolbar_v3_lock_off.png differ diff --git a/Data/toolbar_icons/toolbar_v3_lock_on.png b/Data/toolbar_icons/toolbar_v3_lock_on.png new file mode 100644 index 0000000..52c6808 Binary files /dev/null and b/Data/toolbar_icons/toolbar_v3_lock_on.png differ diff --git a/Data/toolbar_icons/toolbar_v3_metro_off.png b/Data/toolbar_icons/toolbar_v3_metro_off.png new file mode 100644 index 0000000..1f50dec Binary files /dev/null and b/Data/toolbar_icons/toolbar_v3_metro_off.png differ diff --git a/Data/toolbar_icons/toolbar_v3_metro_on.png b/Data/toolbar_icons/toolbar_v3_metro_on.png new file mode 100644 index 0000000..db774b9 Binary files /dev/null and b/Data/toolbar_icons/toolbar_v3_metro_on.png differ diff --git a/Data/toolbar_icons/toolbar_v3_new.png b/Data/toolbar_icons/toolbar_v3_new.png new file mode 100644 index 0000000..05464ae Binary files /dev/null and b/Data/toolbar_icons/toolbar_v3_new.png differ diff --git a/Data/toolbar_icons/toolbar_v3_projprop.png b/Data/toolbar_icons/toolbar_v3_projprop.png new file mode 100644 index 0000000..7ed295a Binary files /dev/null and b/Data/toolbar_icons/toolbar_v3_projprop.png differ diff --git a/Data/toolbar_icons/toolbar_v3_redo.png b/Data/toolbar_icons/toolbar_v3_redo.png new file mode 100644 index 0000000..d8acb73 Binary files /dev/null and b/Data/toolbar_icons/toolbar_v3_redo.png differ diff --git a/Data/toolbar_icons/toolbar_v3_ripple_all.png b/Data/toolbar_icons/toolbar_v3_ripple_all.png new file mode 100644 index 0000000..ab12695 Binary files /dev/null and b/Data/toolbar_icons/toolbar_v3_ripple_all.png differ diff --git a/Data/toolbar_icons/toolbar_v3_ripple_off.png b/Data/toolbar_icons/toolbar_v3_ripple_off.png new file mode 100644 index 0000000..147ff37 Binary files /dev/null and b/Data/toolbar_icons/toolbar_v3_ripple_off.png differ diff --git a/Data/toolbar_icons/toolbar_v3_ripple_one.png b/Data/toolbar_icons/toolbar_v3_ripple_one.png new file mode 100644 index 0000000..9d9abce Binary files /dev/null and b/Data/toolbar_icons/toolbar_v3_ripple_one.png differ diff --git a/Data/toolbar_icons/toolbar_v3_save.png b/Data/toolbar_icons/toolbar_v3_save.png new file mode 100644 index 0000000..a3cfcf2 Binary files /dev/null and b/Data/toolbar_icons/toolbar_v3_save.png differ diff --git a/Data/toolbar_icons/toolbar_v3_snap_off.png b/Data/toolbar_icons/toolbar_v3_snap_off.png new file mode 100644 index 0000000..e957b0c Binary files /dev/null and b/Data/toolbar_icons/toolbar_v3_snap_off.png differ diff --git a/Data/toolbar_icons/toolbar_v3_snap_on.png b/Data/toolbar_icons/toolbar_v3_snap_on.png new file mode 100644 index 0000000..e957b0c Binary files /dev/null and b/Data/toolbar_icons/toolbar_v3_snap_on.png differ diff --git a/Data/toolbar_icons/toolbar_v3_undo.png b/Data/toolbar_icons/toolbar_v3_undo.png new file mode 100644 index 0000000..fbf49fa Binary files /dev/null and b/Data/toolbar_icons/toolbar_v3_undo.png differ diff --git a/Data/toolbar_icons/toolbar_v3_xfade_off.png b/Data/toolbar_icons/toolbar_v3_xfade_off.png new file mode 100644 index 0000000..c83f0ca Binary files /dev/null and b/Data/toolbar_icons/toolbar_v3_xfade_off.png differ diff --git a/Data/toolbar_icons/toolbar_v3_xfade_on.png b/Data/toolbar_icons/toolbar_v3_xfade_on.png new file mode 100644 index 0000000..0c14de1 Binary files /dev/null and b/Data/toolbar_icons/toolbar_v3_xfade_on.png differ diff --git a/Data/toolbar_icons/toolbar_video_item_selected.png b/Data/toolbar_icons/toolbar_video_item_selected.png new file mode 100644 index 0000000..dadbbd1 Binary files /dev/null and b/Data/toolbar_icons/toolbar_video_item_selected.png differ diff --git a/Data/toolbar_icons/toolbar_video_properties.png b/Data/toolbar_icons/toolbar_video_properties.png new file mode 100644 index 0000000..6442291 Binary files /dev/null and b/Data/toolbar_icons/toolbar_video_properties.png differ diff --git a/Data/toolbar_icons/toolbar_video_screen.png b/Data/toolbar_icons/toolbar_video_screen.png new file mode 100644 index 0000000..0ec0089 Binary files /dev/null and b/Data/toolbar_icons/toolbar_video_screen.png differ diff --git a/Data/toolbar_icons/toolbar_video_sync_start.png b/Data/toolbar_icons/toolbar_video_sync_start.png new file mode 100644 index 0000000..7844789 Binary files /dev/null and b/Data/toolbar_icons/toolbar_video_sync_start.png differ diff --git a/Data/toolbar_icons/toolbar_visible_mixer.png b/Data/toolbar_icons/toolbar_visible_mixer.png new file mode 100644 index 0000000..8682be3 Binary files /dev/null and b/Data/toolbar_icons/toolbar_visible_mixer.png differ diff --git a/Data/toolbar_icons/toolbar_visible_tcp.png b/Data/toolbar_icons/toolbar_visible_tcp.png new file mode 100644 index 0000000..ccc5c43 Binary files /dev/null and b/Data/toolbar_icons/toolbar_visible_tcp.png differ diff --git a/Data/toolbar_icons/toolbar_whole_semibreve_grid.png b/Data/toolbar_icons/toolbar_whole_semibreve_grid.png new file mode 100644 index 0000000..7366da1 Binary files /dev/null and b/Data/toolbar_icons/toolbar_whole_semibreve_grid.png differ diff --git a/Data/toolbar_icons/toolbar_whole_semibreve_note.png b/Data/toolbar_icons/toolbar_whole_semibreve_note.png new file mode 100644 index 0000000..cca00e5 Binary files /dev/null and b/Data/toolbar_icons/toolbar_whole_semibreve_note.png differ diff --git a/Data/toolbar_icons/toolbar_window_floating_toolbar.png b/Data/toolbar_icons/toolbar_window_floating_toolbar.png new file mode 100644 index 0000000..1601506 Binary files /dev/null and b/Data/toolbar_icons/toolbar_window_floating_toolbar.png differ diff --git a/Data/toolbar_icons/toolbar_window_fullscreen.png b/Data/toolbar_icons/toolbar_window_fullscreen.png new file mode 100644 index 0000000..bec4f71 Binary files /dev/null and b/Data/toolbar_icons/toolbar_window_fullscreen.png differ diff --git a/Data/toolbar_icons/toolbar_window_tab_background_synchronize.png b/Data/toolbar_icons/toolbar_window_tab_background_synchronize.png new file mode 100644 index 0000000..cac0019 Binary files /dev/null and b/Data/toolbar_icons/toolbar_window_tab_background_synchronize.png differ diff --git a/Data/toolbar_icons/toolbar_window_tab_clip.png b/Data/toolbar_icons/toolbar_window_tab_clip.png new file mode 100644 index 0000000..a65919f Binary files /dev/null and b/Data/toolbar_icons/toolbar_window_tab_clip.png differ diff --git a/Data/toolbar_icons/toolbar_window_tab_clock.png b/Data/toolbar_icons/toolbar_window_tab_clock.png new file mode 100644 index 0000000..d2a1809 Binary files /dev/null and b/Data/toolbar_icons/toolbar_window_tab_clock.png differ diff --git a/Data/toolbar_icons/toolbar_window_tab_delete_remove.png b/Data/toolbar_icons/toolbar_window_tab_delete_remove.png new file mode 100644 index 0000000..41f4fc2 Binary files /dev/null and b/Data/toolbar_icons/toolbar_window_tab_delete_remove.png differ diff --git a/Data/toolbar_icons/toolbar_window_tab_docker_bottom.png b/Data/toolbar_icons/toolbar_window_tab_docker_bottom.png new file mode 100644 index 0000000..1db349e Binary files /dev/null and b/Data/toolbar_icons/toolbar_window_tab_docker_bottom.png differ diff --git a/Data/toolbar_icons/toolbar_window_tab_docker_left.png b/Data/toolbar_icons/toolbar_window_tab_docker_left.png new file mode 100644 index 0000000..51b7ad8 Binary files /dev/null and b/Data/toolbar_icons/toolbar_window_tab_docker_left.png differ diff --git a/Data/toolbar_icons/toolbar_window_tab_docker_right.png b/Data/toolbar_icons/toolbar_window_tab_docker_right.png new file mode 100644 index 0000000..f1b7327 Binary files /dev/null and b/Data/toolbar_icons/toolbar_window_tab_docker_right.png differ diff --git a/Data/toolbar_icons/toolbar_window_tab_docker_show.png b/Data/toolbar_icons/toolbar_window_tab_docker_show.png new file mode 100644 index 0000000..e077db7 Binary files /dev/null and b/Data/toolbar_icons/toolbar_window_tab_docker_show.png differ diff --git a/Data/toolbar_icons/toolbar_window_tab_docker_top.png b/Data/toolbar_icons/toolbar_window_tab_docker_top.png new file mode 100644 index 0000000..f8c91f7 Binary files /dev/null and b/Data/toolbar_icons/toolbar_window_tab_docker_top.png differ diff --git a/Data/toolbar_icons/toolbar_window_tab_effects.png b/Data/toolbar_icons/toolbar_window_tab_effects.png new file mode 100644 index 0000000..0400017 Binary files /dev/null and b/Data/toolbar_icons/toolbar_window_tab_effects.png differ diff --git a/Data/toolbar_icons/toolbar_window_tab_folder.png b/Data/toolbar_icons/toolbar_window_tab_folder.png new file mode 100644 index 0000000..439909a Binary files /dev/null and b/Data/toolbar_icons/toolbar_window_tab_folder.png differ diff --git a/Data/toolbar_icons/toolbar_window_tab_list.png b/Data/toolbar_icons/toolbar_window_tab_list.png new file mode 100644 index 0000000..e0f2234 Binary files /dev/null and b/Data/toolbar_icons/toolbar_window_tab_list.png differ diff --git a/Data/toolbar_icons/toolbar_window_tab_midi_editor.png b/Data/toolbar_icons/toolbar_window_tab_midi_editor.png new file mode 100644 index 0000000..3c0d31e Binary files /dev/null and b/Data/toolbar_icons/toolbar_window_tab_midi_editor.png differ diff --git a/Data/toolbar_icons/toolbar_window_tab_mixer_mcp.png b/Data/toolbar_icons/toolbar_window_tab_mixer_mcp.png new file mode 100644 index 0000000..80f1d04 Binary files /dev/null and b/Data/toolbar_icons/toolbar_window_tab_mixer_mcp.png differ diff --git a/Data/toolbar_icons/toolbar_window_tab_mixer_tcp.png b/Data/toolbar_icons/toolbar_window_tab_mixer_tcp.png new file mode 100644 index 0000000..bf7f4fd Binary files /dev/null and b/Data/toolbar_icons/toolbar_window_tab_mixer_tcp.png differ diff --git a/Data/toolbar_icons/toolbar_window_tab_navigator.png b/Data/toolbar_icons/toolbar_window_tab_navigator.png new file mode 100644 index 0000000..7740bb7 Binary files /dev/null and b/Data/toolbar_icons/toolbar_window_tab_navigator.png differ diff --git a/Data/toolbar_icons/toolbar_window_tab_new.png b/Data/toolbar_icons/toolbar_window_tab_new.png new file mode 100644 index 0000000..8fbb4cd Binary files /dev/null and b/Data/toolbar_icons/toolbar_window_tab_new.png differ diff --git a/Data/toolbar_icons/toolbar_window_tab_new_background.png b/Data/toolbar_icons/toolbar_window_tab_new_background.png new file mode 100644 index 0000000..dd5b5b6 Binary files /dev/null and b/Data/toolbar_icons/toolbar_window_tab_new_background.png differ diff --git a/Data/toolbar_icons/toolbar_window_tab_next_background.png b/Data/toolbar_icons/toolbar_window_tab_next_background.png new file mode 100644 index 0000000..df8fff9 Binary files /dev/null and b/Data/toolbar_icons/toolbar_window_tab_next_background.png differ diff --git a/Data/toolbar_icons/toolbar_window_tab_performance.png b/Data/toolbar_icons/toolbar_window_tab_performance.png new file mode 100644 index 0000000..3418087 Binary files /dev/null and b/Data/toolbar_icons/toolbar_window_tab_performance.png differ diff --git a/Data/toolbar_icons/toolbar_window_tab_properties.png b/Data/toolbar_icons/toolbar_window_tab_properties.png new file mode 100644 index 0000000..d91abbe Binary files /dev/null and b/Data/toolbar_icons/toolbar_window_tab_properties.png differ diff --git a/Data/toolbar_icons/toolbar_window_tab_region.png b/Data/toolbar_icons/toolbar_window_tab_region.png new file mode 100644 index 0000000..99ca83f Binary files /dev/null and b/Data/toolbar_icons/toolbar_window_tab_region.png differ diff --git a/Data/toolbar_icons/toolbar_window_tab_routing_matrix.png b/Data/toolbar_icons/toolbar_window_tab_routing_matrix.png new file mode 100644 index 0000000..f7c5edd Binary files /dev/null and b/Data/toolbar_icons/toolbar_window_tab_routing_matrix.png differ diff --git a/Data/toolbar_icons/toolbar_window_tab_screenset_layout.png b/Data/toolbar_icons/toolbar_window_tab_screenset_layout.png new file mode 100644 index 0000000..f3474a1 Binary files /dev/null and b/Data/toolbar_icons/toolbar_window_tab_screenset_layout.png differ diff --git a/Data/toolbar_icons/toolbar_window_tab_undo_history.png b/Data/toolbar_icons/toolbar_window_tab_undo_history.png new file mode 100644 index 0000000..92a06e6 Binary files /dev/null and b/Data/toolbar_icons/toolbar_window_tab_undo_history.png differ diff --git a/Data/toolbar_icons/toolbar_window_tab_video.png b/Data/toolbar_icons/toolbar_window_tab_video.png new file mode 100644 index 0000000..161adf0 Binary files /dev/null and b/Data/toolbar_icons/toolbar_window_tab_video.png differ diff --git a/Data/toolbar_icons/toolbar_zoom_all.png b/Data/toolbar_icons/toolbar_zoom_all.png new file mode 100644 index 0000000..efe0500 Binary files /dev/null and b/Data/toolbar_icons/toolbar_zoom_all.png differ diff --git a/Data/toolbar_icons/toolbar_zoom_in_audio_waveform.png b/Data/toolbar_icons/toolbar_zoom_in_audio_waveform.png new file mode 100644 index 0000000..d08c3db Binary files /dev/null and b/Data/toolbar_icons/toolbar_zoom_in_audio_waveform.png differ diff --git a/Data/toolbar_icons/toolbar_zoom_in_selected_item.png b/Data/toolbar_icons/toolbar_zoom_in_selected_item.png new file mode 100644 index 0000000..eec3343 Binary files /dev/null and b/Data/toolbar_icons/toolbar_zoom_in_selected_item.png differ diff --git a/Data/toolbar_icons/toolbar_zoom_out_all.png b/Data/toolbar_icons/toolbar_zoom_out_all.png new file mode 100644 index 0000000..bfe3219 Binary files /dev/null and b/Data/toolbar_icons/toolbar_zoom_out_all.png differ diff --git a/Data/toolbar_icons/toolbar_zoom_out_audio_waveform.png b/Data/toolbar_icons/toolbar_zoom_out_audio_waveform.png new file mode 100644 index 0000000..e38595d Binary files /dev/null and b/Data/toolbar_icons/toolbar_zoom_out_audio_waveform.png differ diff --git a/Data/toolbar_icons/toolbar_zoom_project.png b/Data/toolbar_icons/toolbar_zoom_project.png new file mode 100644 index 0000000..bc9d1f8 Binary files /dev/null and b/Data/toolbar_icons/toolbar_zoom_project.png differ diff --git a/Data/toolbar_icons/toolbar_zoom_region.png b/Data/toolbar_icons/toolbar_zoom_region.png new file mode 100644 index 0000000..a716eef Binary files /dev/null and b/Data/toolbar_icons/toolbar_zoom_region.png differ diff --git a/Data/toolbar_icons/toolbar_zoom_selected item.png b/Data/toolbar_icons/toolbar_zoom_selected item.png new file mode 100644 index 0000000..98d394e Binary files /dev/null and b/Data/toolbar_icons/toolbar_zoom_selected item.png differ diff --git a/Data/toolbar_icons/toolbar_zoom_selected.png b/Data/toolbar_icons/toolbar_zoom_selected.png new file mode 100644 index 0000000..740c393 Binary files /dev/null and b/Data/toolbar_icons/toolbar_zoom_selected.png differ diff --git a/Data/toolbar_icons/toolbar_zoom_time_selection.png b/Data/toolbar_icons/toolbar_zoom_time_selection.png new file mode 100644 index 0000000..54caf6e Binary files /dev/null and b/Data/toolbar_icons/toolbar_zoom_time_selection.png differ diff --git a/Data/track_icons/ac_guitar.png b/Data/track_icons/ac_guitar.png new file mode 100644 index 0000000..69a378b Binary files /dev/null and b/Data/track_icons/ac_guitar.png differ diff --git a/Data/track_icons/ac_guitar_full.png b/Data/track_icons/ac_guitar_full.png new file mode 100644 index 0000000..647dd42 Binary files /dev/null and b/Data/track_icons/ac_guitar_full.png differ diff --git a/Data/track_icons/amp combo.png b/Data/track_icons/amp combo.png new file mode 100644 index 0000000..c39c88f Binary files /dev/null and b/Data/track_icons/amp combo.png differ diff --git a/Data/track_icons/amp-combo.png b/Data/track_icons/amp-combo.png new file mode 100644 index 0000000..e5c45a4 Binary files /dev/null and b/Data/track_icons/amp-combo.png differ diff --git a/Data/track_icons/amp.png b/Data/track_icons/amp.png new file mode 100644 index 0000000..297506e Binary files /dev/null and b/Data/track_icons/amp.png differ diff --git a/Data/track_icons/amp_combo.png b/Data/track_icons/amp_combo.png new file mode 100644 index 0000000..6aa3106 Binary files /dev/null and b/Data/track_icons/amp_combo.png differ diff --git a/Data/track_icons/balalaika.png b/Data/track_icons/balalaika.png new file mode 100644 index 0000000..cbd118c Binary files /dev/null and b/Data/track_icons/balalaika.png differ diff --git a/Data/track_icons/banjo.png b/Data/track_icons/banjo.png new file mode 100644 index 0000000..5917ae2 Binary files /dev/null and b/Data/track_icons/banjo.png differ diff --git a/Data/track_icons/bass.png b/Data/track_icons/bass.png new file mode 100644 index 0000000..fa4e87f Binary files /dev/null and b/Data/track_icons/bass.png differ diff --git a/Data/track_icons/bass2.png b/Data/track_icons/bass2.png new file mode 100644 index 0000000..7a8add0 Binary files /dev/null and b/Data/track_icons/bass2.png differ diff --git a/Data/track_icons/bass3.png b/Data/track_icons/bass3.png new file mode 100644 index 0000000..fc56ff0 Binary files /dev/null and b/Data/track_icons/bass3.png differ diff --git a/Data/track_icons/bass4.png b/Data/track_icons/bass4.png new file mode 100644 index 0000000..ff7f72a Binary files /dev/null and b/Data/track_icons/bass4.png differ diff --git a/Data/track_icons/bass_clef.png b/Data/track_icons/bass_clef.png new file mode 100644 index 0000000..f0b857d Binary files /dev/null and b/Data/track_icons/bass_clef.png differ diff --git a/Data/track_icons/bass_full.png b/Data/track_icons/bass_full.png new file mode 100644 index 0000000..14d2a51 Binary files /dev/null and b/Data/track_icons/bass_full.png differ diff --git a/Data/track_icons/beats.png b/Data/track_icons/beats.png new file mode 100644 index 0000000..589fa74 Binary files /dev/null and b/Data/track_icons/beats.png differ diff --git a/Data/track_icons/bin.png b/Data/track_icons/bin.png new file mode 100644 index 0000000..418eeed Binary files /dev/null and b/Data/track_icons/bin.png differ diff --git a/Data/track_icons/bongos.png b/Data/track_icons/bongos.png new file mode 100644 index 0000000..c77fe1a Binary files /dev/null and b/Data/track_icons/bongos.png differ diff --git a/Data/track_icons/cabasa.png b/Data/track_icons/cabasa.png new file mode 100644 index 0000000..6017e19 Binary files /dev/null and b/Data/track_icons/cabasa.png differ diff --git a/Data/track_icons/cello.png b/Data/track_icons/cello.png new file mode 100644 index 0000000..33a8e00 Binary files /dev/null and b/Data/track_icons/cello.png differ diff --git a/Data/track_icons/congas.png b/Data/track_icons/congas.png new file mode 100644 index 0000000..06f70e2 Binary files /dev/null and b/Data/track_icons/congas.png differ diff --git a/Data/track_icons/cowbell.png b/Data/track_icons/cowbell.png new file mode 100644 index 0000000..89720cb Binary files /dev/null and b/Data/track_icons/cowbell.png differ diff --git a/Data/track_icons/cowbell_more.png b/Data/track_icons/cowbell_more.png new file mode 100644 index 0000000..43b5c80 Binary files /dev/null and b/Data/track_icons/cowbell_more.png differ diff --git a/Data/track_icons/cymbal_large.png b/Data/track_icons/cymbal_large.png new file mode 100644 index 0000000..2ff77fe Binary files /dev/null and b/Data/track_icons/cymbal_large.png differ diff --git a/Data/track_icons/cymbal_small.png b/Data/track_icons/cymbal_small.png new file mode 100644 index 0000000..6c77f96 Binary files /dev/null and b/Data/track_icons/cymbal_small.png differ diff --git a/Data/track_icons/deck.png b/Data/track_icons/deck.png new file mode 100644 index 0000000..f983330 Binary files /dev/null and b/Data/track_icons/deck.png differ diff --git a/Data/track_icons/double_bass.png b/Data/track_icons/double_bass.png new file mode 100644 index 0000000..466b92c Binary files /dev/null and b/Data/track_icons/double_bass.png differ diff --git a/Data/track_icons/drumbox.png b/Data/track_icons/drumbox.png new file mode 100644 index 0000000..a866a92 Binary files /dev/null and b/Data/track_icons/drumbox.png differ diff --git a/Data/track_icons/drums.png b/Data/track_icons/drums.png new file mode 100644 index 0000000..421a90f Binary files /dev/null and b/Data/track_icons/drums.png differ diff --git a/Data/track_icons/envelope.png b/Data/track_icons/envelope.png new file mode 100644 index 0000000..b85d76a Binary files /dev/null and b/Data/track_icons/envelope.png differ diff --git a/Data/track_icons/female.png b/Data/track_icons/female.png new file mode 100644 index 0000000..1bdcc42 Binary files /dev/null and b/Data/track_icons/female.png differ diff --git a/Data/track_icons/female_head.png b/Data/track_icons/female_head.png new file mode 100644 index 0000000..a1d046f Binary files /dev/null and b/Data/track_icons/female_head.png differ diff --git a/Data/track_icons/ff.png b/Data/track_icons/ff.png new file mode 100644 index 0000000..bae708e Binary files /dev/null and b/Data/track_icons/ff.png differ diff --git a/Data/track_icons/film.png b/Data/track_icons/film.png new file mode 100644 index 0000000..a16c6f5 Binary files /dev/null and b/Data/track_icons/film.png differ diff --git a/Data/track_icons/folder.png b/Data/track_icons/folder.png new file mode 100644 index 0000000..eba07bf Binary files /dev/null and b/Data/track_icons/folder.png differ diff --git a/Data/track_icons/folder_down.png b/Data/track_icons/folder_down.png new file mode 100644 index 0000000..ed307e2 Binary files /dev/null and b/Data/track_icons/folder_down.png differ diff --git a/Data/track_icons/folder_left.png b/Data/track_icons/folder_left.png new file mode 100644 index 0000000..00d4731 Binary files /dev/null and b/Data/track_icons/folder_left.png differ diff --git a/Data/track_icons/folder_right.png b/Data/track_icons/folder_right.png new file mode 100644 index 0000000..d13ef0e Binary files /dev/null and b/Data/track_icons/folder_right.png differ diff --git a/Data/track_icons/folder_up.png b/Data/track_icons/folder_up.png new file mode 100644 index 0000000..880d343 Binary files /dev/null and b/Data/track_icons/folder_up.png differ diff --git a/Data/track_icons/fx.png b/Data/track_icons/fx.png new file mode 100644 index 0000000..b07776d Binary files /dev/null and b/Data/track_icons/fx.png differ diff --git a/Data/track_icons/group.png b/Data/track_icons/group.png new file mode 100644 index 0000000..41f9757 Binary files /dev/null and b/Data/track_icons/group.png differ diff --git a/Data/track_icons/guitar.png b/Data/track_icons/guitar.png new file mode 100644 index 0000000..0971283 Binary files /dev/null and b/Data/track_icons/guitar.png differ diff --git a/Data/track_icons/guitar2.png b/Data/track_icons/guitar2.png new file mode 100644 index 0000000..37c98ff Binary files /dev/null and b/Data/track_icons/guitar2.png differ diff --git a/Data/track_icons/guitar3.png b/Data/track_icons/guitar3.png new file mode 100644 index 0000000..2482bac Binary files /dev/null and b/Data/track_icons/guitar3.png differ diff --git a/Data/track_icons/guitar4.png b/Data/track_icons/guitar4.png new file mode 100644 index 0000000..efb8371 Binary files /dev/null and b/Data/track_icons/guitar4.png differ diff --git a/Data/track_icons/guitar5.png b/Data/track_icons/guitar5.png new file mode 100644 index 0000000..2cdb0c7 Binary files /dev/null and b/Data/track_icons/guitar5.png differ diff --git a/Data/track_icons/guitar_full.png b/Data/track_icons/guitar_full.png new file mode 100644 index 0000000..d891ed1 Binary files /dev/null and b/Data/track_icons/guitar_full.png differ diff --git a/Data/track_icons/harmonica.png b/Data/track_icons/harmonica.png new file mode 100644 index 0000000..6f236d1 Binary files /dev/null and b/Data/track_icons/harmonica.png differ diff --git a/Data/track_icons/harp.png b/Data/track_icons/harp.png new file mode 100644 index 0000000..fb4fe4c Binary files /dev/null and b/Data/track_icons/harp.png differ diff --git a/Data/track_icons/hihat.png b/Data/track_icons/hihat.png new file mode 100644 index 0000000..96f364d Binary files /dev/null and b/Data/track_icons/hihat.png differ diff --git a/Data/track_icons/idea.png b/Data/track_icons/idea.png new file mode 100644 index 0000000..4c422ce Binary files /dev/null and b/Data/track_icons/idea.png differ diff --git a/Data/track_icons/kick.png b/Data/track_icons/kick.png new file mode 100644 index 0000000..edcd8c0 Binary files /dev/null and b/Data/track_icons/kick.png differ diff --git a/Data/track_icons/male.png b/Data/track_icons/male.png new file mode 100644 index 0000000..2a1cd17 Binary files /dev/null and b/Data/track_icons/male.png differ diff --git a/Data/track_icons/male_head.png b/Data/track_icons/male_head.png new file mode 100644 index 0000000..302fea2 Binary files /dev/null and b/Data/track_icons/male_head.png differ diff --git a/Data/track_icons/maracas.png b/Data/track_icons/maracas.png new file mode 100644 index 0000000..7f99475 Binary files /dev/null and b/Data/track_icons/maracas.png differ diff --git a/Data/track_icons/meter.png b/Data/track_icons/meter.png new file mode 100644 index 0000000..211029e Binary files /dev/null and b/Data/track_icons/meter.png differ diff --git a/Data/track_icons/mic.png b/Data/track_icons/mic.png new file mode 100644 index 0000000..7fba7c0 Binary files /dev/null and b/Data/track_icons/mic.png differ diff --git a/Data/track_icons/mic_condenser_1.png b/Data/track_icons/mic_condenser_1.png new file mode 100644 index 0000000..e3a0c7e Binary files /dev/null and b/Data/track_icons/mic_condenser_1.png differ diff --git a/Data/track_icons/mic_condenser_2.png b/Data/track_icons/mic_condenser_2.png new file mode 100644 index 0000000..b1e55b5 Binary files /dev/null and b/Data/track_icons/mic_condenser_2.png differ diff --git a/Data/track_icons/mic_dynamic_1.png b/Data/track_icons/mic_dynamic_1.png new file mode 100644 index 0000000..5ffdb57 Binary files /dev/null and b/Data/track_icons/mic_dynamic_1.png differ diff --git a/Data/track_icons/mic_dynamic_2.png b/Data/track_icons/mic_dynamic_2.png new file mode 100644 index 0000000..394853d Binary files /dev/null and b/Data/track_icons/mic_dynamic_2.png differ diff --git a/Data/track_icons/mic_shotgun.png b/Data/track_icons/mic_shotgun.png new file mode 100644 index 0000000..dd2645c Binary files /dev/null and b/Data/track_icons/mic_shotgun.png differ diff --git a/Data/track_icons/midi.png b/Data/track_icons/midi.png new file mode 100644 index 0000000..738c853 Binary files /dev/null and b/Data/track_icons/midi.png differ diff --git a/Data/track_icons/mixer.png b/Data/track_icons/mixer.png new file mode 100644 index 0000000..9880eed Binary files /dev/null and b/Data/track_icons/mixer.png differ diff --git a/Data/track_icons/organ.png b/Data/track_icons/organ.png new file mode 100644 index 0000000..d7941d4 Binary files /dev/null and b/Data/track_icons/organ.png differ diff --git a/Data/track_icons/overheads.png b/Data/track_icons/overheads.png new file mode 100644 index 0000000..37347a7 Binary files /dev/null and b/Data/track_icons/overheads.png differ diff --git a/Data/track_icons/pads.png b/Data/track_icons/pads.png new file mode 100644 index 0000000..c45f6c4 Binary files /dev/null and b/Data/track_icons/pads.png differ diff --git a/Data/track_icons/pedal.png b/Data/track_icons/pedal.png new file mode 100644 index 0000000..257bd91 Binary files /dev/null and b/Data/track_icons/pedal.png differ diff --git a/Data/track_icons/phones.png b/Data/track_icons/phones.png new file mode 100644 index 0000000..8cd4148 Binary files /dev/null and b/Data/track_icons/phones.png differ diff --git a/Data/track_icons/piano.png b/Data/track_icons/piano.png new file mode 100644 index 0000000..7dbcab6 Binary files /dev/null and b/Data/track_icons/piano.png differ diff --git a/Data/track_icons/podcast.png b/Data/track_icons/podcast.png new file mode 100644 index 0000000..93dbb07 Binary files /dev/null and b/Data/track_icons/podcast.png differ diff --git a/Data/track_icons/pp.png b/Data/track_icons/pp.png new file mode 100644 index 0000000..1c3b850 Binary files /dev/null and b/Data/track_icons/pp.png differ diff --git a/Data/track_icons/reverb.png b/Data/track_icons/reverb.png new file mode 100644 index 0000000..8b546bf Binary files /dev/null and b/Data/track_icons/reverb.png differ diff --git a/Data/track_icons/ride_bell.png b/Data/track_icons/ride_bell.png new file mode 100644 index 0000000..d311d6b Binary files /dev/null and b/Data/track_icons/ride_bell.png differ diff --git a/Data/track_icons/ride_rim.png b/Data/track_icons/ride_rim.png new file mode 100644 index 0000000..74abec2 Binary files /dev/null and b/Data/track_icons/ride_rim.png differ diff --git a/Data/track_icons/room_large.png b/Data/track_icons/room_large.png new file mode 100644 index 0000000..bf5a815 Binary files /dev/null and b/Data/track_icons/room_large.png differ diff --git a/Data/track_icons/room_medium.png b/Data/track_icons/room_medium.png new file mode 100644 index 0000000..718e6cf Binary files /dev/null and b/Data/track_icons/room_medium.png differ diff --git a/Data/track_icons/room_small.png b/Data/track_icons/room_small.png new file mode 100644 index 0000000..8151b99 Binary files /dev/null and b/Data/track_icons/room_small.png differ diff --git a/Data/track_icons/sax.png b/Data/track_icons/sax.png new file mode 100644 index 0000000..5768950 Binary files /dev/null and b/Data/track_icons/sax.png differ diff --git a/Data/track_icons/skype.png b/Data/track_icons/skype.png new file mode 100644 index 0000000..9990e9f Binary files /dev/null and b/Data/track_icons/skype.png differ diff --git a/Data/track_icons/snare_bottom.png b/Data/track_icons/snare_bottom.png new file mode 100644 index 0000000..dce9fa8 Binary files /dev/null and b/Data/track_icons/snare_bottom.png differ diff --git a/Data/track_icons/snare_top.png b/Data/track_icons/snare_top.png new file mode 100644 index 0000000..23f1feb Binary files /dev/null and b/Data/track_icons/snare_top.png differ diff --git a/Data/track_icons/speech.png b/Data/track_icons/speech.png new file mode 100644 index 0000000..55e408c Binary files /dev/null and b/Data/track_icons/speech.png differ diff --git a/Data/track_icons/synth.png b/Data/track_icons/synth.png new file mode 100644 index 0000000..3d0d215 Binary files /dev/null and b/Data/track_icons/synth.png differ diff --git a/Data/track_icons/synth2.png b/Data/track_icons/synth2.png new file mode 100644 index 0000000..d7232a7 Binary files /dev/null and b/Data/track_icons/synth2.png differ diff --git a/Data/track_icons/synthbass.png b/Data/track_icons/synthbass.png new file mode 100644 index 0000000..e36b062 Binary files /dev/null and b/Data/track_icons/synthbass.png differ diff --git a/Data/track_icons/system.png b/Data/track_icons/system.png new file mode 100644 index 0000000..fddbd12 Binary files /dev/null and b/Data/track_icons/system.png differ diff --git a/Data/track_icons/tamborine.png b/Data/track_icons/tamborine.png new file mode 100644 index 0000000..9701188 Binary files /dev/null and b/Data/track_icons/tamborine.png differ diff --git a/Data/track_icons/tape.png b/Data/track_icons/tape.png new file mode 100644 index 0000000..b60c05d Binary files /dev/null and b/Data/track_icons/tape.png differ diff --git a/Data/track_icons/tom.png b/Data/track_icons/tom.png new file mode 100644 index 0000000..51e82a1 Binary files /dev/null and b/Data/track_icons/tom.png differ diff --git a/Data/track_icons/treble_clef.png b/Data/track_icons/treble_clef.png new file mode 100644 index 0000000..fb8c129 Binary files /dev/null and b/Data/track_icons/treble_clef.png differ diff --git a/Data/track_icons/trombone.png b/Data/track_icons/trombone.png new file mode 100644 index 0000000..1f18d2e Binary files /dev/null and b/Data/track_icons/trombone.png differ diff --git a/Data/track_icons/trumpet.png b/Data/track_icons/trumpet.png new file mode 100644 index 0000000..6f0dff1 Binary files /dev/null and b/Data/track_icons/trumpet.png differ diff --git a/Data/track_icons/violin.png b/Data/track_icons/violin.png new file mode 100644 index 0000000..82ad30c Binary files /dev/null and b/Data/track_icons/violin.png differ diff --git a/Data/track_icons/xylophone.png b/Data/track_icons/xylophone.png new file mode 100644 index 0000000..b2da16e Binary files /dev/null and b/Data/track_icons/xylophone.png differ diff --git a/Data/track_icons/yeah_you_guys_are_great.png b/Data/track_icons/yeah_you_guys_are_great.png new file mode 100644 index 0000000..f580628 Binary files /dev/null and b/Data/track_icons/yeah_you_guys_are_great.png differ diff --git a/Effects/Liteon/3bandpeakfilter b/Effects/Liteon/3bandpeakfilter new file mode 100644 index 0000000..89babba --- /dev/null +++ b/Effects/Liteon/3bandpeakfilter @@ -0,0 +1,741 @@ +// (C) 2008-2009, Lubomir I. Ivanov + +// NO WARRANTY IS GRANTED. THIS PLUG-IN IS PROVIDED ON AN "AS IS" BASIS, WITHOUT +// WARRANTY OF ANY KIND. NO LIABILITY IS GRANTED, INCLUDING, BUT NOT LIMITED TO, +// ANY DIRECT OR INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGE ARISING +// OUT OF THE USE OR INABILITY TO USE THIS PLUG-IN, COMPUTER FAILTURE OF +// MALFUNCTION INCLUDED. THE USE OF THE SOURCE CODE, EITHER PARTIALLY OR IN +// TOTAL, IS ONLY GRANTED, IF USED IN THE SENSE OF THE AUTHOR'S INTENTION, AND +// USED WITH ACKNOWLEDGEMENT OF THE AUTHOR. FURTHERMORE IS THIS PLUG-IN A THIRD +// PARTY CONTRIBUTION, EVEN IF INCLUDED IN REAPER(TM), COCKOS INCORPORATED OR +// ITS AFFILIATES HAVE NOTHING TO DO WITH IT. LAST BUT NOT LEAST, BY USING THIS +// PLUG-IN YOU RELINQUISH YOUR CLAIM TO SUE IT'S AUTHOR, AS WELL AS THE CLAIM TO +// ENTRUST SOMEBODY ELSE WITH DOING SO. +// +// Released under GPL: +// . + +//****************************************************************************** +// Stanley A. White +// Design of a digital biquadratic peaking or notch filters +// for digital audio equalization +// JAES, Vol. 34, No. 6, 1986 June +// +// HP, LP (AppleFilter) based on au unit tutorial (apple.com) +//****************************************************************************** + +desc: 3-Band Peak Filter +desc: 3-Band Peak Filter (PF-3A, PF-3B, Apple: HP, LP) [Liteon] +//tags: filter equalizer +//author: Liteon + +slider1:0<0,1,1{Stereo,Mono}>Processing +slider2:0<0,100,0.01>HP Filter (2-Pole) +slider3:0<0,1,1{PF-3A,PF-3B}>Peak Filter Type +slider4:50<0,100,0.01>Frequency 1 +slider5:0.3<0.005,1,0.00005>Bandwidth 1 +slider6:0<-18,18,0.01>Gain 1 +slider7:50<0,100,0.01>Frequency 2 +slider8:0.3<0.005,1,0.00005>Bandwidth 2 +slider9:0<-18,18,0.01>Gain 2 +slider10:50<0,100,0.01>Frequency 3 +slider11:0.3<0.005,1,0.00005>Bandwidth 3 +slider12:0<-18,18,0.05>Gain 3 +slider13:100<0,100,0.01>LP Filter (2-Pole) +slider14:0<0,100,0.05>Saturation (%) +slider15:0<-24,24,0.01>Output +slider16:0<0,1,1{Off,On}>Oversample (x2) + +in_pin:left input +in_pin:right input +out_pin:left output +out_pin:right output + +//============================================================= +@init +//fir restoration +fc1 = 1; +fc2 = -0.75; +fc3 = 0.17; +fgain = 4.5; + +//fir bandlimit +bl_c1 = 0.52; +bl_c2 = 0.54; +bl_c3 = -0.02; + +//denorm +denorm = 10^-30; + +//============================================================= +@slider +os = slider16; +drive = slider14/350; +drv2_k = drive/(1-drive); +outv = 10^(slider15/20); +noisefloor = 10^(slider14/100)/10^6; + +//hpf +//-------------------------------- +sx = 16+slider2*1.20103; +cx_hp = floor(exp(sx*log(1.059))*8.17742); +cutoff_hp = 2*cx_hp/srate; + +k = 0.5*sin($pi*cutoff_hp); +c1 = 0.5*(1-k)/(1+k); +c2 = (0.5+c1)*cos($pi*cutoff_hp); +c3 = (0.5+c1+c2)*0.25; + +a0_hp = 2*c3; +a1_hp = -4*c3; +a2_hp = 2*c3; +b1_hp = -2*c2; +b2_hp = 2*c1; + +//lpf +//-------------------------------- +sx = 16+slider13*1.20103; +cx_lp = floor(exp(sx*log(1.059))*8.17742); +cutoff_lp = 2*cx_lp/srate; + +k = 0.5*sin($pi*cutoff_lp); +c1 = 0.5*(1-k)/(1+k); +c2 = (0.5+c1)*cos($pi*cutoff_lp); +c3 = (0.5+c1-c2)*0.25; + +a0_lp = 2*c3; +a1_lp = 4*c3; +a2_lp = 2*c3; +b1_lp = -2*c2; +b2_lp = 2*c1; + + +//pf1 +//-------------------------------- +sx = 16+slider4*1.20103; +freq1 = floor(exp(sx*log(1.059))*8.17742); +//if gain +slider5 != 0 ? ( +//type a +//------------- +slider3 == 0 ? ( +gdb = slider6; +bw = slider5; +k = 10^(gdb/20); +w = 2*$pi*freq1/srate; +bwr = bw*w; +gdb < 0 ? ( +bw_inv = min(2*freq1+1500, 20000); +bwr = 2*$pi*(bw_inv)*(bw)/srate; +); +abw = (1-tan(bwr/2))/(1+tan(bwr/2)); +gain = 0.5*(1+k+abw-k*abw); +cx1 = gain; +cx11 = gain*(-2*cos(w)*(1+abw))/(1+k+abw-k*abw); +cx12 = gain*(abw+k*abw+1-k)/(abw-k*abw+1+k); +cy11 = 2*cos(w)/(1+tan(bwr/2)); +cy12 = -abw; +) : ( +//type b +//------------- +m = 10^(slider6/20); +bw = slider5; +w0 = 2*$pi*freq1; +om = bw*w0; +ta = tan(om/srate/2); +p = 1.2; +slider6 < 0 ? p = 0.2; +d = ta+p; +cx1 = (p+m*ta)/d; +cx11 = -2*p*cos(w0/srate)/d; +cx12 = (p-m*ta)/d; +cy11 = 2*p*cos(w0/srate)/d; +cy12 = -(p-ta)/d; +); +); + +//pf2 +//-------------------------------- +sx = 16+slider7*1.20103; +freq2 = floor(exp(sx*log(1.059))*8.17742); +//if gain +slider9 != 0 ? ( +//type a +//------------- +slider3 == 0 ? ( +gdb = slider9; +bw = slider8; +k = 10^(gdb/20); +w = 2*$pi*freq2/srate; +bwr = bw*w; +gdb < 0 ? ( +bw_inv = min(2*freq2+1500, 20000); +bwr = 2*$pi*(bw_inv)*(bw)/srate; +); +abw = (1-tan(bwr/2))/(1+tan(bwr/2)); +gain = 0.5*(1+k+abw-k*abw); +cx2 = gain; +cx21 = gain*(-2*cos(w)*(1+abw))/(1+k+abw-k*abw); +cx22 = gain*(abw+k*abw+1-k)/(abw-k*abw+1+k); +cy21 = 2*cos(w)/(1+tan(bwr/2)); +cy22 = -abw; +) : ( +//type b +//------------- +m = 10^(slider9/20); +bw = slider8; +w0 = 2*$pi*freq2; +om = bw*w0; +ta = tan(om/srate/2); +p = 1.2; +slider9 < 0 ? p = 0.2; +d = ta+p; +cx2 = (p+m*ta)/d; +cx21 = -2*p*cos(w0/srate)/d; +cx22 = (p-m*ta)/d; +cy21 = 2*p*cos(w0/srate)/d; +cy22 = -(p-ta)/d; +); +); + +//pf3 +//-------------------------------- +sx = 16+slider10*1.20103; +freq3 = floor(exp(sx*log(1.059))*8.17742); +//if gain +slider12 != 0 ? ( +//type a +//------------- +slider3 == 0 ? ( +gdb = slider12; +bw = slider11; +k = 10^(gdb/20); +w = 2*$pi*freq3/srate; +bwr = bw*w; +gdb < 0 ? ( +bw_inv = min(2*freq3+1500, 20000); +bwr = 2*$pi*(bw_inv)*(bw)/srate; +); +abw = (1-tan(bwr/2))/(1+tan(bwr/2)); +gain = 0.5*(1+k+abw-k*abw); +cx3 = gain; +cx31 = gain*(-2*cos(w)*(1+abw))/(1+k+abw-k*abw); +cx32 = gain*(abw+k*abw+1-k)/(abw-k*abw+1+k); +cy31 = 2*cos(w)/(1+tan(bwr/2)); +cy32 = -abw; +) : ( +//type b +//------------- +m = 10^(slider12/20); +bw = slider11; +w0 = 2*$pi*freq3; +om = bw*w0; +ta = tan(om/srate/2); +p = 1.2; +slider12 < 0 ? p = 0.2; +d = ta+p; +cx3 = (p+m*ta)/d; +cx31 = -2*p*cos(w0/srate)/d; +cx32 = (p-m*ta)/d; +cy31 = 2*p*cos(w0/srate)/d; +cy32 = -(p-ta)/d; +); +); + +//============================================================= +@sample + +linl = spl0; +linr = spl1; + +//mono +//----------------------------------------------- + +slider1 == 1 ? ( + +//hp +//-------------------------------- +slider2 > 0 ? ( +out_hp_l_1 = a0_hp*linl+a1_hp*mem_hp_l_11+a2_hp*mem_hp_l_12-b1_hp*mem_hp_l_13-b2_hp*mem_hp_l_14; +mem_hp_l_12 = mem_hp_l_11; +mem_hp_l_11 = linl; +mem_hp_l_14 = mem_hp_l_13; +mem_hp_l_13 = out_hp_l_1; +linl = linr = out_hp_l_1; +); + +//f1 +//-------------------------------- +slider6 != 0 ? ( +x1l = (linl+linr)/2; +y1l = cx1*x1l+cx11*x11l+cx12*x12l+cy11*y11l+cy12*y12l; +x12l = x11l; +x11l = x1l; +y12l = y11l; +y11l = y1l; +f1outl = y1l; +) : ( +f1outl = (linl+linr)/2; +); + +//f2 +//-------------------------------- +slider9 != 0 ? ( +x2l = f1outl; +y2l = cx2*x2l+cx21*x21l+cx22*x22l+cy21*y21l+cy22*y22l; +x22l = x21l; +x21l = x2l; +y22l = y21l; +y21l = y2l; +f2outl = y2l; +) : ( +f2outl = f1outl; +); + +//f3 +//-------------------------------- +slider12 != 0 ? ( +x3l = f2outl; +y3l = cx3*x3l+cx31*x31l+cx32*x32l+cy31*y31l+cy32*y32l; +x32l = x31l; +x31l = x3l; +y32l = y31l; +y31l = y3l; +f3outl=y3l+denorm; +f3outr=y3l+denorm; +) : ( +f3outl=f2outl+denorm; +f3outr=f2outl+denorm; +); + +//lp +//----------------------------------- +slider13 < 100 ? ( +out_lp_l_1 = a0_lp*f3outl+a1_lp*mem_lp_l_11+a2_lp*mem_lp_l_12-b1_lp*mem_lp_l_13-b2_lp*mem_lp_l_14; +mem_lp_l_12 = mem_lp_l_11; +mem_lp_l_11 = f3outl; +mem_lp_l_14 = mem_lp_l_13; +mem_lp_l_13 = out_lp_l_1; + +f3outl = out_lp_l_1; +f3outr = out_lp_l_1; +); + +//saturation +//----------------------------------- +linl = f3outl; +linr = f3outr; +slider14 > 0 ? ( +(spl0 != 0 || spl1 != 0) ? ( +whitel = (rand(2)-1)*noisefloor; +linl += whitel; +); + +//oversampling? +os == 1 ? ( +//--------------------------- +//power series in +ps_out1l = 0.5*(linl+ps_out2l); +ps_out2l = 0.5*ps_out1l; + +//--------------------------- +//drive +o_in1l = (1+drv2_k)*ps_out1l/(1+drv2_k*abs(ps_out1l)); +o_in2l = (1+drv2_k)*ps_out2l/(1+drv2_k*abs(ps_out2l)); + +//--------------------------- +//bandlimit +bl3_1 = bl2_1; +bl3_2 = bl2_2; + +bl2_1 = bl1_1; +bl2_2 = bl1_2; + +bl1_1 = o_in1l; +bl1_2 = o_in2l; + +bl_out1 = (bl1_1*bl_c1 + bl2_1*bl_c2 + bl3_1*bl_c3); +bl_out2 = (bl1_2*bl_c1 + bl2_2*bl_c2 + bl3_2*bl_c3); + + +//--------------------------- +//power series out +o_out1l = 0.5*(bl_out1+o_out2l); +o_out2l = 0.5*(bl_out2+o_out1l); + +//--------------------------- +//fir restoration +s3l = s2l; +s2l = s1l; +s1l = o_out1l; + +o_outl = (s1l*fc1+s2l*fc2+s3l*fc3)*fgain; + +) : ( + +o_outl = (1+drv2_k)*linl/(1+drv2_k*abs(linl)); +); + +//out +spl0 = (o_outl)*outv+denorm; +spl1 = (o_outl)*outv+denorm; + +) : ( +spl0 = (linl)*outv+denorm; +spl1 = (linl)*outv+denorm; +); + +) : ( + +//stereo +//----------------------------------------------- + +//hp +//-------------------------------- +slider2 > 0 ? ( +out_hp_l_1 = a0_hp*linl+a1_hp*mem_hp_l_11+a2_hp*mem_hp_l_12-b1_hp*mem_hp_l_13-b2_hp*mem_hp_l_14; +mem_hp_l_12 = mem_hp_l_11; +mem_hp_l_11 = linl; +mem_hp_l_14 = mem_hp_l_13; +mem_hp_l_13 = out_hp_l_1; +out_hp_r_1 = a0_hp*linr+a1_hp*mem_hp_r_11+a2_hp*mem_hp_r_12-b1_hp*mem_hp_r_13-b2_hp*mem_hp_r_14; +mem_hp_r_12 = mem_hp_r_11; +mem_hp_r_11 = linr; +mem_hp_r_14 = mem_hp_r_13; +mem_hp_r_13 = out_hp_r_1; + +linl = out_hp_l_1; +linr = out_hp_r_1; +); + +//f1 +//-------------------------------- +slider6 != 0 ? ( +x1l = linl; +x1r = linr; + +y1l = cx1*x1l+cx11*x11l+cx12*x12l+cy11*y11l+cy12*y12l; +y1r = cx1*x1r+cx11*x11r+cx12*x12r+cy11*y11r+cy12*y12r; + +x12l = x11l; +x12r = x11r; + +x11l = x1l; +x11r = x1r; + +y12l = y11l; +y12r = y11r; + +y11l = y1l; +y11r = y1r; + +f1outl = y1l; +f1outr = y1r; +) : ( +f1outl = linl; +f1outr = linr; +); + +//f2 +//-------------------------------- +slider9 != 0 ? ( +x2l = f1outl; +x2r = f1outr; + +y2l = cx2*x2l+cx21*x21l+cx22*x22l+cy21*y21l+cy22*y22l; +y2r = cx2*x2r+cx21*x21r+cx22*x22r+cy21*y21r+cy22*y22r; + +x22l = x21l; +x22r = x21r; + +x21l = x2l; +x21r = x2r; + +y22l = y21l; +y22r = y21r; + +y21l = y2l; +y21r = y2r; + +f2outl = y2l; +f2outr = y2r; +) : ( +f2outl = f1outl; +f2outr = f1outr; +); + +//f3 +//-------------------------------- +slider12 != 0 ? ( +x3l = f2outl; +x3r = f2outr; + +y3l = cx3*x3l+cx31*x31l+cx32*x32l+cy31*y31l+cy32*y32l; +y3r = cx3*x3r+cx31*x31r+cx32*x32r+cy31*y31r+cy32*y32r; + +x32l = x31l; +x32r = x31r; + +x31l = x3l; +x31r = x3r; + +y32l = y31l; +y32r = y31r; + +y31l = y3l; +y31r = y3r; + +f3outl=y3l+denorm; +f3outr=y3r+denorm; +) : ( +f3outl=f2outl+denorm; +f3outr=f2outr+denorm; +); + +//lp +//----------------------------------- +slider13 < 100 ? ( +out_lp_l_1 = a0_lp*f3outl+a1_lp*mem_lp_l_11+a2_lp*mem_lp_l_12-b1_lp*mem_lp_l_13-b2_lp*mem_lp_l_14; +mem_lp_l_12 = mem_lp_l_11; +mem_lp_l_11 = f3outl; +mem_lp_l_14 = mem_lp_l_13; +mem_lp_l_13 = out_lp_l_1; +out_lp_r_1 = a0_lp*f3outr+a1_lp*mem_lp_r_11+a2_lp*mem_lp_r_12-b1_lp*mem_lp_r_13-b2_lp*mem_lp_r_14; +mem_lp_r_12 = mem_lp_r_11; +mem_lp_r_11 = f3outr; +mem_lp_r_14 = mem_lp_r_13; +mem_lp_r_13 = out_lp_r_1; + +f3outl = out_lp_l_1; +f3outr = out_lp_r_1; +); + +//saturation +//----------------------------------- +linl = f3outl; +linr = f3outr; +slider14 > 0 ? ( +(spl0 != 0 || spl1 != 0) ? ( +whitel = (rand(2)-1)*noisefloor; +whiter = (rand(2)-1)*noisefloor; +linl += whitel; +linr += whiter; +); + +//oversample? +os == 1 ? ( +//--------------------------- +//power series in +ps_out1l = 0.5*(linl+ps_out2l); +ps_out2l = 0.5*ps_out1l; +ps_out1r = 0.5*(linr+ps_out2r); +ps_out2r = 0.5*ps_out1r; + +//--------------------------- +//drive +o_in1l = (1+drv2_k)*ps_out1l/(1+drv2_k*abs(ps_out1l)); +o_in2l = (1+drv2_k)*ps_out2l/(1+drv2_k*abs(ps_out2l)); +o_in1r = (1+drv2_k)*ps_out1r/(1+drv2_k*abs(ps_out1r)); +o_in2r = (1+drv2_k)*ps_out2r/(1+drv2_k*abs(ps_out2r)); + +//--------------------------- +//bandlimit +bl3_l1 = bl2_l1; +bl3_r1 = bl2_r1; +bl3_l2 = bl2_l2; +bl3_r2 = bl2_r2; + +bl2_l1 = bl1_l1; +bl2_r1 = bl1_r1; +bl2_l2 = bl1_l2; +bl2_r2 = bl1_r2; + +bl1_l1 = o_in1l; +bl1_r1 = o_in1r; +bl1_l2 = o_in2l; +bl1_r2 = o_in2r; + +bl_out1l = (bl1_l1*bl_c1 + bl2_l1*bl_c2 + bl3_l1*bl_c3); +bl_out1r = (bl1_r1*bl_c1 + bl2_r1*bl_c2 + bl3_r1*bl_c3); +bl_out2l = (bl1_l2*bl_c1 + bl2_l2*bl_c2 + bl3_l2*bl_c3); +bl_out2r = (bl1_r2*bl_c1 + bl2_r2*bl_c2 + bl3_r2*bl_c3); + +//--------------------------- +//power series out +o_out1l = 0.5*(bl_out1l+o_out2l); +o_out2l = 0.5*(bl_out2l+o_out1l); + +o_out1r = 0.5*(bl_out1r+o_out2r); +o_out2r = 0.5*(bl_out2r+o_out1r); + +//--------------------------- +//fir restoration +s3l = s2l; +s2l = s1l; +s1l = o_out1l; + +s3r = s2r; +s2r = s1r; +s1r = o_out1r; + +o_outl = (s1l*fc1+s2l*fc2+s3l*fc3)*fgain; +o_outr = (s1r*fc1+s2r*fc2+s3r*fc3)*fgain; + +) : ( +o_outl = (1+drv2_k)*linl/(1+drv2_k*abs(linl)); +o_outr = (1+drv2_k)*linr/(1+drv2_k*abs(linr)); +); + +//out +spl0 = (o_outl)*outv+denorm; +spl1 = (o_outr)*outv+denorm; +) : ( +spl0 = (linl)*outv+denorm; +spl1 = (linr)*outv+denorm; +); + +); + +//============================================================= +@gfx 100 78 +gfx_x=gfx_y=5; +gfx_lineto(gfx_x, gfx_y,0); + +//hp +//--------------------------------- +slider2 > 0 ? ( +gfx_r=0.7; +gfx_b=0.1; +gfx_g=1; +gfx_a=1; +) : ( +gfx_r=0.3; +gfx_b=0.3; +gfx_g=0.3; +gfx_a=1; +); +gfx_drawchar($'H'); +gfx_drawchar($'P'); +gfx_drawchar($' '); +gfx_drawchar($'='); +gfx_drawchar($' '); +gfx_drawnumber(cx_hp,0); +gfx_drawchar($' '); +gfx_drawchar($'H'); +gfx_drawchar($'z'); +gfx_y += 15; +gfx_x = 5; +gfx_a=1; + +//f1 +//--------------------------------- +slider6 != 0 ? ( +slider3 == 0 ? ( +gfx_r=1; +gfx_b=0; +gfx_g=0.8; +) : ( +gfx_r=0; +gfx_b=1; +gfx_g=0.8; +); +) : ( +gfx_r=0.6; +gfx_b=0.6; +gfx_g=0.6; +gfx_a=1; +); +gfx_drawchar($'F'); +gfx_drawchar($'1'); +gfx_drawchar($' '); +gfx_drawchar($'='); +gfx_drawchar($' '); +gfx_drawnumber(freq1,0); +gfx_drawchar($' '); +gfx_drawchar($'H'); +gfx_drawchar($'z'); +gfx_y += 15; +gfx_x = 5; + +//f2 +//--------------------------------- +slider9 != 0 ? ( +slider3 == 0 ? ( +gfx_r=1; +gfx_b=0; +gfx_g=0.8; +) : ( +gfx_r=0; +gfx_b=1; +gfx_g=0.8; +); +) : ( +gfx_r=0.6; +gfx_b=0.6; +gfx_g=0.6; +gfx_a=1; +); +gfx_drawchar($'F'); +gfx_drawchar($'2'); +gfx_drawchar($' '); +gfx_drawchar($'='); +gfx_drawchar($' '); +gfx_drawnumber(freq2,0); +gfx_drawchar($' '); +gfx_drawchar($'H'); +gfx_drawchar($'z'); +gfx_y += 15; +gfx_x = 5; + +//f3 +//--------------------------------- +slider12 != 0 ? ( +slider3 == 0 ? ( +gfx_r=1; +gfx_b=0; +gfx_g=0.8; +) : ( +gfx_r=0; +gfx_b=1; +gfx_g=0.8; +); +) : ( +gfx_r=0.6; +gfx_b=0.6; +gfx_g=0.6; +gfx_a=1; +); +gfx_drawchar($'F'); +gfx_drawchar($'3'); +gfx_drawchar($' '); +gfx_drawchar($'='); +gfx_drawchar($' '); +gfx_drawnumber(freq3,0); +gfx_drawchar($' '); +gfx_drawchar($'H'); +gfx_drawchar($'z'); +gfx_y += 15; +gfx_x = 5; + +//lp +//--------------------------------- +slider13 < 100 ? ( +gfx_r=0.7; +gfx_b=0.1; +gfx_g=1; +gfx_a=1; +) : ( +gfx_r=0.3; +gfx_b=0.3; +gfx_g=0.3; +gfx_a=1; +); +gfx_drawchar($'L'); +gfx_drawchar($'P'); +gfx_drawchar($' '); +gfx_drawchar($'='); +gfx_drawchar($' '); +gfx_drawnumber(cx_lp,0); +gfx_drawchar($' '); +gfx_drawchar($'H'); +gfx_drawchar($'z'); diff --git a/Effects/Liteon/applefilter12db b/Effects/Liteon/applefilter12db new file mode 100644 index 0000000..55c3071 --- /dev/null +++ b/Effects/Liteon/applefilter12db @@ -0,0 +1,106 @@ +// (C) 2008, Lubomir Ivanov +// +// NO WARRANTY IS GRANTED. THIS PLUG-IN IS PROVIDED ON AN "AS IS" BASIS, WITHOUT +// WARRANTY OF ANY KIND. NO LIABILITY IS GRANTED, INCLUDING, BUT NOT LIMITED TO, +// ANY DIRECT OR INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGE ARISING +// OUT OF THE USE OR INABILITY TO USE THIS PLUG-IN, COMPUTER FAILTURE OF +// MALFUNCTION INCLUDED. THE USE OF THE SOURCE CODE, EITHER PARTIALLY OR IN +// TOTAL, IS ONLY GRANTED, IF USED IN THE SENSE OF THE AUTHOR'S INTENTION, AND +// USED WITH ACKNOWLEDGEMENT OF THE AUTHOR. FURTHERMORE IS THIS PLUG-IN A THIRD +// PARTY CONTRIBUTION, EVEN IF INCLUDED IN REAPER(TM), COCKOS INCORPORATED OR +// ITS AFFILIATES HAVE NOTHING TO DO WITH IT. LAST BUT NOT LEAST, BY USING THIS +// PLUG-IN YOU RELINQUISH YOUR CLAIM TO SUE IT'S AUTHOR, AS WELL AS THE CLAIM TO +// ENTRUST SOMEBODY ELSE WITH DOING SO. +// +//****************************************************************************** +//Reference : Apple.com AU tutorial (port from C++) +//****************************************************************************** + +desc: Apple 2-Pole Lowpass Filter +//tags: filter +//author: Liteon + +slider1:0<0,1,1{Stereo,Mono}>Processing +slider2:100<0,100,0.05>Cutoff (Scale) +slider3:0<-25,25,0.05>Resonance (dB) +slider4:0<-25,25,0.05>Output (dB) + +in_pin:left input +in_pin:right input +out_pin:left output +out_pin:right output + +@init +mX1l=mX2l=mY1l=mY2l=mX1r=mX2r=mY1r=mY2r=0; + +@slider +mono = slider1; +sx = 16+slider2*1.20103; +cx = floor(exp(sx*log(1.059))*8.17742); +res = slider3; +outgain = 10^(slider4/40); + +//coeffcients +cutoff = 2 * cx / srate; +res = pow(10, 0.05 * -res); +k = 0.5 * res * sin($pi * cutoff); +c1 = 0.5 * (1 - k) / (1 + k); +c2 = (0.5 + c1) * cos($pi * cutoff); +c3 = (0.5 + c1 - c2) * 0.25; + +mA0 = 2 * c3; +mA1 = 2 * 2 * c3; +mA2 = 2 * c3; +mB1 = 2 * -c2; +mB2 = 2 * c1; + +@sample + +//mono +mono == 1 ? ( +inputl = (spl0+spl1)/2; + +outputl = mA0*inputl + mA1*mX1l + mA2*mX2l - mB1*mY1l - mB2*mY2l; + +mX2l = mX1l; +mX1l = inputl; +mY2l = mY1l; +mY1l = outputl; + +spl0=spl1 = outputl*outgain; + +//stereo +) : ( +inputl = spl0; +inputr = spl1; + +outputl = mA0*inputl + mA1*mX1l + mA2*mX2l - mB1*mY1l - mB2*mY2l; +mX2l = mX1l; +mX1l = inputl; +mY2l = mY1l; +mY1l = outputl; + +outputr = mA0*inputr + mA1*mX1r + mA2*mX2r - mB1*mY1r - mB2*mY2r; +mX2r = mX1r; +mX1r = inputr; +mY2r = mY1r; +mY1r = outputr; + +spl0 = outputl*outgain; +spl1 = outputr*outgain; + +); + +@gfx 100 16 +gfx_x=gfx_y=5; +gfx_lineto(gfx_x, gfx_y,0); +gfx_r=gfx_b=0; +gfx_g=gfx_a=1; +gfx_drawchar($'F'); +gfx_drawchar($' '); +gfx_drawchar($'='); +gfx_drawchar($' '); +gfx_drawnumber(cx,0); +gfx_drawchar($' '); +gfx_drawchar($'H'); +gfx_drawchar($'z'); diff --git a/Effects/Liteon/applefilter72db b/Effects/Liteon/applefilter72db new file mode 100644 index 0000000..dd2a897 --- /dev/null +++ b/Effects/Liteon/applefilter72db @@ -0,0 +1,442 @@ +// (C) 2008-2009, Lubomir I. Ivanov +// +// NO WARRANTY IS GRANTED. THIS PLUG-IN IS PROVIDED ON AN "AS IS" BASIS, WITHOUT +// WARRANTY OF ANY KIND. NO LIABILITY IS GRANTED, INCLUDING, BUT NOT LIMITED TO, +// ANY DIRECT OR INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGE ARISING +// OUT OF THE USE OR INABILITY TO USE THIS PLUG-IN, COMPUTER FAILTURE OF +// MALFUNCTION INCLUDED. THE USE OF THE SOURCE CODE, EITHER PARTIALLY OR IN +// TOTAL, IS ONLY GRANTED, IF USED IN THE SENSE OF THE AUTHOR'S INTENTION, AND +// USED WITH ACKNOWLEDGEMENT OF THE AUTHOR. FURTHERMORE IS THIS PLUG-IN A THIRD +// PARTY CONTRIBUTION, EVEN IF INCLUDED IN REAPER(TM), COCKOS INCORPORATED OR +// ITS AFFILIATES HAVE NOTHING TO DO WITH IT. LAST BUT NOT LEAST, BY USING THIS +// PLUG-IN YOU RELINQUISH YOUR CLAIM TO SUE IT'S AUTHOR, AS WELL AS THE CLAIM TO +// ENTRUST SOMEBODY ELSE WITH DOING SO. +// +// Released under GPL: +// . +// +//****************************************************************************** +// butterworth filter implementation - +// original port from apple.com au tutorial (c+) +// added HP version +// added 12 poles cascade +// * see note below about efficiency +//****************************************************************************** + +desc: Apple 12-Pole Filter +//tags: filter +//author: Liteon + +slider1:0<0,1,1{Stereo,Mono}>Processing +slider2:0<0,6,1{Off,12 dB/oct (2-pole),24 dB/oct (4-pole),36 dB/oct (6-pole),48 dB/oct (8-pole),60 dB/oct (10-pole),72 dB/oct (12-pole)}>HP Slope +slider3:0<0,100,0.01>HP Cutoff (Scale) +slider4:0<-16,16,0.01>HP Resonance (dB) +slider5:0<0,6,1{Off,12 dB/oct (2-pole),24 dB/oct (4-pole),36 dB/oct (6-pole),48 dB/oct (8-pole),60 dB/oct (10-pole),72 dB/oct (12-pole)}>LP Slope +slider6:100<0,100,0.01>LP Cutoff (Scale) +slider7:0<-16,16,0.01>LP Resonance (dB) +slider8:0<-24,24,0.01>Output (dB) + +in_pin:left input +in_pin:right input +out_pin:left output +out_pin:right output + +@slider +mono = slider1; +outgain = 10^(slider8/20); + +//**************************** +//hp + +n_hp = slider2; +sx = 16+slider3*1.20103; +cx_hp = floor(exp(sx*log(1.059))*8.17742); +cutoff_hp = 2*cx_hp/srate; +res_hp = 10^(0.05*(-slider4/n_hp+1.5)); + +k = 0.5*res_hp*sin($pi*cutoff_hp); +c1 = 0.5*(1-k)/(1+k); +c2 = (0.5+c1)*cos($pi*cutoff_hp); +c3 = (0.5+c1+c2)*0.25; + +a0_hp = 2*c3; +a1_hp = -4*c3; +a2_hp = 2*c3; +b1_hp = -2*c2; +b2_hp = 2*c1; + +//**************************** +//lp + +n_lp = slider5; +sx = 16+slider6*1.20103; +cx_lp = floor(exp(sx*log(1.059))*8.17742); +cutoff_lp = 2*cx_lp/srate; +res_lp = 10^(0.05*(-slider7/n_lp+1.5)); + +k = 0.5*res_lp*sin($pi*cutoff_lp); +c1 = 0.5*(1-k)/(1+k); +c2 = (0.5+c1)*cos($pi*cutoff_lp); +c3 = (0.5+c1-c2)*0.25; + +a0_lp = 2*c3; +a1_lp = 4*c3; +a2_lp = 2*c3; +b1_lp = -2*c2; +b2_lp = 2*c1; + +@sample + +// *NOTE: You can use 'loop' for the cascade (see example below) +// however its many times less efficient ! +// +// comparison for - mono, lp, 72db: +// -------------------- +// using loop - 13.8% cpu +// long version - 3.3% cpu +/* +i = 0; +inl = (spl0+spl1)/2; +loop(n_lp, +outl = a0_lp*inl+a1_lp*mem[4*i+1]+a2_lp*mem[4*i+2]-b1_lp*mem[4*i+3]-b2_lp*mem[4*i+4]; +mem[4*i+2] = mem[4*i+1]; +mem[4*i+1] = inl; +mem[4*i+4] = mem[4*i+3]; +mem[4*i+3] = outl; +inl = outl; +i += 1; +); +spl0=spl1=outl; +*/ + +//*************************************************************************** +//mono +mono == 1 ? ( +inl = (spl0+spl1)/2; +//********************************************* +//hp +n_hp > 0 ? ( +out_hp_l_1 = a0_hp*inl+a1_hp*mem_hp_l_11+a2_hp*mem_hp_l_12-b1_hp*mem_hp_l_13-b2_hp*mem_hp_l_14; +mem_hp_l_12 = mem_hp_l_11; +mem_hp_l_11 = inl; +mem_hp_l_14 = mem_hp_l_13; +mem_hp_l_13 = out_hp_l_1; +out_hp_l = out_hp_l_1; +n_hp > 1 ? ( +out_hp_l_2 = a0_hp*out_hp_l_1+a1_hp*mem_hp_l_21+a2_hp*mem_hp_l_22-b1_hp*mem_hp_l_23-b2_hp*mem_hp_l_24; +mem_hp_l_22 = mem_hp_l_21; +mem_hp_l_21 = out_hp_l_1; +mem_hp_l_24 = mem_hp_l_23; +mem_hp_l_23 = out_hp_l_2; +out_hp_l = out_hp_l_2; +); +n_hp > 2 ? ( +out_hp_l_3 = a0_hp*out_hp_l_2+a1_hp*mem_hp_l_31+a2_hp*mem_hp_l_32-b1_hp*mem_hp_l_33-b2_hp*mem_hp_l_34; +mem_hp_l_32 = mem_hp_l_31; +mem_hp_l_31 = out_hp_l_2; +mem_hp_l_34 = mem_hp_l_33; +mem_hp_l_33 = out_hp_l_3; +out_hp_l = out_hp_l_3; +); +n_hp > 3 ? ( +out_hp_l_4 = a0_hp*out_hp_l_3+a1_hp*mem_hp_l_41+a2_hp*mem_hp_l_42-b1_hp*mem_hp_l_43-b2_hp*mem_hp_l_44; +mem_hp_l_42 = mem_hp_l_41; +mem_hp_l_41 = out_hp_l_3; +mem_hp_l_44 = mem_hp_l_43; +mem_hp_l_43 = out_hp_l_4; +out_hp_l = out_hp_l_4; +); +n_hp > 4 ? ( +out_hp_l_5 = a0_hp*out_hp_l_4+a1_hp*mem_hp_l_51+a2_hp*mem_hp_l_52-b1_hp*mem_hp_l_53-b2_hp*mem_hp_l_54; +mem_hp_l_52 = mem_hp_l_51; +mem_hp_l_51 = out_hp_l_4; +mem_hp_l_54 = mem_hp_l_53; +mem_hp_l_53 = out_hp_l_5; +out_hp_l = out_hp_l_5; +); +n_hp > 5 ? ( +out_hp_l_6 = a0_hp*out_hp_l_5+a1_hp*mem_hp_l_61+a2_hp*mem_hp_l_62-b1_hp*mem_hp_l_63-b2_hp*mem_hp_l_64; +mem_hp_l_62 = mem_hp_l_61; +mem_hp_l_61 = out_hp_l_5; +mem_hp_l_64 = mem_hp_l_63; +mem_hp_l_63 = out_hp_l_6; +out_hp_l = out_hp_l_6; +); +) : ( +out_hp_l = inl; +); +//********************************************* +//lp +n_lp > 0 ? ( +out_lp_l_1 = a0_lp*out_hp_l+a1_lp*mem_lp_l_11+a2_lp*mem_lp_l_12-b1_lp*mem_lp_l_13-b2_lp*mem_lp_l_14; +mem_lp_l_12 = mem_lp_l_11; +mem_lp_l_11 = out_hp_l; +mem_lp_l_14 = mem_lp_l_13; +mem_lp_l_13 = out_lp_l_1; +out_lp_l = out_lp_l_1; +n_lp > 1 ? ( +out_lp_l_2 = a0_lp*out_lp_l_1+a1_lp*mem_lp_l_21+a2_lp*mem_lp_l_22-b1_lp*mem_lp_l_23-b2_lp*mem_lp_l_24; +mem_lp_l_22 = mem_lp_l_21; +mem_lp_l_21 = out_lp_l_1; +mem_lp_l_24 = mem_lp_l_23; +mem_lp_l_23 = out_lp_l_2; +out_lp_l = out_lp_l_2; +); +n_lp > 2 ? ( +out_lp_l_3 = a0_lp*out_lp_l_2+a1_lp*mem_lp_l_31+a2_lp*mem_lp_l_32-b1_lp*mem_lp_l_33-b2_lp*mem_lp_l_34; +mem_lp_l_32 = mem_lp_l_31; +mem_lp_l_31 = out_lp_l_2; +mem_lp_l_34 = mem_lp_l_33; +mem_lp_l_33 = out_lp_l_3; +out_lp_l = out_lp_l_3; +); +n_lp > 3 ? ( +out_lp_l_4 = a0_lp*out_lp_l_3+a1_lp*mem_lp_l_41+a2_lp*mem_lp_l_42-b1_lp*mem_lp_l_43-b2_lp*mem_lp_l_44; +mem_lp_l_42 = mem_lp_l_41; +mem_lp_l_41 = out_lp_l_3; +mem_lp_l_44 = mem_lp_l_43; +mem_lp_l_43 = out_lp_l_4; +out_lp_l = out_lp_l_4; +); +n_lp > 4 ? ( +out_lp_l_5 = a0_lp*out_lp_l_4+a1_lp*mem_lp_l_51+a2_lp*mem_lp_l_52-b1_lp*mem_lp_l_53-b2_lp*mem_lp_l_54; +mem_lp_l_52 = mem_lp_l_51; +mem_lp_l_51 = out_lp_l_4; +mem_lp_l_54 = mem_lp_l_53; +mem_lp_l_53 = out_lp_l_5; +out_lp_l = out_lp_l_5; +); +n_lp > 5 ? ( +out_lp_l_6 = a0_lp*out_lp_l_5+a1_lp*mem_lp_l_61+a2_lp*mem_lp_l_62-b1_lp*mem_lp_l_63-b2_lp*mem_lp_l_64; +mem_lp_l_62 = mem_lp_l_61; +mem_lp_l_61 = out_lp_l_5; +mem_lp_l_64 = mem_lp_l_63; +mem_lp_l_63 = out_lp_l_6; +out_lp_l = out_lp_l_6; +); +) : ( +out_lp_l = out_hp_l; +); + +//out mono +spl0 = spl1 = out_lp_l*outgain; + +//***************************************************************************** +//stereo +) : ( +inl = spl0; +inr = spl1; +//********************************************* +//hp +n_hp > 0 ? ( +out_hp_l_1 = a0_hp*inl+a1_hp*mem_hp_l_11+a2_hp*mem_hp_l_12-b1_hp*mem_hp_l_13-b2_hp*mem_hp_l_14; +mem_hp_l_12 = mem_hp_l_11; +mem_hp_l_11 = inl; +mem_hp_l_14 = mem_hp_l_13; +mem_hp_l_13 = out_hp_l_1; +out_hp_l = out_hp_l_1; +out_hp_r_1 = a0_hp*inr+a1_hp*mem_hp_r_11+a2_hp*mem_hp_r_12-b1_hp*mem_hp_r_13-b2_hp*mem_hp_r_14; +mem_hp_r_12 = mem_hp_r_11; +mem_hp_r_11 = inr; +mem_hp_r_14 = mem_hp_r_13; +mem_hp_r_13 = out_hp_r_1; +out_hp_r = out_hp_r_1; +n_hp > 1 ? ( +out_hp_l_2 = a0_hp*out_hp_l_1+a1_hp*mem_hp_l_21+a2_hp*mem_hp_l_22-b1_hp*mem_hp_l_23-b2_hp*mem_hp_l_24; +mem_hp_l_22 = mem_hp_l_21; +mem_hp_l_21 = out_hp_l_1; +mem_hp_l_24 = mem_hp_l_23; +mem_hp_l_23 = out_hp_l_2; +out_hp_l = out_hp_l_2; +out_hp_r_2 = a0_hp*out_hp_r_1+a1_hp*mem_hp_r_21+a2_hp*mem_hp_r_22-b1_hp*mem_hp_r_23-b2_hp*mem_hp_r_24; +mem_hp_r_22 = mem_hp_r_21; +mem_hp_r_21 = out_hp_r_1; +mem_hp_r_24 = mem_hp_r_23; +mem_hp_r_23 = out_hp_r_2; +out_hp_r = out_hp_r_2; +); +n_hp > 2 ? ( +out_hp_l_3 = a0_hp*out_hp_l_2+a1_hp*mem_hp_l_31+a2_hp*mem_hp_l_32-b1_hp*mem_hp_l_33-b2_hp*mem_hp_l_34; +mem_hp_l_32 = mem_hp_l_31; +mem_hp_l_31 = out_hp_l_2; +mem_hp_l_34 = mem_hp_l_33; +mem_hp_l_33 = out_hp_l_3; +out_hp_l = out_hp_l_3; +out_hp_r_3 = a0_hp*out_hp_r_2+a1_hp*mem_hp_r_31+a2_hp*mem_hp_r_32-b1_hp*mem_hp_r_33-b2_hp*mem_hp_r_34; +mem_hp_r_32 = mem_hp_r_31; +mem_hp_r_31 = out_hp_r_2; +mem_hp_r_34 = mem_hp_r_33; +mem_hp_r_33 = out_hp_r_3; +out_hp_r = out_hp_r_3; +); +n_hp > 3 ? ( +out_hp_l_4 = a0_hp*out_hp_l_3+a1_hp*mem_hp_l_41+a2_hp*mem_hp_l_42-b1_hp*mem_hp_l_43-b2_hp*mem_hp_l_44; +mem_hp_l_42 = mem_hp_l_41; +mem_hp_l_41 = out_hp_l_3; +mem_hp_l_44 = mem_hp_l_43; +mem_hp_l_43 = out_hp_l_4; +out_hp_l = out_hp_l_4; +out_hp_r_4 = a0_hp*out_hp_r_3+a1_hp*mem_hp_r_41+a2_hp*mem_hp_r_42-b1_hp*mem_hp_r_43-b2_hp*mem_hp_r_44; +mem_hp_r_42 = mem_hp_r_41; +mem_hp_r_41 = out_hp_r_3; +mem_hp_r_44 = mem_hp_r_43; +mem_hp_r_43 = out_hp_r_4; +out_hp_r = out_hp_r_4; +); +n_hp > 4 ? ( +out_hp_l_5 = a0_hp*out_hp_l_4+a1_hp*mem_hp_l_51+a2_hp*mem_hp_l_52-b1_hp*mem_hp_l_53-b2_hp*mem_hp_l_54; +mem_hp_l_52 = mem_hp_l_51; +mem_hp_l_51 = out_hp_l_4; +mem_hp_l_54 = mem_hp_l_53; +mem_hp_l_53 = out_hp_l_5; +out_hp_l = out_hp_l_5; +out_hp_r_5 = a0_hp*out_hp_r_4+a1_hp*mem_hp_r_51+a2_hp*mem_hp_r_52-b1_hp*mem_hp_r_53-b2_hp*mem_hp_r_54; +mem_hp_r_52 = mem_hp_r_51; +mem_hp_r_51 = out_hp_r_4; +mem_hp_r_54 = mem_hp_r_53; +mem_hp_r_53 = out_hp_r_5; +out_hp_r = out_hp_r_5; +); +n_hp > 5 ? ( +out_hp_l_6 = a0_hp*out_hp_l_5+a1_hp*mem_hp_l_61+a2_hp*mem_hp_l_62-b1_hp*mem_hp_l_63-b2_hp*mem_hp_l_64; +mem_hp_l_62 = mem_hp_l_61; +mem_hp_l_61 = out_hp_l_5; +mem_hp_l_64 = mem_hp_l_63; +mem_hp_l_63 = out_hp_l_6; +out_hp_l = out_hp_l_6; +out_hp_r_6 = a0_hp*out_hp_r_5+a1_hp*mem_hp_r_61+a2_hp*mem_hp_r_62-b1_hp*mem_hp_r_63-b2_hp*mem_hp_r_64; +mem_hp_r_62 = mem_hp_r_61; +mem_hp_r_61 = out_hp_r_5; +mem_hp_r_64 = mem_hp_r_63; +mem_hp_r_63 = out_hp_r_6; +out_hp_r = out_hp_r_6; +); +) : ( +out_hp_l = inl; +out_hp_r = inr; +); +//********************************************* +//lp +n_lp > 0 ? ( +out_lp_l_1 = a0_lp*out_hp_l+a1_lp*mem_lp_l_11+a2_lp*mem_lp_l_12-b1_lp*mem_lp_l_13-b2_lp*mem_lp_l_14; +mem_lp_l_12 = mem_lp_l_11; +mem_lp_l_11 = out_hp_l; +mem_lp_l_14 = mem_lp_l_13; +mem_lp_l_13 = out_lp_l_1; +out_lp_l = out_lp_l_1; +out_lp_r_1 = a0_lp*out_hp_r+a1_lp*mem_lp_r_11+a2_lp*mem_lp_r_12-b1_lp*mem_lp_r_13-b2_lp*mem_lp_r_14; +mem_lp_r_12 = mem_lp_r_11; +mem_lp_r_11 = out_hp_r; +mem_lp_r_14 = mem_lp_r_13; +mem_lp_r_13 = out_lp_r_1; +out_lp_r = out_lp_r_1; +n_lp > 1 ? ( +out_lp_l_2 = a0_lp*out_lp_l_1+a1_lp*mem_lp_l_21+a2_lp*mem_lp_l_22-b1_lp*mem_lp_l_23-b2_lp*mem_lp_l_24; +mem_lp_l_22 = mem_lp_l_21; +mem_lp_l_21 = out_lp_l_1; +mem_lp_l_24 = mem_lp_l_23; +mem_lp_l_23 = out_lp_l_2; +out_lp_l = out_lp_l_2; +out_lp_r_2 = a0_lp*out_lp_r_1+a1_lp*mem_lp_r_21+a2_lp*mem_lp_r_22-b1_lp*mem_lp_r_23-b2_lp*mem_lp_r_24; +mem_lp_r_22 = mem_lp_r_21; +mem_lp_r_21 = out_lp_r_1; +mem_lp_r_24 = mem_lp_r_23; +mem_lp_r_23 = out_lp_r_2; +out_lp_r = out_lp_r_2; +); +n_lp > 2 ? ( +out_lp_l_3 = a0_lp*out_lp_l_2+a1_lp*mem_lp_l_31+a2_lp*mem_lp_l_32-b1_lp*mem_lp_l_33-b2_lp*mem_lp_l_34; +mem_lp_l_32 = mem_lp_l_31; +mem_lp_l_31 = out_lp_l_2; +mem_lp_l_34 = mem_lp_l_33; +mem_lp_l_33 = out_lp_l_3; +out_lp_l = out_lp_l_3; +out_lp_r_3 = a0_lp*out_lp_r_2+a1_lp*mem_lp_r_31+a2_lp*mem_lp_r_32-b1_lp*mem_lp_r_33-b2_lp*mem_lp_r_34; +mem_lp_r_32 = mem_lp_r_31; +mem_lp_r_31 = out_lp_r_2; +mem_lp_r_34 = mem_lp_r_33; +mem_lp_r_33 = out_lp_r_3; +out_lp_r = out_lp_r_3; +); +n_lp > 3 ? ( +out_lp_l_4 = a0_lp*out_lp_l_3+a1_lp*mem_lp_l_41+a2_lp*mem_lp_l_42-b1_lp*mem_lp_l_43-b2_lp*mem_lp_l_44; +mem_lp_l_42 = mem_lp_l_41; +mem_lp_l_41 = out_lp_l_3; +mem_lp_l_44 = mem_lp_l_43; +mem_lp_l_43 = out_lp_l_4; +out_lp_l = out_lp_l_4; +out_lp_r_4 = a0_lp*out_lp_r_3+a1_lp*mem_lp_r_41+a2_lp*mem_lp_r_42-b1_lp*mem_lp_r_43-b2_lp*mem_lp_r_44; +mem_lp_r_42 = mem_lp_r_41; +mem_lp_r_41 = out_lp_r_3; +mem_lp_r_44 = mem_lp_r_43; +mem_lp_r_43 = out_lp_r_4; +out_lp_r = out_lp_r_4; +); +n_lp > 4 ? ( +out_lp_l_5 = a0_lp*out_lp_l_4+a1_lp*mem_lp_l_51+a2_lp*mem_lp_l_52-b1_lp*mem_lp_l_53-b2_lp*mem_lp_l_54; +mem_lp_l_52 = mem_lp_l_51; +mem_lp_l_51 = out_lp_l_4; +mem_lp_l_54 = mem_lp_l_53; +mem_lp_l_53 = out_lp_l_5; +out_lp_l = out_lp_l_5; +out_lp_r_5 = a0_lp*out_lp_r_4+a1_lp*mem_lp_r_51+a2_lp*mem_lp_r_52-b1_lp*mem_lp_r_53-b2_lp*mem_lp_r_54; +mem_lp_r_52 = mem_lp_r_51; +mem_lp_r_51 = out_lp_r_4; +mem_lp_r_54 = mem_lp_r_53; +mem_lp_r_53 = out_lp_r_5; +out_lp_r = out_lp_r_5; +); +n_lp > 5 ? ( +out_lp_l_6 = a0_lp*out_lp_l_5+a1_lp*mem_lp_l_61+a2_lp*mem_lp_l_62-b1_lp*mem_lp_l_63-b2_lp*mem_lp_l_64; +mem_lp_l_62 = mem_lp_l_61; +mem_lp_l_61 = out_lp_l_5; +mem_lp_l_64 = mem_lp_l_63; +mem_lp_l_63 = out_lp_l_6; +out_lp_l = out_lp_l_6; +out_lp_r_6 = a0_lp*out_lp_r_5+a1_lp*mem_lp_r_61+a2_lp*mem_lp_r_62-b1_lp*mem_lp_r_63-b2_lp*mem_lp_r_64; +mem_lp_r_62 = mem_lp_r_61; +mem_lp_r_61 = out_lp_r_5; +mem_lp_r_64 = mem_lp_r_63; +mem_lp_r_63 = out_lp_r_6; +out_lp_r = out_lp_r_6; +); +) : ( +out_lp_l = out_hp_l; +out_lp_r = out_hp_r; +); + +//out stereo +spl0 = out_lp_l*outgain; +spl1 = out_lp_r*outgain; + +); + +@gfx 100 32 +gfx_x=gfx_y=5; +gfx_lineto(gfx_x, gfx_y,0); +gfx_r=0.7; +gfx_b=0.1; +gfx_g=1; +gfx_a=1; +gfx_drawchar($'H'); +gfx_drawchar($'P'); +gfx_drawchar($' '); +gfx_drawchar($'='); +gfx_drawchar($' '); +gfx_drawnumber(cx_hp,0); +gfx_drawchar($' '); +gfx_drawchar($'H'); +gfx_drawchar($'z'); +gfx_y += 15; +gfx_x = 5; +gfx_drawchar($'L'); +gfx_drawchar($'P'); +gfx_drawchar($' '); +gfx_drawchar($'='); +gfx_drawchar($' '); +gfx_drawnumber(cx_lp,0); +gfx_drawchar($' '); +gfx_drawchar($'H'); +gfx_drawchar($'z'); + + diff --git a/Effects/Liteon/bassmanager b/Effects/Liteon/bassmanager new file mode 100644 index 0000000..2ffe107 --- /dev/null +++ b/Effects/Liteon/bassmanager @@ -0,0 +1,353 @@ +// (C) 2008-2009, Lubomir I. Ivanov + +// NO WARRANTY IS GRANTED. THIS PLUG-IN IS PROVIDED ON AN "AS IS" BASIS, WITHOUT +// WARRANTY OF ANY KIND. NO LIABILITY IS GRANTED, INCLUDING, BUT NOT LIMITED TO, +// ANY DIRECT OR INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGE ARISING +// OUT OF THE USE OR INABILITY TO USE THIS PLUG-IN, COMPUTER FAILTURE OF +// MALFUNCTION INCLUDED. THE USE OF THE SOURCE CODE, EITHER PARTIALLY OR IN +// TOTAL, IS ONLY GRANTED, IF USED IN THE SENSE OF THE AUTHOR'S INTENTION, AND +// USED WITH ACKNOWLEDGEMENT OF THE AUTHOR. FURTHERMORE IS THIS PLUG-IN A THIRD +// PARTY CONTRIBUTION, EVEN IF INCLUDED IN REAPER(TM), COCKOS INCORPORATED OR +// ITS AFFILIATES HAVE NOTHING TO DO WITH IT. LAST BUT NOT LEAST, BY USING THIS +// PLUG-IN YOU RELINQUISH YOUR CLAIM TO SUE IT'S AUTHOR, AS WELL AS THE CLAIM TO +// ENTRUST SOMEBODY ELSE WITH DOING SO. +// +// Released under GPL: +// . + +//****************************************************************************** +// References: +// 2nd order filter coefficients by Fabio Bizzetti and Robert Bristow-Johnson +// waveshaper formula by Partice Tarrabia and Bram de Jong +//****************************************************************************** + +desc: Bass Manager/Booster +desc: BassManager (plugin for boosting bass) [Liteon] +//tags: processing gain filter stereo limiter +//author: Liteon + +slider1:0<0,1,1{Stereo,Mono}>Processing +slider2:0<0,1,1{Wide,Narrow}>Spread +slider3:90<30,250,0.05>Frequency (Hz) +slider4:0<0,24,0.01>Boost (dB) +slider5:0<0,100,0.05>Drive (%) +slider6:0<0,100,0.05>Muffle (%) +slider7:0<-24,24,0.05>Output (dB) +slider8:0<0,4,1{Off,30,50,70,90,150,200,300}>Highpass (Hz) +slider9:0<0,1,1{On,Off}>Limiter +slider10:0<0,1,1{Off,On}>Oversample (x2) + +in_pin:left input +in_pin:right input +out_pin:left output +out_pin:right output + +@init +lp_output = 0; +nrml=nrml=onrml=onrml=nrmr=nrmr=onrmr=onrmr=0; + +@slider + +os = slider10; + +//fir restoration +c1 = 1; +c2 = -0.75; +c3 = 0.17; +fgain = 4.5; + +//fir bandlimit +bl_c1 = 0.52; +bl_c2 = 0.54; +bl_c3 = -0.02; + +//channels +mono = slider1; + +//spread +slider2 == 0 ? ( + S = slider2+0.3; +) : ( + S = slider2; +); + +//drive +drive = 0+slider5/99-0.07; +drv_k = drive/(1-drive); + +//outgain +outgain = 10^(slider7/20); + +//ls +slider4 > 0 ? ( + A = 10^(slider4/20); + omega = (2*$pi * slider3) / srate; + sn = sin(omega); + cs = cos(omega); + temp1 = A + 1.0; + temp2 = A - 1.0; + temp3 = temp1 * cs; + temp4 = temp2 * cs; + beta = sn * sqrt((A * A + 1.0 )/ S - temp2 * temp2 ); + s_a0 = 1.0 / (temp1 + temp4 + beta); + s_a1 = (-2.0 * (temp2 + temp3)) * s_a0; + s_a2 = (temp1 + temp4 - beta) * s_a0; + s_b0 = (A * (temp1 - temp4 + beta)) * s_a0; + s_b1 = (2.0 * A * (temp2 - temp3)) * s_a0; + s_b2 = (A * (temp1 - temp4 - beta)) * s_a0; +); + +//hp +slider8 > 0 ? ( + HPF = 10+40*slider8; + omega = (2*$pi * HPF ) / srate; + sn = sin(omega); + cs = cos(omega); + alpha = sn / (2.0 * 1); // q static = 1 + h_a0 = 1.0 / (1.0 + alpha); + h_a1 = (-2.0 * cs) * h_a0; + h_a2 = (1.0 - alpha) * h_a0; + h_b1 = -(1.0 + cs) * h_a0 * 1; // gain = 1 + h_b0 = -h_b1 * 0.5; +); + +//lp +slider6 > 0 ? ( + muffle = 20000-(slider6*100+9000); + lp_cut = 2*$pi*muffle; + lp_n = 1/(lp_cut+ 2*srate); + lp_b1 = (2*srate - lp_cut)*lp_n; + lp_a0 = lp_a1 = lp_cut*lp_n; +); + +@sample + +//=================================== +//stereo +mono == 0 ? ( + +//ls +slider4 > 0 ? ( + s_input_l = spl0; + s_output_l = s_b0*s_input_l + s_b1*s_i1_l + s_b2*s_i2_l - s_a1*s_o1_l - s_a2*s_o2_l; + s_o2_l=s_o1_l; + s_o1_l=s_output_l; + s_i2_l=s_i1_l; + s_i1_l=s_input_l; + + s_input_r = spl1; + s_output_r = s_b0*s_input_r + s_b1*s_i1_r + s_b2*s_i2_r - s_a1*s_o1_r - s_a2*s_o2_r; + s_o2_r=s_o1_r; + s_o1_r=s_output_r; + s_i2_r=s_i1_r; + s_i1_r=s_input_r; +) : ( + s_output_l = spl0; + s_output_r = spl1; +); + +slider5 > 0 ? ( + os == 1 ? ( + //--------------------------------------- + //power series in + ps_out1l = 0.5*(s_output_l+ps_out2l); + ps_out2l = 0.5*ps_out1l; + + ps_out1r = 0.5*(s_output_r+ps_out2r); + ps_out2r = 0.5*ps_out1r; + + //--------------------------------------- + //drive + + o_in1l = (1+drv_k)*ps_out1l/(1+drv_k*abs(ps_out1l)); + o_in2l = (1+drv_k)*ps_out2l/(1+drv_k*abs(ps_out2l)); + + o_in1r = (1+drv_k)*ps_out1r/(1+drv_k*abs(ps_out1r)); + o_in2r = (1+drv_k)*ps_out2r/(1+drv_k*abs(ps_out2r)); + + //--------------------------------------- + //bandlimit + bl3_l1 = bl2_l1; + bl3_r1 = bl2_r1; + bl3_l2 = bl2_l2; + bl3_r2 = bl2_r2; + + bl2_l1 = bl1_l1; + bl2_r1 = bl1_r1; + bl2_l2 = bl1_l2; + bl2_r2 = bl1_r2; + + bl1_l1 = o_in1l; + bl1_r1 = o_in1r; + bl1_l2 = o_in2l; + bl1_r2 = o_in2r; + + bl_out1l = (bl1_l1*bl_c1 + bl2_l1*bl_c2 + bl3_l1*bl_c3); + bl_out1r = (bl1_r1*bl_c1 + bl2_r1*bl_c2 + bl3_r1*bl_c3); + bl_out2l = (bl1_l2*bl_c1 + bl2_l2*bl_c2 + bl3_l2*bl_c3); + bl_out2r = (bl1_r2*bl_c1 + bl2_r2*bl_c2 + bl3_r2*bl_c3); + + //--------------------------------------- + //power series out + o_out1l = 0.5*(bl_out1l+o_out2l); + o_out2l = 0.5*(bl_out2l+o_out1l); + + o_out1r = 0.5*(bl_out1r+o_out2r); + o_out2r = 0.5*(bl_out2r+o_out1r); + + //--------------------------------------- + //fir restoration + s3l = s2l; + s3r = s2r; + s2l = s1l; + s2r = s1r; + s1l = o_out1l; + s1r = o_out1r; + drv_output_l = (s1l*c1+s2l*c2+s3l*c3)*fgain; + drv_output_r = (s1r*c1+s2r*c2+s3r*c3)*fgain; + + ) : ( + + drv_output_l = (1+drv_k)*s_output_l/(1+drv_k*abs(s_output_l)); + drv_output_r = (1+drv_k)*s_output_r/(1+drv_k*abs(s_output_r)); + + ); + +) : ( + drv_output_l = s_output_l; + drv_output_r = s_output_r; +); + +//hp +slider8 > 0 ? ( + h_input_l = drv_output_l; + h_output_l = h_b0*h_input_l + h_b1*h_i1_l + h_b0*h_i2_l - h_a1*h_o1_l - h_a2*h_o2_l; + h_o2_l=h_o1_l; + h_o1_l=h_output_l; + h_i2_l=h_i1_l; + h_i1_l=h_input_l; + + h_input_r = drv_output_r; + h_output_r = h_b0*h_input_r + h_b1*h_i1_r + h_b0*h_i2_r - h_a1*h_o1_r - h_a2*h_o2_r; + h_o2_r=h_o1_r; + h_o1_r=h_output_r; + h_i2_r=h_i1_r; + h_i1_r=h_input_r; +) : ( + h_output_l = drv_output_l; + h_output_r = drv_output_r; +); + +//lp +slider6 > 0 ? ( + lp_in_l = h_output_l; + lp_output_l = lp_in_l*lp_a0 + lp_in_l*lp_a1 + lp_output_l*lp_b1; + + lp_in_r = h_output_r; + lp_output_r = lp_in_r*lp_a0 + lp_in_r*lp_a1 + lp_output_r*lp_b1; +) : ( + lp_output_l = h_output_l; + lp_output_r = h_output_r; +); + +//output +output_l = lp_output_l*outgain; +output_r = lp_output_r*outgain; +slider9 == 0 ? ( + output_l = min(max(output_l,-0.98),0.98); + output_r = min(max(output_r,-0.98),0.98); +); + +spl0=output_l; +spl1=output_r; + +//=================================== +//mono +) : ( + +//ls +slider4 > 0 ? ( + s_input = (spl0+spl1)/2; + s_output = s_b0*s_input + s_b1*s_i1 + s_b2*s_i2 - s_a1*s_o1 - s_a2*s_o2; + s_o2=s_o1; + s_o1=s_output; + s_i2=s_i1; + s_i1=s_input; +) : ( + s_output = (spl0+spl1)/2; +); + +slider5 > 0 ? ( + os == 1 ? ( + //power series in + ps_out1l = 0.5*(s_output+ps_out2l); + ps_out2l = 0.5*ps_out1l; + + //drive + o_in1l = (1+drv_k)*ps_out1l/(1+drv_k*abs(ps_out1l)); + o_in2l = (1+drv_k)*ps_out2l/(1+drv_k*abs(ps_out2l)); + + //--------------------------- + //bandlimit + bl3_1 = bl2_1; + bl3_2 = bl2_2; + + bl2_1 = bl1_1; + bl2_2 = bl1_2; + + bl1_1 = o_in1l; + bl1_2 = o_in2l; + + bl_out1 = (bl1_1*bl_c1 + bl2_1*bl_c2 + bl3_1*bl_c3); + bl_out2 = (bl1_2*bl_c1 + bl2_2*bl_c2 + bl3_2*bl_c3); + + //power series out + o_out1l = 0.5*(bl_out1+o_out2l); + o_out2l = 0.5*(bl_out2+o_out1l); + + //fir restoration + s3l = s2l; + s2l = s1l; + s1l = o_out1l; + drv_output = (s1l*c1+s2l*c2+s3l*c3)*fgain; + + ) : ( + + drv_output = (1+drv_k)*s_output/(1+drv_k*abs(s_output)); + + ); + +) : ( + drv_output = s_output; +); + +//hp +slider8 > 0 ? ( + h_input = drv_output; + h_output = h_b0*h_input + h_b1*h_i1 + h_b0*h_i2 - h_a1*h_o1 - h_a2*h_o2; + h_o2=h_o1; + h_o1=h_output; + h_i2=h_i1; + h_i1=h_input; +) : ( + h_output = drv_output; +); + +//lp +slider6 > 0 ? ( + lp_in = h_output; + lp_output = lp_in*lp_a0 + lp_in*lp_a1 + lp_output*lp_b1; +) : ( + lp_output = h_output; +); + +//output +output = lp_output*outgain; +slider9 == 0 ? ( + output = min(max(output,-0.98),0.98); +); + +spl0=spl1=output; + +); + diff --git a/Effects/Liteon/butterworth24db b/Effects/Liteon/butterworth24db new file mode 100644 index 0000000..dcbc0b9 --- /dev/null +++ b/Effects/Liteon/butterworth24db @@ -0,0 +1,199 @@ +// (C) 2008-2009, Lubomir I. Ivanov + +// NO WARRANTY IS GRANTED. THIS PLUG-IN IS PROVIDED ON AN "AS IS" BASIS, WITHOUT +// WARRANTY OF ANY KIND. NO LIABILITY IS GRANTED, INCLUDING, BUT NOT LIMITED TO, +// ANY DIRECT OR INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGE ARISING +// OUT OF THE USE OR INABILITY TO USE THIS PLUG-IN, COMPUTER FAILTURE OF +// MALFUNCTION INCLUDED. THE USE OF THE SOURCE CODE, EITHER PARTIALLY OR IN +// TOTAL, IS ONLY GRANTED, IF USED IN THE SENSE OF THE AUTHOR'S INTENTION, AND +// USED WITH ACKNOWLEDGEMENT OF THE AUTHOR. FURTHERMORE IS THIS PLUG-IN A THIRD +// PARTY CONTRIBUTION, EVEN IF INCLUDED IN REAPER(TM), COCKOS INCORPORATED OR +// ITS AFFILIATES HAVE NOTHING TO DO WITH IT. LAST BUT NOT LEAST, BY USING THIS +// PLUG-IN YOU RELINQUISH YOUR CLAIM TO SUE IT'S AUTHOR, AS WELL AS THE CLAIM TO +// ENTRUST SOMEBODY ELSE WITH DOING SO. +// +// Released under GPL: +// . + +//****************************************************************************** +// Reference: posted by Zxform - baltrax@hotmail.com +// Warning: Automate the cutoff of this filter at your own risk !!! +// Note: Limiter automatically kicks in below 300hz for speaker protection! +//****************************************************************************** + +desc:Butterworth 4-Pole Filter +//tags: filter multimode +//author: Liteon + +slider1:0<0,1,1{Stereo,Mono}>Processing +slider2:0<0,1,1{LP,HP}>Filter Type +slider3:100<0,100,0.05>Cutoff (Scale) +slider4:0<0,0.9>Resonance +slider5:0<-25,25,0.05>Output (dB) +slider6:0<0,1,1{On,Off}>Limiter + +in_pin:left input +in_pin:right input +out_pin:left output +out_pin:right output + +@init +mv=2^(-0.2/6); +history1=history2=history3=history4=0; +history1l=history2l=history3l=history4l=0; +history1r=history2r=history3r=history4r=0; +new_hist=new_histl=new_histr=0; +bq = 6; +pi = 22/7; +fs = srate; +t0 = 4*fs*fs; +t1 = 8*fs*fs; +t2 = 2*fs; +t3 = pi/fs; + +@slider +ftype = slider2; +mono = slider1; +limiter = slider6; +sx = 16+slider3*1.20103; +cutoff = floor(exp(sx*log(1.059))*8.17742); +res = slider3; +outgain = 10^(slider5/20); +wp = t2*tan(t3*cutoff); +cutoff > 150 ? ( + q = (slider4*bq)+1; +) : ( + q = (0.1*bq)+1; +); +b1 = (0.765367/q)/wp; +b2 = 1/(wp*wp); +bd_tmp = t0*b2+1; +bd = 1/(bd_tmp+t2*b1); +//bd = 1/(b1+t2*bd_tmp); +gain = bd; +coef2 = (2-t1*b2); +coef0 = coef2*bd; +coef1 = (bd_tmp-t2*b1)*bd; +b1 = (1.847759/q)/wp; +bd = 1/(bd_tmp+t2*b1); +//bd = 1/(b1+t2*bd_tmp); +gain *= bd; +coef2 *= bd; +coef3 = (bd_tmp-t2*b1)*bd; + +@sample + +//stereo +mono == 0 ? ( + +//filter +inputl = spl0; +inputr = spl1; + +outputl = inputl*gain; +outputr = inputr*gain; +outputl -= history1l*coef0; +outputr -= history1r*coef0; +new_histl = outputl-history2l*coef1; +new_histr = outputr-history2r*coef1; +outputl = new_histl+history1l*2; +outputr = new_histr+history1r*2; +outputl += history2l; +outputr += history2r; +history2l = history1l; +history2r = history1r; +history1l = new_histl; +history1r = new_histr; + +outputl -= history3l*coef2; +outputr -= history3r*coef2; +new_histl = outputl-history4l*coef3; +new_histr = outputr-history4r*coef3; +outputl = new_histl+history3l*2; +outputr = new_histr+history3r*2; +outputl += history4l; +outputr += history4r; +history4l = history3l; +history4r = history3r; +history3l = new_histl; +history3r = new_histr; + +ftype == 1 ? ( + outputl = inputl-outputl; + outputr = inputr-outputr; +); + +//auto limit below 300hz +cutoff < 300 ? ( + outputl = min(max((outputl),-mv),mv); + outputr = min(max((outputr),-mv),mv); +); + +outputl = outputl*outgain; +outputr = outputr*outgain; + +//limiter +limiter == 0 ? ( + spl0 = min(max((outputl),-mv),mv); + spl1 = min(max((outputr),-mv),mv); +) : ( + spl0 = outputl; + spl1 = outputr; +); + +//mono +) : ( + +//filter +input = (spl0+spl1)/2; +hp_bp = input*gain+history1*coef0; + +output = input*gain; +output -= history1*coef0; +new_hist = output-history2*coef1; +output = new_hist+history1*2; +output += history2; +history2 = history1; +history1 = new_hist; + +output -= history3*coef2; +new_hist = output-history4*coef3; +output = new_hist+history3*2; +output += history4; +history4 = history3; +history3 = new_hist; + +//filter type +ftype == 1 ? ( + output = input-output; +); + +//auto limit below 300hz +cutoff < 300 ? ( + output = min(max((output),-mv),mv); +); + +output = output*outgain; + +//limiter +limiter == 0 ? ( + spl0 = spl1 = min(max((output),-mv),mv); +) : ( + spl0 = spl1 = (output); +); + +); + +@gfx 100 16 +gfx_x=gfx_y=5; +gfx_lineto(gfx_x, gfx_y,0); +gfx_r=gfx_b=0; +gfx_g=gfx_a=1; +gfx_drawchar($'F'); +gfx_drawchar($' '); +gfx_drawchar($'='); +gfx_drawchar($' '); +gfx_drawnumber(cutoff,0); +gfx_drawchar($' '); +gfx_drawchar($'H'); +gfx_drawchar($'z'); diff --git a/Effects/Liteon/cheby24db b/Effects/Liteon/cheby24db new file mode 100644 index 0000000..ca994fa --- /dev/null +++ b/Effects/Liteon/cheby24db @@ -0,0 +1,229 @@ +// (C) 2008-2009, Lubomir I. Ivanov + +// NO WARRANTY IS GRANTED. THIS PLUG-IN IS PROVIDED ON AN "AS IS" BASIS, WITHOUT +// WARRANTY OF ANY KIND. NO LIABILITY IS GRANTED, INCLUDING, BUT NOT LIMITED TO, +// ANY DIRECT OR INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGE ARISING +// OUT OF THE USE OR INABILITY TO USE THIS PLUG-IN, COMPUTER FAILTURE OF +// MALFUNCTION INCLUDED. THE USE OF THE SOURCE CODE, EITHER PARTIALLY OR IN +// TOTAL, IS ONLY GRANTED, IF USED IN THE SENSE OF THE AUTHOR'S INTENTION, AND +// USED WITH ACKNOWLEDGEMENT OF THE AUTHOR. FURTHERMORE IS THIS PLUG-IN A THIRD +// PARTY CONTRIBUTION, EVEN IF INCLUDED IN REAPER(TM), COCKOS INCORPORATED OR +// ITS AFFILIATES HAVE NOTHING TO DO WITH IT. LAST BUT NOT LEAST, BY USING THIS +// PLUG-IN YOU RELINQUISH YOUR CLAIM TO SUE IT'S AUTHOR, AS WELL AS THE CLAIM TO +// ENTRUST SOMEBODY ELSE WITH DOING SO. +// +// Released under GPL: +// . + +//********************************************************** +// Cheby Type I +// References: +// Christian W. Budde, Cockos, Wiki +//********************************************************** + +desc:Chebyshev 4-Pole Filter +//tags: filter multimode +//author: Liteon + +slider1:0<0,1,1{Stereo,Mono}>Processing +slider2:0<0,2,1{LP,HP,BP}>Filter Type +slider3:100<0,100,0.05>Cutoff (Scale) +slider4:0.3<0,0.9,0.0005>Passband Ripple (Less/More) +slider5:0<-25,25,0.05>Output (dB) +slider6:0<0,1,1{On,Off}>Limiter + +in_pin:left input +in_pin:right input +out_pin:left output +out_pin:right output + +@init +//cDenorm = 10^-30; +cDenorm = 0; +mv=2^(-0.2/6); +e = 2.718281828459045; +pi = 3.141592653589793; +cutoff = 20000; + +@slider +mono = slider1; +ftype = slider2; +fs = srate; +outgain = 10^(slider5/20); +limiter = slider6; + +sx = 16+slider3*1.20103; +cutoff = floor(exp(sx*log(1.059))*8.17742); + +cutoff < 90 ? ( +pbr = 0.5; +) : ( +pbr = 1.03-0.1-slider4; +); + +K = tan(pi*cutoff/srate); + +sg = (e^pbr-e^(-pbr))/2; +cg = (e^pbr+e^(-pbr))/2; +cg *= cg; + +Coeff0 = 1/(cg-0.85355339059327376220042218105097); +Coeff1 = K*Coeff0*sg*1.847759065022573512256366378792; +Coeff2 = 1/(cg-0.14644660940672623779957781894758); +Coeff3 = K*Coeff2*sg*0.76536686473017954345691996806; + +K *= K; + +tgt_a0 = 1/(Coeff1+K+Coeff0); +tgt_a1 = 2*(Coeff0-K)*tgt_a0; +tgt_a2 = (Coeff1-K-Coeff0)*tgt_a0; +tgt_b0 = tgt_a0*K; +tgt_b1 = 2*tgt_b0; +tgt_b2 = tgt_b0; + +tgt_a3 = 1/(Coeff3+K+Coeff2); +tgt_a4 = 2*(Coeff2-K)*tgt_a3; +tgt_a5 = (Coeff3-K-Coeff2)*tgt_a3; +tgt_b3 = tgt_a3*K; +tgt_b4 = 2*tgt_b3; +tgt_b5 = tgt_b3; + +@block +//interpolate all coeffs +d_a1 = (tgt_a1-src_a1)/samplesblock; +a1 = src_a1; +src_a1 = tgt_a1; +d_a2 = (tgt_a2-src_a2)/samplesblock; +a2 = src_a2; +src_a2 = tgt_a2; +d_a4 = (tgt_a4-src_a4)/samplesblock; +a4 = src_a4; +src_a4 = tgt_a4; +d_a5 = (tgt_a5-src_a5)/samplesblock; +a5 = src_a5; +src_a5 = tgt_a5; +d_b0 = (tgt_b0-src_b0)/samplesblock; +b0 = src_b0; +src_b0 = tgt_b0; +d_b1 = (tgt_b1-src_b1)/samplesblock; +b1 = src_b1; +src_b1 = tgt_b1; +d_b2 = (tgt_b2-src_b2)/samplesblock; +b2 = src_b2; +src_b2 = tgt_b2; +d_b3 = (tgt_b3-src_b3)/samplesblock; +b3 = src_b3; +src_b3 = tgt_b3; +d_b4 = (tgt_b4-src_b4)/samplesblock; +b4 = src_b4; +src_b4 = tgt_b4; +d_b5 = (tgt_b5-src_b5)/samplesblock; +b5 = src_b5; +src_b5 = tgt_b5; + +@sample + +//interpolate +a1 += d_a1; +a2 += d_a2; +a4 += d_a4; +a5 += d_a5; +b0 += d_b0; +b1 += d_b1; +b2 += d_b2; +b3 += d_b3; +b4 += d_b4; +b5 += d_b5; + +//stereo +mono == 0 ? ( + +InputL = spl0; +InputR = spl1; + +Stage1L = b0*InputL + State0L; +Stage1R = b0*InputR + State0R; +State0L = b1*InputL + a1*Stage1L + State1L; +State0R = b1*InputR + a1*Stage1R + State1R; +State1L = b2*InputL + a2*Stage1L; +State1R = b2*InputR + a2*Stage1R; +OutputL = b3*Stage1L + State2L; +OutputR = b3*Stage1R + State2R; +State2L = b4*Stage1L + a4*OutputL + State3L; +State2R = b4*Stage1R + a4*OutputR + State3R; +State3L = b5*Stage1L + a5*OutputL; +State3R = b5*Stage1R + a5*OutputR; + +ftype == 0 ? ( +outl = OutputL; +outr = OutputR; +); +ftype == 1 ? ( +outl = InputL-OutputL; +outr = InputR-OutputR; +); +ftype == 2 ? ( +outl = 2*(Stage1L-OutputL); +outr = 2*(Stage1R-OutputR); +); + +outl = outl*outgain; +outr = outr*outgain; + +//limiter +limiter == 0 ? ( + spl0 = min(max((outl+cDenorm),-mv),mv); + spl1 = min(max((outr+cDenorm),-mv),mv); +) : ( + spl0 = outl; + spl1 = outr; +); + +//mono +) : ( + +Input = ((spl0+spl1)/2); + +Stage1 = b0*Input + State0; +State0 = b1*Input + a1*Stage1 + State1; +State1 = b2*Input + a2*Stage1; +Output = b3*Stage1 + State2; +State2 = b4*Stage1 + a4*Output + State3; +State3 = b5*Stage1 + a5*Output; + +ftype == 0 ? ( +out = output; +); +ftype == 1 ? ( +out = Input-Output; +); +ftype == 2 ? ( +out = 2*(Stage1-Output); +); + +out = out*outgain; + +//limiter +limiter == 0 ? ( + spl0 = min(max((out+cDenorm),-mv),mv); + spl1 = min(max((out+cDenorm),-mv),mv); +) : ( + spl0 = out; + spl1 = out; +); + +); + +@gfx 100 16 +gfx_x=gfx_y=5; +gfx_lineto(gfx_x, gfx_y,0); +gfx_r=gfx_b=0; +gfx_g=gfx_a=1; +gfx_drawchar($'F'); +gfx_drawchar($' '); +gfx_drawchar($'='); +gfx_drawchar($' '); +gfx_drawnumber(cutoff,0); +gfx_drawchar($' '); +gfx_drawchar($'H'); +gfx_drawchar($'z'); diff --git a/Effects/Liteon/deesser b/Effects/Liteon/deesser new file mode 100644 index 0000000..7caec18 --- /dev/null +++ b/Effects/Liteon/deesser @@ -0,0 +1,552 @@ +// (C) 2009, Lubomir I. Ivanov +// +// NO WARRANTY IS GRANTED. THIS PLUG-IN IS PROVIDED ON AN "AS IS" BASIS, WITHOUT +// WARRANTY OF ANY KIND. NO LIABILITY IS GRANTED, INCLUDING, BUT NOT LIMITED TO, +// ANY DIRECT OR INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGE ARISING +// OUT OF THE USE OR INABILITY TO USE THIS PLUG-IN, COMPUTER FAILTURE OF +// MALFUNCTION INCLUDED. THE USE OF THE SOURCE CODE, EITHER PARTIALLY OR IN +// TOTAL, IS ONLY GRANTED, IF USED IN THE SENSE OF THE AUTHOR'S INTENTION, AND +// USED WITH ACKNOWLEDGEMENT OF THE AUTHOR. FURTHERMORE IS THIS PLUG-IN A THIRD +// PARTY CONTRIBUTION, EVEN IF INCLUDED IN REAPER(TM), COCKOS INCORPORATED OR +// ITS AFFILIATES HAVE NOTHING TO DO WITH IT. LAST BUT NOT LEAST, BY USING THIS +// PLUG-IN YOU RELINQUISH YOUR CLAIM TO SUE IT'S AUTHOR, AS WELL AS THE CLAIM TO +// ENTRUST SOMEBODY ELSE WITH DOING SO. +// +// Released under GPL: +// . +// +//****************************************************************************** +// Includes optimized version of Linkwitz-Riley (LR2) filters +// by T. Lossius - ttblue project +//****************************************************************************** + +//============================================================================== +// init +//============================================================================== +desc: De-esser +desc: De-esser [Liteon] +//tags: filter dynamics processing repair +//author: Liteon + +slider1:1<0,1,1{Stereo,Mono}>Processing +slider2:1<0,1,1{Bandpass,Hipass}>Target Type +slider3:0<0,1,1{Off,On}>Monitor +slider4:4000<1500,12000,1>Frequency (Hz) +slider5:1.5<0.1,3.1,0.0005>Bandwidth (Oct) +slider6:-25<-80,0,0.01>Threshold (dB) +slider7:4<1,20,0.01>Ratio +slider8:0<0,1,1{A: 3 s - R: 50 ms,A: 30 s - R: 100 ms,A: 100 s - R: 300 ms}>Time Constants +slider9:0<-24,24,0.001>Gain (-inf/+24dB) + +in_pin:left input +in_pin:right input +out_pin:left output +out_pin:right output + +@init +n = 0; +sqrt2 = sqrt(2); +s2 = sqrt2/2; +cgain = 1; +cdenorm = 10^-30; +e10 = 10^-10; +g_meter = gr_meter = g_reset = 1; +gr_meter_decay = exp(1/(1*srate)); + +//============================================================================== +@slider +//============================================================================== +//------------------------------------------------------------------------------ +// settings +//------------------------------------------------------------------------------ +mono = slider1; +target = slider2; +monitor = slider3; +fc = slider4; +bw = slider5; +//comp +thr = pow(10, 2 * (slider6/80+1) - 2); +rat = (slider7-1)/19; +slider8 == 0 ? ( +att = pow(10, -0.002 - 3.97772619*(0/100)); +rel = pow(10, -3.11 - 1.8698*(21.20/100)); +); +slider8 == 1 ? ( +att = pow(10, -0.002 - 3.97772619*(9.71/100)); +rel = pow(10, -3.11 - 1.8698*(37.19/100)); +); +slider8 == 2 ? ( +att = pow(10, -0.002 - 3.97772619*(20.97/100)); +rel = pow(10, -3.11 - 1.8698*(62.61/100)); +); +//outgain +slider9 == -24 ? ( +outgain = 0; +) : ( +outgain = 10^(slider9/20); +); +//------------------------------------------------------------------------------ +// crossover type: 2 or 3 bands +// this is a bit confusing, but optimized for js ! +//------------------------------------------------------------------------------ +target == 0 ? ( +fh = min((fc + fc*bw/2),20000); +//------------------------------ +// high-band split - s1 (at fh) +//------------------------------ +fpi = $pi*fh; +wc = 2*fpi; +wc2 = wc*wc; +wc22 = 2*wc2; +k = wc/tan(fpi/srate); +k2 = k*k; +k22 = 2*k2; +wck2 = 2*wc*k; +tmpk = (k2+wc2+wck2); +tgt_b1_s1 = (-k22+wc22)/tmpk; +tgt_b2_s1 = (-wck2+k2+wc2)/tmpk; +//--------------- +// low-pass (s1) +//--------------- +tgt_a0_s1_lp = (wc2)/tmpk; +tgt_a1_s1_lp = (wc22)/tmpk; +tgt_a2_s1_lp = (wc2)/tmpk; +//---------------- +// high-pass (s1) +//---------------- +tgt_a0_s1_hp = (k2)/tmpk; +tgt_a1_s1_hp = (-k22)/tmpk; +tgt_a2_s1_hp = (k2)/tmpk; +//---------------- +// prepare for s0 +//---------------- +fl = fc - fc*bw/4; +fpi = $pi*fl; +) : ( +fpi = $pi*fc; +); +//--------------------------------------------- +// low-band split - s0 (case: at 'fc' or 'fl') +// s0 is always processed (2 band split) +//--------------------------------------------- +wc = 2*fpi; +wc2 = wc*wc; +wc22 = 2*wc2; +k = wc/tan(fpi/srate); +k2 = k*k; +k22 = 2*k2; +wck2 = 2*wc*k; +tmpk = (k2+wc2+wck2); +tgt_b1_s0 = (-k22+wc22)/tmpk; +tgt_b2_s0 = (-wck2+k2+wc2)/tmpk; +//--------------- +// low-pass (s0) +//--------------- +tgt_a0_s0_lp = (wc2)/tmpk; +tgt_a1_s0_lp = (wc22)/tmpk; +tgt_a2_s0_lp = (wc2)/tmpk; +//---------------- +// high-pass (s0) +//---------------- +tgt_a0_s0_hp = (k2)/tmpk; +tgt_a1_s0_hp = (-k22)/tmpk; +tgt_a2_s0_hp = (k2)/tmpk; + +//============================================================================== +@sample +//============================================================================== +//------------------------------------------------------------------------------ +// mono +//------------------------------------------------------------------------------ +mono == 1 ? ( +//---------------------------------- +// s0, b +//---------------------------------- +b1_s0 += d_b1_s0; +b2_s0 += d_b2_s0; +//---------- +// s0, lp +//---------- +a0_s0_lp += d_a0_s0_lp; +a1_s0_lp += d_a1_s0_lp; +a2_s0_lp += d_a2_s0_lp; +s0_lp_l_in = (spl0+spl1)/2; +s0_lp_l_output = a0_s0_lp*s0_lp_l_in + s0_lp_l_xm0; +s0_lp_l_xm0 = a1_s0_lp*s0_lp_l_in - b1_s0*s0_lp_l_output + s0_lp_l_xm1; +s0_lp_l_xm1 = a2_s0_lp*s0_lp_l_in - b2_s0*s0_lp_l_output; +//---------- +// s0, hp +//---------- +a0_s0_hp += d_a0_s0_hp; +a1_s0_hp += d_a1_s0_hp; +a2_s0_hp += d_a2_s0_hp; +s0_hp_l_in = (spl0+spl1)/2; +s0_hp_l_output = a0_s0_hp*s0_hp_l_in + s0_hp_l_xm0; +s0_hp_l_xm0 = a1_s0_hp*s0_hp_l_in - b1_s0*s0_hp_l_output + s0_hp_l_xm1; +s0_hp_l_xm1 = a2_s0_hp*s0_hp_l_in - b2_s0*s0_hp_l_output; +s0_hp_l_output *= -1; +//---------------------------------- +// s1, b +//---------------------------------- +target == 0 ? ( +b1_s1 += d_b1_s1; +b2_s1 += d_b2_s1; +//---------- +// s1, lp +//---------- +a0_s1_lp += d_a0_s1_lp; +a1_s1_lp += d_a1_s1_lp; +a2_s1_lp += d_a2_s1_lp; +s1_lp_l_in = s0_hp_l_output; +s1_lp_l_output = a0_s1_lp*s1_lp_l_in + s1_lp_l_xm0; +s1_lp_l_xm0 = a1_s1_lp*s1_lp_l_in - b1_s1*s1_lp_l_output + s1_lp_l_xm1; +s1_lp_l_xm1 = a2_s1_lp*s1_lp_l_in - b2_s1*s1_lp_l_output; +//---------- +// s1, hp +//---------- +a0_s1_hp += d_a0_s1_hp; +a1_s1_hp += d_a1_s1_hp; +a2_s1_hp += d_a2_s1_hp; +s1_hp_l_in = s0_hp_l_output; +s1_hp_l_output = a0_s1_hp*s1_hp_l_in + s1_hp_l_xm0; +s1_hp_l_xm0 = a1_s1_hp*s1_hp_l_in - b1_s1*s1_hp_l_output + s1_hp_l_xm1; +s1_hp_l_xm1 = a2_s1_hp*s1_hp_l_in - b2_s1*s1_hp_l_output; +s1_hp_l_output *= -1; +//--------------------------- +// set process band (cband) +//--------------------------- +cband_l = s1_lp_l_output; +) : ( +cband_l = s0_hp_l_output; +); +//--------------------------- +// compressor +//--------------------------- +dtl = abs(cband_l); +(dtl > envl) ? envl = envl + att*(dtl - envl) : envl = envl*(1 - rel); +(envl > thr) ? (cgainl = 1+(rat*((envl/thr)-1)); g_reset = 0;) : (cgainl = 1; g_reset = 1); +(envl < e10) ? envl = 0; +//-------------------------- +// update gr meter +//-------------------------- +g_reset == 0 ? g_meter = 1/cgainl : g_meter = 1; + +//----------------------- +// monitor or sum bands +//----------------------- +monitor == 1 ? ( +outl = cband_l*outgain/cgainl+cdenorm; +) : ( +target == 0 ? ( +sum_l = s0_lp_l_output+cband_l/cgainl+s1_hp_l_output; +) : ( +sum_l = s0_lp_l_output+cband_l/cgainl; +); +outl = sum_l*outgain+cdenorm; +); + +//check clip +(outl < -1 || outl > 1) ? clip = 1; + +spl0 = spl1 = outl; + +//********** +// test output +// spl0 = spl1 = s1_lp_l_output; +//********** + + +//------------------------------------------------------------------------------ +// stereo +//------------------------------------------------------------------------------ +) : ( + +//---------------------------------- +// s0, b +//---------------------------------- +b1_s0 += d_b1_s0; +b2_s0 += d_b2_s0; +//---------- +// s0, lp +//---------- +a0_s0_lp += d_a0_s0_lp; +a1_s0_lp += d_a1_s0_lp; +a2_s0_lp += d_a2_s0_lp; +s0_lp_l_in = spl0; +s0_lp_l_output = a0_s0_lp*s0_lp_l_in + s0_lp_l_xm0; +s0_lp_l_xm0 = a1_s0_lp*s0_lp_l_in - b1_s0*s0_lp_l_output + s0_lp_l_xm1; +s0_lp_l_xm1 = a2_s0_lp*s0_lp_l_in - b2_s0*s0_lp_l_output; +s0_lp_r_in = spl1; +s0_lp_r_output = a0_s0_lp*s0_lp_r_in + s0_lp_r_xm0; +s0_lp_r_xm0 = a1_s0_lp*s0_lp_r_in - b1_s0*s0_lp_r_output + s0_lp_r_xm1; +s0_lp_r_xm1 = a2_s0_lp*s0_lp_r_in - b2_s0*s0_lp_r_output; +//---------- +// s0, hp +//---------- +a0_s0_hp += d_a0_s0_hp; +a1_s0_hp += d_a1_s0_hp; +a2_s0_hp += d_a2_s0_hp; +s0_hp_l_in = spl0; +s0_hp_l_output = a0_s0_hp*s0_hp_l_in + s0_hp_l_xm0; +s0_hp_l_xm0 = a1_s0_hp*s0_hp_l_in - b1_s0*s0_hp_l_output + s0_hp_l_xm1; +s0_hp_l_xm1 = a2_s0_hp*s0_hp_l_in - b2_s0*s0_hp_l_output; +s0_hp_l_output *= -1; +s0_hp_r_in = spl1; +s0_hp_r_output = a0_s0_hp*s0_hp_r_in + s0_hp_r_xm0; +s0_hp_r_xm0 = a1_s0_hp*s0_hp_r_in - b1_s0*s0_hp_r_output + s0_hp_r_xm1; +s0_hp_r_xm1 = a2_s0_hp*s0_hp_r_in - b2_s0*s0_hp_r_output; +s0_hp_r_output *= -1; +//---------------------------------- +// s1, b +//---------------------------------- +target == 0 ? ( +b1_s1 += d_b1_s1; +b2_s1 += d_b2_s1; +//---------- +// s1, lp +//---------- +a0_s1_lp += d_a0_s1_lp; +a1_s1_lp += d_a1_s1_lp; +a2_s1_lp += d_a2_s1_lp; +s1_lp_l_in = s0_hp_l_output; +s1_lp_l_output = a0_s1_lp*s1_lp_l_in + s1_lp_l_xm0; +s1_lp_l_xm0 = a1_s1_lp*s1_lp_l_in - b1_s1*s1_lp_l_output + s1_lp_l_xm1; +s1_lp_l_xm1 = a2_s1_lp*s1_lp_l_in - b2_s1*s1_lp_l_output; +s1_lp_r_in = s0_hp_r_output; +s1_lp_r_output = a0_s1_lp*s1_lp_r_in + s1_lp_r_xm0; +s1_lp_r_xm0 = a1_s1_lp*s1_lp_r_in - b1_s1*s1_lp_r_output + s1_lp_r_xm1; +s1_lp_r_xm1 = a2_s1_lp*s1_lp_r_in - b2_s1*s1_lp_r_output; +//---------- +// s1, hp +//---------- +a0_s1_hp += d_a0_s1_hp; +a1_s1_hp += d_a1_s1_hp; +a2_s1_hp += d_a2_s1_hp; +s1_hp_l_in = s0_hp_l_output; +s1_hp_l_output = a0_s1_hp*s1_hp_l_in + s1_hp_l_xm0; +s1_hp_l_xm0 = a1_s1_hp*s1_hp_l_in - b1_s1*s1_hp_l_output + s1_hp_l_xm1; +s1_hp_l_xm1 = a2_s1_hp*s1_hp_l_in - b2_s1*s1_hp_l_output; +s1_hp_l_output *= -1; +s1_hp_r_in = s0_hp_r_output; +s1_hp_r_output = a0_s1_hp*s1_hp_r_in + s1_hp_r_xm0; +s1_hp_r_xm0 = a1_s1_hp*s1_hp_r_in - b1_s1*s1_hp_r_output + s1_hp_r_xm1; +s1_hp_r_xm1 = a2_s1_hp*s1_hp_r_in - b2_s1*s1_hp_r_output; +s1_hp_r_output *= -1; +//--------------------------- +// set process band (cband) +//--------------------------- +cband_l = s1_lp_l_output; +cband_r = s1_lp_r_output; +) : ( +cband_l = s0_hp_l_output; +cband_r = s0_hp_r_output; +); +//--------------------------- +// compressor +//--------------------------- +dtl = abs(cband_l); +dtr = abs(cband_r); +dtr > dtl ? dtl = dtr; +(dtl > envl) ? envl = envl + att*(dtl - envl) : envl = envl*(1 - rel); +(envl > thr) ? (cgainl = 1+(rat*((envl/thr)-1)); g_reset = 0;) : (cgainl = 1; g_reset = 1); +(envl < e10) ? envl = 0; + +dtr = abs(cband_r); +//-------------------------- +// update gr meter +//-------------------------- +g_reset == 0 ? ( +(cgainl > cgainr) ? g_meter = 1/cgainl : g_meter = 1/cgainr; +) : ( +g_meter = 1; +); + +//----------------------- +// monitor or sum bands +//----------------------- +monitor == 1 ? ( +outl = cband_l*outgain/cgainl+cdenorm; +outr = cband_r*outgain/cgainl+cdenorm; +) : ( +target == 0 ? ( +sum_l = s0_lp_l_output+cband_l/cgainl+s1_hp_l_output; +sum_r = s0_lp_r_output+cband_r/cgainl+s1_hp_r_output; +) : ( +sum_l = s0_lp_l_output+cband_l/cgainl; +sum_r = s0_lp_r_output+cband_r/cgainl; +); +outl = sum_l*outgain+cdenorm; +outr = sum_r*outgain+cdenorm; +); + +//check clip +(outl < -1 || outl > 1) ? clip = 1; +(outr < -1 || outr > 1) ? clip = 1; + +spl0 = outl; +spl1 = outr; + +); + +//********** +// test output +// spl0 = spl1 = s1_lp_l_output; +//********** + +//----------------------------------------- +// meter decay +//----------------------------------------- +g_meter < gr_meter ? gr_meter=g_meter : gr_meter*=gr_meter_decay; + +@block +//----------------------------------------- +// update clip indicator +//----------------------------------------- +bps = srate/samplesblock; +n > bps ? ( +clip = 0; +n = 0; +); +n += 1; +//============================================================================== +// interpolate *all* coefficients here +//============================================================================== +//------------------------------------------------------------------------------ +// s0 +//------------------------------------------------------------------------------ +//------------------- +// s0 b +//------------------- +d_b1_s0 = (tgt_b1_s0-src_b1_s0)/samplesblock; +b1_s0 = src_b1_s0; +src_b1_s0 = tgt_b1_s0; +d_b2_s0 = (tgt_b2_s0-src_b2_s0)/samplesblock; +b2_s0 = src_b2_s0; +src_b2_s0 = tgt_b2_s0; +//------------------- +// s0 a lp +//------------------- +d_a0_s0_lp = (tgt_a0_s0_lp-src_a0_s0_lp)/samplesblock; +a0_s0_lp = src_a0_s0_lp; +src_a0_s0_lp = tgt_a0_s0_lp; +d_a1_s0_lp = (tgt_a1_s0_lp-src_a1_s0_lp)/samplesblock; +a1_s0_lp = src_a1_s0_lp; +src_a1_s0_lp = tgt_a1_s0_lp; +d_a2_s0_lp = (tgt_a2_s0_lp-src_a2_s0_lp)/samplesblock; +a2_s0_lp = src_a2_s0_lp; +src_a2_s0_lp = tgt_a2_s0_lp; +//------------------- +// s0 a hp +//------------------- +d_a0_s0_hp = (tgt_a0_s0_hp-src_a0_s0_hp)/samplesblock; +a0_s0_hp = src_a0_s0_hp; +src_a0_s0_hp = tgt_a0_s0_hp; +d_a1_s0_hp = (tgt_a1_s0_hp-src_a1_s0_hp)/samplesblock; +a1_s0_hp = src_a1_s0_hp; +src_a1_s0_hp = tgt_a1_s0_hp; +d_a2_s0_hp = (tgt_a2_s0_hp-src_a2_s0_hp)/samplesblock; +a2_s0_hp = src_a2_s0_hp; +src_a2_s0_hp = tgt_a2_s0_hp; +//------------------------------------------------------------------------------ +// s1 +//------------------------------------------------------------------------------ +target == 0 ? ( +//------------------- +// s1 b +//------------------- +d_b1_s1 = (tgt_b1_s1-src_b1_s1)/samplesblock; +b1_s1 = src_b1_s1; +src_b1_s1 = tgt_b1_s1; +d_b2_s1 = (tgt_b2_s1-src_b2_s1)/samplesblock; +b2_s1 = src_b2_s1; +src_b2_s1 = tgt_b2_s1; + +//------------------- +// s1 a lp +//------------------- +d_a0_s1_lp = (tgt_a0_s1_lp-src_a0_s1_lp)/samplesblock; +a0_s1_lp = src_a0_s1_lp; +src_a0_s1_lp = tgt_a0_s1_lp; +d_a1_s1_lp = (tgt_a1_s1_lp-src_a1_s1_lp)/samplesblock; +a1_s1_lp = src_a1_s1_lp; +src_a1_s1_lp = tgt_a1_s1_lp; +d_a2_s1_lp = (tgt_a2_s1_lp-src_a2_s1_lp)/samplesblock; +a2_s1_lp = src_a2_s1_lp; +src_a2_s1_lp = tgt_a2_s1_lp; + +//------------------- +// s1 a hp +//------------------- +d_a0_s1_hp = (tgt_a0_s1_hp-src_a0_s1_hp)/samplesblock; +a0_s1_hp = src_a0_s1_hp; +src_a0_s1_hp = tgt_a0_s1_hp; +d_a1_s1_hp = (tgt_a1_s1_hp-src_a1_s1_hp)/samplesblock; +a1_s1_hp = src_a1_s1_hp; +src_a1_s1_hp = tgt_a1_s1_hp; +d_a2_s1_hp = (tgt_a2_s1_hp-src_a2_s1_hp)/samplesblock; +a2_s1_hp = src_a2_s1_hp; +src_a2_s1_hp = tgt_a2_s1_hp; + +); + +//============================================================================= +@gfx 425 18 +//============================================================================= +//--------------------------------- +// set gr meter +//--------------------------------- +gr_meter *= exp(1/30); +gr_meter > 1 ? gr_meter=1; +gfx_r=0.6; +gfx_g=0.4; +gfx_b=0.5; +gfx_a=0.8; +meter_bot=20; +meter_h=min(gfx_h,21); +xscale=gfx_w*20/meter_bot; +gfx_y=0; +gfx_x=gfx_w + log10(gr_meter)*xscale; +gfx_rectto(gfx_w,meter_h); +//--------------------------------- +// draw scale +//--------------------------------- +gfx_r=1; +gfx_b=1; +gfx_g=1; +gfx_a=0.6; +g = s2; +while( +gfx_x=gfx_w + log10(g)*xscale; +gfx_x >= 0 ? ( +gfx_y=0; +gfx_lineto(gfx_x,meter_h-1,0); +gfx_y=meter_h-gfx_texth-5; +gfx_x+=4; +gfx_drawnumber(log10(g)*20,0); +gfx_drawchar($'d'); +gfx_drawchar($'B'); +); +g*=s2; +gfx_x >=0; +); +gfx_x=0; +gfx_y=meter_h; +gfx_lineto(gfx_w,meter_h,0); +gfx_a=0.9; +gfx_x=gfx_w - 61; +gfx_y=meter_h + gfx_texth - 1; + +//--------------------------------- +// clip indicator +//--------------------------------- +gfx_x=8; +gfx_y=6; +gfx_r=1; +gfx_g=0; +gfx_b=0; +clip == 1 ? ( +gfx_a = 1; +) : ( +gfx_a = 0.4; +); +gfx_drawchar($'*'); diff --git a/Effects/Liteon/lorenzattractor b/Effects/Liteon/lorenzattractor new file mode 100644 index 0000000..0815196 --- /dev/null +++ b/Effects/Liteon/lorenzattractor @@ -0,0 +1,127 @@ +// (C) 2008-2009, Lubomir I. Ivanov + +// NO WARRANTY IS GRANTED. THIS PLUG-IN IS PROVIDED ON AN "AS IS" BASIS, WITHOUT +// WARRANTY OF ANY KIND. NO LIABILITY IS GRANTED, INCLUDING, BUT NOT LIMITED TO, +// ANY DIRECT OR INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGE ARISING +// OUT OF THE USE OR INABILITY TO USE THIS PLUG-IN, COMPUTER FAILTURE OF +// MALFUNCTION INCLUDED. THE USE OF THE SOURCE CODE, EITHER PARTIALLY OR IN +// TOTAL, IS ONLY GRANTED, IF USED IN THE SENSE OF THE AUTHOR'S INTENTION, AND +// USED WITH ACKNOWLEDGEMENT OF THE AUTHOR. FURTHERMORE IS THIS PLUG-IN A THIRD +// PARTY CONTRIBUTION, EVEN IF INCLUDED IN REAPER(TM), COCKOS INCORPORATED OR +// ITS AFFILIATES HAVE NOTHING TO DO WITH IT. LAST BUT NOT LEAST, BY USING THIS +// PLUG-IN YOU RELINQUISH YOUR CLAIM TO SUE IT'S AUTHOR, AS WELL AS THE CLAIM TO +// ENTRUST SOMEBODY ELSE WITH DOING SO. +// +// Released under GPL: +// . + +//****************************************************************************** +// References: +// Wikipedia, Google, Cockos +//****************************************************************************** + +desc: Lorenz Attractor +//tags: generator visualization +//author: Liteon + +slider1:3000<1,10000,1>Rate (Fast/Slow) +slider2:0<0,1,1{Lines,Dots}>Plot (OSC 1+2/1) +slider3:14<10,28,0.1>Prandtl Number +slider4:28<14,46,0.1>Rayleigh Number +slider5:0.5<0,1,0.01>Color (Mod Min/Max) +slider6:0<-4,4,0.1>Tune +slider7:0<-25,25,0.05>Gain (-inf/25dB) + +in_pin:none +out_pin:output (mono) +out_pin:output (mono) + +@init +gfx_clear = -1; +gfx_mode = 1; +n = j = 0; +x0 = 0.1; +y0 = 0; +z0 = 0; +itm1=itm2=otm1=otm2=0; + +@slider +f = 440; +t = slider6; + +axis = slider2; +slider7 == -25 ? ( +gain = 0; +) : ( +gain = 10^(slider7/20); +); +step = slider1; +green = slider5; +line = slider2; +h = 0.01; +a = slider3; +b = slider4; +c = 8.0 / 3.0; +old_a != a || old_b != b ?( +gfx_clear = 1; +); +old_a = a; +old_b = b; + +@sample +//di/dt +n = n+1; +n > step ? ( +n = 0; +x1 = x0 + h * a * (y0 - x0); +y1 = y0 + h * (x0 * (b - z0) - y0); +z1 = z0 + h * (x0 * y0 - c * z0); +x0 = x1; +y0 = y1; +z0 = z1; +); + +//osc +tone1 = sin(pos1); +slider2 == 0 ? ( +tone2 = (1-pos2/$pi)/2.5; +) : ( +tone2 = 0; +); + +out = (tone1+tone2)*z1/15; + +adj1 = 2.0*$pi*f*(2^(t))/srate; +adj1_1 = x1/700*(green); +adj2 = 2.0*$pi*f*(2^(t+1))/srate; +adj2_1 = y1/300*(green); + +pos1=pos1+adj1+adj1_1; +pos2=pos2+adj2+adj2_1; + +(pos1 >= 2.0*$pi) ? pos1 -= 2.0*$pi; +(pos2 >= 2.0*$pi) ? pos2 -= 2.0*$pi; +pos2 = max(pos2,-10); + +//limit +spl0=spl1=min(max(out/16*gain,-0.98),0.98); + +@gfx 600 600 +gfx_g=green; +gfx_b=y1-1; +size=z0/40; +gfx_r=size; +gfx_a=size+0.3; +gfx_x=x2; +gfx_y=y2; +line == 0 ? ( +gfx_lineto((x2+size*size*12),(y2+size*size*12),1); +) : ( +gfx_rectto(x2+4*size*size,y2+4*size*size); +); +gfx_blurto(x2+4,y2+4); +x2=(x1*15+gfx_w/2); +y2=(y1*15+gfx_h/2); +gfx_clear = -1; + + diff --git a/Effects/Liteon/moog24db b/Effects/Liteon/moog24db new file mode 100644 index 0000000..64d7d69 --- /dev/null +++ b/Effects/Liteon/moog24db @@ -0,0 +1,313 @@ +// (C) 2008-2009, Lubomir I. Ivanov + +// NO WARRANTY IS GRANTED. THIS PLUG-IN IS PROVIDED ON AN "AS IS" BASIS, WITHOUT +// WARRANTY OF ANY KIND. NO LIABILITY IS GRANTED, INCLUDING, BUT NOT LIMITED TO, +// ANY DIRECT OR INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGE ARISING +// OUT OF THE USE OR INABILITY TO USE THIS PLUG-IN, COMPUTER FAILTURE OF +// MALFUNCTION INCLUDED. THE USE OF THE SOURCE CODE, EITHER PARTIALLY OR IN +// TOTAL, IS ONLY GRANTED, IF USED IN THE SENSE OF THE AUTHOR'S INTENTION, AND +// USED WITH ACKNOWLEDGEMENT OF THE AUTHOR. FURTHERMORE IS THIS PLUG-IN A THIRD +// PARTY CONTRIBUTION, EVEN IF INCLUDED IN REAPER(TM), COCKOS INCORPORATED OR +// ITS AFFILIATES HAVE NOTHING TO DO WITH IT. LAST BUT NOT LEAST, BY USING THIS +// PLUG-IN YOU RELINQUISH YOUR CLAIM TO SUE IT'S AUTHOR, AS WELL AS THE CLAIM TO +// ENTRUST SOMEBODY ELSE WITH DOING SO. +// +// Released under GPL: +// . + +//****************************************************************************** +// References: +// Moog filter appromixation +// by CSound source code, Stilson/Smith CCRMA paper +// Distortion by Bram de Jong +//****************************************************************************** + +desc:Moog 4-Pole Filter +//tags: filter multimode +//author: Liteon + +slider1:0<0,1,1{Stereo,Mono}>Processing +slider2:0<0,2,1{LP,HP,BP}>Filter Type +slider3:100<0,100,0.05>Cutoff (Scale) +slider4:0<0,0.85,0.001>Resonance +slider5:0<0,100,0.05>Drive (%) +slider6:0<-25,25,0.05>Output (dB) +slider7:0<0,1,1{On,Off}>Limiter +slider8:0<0,1,1{Off,On}>Oversample (x2) + +in_pin:left input +in_pin:right input +out_pin:left output +out_pin:right output + +@init +cDenorm = 10^-30; +mv=2^(-0.2/6); +fs = srate; + +//fir restoration +c1 = 1; +c2 = -0.75; +c3 = 0.17; +fgain = 5; + +//fir bandlimit +bl_c1 = 0.52; +bl_c2 = 0.54; +bl_c3 = -0.02; + +@slider +os = slider8; +mono = slider1; +ftype = slider2; +res = slider4; +drive = 1+slider5/100; +drvc = 1.2; +outgain = 10^(slider6/20); +limiter = slider7; + +sx = 16+slider3*1.20103; +cutoff = floor(exp(sx*log(1.059))*8.17742); + +f = 2 * cutoff / fs; +tgt_k = 3.6*f-1.6*f*f-1; +tgt_p = (tgt_k+1)*0.5; +scale = 2.718281828459045^((1-tgt_p)*1.386249); +tgt_r = res*scale; + +@block +d_p = (tgt_p-src_p)/samplesblock; +tp = src_p; +src_p = tgt_p; +d_k = (tgt_k-src_k)/samplesblock; +tk = src_k; +src_k = tgt_k; +d_r = (tgt_r-src_r)/samplesblock; +tr = src_r; +src_r = tgt_r; + +@sample +tk += d_k; +tp += d_p; +tr += d_r; + +//stereo +mono == 0 ? ( + +//distortion +drive > 1 ? ( + +inl = spl0; +inr = spl1; + +os == 1 ? ( +//power series in +ps_out1l = 0.5*(inl+ps_out2l); +ps_out2l = 0.5*ps_out1l; +ps_out1r = 0.5*(inr+ps_out2r); +ps_out2r = 0.5*ps_out1r; + +//drive +o_in1l = ps_out1l*(abs(ps_out1l) + drive)/(ps_out1l^2 + (drive-1)*abs(ps_out1l) + 1)*(drive/drvc); +o_in2l = ps_out2l*(abs(ps_out2l) + drive)/(ps_out2l^2 + (drive-1)*abs(ps_out2l) + 1)*(drive/drvc); +o_in1r = ps_out1r*(abs(ps_out1r) + drive)/(ps_out1r^2 + (drive-1)*abs(ps_out1r) + 1)*(drive/drvc); +o_in2r = ps_out2r*(abs(ps_out2r) + drive)/(ps_out2r^2 + (drive-1)*abs(ps_out2r) + 1)*(drive/drvc); + +//--------------------------- +//bandlimit +bl3_l1 = bl2_l1; +bl3_r1 = bl2_r1; +bl3_l2 = bl2_l2; +bl3_r2 = bl2_r2; + +bl2_l1 = bl1_l1; +bl2_r1 = bl1_r1; +bl2_l2 = bl1_l2; +bl2_r2 = bl1_r2; + +bl1_l1 = o_in1l; +bl1_r1 = o_in1r; +bl1_l2 = o_in2l; +bl1_r2 = o_in2r; + +bl_out1l = (bl1_l1*bl_c1 + bl2_l1*bl_c2 + bl3_l1*bl_c3); +bl_out1r = (bl1_r1*bl_c1 + bl2_r1*bl_c2 + bl3_r1*bl_c3); +bl_out2l = (bl1_l2*bl_c1 + bl2_l2*bl_c2 + bl3_l2*bl_c3); +bl_out2r = (bl1_r2*bl_c1 + bl2_r2*bl_c2 + bl3_r2*bl_c3); + +//power series out +o_out1l = 0.5*(bl_out1l+o_out2l); +o_out2l = 0.5*(bl_out2l+o_out1l); +o_out1r = 0.5*(bl_out1r+o_out2r); +o_out2r = 0.5*(bl_out2r+o_out1r); + +//fir restoration +s3l = s2l; +s3r = s2r; +s2l = s1l; +s2r = s1r; +s1l = o_out1l; +s1r = o_out1r; + +inputl = (s1l*c1+s2l*c2+s3l*c3)*fgain; +inputr = (s1r*c1+s2r*c2+s3r*c3)*fgain; + +) : ( +inputl = inl*(abs(inl) + drive)/(inl^2 + (drive-1)*abs(inl) + 1)*(drive/drvc); +inputr = inr*(abs(inr) + drive)/(inr^2 + (drive-1)*abs(inr) + 1)*(drive/drvc); +); + +) : ( +inputl = spl0; +inputr = spl1; +); + +//filter +xl = inputl-tr*y4l; +xr = inputr-tr*y4r; + +y1l=xl*tp+oldxl*tp-tk*y1l; +y1r=xr*tp+oldxr*tp-tk*y1r; +y2l=y1l*tp+oldy1l*tp-tk*y2l; +y2r=y1r*tp+oldy1r*tp-tk*y2r; +y3l=y2l*tp+oldy2l*tp-tk*y3l; +y3r=y2r*tp+oldy2r*tp-tk*y3r; +y4l=y3l*tp+oldy3l*tp-tk*y4l; +y4r=y3r*tp+oldy3r*tp-tk*y4r; + +oldxl = xl; +oldxr = xr; +oldy1l = y1l; +oldy1r = y1r; +oldy2l = y2l; +oldy2r = y2r; +oldy3l = y3l; +oldy3r = y3r; + +ftype == 0 ? ( + outl = y4l; + outr = y4r; +); +ftype == 1 ? ( + outl = inputl-y4l; + outr = inputr-y4r; +); +ftype == 2 ? ( + outl = 6*(y3l-y4l); + outr = 6*(y3r-y4r); +); + +outl = outl*outgain; +outr = outr*outgain; + +//limiter +limiter == 0 ? ( + spl0 = min(max((outl+cDenorm),-mv),mv); + spl1 = min(max((outr+cDenorm),-mv),mv); +) : ( + spl0 = outl; + spl1 = outr; +); + +//mono +) : ( + +in = (spl0+spl1)/2; + +//distortion +drive > 1 ? ( + +os == 1 ? ( + +//power series in +ps_out1l = 0.5*(in+ps_out2l); +ps_out2l = 0.5*ps_out1l; + +//drive +o_in1l = ps_out1l*(abs(ps_out1l) + drive)/(ps_out1l^2 + (drive-1)*abs(ps_out1l) + 1)*(drive/drvc); +o_in2l = ps_out2l*(abs(ps_out2l) + drive)/(ps_out2l^2 + (drive-1)*abs(ps_out2l) + 1)*(drive/drvc); + +//--------------------------- +//bandlimit +bl3_1 = bl2_1; +bl3_2 = bl2_2; + +bl2_1 = bl1_1; +bl2_2 = bl1_2; + +bl1_1 = o_in1l; +bl1_2 = o_in12; + +bl_out1 = (bl1_1*bl_c1 + bl2_1*bl_c2 + bl3_1*bl_c3); +bl_out2 = (bl1_2*bl_c1 + bl2_2*bl_c2 + bl3_2*bl_c3); + +//power series out +o_out1l = 0.5*(bl_out1+o_out2l); +o_out2l = 0.5*(bl_out2+o_out1l); + +//fir restoration +s3l = s2l; +s2l = s1l; +s1l = o_out1l; + +input = (s1l*c1+s2l*c2+s3l*c3)*fgain; + +) : ( + +input = in*(abs(in) + drive)/(in^2 + (drive-1)*abs(in) + 1)*(drive/drvc); + +); + +) : ( +input = in; +); + +//filter +x = input-tr*y4; + +y1=x*tp+oldx*tp-tk*y1; +y2=y1*tp+oldy1*tp-tk*y2; +y3=y2*tp+oldy2*tp-tk*y3; +y4=y3*tp+oldy3*tp-tk*y4; + +oldx = x; +oldy1 = y1; +oldy2 = y2; +oldy3 = y3; + +ftype == 0 ? ( + out = y4; +); +ftype == 1 ? ( + out = input-y4; +); +ftype == 2 ? ( + out = 6*(y3-y4); +); + +out = out*outgain; + +//limiter +limiter == 0 ? ( + spl0 = min(max((out+cDenorm),-mv),mv); + spl1 = min(max((out+cDenorm),-mv),mv); +) : ( + spl0 = out; + spl1 = out; +); + +); + +@gfx 100 16 +gfx_x=gfx_y=5; +gfx_lineto(gfx_x, gfx_y,0); +gfx_r=gfx_b=0; +gfx_g=gfx_a=1; +gfx_drawchar($'F'); +gfx_drawchar($' '); +gfx_drawchar($'='); +gfx_drawchar($' '); +gfx_drawnumber(cutoff,0); +gfx_drawchar($' '); +gfx_drawchar($'H'); +gfx_drawchar($'z'); diff --git a/Effects/Liteon/nonlinear b/Effects/Liteon/nonlinear new file mode 100644 index 0000000..5cf5cc3 --- /dev/null +++ b/Effects/Liteon/nonlinear @@ -0,0 +1,237 @@ +// (C) 2009, Lubomir I. Ivanov +// +// NO WARRANTY IS GRANTED. THIS PLUG-IN IS PROVIDED ON AN "AS IS" BASIS, WITHOUT +// WARRANTY OF ANY KIND. NO LIABILITY IS GRANTED, INCLUDING, BUT NOT LIMITED TO, +// ANY DIRECT OR INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGE ARISING +// OUT OF THE USE OR INABILITY TO USE THIS PLUG-IN, COMPUTER FAILTURE OF +// MALFUNCTION INCLUDED. THE USE OF THE SOURCE CODE, EITHER PARTIALLY OR IN +// TOTAL, IS ONLY GRANTED, IF USED IN THE SENSE OF THE AUTHOR'S INTENTION, AND +// USED WITH ACKNOWLEDGEMENT OF THE AUTHOR. FURTHERMORE IS THIS PLUG-IN A THIRD +// PARTY CONTRIBUTION, EVEN IF INCLUDED IN REAPER(TM), COCKOS INCORPORATED OR +// ITS AFFILIATES HAVE NOTHING TO DO WITH IT. LAST BUT NOT LEAST, BY USING THIS +// PLUG-IN YOU RELINQUISH YOUR CLAIM TO SUE IT'S AUTHOR, AS WELL AS THE CLAIM TO +// ENTRUST SOMEBODY ELSE WITH DOING SO. +// +// Released under GPL: +// . +// +// ***************************************************************************** +// Non-linear processor, which attempts 'dynamic' modeling of fluctuations +// and frequency response of basic electronic circuit. +// ***************************************************************************** + +desc: Non-Linear Processor +//tags: processing gain distortion +//author: Liteon + +slider1:30<0,100,0.01>Saturation Amount (%) +slider2:50<0,100,0.01>Fluctuation Amount (%) +slider3:16<0,32,1>Noise Floor At (Bits) +slider4:0<-24,24,0.01>Output (dB) + +in_pin:left input +in_pin:right input +out_pin:left output +out_pin:right output + +//============================================================================== +@init +//============================================================================== +//set limits +n = 100000; +n2 = 2*n; +n3 = 3*n; +n4 = 4*n; + +//push ar0 +i = 0; +loop(n, +m[i] = (rand(2)-1); +i += 1; +); + +//push ar1 +i = n; +loop(n, +m[i] = (rand(2)-1); +i += 1; +); + +//push ar2 +i = 2*n; +loop(n, +m[i] = (rand(2)-1); +i += 1; +); + +//push ar3 +i = 3*n; +loop(n, +m[i] = (rand(2)-1); +i += 1; +); + +//sys vars +pi = 3.1415926535897932384626433832795; +sr = srate; + +//lp coeff +lpk0 = 0.121; +lpk1 = -0.56; + +//hp coeff +// - at 30Hz +hpk1 = exp(-188.49555921538759430775860299677/sr); +hpk0 = 1 - hpk1; + +//nf coeff +// - at 2000Hz +nfk1 = exp(-12566.370614359172953850573533118/sr); +nfk0 = 1 - nfk1; + +//ls coeff +// - at 300Hz +lsk0 = exp(-1884.9555921538759430775860299677/sr); +lsk1 = 1 - lsk0; + +//begin +pdc_delay = 2; +pdc_bot_ch = 0; +pdc_top_ch = 2; +i = 0; + +//============================================================================== +@slider +//============================================================================== +//drive +drv = slider1/200+0.001; +pidrv = pi*drv; +sinpidrv = 1/sin(pidrv); + +//ranges +r1 = slider2/300; +r2 = 1/2^slider3; + +//outgain +outgain = 10^(slider4/20); + +//============================================================================== +@block +//============================================================================== +//average amplitude +avs = (s0+s1)/2; + +//interpolate ar2 values +tgt_min2 = avs*m[i+2*n]*r1; +d_min2 = (tgt_min2-src_min2)/samplesblock; +min2 = src_min2; +src_min2 = tgt_min2; + +//interpolate ar3 values +tgt_min3 = avs*m[i+3*n]*r1; +d_min3 = (tgt_min3-src_min3)/samplesblock; +min3 = src_min3; +src_min3 = tgt_min3; + +//average for gfx +min_av = (tgt_min2+tgt_min3)/2; + +//============================================================================== +@sample +//============================================================================== +s0 = spl0; +s1 = spl1; + +//seeds +min0 = m[i]*r2; +min1 = m[i+n]*r2; +min2 += d_min2; +min3 += d_min3; +min2s = min2*0.05; +min3s = min3*0.05; +min2h = min2*0.005; +min3h = min3*0.005; +min2d = min2*5; +min3d = min3*5; + +//floor reduction & waveshaper +(s0 && s1) == 0 ? ( + wsoutl = s0; + wsoutr = s1; +) : ( + //fr + nfout0 = nfk0*min0 + nfk1*nfout0; + nfout1 = nfk0*min1 + nfk1*nfout1; + inl = spl0 + nfout0; + inr = spl1 + nfout1; + + //waveshaper + wsoutl = sin(pidrv*inl)*(sinpidrv+min2d); + wsoutr = sin(pidrv*inr)*(sinpidrv+min3d); +); + +//lp +fs2l = fs1l; +fs1l = fs0l; +fs0l = wsoutl; +lpoutl = (lpk0-min2)*fs0l + (lpk1+min3)*(fs1l+fs2l); +fs2r = fs1r; +fs1r = fs0r; +fs0r = wsoutr; +lpoutr = (lpk0-min3)*fs0r + (lpk1+min2)*(fs1r+fs2r); + +//ls +ls0l = (lsk1-min2s)*lpoutl + (lsk0+min3s)*ls0l; +ls0r = (lsk1-min3s)*lpoutr + (lsk0+min2s)*ls0r; +lsoutl = lpoutl + ls0l*0.25; +lsoutr = lpoutr + ls0r*0.25; + +//hp +hptmpl = (hpk0+min2h)*lsoutl + (hpk1-min3h)*hptmpl; +hptmpr = (hpk0+min3h)*lsoutr + (hpk1-min2h)*hptmpr; +fxoutl = lsoutl - hptmpl; +fxoutr = lsoutr - hptmpr; + +//counter +i += 1; +i > n ? i = 0; + +//output +spl0 = fxoutl*outgain; +spl1 = fxoutr*outgain; + +//============================================================================== +@gfx 100 64 +//============================================================================== +//draw color block +pd = 5; +gfx_x=gfx_y=pd; +gfx_a=0; +gfx_b=drv*2; +gfx_r=0.1+r1; +gfx_g=1.2-slider3/32; +gfx_a=0.9+1.5*min_av; +gfx_rectto(gfx_w-pd,gfx_h-pd); +gfx_a = 1; +gfx_r=gfx_g=gfx_b=0; + +//vertical lines +vl = slider3; +vln=0; +loop(vl, +gfx_y = 0; +gfx_x = gfx_w/vl*vln; +gfx_lineto(gfx_x,gfx_h,1); +vln+=1; +); + +//shades +gfx_a = 0.2; +gfx_x=pd; +gfx_y=pd; +gfx_rectto(gfx_w,gfx_h/3); +gfx_x=pd; +gfx_y=gfx_h-pd; +gfx_r=gfx_g=gfx_b=1; +gfx_a = 0.2; +gfx_rectto(gfx_w,gfx_h-gfx_h/3); diff --git a/Effects/Liteon/np1136peaklimiter b/Effects/Liteon/np1136peaklimiter new file mode 100644 index 0000000..0a322db --- /dev/null +++ b/Effects/Liteon/np1136peaklimiter @@ -0,0 +1,577 @@ +// (C) 2009, Lubomir I. Ivanov +// +// NO WARRANTY IS GRANTED. THIS PLUG-IN IS PROVIDED ON AN "AS IS" BASIS, WITHOUT +// WARRANTY OF ANY KIND. NO LIABILITY IS GRANTED, INCLUDING, BUT NOT LIMITED TO, +// ANY DIRECT OR INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGE ARISING +// OUT OF THE USE OR INABILITY TO USE THIS PLUG-IN, COMPUTER FAILTURE OF +// MALFUNCTION INCLUDED. THE USE OF THE SOURCE CODE, EITHER PARTIALLY OR IN +// TOTAL, IS ONLY GRANTED, IF USED IN THE SENSE OF THE AUTHOR'S INTENTION, AND +// USED WITH ACKNOWLEDGEMENT OF THE AUTHOR. FURTHERMORE IS THIS PLUG-IN A THIRD +// PARTY CONTRIBUTION, EVEN IF INCLUDED IN REAPER(TM), COCKOS INCORPORATED OR +// ITS AFFILIATES HAVE NOTHING TO DO WITH IT. LAST BUT NOT LEAST, BY USING THIS +// PLUG-IN YOU RELINQUISH YOUR CLAIM TO SUE IT'S AUTHOR, AS WELL AS THE CLAIM TO +// ENTRUST SOMEBODY ELSE WITH DOING SO. +// +// Released under GPL: +// . +// +// ***************************************************************************** +// NP1136 - Program dependent Peak Limiter. +// +// The effect borrows ideas / functionality from some commercial +// software / hardware products. +// Uses code from Paul Kellet (mda) for the compressor envelopes and from +// Michale Gruhn (loser) for the GR meter - Thanks goes to them. +// Also to Chritian W. Budde for his VST Plugin Analyzer. +// +// Use it wisely and with moderation. +// ***************************************************************************** +// +// REDISTRIBUTION AND MODIFICATIONS PERMITED ONLY WHILE PROVIDING +// FULL CREDIT TO THE ORIGINAL AUTHORS AND INCLUDING THE ABOVE LINES OF TEXT. + +//============================================================================= +desc: NP1136 Peak Limiter +//tags: limiter dynamics +//author: Liteon + +//============================================================================= +slider1:-12<-40,0,0.01>Threshold (dB) +slider2:4<1,20,0.01>Ratio (20:1 - PD Mode) +slider3:30<0,100,0.01>Attack (s) +slider4:45<0,100,0.01>Release (ms) +slider5:0<0,100,0.01>Detector HP (Hz) +slider6:-18<-40,0,0.01>GR Limit (dB) +slider7:0<0,30,0.01>Makeup Gain (dB) +slider8:50<0,100,0.01>Tilt EQ Center (Hz) +slider9:0<-6,6,0.01>Tilt EQ Low/High (dB) +slider10:100<0,100,0.01>Wet Mix (%) +slider11:0<0,1,1{Stereo,Mono}>Processing Mode +slider12:1<0,1,1{Stereo,Mono}>Detector Mode +slider13:0<0,1,1{Normal (1+2),Sidechain (3+4)}>Detector Input +slider14:0<0,1,1{Off,On}>Hard Clip + +in_pin:left input +in_pin:right input +in_pin:sidechain left input +in_pin:sidechain right input +out_pin:left output +out_pin:right output + +//============================================================================= +@init +//============================================================================= +br = 0; +clip = 0; +tlt_gain = 0; +amp = 6/log(2); +sr3 = 3*srate; +gfactor = 4; +n = 0; +g_reset = 1; +e10 = 10^-10; +cdenorm = 10^-30; +mv = 2^(-0.2/6); +g_meter = gr_meter = 1; +gr_meter_decay = exp(1/(1*srate)); +sqrt2 = sqrt(2); +s2 = sqrt2/2; + +//============================================================================= +@slider +//============================================================================= +//----------------------------------------- +// detector hp (12db/oct) +//----------------------------------------- +sx = 16 + slider5*1.20103; +cutoff = floor(exp(sx*log(1.059))*8.17742); +cx = 2*cutoff/srate; +cpi = $pi*cx; +fk = 0.67*sin(cpi); +c1 = 0.5*(1 - fk)/(1 + fk); +c2 = (0.5 + c1)*cos(cpi); +c3 = (0.5 + c1 + c2)*0.25; + hpa0 = 2*c3; +hpa1 = -4*c3; +hpa2 = 2*c3; +hpb1 = -2*c2; +hpb2 = 2*c1; + +//----------------------------------------- +// compressor +//----------------------------------------- +thr = pow(10, 2 * (slider1/40+1) - 2); +rat = (slider2-1)/19; +att = pow(10, -0.002 - 3.97772619*(slider3/100)); +rel = pow(10, -3.11 - 1.8698*(slider4/100)); +ascale = -301030.1 / (srate * log10(1 - att)); +rscale = -301.0301 / (srate * log10(1 - rel)); + +//----------------------------------------- +// tilt filter +//----------------------------------------- +tlt_gain = slider9; +//conditition +tlt_gain > 0 ? ( + g1 = -gfactor*tlt_gain; + g2 = tlt_gain; +) : ( + g1 = -tlt_gain; + g2 = gfactor*tlt_gain; +); +//two separate gains +lgain = exp(g1/amp)-1; +hgain = exp(g2/amp)-1; +//f0 +sx = 16+slider8*1.20103; +tf = floor(exp(sx*log(1.059))*8.17742); +//filter +tomega = 2*$pi*tf; +tn = 1/(sr3 + tomega); +tgt_ta0 = 2*tomega*tn; +tgt_tb1 = (sr3 - tomega)*tn; + +//----------------------------------------- +// mix +//----------------------------------------- +slider6 == -40 ? grlimit = 10^(-6*64/20) : grlimit = 10^((slider6-0.3)/20); +outgain = 10^(slider7/20); +mix = (100-slider10)/100; +mono = slider11; +link = slider12; +sidechain = slider13; +hardclip = slider14; + +//============================================================================= +@sample +//============================================================================= +//----------------------------------------- +// detector input - sidechain +//----------------------------------------- +sidechain == 0 ? ( +det_inl = spl0; +det_inr = spl1; +) : ( +det_inl = spl2; +det_inr = spl3; +); +//========================================= +// +// detector mono +// +//========================================= +(link == 1) ? ( +det_inl = (det_inl+det_inr)/2; +//----------------------------------------- +// detector hp filter +//----------------------------------------- +cutoff > 20 ? ( +inl = hpa0*det_inl + hpa1*meml1 + hpa2*meml2 - hpb1*meml3 - hpb2*meml4; +meml2 = meml1; +meml1 = det_inl; +meml4 = meml3; +meml3 = inl; + +dtl = abs(inl); +dtr = dtl; +) : ( +//----------------------------------------- +// detector no filter +//----------------------------------------- +dtl = abs(det_inl); +dtr = dtl; +); + +//----------------------------------------- +// program dependency (british mode) +//----------------------------------------- +rat == 1 ? ( +//interpolate envelopes +pdattl += d_pdattl; +pdrell += d_pdrell; +pdratl += d_pdratl; +) : ( +pdattl = att; +pdrell = rel; +pdratl = rat; +); + +//-------------------------- +// envelope +//-------------------------- +(dtr > dtl) ? dtl = dtr; +(dtl > envl) ? envl = envl + pdattl*(dtl - envl) : envl = envl*(1 - pdrell); +(envl > thr) ? (cgainl = min(1+(pdratl*((envl/thr)-1)), 1/grlimit); g_reset = 0;) : (cgainl = 1; g_reset = 1); +(envl < e10) ? envl = 0; + +//-------------------------- +// update gr meter +//-------------------------- +g_reset == 0 ? g_meter = max(1/cgainl,grlimit) : g_meter = 1; +cgainr = cgainl; + +) : ( +//========================================= +// +// detector stereo +// +//========================================= +//----------------------------------------- +// detector hp filter +//----------------------------------------- +cutoff > 20 ? ( +inl = hpa0*det_inl + hpa1*meml1 + hpa2*meml2 - hpb1*meml3 - hpb2*meml4; +meml2 = meml1; +meml1 = det_inl; +meml4 = meml3; +meml3 = inl; +inr = hpa0*det_inr + hpa1*memr1 + hpa2*memr2 - hpb1*memr3 - hpb2*memr4; +memr2 = memr1; +memr1 = det_inr; +memr4 = memr3; +memr3 = inr; +//abs +dtl = abs(inl); +dtr = abs(inr); +) : ( +//----------------------------------------- +// detector no filter +//----------------------------------------- +dtl = abs(det_inl); +dtr = abs(det_inr); +); + +//------------------------------------ +// program dependency (british mode) +//------------------------------------ +rat == 1 ? ( +//interpolate envelopes +pdattl += d_pdattl; +pdattr += d_pdattr; +pdrell += d_pdrell; +pdrelr += d_pdrelr; +pdratl += d_pdratl; +pdratr += d_pdratr; +) : ( +pdattl = pdattr = att; +pdrell = pdrelr = rel; +pdratl = pdratr = rat; +); +//-------------------------- +// envelope +//-------------------------- +(dtl > envl) ? envl = envl + pdattl*(dtl - envl) : envl = envl*(1 - pdrell); +(envl > thr) ? (cgainl = min(1+(pdratl*((envl/thr)-1)), 1/grlimit); g_reset = 0;) : (cgainl = 1; g_reset = 1); +(envl < e10) ? envl = 0; + +(dtr > envr) ? envr = envr + pdattr*(dtr - envr) : envr = envr*(1 - pdrelr); +(envr > thr) ? (cgainr = min(1+(pdratr*((envr/thr)-1)), 1/grlimit); g_reset = 0;) : (cgainr = 1; g_reset = 1); +(envr < e10) ? envr = 0; + +//-------------------------- +// update gr meter +//-------------------------- +g_reset == 0 ? ( +(cgainl > cgainr) ? g_meter = max(1/cgainl, grlimit) : g_meter = max(1/cgainr, grlimit); +) : ( +g_meter = 1; +); + +); +//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> end detector stage + +//-------------------------- +// apply gains +//-------------------------- +coutl = spl0*outgain/cgainl; +coutr = spl1*outgain/cgainr; + +//--------------------------------- +//interpolate tilt coefficients +//--------------------------------- +ta0 += d_ta0; +tb1 += d_tb1; + +mono == 1 ? ( +//========================================= +// +// process mono out +// +//========================================= +//--------------------------------- +// tilt filter +//--------------------------------- +tlt_gain != 0 ? ( +tinput = coutl; +lp_out = ta0*tinput + tb1*lp_out; +toutl = tinput + lgain*lp_out + hgain*(tinput - lp_out); +) : ( +toutl = coutl; +); + +//--------------------------------- +// mix +//--------------------------------- +outl = mix*spl0 + (1-mix)*toutl; + +//--------------------------------- +// hardclip +//--------------------------------- +(outl < -1 || outl > 1) ? clip = 1; +hardclip == 1 ? ( + spl0 = min(max((outl+cdenorm),-mv),mv); + spl1 = spl0; +) : ( + spl0 = outl+cdenorm; + spl1 = spl0; +); + +) : ( +//========================================= +// +// process stereo out +// +//========================================= +//--------------------------------- +// tilt filter +//--------------------------------- +tlt_gain != 0 ? ( +tinput = coutl; +lp_out = ta0*tinput + tb1*lp_out; +toutl = tinput + lgain*lp_out + hgain*(tinput - lp_out); +tinput_r = coutr; +lp_out_r = ta0*tinput_r + tb1*lp_out_r; +toutr = tinput_r + lgain*lp_out_r + hgain*(tinput_r - lp_out_r); +) : ( +toutl = coutl; +toutr = coutr; +); +//--------------------------------- +// mix +//--------------------------------- +outl = mix*spl0 + (1-mix)*toutl; +outr = mix*spl1 + (1-mix)*toutr; +//--------------------------------- +// hardclip +//--------------------------------- +(outl < -1 || outl > 1) ? clip = 1; +(outr < -1 || outr > 1) ? clip = 1; +hardclip == 1 ? ( + spl0 = min(max((outl+cdenorm),-mv),mv); + spl1 = min(max((outr+cdenorm),-mv),mv); +) : ( + spl0 = outl+cdenorm; + spl1 = outr+cdenorm; +); + +//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> end output stage +); + +//*** test (scope variables) +// +//spl0 = spl1 = pdrell*900; +//spl0 = spl1 = rel; +//spl0 = spl1 = pdratl; +// +//*** + +//----------------------------------------- +// meter decay +//----------------------------------------- +g_meter < gr_meter ? gr_meter=g_meter : gr_meter*=gr_meter_decay; + +//============================================================================= +@block +//============================================================================= +//----------------------------------------- +// update clip indicator +//----------------------------------------- +bps = srate/samplesblock; +n > bps ? ( +clip = 0; +n = 0; +); +n += 1; + + +//----------------------------------------- +// interpolate tilt filter coeffcients +//----------------------------------------- +tlt_gain != 0 ? ( +d_ta0 = (tgt_ta0-src_ta0)/samplesblock; +ta0 = src_ta0; +src_ta0 = tgt_ta0; +d_tb1 = (tgt_tb1-src_tb1)/samplesblock; +tb1 = src_tb1; +src_tb1 = tgt_tb1; +); + +//----------------------------------------------- +// interpolate ratio, attack, release (PD mode) +//----------------------------------------------- +rat == 1 ? ( +//att +tgt_pdattl = min(att*0.95+att*dtl*7,0.995405); +d_pdattl = (tgt_pdattl-src_pdattl)/samplesblock; +pdattl = src_pdattl; +src_pdattl = tgt_pdattl; +tgt_pdattr = min(att*0.95+att*dtr*7,0.995405); +d_pdattr = (tgt_pdattr-src_pdattr)/samplesblock; +pdattr = src_pdattr; +src_pdattr = tgt_pdattr; +//rel +tgt_pdrell = min(rel*0.9+rel*dtl*4,0.00077625); +d_pdrell = (tgt_pdrell-src_pdrell)/samplesblock; +pdrell = src_pdrell; +src_pdrell = tgt_pdrell; +tgt_pdrelr = min(rel*0.9+rel*dtr*4,0.00077625); +d_pdrelr = (tgt_pdrelr-src_pdrelr)/samplesblock; +pdrelr = src_pdrelr; +src_pdrelr = tgt_pdrelr; +//rat +tgt_pdratl = max(rat-dtl*2,0.57); +d_pdratl = (tgt_pdratl-src_pdratl)/samplesblock; +pdratl = src_pdratl; +src_pdratl = tgt_pdratl; +tgt_pdratr = max(rat-dtr*2,0.57); +d_pdratr = (tgt_pdratr-src_pdratr)/samplesblock; +pdratr = src_pdratr; +src_pdratr = tgt_pdratr; +) : ( +tgt_pdattl = tgt_pdattr = att; +tgt_pdrell = tgt_pdrelr = rel; +tgt_pdratl = tgt_pdratr = rat; +); + +//============================================================================= +@gfx 425 40 +//============================================================================= +//--------------------------------- +// set gr meter +//--------------------------------- +gr_meter *= exp(1/30); +gr_meter > 1 ? gr_meter=1; +gfx_r=0; +gfx_g=0.3; +gfx_b=0.8; +gfx_a=0.8; +meter_bot=20; +meter_h=min(gfx_h,21); +xscale=gfx_w*20/meter_bot; +gfx_y=0; +gfx_x=gfx_w + log10(gr_meter)*xscale; +gfx_rectto(gfx_w,meter_h); +//--------------------------------- +// draw limit +//--------------------------------- +gfx_r=1; +gfx_b=1; +gfx_g=1; +gfx_a=0.7; +gfx_x=gfx_w + log10(grlimit*1.025)*xscale; +gfx_y=meter_h-3; +gfx_rectto(gfx_x+4,meter_h); +//--------------------------------- +// draw scale +//--------------------------------- +gfx_a=0.6; +g = s2; +while( +gfx_x=gfx_w + log10(g)*xscale; +gfx_x >= 0 ? ( +gfx_y=0; +gfx_lineto(gfx_x,meter_h-1,0); +gfx_y=meter_h-gfx_texth-5; +gfx_x+=4; +gfx_drawnumber(log10(g)*20,0); +gfx_drawchar($'d'); +gfx_drawchar($'B'); +); +g*=s2; +gfx_x >=0; +); +gfx_x=0; +gfx_y=meter_h; +gfx_lineto(gfx_w,meter_h,0); +gfx_a=0.9; +gfx_x=gfx_w - 61; +gfx_y=meter_h + gfx_texth - 1; +/* +//--------------------------------- +// draw gr numbers in realtime +//--------------------------------- +gfx_drawnumber(log10(gr_meter)*20,1); +gfx_drawchar($'d'); +gfx_drawchar($'B'); +*/ +//--------------------------------- +// hp filter f +//--------------------------------- +gfx_x = 12; +cutoff == 20 ? ( +gfx_a = 0.3; +) : ( +gfx_a = 1; +); +gfx_drawchar($'D'); +gfx_drawchar($'H'); +gfx_drawchar($'P'); +gfx_drawchar($':'); +gfx_drawnumber(cutoff,0); +//--------------------------------- +// attack +//--------------------------------- +gfx_x = gfx_w/3; +gfx_a=1; +gfx_drawchar($'A'); +gfx_drawchar($':'); +gfx_drawnumber(ascale,0); +//--------------------------------- +// release +//--------------------------------- +gfx_x = gfx_w/1.9; +gfx_a=1; +gfx_drawchar($'R'); +gfx_drawchar($':'); +gfx_drawnumber(rscale,0); +//--------------------------------- +// tilt filter f +//--------------------------------- +gfx_x = gfx_w/1.25; +tlt_gain != 0 ? ( +gfx_a = 1; +) : ( +gfx_a = 0.3; +); +gfx_drawchar($'T'); +gfx_drawchar($'L'); +gfx_drawchar($'T'); +gfx_drawchar($':'); +gfx_drawnumber(tf,0); +//--------------------------------- +// clip indicator +//--------------------------------- +gfx_x = gfx_w/1.42; +gfx_r=1; +gfx_g=0; +gfx_b=0; +clip == 1 ? ( +gfx_a = 1; +) : ( +gfx_a = 0.4; +); +gfx_drawchar($'*'); +//--------------------------------- +// british mode indicator +//--------------------------------- +gfx_x = gfx_w/3.9; +gfx_r=0.8; +gfx_g=0.4; +gfx_b=0.4; +rat == 1 ? ( +gfx_a = 1; +) : ( +gfx_a = 0.4; +); +gfx_drawchar($'B'); + diff --git a/Effects/Liteon/pinknoisegen b/Effects/Liteon/pinknoisegen new file mode 100644 index 0000000..3c81f9f --- /dev/null +++ b/Effects/Liteon/pinknoisegen @@ -0,0 +1,155 @@ +// (C) 2008-2009, Lubomir I. Ivanov + +// NO WARRANTY IS GRANTED. THIS PLUG-IN IS PROVIDED ON AN "AS IS" BASIS, WITHOUT +// WARRANTY OF ANY KIND. NO LIABILITY IS GRANTED, INCLUDING, BUT NOT LIMITED TO, +// ANY DIRECT OR INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGE ARISING +// OUT OF THE USE OR INABILITY TO USE THIS PLUG-IN, COMPUTER FAILTURE OF +// MALFUNCTION INCLUDED. THE USE OF THE SOURCE CODE, EITHER PARTIALLY OR IN +// TOTAL, IS ONLY GRANTED, IF USED IN THE SENSE OF THE AUTHOR'S INTENTION, AND +// USED WITH ACKNOWLEDGEMENT OF THE AUTHOR. FURTHERMORE IS THIS PLUG-IN A THIRD +// PARTY CONTRIBUTION, EVEN IF INCLUDED IN REAPER(TM), COCKOS INCORPORATED OR +// ITS AFFILIATES HAVE NOTHING TO DO WITH IT. LAST BUT NOT LEAST, BY USING THIS +// PLUG-IN YOU RELINQUISH YOUR CLAIM TO SUE IT'S AUTHOR, AS WELL AS THE CLAIM TO +// ENTRUST SOMEBODY ELSE WITH DOING SO. +// +// Released under GPL: +// . + +// white noise trought 6pole recursive filter +// works with different sample rates + +desc: Pink Noise Generator +//tags: analysis generator synthesis +//author: Liteon + +slider1:0<0,1,1{Mono,Stereo}>Mode +slider2:-6<-25,25,0.05>Noise (dB) +slider3:-6<-25,25,0.05>Dry (dB) +slider4:0<-25,25,0.05>Output (dB) + +in_pin:left input +in_pin:right input +out_pin:left output +out_pin:right output + +@init +//trc - test rate coeff +trc = 1; +sr = srate*trc; +//******* case1 +sr <= 48000 ? ( +case = 1; +k0 = exp(-2*$pi*4752.456/sr); +k1 = exp(-2*$pi*4030.961/sr); +k2 = exp(-2*$pi*2784.711/sr); +k3 = exp(-2*$pi*1538.461/sr); +k4 = exp(-2*$pi*357.681/sr); +k5 = exp(-2*$pi*70/sr); +k6 = exp(-2*$pi*30/sr); +); +//******* case2 +sr > 48000 && sr <= 96000 ? ( +case = 2; +k0 = exp(-2*$pi*8227.219/sr); +k1 = exp(-2*$pi*8227.219/sr); +k2 = exp(-2*$pi*6388.570/sr); +k3 = exp(-2*$pi*3302.754/sr); +k4 = exp(-2*$pi*479.412/sr); +k5 = exp(-2*$pi*151.070/sr); +k6 = exp(-2*$pi*54.264/sr); +); +//******* case3 +sr > 96000 && sr < 192000? ( +case = 3; +k0 = exp(-2*$pi*9211.912/sr); +k1 = exp(-2*$pi*8621.096/sr); +k2 = exp(-2*$pi*8555.228/sr); +k3 = exp(-2*$pi*8292.754/sr); +k4 = exp(-2*$pi*518.334/sr); +k5 = exp(-2*$pi*163.712/sr); +k6 = exp(-2*$pi*240.241/sr); +); +//******* case4 +sr >= 192000? ( +case = 4; +k0 = exp(-2*$pi*10000/sr); +k1 = exp(-2*$pi*10000/sr); +k2 = exp(-2*$pi*10000/sr); +k3 = exp(-2*$pi*10000/sr); +k4 = exp(-2*$pi*544.948/sr); +k5 = exp(-2*$pi*142.088/sr); +k6 = exp(-2*$pi*211.616/sr); +); +//vector v +vi = 0; +loop(17, +v[vi] = rand(1)*0.001; +vi+=1; +); +vi = 0; +//vector k +ki = 0; +loop(21, +k[ki] = rand(1)*0.00001; +ki+=1; +); +ki = 0; + +@slider + +mode = slider1; +n = 10^((slider2-28)/20); +d = 10^(slider3/20); +o = 10^(slider4/20); + +@sample +mode == 0 ? ( +dryl = (spl0+spl1)/2; + +whitel = min(rand(2)-1+v[vi]+k[ki],1); +b0l = k0*whitel+k0*b0l; +b1l = k1*whitel+k1*b1l; +b2l = k2*whitel+k2*b2l; +b3l = k3*whitel+k3*b3l; +b4l = k4*whitel+k4*b4l; +b5l = k5*whitel+k5*b5l; +b6l = k6*whitel+k6*b6l; +pinkl = (b0l+b1l+b2l+b3l+b4l+b5l+whitel-b6l); +spl0 = spl1 = (pinkl*n+dryl*d)*o; + +vi += 1; +vi == 17 ? vi = 0; +ki += 1; +ki == 21 ? ki = 0; + +) : ( + +dryl = spl0; +whitel = min(rand(2)-1+v[vi]+k[ki],1); +b0l = k0*whitel+k0*b0l; +b1l = k1*whitel+k1*b1l; +b2l = k2*whitel+k2*b2l; +b3l = k3*whitel+k3*b3l; +b4l = k4*whitel+k4*b4l; +b5l = k5*whitel+k5*b5l; +b6l = k6*whitel+k6*b6l; +pinkl = (b0l+b1l+b2l+b3l+b4l+b5l+whitel-b6l); +spl0 = (pinkl*n+dryl*d)*o; + +dryr = spl1; +whiter = min(rand(2)-1+v[vi]+k[ki],1); +b0r = k0*whiter+k0*b0r; +b1r = k1*whiter+k1*b1r; +b2r = k2*whiter+k2*b2r; +b3r = k3*whiter+k3*b3r; +b4r = k4*whiter+k4*b4r; +b5r = k5*whiter+k5*b5r; +b6r = k6*whiter+k6*b6r; +pinkr = (b0r+b1r+b2r+b3r+b4r+b5r+whiter-b6r); +spl1 = (pinkr*n+dryr*d)*o; + +vi += 1; +vi == 17 ? vi = 0; +ki += 1; +ki == 21 ? ki = 0; +); diff --git a/Effects/Liteon/presenceeq b/Effects/Liteon/presenceeq new file mode 100644 index 0000000..066eb83 --- /dev/null +++ b/Effects/Liteon/presenceeq @@ -0,0 +1,146 @@ +// (C) 2008-2009, Lubomir I. Ivanov + +// NO WARRANTY IS GRANTED. THIS PLUG-IN IS PROVIDED ON AN "AS IS" BASIS, WITHOUT +// WARRANTY OF ANY KIND. NO LIABILITY IS GRANTED, INCLUDING, BUT NOT LIMITED TO, +// ANY DIRECT OR INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGE ARISING +// OUT OF THE USE OR INABILITY TO USE THIS PLUG-IN, COMPUTER FAILTURE OF +// MALFUNCTION INCLUDED. THE USE OF THE SOURCE CODE, EITHER PARTIALLY OR IN +// TOTAL, IS ONLY GRANTED, IF USED IN THE SENSE OF THE AUTHOR'S INTENTION, AND +// USED WITH ACKNOWLEDGEMENT OF THE AUTHOR. FURTHERMORE IS THIS PLUG-IN A THIRD +// PARTY CONTRIBUTION, EVEN IF INCLUDED IN REAPER(TM), COCKOS INCORPORATED OR +// ITS AFFILIATES HAVE NOTHING TO DO WITH IT. LAST BUT NOT LEAST, BY USING THIS +// PLUG-IN YOU RELINQUISH YOUR CLAIM TO SUE IT'S AUTHOR, AS WELL AS THE CLAIM TO +// ENTRUST SOMEBODY ELSE WITH DOING SO. +// +// Released under GPL: +// . + +//****************************************************************************** +// References: "filters3.txt" - modified +// Presence EQ as given in +// James A. Moorer +// The manifold joys of conformal mapping: +// applications to digital filtering in the studio +// JAES, Vol. 31, No. 11, 1983 November +//****************************************************************************** + +desc:Presence EQ +desc:Presence EQ (Moorer) +//tags: equalizer +//author: Liteon + +slider1:0<0,1,1{Stereo,Mono}>Processing +slider2:7700<3100,18500,0.1>Frequency (Hz) +slider3:0<-15,15,0.01>Cut/Boost (dB) +slider4:0.20<0.07,0.40,0.0001>Bandwidth +slider5:0<-25,25,0.05>Output (dB) + +in_pin:left input +in_pin:right input +out_pin:left output +out_pin:right output + +@init + +yl=x1l=x2l=y1l=y2l=yr=x1r=x2r=y1r=y2r=SPN=0; + +@slider + +mono = slider1; +cf = slider2/srate; +boost = slider3; +bw = slider4; // removed "/srate" here and added BW in proper ranges +outgain = 10^(slider5/20); +ca = tan($pi*(cf-0.25)); +A = 10^(boost/20); + +(boost < 6.0) && (boost > -6.0) ? ( + F = sqrt(A); +) : ( + A > 1 ? ( + F = A/sqrt(2); + ) : ( + F = A*sqrt(2); + ); +); +T = tan(2*$pi*bw); +as2 = ca*ca; +as4 = as2*as2; +d = 2*as2*T; +sn = (1 + as4)*T; +cs = (1 - as4); +mag = sqrt(sn*sn + cs*cs); +//"d /= mag" prevents adding any boost at all - replaced with d=mag; +d = mag; +delta = atan2(sn,cs); +asnd = asin(d); +theta = 0.5*($pi - asnd - delta); +tmp = 0.5*(asnd-delta); +tmp > 0 && tmp < theta ? ( + theta = tmp; +); +xfmbw = theta/(2*$pi); + +C = 1/tan(2*$pi*xfmbw); +F2 = F*F; +tmp = A*A - F2; +abs(tmp) <= SPN ? ( + alphad = C; +) : ( + alphad = sqrt(C*C*(F2-1)/tmp); +); +alphan = A*alphad; +a2plus1 = 1 + as2; +ma2plus1 = 1 - as2; + +a0 = a2plus1 + alphan*ma2plus1; +a1 = 4.0*ca; +a2 = a2plus1 - alphan*ma2plus1; +b0 = a2plus1 + alphad*ma2plus1; +b2 = a2plus1 - alphad*ma2plus1; + +recipb0 = 1/b0; +a0 *= recipb0; +a1 *= recipb0; +a2 *= recipb0; +b1 = a1; +b2 *= recipb0; + +b1 = -b1; +b2 = -b2; + +@sample + +//mono +mono == 1 ? ( +xl = (spl0+spl1)/2; + +yl = a0*xl + a1*x1l + a2*x2l + b1*y1l + b2*y2l; +x2l = x1l; +x1l = xl; +y2l = y1l; +y1l = yl; + +spl0=spl1=yl*outgain; + +//stereo +) : ( +xl = spl0; +xr = spl1; + +yl = a0*xl + a1*x1l + a2*x2l + b1*y1l + b2*y2l; +x2l = x1l; +x1l = xl; +y2l = y1l; +y1l = yl; + +yr = a0*xr + a1*x1r + a2*x2r + b1*y1r + b2*y2r; +x2r = x1r; +x1r = xr; +y2r = y1r; +y1r = yr; + +spl0=yl*outgain; +spl1=yr*outgain; + +); diff --git a/Effects/Liteon/pseudostereo b/Effects/Liteon/pseudostereo new file mode 100644 index 0000000..df070f2 --- /dev/null +++ b/Effects/Liteon/pseudostereo @@ -0,0 +1,174 @@ +/// (C) 2008-2009, Lubomir I. Ivanov +// +// NO WARRANTY IS GRANTED. THIS PLUG-IN IS PROVIDED ON AN "AS IS" BASIS, WITHOUT +// WARRANTY OF ANY KIND. NO LIABILITY IS GRANTED, INCLUDING, BUT NOT LIMITED TO, +// ANY DIRECT OR INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGE ARISING +// OUT OF THE USE OR INABILITY TO USE THIS PLUG-IN, COMPUTER FAILTURE OF +// MALFUNCTION INCLUDED. THE USE OF THE SOURCE CODE, EITHER PARTIALLY OR IN +// TOTAL, IS ONLY GRANTED, IF USED IN THE SENSE OF THE AUTHOR'S INTENTION, AND +// USED WITH ACKNOWLEDGEMENT OF THE AUTHOR. FURTHERMORE IS THIS PLUG-IN A THIRD +// PARTY CONTRIBUTION, EVEN IF INCLUDED IN REAPER(TM), COCKOS INCORPORATED OR +// ITS AFFILIATES HAVE NOTHING TO DO WITH IT. LAST BUT NOT LEAST, BY USING THIS +// PLUG-IN YOU RELINQUISH YOUR CLAIM TO SUE IT'S AUTHOR, AS WELL AS THE CLAIM TO +// ENTRUST SOMEBODY ELSE WITH DOING SO. +// +// Released under GPL: +// . +// +// ***************************************************************************** +// Pseudo-Stereo +// Based on Paul Kellet's excelent 'mdaStereo' plugin +// ***************************************************************************** + +//======================================================= +desc: MDA Pseudo-Stereo +//tags: processing stereo delay +//author: Liteon + +//======================================================= + +slider1:0<-100,100,0.01>Amount/Type (%) (neg=Haas,pos=Comb) +slider2:20<1,50,0.01>Delay (ms) +slider3:0<-100,100,0.01>Balance (L/R) +slider4:0<-20,20,0.01>Output (dB) + +in_pin:left input +in_pin:right input +out_pin:left output +out_pin:right output + +//======================================================= +@init +//======================================================= + +//------------------------------------------------------- +//define buffer size, srate based - 4410, 4800, 9600 etc +//------------------------------------------------------- +size = srate/10; +bp = size; +buffer = 0; + +//======================================================= +@slider +//======================================================= + +//------------------------------------------------------- +//fx type: 'haas' or 'comb' +//fxk - coeff for tweaking fx amounts +//------------------------------------------------------- +slider1 > 0 ? fxk = 115 : fxk = 200; +fxamount = 0.5+(slider1/fxk); + +//------------------------------------------------------- +//delay, some math here based on - x/1000*srate +//------------------------------------------------------- +tgt_del = sqr((srate*(22+4*slider2)-200000)/208000); + +//------------------------------------------------------- +//outgain +//------------------------------------------------------- +outgain = 10^(slider4/20); + +//------------------------------------------------------- +//balance +//------------------------------------------------------- +bal = slider3/100; +tgt_bl = min(1-bal,1)*outgain; +tgt_br = min(1+bal,1)*outgain; + +//------------------------------------------------------- +//calculate feedback - haas or comb +//------------------------------------------------------- +fxamount<0.5 ? ( + tgt_li = 0.25+(1.5*fxamount); + tgt_ld = 0; + tgt_ri = 2*fxamount; + tgt_rd = 1-tgt_ri; + ) : ( + tgt_li = 1.5-fxamount; + tgt_ld = fxamount-0.5; + tgt_ri = tgt_li; + tgt_rd = -tgt_ld; +); +fxamnt_abs = 0.5+abs(fxamount-0.5); +tgt_li *= fxamnt_abs; +tgt_ld *= fxamnt_abs; +tgt_ri *= fxamnt_abs; +tgt_rd *= fxamnt_abs; + +//======================================================= +@block +//======================================================= + +//------------------------------------------------------- +//interpolate params per sblock +//------------------------------------------------------- +d_ri = (tgt_ri-src_ri)/samplesblock; +ri = src_ri; +src_ri = tgt_ri; +d_rd = (tgt_rd-src_rd)/samplesblock; +rd = src_rd; +src_rd = tgt_rd; +d_li = (tgt_li-src_li)/samplesblock; +li = src_li; +src_li = tgt_li; +d_ld = (tgt_ld-src_ld)/samplesblock; +ld = src_ld; +src_ld = tgt_ld; +d_del = (tgt_del-src_del)/samplesblock; +del = src_del; +src_del = tgt_del; +d_bl = (tgt_bl-src_bl)/samplesblock; +bl = src_bl; +src_bl = tgt_bl; +d_br = (tgt_br-src_br)/samplesblock; +br = src_br; +src_br = tgt_br; + +//======================================================= +@sample +//======================================================= + +//------------------------------------------------------- +//interpolate params +//------------------------------------------------------- +li += d_li; +ld += d_ld; +ri += d_ri; +rd += d_rd; +del += d_del; +bl += d_bl; +br += d_br; + +//------------------------------------------------------- +//set inputs and sum to mono +//------------------------------------------------------- +chl = spl0; +chr = spl1; +a = (spl0+spl1)/2; + +//------------------------------------------------------- +//write new value in buffer +//------------------------------------------------------- +buffer[bp] = a; + +//------------------------------------------------------- +//apply feedback +//------------------------------------------------------- +tmp = (bp+del)%size; +b = buffer[tmp]; +chl += (a*li)-(b*ld); +chr += (a*ri)-(b*rd); + +//------------------------------------------------------- +//new buffer position or reset +//------------------------------------------------------- +bp = bp-1; +bp < 0 ? bp = size; + +//------------------------------------------------------- +//output +//------------------------------------------------------- +spl0 = chl*bl*0.7; +spl1 = chr*br*0.7; + diff --git a/Effects/Liteon/rbjstereofilter12db b/Effects/Liteon/rbjstereofilter12db new file mode 100644 index 0000000..fd66bb9 --- /dev/null +++ b/Effects/Liteon/rbjstereofilter12db @@ -0,0 +1,352 @@ +// (C) 2008-2009, Lubomir I. Ivanov + +// NO WARRANTY IS GRANTED. THIS PLUG-IN IS PROVIDED ON AN "AS IS" BASIS, WITHOUT +// WARRANTY OF ANY KIND. NO LIABILITY IS GRANTED, INCLUDING, BUT NOT LIMITED TO, +// ANY DIRECT OR INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGE ARISING +// OUT OF THE USE OR INABILITY TO USE THIS PLUG-IN, COMPUTER FAILTURE OF +// MALFUNCTION INCLUDED. THE USE OF THE SOURCE CODE, EITHER PARTIALLY OR IN +// TOTAL, IS ONLY GRANTED, IF USED IN THE SENSE OF THE AUTHOR'S INTENTION, AND +// USED WITH ACKNOWLEDGEMENT OF THE AUTHOR. FURTHERMORE IS THIS PLUG-IN A THIRD +// PARTY CONTRIBUTION, EVEN IF INCLUDED IN REAPER(TM), COCKOS INCORPORATED OR +// ITS AFFILIATES HAVE NOTHING TO DO WITH IT. LAST BUT NOT LEAST, BY USING THIS +// PLUG-IN YOU RELINQUISH YOUR CLAIM TO SUE IT'S AUTHOR, AS WELL AS THE CLAIM TO +// ENTRUST SOMEBODY ELSE WITH DOING SO. +// +// Released under GPL: +// . + +// ***************************************************************************** +// Refereces (or uses code) from: +// RBJ Cookbook filters - implementation by Stillwell (info at bottom) +// M-S splitter by LOSER +// Distortion by Bram de Jong +// ***************************************************************************** + +desc:RBJ Stereo Image Filter +//tags: processing stereo filter mid-side distortion +//author: Liteon + +slider1:100<0,100,1>S - Filter Amount (%) +slider2:0<0,100,0.05>S - HP (Scale) +slider3:100<0,100,0.05>S - LP (Scale) +slider4:0<0,100>S - Drive (%) +slider5:100<0,200,0.05>Side (%) +slider6:100<0,200,0.05>Mid (%) +slider7:0<-25,25,0.05>Output M+S (dB) +slider8:0<0,1,1{Off,On}>Oversample (x2) + +in_pin:left input +in_pin:right input +out_pin:left output +out_pin:right output + +@init + +//fir restoration +c1 = 1; +c2 = -0.75; +c3 = 0.17; +fgain = 4.1; + +//fir bandlimit +bl_c1 = 0.52; +bl_c2 = 0.54; +bl_c3 = -0.02; + +//hp +hpf = 0; +gain1 = 0; + +freq1=20; + +a1 = 1; +s1 = 1; +q1 = 1 / (sqrt((a1 + 1/a1)*(1/s1 - 1) + 2)); +w01 = 2 * $pi * freq1/srate; +cosw01 = cos(w01); +sinw01 = sin(w01); +alpha1 = sinw01 / (2 * q1); + +b01 = (1 + cosw01)/2; +b11 = -(1 + cosw01); +b21 = (1 + cosw01)/2; +a01 = 1 + alpha1; +a11 = -2 * cosw01; +a21 = 1 - alpha1; +b01 /= a01; +b11 /= a01; +b21 /= a01; +a11 /= a01; +a21 /= a01; + +//lp +lpf = 0; +gain3 = 0; +freq3 = 20000; +a3 = 10^(gain3/40); +s3 = 2; +q3 = 1 / (sqrt((a3 + 1/a3)*(1/s3 - 1) + 2)); +w03 = 2 * $pi * freq3/srate; +cosw03 = cos(w03); +sinw03 = sin(w03); +alpha3 = sinw03 / (2 * q3); + +b03 = (1 - cosw03)/2; +b13 = (1 - cosw03); +b23 = (1 - cosw03)/2; +a03 = 1 + alpha3; +a13 = -2 * cosw03; +a23 = 1 - alpha3; +b03 /= a03; +b13 /= a03; +b23 /= a03; +a13 /= a03; +a23 /= a03; + +@slider +os = slider8; + +amount = (100-slider1)/200; +drive = 1+slider4/100; +drvc = 1.2; +outgain = 10^(slider7/20); +side = slider5/200; +mid = slider6/200; + +sx1 = 16+slider2*1.20103; +freq1 = floor(exp(sx1*log(1.059))*8.17742); + +sx2 = 16+slider3*1.20103; +freq3 = floor(exp(sx2*log(1.059))*8.17742); + +slider2 == 0 ? hpf = 0 : hpf = 1; +slider3 == 100 ? lpf = 0 : lpf = 1; + +a1 = 1; +s1 = 1; +q1 = 1 / (sqrt((a1 + 1/a1)*(1/s1 - 1) + 2)); +w01 = 2 * $pi * freq1/srate; +cosw01 = cos(w01); +sinw01 = sin(w01); +alpha1 = sinw01 / (2 * q1); + +b01 = (1 + cosw01)/2; +b11 = -(1 + cosw01); +b21 = (1 + cosw01)/2; +a01 = 1 + alpha1; +a11 = -2 * cosw01; +a21 = 1 - alpha1; +b01 /= a01; +b11 /= a01; +b21 /= a01; +a11 /= a01; +a21 /= a01; + +a3 = 1; +s3 = 1; +q3 = 1 / (sqrt((a3 + 1/a3)*(1/s3 - 1) + 2)); +w03 = 2 * $pi * freq3/srate; +cosw03 = cos(w03); +sinw03 = sin(w03); +alpha3 = sinw03 / (2 * q3); + +b03 = (1 - cosw03)/2; +b13 = (1 - cosw03); +b23 = (1 - cosw03)/2; +a03 = 1 + alpha3; +a13 = -2 * cosw03; +a23 = 1 - alpha3; +b03 /= a03; +b13 /= a03; +b23 /= a03; +a13 /= a03; +a23 /= a03; + + +@sample +s0 = spl0; +s1 = spl1; + +//distortion +drive > 1 ? ( + +inl = spl0; +inr = spl1; + +os == 1 ? ( + +//ps in + +ps_out1l = 0.5*(inl+ps_out2l); +ps_out2l = 0.5*ps_out1l; + +ps_out1r = 0.5*(inr+ps_out2r); +ps_out2r = 0.5*ps_out1r; + +//drive +o_in1l= (ps_out1l)*(abs((ps_out1l)) + drive)/((ps_out1l)^2 + (drive-1)*abs((ps_out1l)) + 1)*(drive/drvc); +o_in2l= (ps_out2l)*(abs((ps_out2l)) + drive)/((ps_out2l)^2 + (drive-1)*abs((ps_out2l)) + 1)*(drive/drvc); + +o_in1r= (ps_out1r)*(abs((ps_out1r)) + drive)/((ps_out1r)^2 + (drive-1)*abs((ps_out1r)) + 1)*(drive/drvc); +o_in2r= (ps_out2r)*(abs((ps_out2r)) + drive)/((ps_out2r)^2 + (drive-1)*abs((ps_out2r)) + 1)*(drive/drvc); + +//--------------------------- +//bandlimit +bl3_l1 = bl2_l1; +bl3_r1 = bl2_r1; +bl3_l2 = bl2_l2; +bl3_r2 = bl2_r2; + +bl2_l1 = bl1_l1; +bl2_r1 = bl1_r1; +bl2_l2 = bl1_l2; +bl2_r2 = bl1_r2; + +bl1_l1 = o_in1l; +bl1_r1 = o_in1r; +bl1_l2 = o_in2l; +bl1_r2 = o_in2r; + +bl_out1l = (bl1_l1*bl_c1 + bl2_l1*bl_c2 + bl3_l1*bl_c3); +bl_out1r = (bl1_r1*bl_c1 + bl2_r1*bl_c2 + bl3_r1*bl_c3); +bl_out2l = (bl1_l2*bl_c1 + bl2_l2*bl_c2 + bl3_l2*bl_c3); +bl_out2r = (bl1_r2*bl_c1 + bl2_r2*bl_c2 + bl3_r2*bl_c3); + +//ps out +o_out1l = 0.5*(bl_out1l+o_out2l); +o_out2l = 0.5*(bl_out2l+o_out1l); + +o_out1r = 0.5*(bl_out1r+o_out2r); +o_out2r = 0.5*(bl_out2r+o_out1r); + + +//restore +s3l = s2l; +s3r = s2r; +s2l = s1l; +s2r = s1r; +s1l = o_out1l; +s1r = o_out1r; + +spl0 = (s1l*c1+s2l*c2+s3l*c3)*fgain; +spl1 = (s1r*c1+s2r*c2+s3r*c3)*fgain; + +) : ( + +spl0 = (inl)*(abs((inr)) + drive)/((inl)^2 + (drive-1)*abs((inl)) + 1)*(drive/drvc); +spl1 = (inr)*(abs((inr)) + drive)/((inr)^2 + (drive-1)*abs((inr)) + 1)*(drive/drvc); + +); + +); + +//filters +hpf != 0 ? ( +ospl0 = spl0; +hpspl0 = b01 * spl0 + b11 * xl11 + b21 * xl21 - a11 * yl11 - a21 * yl21; +spl0 = hpspl0; +xl21 = xl11; +xl11 = ospl0; +yl21 = yl11; +yl11 = spl0; + +ospl1 = spl1; +hpspl1 = b01 * spl1 + b11 * xr11 + b21 * xr21 - a11 * yr11 - a21 * yr21; +spl1 = hpspl1; +xr21 = xr11; +xr11 = ospl1; +yr21 = yr11; +yr11 = spl1; +); + +lpf != 0 ? ( +ospl0 = spl0; +lpspl0 = b03 * spl0 + b13 * xl13 + b23 * xl23 - a13 * yl13 - a23 * yl23; +spl0 = lpspl0; +xl23 = xl13; +xl13 = ospl0; +yl23 = yl13; +yl13 = spl0; + +ospl1 = spl1; +lpspl1 = b03 * spl1 + b13 * xr13 + b23 * xr23 - a13 * yr13 - a23 * yr23; +spl1 = lpspl1; +xr23 = xr13; +xr13 = ospl1; +yr23 = yr13; +yr13 = spl1; +); + +s0 -= spl0; +s1 -= spl1; + +mono = (s0 + s1)/2; +stereo = (s0 - s1); + +s0 = (mono + stereo * amount) * max(amount,1); +s1 = (mono - stereo * amount) * max(amount,1); + +spl0 += s0; +spl1 += s1; + +mono = (spl0 + spl1); +stereo = (spl0 - spl1); +spl0 = (mono*mid + stereo*side);// / max(side,1); +spl1 = (mono*mid - stereo*side);// / max(width,1); + +spl0 = spl0*outgain; +spl1 = spl1*outgain; + +@gfx 100 32 +gfx_x=gfx_y=5; +gfx_lineto(gfx_x, gfx_y,0); +gfx_r=gfx_b=0; +gfx_g=gfx_a=1; +gfx_drawchar($'H'); +gfx_drawchar($'P'); +gfx_drawchar($' '); +gfx_drawchar($'='); +gfx_drawchar($' '); +gfx_drawnumber(freq1,0); +gfx_drawchar($' '); +gfx_drawchar($'H'); +gfx_drawchar($'z'); +gfx_y += 15; +gfx_x = 5; +gfx_drawchar($'L'); +gfx_drawchar($'P'); +gfx_drawchar($' '); +gfx_drawchar($'='); +gfx_drawchar($' '); +gfx_drawnumber(freq3,0); +gfx_drawchar($' '); +gfx_drawchar($'H'); +gfx_drawchar($'z'); + + + +//RBJ Filters Implementation + +// Copyright 2006, Thomas Scott Stillwell +// All rights reserved. +// +//Redistribution and use in source and binary forms, with or without modification, are permitted +//provided that the following conditions are met: +// +//Redistributions of source code must retain the above copyright notice, this list of conditions +//and the following disclaimer. +// +//Redistributions in binary form must reproduce the above copyright notice, this list of conditions +//and the following disclaimer in the documentation and/or other materials provided with the distribution. +// +//The name of Thomas Scott Stillwell may not be used to endorse or +//promote products derived from this software without specific prior written permission. +// +//THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR +//IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +//FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS +//BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +//(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +//PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, +//STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +//THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/Effects/Liteon/ringmodulator b/Effects/Liteon/ringmodulator new file mode 100644 index 0000000..108187b --- /dev/null +++ b/Effects/Liteon/ringmodulator @@ -0,0 +1,390 @@ +// (C) 2008-2009, Lubomir I. Ivanov +// +// NO WARRANTY IS GRANTED. THIS PLUG-IN IS PROVIDED ON AN "AS IS" BASIS, WITHOUT +// WARRANTY OF ANY KIND. NO LIABILITY IS GRANTED, INCLUDING, BUT NOT LIMITED TO, +// ANY DIRECT OR INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGE ARISING +// OUT OF THE USE OR INABILITY TO USE THIS PLUG-IN, COMPUTER FAILTURE OF +// MALFUNCTION INCLUDED. THE USE OF THE SOURCE CODE, EITHER PARTIALLY OR IN +// TOTAL, IS ONLY GRANTED, IF USED IN THE SENSE OF THE AUTHOR'S INTENTION, AND +// USED WITH ACKNOWLEDGEMENT OF THE AUTHOR. FURTHERMORE IS THIS PLUG-IN A THIRD +// PARTY CONTRIBUTION, EVEN IF INCLUDED IN REAPER(TM), COCKOS INCORPORATED OR +// ITS AFFILIATES HAVE NOTHING TO DO WITH IT. LAST BUT NOT LEAST, BY USING THIS +// PLUG-IN YOU RELINQUISH YOUR CLAIM TO SUE IT'S AUTHOR, AS WELL AS THE CLAIM TO +// ENTRUST SOMEBODY ELSE WITH DOING SO. +// +// Released under GPL: +// . + +//================================================= +desc:Ring Modulator +//tags: processing amplitude modulation +//author: Liteon + +//================================================= + +slider1:0<0,1,1{Stereo,Mono}>Processing +slider2:0<0,1,1{Off,On}>Mod Input Diode (Waveshaper) +slider3:40<0,100,0.01>Mod Frequency (Scale) +slider4:0<0,100,0.01>Feedback (%) +slider5:10<0,100,0.01>Non-Linearities (%) +slider6:100<0,100,0.01>Mix (%) +slider7:0<-40,40,0.01>Output (-inf/+40dB) +slider8:0<0,1,1{Off,On}>Oversample (x2) + +in_pin:left input +in_pin:right input +out_pin:left output +out_pin:right output + +//================================================= +@init +//================================================= +//2*pi +pi2 = 2*$pi; + +//sim resistance +r = 0.85; + +//fir restoration filter +c1 = 1; +c2 = -0.75; +c3 = 0.17; +fgain = 4; + +//fir bandlimit +bl_c1 = 0.52; +bl_c2 = 0.54; +bl_c3 = -0.02; + +//================================================= +@slider +//================================================= +mono = slider1; + +os = slider8; + +sx = 16+slider3*1.20103; +tgt_f = floor(exp(sx*log(1.059))*8.17742); + +fb = slider4/100; +tgt_mix = slider6/100; +diode = slider2; +nl = slider5; + +slider7 == -40 ? outgain = 0 : outgain = 10^(slider7/20); + +//================================================= +@block +//================================================= +//interpolate 'f' +d_f = (tgt_f-src_f)/samplesblock; +tf = src_f; +src_f = tgt_f; + +//interpolate 'mix' +d_mix = (tgt_mix-src_mix)/samplesblock; +tmix = src_mix; +src_mix = tgt_mix; + +@sample +//================================================= +// set mod signal +//================================================= +//a couple of pseudo non-linearities for 'f' and 'fb' +nl > 0 ? ( +nl_f = rand(4*nl)-2*nl; +nl_fb = (rand(2*nl)-nl)*0.001; +) : ( +nl_f = nl_fb = 0; +); + +//interpolate 'f' +tf += d_f; + +//interpolate 'mix' +tmix += d_mix; + +//mod signal gen +sina = pi2*(tf-nl_f)/srate; +sinout = sin(sinp); +sinp = sinp+sina; +sinp >= pi2 ? sinp -= pi2; + +//diode - positive semi-periods +diode == 0 ? ( + m_out = sinout; +) : ( + //os - diode-ed signal? + os == 0 ? ( + //abs() + d_sin = abs(sinout)*2-0.20260; + ) : ( + //power series in + ps_sin_out1 = 0.5*(sinout+ps_sin_out2); + ps_sin_out2 = 0.5*ps_sin_out1; + //abs() + ps_d_sin1 = abs(ps_sin_out1)*2-0.20260; + ps_d_sin2 = abs(ps_sin_out2)*2-0.20260; + //bandlimit + sin_bl3_1 = sin_bl2_1; + sin_bl3_2 = sin_bl2_2; + sin_bl2_1 = sin_bl1_1; + sin_bl2_2 = sin_bl1_2; + sin_bl1_1 = ps_d_sin1; + sin_bl1_2 = ps_d_sin2; + sin_bl_out1 = (sin_bl1_1*bl_c1 + sin_bl2_1*bl_c2 + sin_bl3_1*bl_c3); + sin_bl_out2 = (sin_bl1_2*bl_c1 + sin_bl2_2*bl_c2 + sin_bl3_2*bl_c3); + //power series out + o_sin_out1 = 0.5*(sin_bl_out1+o_sin_out2); + o_sin_out2 = 0.5*(sin_bl_out2+o_sin_out1); + //fir restoration + s3 = s2; + s2 = s1; + s1 = o_sin_out1; + d_sin = (s1*c1+s2*c2+s3*c3)*fgain; + ); + m_out = d_sin +); + +//no feedback? +fb == 0 ? nl_fb = 0; + +//================================================= +//fx mono +//================================================= +mono == 1 ? ( + +//------------------------------------------------- +//input +//------------------------------------------------- +in_l = (spl0+spl1)/2; + +//------------------------------------------------- +//os - no +//------------------------------------------------- +os == 0 ? ( + +//feedback ala Paul Kellet +fp_l = (in_l+(fb-nl_fb)*fp_l)*sinout*r; +//multiply carrier with mod +s_out_l = m_out*in_l; +//apply feedback +s_out_l += fp_l; + +fx_outl = s_out_l; + +) : ( + +//------------------------------------------------- +//os - yes +//------------------------------------------------- + +//power series in +ps_fx_out1l = 0.5*(in_l+ps_fx_out2l); +ps_fx_out2l = 0.5*ps_fx_out1l; + +//------------------------ +//fx +//------------------------ +fp_l_os_1 = (ps_fx_out1l+(fb-nl_fb)*fp_l_os_1)*sinout*r; +s_out_l_os_1 = m_out*ps_fx_out1l; +s_out_l_os_1 += fp_l_os_1; + +fp_l_os_2 = (ps_fx_out2l+(fb-nl_fb)*fp_l_os_2)*sinout*r; +s_out_l_os_2 = m_out*ps_fx_out2l; +s_out_l_os_2 += fp_l_os_2; + +//------------------------ +//bandlimit +//------------------------ +bl3_1 = bl2_1; +bl3_2 = bl2_2; + +bl2_1 = bl1_1; +bl2_2 = bl1_2; + +bl1_1 = s_out_l_os_1; +bl1_2 = s_out_l_os_2; + +bl_out1 = (bl1_1*bl_c1 + bl2_1*bl_c2 + bl3_1*bl_c3); +bl_out2 = (bl1_2*bl_c1 + bl2_2*bl_c2 + bl3_2*bl_c3); + +//------------------------ +//power series out +//------------------------ +o_fx_out1l = 0.5*(bl_out1+o_fx_out2l); +o_fx_out2l = 0.5*(bl_out2+o_fx_out1l); + +//fir restoration +s3l = s2l; +s2l = s1l; +s1l = o_fx_out1l; + +fx_outl = (s1l*c1+s2l*c2+s3l*c3)*fgain; + +); + +//------------------------ +//mixer +//------------------------ +out_l = fx_outl*(tmix)+in_l*(1-tmix); +spl1 = spl0 = out_l*r*outgain; + +):( +//================================================= +//fx stereo +//================================================= + +in_l = spl0; +in_r = spl1; + +//------------------------------------------------- +//os - no +//------------------------------------------------- +os == 0 ? ( + +fp_l = (in_l+(fb-nl_fb)*fp_l)*sinout*r; +s_out_l = m_out*in_l; +s_out_l += fp_l; +out_l = s_out_l*(tmix)+in_l*(1-tmix); +fx_outl = out_l*r*outgain; + +fp_r = (in_r+(fb-nl_fb)*fp_r)*sinout*r; +s_out_r = m_out*in_r; +s_out_r += fp_r; +out_r = s_out_r*(tmix)+in_r*(1-tmix); +fx_outr = out_r*r*outgain; + +) : ( + +//------------------------------------------------- +//os - yes +//------------------------------------------------- + +//power series in +ps_fx_out1l = 0.5*(in_l+ps_fx_out2l); +ps_fx_out2l = 0.5*ps_fx_out1l; + +ps_fx_out1r = 0.5*(in_r+ps_fx_out2r); +ps_fx_out2r = 0.5*ps_fx_out1r; + +//------------------------ +//fx +//------------------------ +fp_l_os_1 = (ps_fx_out1l+(fb-nl_fb)*fp_l_os_1)*sinout*r; +s_out_l_os_1 = m_out*ps_fx_out1l; +s_out_l_os_1 += fp_l_os_1; + +fp_l_os_2 = (ps_fx_out2l+(fb-nl_fb)*fp_l_os_2)*sinout*r; +s_out_l_os_2 = m_out*ps_fx_out2l; +s_out_l_os_2 += fp_l_os_2; + +fp_r_os_1 = (ps_fx_out1r+(fb-nl_fb)*fp_r_os_1)*sinout*r; +s_out_r_os_1 = m_out*ps_fx_out1r; +s_out_r_os_1 += fp_r_os_1; + +fp_r_os_2 = (ps_fx_out2r+(fb-nl_fb)*fp_r_os_2)*sinout*r; +s_out_r_os_2 = m_out*ps_fx_out2r; +s_out_r_os_2 += fp_r_os_2; + +//------------------------ +//bandlimit +//------------------------ +bl3_l1 = bl2_l1; +bl3_r1 = bl2_r1; +bl3_l2 = bl2_l2; +bl3_r2 = bl2_r2; + +bl2_l1 = bl1_l1; +bl2_r1 = bl1_r1; +bl2_l2 = bl1_l2; +bl2_r2 = bl1_r2; + +bl1_l1 = s_out_l_os_1; +bl1_r1 = s_out_r_os_1; +bl1_l2 = s_out_l_os_2; +bl1_r2 = s_out_r_os_2; + +bl_out1l = (bl1_l1*bl_c1 + bl2_l1*bl_c2 + bl3_l1*bl_c3); +bl_out1r = (bl1_r1*bl_c1 + bl2_r1*bl_c2 + bl3_r1*bl_c3); +bl_out2l = (bl1_l2*bl_c1 + bl2_l2*bl_c2 + bl3_l2*bl_c3); +bl_out2r = (bl1_r2*bl_c1 + bl2_r2*bl_c2 + bl3_r2*bl_c3); + +//------------------------ +//power series out +//------------------------ +o_fx_out1l = 0.5*(bl_out1l+o_fx_out2l); +o_fx_out2l = 0.5*(bl_out2l+o_fx_out1l); + +o_fx_out1r = 0.5*(bl_out1r+o_fx_out2r); +o_fx_out2r = 0.5*(bl_out2r+o_fx_out1r); + +//------------------------ +//fir restoration +//------------------------ +s3l = s2l; +s2l = s1l; +s1l = o_fx_out1l; +fx_outl = (s1l*c1+s2l*c2+s3l*c3)*fgain; + +s3r = s2r; +s2r = s1r; +s1r = o_fx_out1r; +fx_outr = (s1r*c1+s2r*c2+s3r*c3)*fgain; + +); + +//------------------------ +//mixer +//------------------------ +out_l = fx_outl*(tmix)+in_l*(1-tmix); +out_r = fx_outr*(tmix)+in_r*(1-tmix); +spl0 = out_l*r*outgain; +spl1 = out_r*r*outgain; + +); + +//================================================= +@gfx 100 35 +//================================================= +//draw 'f' +gfx_x=gfx_y=5; +gfx_lineto(gfx_x, gfx_y,0); +gfx_r=gfx_b=0.5; +gfx_g=0.7; +gfx_a=1; +gfx_drawchar($'M'); +gfx_drawchar($'O'); +gfx_drawchar($'D'); +gfx_drawchar($' '); +gfx_drawchar($'F'); +gfx_drawchar($' '); +gfx_drawchar($'='); +gfx_drawchar($' '); +gfx_drawnumber(tgt_f,0); +gfx_drawchar($' '); +gfx_drawchar($'H'); +gfx_drawchar($'z'); +//draw diode picture +diode == 0 ? gfx_r=gfx_g=gfx_b=0.4; +padx = 385; +pady = 7; +gfx_y = gfx_y+8; +gfx_x = padx-50; +gfx_drawchar($'M'); +gfx_drawchar($'O'); +gfx_drawchar($'D'); +gfx_drawchar($'~'); +gfx_x = padx; +gfx_y = pady; +gfx_lineto(padx,pady+20,0); +gfx_lineto(padx+15,pady+10,0); +gfx_lineto(padx,pady,0); +gfx_x = padx+15; +gfx_y = pady; +gfx_lineto(padx+15,pady+20,0); +gfx_x = padx-10; +gfx_y = pady+10; +gfx_lineto(padx,pady+10,0); +gfx_x = padx+15; +gfx_lineto(padx+30,pady+10,0); diff --git a/Effects/Liteon/shelvingfilter b/Effects/Liteon/shelvingfilter new file mode 100644 index 0000000..79d6d89 --- /dev/null +++ b/Effects/Liteon/shelvingfilter @@ -0,0 +1,269 @@ +// (C) 2008-2009, Lubomir I. Ivanov + +// NO WARRANTY IS GRANTED. THIS PLUG-IN IS PROVIDED ON AN "AS IS" BASIS, WITHOUT +// WARRANTY OF ANY KIND. NO LIABILITY IS GRANTED, INCLUDING, BUT NOT LIMITED TO, +// ANY DIRECT OR INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGE ARISING +// OUT OF THE USE OR INABILITY TO USE THIS PLUG-IN, COMPUTER FAILTURE OF +// MALFUNCTION INCLUDED. THE USE OF THE SOURCE CODE, EITHER PARTIALLY OR IN +// TOTAL, IS ONLY GRANTED, IF USED IN THE SENSE OF THE AUTHOR'S INTENTION, AND +// USED WITH ACKNOWLEDGEMENT OF THE AUTHOR. FURTHERMORE IS THIS PLUG-IN A THIRD +// PARTY CONTRIBUTION, EVEN IF INCLUDED IN REAPER(TM), COCKOS INCORPORATED OR +// ITS AFFILIATES HAVE NOTHING TO DO WITH IT. LAST BUT NOT LEAST, BY USING THIS +// PLUG-IN YOU RELINQUISH YOUR CLAIM TO SUE IT'S AUTHOR, AS WELL AS THE CLAIM TO +// ENTRUST SOMEBODY ELSE WITH DOING SO. +// +// Released under GPL: +// . + +//****************************************************************************** +// References: "filters3.txt" +// Shelf Filters as given in +// James A. Moorer +// The manifold joys of conformal mappping: +// applications to digital filtering in the studio +// JAES, Vol. 31, No. 11, 1983 November +//****************************************************************************** + +desc:Shelving Filter +//tags: filter equalizer +//author: Liteon + +slider1:0<0,1,1{Stereo,Mono}>Processing +slider2:50<0,100,0.05>Low Shelf (Scale) +slider3:0<-24,24,0.01>Gain (dB) +slider4:50<0,100,0.05>High Shelf (Scale) +slider5:0<-24,24,0.01>Gain (dB) +slider6:0<-24,24,0.05>Output (dB) + +in_pin:left input +in_pin:right input +out_pin:left output +out_pin:right output + +@init +SPN=0; +yl_ls=x1l_ls=x2l_ls=y1l_ls=y2l_ls=yr_ls=x1r_ls=x2r_ls=y1r_ls=y2r_ls=0; +yl_hs=x1l_hs=x2l_hs=y1l_hs=y2l_hs=yr_hs=x1r_hs=x2r_hs=y1r_hs=y2r_hs=0; + +@slider +mono = slider1; +outgain = 10^(slider6/20); + +//*** LS +sx = 16+slider2*1.20103; +cf = floor(exp(sx*log(1.059))*8.17742); +freq1 = cf; +cf /= srate; +boost = slider3; + +sa = tan($pi*(cf-0.25)); +asq = sa*sa; +A = 10^(boost/20.0); +(boost < 6.0) && (boost > -6.0) ? ( + F = sqrt(A); +) : ( + (A > 1.0) ? ( + F = A/sqrt(2.0); + ) : ( + F = A*sqrt(2.0); + ); +); +F2 = F*F; +tmp = A*A - F2; +abs(tmp) <= SPN ? ( + gammad = 1.0; +) : ( + gammad = ((F2-1.0)/tmp)^(0.25); +); +gamman = sqrt(A)*gammad; +gamma2 = gamman*gamman; +gam2p1 = 1.0 + gamma2; +siggam2 = 2.0*sqrt(2.0)/2.0*gamman; +ta0 = gam2p1 + siggam2; +ta1 = -2.0*(1.0 - gamma2); +ta2 = gam2p1 - siggam2; +gamma2 = gammad*gammad; +gam2p1 = 1.0 + gamma2; +siggam2 = 2.0*sqrt(2.0)/2.0*gammad; +tb0 = gam2p1 + siggam2; +tb1 = -2.0*(1.0 - gamma2); +tb2 = gam2p1 - siggam2; + +aa1 = sa*ta1; +a0 = ta0 + aa1 + asq*ta2; +a1 = 2.0*sa*(ta0+ta2)+(1.0+asq)*ta1; +a2 = asq*ta0 + aa1 + ta2; + +ab1 = sa*tb1; +b0 = tb0 + ab1 + asq*tb2; +b1 = 2.0*sa*(tb0+tb2)+(1.0+asq)*tb1; +b2 = asq*tb0 + ab1 + tb2; + +recipb0 = 1.0/b0; +a0 *= recipb0; +a1 *= recipb0; +a2 *= recipb0; +b1 *= recipb0; +b2 *= recipb0; + +a0_ls = a0; +a1_ls = a1; +a2_ls = a2; +b1_ls = -b1; +b2_ls = -b2; + +//*** HS +sx = 16+slider4*1.20103; +cf = floor(exp(sx*log(1.059))*8.17742); +freq2 = cf; +cf /= srate; +boost = -slider5; + +sa = tan($pi*(cf-0.25)); +asq = sa*sa; +A = 10^(boost/20.0); +(boost < 6.0) && (boost > -6.0) ? ( + F = sqrt(A); +) : ( + (A > 1.0) ? ( + F = A/sqrt(2.0); + ) : ( + F = A*sqrt(2.0); + ); +); +F2 = F*F; +tmp = A*A - F2; +abs(tmp) <= SPN ? ( + gammad = 1.0; +) : ( + gammad = ((F2-1.0)/tmp)^(0.25); +); +gamman = sqrt(A)*gammad; +gamma2 = gamman*gamman; +gam2p1 = 1.0 + gamma2; +siggam2 = 2.0*sqrt(2.0)/2.0*gamman; +ta0 = gam2p1 + siggam2; +ta1 = -2.0*(1.0 - gamma2); +ta2 = gam2p1 - siggam2; +gamma2 = gammad*gammad; +gam2p1 = 1.0 + gamma2; +siggam2 = 2.0*sqrt(2.0)/2.0*gammad; +tb0 = gam2p1 + siggam2; +tb1 = -2.0*(1.0 - gamma2); +tb2 = gam2p1 - siggam2; + +aa1 = sa*ta1; +a0 = ta0 + aa1 + asq*ta2; +a1 = 2.0*sa*(ta0+ta2)+(1.0+asq)*ta1; +a2 = asq*ta0 + aa1 + ta2; + +ab1 = sa*tb1; +b0 = tb0 + ab1 + asq*tb2; +b1 = 2.0*sa*(tb0+tb2)+(1.0+asq)*tb1; +b2 = asq*tb0 + ab1 + tb2; + +recipb0 = 1.0/b0; +a0 *= recipb0; +a1 *= recipb0; +a2 *= recipb0; +b1 *= recipb0; +b2 *= recipb0; + +gain = 10^(boost/20.0); +a0_hs = a0/gain; +a1_hs = a1/gain; +a2_hs = a2/gain; +b1_hs = -b1; +b2_hs = -b2; + +@sample + +//mono +mono == 1 ? ( + +//LS +xl_ls = (spl0+spl1)/2; + +yl_ls = a0_ls*xl_ls + a1_ls*x1l_ls + a2_ls*x2l_ls + b1_ls*y1l_ls + b2_ls*y2l_ls; +x2l_ls = x1l_ls; +x1l_ls = xl_ls; +y2l_ls = y1l_ls; +y1l_ls = yl_ls; + +//HS +xl_hs = yl_ls; + +yl_hs = a0_hs*xl_hs + a1_hs*x1l_hs + a2_hs*x2l_hs + b1_hs*y1l_hs + b2_hs*y2l_hs; +x2l_hs = x1l_hs; +x1l_hs = xl_hs; +y2l_hs = y1l_hs; +y1l_hs = yl_hs; + +spl0=spl1=yl_hs*outgain; + +//stereo +) : ( + +//LS +xl_ls = spl0; +xr_ls = spl1; + +yl_ls = a0_ls*xl_ls + a1_ls*x1l_ls + a2_ls*x2l_ls + b1_ls*y1l_ls + b2_ls*y2l_ls; +x2l_ls = x1l_ls; +x1l_ls = xl_ls; +y2l_ls = y1l_ls; +y1l_ls = yl_ls; + +yr_ls = a0_ls*xr_ls + a1_ls*x1r_ls + a2_ls*x2r_ls + b1_ls*y1r_ls + b2_ls*y2r_ls; +x2r_ls = x1r_ls; +x1r_ls = xr_ls; +y2r_ls = y1r_ls; +y1r_ls = yr_ls; + + +//HS +xl_hs = yl_ls; +xr_hs = yr_ls; + +yl_hs = a0_hs*xl_hs + a1_hs*x1l_hs + a2_hs*x2l_hs + b1_hs*y1l_hs + b2_hs*y2l_hs; +x2l_hs = x1l_hs; +x1l_hs = xl_hs; +y2l_hs = y1l_hs; +y1l_hs = yl_hs; + +yr_hs = a0_hs*xr_hs + a1_hs*x1r_hs + a2_hs*x2r_hs + b1_hs*y1r_hs + b2_hs*y2r_hs; +x2r_hs = x1r_hs; +x1r_hs = xr_hs; +y2r_hs = y1r_hs; +y1r_hs = yr_hs; + +spl0 = yl_hs*outgain; +spl1 = yr_hs*outgain; + +); + +@gfx 100 32 +gfx_x=gfx_y=5; +gfx_lineto(gfx_x, gfx_y,0); +gfx_r=gfx_b=0; +gfx_g=gfx_a=1; +gfx_drawchar($'L'); +gfx_drawchar($'S'); +gfx_drawchar($' '); +gfx_drawchar($'='); +gfx_drawchar($' '); +gfx_drawnumber(freq1,0); +gfx_drawchar($' '); +gfx_drawchar($'H'); +gfx_drawchar($'z'); +gfx_y += 15; +gfx_x = 5; +gfx_drawchar($'H'); +gfx_drawchar($'S'); +gfx_drawchar($' '); +gfx_drawchar($'='); +gfx_drawchar($' '); +gfx_drawnumber(freq2,0); +gfx_drawchar($' '); +gfx_drawchar($'H'); +gfx_drawchar($'z'); diff --git a/Effects/Liteon/simplelp6db b/Effects/Liteon/simplelp6db new file mode 100644 index 0000000..cbb5759 --- /dev/null +++ b/Effects/Liteon/simplelp6db @@ -0,0 +1,105 @@ +// (C) 2008-2009, Lubomir I. Ivanov + +// NO WARRANTY IS GRANTED. THIS PLUG-IN IS PROVIDED ON AN "AS IS" BASIS, WITHOUT +// WARRANTY OF ANY KIND. NO LIABILITY IS GRANTED, INCLUDING, BUT NOT LIMITED TO, +// ANY DIRECT OR INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGE ARISING +// OUT OF THE USE OR INABILITY TO USE THIS PLUG-IN, COMPUTER FAILTURE OF +// MALFUNCTION INCLUDED. THE USE OF THE SOURCE CODE, EITHER PARTIALLY OR IN +// TOTAL, IS ONLY GRANTED, IF USED IN THE SENSE OF THE AUTHOR'S INTENTION, AND +// USED WITH ACKNOWLEDGEMENT OF THE AUTHOR. FURTHERMORE IS THIS PLUG-IN A THIRD +// PARTY CONTRIBUTION, EVEN IF INCLUDED IN REAPER(TM), COCKOS INCORPORATED OR +// ITS AFFILIATES HAVE NOTHING TO DO WITH IT. LAST BUT NOT LEAST, BY USING THIS +// PLUG-IN YOU RELINQUISH YOUR CLAIM TO SUE IT'S AUTHOR, AS WELL AS THE CLAIM TO +// ENTRUST SOMEBODY ELSE WITH DOING SO. +// +// Released under GPL: +// . + +//================================================= +desc: Simple 1-Pole Filter +//tags: filter +//author: Liteon + +slider1:0<0,1,1{Stereo,Mono}>Processing +slider2:0<0,1,1{LP,HP}>Filter Type +slider3:100<0,100,0.05>Cutoff (Scale) +slider4:0<-25,25,0.05>Output (dB) + +in_pin:left input +in_pin:right input +out_pin:left output +out_pin:right output + +//================================================= +@slider +//mono +mono = slider1; + +//type +hp = slider2; + +//exp scale +sx = 16+slider3*1.20103; +cutoff = floor(exp(sx*log(1.059))*8.17742); + +//coeff +cutoff = min(cutoff,20000); +lp_cut = 2*$pi*cutoff; +lp_n = 1/(lp_cut+ 3*srate); +lp_b1 = (3*srate - lp_cut)*lp_n; +lp_a0 = lp_cut*lp_n; + +//outgain +outgain = 10^(slider4/20); + +//================================================= +@sample +//stereo +mono == 0 ? ( + +//recursion +inl = spl0; +inr = spl1; +lp_outl = 2*inl*lp_a0 + lp_outl*lp_b1; +lp_outr = 2*inr*lp_a0 + lp_outr*lp_b1; + +//type +hp == 0 ? ( + spl0 = lp_outl*outgain; + spl1 = lp_outr*outgain; +) : ( + spl0 = (inl-lp_outl)*outgain; + spl1 = (inr-lp_outr)*outgain; +); + +) : ( +//mono + +//recursion +inl = (spl0+spl1)/2; +lp_outl = 2*inl*lp_a0 + lp_outl*lp_b1; + +//type +hp == 0 ? ( + spl0=spl1=lp_outl*outgain; +) : ( + spl0=spl1=(inl-lp_outl)*outgain; +); + +); + +//================================================= +@gfx 100 16 +//draw freq scale numbers +gfx_x=gfx_y=5; +gfx_lineto(gfx_x, gfx_y,0); +gfx_r=gfx_b=0; +gfx_g=gfx_a=1; +gfx_drawchar($'F'); +gfx_drawchar($' '); +gfx_drawchar($'='); +gfx_drawchar($' '); +gfx_drawnumber(cutoff,0); +gfx_drawchar($' '); +gfx_drawchar($'H'); +gfx_drawchar($'z'); diff --git a/Effects/Liteon/statevariable b/Effects/Liteon/statevariable new file mode 100644 index 0000000..1c6d44f --- /dev/null +++ b/Effects/Liteon/statevariable @@ -0,0 +1,573 @@ +// (C) 2008-2009, Lubomir I. Ivanov + +// NO WARRANTY IS GRANTED. THIS PLUG-IN IS PROVIDED ON AN "AS IS" BASIS, WITHOUT +// WARRANTY OF ANY KIND. NO LIABILITY IS GRANTED, INCLUDING, BUT NOT LIMITED TO, +// ANY DIRECT OR INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGE ARISING +// OUT OF THE USE OR INABILITY TO USE THIS PLUG-IN, COMPUTER FAILTURE OF +// MALFUNCTION INCLUDED. THE USE OF THE SOURCE CODE, EITHER PARTIALLY OR IN +// TOTAL, IS ONLY GRANTED, IF USED IN THE SENSE OF THE AUTHOR'S INTENTION, AND +// USED WITH ACKNOWLEDGEMENT OF THE AUTHOR. FURTHERMORE IS THIS PLUG-IN A THIRD +// PARTY CONTRIBUTION, EVEN IF INCLUDED IN REAPER(TM), COCKOS INCORPORATED OR +// ITS AFFILIATES HAVE NOTHING TO DO WITH IT. LAST BUT NOT LEAST, BY USING THIS +// PLUG-IN YOU RELINQUISH YOUR CLAIM TO SUE IT'S AUTHOR, AS WELL AS THE CLAIM TO +// ENTRUST SOMEBODY ELSE WITH DOING SO. +// +// Released under GPL: +// . +// +//****************************************************************************** +// State Variable (Morphing) filter +// AppleFilter - butterworth filter implementation +// original port from apple.com au tutorial (c++) +// added coefficients for HP, BP, BR +// :::NOTE: cutoff glitches when automated fast::: +// :::Better interpolation or oversampling is required::: +//****************************************************************************** + +desc: State Variable Morphing Filter +//tags: filter multimode +//author: Liteon + +slider1:0<0,1,1{Stereo,Mono}>Processing +slider2:0.5<0,1,0.001>X (Morph) +slider3:0.5<0,1,0.001>Y (Morph) +slider4:50<0,100,0.01>Frequency (Scale) +slider5:6<0,24,0.01>Resonance (dB) +slider6:100<0,100,0.01>Filter Amount (%) +//slider7:0<0,100,0.01>Flux (%) +slider7:0<-26,26,0.01>Output (-inf/+26dB) + +in_pin:left input +in_pin:right input +out_pin:left output +out_pin:right output + +@init +step = 200; +old_f_x = 39; +old_f_y = 39; +old_c_x = step+39; +old_c_y = 191; + +@block +//---interpolate filters +//lp +d_a0_lp = (tgt_a0_lp-src_a0_lp)/samplesblock; +a0_lp = src_a0_lp; +src_a0_lp = tgt_a0_lp; +d_a1_lp = (tgt_a1_lp-src_a1_lp)/samplesblock; +a1_lp = src_a1_lp; +src_a1_lp = tgt_a1_lp; +d_a2_lp = (tgt_a2_lp-src_a2_lp)/samplesblock; +a2_lp = src_a2_lp; +src_a2_lp = tgt_a2_lp; +d_b1_lp = (tgt_b1_lp-src_b1_lp)/samplesblock; +b1_lp = src_b1_lp; +src_b1_lp = tgt_b1_lp; +d_b2_lp = (tgt_b2_lp-src_b2_lp)/samplesblock; +b2_lp = src_b2_lp; +src_b2_lp = tgt_b2_lp; +//hp +d_a0_hp = (tgt_a0_hp-src_a0_hp)/samplesblock; +a0_hp = src_a0_hp; +src_a0_hp = tgt_a0_hp; +d_a1_hp = (tgt_a1_hp-src_a1_hp)/samplesblock; +a1_hp = src_a1_hp; +src_a1_hp = tgt_a1_hp; +d_a2_hp = (tgt_a2_hp-src_a2_hp)/samplesblock; +a2_hp = src_a2_hp; +src_a2_hp = tgt_a2_hp; +d_b1_hp = (tgt_b1_hp-src_b1_hp)/samplesblock; +b1_hp = src_b1_hp; +src_b1_hp = tgt_b1_hp; +d_b2_hp = (tgt_b2_hp-src_b2_hp)/samplesblock; +b2_hp = src_b2_hp; +src_b2_hp = tgt_b2_hp; +//bp +d_a0_bp = (tgt_a0_bp-src_a0_bp)/samplesblock; +a0_bp = src_a0_bp; +src_a0_bp = tgt_a0_bp; +d_b1_bp = (tgt_b1_bp-src_b1_bp)/samplesblock; +b1_bp = src_b1_bp; +src_b1_bp = tgt_b1_bp; +d_b2_bp = (tgt_b2_bp-src_b2_bp)/samplesblock; +b2_bp = src_b2_bp; +src_b2_bp = tgt_b2_bp; +//br +d_a0_br = (tgt_a0_br-src_a0_br)/samplesblock; +a0_br = src_a0_br; +src_a0_br = tgt_a0_br; +d_a1_br = (tgt_a1_br-src_a1_br)/samplesblock; +a1_br = src_a1_br; +src_a1_br = tgt_a1_br; +d_b1_br = (tgt_b1_br-src_b1_br)/samplesblock; +b1_br = src_b1_br; +src_b1_br = tgt_b1_br; +d_b2_br = (tgt_b2_br-src_b2_br)/samplesblock; +b2_br = src_b2_br; +src_b2_br = tgt_b2_br; + +//----------interpolate x,y +d_x = (tgt_x-src_x)/samplesblock; +x = src_x; +src_x = tgt_x; +d_y = (tgt_y-src_y)/samplesblock; +y = src_y; +src_y = tgt_y; + +@sample + +//---interpolate filters +//lp +a0_lp += d_a0_lp; +a1_lp += d_a1_lp; +a2_lp += d_a2_lp; +b1_lp += d_b1_lp; +b2_lp += d_b2_lp; +//hp +a0_hp += d_a0_hp; +a1_hp += d_a1_hp; +a2_hp += d_a2_hp; +b1_hp += d_b1_hp; +b2_hp += d_b2_hp; +//bp +a0_bp += d_a0_bp; +b1_bp += d_b1_bp; +b2_bp += d_b2_bp; +//br +a0_br += d_a0_br; +a1_br += d_a1_br; +b1_br += d_b1_br; +b2_br += d_b2_br; + +//---------interpolate x,y +x += d_x; +y += d_y; + +//----------------------------------------- +//mono +slider1 == 1 ? ( +inl = (spl0+spl1)/2; + +//lp +out_lp_l = a0_lp*inl+a1_lp*mem1_lp_l+a2_lp*mem2_lp_l-b1_lp*mem3_lp_l-b2_lp*mem4_lp_l; +mem2_lp_l = mem1_lp_l; +mem1_lp_l = inl; +mem4_lp_l = mem3_lp_l; +mem3_lp_l = out_lp_l; + +//hp +out_hp_l = a0_hp*inl+a1_hp*mem1_hp_l+a2_hp*mem2_hp_l-b1_hp*mem3_hp_l-b2_hp*mem4_hp_l; +mem2_hp_l = mem1_hp_l; +mem1_hp_l = inl; +mem4_hp_l = mem3_hp_l; +mem3_hp_l = out_hp_l; + +//bp +out_bp_l = a0_bp*inl-a0_bp*mem2_bp_l-b1_bp*mem3_bp_l-b2_bp*mem4_bp_l; +mem2_bp_l = mem1_bp_l; +mem1_bp_l = inl; +mem4_bp_l = mem3_bp_l; +mem3_bp_l = out_bp_l; + +//br +out_br_l = a0_br*inl+a1_br*mem1_br_l+a0_br*mem2_br_l-b1_br*mem3_br_l-b2_br*mem4_br_l; +mem2_br_l = mem1_br_l; +mem1_br_l = inl; +mem4_br_l = mem3_br_l; +mem3_br_l = out_br_l; + +//out + +//hp, lp +pair1_l = out_lp_l*y+out_hp_l*(1-y); +//br, bp +pair2_l = out_bp_l*y+out_br_l*(1-y); +//out +outl = pair2_l*x+pair1_l*(1-x); + +spl0 = spl1 = (outl*(1-amount)+inl*amount)*outgain; +) : ( +//---------------------stereo + +//-------LEFT + +inl = spl0; + +//lp +out_lp_l = a0_lp*inl+a1_lp*mem1_lp_l+a2_lp*mem2_lp_l-b1_lp*mem3_lp_l-b2_lp*mem4_lp_l; +mem2_lp_l = mem1_lp_l; +mem1_lp_l = inl; +mem4_lp_l = mem3_lp_l; +mem3_lp_l = out_lp_l; + +//hp +out_hp_l = a0_hp*inl+a1_hp*mem1_hp_l+a2_hp*mem2_hp_l-b1_hp*mem3_hp_l-b2_hp*mem4_hp_l; +mem2_hp_l = mem1_hp_l; +mem1_hp_l = inl; +mem4_hp_l = mem3_hp_l; +mem3_hp_l = out_hp_l; + +//bp +out_bp_l = a0_bp*inl-a0_bp*mem2_bp_l-b1_bp*mem3_bp_l-b2_bp*mem4_bp_l; +mem2_bp_l = mem1_bp_l; +mem1_bp_l = inl; +mem4_bp_l = mem3_bp_l; +mem3_bp_l = out_bp_l; + +//br +out_br_l = a0_br*inl+a1_br*mem1_br_l+a0_br*mem2_br_l-b1_br*mem3_br_l-b2_br*mem4_br_l; +mem2_br_l = mem1_br_l; +mem1_br_l = inl; +mem4_br_l = mem3_br_l; +mem3_br_l = out_br_l; + +//out + +//hp, lp +pair1_l = out_lp_l*y+out_hp_l*(1-y); +//br, bp +pair2_l = out_bp_l*y+out_br_l*(1-y); +//out +outl = pair2_l*x+pair1_l*(1-x); + +spl0 = (outl*(1-amount)+inl*amount)*outgain; + +//----------RIGHT + +inr = spl1; + +//lp +out_lp_r = a0_lp*inr+a1_lp*mem1_lp_r+a2_lp*mem2_lp_r-b1_lp*mem3_lp_r-b2_lp*mem4_lp_r; +mem2_lp_r = mem1_lp_r; +mem1_lp_r = inr; +mem4_lp_r = mem3_lp_r; +mem3_lp_r = out_lp_r; + +//hp +out_hp_r = a0_hp*inr+a1_hp*mem1_hp_r+a2_hp*mem2_hp_r-b1_hp*mem3_hp_r-b2_hp*mem4_hp_r; +mem2_hp_r = mem1_hp_r; +mem1_hp_r = inr; +mem4_hp_r = mem3_hp_r; +mem3_hp_r = out_hp_r; + +//bp +out_bp_r = a0_bp*inr-a0_bp*mem2_bp_r-b1_bp*mem3_bp_r-b2_bp*mem4_bp_r; +mem2_bp_r = mem1_bp_r; +mem1_bp_r = inr; +mem4_bp_r = mem3_bp_r; +mem3_bp_r = out_bp_r; + +//br +out_br_r = a0_br*inr+a1_br*mem1_br_r+a0_br*mem2_br_r-b1_br*mem3_br_r-b2_br*mem4_br_r; +mem2_br_r = mem1_br_r; +mem1_br_r = inr; +mem4_br_r = mem3_br_r; +mem3_br_r = out_br_r; + +//out + +//hp, lp +pair1_r = out_lp_r*y+out_hp_r*(1-y); +//br, bp +pair2_r = out_bp_r*y+out_br_r*(1-y); +//out +outr = pair2_r*x+pair1_r*(1-x); + +spl1 = (outr*(1-amount)+inr*amount)*outgain; + +); + +@gfx 100 220 +gfx_r=0.5; +gfx_b=0.5; +gfx_g=1; +gfx_a=1; +//amnt +gfx_x=32; +gfx_y=12; +gfx_drawchar($'A'); +gfx_drawchar($'M'); +gfx_drawchar($'N'); +gfx_drawchar($'T'); +gfx_drawchar($' '); +gfx_drawchar($'='); +gfx_drawchar($' '); +gfx_drawnumber(slider6,0); +gfx_drawchar($' '); +gfx_drawchar($'%'); +//freq +gfx_x=230; +gfx_y=12; +gfx_drawchar($'F'); +gfx_drawchar($' '); +gfx_drawchar($'='); +gfx_drawchar($' '); +gfx_drawnumber(cx,0); +gfx_drawchar($' '); +gfx_drawchar($'H'); +gfx_drawchar($'z'); +//filter box +gfx_r=1; +gfx_b=1; +gfx_g=1; +gfx_a=1; +gfx_y = 30; +gfx_x = 30; +gfx_rectto(200,200); +gfx_r=0; +gfx_b=0.6; +gfx_g=0; +gfx_a=1; +gfx_y = 32; +gfx_x = 32; +gfx_rectto(198,198); +//filter text +gfx_r=1; +gfx_b=1; +gfx_g=1; +gfx_a=1; +gfx_x = 35; +gfx_y = 35; +gfx_drawchar($'H'); +gfx_drawchar($'P'); +gfx_x = 35; +gfx_y = 187; +gfx_drawchar($'L'); +gfx_drawchar($'P'); +gfx_x = 178; +gfx_y = 35; +gfx_drawchar($'B'); +gfx_drawchar($'R'); +gfx_x = 178; +gfx_y = 187; +gfx_drawchar($'B'); +gfx_drawchar($'P'); +//cut,res box +gfx_r=1; +gfx_b=1; +gfx_g=1; +gfx_a=1; +gfx_y = 30; +gfx_x = 30+step; +gfx_rectto(200+step,200); +gfx_r=0; +gfx_b=0.6; +gfx_g=0; +gfx_a=1; +gfx_y = 32; +gfx_x = 32+step; +gfx_rectto(198+step,198); +//cut,res text +gfx_r=1; +gfx_b=1; +gfx_g=1; +gfx_a=1; +gfx_x = 35+step; +gfx_y = 35; +gfx_drawchar($'R'); +gfx_drawchar($'E'); +gfx_drawchar($'S'); +gfx_x = 170+step; +gfx_y = 187; +gfx_drawchar($'C'); +gfx_drawchar($'U'); +gfx_drawchar($'T'); +//cut,res lines +gfx_r=1; +gfx_b=1; +gfx_g=1; +gfx_a=0.7; +gfx_x = 40+step; +gfx_y = 90; +gfx_lineto(40+step,50,0.5); +gfx_x = 110+step; +gfx_y = 190; +gfx_lineto(160+step,190,0.5); +//cross lines +gfx_x = 228/2; +gfx_y = 30; +gfx_lineto(228/2,198,1); +gfx_x = 30; +gfx_y = 228/2; +gfx_lineto(198,228/2,1); +gfx_x = step+30; +gfx_y = 200; +gfx_lineto(398,30,1); +gfx_x = step+30; +gfx_y = 200; +gfx_lineto(398,30,1); + + +//-------------get mouse +mouse_cap == 1 && mouse_x < step+15 && target != 2 ? ( + +target = 1; +//-------marker1 +old_f_x = mouse_x; +old_f_y = mouse_y; +old_f_x = max(39,min(old_f_x,191)); +old_f_y = max(39,min(old_f_y,191)); + +//update sliders +slider2 = s2 = (old_f_x-39)/(191-39); +slider3 = s3 = (old_f_y-39)/(191-39); +sliderchange(slider2); +sliderchange(slider3); +); + +mouse_cap == 1 && mouse_x > step+15 && target != 1? ( + +target = 2; +//--------marker2 +old_c_x = mouse_x; +old_c_y = mouse_y; +old_c_x = max(39+step,min(old_c_x,191+step)); +old_c_y = max(39,min(old_c_y,191)); + +//update sliders +slider4 = s4 = (old_c_x-39-step)/(191-39)*100; +slider5 = s5 = 24-(old_c_y-39)/(191-39)*24; +sliderchange(slider4); +sliderchange(slider5); +); + +mouse_cap == 0 ? ( +target = 0; +//slider to gfx +old_f_x = slider2*(191-39)+39; +old_f_y = slider3*(191-39)+39; +old_c_x = slider4*(191-39)/100+39+step; +old_c_y = 191-slider5*(191-39)/24; + +); + +//---------draw markers +//----marker1 +gfx_r=0; +gfx_b=0.5; +gfx_g=1; +gfx_a=0.7; +gfx_x = old_f_x-7; +gfx_y = old_f_y-7; +gfx_rectto(old_f_x+7,old_f_y+7); +//---marker2 +gfx_r=0; +gfx_b=0.5; +gfx_g=1; +gfx_a=0.7; +gfx_x = old_c_x-7; +gfx_y = old_c_y-7; +gfx_rectto(old_c_x+7,old_c_y+7); + +//--------------------------------------------------------------- +//@slider code here +//---------------mix +amount = (100-slider6)/100; +outgain = 10^(slider7/20); +slider7 == -24 ? outgain = 0; +// x,y scheme +// +// hp - br +// | | +// lp - bp +// +tgt_x = slider2; +tgt_y = slider3; +//-------------filters +sx = 16+slider4*1.20103; +cx = floor(exp(sx*log(1.059))*8.17742); +cutoff = 2*cx/srate; +cx < 50 ? ( +res = 1; +) : ( +res = 10^(0.05*(-slider5+1.5)); +); +//lp +k = 0.5*res*sin($pi*cutoff); +c1 = 0.5*(1-k)/(1+k); +c2 = (0.5+c1)*cos($pi*cutoff); +c3 = (0.5+c1-c2)*0.25; +tgt_a0_lp = 2*c3; +tgt_a1_lp = 4*c3; +tgt_a2_lp = 2*c3; +tgt_b1_lp = -2*c2; +tgt_b2_lp = 2*c1; +//hp +c3 = (0.5+c1+c2)*0.25; +tgt_a0_hp = 2*c3; +tgt_a1_hp = -4*c3; +tgt_a2_hp = 2*c3; +tgt_b1_hp = -2*c2; +tgt_b2_hp = 2*c1; +//bp +c3 = (0.5+c1-c2)*0.25; +tgt_a0_bp = k/(1+k); +tgt_b1_bp = -2*c2; +tgt_b2_bp = 2*c1; +//br +k = 2*res*sin($pi*cutoff); +c1 = 0.5*(1-k)/(1+k); +c2 = (0.5+c1)*cos($pi*cutoff); +c3 = (0.5+c1-c2)*0.25; +tgt_a0_br = 1/(1+k); +tgt_a1_br = tgt_a0_br*(-2*cos($pi*cutoff)); +tgt_b1_br = -2*c2; +tgt_b2_br = 2*c1; + + + +@slider + +//---------------mix +amount = (100-slider6)/100; +outgain = 10^(slider7/20); +slider7 == -24 ? outgain = 0; +// x,y scheme +// +// hp - br +// | | +// lp - bp +// +tgt_x = slider2; +tgt_y = slider3; +//-------------filters +sx = 16+slider4*1.20103; +cx = floor(exp(sx*log(1.059))*8.17742); +cutoff = 2*cx/srate; +cx < 50 ? ( +res = 1; +) : ( +res = 10^(0.05*(-slider5+1.5)); +); +//lp +k = 0.5*res*sin($pi*cutoff); +c1 = 0.5*(1-k)/(1+k); +c2 = (0.5+c1)*cos($pi*cutoff); +c3 = (0.5+c1-c2)*0.25; +tgt_a0_lp = 2*c3; +tgt_a1_lp = 4*c3; +tgt_a2_lp = 2*c3; +tgt_b1_lp = -2*c2; +tgt_b2_lp = 2*c1; +//hp +c3 = (0.5+c1+c2)*0.25; +tgt_a0_hp = 2*c3; +tgt_a1_hp = -4*c3; +tgt_a2_hp = 2*c3; +tgt_b1_hp = -2*c2; +tgt_b2_hp = 2*c1; +//bp +c3 = (0.5+c1-c2)*0.25; +tgt_a0_bp = k/(1+k); +tgt_b1_bp = -2*c2; +tgt_b2_bp = 2*c1; +//br +k = 2*res*sin($pi*cutoff); +c1 = 0.5*(1-k)/(1+k); +c2 = (0.5+c1)*cos($pi*cutoff); +c3 = (0.5+c1-c2)*0.25; +tgt_a0_br = 1/(1+k); +tgt_a1_br = tgt_a0_br*(-2*cos($pi*cutoff)); +tgt_b1_br = -2*c2; +tgt_b2_br = 2*c1; diff --git a/Effects/Liteon/tilteq b/Effects/Liteon/tilteq new file mode 100644 index 0000000..60b6abb --- /dev/null +++ b/Effects/Liteon/tilteq @@ -0,0 +1,108 @@ +// (C) 2009, Lubomir I. Ivanov + +// NO WARRANTY IS GRANTED. THIS PLUG-IN IS PROVIDED ON AN "AS IS" BASIS, WITHOUT +// WARRANTY OF ANY KIND. NO LIABILITY IS GRANTED, INCLUDING, BUT NOT LIMITED TO, +// ANY DIRECT OR INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGE ARISING +// OUT OF THE USE OR INABILITY TO USE THIS PLUG-IN, COMPUTER FAILTURE OF +// MALFUNCTION INCLUDED. THE USE OF THE SOURCE CODE, EITHER PARTIALLY OR IN +// TOTAL, IS ONLY GRANTED, IF USED IN THE SENSE OF THE AUTHOR'S INTENTION, AND +// USED WITH ACKNOWLEDGEMENT OF THE AUTHOR. FURTHERMORE IS THIS PLUG-IN A THIRD +// PARTY CONTRIBUTION, EVEN IF INCLUDED IN REAPER(TM), COCKOS INCORPORATED OR +// ITS AFFILIATES HAVE NOTHING TO DO WITH IT. LAST BUT NOT LEAST, BY USING THIS +// PLUG-IN YOU RELINQUISH YOUR CLAIM TO SUE IT'S AUTHOR, AS WELL AS THE CLAIM TO +// ENTRUST SOMEBODY ELSE WITH DOING SO. +// +// Released under GPL: +// . + +desc:Tilt Equalizer +//tags: equalizer +//author: Liteon + +slider1:0<0,1,1{Stereo,Mono}>Processing +slider2:50<0,100,0.05>Center Frequency (Scale) +slider3:0<-6,6,0.05>Tilt (Low/High) (dB) +slider4:0<-25,25,0.05>Output Gain (dB) + +in_pin:left input +in_pin:right input +out_pin:left output +out_pin:right output + +@init +amp = 6/log(2); +denorm = 10^-30; +pi = 22/7; +sr3 = 3*srate; + +@slider +mono = slider1; +gain = slider3; +outgain = exp(slider4/amp); + +//conditition +gfactor = 4; +gain > 0 ? ( + g1 = -gfactor*gain; + g2 = gain; +) : ( + g1 = -gain; + g2 = gfactor*gain; +); + +//two separate gains +lgain = exp(g1/amp)-1; +hgain = exp(g2/amp)-1; + +//f0 +sx = 16+slider2*1.20103; +f0 = floor(exp(sx*log(1.059))*8.17742); + +//filter +omega = 2*pi*f0; +n = 1/(sr3 + omega); +a0 = 2*omega*n; +b1 = (sr3 - omega)*n; + +@sample +mono == 1 ? ( +//process mono + +input = (spl0+spl1)/2; +lp_out = a0*input + b1*lp_out; +output = input + lgain*lp_out + hgain*(input - lp_out); + +spl0=spl1=output*outgain+denorm; + +) : ( +//process stereo + +input = spl0; +lp_out = a0*input + b1*lp_out; +output = input + lgain*lp_out + hgain*(input - lp_out); + +spl0=output*outgain+denorm; + +input_r = spl1; +lp_out_r = a0*input_r + b1*lp_out_r; +output_r = input_r + lgain*lp_out_r + hgain*(input_r - lp_out_r); + +spl1=output_r*outgain+denorm; +); + +@gfx 100 16 +//draw freq scale numbers +gfx_x=gfx_y=5; +gfx_lineto(gfx_x, gfx_y,0); +gfx_r=0; +gfx_b=0.8; +gfx_g=0.6; +gfx_a=1; +gfx_drawchar($'F'); +gfx_drawchar($' '); +gfx_drawchar($'='); +gfx_drawchar($' '); +gfx_drawnumber(f0,0); +gfx_drawchar($' '); +gfx_drawchar($'H'); +gfx_drawchar($'z'); diff --git a/Effects/Liteon/vumetergfx b/Effects/Liteon/vumetergfx new file mode 100644 index 0000000..d44b376 --- /dev/null +++ b/Effects/Liteon/vumetergfx @@ -0,0 +1,529 @@ +// (C) 2008-2009, Lubomir I. Ivanov + +// NO WARRANTY IS GRANTED. THIS PLUG-IN IS PROVIDED ON AN "AS IS" BASIS, WITHOUT +// WARRANTY OF ANY KIND. NO LIABILITY IS GRANTED, INCLUDING, BUT NOT LIMITED TO, +// ANY DIRECT OR INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGE ARISING +// OUT OF THE USE OR INABILITY TO USE THIS PLUG-IN, COMPUTER FAILTURE OF +// MALFUNCTION INCLUDED. THE USE OF THE SOURCE CODE, EITHER PARTIALLY OR IN +// TOTAL, IS ONLY GRANTED, IF USED IN THE SENSE OF THE AUTHOR'S INTENTION, AND +// USED WITH ACKNOWLEDGEMENT OF THE AUTHOR. FURTHERMORE IS THIS PLUG-IN A THIRD +// PARTY CONTRIBUTION, EVEN IF INCLUDED IN REAPER(TM), COCKOS INCORPORATED OR +// ITS AFFILIATES HAVE NOTHING TO DO WITH IT. LAST BUT NOT LEAST, BY USING THIS +// PLUG-IN YOU RELINQUISH YOUR CLAIM TO SUE IT'S AUTHOR, AS WELL AS THE CLAIM TO +// ENTRUST SOMEBODY ELSE WITH DOING SO. +// +// Released under GPL: +// . + +//****************************************************************************** +//References: cockos, wiki, math books +//****************************************************************************** + +desc: VU Meter +//tags: analysis visualization metering stereo +//author: Liteon + +slider1:50<1,300,1>Response (ms) +slider2:5<1,10,0.1>Release (Slow/Fast) + +in_pin:left input +in_pin:right input +out_pin:none + +@init +//st - sample time, sc - db scale, rp - right channel y pading, r - radius +sc = 6/log(2); +rp = 261; +r = 200; +yl = yr = ylt = yrt = 74; +xl = xr = 66; +ms = slider1; +cs = 0; +suml = sumr = 0; +rms_i = 0; +i_max = 36; + +@slider +rel = slider2; +ms = slider1; +st = ms*srate/1000; +hold = (0.001*ms*srate)*36; +cs = 0; +suml = sumr = 0; + +@block +rmsl = floor(sc*log(sqrt(suml/cs))*100)/100; +rmsr = floor(sc*log(sqrt(sumr/cs))*100)/100; + +rms_i == i_max ? ( + rmsl_gfx = rmsl; + rmsr_gfx = rmsr; + rms_i = 0; +); +rms_i += 1; + +bscnt > st ? ( + + ool = log(pvl)*sc; + oor = log(pvr)*sc; + + //get x from exp scale + xlt = floor(exp(log(1.055)*2.1*ool)*285); + xrt = floor(exp(log(1.055)*2.1*oor)*285); + + //get y from x and radius - r + l=sqrt(sqr(r)+sqr(212-xlt)); + h=((l-r)*r/l); + m=sqrt(sqr(l-r)-sqr(h)); + ylt=35+h; + xlt < 212 ? xlt=xlt+m : xlt=xlt-m; + + l=sqrt(sqr(r)+sqr(212-xrt)); + h=((l-r)*r/l); + m=sqrt(sqr(l-r)-sqr(h)); + yrt=35+h; + xrt < 212 ? xrt=xrt+m : xrt=xrt-m; + + //update x,y,out + old_xl < xlt ? (xl = min(max(xlt,66),375); yl = ylt; olt = ool;); + old_xr < xrt ? (xr = min(max(xrt,66),375); yr = yrt; ort = oor;); + bscnt = pvl = pvr = 0; +); + +//indicator fall-back +fallback = rel/2*samplesblock/1024; +fbi_l = exp(xl/512)*fallback; +fbi_r = exp(xr/512)*fallback; +xl > 66 ? xl -= fbi_l; +xr > 66 ? xr -= fbi_r; + +old_xl = xl; +old_xr = xr; + +bscnt += samplesblock; + +//limit x +xl = min(max(xl,66),375); +xr = min(max(xr,66),375); + +//get y after fall-back +yl=35; +l=sqrt(sqr(r)+sqr(212-xl)); +h=((l-r)*r/l); +yl=floor(yl+h); + +yr=35; +l=sqrt(sqr(r)+sqr(212-xr)); +h=((l-r)*r/l); +yr=floor(yr+h); + + +@sample +pvl = max(pvl,abs(spl0)); +pvr = max(pvr,abs(spl1)); +cs == hold ? ( +cs = 0; +suml = 0; +sumr = 0; +) : ( +cs += 1; +suml += sqr(abs(spl0)); +sumr += sqr(abs(spl1)); +); + +@gfx 425 454 +//**************************************************************** left +//red scale +gfx_r = gfx_a = 1; +gfx_g = gfx_b =0; +gfx_x = 283; +gfx_y = 28; +gfx_drawnumber(0,0); +gfx_x = 370; +gfx_y = 55; +gfx_drawnumber(3,0); +gfx_x = 405; +gfx_y = 57; +gfx_drawchar($'+'); +gfx_x = 283; +gfx_y = 38; +gfx_lineto(269,76,0.5); +gfx_x = 311; +gfx_y = 43; +gfx_lineto(293,80,1); +gfx_x = 342; +gfx_y = 51; +gfx_lineto(318,85,1); +gfx_x = 370; +gfx_y = 65; +gfx_lineto(344,93,0.5); + +//white scale +gfx_r = gfx_g = gfx_b = 1; +gfx_a = 1; +gfx_x = 12; +gfx_y = 60; +gfx_drawchar($'-'); +gfx_x = 41; +gfx_y = 53; +gfx_drawnumber(20,0); +gfx_x = 80; +gfx_y = 37; +gfx_drawnumber(10,0); +gfx_x = 125; +gfx_y = 29; +gfx_drawnumber(7,0); +gfx_x = 157; +gfx_y = 25; +gfx_drawnumber(5,0); +gfx_x = 198; +gfx_y = 24; +gfx_drawnumber(3,0); +gfx_x = 56; +gfx_y = 63; +gfx_lineto(82,92,0.5); +gfx_x = 95; +gfx_y = 47; +gfx_lineto(119,82,0.5); +gfx_x = 130; +gfx_y = 39; +gfx_lineto(146,77,0.5); +gfx_x = 145; +gfx_y = 37; +gfx_lineto(158,75,1); +gfx_x = 162; +gfx_y = 35; +gfx_lineto(171,74,0.5); +gfx_x = 180; +gfx_y = 34; +gfx_lineto(187,74,1); +gfx_x = 202; +gfx_y = 34; +gfx_lineto(204,72,0.5); +gfx_x = 227; +gfx_y = 34; +gfx_lineto(223,73,1); +gfx_x = 253; +gfx_y = 35; +gfx_lineto(245,73,1); + +//vu box border +gfx_r = gfx_g = gfx_b = 0.75; +gfx_a = 1; +gfx_x = 198; +gfx_y = 108; +gfx_rectto(241,139); +//vu box +gfx_a = 1; +gfx_r = 0.5; +gfx_g = gfx_b = 0.1; +gfx_x = 200; +gfx_y = 110; +gfx_rectto(239,137); +//vu text +gfx_r = gfx_g = gfx_b = 0.85; +gfx_a = 1; +gfx_x = 212; +gfx_y = 120; +gfx_drawchar($'V'); +gfx_drawchar($'U'); + +//meter +olt > 0 ? ( + gfx_r = 1; + gfx_g = gfx_b = 0; +) : ( + gfx_r = gfx_g = gfx_b = 1; +); +gfx_a = 1; +gfx_x = 212; +gfx_y = 236; +gfx_lineto(xl,yl,1); +gfx_x = 211; +gfx_y = 236; +gfx_lineto(xl-1,yl,1); +gfx_x = 210; +gfx_y = 236; +gfx_lineto(xl-2,yl,1); + +//big border +gfx_r = gfx_g = gfx_b = 0.55; +gfx_a = 1; +gfx_x = 0; +gfx_y = 179; +gfx_rectto(425,180); +//big box 1 +gfx_r = 0.1; +gfx_g = 0.2; +gfx_b = 0.39; +gfx_a = 1; +gfx_x = 0; +gfx_y = 180; +gfx_rectto(425,261); +//big box 2 +gfx_r = gfx_g = gfx_b = 1; +gfx_a = 0.1; +gfx_x = 0; +gfx_y = 180; +gfx_rectto(425,190); +//big box 3 +gfx_r = gfx_g = gfx_b = 0; +gfx_a = 0.3; +gfx_x = 0; +gfx_y = 245; +gfx_rectto(425,261); +//ch textbox1 +gfx_r = gfx_g = gfx_b = 0; +gfx_a = 1; +gfx_x = 350; +gfx_y = 210; +gfx_rectto(415,227); +//ch textbox2 +gfx_r = gfx_g = gfx_b = 0; +gfx_a = 1; +gfx_x = 250; +gfx_y = 210; +gfx_rectto(315,227); +//ch text +gfx_r = gfx_g = gfx_b = 1; +gfx_a = 1; +gfx_x = 20; +gfx_y = 215; +gfx_drawchar($'L'); +gfx_drawchar($'E'); +gfx_drawchar($'F'); +gfx_drawchar($'T'); +gfx_x = 215; +gfx_drawchar($'R'); +gfx_drawchar($'M'); +gfx_drawchar($'S'); +gfx_x = 333; +gfx_drawchar($'P'); +gfx_x = 255; +rmsl_gfx > -300 ? ( + rmsl_gfx > 0.0 ? ( + gfx_r = 1; + gfx_g = gfx_b = 0; + gfx_drawchar($'+'); + ); + gfx_drawnumber(rmsl_gfx,2); +) : ( + gfx_drawchar($'-'); + gfx_drawchar($'I'); + gfx_drawchar($'N'); + gfx_drawchar($'F'); +); +gfx_r = 1; +gfx_g = gfx_b = 1; +gfx_x = 355; +olt > -300 ? ( + olt >= 0.0 ? ( + gfx_drawchar($'+'); + gfx_r = 1; + gfx_g = gfx_b = 0; + ); + gfx_drawnumber(olt,2); +) : ( + gfx_drawchar($'-'); + gfx_drawchar($'I'); + gfx_drawchar($'N'); + gfx_drawchar($'F'); +); + + +//**************************************************************** right +//red scale +gfx_r = gfx_a = 1; +gfx_g = gfx_b =0; +gfx_x = 283; +gfx_y = rp+28; +gfx_drawnumber(0,0); +gfx_x = 370; +gfx_y = rp+55; +gfx_drawnumber(3,0); +gfx_x = 405; +gfx_y = rp+57; +gfx_drawchar($'+'); +gfx_x = 283; +gfx_y = rp+38; +gfx_lineto(269,rp+76,0.5); +gfx_x = 311; +gfx_y = rp+43; +gfx_lineto(293,rp+80,1); +gfx_x = 342; +gfx_y = rp+51; +gfx_lineto(318,rp+85,1); +gfx_x = 370; +gfx_y = rp+65; +gfx_lineto(344,rp+93,0.5); + +//white scale +gfx_r = gfx_g = gfx_b = 1; +gfx_a = 1; +gfx_x = 12; +gfx_y = rp+60; +gfx_drawchar($'-'); +gfx_x = 41; +gfx_y = rp+53; +gfx_drawnumber(20,0); +gfx_x = 80; +gfx_y = rp+37; +gfx_drawnumber(10,0); +gfx_x = 125; +gfx_y = rp+29; +gfx_drawnumber(7,0); +gfx_x = 157; +gfx_y = rp+25; +gfx_drawnumber(5,0); +gfx_x = 198; +gfx_y = rp+24; +gfx_drawnumber(3,0); +gfx_x = 56; +gfx_y = rp+63; +gfx_lineto(82,rp+92,0.5); +gfx_x = 95; +gfx_y = rp+47; +gfx_lineto(119,rp+82,0.5); +gfx_x = 130; +gfx_y = rp+39; +gfx_lineto(146,rp+77,0.5); +gfx_x = 145; +gfx_y = rp+37; +gfx_lineto(158,rp+75,1); +gfx_x = 162; +gfx_y = rp+35; +gfx_lineto(171,rp+74,0.5); +gfx_x = 180; +gfx_y = rp+34; +gfx_lineto(187,rp+74,1); +gfx_x = 202; +gfx_y = rp+34; +gfx_lineto(204,rp+72,0.5); +gfx_x = 227; +gfx_y = rp+34; +gfx_lineto(223,rp+73,1); +gfx_x = 253; +gfx_y = rp+35; +gfx_lineto(245,rp+73,1); + +//vu box border +gfx_r = gfx_g = gfx_b = 0.75; +gfx_a = 1; +gfx_x = 198; +gfx_y = rp+108; +gfx_rectto(241,rp+139); +//vu box +gfx_a = 1; +gfx_r = 0.5; +gfx_g = gfx_b = 0.1; +gfx_x = 200; +gfx_y = rp+110; +gfx_rectto(239,rp+137); +//vu text +gfx_r = gfx_g = gfx_b = 0.85; +gfx_a = 1; +gfx_x = 212; +gfx_y = rp+120; +gfx_drawchar($'V'); +gfx_drawchar($'U'); + +//meter +ort > 0 ? ( + gfx_r = 1; + gfx_g = gfx_b = 0; +) : ( + gfx_r = gfx_g = gfx_b = 1; +); +gfx_a = 1; +gfx_x = 212; +gfx_y = rp+236; +gfx_lineto(xr,rp+yr,1); +gfx_x = 211; +gfx_y = rp+236; +gfx_lineto(xr-1,rp+yr,1); +gfx_x = 210; +gfx_y = rp+236; +gfx_lineto(xr-2,rp+yr,1); + +//big border +gfx_r = gfx_g = gfx_b = 0.55; +gfx_a = 1; +gfx_x = 0; +gfx_y = rp+179; +gfx_rectto(425,rp+180); +//big box 1 +gfx_r = 0.1; +gfx_g = 0.2; +gfx_b = 0.39; +gfx_a = 1; +gfx_x = 0; +gfx_y = rp+180; +gfx_rectto(425,rp+261); +//big box 2 +gfx_r = gfx_g = gfx_b = 1; +gfx_a = 0.1; +gfx_x = 0; +gfx_y = rp+180; +gfx_rectto(425,rp+190); +//big box 3 +gfx_r = gfx_g = gfx_b = 0; +gfx_a = 0.3; +gfx_x = 0; +gfx_y = rp+245; +gfx_rectto(425,rp+261); +//ch textbox1 +gfx_r = gfx_g = gfx_b = 0; +gfx_a = 1; +gfx_x = 350; +gfx_y = rp+210; +gfx_rectto(415,rp+227); +//ch textbox2 +gfx_r = gfx_g = gfx_b = 0; +gfx_a = 1; +gfx_x = 250; +gfx_y = rp+210; +gfx_rectto(315,rp+227); +//ch text +gfx_r = gfx_g = gfx_b = 1; +gfx_a = 1; +gfx_x = 20; +gfx_y = rp+215; +gfx_drawchar($'R'); +gfx_drawchar($'I'); +gfx_drawchar($'G'); +gfx_drawchar($'H'); +gfx_drawchar($'T'); +gfx_x = 215; +gfx_drawchar($'R'); +gfx_drawchar($'M'); +gfx_drawchar($'S'); +gfx_x = 255; +rmsr_gfx > -300 ? ( + rmsr_gfx > 0.0 ? ( + gfx_r = 1; + gfx_g = gfx_b = 0; + gfx_drawchar($'+'); + ); + gfx_drawnumber(rmsr_gfx,2); +) : ( + gfx_drawchar($'-'); + gfx_drawchar($'I'); + gfx_drawchar($'N'); + gfx_drawchar($'F'); +); +gfx_r = 1; +gfx_g = gfx_b = 1; +gfx_x = 355; +ort > -300 ? ( + ort >= 0.0 ? ( + gfx_drawchar($'+'); + gfx_r = 1; + gfx_g = gfx_b = 0; + ); + gfx_drawnumber(ort,2); +) : ( + gfx_drawchar($'-'); + gfx_drawchar($'I'); + gfx_drawchar($'N'); + gfx_drawchar($'F'); +); diff --git a/Effects/Liteon/vumetergfxsum b/Effects/Liteon/vumetergfxsum new file mode 100644 index 0000000..68a0d8b --- /dev/null +++ b/Effects/Liteon/vumetergfxsum @@ -0,0 +1,309 @@ +// (C) 2008-2009, Lubomir I. Ivanov + +// NO WARRANTY IS GRANTED. THIS PLUG-IN IS PROVIDED ON AN "AS IS" BASIS, WITHOUT +// WARRANTY OF ANY KIND. NO LIABILITY IS GRANTED, INCLUDING, BUT NOT LIMITED TO, +// ANY DIRECT OR INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGE ARISING +// OUT OF THE USE OR INABILITY TO USE THIS PLUG-IN, COMPUTER FAILTURE OF +// MALFUNCTION INCLUDED. THE USE OF THE SOURCE CODE, EITHER PARTIALLY OR IN +// TOTAL, IS ONLY GRANTED, IF USED IN THE SENSE OF THE AUTHOR'S INTENTION, AND +// USED WITH ACKNOWLEDGEMENT OF THE AUTHOR. FURTHERMORE IS THIS PLUG-IN A THIRD +// PARTY CONTRIBUTION, EVEN IF INCLUDED IN REAPER(TM), COCKOS INCORPORATED OR +// ITS AFFILIATES HAVE NOTHING TO DO WITH IT. LAST BUT NOT LEAST, BY USING THIS +// PLUG-IN YOU RELINQUISH YOUR CLAIM TO SUE IT'S AUTHOR, AS WELL AS THE CLAIM TO +// ENTRUST SOMEBODY ELSE WITH DOING SO. +// +// Released under GPL: +// . + +//****************************************************************************** +//References: cockos, wiki, math books +//****************************************************************************** + +desc: VU Meter (Summed) +//tags: analysis visualization metering +//author: Liteon + +slider1:50<1,300,1>Response (ms) +slider2:5<1,10,0.1>Release (Slow/Fast) + +in_pin:left input +in_pin:right input +out_pin:none + +@init +//st - sample time, sc - db scale, rp - right channel y pading, r - radius +sc = 6/log(2); +rp = 261; +r = 200; +yl = yr = ylt = yrt = 74; +xl = xr = 66; +ms = slider1; +cs = 0; +suml = sumr = 0; +rms_i = 0; +i_max = 36; + +@slider +rel = slider2; +ms = slider1; +st = ms*srate/1000; +hold = (0.001*ms*srate); +cs = 0; +suml = sumr = 0; + +@block +rmsl = floor(sc*log(sqrt(suml/cs))*100)/100; + +ab1 = log(sqrt(suml/cs)); +ab2 = sqrt(suml/cs); + +rms_i == i_max ? ( + rmsl_gfx = rmsl; + rms_i = 0; +); +rms_i += 1; + +bscnt > st ? ( + + ool = log(pvl)*sc; + + //get x from exp scale + xlt = floor(exp(log(1.055)*2.1*ool)*285); + + //get y from x and radius - r + l=sqrt(sqr(r)+sqr(212-xlt)); + h=((l-r)*r/l); + m=sqrt(sqr(l-r)-sqr(h)); + ylt=35+h; + xlt < 212 ? xlt=xlt+m : xlt=xlt-m; + + //update x,y,out + old_xl < xlt ? (xl = min(max(xlt,66),375); yl = ylt; olt = ool;); + bscnt = pvl = pvr = 0; +); + +old_xl = xl; + +bscnt += samplesblock; + +//indicator fall-back +fallback = rel/2*samplesblock/1024; +fbi_l = exp(xl/512)*fallback; +xl > 66 ? xl -= fbi_l; + +//limit x +xl = min(max(xl,66),375); + +//get y after fall-back +yl=35; +l=sqrt(sqr(r)+sqr(212-xl)); +h=((l-r)*r/l); +yl=floor(yl+h); + +@sample +pvl = max(pvl,abs((spl0+spl1)/2)); +cs == hold ? ( +cs = 0; +suml = 0; +) : ( +cs += 1; +suml += sqr(abs((spl0+spl1)/2)); +); + +@gfx 425 191 +//**************************************************************** left +//red scale +gfx_r = gfx_a = 1; +gfx_g = gfx_b =0; +gfx_x = 283; +gfx_y = 28; +gfx_drawnumber(0,0); +gfx_x = 370; +gfx_y = 55; +gfx_drawnumber(3,0); +gfx_x = 405; +gfx_y = 57; +gfx_drawchar($'+'); +gfx_x = 283; +gfx_y = 38; +gfx_lineto(269,76,0.5); +gfx_x = 311; +gfx_y = 43; +gfx_lineto(293,80,1); +gfx_x = 342; +gfx_y = 51; +gfx_lineto(318,85,1); +gfx_x = 370; +gfx_y = 65; +gfx_lineto(344,93,0.5); + +//white scale +gfx_r = gfx_g = gfx_b = 1; +gfx_a = 1; +gfx_x = 12; +gfx_y = 60; +gfx_drawchar($'-'); +gfx_x = 41; +gfx_y = 53; +gfx_drawnumber(20,0); +gfx_x = 80; +gfx_y = 37; +gfx_drawnumber(10,0); +gfx_x = 125; +gfx_y = 29; +gfx_drawnumber(7,0); +gfx_x = 157; +gfx_y = 25; +gfx_drawnumber(5,0); +gfx_x = 198; +gfx_y = 24; +gfx_drawnumber(3,0); +gfx_x = 56; +gfx_y = 63; +gfx_lineto(82,92,0.5); +gfx_x = 95; +gfx_y = 47; +gfx_lineto(119,82,0.5); +gfx_x = 130; +gfx_y = 39; +gfx_lineto(146,77,0.5); +gfx_x = 145; +gfx_y = 37; +gfx_lineto(158,75,1); +gfx_x = 162; +gfx_y = 35; +gfx_lineto(171,74,0.5); +gfx_x = 180; +gfx_y = 34; +gfx_lineto(187,74,1); +gfx_x = 202; +gfx_y = 34; +gfx_lineto(204,72,0.5); +gfx_x = 227; +gfx_y = 34; +gfx_lineto(223,73,1); +gfx_x = 253; +gfx_y = 35; +gfx_lineto(245,73,1); + +//vu box border +gfx_r = gfx_g = gfx_b = 0.75; +gfx_a = 1; +gfx_x = 198; +gfx_y = 108; +gfx_rectto(241,139); +//vu box +gfx_a = 1; +gfx_r = 0.5; +gfx_g = gfx_b = 0.1; +gfx_x = 200; +gfx_y = 110; +gfx_rectto(239,137); +//vu text +gfx_r = gfx_g = gfx_b = 0.85; +gfx_a = 1; +gfx_x = 212; +gfx_y = 120; +gfx_drawchar($'V'); +gfx_drawchar($'U'); + +//meter +olt > 0 ? ( + gfx_r = 1; + gfx_g = gfx_b = 0; +) : ( + gfx_r = gfx_g = gfx_b = 1; +); +gfx_a = 1; +gfx_x = 212; +gfx_y = 236; +gfx_lineto(xl,yl,1); +gfx_x = 211; +gfx_y = 236; +gfx_lineto(xl-1,yl,1); +gfx_x = 210; +gfx_y = 236; +gfx_lineto(xl-2,yl,1); + +//big border +gfx_r = gfx_g = gfx_b = 0.55; +gfx_a = 1; +gfx_x = 0; +gfx_y = 179; +gfx_rectto(425,180); +//big box 1 +gfx_r = 0.1; +gfx_g = 0.2; +gfx_b = 0.39; +gfx_a = 1; +gfx_x = 0; +gfx_y = 180; +gfx_rectto(425,261); +//big box 2 +gfx_r = gfx_g = gfx_b = 1; +gfx_a = 0.1; +gfx_x = 0; +gfx_y = 180; +gfx_rectto(425,190); +//big box 3 +gfx_r = gfx_g = gfx_b = 0; +gfx_a = 0.3; +gfx_x = 0; +gfx_y = 245; +gfx_rectto(425,261); +//ch textbox1 +gfx_r = gfx_g = gfx_b = 0; +gfx_a = 1; +gfx_x = 350; +gfx_y = 210; +gfx_rectto(415,227); +//ch textbox2 +gfx_r = gfx_g = gfx_b = 0; +gfx_a = 1; +gfx_x = 250; +gfx_y = 210; +gfx_rectto(315,227); +//ch text +gfx_r = gfx_g = gfx_b = 1; +gfx_a = 1; +gfx_x = 20; +gfx_y = 215; +gfx_drawchar($'L'); +gfx_drawchar($'+'); +gfx_drawchar($'R'); +gfx_x = 215; +gfx_drawchar($'R'); +gfx_drawchar($'M'); +gfx_drawchar($'S'); +gfx_x = 333; +gfx_drawchar($'P'); +gfx_x = 255; +rmsl_gfx > -300 ? ( + rmsl_gfx > 0.0 ? ( + gfx_r = 1; + gfx_g = gfx_b = 0; + gfx_drawchar($'+'); + ); + gfx_drawnumber(rmsl_gfx,2); +) : ( + gfx_drawchar($'-'); + gfx_drawchar($'I'); + gfx_drawchar($'N'); + gfx_drawchar($'F'); +); +gfx_r = 1; +gfx_g = gfx_b = 1; +gfx_x = 355; +olt > -300 ? ( + olt >= 0.0 ? ( + gfx_drawchar($'+'); + gfx_r = 1; + gfx_g = gfx_b = 0; + ); + gfx_drawnumber(olt,2); +) : ( + gfx_drawchar($'-'); + gfx_drawchar($'I'); + gfx_drawchar($'N'); + gfx_drawchar($'F'); +); diff --git a/Effects/Liteon/waveshapermulti b/Effects/Liteon/waveshapermulti new file mode 100644 index 0000000..fe6d448 --- /dev/null +++ b/Effects/Liteon/waveshapermulti @@ -0,0 +1,297 @@ +// (C) 2008-2009, Lubomir I. Ivanov + +// NO WARRANTY IS GRANTED. THIS PLUG-IN IS PROVIDED ON AN "AS IS" BASIS, WITHOUT +// WARRANTY OF ANY KIND. NO LIABILITY IS GRANTED, INCLUDING, BUT NOT LIMITED TO, +// ANY DIRECT OR INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGE ARISING +// OUT OF THE USE OR INABILITY TO USE THIS PLUG-IN, COMPUTER FAILTURE OF +// MALFUNCTION INCLUDED. THE USE OF THE SOURCE CODE, EITHER PARTIALLY OR IN +// TOTAL, IS ONLY GRANTED, IF USED IN THE SENSE OF THE AUTHOR'S INTENTION, AND +// USED WITH ACKNOWLEDGEMENT OF THE AUTHOR. FURTHERMORE IS THIS PLUG-IN A THIRD +// PARTY CONTRIBUTION, EVEN IF INCLUDED IN REAPER(TM), COCKOS INCORPORATED OR +// ITS AFFILIATES HAVE NOTHING TO DO WITH IT. LAST BUT NOT LEAST, BY USING THIS +// PLUG-IN YOU RELINQUISH YOUR CLAIM TO SUE IT'S AUTHOR, AS WELL AS THE CLAIM TO +// ENTRUST SOMEBODY ELSE WITH DOING SO. +// +// Released under GPL: +// . + +desc: Multi Waveshaper +desc: Waveshaper Multi (Various Formulas) +//tags: processing distortion waveshaper +//author: Liteon + +slider1:0<0,1,1{Stereo,Mono}>Processing +slider2:0<0,1,1{Type 1,Type 2,Type 3}>Waveshaper +slider3:0<0,100,0.05>Drive (%) +slider4:0<0,100,0.05>Muffle (%) +slider5:0<-25,25,0.05>Output (dB) +slider6:0<0,1,1{On,Off}>Limiter +slider7:0<0,1,1{Off,On}>Oversample (x2) + +in_pin:left input +in_pin:right input +out_pin:left output +out_pin:right output + +@init +//fir restoration +c1 = 1; +c2 = -0.75; +c3 = 0.17; +fgain = 4.1; + +//fir bandlimit +bl_c1 = 0.52; +bl_c2 = 0.54; +bl_c3 = -0.02; + +@slider + +os = slider7; +//outgain +outgain = 10^(slider5/20); + +//drive +drive1 = 1+slider3/35; +drvc = 1.5; +drive2 = slider3/99-0.07; +drv2_k = drive2/(1-drive2); +pi_drv2 = $pi*drive2; +sin_pi_drv2 = sin($pi*drive2); + +//lp +slider4 > 0 ? ( + muffle = 20000-(slider4*100+9000); + lp_cut = 2*$pi*muffle; + lp_n = 1/(lp_cut+2*srate); + lp_b1 = (2*srate-lp_cut)*lp_n; + lp_a0 = lp_a1=lp_cut*lp_n; +); + +@sample + +//=========================== +//stereo +slider1 == 0 ? ( + +inl = spl0; +inr = spl1; + +slider3 > 0 ? ( + + +//oversample ? +os == 1 ? ( + +//--------------------------- +//power series in +ps_out1l = 0.5*(inl+ps_out2l); +ps_out2l = 0.5*ps_out1l; + +ps_out1r = 0.5*(inr+ps_out2r); +ps_out2r = 0.5*ps_out1r; + +//--------------------------- +//drive +slider2 == 0 ? ( + o_in1l = (1+drv2_k)*ps_out1l/(1+drv2_k*abs(ps_out1l)); + o_in2l = (1+drv2_k)*ps_out2l/(1+drv2_k*abs(ps_out2l)); + o_in1r = (1+drv2_k)*ps_out1r/(1+drv2_k*abs(ps_out1r)); + o_in2r = (1+drv2_k)*ps_out2r/(1+drv2_k*abs(ps_out2r)); +); +slider2 == 1 ? ( + o_in1l = sin(pi_drv2*ps_out1l)*1/sin_pi_drv2; + o_in2l = sin(pi_drv2*ps_out2l)*1/sin_pi_drv2; + o_in1r = sin(pi_drv2*ps_out1r)*1/sin_pi_drv2; + o_in2r = sin(pi_drv2*ps_out2r)*1/sin_pi_drv2; +); +slider2 == 2 ? ( + o_in1l = (ps_out1l)*(abs((ps_out1l)) + drive1)/((ps_out1l)^2 + (drive1-1)*abs((ps_out1l)) + 1)*(drive1/drvc); + o_in2l = (ps_out2l)*(abs((ps_out2l)) + drive1)/((ps_out2l)^2 + (drive1-1)*abs((ps_out2l)) + 1)*(drive1/drvc); + o_in1r = (ps_out1r)*(abs((ps_out1r)) + drive1)/((ps_out1r)^2 + (drive1-1)*abs((ps_out1r)) + 1)*(drive1/drvc); + o_in2r = (ps_out2r)*(abs((ps_out2r)) + drive1)/((ps_out2r)^2 + (drive1-1)*abs((ps_out2r)) + 1)*(drive1/drvc); +); + +//--------------------------- +//bandlimit +bl3_l1 = bl2_l1; +bl3_r1 = bl2_r1; +bl3_l2 = bl2_l2; +bl3_r2 = bl2_r2; + +bl2_l1 = bl1_l1; +bl2_r1 = bl1_r1; +bl2_l2 = bl1_l2; +bl2_r2 = bl1_r2; + +bl1_l1 = o_in1l; +bl1_r1 = o_in1r; +bl1_l2 = o_in2l; +bl1_r2 = o_in2r; + +bl_out1l = (bl1_l1*bl_c1 + bl2_l1*bl_c2 + bl3_l1*bl_c3); +bl_out1r = (bl1_r1*bl_c1 + bl2_r1*bl_c2 + bl3_r1*bl_c3); +bl_out2l = (bl1_l2*bl_c1 + bl2_l2*bl_c2 + bl3_l2*bl_c3); +bl_out2r = (bl1_r2*bl_c1 + bl2_r2*bl_c2 + bl3_r2*bl_c3); + +//--------------------------- +//power series out +o_out1l = 0.5*(bl_out1l+o_out2l); +o_out2l = 0.5*(bl_out2l+o_out1l); + +o_out1r = 0.5*(bl_out1r+o_out2r); +o_out2r = 0.5*(bl_out2r+o_out1r); + +//--------------------------- +//fir restoration +s3l = s2l; +s3r = s2r; +s2l = s1l; +s2r = s1r; +s1l = o_out1l; +s1r = o_out1r; + +o_outl = (s1l*c1+s2l*c2+s3l*c3)*fgain; +o_outr = (s1r*c1+s2r*c2+s3r*c3)*fgain; + +) : ( + +//drive +slider2 == 0 ? ( + o_outl = (1+drv2_k)*inl/(1+drv2_k*abs(inl)); + o_outr = (1+drv2_k)*inr/(1+drv2_k*abs(inr)); +); +slider2 == 1 ? ( + o_outl = sin(pi_drv2*inl)*1/sin_pi_drv2; + o_outr = sin(pi_drv2*inr)*1/sin_pi_drv2; +); +slider2 == 2 ? ( + o_outl = (inl)*(abs((inl)) + drive1)/((inl)^2 + (drive1-1)*abs((inl)) + 1)*(drive1/drvc); + o_outr = (inr)*(abs((inr)) + drive1)/((inr)^2 + (drive1-1)*abs((inr)) + 1)*(drive1/drvc); +); + +); + +) : ( +o_outl = inl; +o_outr = inr; +); + +//--------------------------- +//lp +slider4 > 0 ? ( + lp_inl = o_outl; + lp_inr = o_outr; + lp_outputl = lp_inl*lp_a0+lp_inl*lp_a1+lp_outputl*lp_b1; + lp_outputr = lp_inr*lp_a0+lp_inr*lp_a1+lp_outputr*lp_b1; + o_outl = lp_outputl; + o_outr = lp_outputr; +); + +//--------------------------- +//limiter +outl = o_outl*outgain; +outr = o_outr*outgain; + +slider6 == 0 ? ( + outl = min(max(outl,-0.98),0.98); + outr = min(max(outr,-0.98),0.98); +); +spl0 = outl; +spl1 = outr; + +//=========================== +//mono +) : ( + +in = (spl0+spl1)/2; + +slider3 > 0 ? ( + +os == 1 ? ( + +//--------------------------- +//power series in +ps_out1 = 0.5*(in+ps_out2); +ps_out2 = 0.5*ps_out1; + +//--------------------------- +//drive +slider2 == 0 ? ( + o_in1 = (1+drv2_k)*ps_out1/(1+drv2_k*abs(ps_out1)); + o_in2 = (1+drv2_k)*ps_out2/(1+drv2_k*abs(ps_out2)); +); +slider2 == 1 ? ( + o_in1 = sin(pi_drv2*ps_out1)*1/sin_pi_drv2; + o_in2 = sin(pi_drv2*ps_out2)*1/sin_pi_drv2; +); +slider2 == 2 ? ( + o_in1 = (ps_out1)*(abs((ps_out1)) + drive1)/((ps_out1)^2 + (drive1-1)*abs((ps_out1)) + 1)*(drive1/drvc); + o_in2 = (ps_out2)*(abs((ps_out2)) + drive1)/((ps_out2)^2 + (drive1-1)*abs((ps_out2)) + 1)*(drive1/drvc); +); + +//--------------------------- +//bandlimit +bl3_1 = bl2_1; +bl3_2 = bl2_2; + +bl2_1 = bl1_1; +bl2_2 = bl1_2; + +bl1_1 = o_in1; +bl1_2 = o_in2; + +bl_out1 = (bl1_1*bl_c1 + bl2_1*bl_c2 + bl3_1*bl_c3); +bl_out2 = (bl1_2*bl_c1 + bl2_2*bl_c2 + bl3_2*bl_c3); + +//--------------------------- +//power series out +o_out1 = 0.5*(bl_out1+o_out2); +o_out2 = 0.5*(bl_out2+o_out1); + +//--------------------------- +//fir restoration +s3l = s2l; +s2l = s1l; +s1l = o_out1; + +o_out = (s1l*c1+s2l*c2+s3l*c3)*fgain; + +) : ( + + +//drive +slider2 == 0 ? ( + o_out = (1+drv2_k)*in/(1+drv2_k*abs(in)); +); +slider2 == 1 ? ( + o_out = sin(pi_drv2*in)*1/sin_pi_drv2; +); +slider2 == 2 ? ( + o_out = (in)*(abs((in)) + drive1)/((in)^2 + (drive1-1)*abs((in)) + 1)*(drive1/drvc); +); + +); + +) : ( +o_out = in; +); + +//--------------------------- +//lp +slider4 > 0 ? ( + lp_in = o_out; + lp_output = lp_in*lp_a0+lp_in*lp_a1+lp_output*lp_b1; + o_out = lp_output; +); + +//--------------------------- +//limiter +out = o_out*outgain; +slider6 == 0 ? ( + out = min(max(out,-0.98),0.98); +); +spl0=spl1=out; + +); + diff --git a/Effects/Teej/rbj12eq-teej b/Effects/Teej/rbj12eq-teej new file mode 100644 index 0000000..6c932de --- /dev/null +++ b/Effects/Teej/rbj12eq-teej @@ -0,0 +1,683 @@ +// Copyright 2006, Thomas Scott Stillwell +// All rights reserved. +// +//Redistribution and use in source and binary forms, with or without modification, are permitted +//provided that the following conditions are met: +// +//Redistributions of source code must retain the above copyright notice, this list of conditions +//and the following disclaimer. +// +//Redistributions in binary form must reproduce the above copyright notice, this list of conditions +//and the following disclaimer in the documentation and/or other materials provided with the distribution. +// +//The name of Thomas Scott Stillwell may not be used to endorse or +//promote products derived from this software without specific prior written permission. +// +//THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR +//IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +//FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS +//BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +//(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +//PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, +//STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +//THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// +//This modified version of the most excellent SS:rbj7eq is presented by TJ Higley. +//Last modified: 2:36 PM, 2/18/07 +// +//The frequency of the low shelf filter is customizable by modifying 'lowshelffreq' in line 52. +//The frequency of each slider is customizable by modifying 'sliderXfreq' in lines 53 - 64. If you change these, +//be sure to change the label in lines 36 - 51! :) +//The Q value of each slider is customizable by modifying 'sliderQ' in lines 65 - 76. + +desc:RBJ 12-Band EQ w/HPF +//tags: equalizer filter +//author: teej + +// based on RBJ Filter Cookbook + +slider1:0<0,400,5>HPF (dB) +slider2:0<-12,12,0.1>Low Shelf (dB) +slider3:0<-12,12,0.5>80 Hz (dB) +slider4:0<-12,12,0.5>150 Hz (dB) +slider5:0<-12,12,0.5>250 Hz (dB) +slider6:0<-12,12,0.5>400 Hz (dB) +slider7:0<-12,12,0.5>630 Hz (dB) +slider8:0<-12,12,0.5>800 Hz (dB) +slider9:0<-12,12,0.5>1.6 kHz (dB) +slider10:0<-12,12,0.5>3 kHz (dB) +slider11:0<-12,12,0.5>5 kHz (dB) +slider12:0<-12,12,0.5>7 kHz (dB) +slider13:0<-12,12,0.5>10 kHz (dB) +slider14:0<-12,12,0.5>12 kHz (dB) +slider15:22000<400,22000,5>LPF (dB) +slider16:0<-12,12,0.5>Output Gain (dB) + + +in_pin:left input +in_pin:right input +out_pin:left output +out_pin:right output + +@init + + lowshelffreq = 110; + slider3freq = 80; + slider4freq = 150; + slider5freq = 250; + slider6freq = 400; + slider7freq = 630; + slider8freq = 800; + slider9freq = 1600; + slider10freq = 3000; + slider11freq = 5000; + slider12freq = 7000; + slider13freq = 10000; + slider14freq = 12000; + slider3Q = 1; + slider4Q = 1; + slider5Q = 1; + slider6Q = 1; + slider7Q = 1; + slider8Q = 1; + slider9Q = 1; + slider10Q = 1; + slider11Q = 1; + slider12Q = 1; + slider13Q = 1; + slider14Q = 1; + +cDcAdd = 10^-30; +cDenorm = 10^-30; + + +@slider + + gain = 10^(slider16/20); + + + aHPF = 1; + sHPF = 1; + qHPF = 1 / (sqrt((aHPF + 1/aHPF)*(1/sHPF - 1) + 2)); + w0HPF = 2 * $pi * slider1/srate; + cosw0HPF = cos(w0HPF); + sinw0HPF = sin(w0HPF); + alphaHPF = sinw0HPF / (2 * qHPF); + + b0HPF = (1 + cosw0HPF)/2; + b1HPF = -(1 + cosw0HPF); + b2HPF = (1 + cosw0HPF)/2; + a0HPF = 1 + alphaHPF; + a1HPF = -2 * cosw0HPF; + a2HPF = 1 - alphaHPF; + b0HPF /= a0HPF; + b1HPF /= a0HPF; + b2HPF /= a0HPF; + a1HPF /= a0HPF; + a2HPF /= a0HPF; + + + aLS = 10^(slider2/40); + sLS = 2; + qLS = 1 / (sqrt((aLS + 1/aLS)*(1/sLS - 1) + 2)); + w0LS = 2 * $pi * lowshelffreq/srate; + cosw0LS = cos(w0LS); + sinw0LS = sin(w0LS); + alphaLS = sinw0LS / (2 * qLS); + + b0LS = aLS * ((aLS+1) - (aLS-1)*cosw0LS + 2*sqrt(aLS)*alphaLS); + b1LS = 2 * aLS * ((aLS-1) - (aLS+1)*cosw0LS); + b2LS = aLS * ((aLS+1) - (aLS-1)*cosw0LS - 2*sqrt(aLS)*alphaLS); + a0LS = (aLS+1) + (aLS-1)*cosw0LS + 2*sqrt(aLS)*alphaLS; + a1LS = -2 * ((aLS-1) + (aLS+1)*cosw0LS); + a2LS = (aLS+1)+(aLS-1)*cosw0LS-2*sqrt(aLS)*alphaLS; + b0LS /= a0LS; + b1LS /= a0LS; + b2LS /= a0LS; + a1LS /= a0LS; + a2LS /= a0LS; + + + qC = slider3Q; + aC = 10^(slider3/40); + w0C = 2 * $pi * slider3freq/srate; + cosw0C = cos(w0C); + sinw0C = sin(w0C); + alphaC = sinw0C / (2 * qC); + + b0C = 1 + alphaC * aC; + b1C = -2 * cosw0C; + b2C = 1 - alphaC * aC; + a0C = 1 + alphaC / aC; + a1C = -2 * cosw0C; + a2C = 1 - alphaC / aC; + b0C /= a0C; + b1C /= a0C; + b2C /= a0C; + a1C /= a0C; + a2C /= a0C; + + + qD = slider4Q; + aD = 10^(slider4/40); + w0D = 2 * $pi * slider4freq/srate; + cosw0D = cos(w0D); + sinw0D = sin(w0D); + alphaD = sinw0D / (2 * qD); + + b0D = 1 + alphaD * aD; + b1D = -2 * cosw0D; + b2D = 1 - alphaD * aD; + a0D = 1 + alphaD / aD; + a1D = -2 * cosw0D; + a2D = 1 - alphaD / aD; + b0D /= a0D; + b1D /= a0D; + b2D /= a0D; + a1D /= a0D; + a2D /= a0D; + + + qE = slider5Q; + aE = 10^(slider5/40); + w0E = 2 * $pi * slider5freq/srate; + cosw0E = cos(w0E); + sinw0E = sin(w0E); + alphaE = sinw0E / (2 * qE); + + b0E = 1 + alphaE * aE; + b1E = -2 * cosw0E; + b2E = 1 - alphaE * aE; + a0E = 1 + alphaE / aE; + a1E = -2 * cosw0E; + a2E = 1 - alphaE / aE; + b0E /= a0E; + b1E /= a0E; + b2E /= a0E; + a1E /= a0E; + a2E /= a0E; + + + qF = slider6Q; + aF = 10^(slider6/40); + w0F = 2 * $pi * slider6freq/srate; + cosw0F = cos(w0F); + sinw0F = sin(w0F); + alphaF = sinw0F / (2 * qF); + + b0F = 1 + alphaF * aF; + b1F = -2 * cosw0F; + b2F = 1 - alphaF * aF; + a0F = 1 + alphaF / aF; + a1F = -2 * cosw0F; + a2F = 1 - alphaF / aF; + b0F /= a0F; + b1F /= a0F; + b2F /= a0F; + a1F /= a0F; + a2F /= a0F; + + + qG = slider7Q; + aG = 10^(slider7/40); + w0G = 2 * $pi * slider7freq/srate; + cosw0G = cos(w0G); + sinw0G = sin(w0G); + alphaG = sinw0G / (2 * qG); + + b0G = 1 + alphaG * aG; + b1G = -2 * cosw0G; + b2G = 1 - alphaG * aG; + a0G = 1 + alphaG / aG; + a1G = -2 * cosw0G; + a2G = 1 - alphaG / aG; + b0G /= a0G; + b1G /= a0G; + b2G /= a0G; + a1G /= a0G; + a2G /= a0G; + + + qH = slider8Q; + aH = 10^(slider8/40); + w0H = 2 * $pi * slider8freq/srate; + cosw0H = cos(w0H); + sinw0H = sin(w0H); + alphaH = sinw0H / (2 * qH); + + b0H = 1 + alphaH * aH; + b1H = -2 * cosw0H; + b2H = 1 - alphaH * aH; + a0H = 1 + alphaH / aH; + a1H = -2 * cosw0H; + a2H = 1 - alphaH / aH; + b0H /= a0H; + b1H /= a0H; + b2H /= a0H; + a1H /= a0H; + a2H /= a0H; + + + qI = slider9Q; + aI = 10^(slider9/40); + w0I = 2 * $pi * slider9freq/srate; + cosw0I = cos(w0I); + sinw0I = sin(w0I); + alphaI = sinw0I / (2 * qI); + + b0I = 1 + alphaI * aI; + b1I = -2 * cosw0I; + b2I = 1 - alphaI * aI; + a0I = 1 + alphaI / aI; + a1I = -2 * cosw0I; + a2I = 1 - alphaI / aI; + b0I /= a0I; + b1I /= a0I; + b2I /= a0I; + a1I /= a0I; + a2I /= a0I; + + + qJ = slider10Q; + aJ = 10^(slider10/40); + w0J = 2 * $pi * slider10freq/srate; + cosw0J = cos(w0J); + sinw0J = sin(w0J); + alphaJ = sinw0J / (2 * qJ); + + b0J = 1 + alphaJ * aJ; + b1J = -2 * cosw0J; + b2J = 1 - alphaJ * aJ; + a0J = 1 + alphaJ / aJ; + a1J = -2 * cosw0J; + a2J = 1 - alphaJ / aJ; + b0J /= a0J; + b1J /= a0J; + b2J /= a0J; + a1J /= a0J; + a2J /= a0J; + + + qK = slider11Q; + aK = 10^(slider11/40); + w0K = 2 * $pi * slider11freq/srate; + cosw0K = cos(w0K); + sinw0K = sin(w0K); + alphaK = sinw0K / (2 * qK); + + b0K = 1 + alphaK * aK; + b1K = -2 * cosw0K; + b2K = 1 - alphaK * aK; + a0K = 1 + alphaK / aK; + a1K = -2 * cosw0K; + a2K = 1 - alphaK / aK; + b0K /= a0K; + b1K /= a0K; + b2K /= a0K; + a1K /= a0K; + a2K /= a0K; + + + qL = slider12Q; + aL = 10^(slider12/40); + w0L = 2 * $pi * slider12freq/srate; + cosw0L = cos(w0L); + sinw0L = sin(w0L); + alphaL = sinw0L / (2 * qL); + + b0L = 1 + alphaL * aL; + b1L = -2 * cosw0L; + b2L = 1 - alphaL * aL; + a0L = 1 + alphaL / aL; + a1L = -2 * cosw0L; + a2L = 1 - alphaL / aL; + b0L /= a0L; + b1L /= a0L; + b2L /= a0L; + a1L /= a0L; + a2L /= a0L; + + + qM = slider13Q; + aM = 10^(slider13/40); + w0M = 2 * $pi * slider13freq/srate; + cosw0M = cos(w0M); + sinw0M = sin(w0M); + alphaM = sinw0M / (2 * qM); + + b0M = 1 + alphaM * aM; + b1M = -2 * cosw0M; + b2M = 1 - alphaM * aM; + a0M = 1 + alphaM / aM; + a1M = -2 * cosw0M; + a2M = 1 - alphaM / aM; + b0M /= a0M; + b1M /= a0M; + b2M /= a0M; + a1M /= a0M; + a2M /= a0M; + + + qN = slider14Q; + aN = 10^(slider14/40); + w0N = 2 * $pi * slider14freq/srate; + cosw0N = cos(w0N); + sinw0N = sin(w0N); + alphaN = sinw0N / (2 * qN); + + b0N = 1 + alphaN * aN; + b1N = -2 * cosw0N; + b2N = 1 - alphaN * aN; + a0N = 1 + alphaN / aN; + a1N = -2 * cosw0N; + a2N = 1 - alphaN / aN; + b0N /= a0N; + b1N /= a0N; + b2N /= a0N; + a1N /= a0N; + a2N /= a0N; + + + aP = 1; + sP = 2; + qP = 1 / (sqrt((aP + 1/aP)*(1/sP - 1) + 2)); + w0P = 2 * $pi * slider15/srate; + cosw0P = cos(w0P); + sinw0P = sin(w0P); + alphaP = sinw0P / (2 * qP); + + b0P = (1 - cosw0P)/2; + b1P = (1 - cosw0P); + b2P = (1 - cosw0P)/2; + a0P = 1 + alphaP; + a1P = -2 * cosw0P; + a2P = 1 - alphaP; + b0P /= a0P; + b1P /= a0P; + b2P /= a0P; + a1P /= a0P; + a2P /= a0P; + + +@sample + + freq0 > 10 ? ( + ospl0 = spl0; + spl0 = b00 * spl0 + b10 * xl10 + b20 * xl20 - a10 * yl10 - a20 * yl20; + xl20 = xl10; + xl10 = ospl0; + yl20 = yl10; + yl10 = abs(spl0) < cDenorm ? 0 : spl0 ; + + ospl1 = spl1; + spl1 = b00 * spl1 + b10 * xr10 + b20 * xr20 - a10 * yr10 - a20 * yr20; + xr20 = xr10; + xr10 = ospl1; + yr20 = yr10; + yr10 = abs(spl1) < cDenorm ? 0 : spl1 ; + ); + + + + slider1 != 0 ? ( + ospl0 = spl0; + spl0 = b0HPF * spl0 + b1HPF * xl1HPF + b2HPF * xl2HPF - a1HPF * yl1HPF - a2HPF * yl2HPF; + xl2HPF = xl1HPF; + xl1HPF = ospl0; + yl2HPF = yl1HPF; + yl1HPF = abs(spl0) < cDenorm ? 0 : spl0 ; + + ospl1 = spl1; + spl1 = b0HPF * spl1 + b1HPF * xr1HPF + b2HPF * xr2HPF - a1HPF * yr1HPF - a2HPF * yr2HPF; + xr2HPF = xr1HPF; + xr1HPF = ospl1; + yr2HPF = yr1HPF; + yr1HPF = abs(spl1) < cDenorm ? 0 : spl1 ; + ); + + +spl0 += cDcAdd; +spl1 += cDcAdd; + + slider2 != 0 ? ( + ospl0 = spl0; + spl0 = b0LS * spl0 + b1LS * xl1LS + b2LS * xl2LS - a1LS * yl1LS - a2LS * yl2LS; + xl2LS = xl1LS; + xl1LS = ospl0; + yl2LS = yl1LS; + yl1LS = spl0; + + ospl1 = spl1; + spl1 = b0LS * spl1 + b1LS * xr1LS + b2LS * xr2LS - a1LS * yr1LS - a2LS * yr2LS; + xr2LS = xr1LS; + xr1LS = ospl1; + yr2LS = yr1LS; + yr1LS = spl1; + ); + + + slider3 != 0 ? ( + ospl0 = spl0; + spl0 = b0C * spl0 + b1C * xl1C + b2C * xl2C - a1C * yl1C - a2C * yl2C; + xl2C = xl1C; + xl1C = ospl0; + yl2C = yl1C; + yl1C = spl0; + + ospl1 = spl1; + spl1 = b0C * spl1 + b1C * xr1C + b2C * xr2C - a1C * yr1C - a2C * yr2C; + xr2C = xr1C; + xr1C = ospl1; + yr2C = yr1C; + yr1C = spl1; + ); + + + slider4 != 0 ? ( + ospl0 = spl0; + spl0 = b0D * spl0 + b1D * xl1D + b2D * xl2D - a1D * yl1D - a2D * yl2D; + xl2D = xl1D; + xl1D = ospl0; + yl2D = yl1D; + yl1D = spl0; + + ospl1 = spl1; + spl1 = b0D * spl1 + b1D * xr1D + b2D * xr2D - a1D * yr1D - a2D * yr2D; + xr2D = xr1D; + xr1D = ospl1; + yr2D = yr1D; + yr1D = spl1; + ); + + + slider5 != 0 ? ( + ospl0 = spl0; + spl0 = b0E * spl0 + b1E * xl1E + b2E * xl2E - a1E * yl1E - a2E * yl2E; + xl2E = xl1E; + xl1E = ospl0; + yl2E = yl1E; + yl1E = spl0; + + ospl1 = spl1; + spl1 = b0E * spl1 + b1E * xr1E + b2E * xr2E - a1E * yr1E - a2E * yr2E; + xr2E = xr1E; + xr1E = ospl1; + yr2E = yr1E; + yr1E = spl1; + ); + + + slider6 != 0 ? ( + ospl0 = spl0; + spl0 = b0F * spl0 + b1F * xl1F + b2F * xl2F - a1F * yl1F - a2F * yl2F; + xl2F = xl1F; + xl1F = ospl0; + yl2F = yl1F; + yl1F = spl0; + + ospl1 = spl1; + spl1 = b0F * spl1 + b1F * xr1F + b2F * xr2F - a1F * yr1F - a2F * yr2F; + xr2F = xr1F; + xr1F = ospl1; + yr2F = yr1F; + yr1F = spl1; + ); + + + slider7 != 0 ? ( + ospl0 = spl0; + spl0 = b0G * spl0 + b1G * xl1G + b2G * xl2G - a1G * yl1G - a2G * yl2G; + xl2G = xl1G; + xl1G = ospl0; + yl2G = yl1G; + yl1G = spl0; + + ospl1 = spl1; + spl1 = b0G * spl1 + b1G * xr1G + b2G * xr2G - a1G * yr1G - a2G * yr2G; + xr2G = xr1G; + xr1G = ospl1; + yr2G = yr1G; + yr1G = spl1; + ); + + + slider8 != 0 ? ( + ospl0 = spl0; + spl0 = b0H * spl0 + b1H * xl1H + b2H * xl2H - a1H * yl1H - a2H * yl2H; + xl2H = xl1H; + xl1H = ospl0; + yl2H = yl1H; + yl1H = spl0; + + ospl1 = spl1; + spl1 = b0H * spl1 + b1H * xr1H + b2H * xr2H - a1H * yr1H - a2H * yr2H; + xr2H = xr1H; + xr1H = ospl1; + yr2H = yr1H; + yr1H = spl1; + ); + + + slider9 != 0 ? ( + ospl0 = spl0; + spl0 = b0I * spl0 + b1I * xl1I + b2I * xl2I - a1I * yl1I - a2I * yl2I; + xl2I = xl1I; + xl1I = ospl0; + yl2I = yl1I; + yl1I = spl0; + + ospl1 = spl1; + spl1 = b0I * spl1 + b1I * xr1I + b2I * xr2I - a1I * yr1I - a2I * yr2I; + xr2I = xr1I; + xr1I = ospl1; + yr2I = yr1I; + yr1I = spl1; + ); + + + slider10 != 0 ? ( + ospl0 = spl0; + spl0 = b0J * spl0 + b1J * xl1J + b2J * xl2J - a1J * yl1J - a2J * yl2J; + xl2J = xl1J; + xl1J = ospl0; + yl2J = yl1J; + yl1J = spl0; + + ospl1 = spl1; + spl1 = b0J * spl1 + b1J * xr1J + b2J * xr2J - a1J * yr1J - a2J * yr2J; + xr2J = xr1J; + xr1J = ospl1; + yr2J = yr1J; + yr1J = spl1; + ); + + + slider11 != 0 ? ( + ospl0 = spl0; + spl0 = b0K * spl0 + b1K * xl1K + b2K * xl2K - a1K * yl1K - a2K * yl2K; + xl2K = xl1K; + xl1K = ospl0; + yl2K = yl1K; + yl1K = spl0; + + ospl1 = spl1; + spl1 = b0K * spl1 + b1K * xr1K + b2K * xr2K - a1K * yr1K - a2K * yr2K; + xr2K = xr1K; + xr1K = ospl1; + yr2K = yr1K; + yr1K = spl1; + ); + + + slider12 != 0 ? ( + ospl0 = spl0; + spl0 = b0L * spl0 + b1L * xl1L + b2L * xl2L - a1L * yl1L - a2L * yl2L; + xl2L = xl1L; + xl1L = ospl0; + yl2L = yl1L; + yl1L = spl0; + + ospl1 = spl1; + spl1 = b0L * spl1 + b1L * xr1L + b2L * xr2L - a1L * yr1L - a2L * yr2L; + xr2L = xr1L; + xr1L = ospl1; + yr2L = yr1L; + yr1L = spl1; + ); + + + slider13 != 0 ? ( + ospl0 = spl0; + spl0 = b0M * spl0 + b1M * xl1M + b2M * xl2M - a1M * yl1M - a2M * yl2M; + xl2M = xl1M; + xl1M = ospl0; + yl2M = yl1M; + yl1M = spl0; + + ospl1 = spl1; + spl1 = b0M * spl1 + b1M * xr1M + b2M * xr2M - a1M * yr1M - a2M * yr2M; + xr2M = xr1M; + xr1M = ospl1; + yr2M = yr1M; + yr1M = spl1; + ); + + + slider14 != 0 ? ( + ospl0 = spl0; + spl0 = b0N * spl0 + b1N * xl1N + b2N * xl2N - a1N * yl1N - a2N * yl2N; + xl2N = xl1N; + xl1N = ospl0; + yl2N = yl1N; + yl1N = spl0; + + ospl1 = spl1; + spl1 = b0N * spl1 + b1N * xr1N + b2N * xr2N - a1N * yr1N - a2N * yr2N; + xr2N = xr1N; + xr1N = ospl1; + yr2N = yr1N; + yr1N = spl1; + ); + + + slider15 != 22000 ? ( + ospl0 = spl0; + spl0 = b0P * spl0 + b1P * xl1P + b2P * xl2P - a1P * yl1P - a2P * yl2P; + xl2P = xl1P; + xl1P = ospl0; + yl2P = yl1P; + yl1P = spl0; + + ospl1 = spl1; + spl1 = b0P * spl1 + b1P * xr1P + b2P * xr2P - a1P * yr1P - a2P * yr2P; + xr2P = xr1P; + xr1P = ospl1; + yr2P = yr1P; + yr1P = spl1; + ); + + + + spl0 *= gain; + spl1 *= gain; diff --git a/Effects/Teej/rbj4eq-teej b/Effects/Teej/rbj4eq-teej new file mode 100644 index 0000000..a1b0fd4 --- /dev/null +++ b/Effects/Teej/rbj4eq-teej @@ -0,0 +1,291 @@ +// Copyright 2006, Thomas Scott Stillwell +// All rights reserved. +// +//Redistribution and use in source and binary forms, with or without modification, are permitted +//provided that the following conditions are met: +// +//Redistributions of source code must retain the above copyright notice, this list of conditions +//and the following disclaimer. +// +//Redistributions in binary form must reproduce the above copyright notice, this list of conditions +//and the following disclaimer in the documentation and/or other materials provided with the distribution. +// +//The name of Thomas Scott Stillwell may not be used to endorse or +//promote products derived from this software without specific prior written permission. +// +//THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR +//IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +//FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS +//BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +//(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +//PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, +//STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +//THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// +//This modified version of the fabulous SS:rbj4eq is presented by TJ Higley. (2/18/07) +// + +desc:RBJ 4-Band Semi-Parametric EQ v2 +desc:RBJ 4-Band Semi-Parametric EQ v2 [teej] +//tags: equalizer filter +//author: teej + +// based on RBJ Filter Cookbook + +slider1:0<0,400,5>HPF (Hz) +slider2:0<0,10000,1>Freq 1 (Hz) +slider3:1<.5,10,0.1>Q 1 +slider4:0<-12,6,0.5>Gain 1 (dB) +slider5:0<0,10000,1>Freq 2 (Hz) +slider6:1<.5,10,0.1>Q 2 +slider7:0<-12,6,0.5>Gain 2 (dB) +slider8:0<0,10000,1>Freq 3 (Hz) +slider9:1<.5,10,0.1>Q 3 +slider10:0<-12,6,0.5>Gain 3 (dB) +slider11:0<0,10000,1>Freq 4 (Hz) +slider12:1<.5,10,0.1>Q 4 +slider13:0<-12,6,0.5>Gain 4 (dB) +slider14:22000<400,22000,5>LPF (Hz) +slider15:0<-12,12,0.5>Output Gain (dB) + +in_pin:left input +in_pin:right input +out_pin:left output +out_pin:right output + +@init + cDcAdd = 10^-30; + cDenorm = 10^-30; + + +@slider + + gain = 10^(slider15/20); + + a0 = 1; + s0 = 1; + q0 = 1 / (sqrt((a0 + 1/a0)*(1/s0 - 1) + 2)); + w00 = 2 * $pi * slider1/srate; + cosw00 = cos(w00); + sinw00 = sin(w00); + alpha0 = sinw00 / (2 * q0); + + b00 = (1 + cosw00)/2; + b10 = -(1 + cosw00); + b20 = (1 + cosw00)/2; + a00 = 1 + alpha0; + a10 = -2 * cosw00; + a20 = 1 - alpha0; + b00 /= a00; + b10 /= a00; + b20 /= a00; + a10 /= a00; + a20 /= a00; + + a1 = (10^(slider4/40)); + q1 = slider3; + w01 = 2 * $pi * slider2/srate; + cosw01 = cos(w01); + sinw01 = sin(w01); + alpha1 = sinw01 / (2 * q1); + + b01 = 1 + alpha1 * a1; + b11 = -2 * cosw01; + b21 = 1 - alpha1 * a1; + a01 = 1 + alpha1 / a1; + a11 = -2 * cosw01; + a21 = 1 - alpha1 / a1; + b01 /= a01; + b11 /= a01; + b21 /= a01; + a11 /= a01; + a21 /= a01; + + a3 = (10^(slider7/40)); + q3 = slider6; + w03 = 2 * $pi * slider5/srate; + cosw03 = cos(w03); + sinw03 = sin(w03); + alpha3 = sinw03 / (2 * q3); + + b03 = 1 + alpha3 * a3; + b13 = -2 * cosw03; + b23 = 1 - alpha3 * a3; + a03 = 1 + alpha3 / a3; + a13 = -2 * cosw03; + a23 = 1 - alpha3 / a3; + b03 /= a03; + b13 /= a03; + b23 /= a03; + a13 /= a03; + a23 /= a03; + + a5 = (10^(slider10/40)); + q5 = slider9; + w05 = 2 * $pi * slider8/srate; + cosw05 = cos(w05); + sinw05 = sin(w05); + alpha5 = sinw05 / (2 * q5); + + b05 = 1 + alpha5 * a5; + b15 = -2 * cosw05; + b25 = 1 - alpha5 * a5; + a05 = 1 + alpha5 / a5; + a15 = -2 * cosw05; + a25 = 1 - alpha5 / a5; + b05 /= a05; + b15 /= a05; + b25 /= a05; + a15 /= a05; + a25 /= a05; + + a7 = (10^(slider13/40)); + q7 = slider12; + w07 = 2 * $pi * slider11/srate; + cosw07 = cos(w07); + sinw07 = sin(w07); + alpha7 = sinw07 / (2 * q7); + + b07 = 1 + alpha7 * a7; + b17 = -2 * cosw07; + b27 = 1 - alpha7 * a7; + a07 = 1 + alpha7 / a7; + a17 = -2 * cosw07; + a27 = 1 - alpha7 / a7; + b07 /= a07; + b17 /= a07; + b27 /= a07; + a17 /= a07; + a27 /= a07; + + + a9 = 1; + s9 = 2; + q9 = 1 / (sqrt((a9 + 1/a9)*(1/s9 - 1) + 2)); + w09 = 2 * $pi * slider14/srate; + cosw09 = cos(w09); + sinw09 = sin(w09); + alpha9 = sinw09 / (2 * q9); + + b09 = (1 - cosw09)/2; + b19 = (1 - cosw09); + b29 = (1 - cosw09)/2; + a09 = 1 + alpha9; + a19 = -2 * cosw09; + a29 = 1 - alpha9; + b09 /= a09; + b19 /= a09; + b29 /= a09; + a19 /= a09; + a29 /= a09; + + + +@sample + + slider1 != 0 ? ( + ospl0 = spl0; + spl0 = b00 * spl0 + b10 * xl10 + b20 * xl20 - a10 * yl10 - a20 * yl20; + xl20 = xl10; + xl10 = ospl0; + yl20 = yl10; + yl10 = abs(spl0) < cDenorm ? 0 : spl0; + + ospl1 = spl1; + spl1 = b00 * spl1 + b10 * xr10 + b20 * xr20 - a10 * yr10 - a20 * yr20; + xr20 = xr10; + xr10 = ospl1; + yr20 = yr10; + yr10 = abs(spl1) < cDenorm ? 0 : spl1; + ); + + + spl0 += cDcAdd; + spl1 += cDcAdd; + + + slider4 != 0 && slider2 != 0 ? ( + ospl0 = spl0; + spl0 = b01 * spl0 + b11 * xl11 + b21 * xl21 - a11 * yl11 - a21 * yl21; + xl21 = xl11; + xl11 = ospl0; + yl21 = yl11; + yl11 = spl0; + + ospl1 = spl1; + spl1 = b01 * spl1 + b11 * xr11 + b21 * xr21 - a11 * yr11 - a21 * yr21; + xr21 = xr11; + xr11 = ospl1; + yr21 = yr11; + yr11 = spl1; + ); + + slider7 && slider5 != 0 ? ( + ospl0 = spl0; + spl0 = b03 * spl0 + b13 * xl13 + b23 * xl23 - a13 * yl13 - a23 * yl23; + xl23 = xl13; + xl13 = ospl0; + yl23 = yl13; + yl13 = spl0; + + ospl1 = spl1; + spl1 = b03 * spl1 + b13 * xr13 + b23 * xr23 - a13 * yr13 - a23 * yr23; + xr23 = xr13; + xr13 = ospl1; + yr23 = yr13; + yr13 = spl1; + ); + + slider10 && slider8 != 0 ? ( + ospl0 = spl0; + spl0 = b05 * spl0 + b15 * xl15 + b25 * xl25 - a15 * yl15 - a25 * yl25; + xl25 = xl15; + xl15 = ospl0; + yl25 = yl15; + yl15 = spl0; + + ospl1 = spl1; + spl1 = b05 * spl1 + b15 * xr15 + b25 * xr25 - a15 * yr15 - a25 * yr25; + xr25 = xr15; + xr15 = ospl1; + yr25 = yr15; + yr15 = spl1; + ); + + slider13 && slider11 != 0 ? ( + ospl0 = spl0; + spl0 = b07 * spl0 + b17 * xl17 + b27 * xl27 - a17 * yl17 - a27 * yl27; + xl27 = xl17; + xl17 = ospl0; + yl27 = yl17; + yl17 = spl0; + + ospl1 = spl1; + spl1 = b07 * spl1 + b17 * xr17 + b27 * xr27 - a17 * yr17 - a27 * yr27; + xr27 = xr17; + xr17 = ospl1; + yr27 = yr17; + yr17 = spl1; + ); + + + slider14 != 22000 ? ( + ospl0 = spl0; + spl0 = b09 * spl0 + b19 * xl19 + b29 * xl29 - a19 * yl19 - a29 * yl29; + xl29 = xl19; + xl19 = ospl0; + yl29 = yl19; + yl19 = spl0; + + ospl1 = spl1; + spl1 = b09 * spl1 + b19 * xr19 + b29 * xr29 - a19 * yr19 - a29 * yr29; + xr29 = xr19; + xr19 = ospl1; + yr29 = yr19; + yr19 = spl1; + ); + + + spl0 *= gain; + spl1 *= gain; diff --git a/Effects/Teej/rbj4notch-teej b/Effects/Teej/rbj4notch-teej new file mode 100644 index 0000000..e888851 --- /dev/null +++ b/Effects/Teej/rbj4notch-teej @@ -0,0 +1,334 @@ +// Copyright 2006, Thomas Scott Stillwell +// All rights reserved. +// +//Redistribution and use in source and binary forms, with or without modification, are permitted +//provided that the following conditions are met: +// +//Redistributions of source code must retain the above copyright notice, this list of conditions +//and the following disclaimer. +// +//Redistributions in binary form must reproduce the above copyright notice, this list of conditions +//and the following disclaimer in the documentation and/or other materials provided with the distribution. +// +//The name of Thomas Scott Stillwell may not be used to endorse or +//promote products derived from this software without specific prior written permission. +// +//THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR +//IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +//FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS +//BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +//(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +//PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, +//STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +//THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// +//This modified version of the fabulous SS:rbj4eq is presented by TJ Higley. (2/18/07) +// +//The depth of each notch is customizable by modifying 'notchCut' in line 40. +//The width of each notch is customizable by modifying 'notchQ' in line 41. +//The boost provided by the Sweep slider is customizable by modifying 'sweepBoost' in line 42. +//The width of of the Sweep boost is customizable by modifying 'sweepQ' in line 43. + +desc:RBJ 4-Band Notch Filter +//tags: filter +//author: teej + +//based on RBJ Filter Cookbook + +slider1:0<0,400,1>HPF +slider2:0<0,10000,5>Sweep +slider3:0<0,10000,5>Notch 1 +slider4:0<0,10000,5>Notch 2 +slider5:0<0,10000,5>Notch 3 +slider6:0<0,10000,5>Notch 4 +slider7:22000<400,22000,5>LPF +slider8:0<-12,12,0.5>Output Gain + +in_pin:left input +in_pin:right input +out_pin:left output +out_pin:right output + +@init + cDcAdd = 10^-30; + cDenorm = 10^-30; + notchCut = -9; + notchQ = 8; + sweepBoost = 9; + sweepQ = 2; + + +@slider + + gain = 10^(slider8/20); + + aHPF = 1; + sHPF = 1; + qHPF = 1 / (sqrt((aHPF + 1/aHPF)*(1/sHPF - 1) + 2)); + w0HPF = 2 * $pi * slider1/srate; + cosw0HPF = cos(w0HPF); + sinw0HPF = sin(w0HPF); + alphaHPF = sinw0HPF / (2 * qHPF); + + b0HPF = (1 + cosw0HPF)/2; + b1HPF = -(1 + cosw0HPF); + b2HPF = (1 + cosw0HPF)/2; + a0HPF = 1 + alphaHPF; + a1HPF = -2 * cosw0HPF; + a2HPF = 1 - alphaHPF; + b0HPF /= a0HPF; + b1HPF /= a0HPF; + b2HPF /= a0HPF; + a1HPF /= a0HPF; + a2HPF /= a0HPF; + + + aSWP = (10^(sweepBoost/40)); + qSWP = sweepQ; + w0SWP = 2 * $pi * slider2/srate; + cosw0SWP = cos(w0SWP); + sinw0SWP = sin(w0SWP); + alphaSWP = sinw0SWP / (2 * qSWP); + + b0SWP = 1 + alphaSWP * aSWP; + b1SWP = -2 * cosw0SWP; + b2SWP = 1 - alphaSWP * aSWP; + a0SWP = 1 + alphaSWP / aSWP; + a1SWP = -2 * cosw0SWP; + a2SWP = 1 - alphaSWP / aSWP; + b0SWP /= a0SWP; + b1SWP /= a0SWP; + b2SWP /= a0SWP; + a1SWP /= a0SWP; + a2SWP /= a0SWP; + + + aA = (10^(notchCut/40)); + qA = notchQ; + w0A = 2 * $pi * slider3/srate; + cosw0A = cos(w0A); + sinw0A = sin(w0A); + alphaA = sinw0A / (2 * qA); + + b0A = 1 + alphaA * aA; + b1A = -2 * cosw0A; + b2A = 1 - alphaA * aA; + a0A = 1 + alphaA / aA; + a1A = -2 * cosw0A; + a2A = 1 - alphaA / aA; + b0A /= a0A; + b1A /= a0A; + b2A /= a0A; + a1A /= a0A; + a2A /= a0A; + + + aB = (10^(notchCut/40)); + qB = notchQ; + w0B = 2 * $pi * slider4/srate; + cosw0B = cos(w0B); + sinw0B = sin(w0B); + alphaB = sinw0B / (2 * qB); + + b0B = 1 + alphaB * aB; + b1B = -2 * cosw0B; + b2B = 1 - alphaB * aB; + a0B = 1 + alphaB / aB; + a1B = -2 * cosw0B; + a2B = 1 - alphaB / aB; + b0B /= a0B; + b1B /= a0B; + b2B /= a0B; + a1B /= a0B; + a2B /= a0B; + + + aC = (10^(notchCut/40)); + qC = notchQ; + w0C = 2 * $pi * slider5/srate; + cosw0C = cos(w0C); + sinw0C = sin(w0C); + alphaC = sinw0C / (2 * qC); + + b0C = 1 + alphaC * aC; + b1C = -2 * cosw0C; + b2C = 1 - alphaC * aC; + a0C = 1 + alphaC / aC; + a1C = -2 * cosw0C; + a2C = 1 - alphaC / aC; + b0C /= a0C; + b1C /= a0C; + b2C /= a0C; + a1C /= a0C; + a2C /= a0C; + + + aD = (10^(notchCut/40)); + qD = notchQ; + w0D = 2 * $pi * slider6/srate; + cosw0D = cos(w0D); + sinw0D = sin(w0D); + alphaD = sinw0D / (2 * qD); + + b0D = 1 + alphaD * aD; + b1D = -2 * cosw0D; + b2D = 1 - alphaD * aD; + a0D = 1 + alphaD / aD; + a1D = -2 * cosw0D; + a2D = 1 - alphaD / aD; + b0D /= a0D; + b1D /= a0D; + b2D /= a0D; + a1D /= a0D; + a2D /= a0D; + + + aLPF = 1; + sLPF = 2; + qLPF = 1 / (sqrt((aLPF + 1/aLPF)*(1/sLPF - 1) + 2)); + w0LPF = 2 * $pi * slider7/srate; + cosw0LPF = cos(w0LPF); + sinw0LPF = sin(w0LPF); + alphaLPF = sinw0LPF / (2 * qLPF); + + b0LPF = (1 - cosw0LPF)/2; + b1LPF = (1 - cosw0LPF); + b2LPF = (1 - cosw0LPF)/2; + a0LPF = 1 + alphaLPF; + a1LPF = -2 * cosw0LPF; + a2LPF = 1 - alphaLPF; + b0LPF /= a0LPF; + b1LPF /= a0LPF; + b2LPF /= a0LPF; + a1LPF /= a0LPF; + a2LPF /= a0LPF; + +@sample + + + slider1 != 0 ? ( + osplHPF = spl0; + spl0 = b0HPF * spl0 + b1HPF * xl1HPF + b2HPF * xl2HPF - a1HPF * yl1HPF - a2HPF * yl2HPF; + xl2HPF = xl1HPF; + xl1HPF = osplHPF; + yl2HPF = yl1HPF; + yl1HPF = abs(spl0) < cDenorm ? 0 : spl0; + + ospl1 = spl1; + spl1 = b0HPF * spl1 + b1HPF * xr1HPF + b2HPF * xr2HPF - a1HPF * yr1HPF - a2HPF * yr2HPF; + xr2HPF = xr1HPF; + xr1HPF = ospl1; + yr2HPF = yr1HPF; + yr1HPF = abs(spl1) < cDenorm ? 0 : spl1; + ); + + + spl0 += cDcAdd; + spl1 += cDcAdd; + + + slider2 != 0 ? ( + ospl0 = spl0; + spl0 = b0SWP * spl0 + b1SWP * xl1SWP + b2SWP * xl2SWP - a1SWP * yl1SWP - a2SWP * yl2SWP; + xl2SWP = xl1SWP; + xl1SWP = ospl0; + yl2SWP = yl1SWP; + yl1SWP = spl0; + + ospl1 = spl1; + spl1 = b0SWP * spl1 + b1SWP * xr1SWP + b2SWP * xr2SWP - a1SWP * yr1SWP - a2SWP * yr2SWP; + xr2SWP = xr1SWP; + xr1SWP = ospl1; + yr2SWP = yr1SWP; + yr1SWP = spl1; + ); + + + slider3 != 0 ? ( + ospl0 = spl0; + spl0 = b0A * spl0 + b1A * xl1A + b2A * xl2A - a1A * yl1A - a2A * yl2A; + xl2A = xl1A; + xl1A = ospl0; + yl2A = yl1A; + yl1A = spl0; + + ospl1 = spl1; + spl1 = b0A * spl1 + b1A * xr1A + b2A * xr2A - a1A * yr1A - a2A * yr2A; + xr2A = xr1A; + xr1A = ospl1; + yr2A = yr1A; + yr1A = spl1; + ); + + + slider4 != 0? ( + ospl0 = spl0; + spl0 = b0B * spl0 + b1B * xl1B + b2B * xl2B - a1B * yl1B - a2B * yl2B; + xl2B = xl1B; + xl1B = ospl0; + yl2B = yl1B; + yl1B = spl0; + + ospl1 = spl1; + spl1 = b0B * spl1 + b1B * xr1B + b2B * xr2B - a1B * yr1B - a2B * yr2B; + xr2B = xr1B; + xr1B = ospl1; + yr2B = yr1B; + yr1B = spl1; + ); + + + slider5 != 0? ( + ospl0 = spl0; + spl0 = b0C * spl0 + b1C * xl1C + b2C * xl2C - a1C * yl1C - a2C * yl2C; + xl2C = xl1C; + xl1C = ospl0; + yl2C = yl1C; + yl1C = spl0; + + ospl1 = spl1; + spl1 = b0C * spl1 + b1C * xr1C + b2C * xr2C - a1C * yr1C - a2C * yr2C; + xr2C = xr1C; + xr1C = ospl1; + yr2C = yr1C; + yr1C = spl1; + ); + + + slider6 != 0? ( + ospl0 = spl0; + spl0 = b0D * spl0 + b1D * xl1D + b2D * xl2D - a1D * yl1D - a2D * yl2D; + xl2D = xl1D; + xl1D = ospl0; + yl2D = yl1D; + yl1D = spl0; + + ospl1 = spl1; + spl1 = b0D * spl1 + b1D * xr1D + b2D * xr2D - a1D * yr1D - a2D * yr2D; + xr2D = xr1D; + xr1D = ospl1; + yr2D = yr1D; + yr1D = spl1; + ); + + + slider7 != 22000 ? ( + ospl0 = spl0; + spl0 = b0LPF * spl0 + b1LPF * xl1LPF + b2LPF * xl2LPF - a1LPF * yl1LPF - a2LPF * yl2LPF; + xl2LPF = xl1LPF; + xl1LPF = ospl0; + yl2LPF = yl1LPF; + yl1LPF = spl0; + + ospl1 = spl1; + spl1 = b0LPF * spl1 + b1LPF * xr1LPF + b2LPF * xr2LPF - a1LPF * yr1LPF - a2LPF * yr2LPF; + xr2LPF = xr1LPF; + xr1LPF = ospl1; + yr2LPF = yr1LPF; + yr1LPF = spl1; + ); + + + spl0 *= gain; + spl1 *= gain; diff --git a/Effects/Till/Auto-Wideness v1.0 b/Effects/Till/Auto-Wideness v1.0 new file mode 100644 index 0000000..c281287 --- /dev/null +++ b/Effects/Till/Auto-Wideness v1.0 @@ -0,0 +1,246 @@ +// written by Till +// filter written by SStillwell based on RBJ's filter cookbook +// SStillwell's copyright notice can be found at the bottom + +desc: Auto-Wideness +//tags: processing stereo +//author: Till + +slider1:-18<-60,0,1>0% Wideness @ (dB) +slider2:-6<-30,24,1>100% Wideness @ (dB) +slider3:1<0,50,1>Attack (ms) +slider4:250<20,2000,10>Release (ms) +slider5:0<0,50,1>Min Width (%) +slider6:100<50,500,10>Max Width (%) +slider7:0<0,2,1{Left+Right,Left,Right}>0% Signal +slider8:0<0,1,1{No,Yes}>Reverse Mode +slider14:0<0,100,1>Current Wideness (%) +slider9:0<0,5,1{Left+Right,Left,Right,Sidechain Left+Right,Sidechain Left,Sidechain Right}>Director +slider10:20<20,20000,10>Director HP (Hz) +slider11:20000<20,20000,10>Director LP (Hz) +slider12:0<0,1,1{No,Yes}>Preview Director + +in_pin:left input +in_pin:right input +in_pin:sidechain left input +in_pin:sidechain right input +out_pin:left output +out_pin:right output + +///////////////// +/// /// +/// I N I T /// +/// /// +///////////////// + +@init + + curwideness = 0; // factor + +///////////////// +/// /// +/// SLIDER /// +/// /// +///////////////// + +@slider + + // SLIDER VALUES + + bottomdb = slider1; // dB + bottom = 2 ^ (bottomdb / 6); // Amplitude + + topdb = slider2; // dB + top = 2 ^ (topdb / 6); // factor + + attack = max(1, ceil(slider3 / 1000 * srate)); // samples + + release = max(1, ceil(slider4 / 1000 * srate)); // samples + + minwidth = slider5; + + maxwidth = slider6; + + zerowidth = slider7; + + reverse = slider8; + + director = slider9; + + hipass = slider10; + lopass = slider11; + + preview = slider12; + + // filtering values + + a0 = 1; + s0 = 1; + q0 = 1 / (sqrt((a0 + 1/a0)*(1/s0 - 1) + 2)); + w00 = 2 * $pi * hipass/srate; + cosw00 = cos(w00); + sinw00 = sin(w00); + alpha0 = sinw00 / (2 * q0); + + b00 = (1 + cosw00)/2; + b10 = -(1 + cosw00); + b20 = (1 + cosw00)/2; + a00 = 1 + alpha0; + a10 = -2 * cosw00; + a20 = 1 - alpha0; + b00 /= a00; + b10 /= a00; + b20 /= a00; + a10 /= a00; + a20 /= a00; + + a9 = 1; + s9 = 2; + q9 = 1 / (sqrt((a9 + 1/a9)*(1/s9 - 1) + 2)); + w09 = 2 * $pi * lopass/srate; + cosw09 = cos(w09); + sinw09 = sin(w09); + alpha9 = sinw09 / (2 * q9); + + b09 = (1 - cosw09)/2; + b19 = (1 - cosw09); + b29 = (1 - cosw09)/2; + a09 = 1 + alpha9; + a19 = -2 * cosw09; + a29 = 1 - alpha9; + b09 /= a09; + b19 /= a09; + b29 /= a09; + a19 /= a09; + a29 /= a09; + +///////////////// +/// /// +/// SAMPLE /// +/// /// +///////////////// + +@sample + + // choosing director + + director == 0 ? ( + dl = spl0; + dr = spl1; + ) : director == 1 ? ( + dl = spl0; + dr = spl0; + ) : director == 2 ? ( + dl = spl1; + dr = spl1; + ) : director == 3 ? ( + dl = spl2; + dr = spl3; + ) : director == 4 ? ( + dl = spl2; + dr = spl2; + ) : director == 5 ? ( + dl = spl3; + dr = spl3; + ) : 0; + + // filtering + + hipass > 20 ? ( + ospl0 = dl; + dl = b00 * dl + b10 * xl10 + b20 * xl20 - a10 * yl10 - a20 * yl20; + xl20 = xl10; + xl10 = ospl0; + yl20 = yl10; + yl10 = dl; + + ospl1 = dr; + dr = b00 * dr + b10 * xr10 + b20 * xr20 - a10 * yr10 - a20 * yr20; + xr20 = xr10; + xr10 = ospl1; + yr20 = yr10; + yr10 = dr; + ); + + lopass < 20000 ? ( + ospl0 = dl; + dl = b09 * dl + b19 * xl19 + b29 * xl29 - a19 * yl19 - a29 * yl29; + xl29 = xl19; + xl19 = ospl0; + yl29 = yl19; + yl19 = dl; + + ospl1 = dr; + dr = b09 * dr + b19 * xr19 + b29 * xr29 - a19 * yr19 - a29 * yr29; + xr29 = xr19; + xr19 = ospl1; + yr29 = yr19; + yr19 = dr; + ); + + // choosing 0% width signal + + zerowidth == 0 ? ( + z = (spl0 + spl1) / 2; + ) : zerowidth == 1 ? ( + z = spl0; + ) : zerowidth == 2 ? ( + z = spl1; + ) : 0; + + cursample = (abs(dl) + abs(dr)) / 2; + + cursampledb = 6 * log(cursample) / log(2); + destwideness = (cursampledb - bottomdb) / (topdb - bottomdb); + + widenesschange = destwideness - curwideness; + + widenesschange > 0 ? (widenesschange = widenesschange / attack) : (widenesschange = widenesschange / release); + + curwideness += widenesschange; + + curwideness = min(reverse ? (1 - minwidth / 100) : (maxwidth / 100), curwideness); + curwideness = max(reverse ? (1 - maxwidth / 100) : (minwidth / 100), curwideness); + + actualwideness = curwideness; + + reverse ? ( + actualwideness = 1 - actualwideness; + ) : 0; + + l = actualwideness * spl0 + (1 - actualwideness) * z; + r = actualwideness * spl1 + (1 - actualwideness) * z; + + preview ? ( + spl0 = dl; + spl1 = dr; + ) : ( + spl0 = l; + spl1 = r; + ); + + slider14 = ceil(actualwideness * 100); + +// Copyright 2006, Thomas Scott Stillwell +// All rights reserved. +// +//Redistribution and use in source and binary forms, with or without modification, are permitted +//provided that the following conditions are met: +// +//Redistributions of source code must retain the above copyright notice, this list of conditions +//and the following disclaimer. +// +//Redistributions in binary form must reproduce the above copyright notice, this list of conditions +//and the following disclaimer in the documentation and/or other materials provided with the distribution. +// +//The name of Thomas Scott Stillwell may not be used to endorse or +//promote products derived from this software without specific prior written permission. +// +//THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR +//IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +//FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS +//BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +//(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +//PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, +//STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +//THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/Effects/Till/Transient-driven Auto-Pan v1.0 (Master) b/Effects/Till/Transient-driven Auto-Pan v1.0 (Master) new file mode 100644 index 0000000..d27d167 --- /dev/null +++ b/Effects/Till/Transient-driven Auto-Pan v1.0 (Master) @@ -0,0 +1,317 @@ +// written by Till +// +// note: the effect sends data to regx. x is specified by the "send pan data to" slider +// +// note: the lookahead must be compensated manually +// +// + +desc: Transient-Driven Auto-Pan (Master) +//tags: processing stereo modulation +//author: Till + +slider1:0<0,2,1{Stereo,Left,Right}>Input +slider2:3<0,3,1{Left to Right,Right to Left,Bounce,Random (Ignores Pan/Random step size)}>Pan Mode +slider3:10<0,100,1>Pan Step Size (%) +slider4:0<0,100,1>Random Step Size (%) +slider5:100<1,100,1>Max Pan +slider6:20<0,1000,1>Fade Time (ms) +slider7:0<0,10,1>Sloppiness (Master Only) +slider8:250<20,500,1>Min Pause Between Pans (ms) +slider9:0<0,10,1>Max Delay (ms) +slider11:0<0,5,1{Left+Right,Left,Right,Sidechain Left+Right,Sidechain Left,Sidechain Right}>Director +slider12:0<0,1,1{No,Yes}>Preview Director +slider13:5<0,10,.1>Sensitivity +slider14:0<0,100,1>Look Ahead (ms) +slider15:0<0,10,1{Off,reg00,reg01,reg02,reg03,reg04,reg05,reg06,reg07,reg08,reg09}>Send Pan Data To +slider16:0<-100,100,1>Current Pan + +in_pin:left input +in_pin:right input +in_pin:sidechain left input +in_pin:sidechain right input +out_pin:left output +out_pin:right output + +///////////////// +/// /// +/// I N I T /// +/// /// +///////////////// + +@init + + log2 = log(2); + sqrt2 = sqrt(2); + + curgain = 1; + curgaindb = 0; + splsincelastpan = 0; + now = 0; + curpan = 0; + sloppypan = 0; + targetpan = 0; + lastpan = 0; + forth = 1; + + maxdelay = ceil((10 + 100) / 1000 * srate); + + delaybufferl = 0; + delaybufferr = 2 * maxdelay; + + delaypointer = 0; + + rmswindow = 50 / 1000 * srate; + rmsbuffer = 4 * maxdelay; + + rmssum = 0; + rmsp = 0; + +///////////////// +/// /// +/// SLIDER /// +/// /// +///////////////// + +@slider + + // SLIDER VALUES + + input = slider1; + + mode = slider2; + + stepsize = slider3; + randomstepsize = slider4; + + maxpan = slider5; + + fadetime = slider6 / 1000 * srate; + sloppiness = slider7; + + pause = slider8 / 1000 * srate; + + delay = slider9 / 1000 * srate; + + director = slider11; + + preview = slider12; + + sensitivity = slider13; + + lookahead = slider14 / 1000 * srate; + + sendto = slider15; + + attack = max(1, sqr(sensitivity) * 0.003 * srate); + release = max(1, pause / 2); + + tolerancedb = 12 - sensitivity; + tolerance = 2 ^ (tolerancedb / 6); + + minrms = 2 ^ (-5 - sensitivity / 2); + +///////////////// +/// /// +/// SAMPLE /// +/// /// +///////////////// + +@sample + + // choosing input + + input == 0 ? ( + l = spl0; + r = spl1; + ) : input == 1 ? ( + l = spl0; + r = spl0; + ) : input == 2 ? ( + l = spl1; + r = spl1; + ) : 0; + + // buffering + + delaybufferl[delaypointer] = l; + delaybufferl[delaypointer + maxdelay] = l; + delaybufferr[delaypointer] = r; + delaybufferr[delaypointer + maxdelay] = r; + + // choosing director + + director == 0 ? ( + dl = spl0; + dr = spl1; + ) : director == 1 ? ( + dl = spl0; + dr = spl0; + ) : director == 2 ? ( + dl = spl1; + dr = spl1; + ) : director == 3 ? ( + dl = spl2; + dr = spl3; + ) : director == 4 ? ( + dl = spl2; + dr = spl2; + ) : director == 5 ? ( + dl = spl3; + dr = spl3; + ) : 0; + + cursample = (abs(dl) + abs(dr)) / 2; + +// calcing rms power + + rmssum -= rmsbuffer[rmsp]; + + rmssum += sqr(cursample); + + rmsbuffer[rmsp] = sqr(cursample); + + rms = max(sqrt(rmssum / rmswindow), minrms); + + rmsp+=1; + rmsp >= rmswindow && rmsp = 0; + + threshold = rms * 1.68; + thresholddb = 6 * log(threshold) / log2 + 3; + +// detecting + + (cursample >= threshold) ? ( + cursampledb = 6 * log(cursample) / log2; + targetgaindb = thresholddb - cursampledb; + ) : ( + targetgaindb = 0; + ); + + targetgaindb > curgaindb ? ( + curgaindb += (targetgaindb - curgaindb) / release; + ) : ( + curgaindb += (targetgaindb - curgaindb) / attack; + ); + + curgain = exp((curgaindb / 6) * log2); + + detector = cursample * curgain; + +// panning + + pop = 0; + now ? ( + (splsincelastpan > pause) && now = 0; + ) : ( + detector > threshold * tolerance && ( + pop = 1; + now = 1; + splsincelastpan = 0; + lastpan = curpan; + mode == 0 ? ( + targetpan = curpan + stepsize + (rand(2) - 1) * randomstepsize; + targetpan < -maxpan && (targetpan += 2 * maxpan); + targetpan > maxpan && (targetpan -= 2 * maxpan); + ) : mode == 1 ? ( + targetpan = curpan - stepsize - (rand(2) - 1) * randomstepsize; + targetpan > maxpan && (targetpan -= 2 * maxpan); + targetpan < -maxpan && (targetpan += 2 * maxpan); + ) : mode == 2 ? ( + forth ? ( + targetpan = curpan + stepsize + (rand(2) - 1) * randomstepsize; + ) : ( + targetpan = curpan - stepsize - (rand(2) - 1) * randomstepsize; + ); + targetpan > maxpan && ( + targetpan = 2 * maxpan - targetpan; + forth = 0; + ); + targetpan < -maxpan && ( + targetpan = - 2* maxpan - targetpan; + forth = 1; + ); + ) : ( + targetpan = ceil((rand(2) - 1) * maxpan); + ); + ); + ); + + splsincelastpan += 1; + +//fading the pan + + curpan != targetpan && ( + fadepos = splsincelastpan / fadetime; + fadepos = (-cos(min(fadepos, 1) * $pi) + 1) / 2; + curpan = lastpan + (targetpan - lastpan) * fadepos; + ); + +// sending pan info + + sendto > 0 && ( + sendto == 1 ? ( + reg00 = curpan; + ) : sendto == 2 ? ( + reg01 = curpan; + ) : sendto == 3 ? ( + reg02 = curpan; + ) : sendto == 4 ? ( + reg03 = curpan; + ) : sendto == 5 ? ( + reg04 = curpan; + ) : sendto == 6 ? ( + reg05 = curpan; + ) : sendto == 7 ? ( + reg06 = curpan; + ) : sendto == 8 ? ( + reg07 = curpan; + ) : sendto == 9 ? ( + reg08 = curpan; + ) : sendto == 10 ? ( + reg09 = curpan; + ) : 0; + ); + +// sloppiness + + s = sloppiness * sloppiness * sloppiness * sloppiness; + sloppypan = (curpan + s * sloppypan) / (s + 1); + +// calculating the actual volumes + + abspan = abs(sloppypan); + dominantpandb = 6 * abspan / 100; + dominantpan = exp((dominantpandb / 6) * log2); + recessivepan = 2 - dominantpan; + +// leveling + + sloppypan > 0 ? ( + r = dominantpan * delaybufferr[maxdelay + delaypointer - lookahead]; + x = abspan / 100 * delay; + f = x - floor(x); + c = floor(x + 1) - x; + l = recessivepan * (c * delaybufferl[maxdelay + delaypointer - floor(abspan / 100 * delay) - lookahead] + f * delaybufferl[maxdelay + delaypointer - ceil(abspan / 100 * delay) - lookahead]); + ) : ( + l = dominantpan * delaybufferl[maxdelay + delaypointer - lookahead]; + x = abspan / 100 * delay; + f = x - floor(x); + c = floor(x + 1) - x; + r = recessivepan * (c * delaybufferr[maxdelay + delaypointer - floor(abspan / 100 * delay) - lookahead] + f * delaybufferr[maxdelay + delaypointer - ceil(abspan / 100 * delay) - lookahead]); + ); + +// outputting + + preview ? ( + spl0 = dl; + spl1 = pop; + ) : ( + spl0 = l; + spl1 = r; + ); + + slider16 = curpan; + + delaypointer += 1; + delaypointer >= maxdelay && (delaypointer = 0); diff --git a/Effects/Till/Transient-driven Auto-Pan v1.0 (Slave) b/Effects/Till/Transient-driven Auto-Pan v1.0 (Slave) new file mode 100644 index 0000000..1e679c5 --- /dev/null +++ b/Effects/Till/Transient-driven Auto-Pan v1.0 (Slave) @@ -0,0 +1,199 @@ +// written by Till +// +// note: the effect receives data from reg[x] x is specified by the "receive pan data from" slider +// +// note: the lookahead must be compensated manually +// +// note: the frequency of data being received from the master depends on +// the overall blocksize which is apparently depending on your interface's latency. +// so the slave effect cannot always be up to date with the master effect +// the quantisation is being interpolated linearly + +desc: Transient-Driven Auto-Pan (Slave) +//tags: processing stereo modulation +//author: Till + +slider1:0<0,2,1{Stereo,Left,Right}>Input +slider2:0<0,9,1{reg00,reg01,reg02,reg03,reg04,reg05,reg06,reg07,reg08,reg09}>Receive Pan Data From +slider3:0<-100,100,1>Received Pan +slider4:0<0,10,1>Sloppiness +slider5:0<0,1,1{No,Yes}>Invert Received Pan +slider6:1<.2,5,.1>Multiply Received Pan +slider7:100<1,100,1>Max Pan +slider8:0<0,10,1>Max Delay (ms) +slider9:0<0,100,1>Look Ahead (ms) +slider10:0<-100,100,1>Current Pan + +in_pin:left input +in_pin:right input +out_pin:left output +out_pin:right output + +///////////////// +/// /// +/// I N I T /// +/// /// +///////////////// + +@init + + log2 = log(2); + sqrt2 = sqrt(2); + + curpan = 0; + + maxdelay = ceil((10 + 100) / 1000 * srate); + + delaybufferl = 0; + delaybufferr = 2 * maxdelay; + + delaypointer = 0; + + receivedpan = 0; + oldreceivedpan = 0; + + spls = 0; + +///////////////// +/// /// +/// SLIDER /// +/// /// +///////////////// + +@slider + + // SLIDER VALUES + + input = slider1; + + receive = slider2; + + sloppiness = slider4; + + invert = slider5; + + multiply = slider6; + + maxpan = slider7; + + delay = slider8 / 1000 * srate; + + lookahead = slider9 / 1000 * srate; + +///////////////// +/// /// +/// BLOCK /// +/// /// +///////////////// + +@block + + blocksize = samplesblock; + +// receiving + + oldreceivedpan = receivedpan; + + receive == 0 ? ( + receivedpan = reg00; + ) : receive == 1 ? ( + receivedpan = reg01; + ) : receive == 2 ? ( + receivedpan = reg02; + ) : receive == 3 ? ( + receivedpan = reg03; + ) : receive == 4 ? ( + receivedpan = reg04; + ) : receive == 5 ? ( + receivedpan = reg5; + ) : receive == 6 ? ( + receivedpan = reg6; + ) : receive == 7 ? ( + receivedpan = reg7; + ) : receive == 8 ? ( + receivedpan = reg8; + ) : receive == 9 ? ( + receivedpan = reg09; + ) : 0; + + slider3 = receivedpan; + + spls = 0; + +///////////////// +/// /// +/// SAMPLE /// +/// /// +///////////////// + +@sample + +// choosing input + + input == 0 ? ( + l = spl0; + r = spl1; + ) : input == 1 ? ( + l = spl0; + r = spl0; + ) : input == 2 ? ( + l = spl1; + r = spl1; + ) : 0; + +// buffering + + delaybufferl[delaypointer] = l; + delaybufferl[delaypointer + maxdelay] = l; + delaybufferr[delaypointer] = r; + delaybufferr[delaypointer + maxdelay] = r; + +// interpolating receivedpan + + curpan = oldreceivedpan + (receivedpan - oldreceivedpan) * spls / blocksize; + +// modifying input pan + + invert && curpan *= -1; + curpan *= multiply; + curpan = min(max(-maxpan, curpan), maxpan); + +// sloppiness + + s = sloppiness * sloppiness * sloppiness * sloppiness; + curpan = (curpan + s * curpan) / (s + 1); + +// calculating the actual volumes + + abspan = abs(curpan); + dominantpandb = 6 * abspan / 100; + dominantpan = exp((dominantpandb / 6) * log2); + recessivepan = 2 - dominantpan; + +// leveling + + curpan > 0 ? ( + r = dominantpan * delaybufferr[maxdelay + delaypointer - lookahead]; + x = abspan / 100 * delay; + f = x - floor(x); + c = floor(x + 1) - x; + l = recessivepan * (c * delaybufferl[maxdelay + delaypointer - floor(abspan / 100 * delay) - lookahead] + f * delaybufferl[maxdelay + delaypointer - ceil(abspan / 100 * delay) - lookahead]); + ) : ( + l = dominantpan * delaybufferl[maxdelay + delaypointer - lookahead]; + x = abspan / 100 * delay; + f = x - floor(x); + c = floor(x + 1) - x; + r = recessivepan * (c * delaybufferr[maxdelay + delaypointer - floor(abspan / 100 * delay) - lookahead] + f * delaybufferr[maxdelay + delaypointer - ceil(abspan / 100 * delay) - lookahead]); + ); + + slider10 = curpan; + +// outputting + + spl0 = l; + spl1 = r; + + delaypointer += 1; + delaypointer >= maxdelay && (delaypointer = 0); + + spls += 1; diff --git a/Effects/Till/Transient-driven Auto-Pan v1.1 (Master) b/Effects/Till/Transient-driven Auto-Pan v1.1 (Master) new file mode 100644 index 0000000..4573a34 --- /dev/null +++ b/Effects/Till/Transient-driven Auto-Pan v1.1 (Master) @@ -0,0 +1,322 @@ +// written by Till +// +// note: the effect sends data to regx. x is specified by the "send pan data to" slider +// +// note: the lookahead must be compensated manually in REAPER versions < 2 +// +// + +desc: Transient-Driven Auto-Pan v1.1 (Master) +//tags: processing stereo modulation +//author: Till + +slider1:0<0,2,1{Stereo,Left,Right}>Input +slider2:3<0,3,1{Left to Right,Right to Left,Bounce,Random (Ignores Pan/Random step size)}>Pan Mode +slider3:10<0,100,1>Pan Step Size (%) +slider4:0<0,100,1>Random Step Size (%) +slider5:100<1,100,1>Max Pan +slider6:20<0,1000,1>Fade Time (ms) +slider7:0<0,10,1>Sloppiness (Master Only) +slider8:250<20,500,1>Min Pause Between Pans (ms) +slider9:0<0,10,1>Max Delay (ms) +slider11:0<0,5,1{Left+Right,Left,Right,Sidechain Left+Right,Sidechain Left,Sidechain Right}>Director +slider12:0<0,1,1{No,Yes}>Preview Director +slider13:5<0,10,.1>Sensitivity +slider14:0<0,100,1>Look Ahead (ms) +slider15:0<0,10,1{Off,reg00,reg01,reg02,reg03,reg04,reg05,reg06,reg07,reg08,reg09}>Send Pan Data To +slider16:0<-100,100,1>Current Pan + +in_pin:left input +in_pin:right input +in_pin:sidechain left input +in_pin:sidechain right input +out_pin:left output +out_pin:right output + +///////////////// +/// /// +/// I N I T /// +/// /// +///////////////// + +@init + + log2 = log(2); + sqrt2 = sqrt(2); + + curgain = 1; + curgaindb = 0; + splsincelastpan = 0; + now = 0; + curpan = 0; + sloppypan = 0; + targetpan = 0; + lastpan = 0; + forth = 1; + + maxdelay = ceil((10 + 100) / 1000 * srate); + + delaybufferl = 0; + delaybufferr = 2 * maxdelay; + + delaypointer = 0; + + rmswindow = 50 / 1000 * srate; + rmsbuffer = 4 * maxdelay; + + rmssum = 0; + rmsp = 0; + + pdc_bot_ch = 0; + pdc_top_ch = 2; + +///////////////// +/// /// +/// SLIDER /// +/// /// +///////////////// + +@slider + + // SLIDER VALUES + + input = slider1; + + mode = slider2; + + stepsize = slider3; + randomstepsize = slider4; + + maxpan = slider5; + + fadetime = slider6 / 1000 * srate; + sloppiness = slider7; + + pause = slider8 / 1000 * srate; + + delay = slider9 / 1000 * srate; + + director = slider11; + + preview = slider12; + + sensitivity = slider13; + + lookahead = slider14 / 1000 * srate; + + sendto = slider15; + + attack = max(1, sqr(sensitivity) * 0.003 * srate); + release = max(1, pause / 2); + + tolerancedb = 12 - sensitivity; + tolerance = 2 ^ (tolerancedb / 6); + + minrms = 2 ^ (-5 - sensitivity / 2); + + pdc_delay = lookahead; + +///////////////// +/// /// +/// SAMPLE /// +/// /// +///////////////// + +@sample + + // choosing input + + input == 0 ? ( + l = spl0; + r = spl1; + ) : input == 1 ? ( + l = spl0; + r = spl0; + ) : input == 2 ? ( + l = spl1; + r = spl1; + ) : 0; + + // buffering + + delaybufferl[delaypointer] = l; + delaybufferl[delaypointer + maxdelay] = l; + delaybufferr[delaypointer] = r; + delaybufferr[delaypointer + maxdelay] = r; + + // choosing director + + director == 0 ? ( + dl = spl0; + dr = spl1; + ) : director == 1 ? ( + dl = spl0; + dr = spl0; + ) : director == 2 ? ( + dl = spl1; + dr = spl1; + ) : director == 3 ? ( + dl = spl2; + dr = spl3; + ) : director == 4 ? ( + dl = spl2; + dr = spl2; + ) : director == 5 ? ( + dl = spl3; + dr = spl3; + ) : 0; + + cursample = (abs(dl) + abs(dr)) / 2; + +// calcing rms power + + rmssum -= rmsbuffer[rmsp]; + + rmssum += sqr(cursample); + + rmsbuffer[rmsp] = sqr(cursample); + + rms = max(sqrt(rmssum / rmswindow), minrms); + + rmsp+=1; + rmsp >= rmswindow && rmsp = 0; + + threshold = rms * 1.68; + thresholddb = 6 * log(threshold) / log2 + 3; + +// detecting + + (cursample >= threshold) ? ( + cursampledb = 6 * log(cursample) / log2; + targetgaindb = thresholddb - cursampledb; + ) : ( + targetgaindb = 0; + ); + + targetgaindb > curgaindb ? ( + curgaindb += (targetgaindb - curgaindb) / release; + ) : ( + curgaindb += (targetgaindb - curgaindb) / attack; + ); + + curgain = exp((curgaindb / 6) * log2); + + detector = cursample * curgain; + +// panning + + pop = 0; + now ? ( + (splsincelastpan > pause) && now = 0; + ) : ( + detector > threshold * tolerance && ( + pop = 1; + now = 1; + splsincelastpan = 0; + lastpan = curpan; + mode == 0 ? ( + targetpan = curpan + stepsize + (rand(2) - 1) * randomstepsize; + targetpan < -maxpan && (targetpan += 2 * maxpan); + targetpan > maxpan && (targetpan -= 2 * maxpan); + ) : mode == 1 ? ( + targetpan = curpan - stepsize - (rand(2) - 1) * randomstepsize; + targetpan > maxpan && (targetpan -= 2 * maxpan); + targetpan < -maxpan && (targetpan += 2 * maxpan); + ) : mode == 2 ? ( + forth ? ( + targetpan = curpan + stepsize + (rand(2) - 1) * randomstepsize; + ) : ( + targetpan = curpan - stepsize - (rand(2) - 1) * randomstepsize; + ); + targetpan > maxpan && ( + targetpan = 2 * maxpan - targetpan; + forth = 0; + ); + targetpan < -maxpan && ( + targetpan = - 2* maxpan - targetpan; + forth = 1; + ); + ) : ( + targetpan = ceil((rand(2) - 1) * maxpan); + ); + ); + ); + + splsincelastpan += 1; + +//fading the pan + + curpan != targetpan && ( + fadepos = splsincelastpan / fadetime; + fadepos = (-cos(min(fadepos, 1) * $pi) + 1) / 2; + curpan = lastpan + (targetpan - lastpan) * fadepos; + ); + +// sending pan info + + sendto > 0 && ( + sendto == 1 ? ( + reg00 = curpan; + ) : sendto == 2 ? ( + reg01 = curpan; + ) : sendto == 3 ? ( + reg02 = curpan; + ) : sendto == 4 ? ( + reg03 = curpan; + ) : sendto == 5 ? ( + reg04 = curpan; + ) : sendto == 6 ? ( + reg05 = curpan; + ) : sendto == 7 ? ( + reg06 = curpan; + ) : sendto == 8 ? ( + reg07 = curpan; + ) : sendto == 9 ? ( + reg08 = curpan; + ) : sendto == 10 ? ( + reg09 = curpan; + ) : 0; + ); + +// sloppiness + + s = sloppiness * sloppiness * sloppiness * sloppiness; + sloppypan = (curpan + s * sloppypan) / (s + 1); + +// calculating the actual volumes + + abspan = abs(sloppypan); + dominantpandb = 6 * abspan / 100; + dominantpan = exp((dominantpandb / 6) * log2); + recessivepan = 2 - dominantpan; + +// leveling + + sloppypan > 0 ? ( + r = dominantpan * delaybufferr[maxdelay + delaypointer - lookahead]; + x = abspan / 100 * delay; + f = x - floor(x); + c = floor(x + 1) - x; + l = recessivepan * (c * delaybufferl[maxdelay + delaypointer - floor(abspan / 100 * delay) - lookahead] + f * delaybufferl[maxdelay + delaypointer - ceil(abspan / 100 * delay) - lookahead]); + ) : ( + l = dominantpan * delaybufferl[maxdelay + delaypointer - lookahead]; + x = abspan / 100 * delay; + f = x - floor(x); + c = floor(x + 1) - x; + r = recessivepan * (c * delaybufferr[maxdelay + delaypointer - floor(abspan / 100 * delay) - lookahead] + f * delaybufferr[maxdelay + delaypointer - ceil(abspan / 100 * delay) - lookahead]); + ); + +// outputting + + preview ? ( + spl0 = dl; + spl1 = pop; + ) : ( + spl0 = l; + spl1 = r; + ); + + slider16 = curpan; + + delaypointer += 1; + delaypointer >= maxdelay && (delaypointer = 0); diff --git a/Effects/Till/Transient-driven Auto-Pan v1.1 (Slave) b/Effects/Till/Transient-driven Auto-Pan v1.1 (Slave) new file mode 100644 index 0000000..bcb6c84 --- /dev/null +++ b/Effects/Till/Transient-driven Auto-Pan v1.1 (Slave) @@ -0,0 +1,204 @@ +// written by Till +// +// note: the effect receives data from reg[x] x is specified by the "receive pan data from" slider +// +// note: the lookahead must be compensated manually in REAPER versions < 2 +// +// note: the frequency of data being received from the master depends on +// the overall blocksize which is apparently depending on your interface's latency. +// so the slave effect cannot always be up to date with the master effect +// the quantisation is being interpolated linearly + +desc: Transient-Driven Auto-Pan v1.1 (Slave) +//tags: processing stereo modulation +//author: Till + +slider1:0<0,2,1{Stereo,Left,Right}>Input +slider2:0<0,9,1{reg00,reg01,reg02,reg03,reg04,reg05,reg06,reg07,reg08,reg09}>Receive Pan Data From +slider3:0<-100,100,1>Received Pan +slider4:0<0,10,1>Sloppiness +slider5:0<0,1,1{No,Yes}>Invert Received Pan +slider6:1<.2,5,.1>Multiply Received Pan +slider7:100<1,100,1>Max Pan +slider8:0<0,10,1>Max Delay (ms) +slider9:0<0,100,1>Look Ahead (ms) +slider10:0<-100,100,1>Current Pan + +in_pin:left input +in_pin:right input +out_pin:left output +out_pin:right output + +///////////////// +/// /// +/// I N I T /// +/// /// +///////////////// + +@init + + log2 = log(2); + sqrt2 = sqrt(2); + + curpan = 0; + + maxdelay = ceil((10 + 100) / 1000 * srate); + + delaybufferl = 0; + delaybufferr = 2 * maxdelay; + + delaypointer = 0; + + receivedpan = 0; + oldreceivedpan = 0; + + spls = 0; + + pdc_bot_ch = 0; + pdc_top_ch = 2; + +///////////////// +/// /// +/// SLIDER /// +/// /// +///////////////// + +@slider + + // SLIDER VALUES + + input = slider1; + + receive = slider2; + + sloppiness = slider4; + + invert = slider5; + + multiply = slider6; + + maxpan = slider7; + + delay = slider8 / 1000 * srate; + + lookahead = slider9 / 1000 * srate; + + pdc_delay = lookahead; + +///////////////// +/// /// +/// BLOCK /// +/// /// +///////////////// + +@block + + blocksize = samplesblock; + +// receiving + + oldreceivedpan = receivedpan; + + receive == 0 ? ( + receivedpan = reg00; + ) : receive == 1 ? ( + receivedpan = reg01; + ) : receive == 2 ? ( + receivedpan = reg02; + ) : receive == 3 ? ( + receivedpan = reg03; + ) : receive == 4 ? ( + receivedpan = reg04; + ) : receive == 5 ? ( + receivedpan = reg5; + ) : receive == 6 ? ( + receivedpan = reg6; + ) : receive == 7 ? ( + receivedpan = reg7; + ) : receive == 8 ? ( + receivedpan = reg8; + ) : receive == 9 ? ( + receivedpan = reg09; + ) : 0; + + slider3 = receivedpan; + + spls = 0; + +///////////////// +/// /// +/// SAMPLE /// +/// /// +///////////////// + +@sample + +// choosing input + + input == 0 ? ( + l = spl0; + r = spl1; + ) : input == 1 ? ( + l = spl0; + r = spl0; + ) : input == 2 ? ( + l = spl1; + r = spl1; + ) : 0; + +// buffering + + delaybufferl[delaypointer] = l; + delaybufferl[delaypointer + maxdelay] = l; + delaybufferr[delaypointer] = r; + delaybufferr[delaypointer + maxdelay] = r; + +// interpolating receivedpan + + curpan = oldreceivedpan + (receivedpan - oldreceivedpan) * spls / blocksize; + +// modifying input pan + + invert && curpan *= -1; + curpan *= multiply; + curpan = min(max(-maxpan, curpan), maxpan); + +// sloppiness + + s = sloppiness * sloppiness * sloppiness * sloppiness; + curpan = (curpan + s * curpan) / (s + 1); + +// calculating the actual volumes + + abspan = abs(curpan); + dominantpandb = 6 * abspan / 100; + dominantpan = exp((dominantpandb / 6) * log2); + recessivepan = 2 - dominantpan; + +// leveling + + curpan > 0 ? ( + r = dominantpan * delaybufferr[maxdelay + delaypointer - lookahead]; + x = abspan / 100 * delay; + f = x - floor(x); + c = floor(x + 1) - x; + l = recessivepan * (c * delaybufferl[maxdelay + delaypointer - floor(abspan / 100 * delay) - lookahead] + f * delaybufferl[maxdelay + delaypointer - ceil(abspan / 100 * delay) - lookahead]); + ) : ( + l = dominantpan * delaybufferl[maxdelay + delaypointer - lookahead]; + x = abspan / 100 * delay; + f = x - floor(x); + c = floor(x + 1) - x; + r = recessivepan * (c * delaybufferr[maxdelay + delaypointer - floor(abspan / 100 * delay) - lookahead] + f * delaybufferr[maxdelay + delaypointer - ceil(abspan / 100 * delay) - lookahead]); + ); + + slider10 = curpan; + +// outputting + + spl0 = l; + spl1 = r; + + delaypointer += 1; + delaypointer >= maxdelay && (delaypointer = 0); + + spls += 1; diff --git a/Effects/analysis/WigMCVUMeter b/Effects/analysis/WigMCVUMeter new file mode 100644 index 0000000..df2557e --- /dev/null +++ b/Effects/analysis/WigMCVUMeter @@ -0,0 +1,119 @@ +desc:WigWare Multi-channel Peak VU Meter +// Copyright Dr Bruce Wiggins 2016 +// License: LGPL - http://www.gnu.org/licenses/lgpl-3.0.en.html +// http://www.brucewiggins.co.uk +// Twitter @BruceWiggins +// I've commented it extensively to aid in the writing of +// JS effects. Please let me know if you find this useful :-) +// NB. I know it isn't really a VU meter (it's a peak meter), +// but that's what everyone searches for! +// You MUST retain the text above when sharing/distributing + +slider1:16<0,64,1>Number of Channels +slider2:100<0,500,10>Sample Time (ms) +slider3:60<0,96,1>min dB Value (-ve) +slider4:10<2,20,1>peak hold (x Sample Time) + +@init +ln = 64; // max length of arrays (no of channels); +sc=6/log(2); // dB scaling factor +scalex = 20; // pixels width for labels on left +pcnt = 0; // peak hold counter; +maxsamples = 1024;// mem location for maxsamples array; +peaks = maxsamples + ln; // samples peaks +pholds = peaks + ln; // peak holds +pctr = pholds + ln; // peak hold counters +memset(maxsamples,0,ln); // zero/min memory at start +memset(peaks,-192,ln); +memset(pholds,-192,ln); +memset(pctr,0,ln); + +@slider +//make sure we can't have more channels than the track has +//but num_ch ALWAYS inits to zero....how annoying. +num_ch>0?(nch = max(2,min(num_ch,slider1));) : +(nch = slider1;); +slider1 = nch; +sampletime=slider2*srate/1000; // sample time ms to s +mindb = slider3; // minimum dB value shown +minlin = pow(10,-mindb/20); // minimum dB value as lin gain +phold = slider4; // peak hold time multiplier + +@block +//if we've gone over the sample time +bscnt>sampletime ? +( + ibl=0; + loop(nch, + //get the current peak - make sure we don't log zero + peaks[ibl]=log(max(minlin,maxsamples[ibl]))*sc; + //if peak hold has held long enough, minimum it + pctr[ibl]>phold ? (pholds[ibl] = -mindb;); + //if peak hold is less than current peak, store it and + //reset that channels peak hold counter, else decrement + //the channels peak hold counter + pholds[ibl] compressor -> compscope + +@init + +N_QUIET = 0.5*srate; +N_FAST = 0.004*srate; +N_MED = 0.5*srate; +N_SLOW = 2.0*srate; + +DONE = -1; +INIT = -2; +READY = -3; + +buf = 0; +pos = DONE; +previn = 0.0; + +nbuf = N_FAST+3*(N_QUIET+N_MED)+3*(N_QUIET+N_SLOW); + +gfx_clear = 256*256*256-1; + +@sample + +xin = 0.5*(spl0+spl1); + +(pos == DONE) ? ( + ((previn < -0.5 && xin > 0.5) || (previn > 0.5 && xin < -0.5)) ? ( + pos = INIT; // start signal seen + memset(buf, 0, nbuf); + ); + previn = xin; +) : +(pos == INIT && abs(xin) < 0.01) ? ( // initial silence + pos = READY; +) : +(pos == READY && xin < -0.5) ? ( // first analysis sample seen + pos = 0; +); + +(pos >= 0) ? ( + + (pos >= nbuf || play_state != 0) ? ( + pos = DONE; + ) : ( + buf[pos] = xin; + pos += 1; + ); +); + +@gfx 200 620 + +gf_h = gfx_h-16; + +gfx_a = 1; + +gfx_r = gfx_g = gfx_b = 0.93125; +gfx_x = 0; +gfx_y = gf_h/12; +gfx_lineto(gfx_w-1, gf_h/12, 0); +gfx_x = 0; +gfx_y = gf_h/4; +gfx_lineto(gfx_w-1, gf_h/4, 0); + +gfx_x = 0; +gfx_y = 5*gf_h/12; +gfx_lineto(gfx_w-1, 5*gf_h/12, 0); +gfx_x = 0; +gfx_y = 7*gf_h/12; +gfx_lineto(gfx_w-1, 7*gf_h/12, 0); + +gfx_x = 0; +gfx_y = 3*gf_h/4; +gfx_lineto(gfx_w-1, 3*gf_h/4, 0); +gfx_x = 0; +gfx_y = 11*gf_h/12; +gfx_lineto(gfx_w-1, 11*gf_h/12, 0); + +gfx_x = gfx_w/4; +gfx_y = 0; +gfx_lineto(gfx_w/4, gf_h-1, 0); +gfx_x = 3*gfx_w/4; +gfx_y = 0; +gfx_lineto(3*gfx_w/4, gf_h-1, 0); + +gfx_r = gfx_g = gfx_b = 0.6875; +gfx_x = 0; +gfx_y = gf_h/6; +gfx_lineto(gfx_w-1, gf_h/6, 0); +gfx_x = 0; +gfx_y = gf_h/2; +gfx_lineto(gfx_w-1, gf_h/2, 0); +gfx_x = 0; +gfx_y = 5*gf_h/6; +gfx_lineto(gfx_w-1, 5*gf_h/6, 0); +gfx_x = gfx_w/2; +gfx_y = 0; +gfx_lineto(gfx_w/2, gf_h-1, 0); + +gfx_r = gfx_g = gfx_b = 0; + +gfx_x = gfx_w-1; +gfx_y = 0; +gfx_lineto(0, gf_h/3, 1); +gfx_lineto(gfx_w-1, gf_h/3, 0); + +gfx_x = 0; +gfx_y = 2*gf_h/3; +gfx_lineto(gfx_w-1, 2*gf_h/3, 0); +gfx_lineto(gfx_w/2, gf_h/3, 1); +gfx_lineto(0, 2*gf_h/3, 1); + +gfx_x = 0; +gfx_y = gf_h-1; +gfx_lineto(gfx_w-1, gf_h-1, 0); +gfx_lineto(gfx_w/2, 2*gf_h/3, 1); +gfx_lineto(0, gf_h-1, 0); + +gfx_x = 4; +gfx_y = 4; +gfx_drawchar($'w'); +gfx_drawchar($'a'); +gfx_drawchar($'v'); +gfx_drawchar($'e'); +gfx_drawchar($'s'); +gfx_drawchar($'h'); +gfx_drawchar($'a'); +gfx_drawchar($'p'); +gfx_drawchar($'e'); + +gfx_x = 4; +gfx_y = gf_h/3+4; +gfx_drawchar($'f'); +gfx_drawchar($'a'); +gfx_drawchar($'s'); +gfx_drawchar($'t'); +gfx_drawchar($' '); +gfx_drawchar($'r'); +gfx_drawchar($'e'); +gfx_drawchar($'s'); +gfx_drawchar($'p'); +gfx_drawchar($'o'); +gfx_drawchar($'n'); +gfx_drawchar($'s'); +gfx_drawchar($'e'); + +gfx_x = 4; +gfx_y = 2*gf_h/3+4; +gfx_drawchar($'s'); +gfx_drawchar($'l'); +gfx_drawchar($'o'); +gfx_drawchar($'w'); +gfx_drawchar($' '); +gfx_drawchar($'r'); +gfx_drawchar($'e'); +gfx_drawchar($'s'); +gfx_drawchar($'p'); +gfx_drawchar($'o'); +gfx_drawchar($'n'); +gfx_drawchar($'s'); +gfx_drawchar($'e'); + +gfx_r = gfx_g = gfx_b = 0.6875; + +gfx_x = gfx_w/4-12; +gfx_y = gf_h/3-12; +gfx_drawchar($'+'); +gfx_drawchar($'0'); + +gfx_x = gfx_w/2-12; +gfx_y = gf_h/3-12; +gfx_drawchar($'-'); +gfx_drawchar($'o'); +gfx_drawchar($'o'); +gfx_drawchar($' '); +gfx_drawchar($'d'); +gfx_drawchar($'B'); + +gfx_x = 3*gfx_w/4-12; +gfx_y = gf_h/3-12; +gfx_drawchar($'+'); +gfx_drawchar($'0'); + +gfx_x = gfx_w/4-12; +gfx_y = 2*gf_h/3-12; +gfx_drawchar($'0'); +gfx_drawchar($'.'); +gfx_drawchar($'1'); +gfx_drawchar($'2'); +gfx_drawchar($'5'); + +gfx_x = gfx_w/2-12; +gfx_drawchar($'0'); +gfx_drawchar($'.'); +gfx_drawchar($'2'); +gfx_drawchar($'5'); +gfx_drawchar($' '); +gfx_drawchar($'s'); +gfx_drawchar($'e'); +gfx_drawchar($'c'); + +gfx_x = 3*gfx_w/4-12; +gfx_drawchar($'0'); +gfx_drawchar($'.'); +gfx_drawchar($'3'); +gfx_drawchar($'7'); +gfx_drawchar($'5'); + +gfx_x = gfx_w/4-12; +gfx_y = gf_h-12; +gfx_drawchar($'0'); +gfx_drawchar($'.'); +gfx_drawchar($'5'); + +gfx_x = gfx_w/2-12; +gfx_drawchar($'1'); +gfx_drawchar($'.'); +gfx_drawchar($'0'); +gfx_drawchar($' '); +gfx_drawchar($'s'); +gfx_drawchar($'e'); +gfx_drawchar($'c'); + +gfx_x = 3*gfx_w/4-12; +gfx_drawchar($'1'); +gfx_drawchar($'.'); +gfx_drawchar($'5'); + +gfx_x = gfx_w-16; +gfx_y = gf_h/12+4; +gfx_drawchar($'+'); +gfx_drawchar($'0'); + +gfx_x = gfx_w-48; +gfx_y = gf_h/6+4; +gfx_drawchar($'-'); +gfx_drawchar($'o'); +gfx_drawchar($'o'); +gfx_drawchar($' '); +gfx_drawchar($'d'); +gfx_drawchar($'B'); + +gfx_x = gfx_w-16; +gfx_y = gf_h/4+4; +gfx_drawchar($'+'); +gfx_drawchar($'0'); + +gfx_x = gfx_w-16; +gfx_y = gf_h/3+4; +gfx_drawchar($'+'); +gfx_drawchar($'6'); + +gfx_x = gfx_w-16; +gfx_y = 5*gf_h/12+4; +gfx_drawchar($'+'); +gfx_drawchar($'3'); + +gfx_x = gfx_w-40; +gfx_y = gf_h/2+4; +gfx_drawchar($'+'); +gfx_drawchar($'0'); +gfx_drawchar($' '); +gfx_drawchar($'d'); +gfx_drawchar($'B'); + +gfx_x = gfx_w-16; +gfx_y = 7*gf_h/12+4; +gfx_drawchar($'-'); +gfx_drawchar($'6'); + +gfx_x = gfx_w-16; +gfx_y = 2*gf_h/3+4; +gfx_drawchar($'+'); +gfx_drawchar($'6'); + +gfx_x = gfx_w-16; +gfx_y = 3*gf_h/4+4; +gfx_drawchar($'+'); +gfx_drawchar($'3'); + +gfx_x = gfx_w-40; +gfx_y = 5*gf_h/6+4; +gfx_drawchar($'+'); +gfx_drawchar($'0'); +gfx_drawchar($' '); +gfx_drawchar($'d'); +gfx_drawchar($'B'); + +gfx_x = gfx_w-16; +gfx_y = 11*gf_h/12+4; +gfx_drawchar($'-'); +gfx_drawchar($'6'); + +gfx_y = gfx_h-10; +gfx_r = 1; +gfx_g = 0; +gfx_b = 0; +gfx_x = gfx_w/4-12; +gfx_drawchar($'2'); +gfx_drawchar($'5'); +gfx_drawchar($'0'); +gfx_drawchar($' '); +gfx_drawchar($'H'); +gfx_drawchar($'z'); + +gfx_r = 0; +gfx_g = 1; +gfx_b = 0; +gfx_x = gfx_w/2-12; +gfx_drawchar($'7'); +gfx_drawchar($'5'); +gfx_drawchar($'0'); +gfx_drawchar($' '); +gfx_drawchar($'H'); +gfx_drawchar($'z'); + +gfx_r = 0; +gfx_g = 0; +gfx_b = 1; +gfx_x = 3*gfx_w/4-12; +gfx_drawchar($'2'); +gfx_drawchar($'5'); +gfx_drawchar($'0'); +gfx_drawchar($'0'); +gfx_drawchar($' '); +gfx_drawchar($'H'); +gfx_drawchar($'z'); + +(1) ? ( + + gfx_r = 1; + gfx_g = 0; + gfx_b = 0; + + pxpers = gfx_w/N_FAST; + gfx_x = 0; + gfx_y = gf_h/6*(1.0-0.5*buf[0]); + i = 1; + loop(N_FAST-1, + x = i*pxpers; + y = gf_h/6*(1.0-0.5*buf[i]); + gfx_lineto(x, y, 1); + i += 1; + ); + + pxpers = gfx_w/N_MED; + + gfx_r = 1; + gfx_g = 0; + gfx_b = 0; + + gfx_x = 0; + gfx_y = 2*gf_h/3; + idx = N_FAST+N_QUIET+1; + i = 0; + x = 1; + loop(gfx_w, + y = 0.0; + while(y = max(y, abs(buf[idx])); + i += 1; + idx += 1; + i*pxpers < x); + y = gf_h*(2.0/3.0-y/6.0); + gfx_lineto(x, y, 1); + x += 1; + ); + + gfx_r = 0; + gfx_g = 1; + gfx_b = 0; + + gfx_x = 0; + gfx_y = 2*gf_h/3; + idx = N_FAST+N_QUIET+N_MED+N_QUIET+1; + i = 0; + x = 1; + loop(gfx_w, + y = 0.0; + while(y = max(y, abs(buf[idx])); + i += 1; + idx += 1; + i*pxpers < x); + y = gf_h*(2.0/3.0-y/6.0); + gfx_lineto(x, y, 1); + x += 1; + ); + + gfx_r = 0; + gfx_g = 0; + gfx_b = 1; + + gfx_x = 0; + gfx_y = 2*gf_h/3; + idx = N_FAST+2*(N_QUIET+N_MED)+N_QUIET+1; + i = 0; + x = 1; + loop(gfx_w, + y = 0.0; + while(y = max(y, abs(buf[idx])); + i += 1; + idx += 1; + i*pxpers < x); + y = gf_h*(2.0/3.0-y/6.0); + gfx_lineto(x, y, 1); + x += 1; + ); + + pxpers = gfx_w/N_SLOW; + + gfx_r = 1; + gfx_g = 0; + gfx_b = 0; + + gfx_x = 0; + gfx_y = gf_h; + idx = N_FAST+3*(N_QUIET+N_MED)+N_QUIET+1; + i = 0; + x = 1; + loop(gfx_w, + y = 0.0; + while(y = max(y, abs(buf[idx])); + i += 1; + idx += 1; + i*pxpers < x); + y = gf_h*(1.0-y/6.0); + gfx_lineto(x, y, 1); + x += 1; + ); + + gfx_r = 0; + gfx_g = 1; + gfx_b = 0; + + gfx_x = 0; + gfx_y = gf_h; + idx = N_FAST+3*(N_QUIET+N_MED)+N_QUIET+N_SLOW+N_QUIET+1; + i = 0; + x = 1; + loop(gfx_w, + y = 0.0; + while(y = max(y, abs(buf[idx])); + i += 1; + idx += 1; + i*pxpers < x); + y = gf_h*(1.0-y/6.0); + gfx_lineto(x, y, 1); + x += 1; + ); + + gfx_r = 0; + gfx_g = 0; + gfx_b = 1; + + gfx_x = 0; + gfx_y = gf_h; + idx = N_FAST+3*(N_QUIET+N_MED)+2*(N_QUIET+N_SLOW)+N_QUIET+1; + i = 0; + x = 1; + loop(gfx_w, + y = 0.0; + while(y = max(y, abs(buf[idx])); + i += 1; + idx += 1; + i*pxpers < x); + y = gf_h*(1.0-y/6.0); + gfx_lineto(x, y, 1); + x += 1; + ); + +); + + diff --git a/Effects/analysis/compscope_src b/Effects/analysis/compscope_src new file mode 100644 index 0000000..4de0f27 --- /dev/null +++ b/Effects/analysis/compscope_src @@ -0,0 +1,163 @@ +desc: compscope_src -> compressor -> compscope + +// Transport must be stopped. +// "Preferences -> Audio -> Run FX when stopped" must be enabled. +// Master should be muted! + +slider1:0<0,0,1{Important!}>Mute the master. +slider2:0<0,0,1{Got it?}>Transport must be stopped. +slider3:0<0,0,1{Understand?}>Prefs->Run FX when stopped. +slider4:0<0,1,1{Done,Start}>Start analysis now? + +@init + +N_INIT = 0.2*srate; +N_QUIET = 0.5*srate; +N_FAST = 0.004*srate; +N_MED = 0.5*srate; +N_SLOW = 2.0*srate; + +HZ1 = 250.0; +HZ2 = 750.0; +HZ3 = 2500.0; + +buf = 0; +idx = 0; + +loop(N_INIT, + buf[idx] = (idx % 2) ? -1.0 : 1.0; + idx += 1; +); + +loop(N_QUIET, + buf[idx] = 0.0; + idx += 1; +); + +i = 0; +loop(N_FAST, + x = i/N_FAST; + buf[idx] = 4.0*x-2.0; + i += 1; + idx += 1; +); + +loop(N_QUIET, + buf[idx] = 0.0; + idx += 1; +); + +i = 0; +dsin = 2.0*$pi*HZ1/srate; +loop(N_MED, + tone = cos(i*dsin); + x = i/N_MED; + amp = (x < 0.5) ? 4.0*x : 4.0*(1.0-x); + buf[idx] = tone*amp; + i += 1; + idx += 1; +); + +loop(N_QUIET, + buf[idx] = 0.0; + idx += 1; +); + +i = 0; +dsin = 2.0*$pi*HZ2/srate; +loop(N_MED, + tone = cos(i*dsin); + x = i/N_MED; + amp = (x < 0.5) ? 4.0*x : 4.0*(1.0-x); + buf[idx] = tone*amp; + i += 1; + idx += 1; +); + +loop(N_QUIET, + buf[idx] = 0.0; + idx += 1; +); + +i = 0; +dsin = 2.0*$pi*HZ3/srate; +loop(N_MED, + tone = cos(i*dsin); + x = i/N_MED; + amp = (x < 0.5) ? 4.0*x : 4.0*(1.0-x); + buf[idx] = tone*amp; + i += 1; + idx += 1; +); + + +loop(N_QUIET, + buf[idx] = 0.0; + idx += 1; +); + +i = 0; +dsin = 2.0*$pi*HZ1/srate; +loop(N_SLOW, + tone = cos(i*dsin); + x = i/N_SLOW; + amp = (x < 0.5) ? 4.0*x : 4.0*(1.0-x); + buf[idx] = tone*amp; + i += 1; + idx += 1; +); + +loop(N_QUIET, + buf[idx] = 0.0; + idx += 1; +); + +i = 0; +dsin = 2.0*$pi*HZ2/srate; +loop(N_SLOW, + tone = cos(i*dsin); + x = i/N_SLOW; + amp = (x < 0.5) ? 4.0*x : 4.0*(1.0-x); + buf[idx] = tone*amp; + i += 1; + idx += 1; +); + +loop(N_QUIET, + buf[idx] = 0.0; + idx += 1; +); + +i = 0; +dsin = 2.0*$pi*HZ3/srate; +loop(N_SLOW, + tone = cos(i*dsin); + x = i/N_SLOW; + amp = (x < 0.5) ? 4.0*x : 4.0*(1.0-x); + buf[idx] = tone*amp; + i += 1; + idx += 1; +); + +nbuf = idx; +pos = -1; + +@slider + +slider4 ? pos = 0; + +@sample + +(pos >= 0) ? ( + + (pos >= nbuf || play_state != 0) ? ( + pos = -1; + slider4 = 0; + sliderchange(slider4); + ) : ( + spl0 = spl1 = buf[pos]; + pos += 1; + ); +); + + diff --git a/Effects/analysis/fft_noise_generator b/Effects/analysis/fft_noise_generator new file mode 100644 index 0000000..e19c753 --- /dev/null +++ b/Effects/analysis/fft_noise_generator @@ -0,0 +1,42 @@ +desc:fft noise generator + +slider1:-90<-120,0,6>volume (per band) +slider2:6<0,9,1{16,32,64,128,256,512,1024,2048,4096,8192,16384,32768}>FFT size + +@init + +@slider +vol=10^(slider1/20); + + +lfft=fftsize; +a=(slider2|0); +a<0?a=0:a>11?a=11; +fftsize=2^(a+4); + +lfft!=fftsize ? +( + buf=0; + ep=fftsize*2; + fv=0; + hsize=fftsize*0.5; + loop(hsize, + v=buf ? 2.0 : 0; + buf[0]=v; + buf[1]=0; + ep-=2; + buf+=2; + ep[0]=0; + ep[1]=0; + ); + fft_ipermute(0,fftsize); + ifft(0,fftsize); + rdpos=0; +); + +@sample + +spl0=rdpos[0]*vol; +spl1=rdpos[0]*vol; +rdpos+=2; +rdpos>=fftsize*2?rdpos=0; \ No newline at end of file diff --git a/Effects/analysis/gain_reduction_scope b/Effects/analysis/gain_reduction_scope new file mode 100644 index 0000000..5ca4ef7 --- /dev/null +++ b/Effects/analysis/gain_reduction_scope @@ -0,0 +1,534 @@ +desc:Gain Reduction Scope (Cockos) +//tags: analysis scope meter +//author: Cockos +/* +Copyright (C) 2007-2016 Cockos Incorporated +License: LGPL - http://www.gnu.org/licenses/lgpl.html +*/ + +slider1:view_msec=2000<1,3000,1>-view size (ms) +slider2:view_maxdb=-20<-100,-6.02,.01>-vzoom +slider3:view_rms=10<0.01,500.0,.01>-RMS size +slider4:view_meter_range=-50<-150,0,1>-meter range + + +in_pin:left input 1 +in_pin:right input 1 +in_pin:left input 2 +in_pin:right input 2 +options:no_meter + +@init +gfx_ext_retina=1; +ext_nodenorm=1; +recpos=0; +gfx_clear=-1; +g_maxlen_ms=3000; +histsize=((srate*2.0*g_maxlen_ms/1000)|0)*2; +g_hold=-1; +need_view_update=1; + + +function rms.init(buf, maxsz) global() ( + this.buf = buf; + this.maxsz=maxsz|0; + this.size=this.suml=this.sumr=this.cnt=this.ptr=0; +); + +function rms.getmax(splsquarel, splsquarer) + instance(buf suml sumr cnt ptr size maxsz) + local(i) + global() +( + while (cnt >= size) ( + i = (ptr= maxsz ? ptr=0; + (suml += splsquarel) < 0 ? suml=0; + (sumr += splsquarer) < 0 ? sumr=0; +); + +function rms.set_size(sz) global() ( + (this.size=max(0,min(sz|0,this.maxsz))) < 1 ? ( + this.cnt=this.suml=this.sumr=0; + ); +); + +function rms.get_l() instance(suml cnt) global() local(f) +( + suml>cnt*exp(-21) ? max(log(suml/cnt)*.5,-22):-22; +); +function rms.get_r() instance(sumr cnt) global() local(f) +( + sumr>cnt*exp(-21) ? max(log(sumr/cnt)*.5,-22):-22; +); + +rmsa.rms.init(histsize, srate); +rmsb.rms.init(histsize + rmsa.rms.maxsz*2, srate); + +@block +g_hold<0?need_view_update=1; +rmsa.rms.set_size(view_rms*.001*srate); +rmsb.rms.set_size(view_rms*.001*srate); +peak_atten = exp(-1/(srate*0.25)); + +@sample +g_hold<0 ? ( + rmsa.rms.getmax(sqr(spl0),sqr(spl1)); + rmsb.rms.getmax(sqr(spl2),sqr(spl3)); + + peak_spl0 = max(peak_spl0*peak_atten,abs(spl0)); + peak_spl1 = max(peak_spl1*peak_atten,abs(spl1)); + peak_spl2 = max(peak_spl2*peak_atten,abs(spl2)); + peak_spl3 = max(peak_spl3*peak_atten,abs(spl3)); + + recpos[0]=rmsb.rms.get_l() - rmsa.rms.get_l(); + recpos[1]=rmsb.rms.get_r() - rmsa.rms.get_r(); + recpos = (recpos+2) >= histsize ? 0 : (recpos+2); +); + +@gfx 920 600 +gfx_ext_retina>1 ? gfx_setfont(1,"Arial",16*gfx_ext_retina,'b') : gfx_setfont(0); + +gfx_getchar(); // request mouse_cap to be set even when mouse button not down + +function color1() ( gfx_r=0.5; gfx_g=1.0; gfx_b=0.5; ); +function color2() ( gfx_r=1.0; gfx_g=0.5; gfx_b=1.0; ); + +function draw_button(xp, yp, str) + instance(w,h,x,y) + globals(gfx_r,gfx_g,gfx_b,gfx_x,gfx_y) +( + gfx_measurestr(str, w, h); + xp -= w+3; + x=xp; + y=yp; + gfx_set(0,0,.75); + w+=3; + h+=3; + gfx_rect(x,y,w,h); + gfx_set(0,.5,1); + gfx_line(x,y,x+w,y); + gfx_line(x+w,y,x+w,y+h); + gfx_line(x,y+h,x+w,y+h); + gfx_line(x,y,x,y+h); + h+=1; + w+=1; + gfx_x=xp+2; gfx_y=yp+2; + gfx_drawstr(str); + gfx_x = xp; +); +function hit_button(xp,yp,cm) + instance(w,h,x,y) + globals(cap_mode, cap_last_x, cap_last_y) +( + xp>=x&&yp>=y&&xp z ? ( dx=y; y=z; z=dx; ); + x > z ? y : x < y ? z : x; +); + + +(mouse_cap & 1) ? ( + !(last_mouse_cap & 1) ? ( + (cap_mode == 1||cap_mode==4 || cap_mode==5) && !cap_drag && cap_timer < 12 ? ( + cap_mode==1 ? view_maxdb = -20 : cap_mode==5 ? view_meter_range=-50.0 : view_rms = 10.0; + cap_mode=0; + need_view_update=1; + slider_automate(cap_mode==1 ? view_maxdb : cap_mode==5 ? view_meter_range : view_rms); + ) : ( + cap_mode = cap_drag = cap_timer = 0; + length_button.hit_button(mouse_x,mouse_y,2)|| + vzoom_button.hit_button(mouse_x,mouse_y,1)|| + hold_button.hit_button(mouse_x,mouse_y,3)|| + rms_button.hit_button(mouse_x,mouse_y,4)|| + meter_range_button.hit_button(mouse_x,mouse_y,5); + + + cap_mode == 3 ? g_hold_needadj=1; + + cap_mode == 0 && mouse_y >= 40 ? ( + cap_mode = 100; + cap_last_y=mouse_y; + cap_last_x=mouse_x; + + (mouse_cap&8) ? ( + g_hold < 0 ? ( + g_hold_needadj=1; + g_hold=0; + ) : g_hold=-1; + ); + ); + ); + ); + + cap_last_y != mouse_y ? ( + (cap_mode == 1 || cap_mode==100) ? ( + cap_mode == 100 && (mouse_cap&16) ? ( + g_hold >= 0 ? ovhold = g_hold + (gfx_w-mouse_x)*view_msec*0.001/gfx_w*srate; + view_msec = min(g_maxlen_ms,max(0.125,exp(drag_slider_precise(log(view_msec), log(0.125), log(g_maxlen_ms),-0.02)))); + slider_automate(view_msec); + g_hold >= 0 ? ( + // zoom at mouse cursor + g_hold = ovhold - (gfx_w-mouse_x)*view_msec*0.001/gfx_w*srate; + g_hold > histsize*.5-viewsize_spls ? g_hold = histsize*.5-viewsize_spls : g_hold < 0 ? g_hold=0; + ); + ) : ( + view_maxdb = drag_slider_precise(view_maxdb, -100, -6.02, -0.2); + need_view_update=1; + slider_automate(view_maxdb); + ); + ); + cap_mode == 5 ? ( + view_meter_range = drag_slider_precise(view_meter_range, -150, 0, -0.2); + need_view_update=1; + slider_automate(view_meter_range); + ); + cap_mode == 2 ? ( + view_msec = min(g_maxlen_ms,max(0.125,exp(drag_slider_precise(log(view_msec), log(0.125), log(g_maxlen_ms),-0.02)))); + slider_automate(view_msec); + need_view_update=1; + ); + cap_mode == 4 ? ( + view_rms = min(500,max(0.01,exp(drag_slider_precise(log(view_rms),log(0.01),log(500.0), 0.01)))); + slider_automate(view_rms); + need_view_update=1; + ); + ); + cap_mode == 3 || (cap_mode == 100&&g_hold>=0) ? ( + dx = mouse_x-cap_last_x + (cap_mode == 3 ? (mouse_y-cap_last_y)*0.2); + dx ? ( + cap_drag=1; + g_hold += dx * viewsize_spls/gfx_w; + g_hold > histsize*.5-viewsize_spls ? g_hold = histsize*.5-viewsize_spls; + cap_last_x = mouse_x; + cap_last_y = mouse_y; + need_view_update=1; + ); + g_hold < 0 ? g_hold=0; + ); +) : ( + g_hold_needadj=0; + cap_mode == 3 && !cap_drag ? ( + g_hold=-1; + cap_mode=0; + ); +); + +cap_mode && cap_timer < 12 ? cap_timer += 1; +last_mouse_cap = mouse_cap; + +function format_time_msec(a) ( + abs(a) < 1000 ? + sprintf(#,"%.02fms",a + 0.005) : + sprintf(#,"%.02fs",a*0.001 + 0.005); +); + +mouse_wheel ? ( + (mouse_cap&8) ? ( + view_maxdb = min(-6.02,max(-100,view_maxdb*exp(-mouse_wheel*0.0003))); + slider_automate(view_maxdb); + ) : (mouse_cap&16) ? ( + g_hold += mouse_wheel*(1/(120.0*8.0)) * viewsize_spls; + g_hold > histsize*.5-viewsize_spls ? g_hold = histsize*.5-viewsize_spls : g_hold < 0 ? g_hold=0; + ) : ( + g_hold >= 0 ? ovhold = g_hold + (gfx_w-mouse_x)*view_msec*0.001/gfx_w*srate; + view_msec = min(2000,max(1,view_msec*exp(-mouse_wheel*0.0003))); + slider_automate(view_msec); + g_hold >= 0 ? ( + // zoom at mouse cursor + g_hold = ovhold - (gfx_w-mouse_x)*view_msec*0.001/gfx_w*srate; + g_hold > histsize*.5-viewsize_spls ? g_hold = histsize*.5-viewsize_spls : g_hold < 0 ? g_hold=0; + ); + ); + mouse_wheel=0; + need_view_update=1; +); + +function draw_meter(v,c,xp,w) ( c ? color2():color1(); v < gfx_h ? gfx_rect(xp,v,w,gfx_h-v); ); + +// only update if new fft data is there or if the size changed +need_view_update || view_meter_range != view_meter_range_last || view_maxdb != view_maxdb_last || old_w != gfx_w || old_h!=gfx_h? ( + view_maxdb_last = view_maxdb; + view_meter_range_last = view_meter_range; + need_view_update=0; + old_w=gfx_w; old_h=gfx_h; + + gfx_r=gfx_g=gfx_b=0; gfx_a=1; + gfx_x=gfx_y=0; + gfx_rectto(gfx_w,gfx_h); + + + scope_h = ((gfx_h-gfx_texth*2-6-4)*0.5)|0; + scope_ycent = gfx_h - scope_h*1.5 - gfx_texth - 4; + + // draw meter scale + + // draw meters + view_meter_range<-1 ? ( + metersz=16*gfx_ext_retina; + metersz2=4*gfx_ext_retina; + lx=metersz*8+metersz2; + x=lx+3; + sc = gfx_h /(-view_meter_range); + gfx_a=1.0; + gfx_r=gfx_g=gfx_b=0.6; + gfx_line(x,0,x,gfX_h); + + sc < gfx_texth*1.5 + 3 ? ( + dv = log10(2)*5; + while (dv*sc < gfx_texth*2+4 && dv < 300) (dv*=2); + ) : dv = 1; + v=dv; + while ( + a = v * sc; + a < gfx_h ? ( + gfx_a=.25; + gfx_line(0,a,lx,a); + gfx_a=.5; + gfx_x=0; gfx_y=a+2; + gfx_printf("-%.2fdB",v); + v += dv; + 1; + ); + ); + + sc *= -(20.0/log(10)); + gfx_a=0.5; + draw_meter(sc * rmsa.rms.get_l(), 0, 0, metersz-1); + draw_meter(sc * log(peak_spl0), 0, metersz, metersz-1); + draw_meter(sc * log(peak_spl1), 1, metersz*2, metersz-1); + draw_meter(sc * rmsa.rms.get_r(), 1, metersz*3, metersz-1); + + draw_meter(sc * rmsb.rms.get_l(), 0, metersz*4+metersz2, metersz-1); + draw_meter(sc * log(peak_spl2), 0, metersz*4+metersz2+metersz, metersz-1); + draw_meter(sc * log(peak_spl3), 1, metersz*4+metersz2+metersz*2, metersz-1); + draw_meter(sc * rmsb.rms.get_r(), 1, metersz*4+metersz2+metersz*3, metersz-1); + + lx=(x+=3*gfx_ext_retina); + ) : x=lx=0; + + // draw horz grid + sc= -scope_h * 1.5 / (view_maxdb); + gfx_r=gfx_g=gfx_b=0.6; + gfx_a=1.0; + gfx_line(lx,scope_ycent,gfx_w,scope_ycent); + + sc < gfx_texth*1.5 + 3 ? ( + dv = log10(2)*5; + while (dv*sc < gfx_texth*2+4 && dv < 300) (dv*=2); + ) : dv = 1; + v=dv; + while ( + a = v * sc; + scope_ycent + a < gfx_h ? ( + gfx_a=.25; + scope_ycent - a > gfx_texth+10 ? gfx_line(lx,scope_ycent-a,gfx_w,scope_ycent-a); + gfx_line(lx,scope_ycent+a,gfx_w,scope_ycent+a); + gfx_a=.5; + gfx_x=lx; gfx_y=scope_ycent+a+2; + gfx_printf("-%.2fdB",v); + gfx_x=lx; gfx_y=scope_ycent-a-2-gfx_texth; + gfx_y > gfx_texth*2 ? gfx_printf("%+.2fdB",v); + v += dv; + 1; + ); + ); + sc *= (20.0/log(10)); + + // draw vert grid + v=gfx_w - 96*gfx_ext_retina; + while( + gfx_a=0.25; + gfx_line(v,gfx_texth+8,v,gfx_h); + a = view_msec - view_msec * v / (gfx_w-x); + + gfx_a=0.5; + gfx_x = v + 2; gfx_y = gfx_texth+12; + gfx_drawstr(sprintf(#,"%d",a*srate*0.001+0.5)); + + g_hold > 0 ? ( + gfx_x=v+2; + gfx_y += gfx_texth+2; + gfx_drawstr(sprintf(#,"-%d",a*srate*0.001 + g_hold + 0.5)); + ); + + g_hold > 0 ? ( + gfx_x=v+2; + gfx_y = gfx_h - gfx_texth*3 - 4; + gfx_drawstr(format_time_msec(-a-(g_hold*1000/srate))); + ); + + gfx_x = v + 2; gfx_y = gfx_h - gfx_texth; + gfx_drawstr(format_time_msec(a)); + + v -= 96*gfx_ext_retina; + v > 56*gfx_ext_retina + lx; + ); + +viewsize_spls = (view_msec*srate*0.001)|0; +viewadv = (gfx_w-x)/viewsize_spls; + +rdptr = recpos - viewsize_spls*2 - 2; +rdptr < 0 ? rdptr += histsize; +(g_hold_needadj ? (g_hold>0) : (g_hold>=0)) && g_hold < histsize*0.5 ? ( + rdptr -= (g_hold|0)*2; + rdptr < 0 ? rdptr += histsize; +); + +g_hold_needadj=0; + +rdptr >= histsize ? rdptr -= histsize; +viewadv < 1 ? ( + // multiple samples per pixel + i=0; + minl=maxl=rdptr[0]; minr=maxr=rdptr[1]; + (rdptr+=2) >= histsize ? rdptr=0; + loop(viewsize_spls, + tx=(x|0); + tx>lx?( + minl = min(max(-1,(scope_ycent+0.5-minl*sc)|0),gfx_h+2); + maxl = min(max(-1,(scope_ycent+0.5-maxl*sc)|0),gfx_h+2); + minr = min(max(-1,(scope_ycent+0.5- minr*sc)|0),gfx_h+2); + maxr = min(max(-1,(scope_ycent+0.5-maxr*sc)|0),gfx_h+2); + + gfx_a=0.25; + color1(); + maxl-1 > scope_ycent ? gfx_line(lx,maxl-1,lx,scope_ycent) : + minl+1 < scope_ycent ? gfx_line(lx,minl+1,lx,scope_ycent); + + color2(); + maxr-1 > scope_ycent ? gfx_line(lx,maxr-1,lx,scope_ycent) : + minr+1 < scope_ycent ? gfx_line(lx,minr+1,lx,scope_ycent); + + color1(); + gfx_a=.6; + gfx_line(lx,minl,lx,maxl); + color2(); + gfx_line(lx,minr,lx,maxr); + + minl=maxl=rdptr[0]; minr=maxr=rdptr[1]; + lx=tx; + ) : ( + minl=min(minl,v = rdptr[0]); maxl=max(maxl,v); + minr=min(minr,v2 = rdptr[1]); maxr=max(maxr,v2); + ); + (rdptr+=2) >= histsize ? rdptr=0; + x+=viewadv; + ); + // last pixel + minl = min(max(-1,(scope_ycent+0.5-minl*sc)|0),gfx_h+2); + maxl = min(max(-1,(scope_ycent+0.5-maxl*sc)|0),gfx_h+2); + minr = min(max(-1,(scope_ycent+0.5-minr*sc)|0),gfx_h+2); + maxr = min(max(-1,(scope_ycent+0.5-maxr*sc)|0),gfx_h+2); + color1(); + gfx_a=0.35; + maxl-1 > scope_ycent ? gfx_line(lx,maxl-1,lx,scope_ycent) : + minl+1 < scope_ycent ? gfx_line(lx,minl+1,lx,scope_ycent); + + color2(); + maxr-1 > scope_ycent ? gfx_line(lx,maxr-1,lx,scope_ycent) : + minr+1 < scope_ycent ? gfx_line(lx,minr+1,lx,scope_ycent); + + gfx_a=.6; + color1(); + gfx_line(lx,minl,lx,maxl); + color2(); + gfx_line(lx,minr,lx,maxr); + +) : ( + maxval=gfx_h+64; + // multiple pixels per sample + i=viewsize_spls&1; + loop(viewsize_spls, + x1 = x|0; + x2 = (x+=viewadv)|0; + + viewadv<3 ? ( + color1(); + + loop(2, + v = (rdptr[0] * sc)|0; + + gfx_a=.25; + v < 0 ? ( + v < -maxval ? v=-maxval; + gfx_rect(x1,scope_ycent,x2-x1,-v) + ) : ( + v > maxval ? v=maxval; + gfx_rect(x1,scope_ycent-v,x2-x1,v); + ); + gfx_a=.6; + gfx_rect(x1,scope_ycent-v,x2-x1,1); + + rdptr+=1; + color2(); + ); + + ) : ( + color1(); + + loop(2, + gfx_a=(i&1) ? 0.25:0.125; + v = (rdptr[0] * sc)|0; + v < 0 ? ( + v < -maxval ? v=-maxval; + gfx_rect(x1,scope_ycent,x2-x1,-v) + ) : ( + v > maxval ? v=maxval; + gfx_rect(x1,scope_ycent-v,x2-x1,v); + ); + gfx_a=0.6; + gfx_rect(x1,scope_ycent-v,x2-x1,1); + rdptr+=1; + color2(); + i+=1; + ); + i+=1; + ); + rdptr >= histsize ? rdptr=0; + ); +); + +hold_button.draw_button(gfx_w,0, g_hold>=0 ? sprintf(#,"hold: -%d samples",g_hold+0.5) : "hold"); + +length_button.draw_button(gfx_x-8, 0, sprintf(#,"length: %s", format_time_msec(view_msec)) ); + +vzoom_button.draw_button(gfx_x-8, 0, sprintf(#,"range: %+.1fdB",view_maxdb)); + +rms_button.draw_button(gfx_x-8, 0, sprintf(#,"rms: %s", format_time_msec(view_rms))); + +meter_range_button.draw_button(gfx_x-8, 0, view_meter_range>-1?"meter off":sprintf(#,"meter range: %+.1fdB",view_meter_range)); + +); diff --git a/Effects/analysis/gfxanalyzer b/Effects/analysis/gfxanalyzer new file mode 100644 index 0000000..19eb4f2 --- /dev/null +++ b/Effects/analysis/gfxanalyzer @@ -0,0 +1,385 @@ +desc:Frequency Spectrum Analyzer Meter (Cockos) +//tags: analysis FFT meter spectrum +//author: Cockos +/* +Copyright (C) 2007 Cockos Incorporated +License: LGPL - http://www.gnu.org/licenses/lgpl.html +*/ + +slider1:6<0,9,1{16,32,64,128,256,512,1024,2048,4096,8192,16384,32768}>-FFT size +slider2:-120<-450,-12,6>-floor +slider3:0<0,1,1{disabled,enabled}>-show phase +slider4:2<0,3,1{rectangular,hamming,blackman-harris,blackman}>-window +slider5:0<0,2500,1>-integration time (ms) + +in_pin:left input +in_pin:right input +options:no_meter + +@init +gfx_ext_retina=1.0; +ext_nodenorm=1; +recpos=0; +max_fft_size=32768; +fftsize=max_fft_size; +gfx_clear=-1; +windowtype=-1; +fftidx=-1; + +histsize=max_fft_size + (max_fft_size*0.5 - 1); +window=histsize; +fftworkspace=window+(max_fft_size*0.5 + 1); +integrate_buf = fftworkspace + max_fft_size*2; + +@slider +slider2 != lfloor ? old_w=0; + +@block +slider2 != lfloor ? ( + lfloor = slider2; + minvol=2*exp(log(10)/20*slider2); +); + +@sample +abs(recpos[]=spl0+spl1) > minvol ? update=1; +recpos = ((recpos+1) >= histsize ? 0 : (recpos+1)); + +@gfx 640 400 + +gfx_ext_retina>1 ? gfx_setfont(1,"Arial",16*gfx_ext_retina,'b') : gfx_setfont(0); + +function draw_button(xp, yp, str) + instance(w,h,x,y) + globals(gfx_r,gfx_g,gfx_b,gfx_x,gfx_y) +( + gfx_measurestr(str, w, h); + xp -= w+3; + x=xp; + y=yp; + gfx_set(0,0,.75); + w+=3; + h+=3; + gfx_rect(x,y,w,h); + gfx_set(0,.5,1); + gfx_line(x,y,x+w,y); + gfx_line(x+w,y,x+w,y+h); + gfx_line(x,y+h,x+w,y+h); + gfx_line(x,y,x,y+h); + h+=1; + w+=1; + gfx_x=xp+2; gfx_y=yp+2; + gfx_drawstr(str); + gfx_x = xp; +); +function hit_button(xp,yp,cm) + instance(w,h,x,y) + globals(cap_mode, cap_last_x, cap_last_y) +( + xp>=x&&yp>=y&&xp z ? ( dx=y; y=z; z=dx; ); + x > z ? y : x < y ? z : x; +); + + +(mouse_cap & 1) ? ( + !(last_mouse_cap & 1) ? ( + (cap_mode == 1||cap_mode == 4) && !cap_drag && cap_timer < 12 ? ( + cap_mode == 1 ? ( + slider2 = -120; + slider_automate(slider2); + ) : ( + slider5 = 0; + slider_automate(slider5); + ); + cap_mode=0; + old_w=0; + ) : ( + cap_mode = cap_drag = cap_timer = 0; + phase_button.hit_button(mouse_x,mouse_y,-1) ? ( + slider3=!slider3; + slider_automate(slider3); + old_w = 0; + ) : ( + floor_button.hit_button(mouse_x,mouse_y,1)|| + window_button.hit_button(mouse_x,mouse_y,2)|| + fft_button.hit_button(mouse_x,mouse_y,3)|| + integrate_button.hit_button(mouse_x,mouse_y,4); + ); + ); + ); + cap_mode == 1 && cap_last_y != mouse_y ? ( + slider2 = drag_slider_precise(slider2, -450, -12, 0.2); + old_w=0; + slider_automate(slider2); + ); + cap_mode == 2 && cap_last_y != mouse_y ? ( + slider4 = drag_slider(slider4, 0.0, 3.0, .03); + old_w=0; + slider_automate(slider4); + ); + cap_mode == 3 && cap_last_y != mouse_y ? ( + slider1 = drag_slider(slider1, 0.0, 11.0, .03); + old_w=0; + slider_automate(slider1); + ); + cap_mode == 4 && cap_last_y != mouse_y ? ( + slider5 = drag_slider_precise(slider5, 0.0, 2500.0, 5); + old_w=0; + slider_automate(slider5); + ); +) : +(last_mouse_cap & 1) && !cap_drag ? ( + cap_mode == 2 ? ( + slider4 = cycle_slider(slider4, 0.0, 3.0, 1.0); + old_w=0; + slider_automate(slider4); + ); + cap_mode == 3 ? ( + slider1 = cycle_slider(slider1, 0.0, 11.0, 1.0); + old_w=0; + slider_automate(slider1); + ); +); + +cap_mode && cap_timer < 12 ? cap_timer += 1; +last_mouse_cap = mouse_cap; + +// only update if new fft data is there or if the size changed +update || old_w != gfx_w || old_h!=gfx_h? ( + +old_w=gfx_w; old_h=gfx_h; + +gfx_r=gfx_g=gfx_b=0; gfx_a=1; +gfx_x=gfx_y=0; +gfx_rectto(gfx_w,gfx_h); + +sc=(gfx_h-20)*20/(-slider2 * log(10)); + +// draw horz grid +gfx_r=gfx_g=gfx_b=0.6; +gfx_a=0.5; +gv=1; +cnt=100; +gfx_y=-100; +while( + y=20-log(gv)*sc; + y> gfx_y ? ( + gfx_line(0,y,gfx_w,y,0); + bottom_line = gfx_y; + gfx_x=0; + gfx_y=y+2; + gfx_drawnumber(log10(gv)*20,0); + gfx_drawchar($'d'); + gfx_drawchar($'B'); + gfx_y+=gfx_texth; + ); + gv*=0.5; + + gfx_y 0; +); + + +wsc=gfx_w/log(1+400); + +// draw vert grid +f=20; +gfx_x+=4; +lx=gfx_x; +while( + tx = log(1.0+(f/srate*2.0)*400)*wsc; + dotext = tx > gfx_x && f!=40 && f!=4000 && f != 15000 && + (f<400 || f >= 1000 || f == 500) && (f<6000 || f>=10000); + tx > lx ? ( lx=tx+4; gfx_line(tx,0,tx,gfx_h - (dotext ? 0 : gfx_texth+2),0); ); + dotext ? ( + gfx_x=tx +3; + gfx_y = gfx_h-gfx_texth; + f>=1000 ? gfx_printf("%dkHz",f*.001) : gfx_printf("%dHz",f); + ); + f += (f<100?10:f<1000?100:f<10000?1000:5000); + f < srate*0.5; +); + +fft_button.draw_button(gfx_w, 0, sprintf(#,"FFT: %d",16< 0 ? ( + integrate_now = time_precise(); + integrate_en ? ( + // fps = 1/(integrate_now - integrate_lastt); + integrate_sc -= exp(-5 * 1000.0 * (integrate_now - integrate_lastt) / slider5); + ) : ( + // force overwrite of buffer + integrate_en = 1; + ); + integrate_lastt = integrate_now; + ) : ( + integrate_en = 0; + ); + + fftidx != (slider1|0) ? ( + fftidx=slider1|0; + fftsize=2^(min(max(fftidx,0),11)+4); + integrate_sc=1; + ); + + windowsize != fftsize || windowtype != (slider4|0) ? ( + windowtype=slider4|0; + windowsize=fftsize; + dwindowpos = $pi*2/fftsize; + i=pwr=0; + loop(fftsize*.5+1, + windowpos=i*dwindowpos; + pwr += (window[i] = ( + windowtype==1 ? 0.53836 - cos(windowpos)*0.46164 : + windowtype==2 ? 0.35875 - 0.48829 * cos(windowpos) + 0.14128 * cos(2*windowpos) - 0.01168 * cos(3*windowpos) : + windowtype==3 ? 0.42 - 0.50 * cos(windowpos) + 0.08 * cos(2.0*windowpos) : + 1.0)); + i+=1; + ); + pwr=.5/(pwr*2-window[i-1]); + loop(fftsize*.5+1,window[i-=1]*=pwr); + integrate_sc=1; + ); + + + buf1=recpos-fftsize; + buf1<0 ? buf1+=histsize; + buf2=window; + buf3=fftworkspace; + loop(fftsize*.5 + 1, + buf3[] = buf1[]*buf2[]; + buf3+=1; + + buf2+=1; + (buf1+=1) >= histsize ? buf1 -= histsize; + ); + buf2-=1; + loop(fftsize*.5 - 1, + buf3[] = buf1[]*(buf2-=1)[]; + buf3+=1; + (buf1+=1) >= histsize ? buf1 -= histsize; + ); + + fft_real(fftworkspace,fftsize); + fft_permute(fftworkspace,fftsize/2); + fftworkspace[1]=0; + + ascale=gfx_h/$pi*0.25; + xscale=800/(fftsize-4); + + buf3=fftworkspace; + buf2=integrate_buf+max_fft_size*0.5; + i=0; + lx=0; + slider3 ? loop(fftsize*0.5, + ang=-atan2(buf3[1],buf3[]); + buf3+=2; + + integrate_en ? ( + ang = buf2[] += integrate_sc * (ang - buf2[]); + buf2+=1; + ); + + + ty2=ang*ascale + gfx_h*0.5; + tx = log(1.0+i*xscale)*wsc; + + i ? + ( + gfX_r=0.6; gfx_g=0; gfx_b=0.8; gfx_a=1; + gfx_x=lx; gfx_y=ly2; gfx_lineto(tx,ty2,1) ; + ); + + lx=tx; ly2=ty2; + i+=1; + ); + + buf3=fftworkspace; + buf2=integrate_buf; + lx=0; + i=0; + fill_slmin=gfx_h; + fill_slast=0; + loop(fftsize*0.5, + ty = log(max(sqr(buf3[0])+sqr(buf3[1]),(10^(-500/20*2)))); + buf3+=2; + + integrate_en ? ( + ty = buf2[] += integrate_sc * (ty - buf2[]); + buf2+=1; + ); + + ty = ty*-0.5*sc + 20; + tx = log(1.0+i*xscale)*wsc; + + i ? + ( + gfX_r=gfx_g=1; gfx_b=0; + + 1/*fill?*/ ? ( + gfx_a=0.125; + tx0=tx|0; + lx0=lx|0; + tx0>lx0? ( + ly < gfx_h || ty < gfx_h ? gfx_triangle(lx0,max(gfx_h,ly),lx0,ly,tx0-1,ty,tx0-1,max(gfx_h,ty)); + ) : ( + tx0 > fill_slast ? ( + fill_slast < gfx_h ? gfx_line(fill_slast,gfx_h,fill_slast,fill_slmin); + fill_slmin=gfx_h; + ) : ( + fill_slmin=min(fill_slmin,ty); + ); + ); + fill_slast=tx0; + ); + gfx_a=1.0; + gfx_x=lx; gfx_y=ly; gfx_lineto(tx,ty,1) ; + ); + + ty-view size (ms) +slider2:view_maxdb=0<-450,36,.1>-vzoom +slider3:view_retrig=0<0,3,1{instant,any,ascending,descending}>-retrig + +in_pin:left input +in_pin:right input +options:no_meter + +@init +gfx_ext_retina=1; +ext_nodenorm=1; +recpos=0; +gfx_clear=-1; +g_maxlen_ms=2000; +histsize=((srate*2.0*g_maxlen_ms/1000)|0)*2; +g_hold=-1; +need_view_update=1; + +@block +g_hold<0?need_view_update=1; + +@sample +g_hold<0 ? ( + recpos[0]=spl0; + recpos[1]=spl1; + recpos = (recpos+2) >= histsize ? 0 : (recpos+2); +); + +@gfx 640 400 +gfx_ext_retina>1 ? gfx_setfont(1,"Arial",16*gfx_ext_retina,'b') : gfx_setfont(0); + +gfx_getchar(); // request mouse_cap to be set even when mouse button not down + +function color1() ( gfx_r=0.5; gfx_g=1.0; gfx_b=0.5; ); +function color2() ( gfx_r=1.0; gfx_g=0.5; gfx_b=1.0; ); + +function draw_button(xp, yp, str) + instance(w,h,x,y) + globals(gfx_r,gfx_g,gfx_b,gfx_x,gfx_y) +( + gfx_measurestr(str, w, h); + xp -= w+3; + x=xp; + y=yp; + gfx_set(0,0,.75); + w+=3; + h+=3; + gfx_rect(x,y,w,h); + gfx_set(0,.5,1); + gfx_line(x,y,x+w,y); + gfx_line(x+w,y,x+w,y+h); + gfx_line(x,y+h,x+w,y+h); + gfx_line(x,y,x,y+h); + h+=1; + w+=1; + gfx_x=xp+2; gfx_y=yp+2; + gfx_drawstr(str); + gfx_x = xp; +); +function hit_button(xp,yp,cm) + instance(w,h,x,y) + globals(cap_mode, cap_last_x, cap_last_y) +( + xp>=x&&yp>=y&&xp z ? ( dx=y; y=z; z=dx; ); + x > z ? y : x < y ? z : x; +); + + +(mouse_cap & 1) ? ( + !(last_mouse_cap & 1) ? ( + cap_mode == 1 && !cap_drag && cap_timer < 12 ? ( + view_maxdb = 0; + cap_mode=0; + need_view_update=1; + slider_automate(view_maxdb); + ) : ( + cap_mode = cap_drag = cap_timer = 0; + length_button.hit_button(mouse_x,mouse_y,2)|| + vzoom_button.hit_button(mouse_x,mouse_y,1)|| + hold_button.hit_button(mouse_x,mouse_y,3)|| + retrig_button.hit_button(mouse_x,mouse_y,4); + + cap_mode == 3 ? g_hold_needadj=1; + + cap_mode == 0 && mouse_y >= 40 ? ( + cap_mode = 100; + cap_last_y=mouse_y; + cap_last_x=mouse_x; + + (mouse_cap&8) ? ( + g_hold < 0 ? ( + g_hold_needadj=1; + g_hold=0; + ) : g_hold=-1; + ); + ); + ); + ); + + cap_last_y != mouse_y ? ( + (cap_mode == 1 || cap_mode==100) ? ( + cap_mode == 100 && (mouse_cap&16) ? ( + g_hold >= 0 ? ovhold = g_hold + (gfx_w-mouse_x)*view_msec*0.001/gfx_w*srate; + view_msec = min(g_maxlen_ms,max(0.125,exp(drag_slider_precise(log(view_msec), log(0.125), log(g_maxlen_ms),-0.02)))); + slider_automate(view_msec); + g_hold >= 0 ? ( + // zoom at mouse cursor + g_hold = ovhold - (gfx_w-mouse_x)*view_msec*0.001/gfx_w*srate; + g_hold > histsize*.5-viewsize_spls ? g_hold = histsize*.5-viewsize_spls : g_hold < 0 ? g_hold=0; + ); + ) : ( + view_maxdb = drag_slider_precise(view_maxdb, -450, 36, -0.2); + need_view_update=1; + slider_automate(view_maxdb); + ); + ); + cap_mode == 2 ? ( + view_msec = min(g_maxlen_ms,max(0.125,exp(drag_slider_precise(log(view_msec), log(0.125), log(g_maxlen_ms),-0.02)))); + slider_automate(view_msec); + need_view_update=1; + ); + cap_mode == 4 ? ( + view_retrig = drag_slider(view_retrig,0,3,0.03); + slider_automate(view_retrig); + need_view_update=1; + ); + ); + cap_mode == 3 || (cap_mode == 100&&g_hold>=0) ? ( + dx = mouse_x-cap_last_x + (cap_mode == 3 ? (mouse_y-cap_last_y)*0.2); + dx ? ( + cap_drag=1; + g_hold += dx * viewsize_spls/gfx_w; + g_hold > histsize*.5-viewsize_spls ? g_hold = histsize*.5-viewsize_spls; + cap_last_x = mouse_x; + cap_last_y = mouse_y; + need_view_update=1; + ); + g_hold < 0 ? g_hold=0; + ); +) : ( + g_hold_needadj=0; + cap_mode == 3 && !cap_drag ? ( + g_hold=-1; + cap_mode=0; + ); + cap_mode == 4 && !cap_drag ? ( + view_retrig = cycle_slider(view_retrig, 0.0, 3.0, 1.0); + old_w=0; + slider_automate(view_retrig); + cap_mode=0; + ); +); + +cap_mode && cap_timer < 12 ? cap_timer += 1; +last_mouse_cap = mouse_cap; + +function format_time_msec(a) ( + abs(a) < 1000 ? + sprintf(#,"%.02fms",a + 0.005) : + sprintf(#,"%.02fs",a*0.001 + 0.005); +); + +function format_time_msec_hz(b)( + b > 1 ? + b > 250 ? + sprintf(#,"%.02fs",b*0.001 + 0.005) : + sprintf(#,"%d Hz",1000/b+0.5) : + sprintf(#,"%.1f kHz",1/b + 0.05); +); + +mouse_wheel ? ( + (mouse_cap&8) ? ( + view_maxdb = min(36,max(-450,view_maxdb*exp(-mouse_wheel*0.0003))); + slider_automate(view_maxdb); + ) : (mouse_cap&16) ? ( + g_hold += mouse_wheel*(1/(120.0*8.0)) * viewsize_spls; + g_hold > histsize*.5-viewsize_spls ? g_hold = histsize*.5-viewsize_spls : g_hold < 0 ? g_hold=0; + ) : ( + g_hold >= 0 ? ovhold = g_hold + (gfx_w-mouse_x)*view_msec*0.001/gfx_w*srate; + view_msec = min(2000,max(1,view_msec*exp(-mouse_wheel*0.0003))); + slider_automate(view_msec); + g_hold >= 0 ? ( + // zoom at mouse cursor + g_hold = ovhold - (gfx_w-mouse_x)*view_msec*0.001/gfx_w*srate; + g_hold > histsize*.5-viewsize_spls ? g_hold = histsize*.5-viewsize_spls : g_hold < 0 ? g_hold=0; + ); + ); + mouse_wheel=0; + need_view_update=1; +); + +// only update if new fft data is there or if the size changed +need_view_update || view_maxdb != view_maxdb_last || old_w != gfx_w || old_h!=gfx_h? ( + view_maxdb_last = view_maxdb; + need_view_update=0; + old_w=gfx_w; old_h=gfx_h; + + gfx_r=gfx_g=gfx_b=0; gfx_a=1; + gfx_x=gfx_y=0; + gfx_rectto(gfx_w,gfx_h); + + + scope_h = ((gfx_h-gfx_texth*2-6-4)*0.5)|0; + scope_ycent = gfx_h - scope_h - gfx_texth - 4; + sc= exp(-view_maxdb*(log(10)/20)) * scope_h; + + // draw horz grid + gfx_r=gfx_g=gfx_b=0.6; + gfx_a=1.0; + gfx_line(0,scope_ycent,gfx_w,scope_ycent); + + i=0; + v=view_maxdb; + ly = scope_h+20*gfx_ext_retina; + while ( + a = floor(exp(v*(log(10)/20))*sc+0.5); + a > 24 ? ( + a < ly ? ( + gfx_a=.25; + gfx_line(0,scope_ycent-a,gfx_w,scope_ycent-a); + gfx_line(0,scope_ycent+a,gfx_w,scope_ycent+a); + gfx_x=0; gfx_y=scope_ycent+a+2; + v!=view_maxdb ? ( + sprintf(#tmp,"%+.1fdB",v); + gfx_a=.5; + gfx_drawstr(#tmp); + gfx_x=0; gfx_y=scope_ycent-a-2-gfx_texth; + gfx_drawstr(#tmp); + ); + ly=a - gfx_texth-20; + ); + v = floor(v*(1/3)-1)*3; + i=1; + 1; + ); + ); + + // draw vert grid + v=gfx_w - 72*gfx_ext_retina; + while( + gfx_a=0.25; + gfx_line(v,gfx_texth+8,v,gfx_h); + a = view_msec - view_msec * v / gfx_w; + + gfx_a=0.5; + gfx_x = v + 2; gfx_y = gfx_texth+12; + gfx_drawstr(sprintf(#,"%d",a*srate*0.001+0.5)); + + g_hold > 0 ? ( + gfx_x=v+2; + gfx_y += gfx_texth+2; + gfx_drawstr(sprintf(#,"-%d",a*srate*0.001 + g_hold + 0.5)); + ); + + g_hold > 0 ? ( + gfx_x=v+2; + gfx_y = gfx_h - gfx_texth*3 - 4; + gfx_drawstr(format_time_msec(-a-(g_hold*1000/srate))); + ); + + gfx_x = v + 2; + gfx_y = gfx_h - gfx_texth*2 - 2; + a <= 250 ? gfx_drawstr(format_time_msec_hz(a)); + + gfx_x = v + 2; gfx_y = gfx_h - gfx_texth; + gfx_drawstr(format_time_msec(a)); + + v -= 72*gfx_ext_retina; + v > 24*gfx_ext_retina; + ); + +viewsize_spls = (view_msec*srate*0.001)|0; +viewadv = gfx_w/viewsize_spls; + +rdptr = recpos - viewsize_spls*2 - 2; +rdptr < 0 ? rdptr += histsize; +(g_hold_needadj ? (g_hold>0) : (g_hold>=0)) && g_hold < histsize*0.5 ? ( + rdptr -= (g_hold|0)*2; + rdptr < 0 ? rdptr += histsize; +) : view_retrig >= 1.0 ? ( + rdptr2 = recpos - 2; + rdptr2 < 0 ? rdptr2 += histsize; + pos = 0; + ll = rdptr2[0]; lr=rdptr2[1]; + while( + pos < viewsize_spls ? ( + rdptr2 -= 2; + rdptr2 < 0 ? rdptr2 += histsize; + l = rdptr2[0]; r=rdptr2[1]; + + ((view_retrig|0)==2 ? ((l>=0) && (ll<0) || ((r>=0) && (lr<0))) : + (view_retrig|0)==3 ? ((l<=0) && (ll>0) || ((r<=0) && (lr>0))) : + ((l<0) != (ll<0) || (r<0) != (lr<0))) ? ( + g_hold == 0 && g_hold_needadj ? g_hold = pos+1; + rdptr=rdptr2 + 2 - viewsize_spls*2; + rdptr < 0 ? rdptr += histsize; + 0; + ):(lr=r; ll=l; pos+=1; ); + ); + ); +); +g_hold_needadj=0; + +rdptr >= histsize ? rdptr -= histsize; +x=0; +viewadv < 1 ? ( + // multiple samples per pixel + lx=0; + i=0; + minl=maxl=rdptr[0]; minr=maxr=rdptr[1]; + (rdptr+=2) >= histsize ? rdptr=0; + loop(viewsize_spls, + tx=(x|0); + tx>lx?( + minl = min(max(-1,(scope_ycent+0.5-minl*sc)|0),gfx_h+2); + maxl = min(max(-1,(scope_ycent+0.5-maxl*sc)|0),gfx_h+2); + minr = min(max(-1,(scope_ycent+0.5-minr*sc)|0),gfx_h+2); + maxr = min(max(-1,(scope_ycent+0.5-maxr*sc)|0),gfx_h+2); + + gfx_a=0.25; + color1(); + maxl-1 > scope_ycent ? gfx_line(lx,maxl-1,lx,scope_ycent) : + minl+1 < scope_ycent ? gfx_line(lx,minl+1,lx,scope_ycent); + + color2(); + maxr-1 > scope_ycent ? gfx_line(lx,maxr-1,lx,scope_ycent) : + minr+1 < scope_ycent ? gfx_line(lx,minr+1,lx,scope_ycent); + + color1(); + gfx_a=.6; + gfx_line(lx,minl,lx,maxl); + color2(); + gfx_line(lx,minr,lx,maxr); + + minl=maxl=rdptr[0]; + minr=maxr=rdptr[1]; + lx=tx; + ) : ( + minl=min(minl,v = rdptr[0]); maxl=max(maxl,v); + minr=min(minr,v2 = rdptr[1]); maxr=max(maxr,v2); + ); + (rdptr+=2) >= histsize ? rdptr=0; + x+=viewadv; + ); + // last pixel + minl = min(max(-1,(scope_ycent+0.5-minl*sc)|0),gfx_h+2); + maxl = min(max(-1,(scope_ycent+0.5-maxl*sc)|0),gfx_h+2); + minr = min(max(-1,(scope_ycent+0.5-minr*sc)|0),gfx_h+2); + maxr = min(max(-1,(scope_ycent+0.5-maxr*sc)|0),gfx_h+2); + color1(); + gfx_a=0.35; + maxl-1 > scope_ycent ? gfx_line(lx,maxl-1,lx,scope_ycent) : + minl+1 < scope_ycent ? gfx_line(lx,minl+1,lx,scope_ycent); + + color2(); + maxr-1 > scope_ycent ? gfx_line(lx,maxr-1,lx,scope_ycent) : + minr+1 < scope_ycent ? gfx_line(lx,minr+1,lx,scope_ycent); + + gfx_a=.6; + color1(); + gfx_line(lx,minl,lx,maxl); + color2(); + gfx_line(lx,minr,lx,maxr); + +) : ( + maxval=scope_h+64; + // multiple pixels per sample + i=viewsize_spls&1; + loop(viewsize_spls, + x1 = x|0; + x2 = (x+=viewadv)|0; + + viewadv<3 ? ( + color1(); + + loop(2, + v = (rdptr[0] * sc)|0; + + gfx_a=.25; + v < 0 ? ( + v < -maxval ? v=-maxval; + gfx_rect(x1,scope_ycent,x2-x1,-v) + ) : ( + v > maxval ? v=maxval; + gfx_rect(x1,scope_ycent-v,x2-x1,v); + ); + gfx_a=.6; + gfx_rect(x1,scope_ycent-v,x2-x1,1); + + rdptr+=1; + color2(); + ); + + ) : ( + color1(); + + loop(2, + gfx_a=(i&1) ? 0.25:0.125; + v = (rdptr[0] * sc)|0; + v < 0 ? ( + v < -maxval ? v=-maxval; + gfx_rect(x1,scope_ycent,x2-x1,-v) + ) : ( + v > maxval ? v=maxval; + gfx_rect(x1,scope_ycent-v,x2-x1,v); + ); + gfx_a=0.6; + gfx_rect(x1,scope_ycent-v,x2-x1,1); + rdptr+=1; + color2(); + i+=1; + ); + i+=1; + ); + rdptr >= histsize ? rdptr=0; + ); +); + +hold_button.draw_button(gfx_w,0, g_hold>=0 ? sprintf(#,"hold: -%d samples",g_hold+0.5) : "hold"); + +length_button.draw_button(gfx_x-8, 0, sprintf(#,"length: %s", format_time_msec_hz(view_msec)) ); + +vzoom_button.draw_button(gfx_x-8, 0, sprintf(#,"range: %+.1fdB",view_maxdb)); + +retrig_button.draw_button(gfx_x-8, 0, sprintf(#,"retrig: %s",(view_retrig|0)==1?"any" : + (view_retrig|0)==2?"ascend": + (view_retrig|0)==3?"descend": + "instant")); + + +); diff --git a/Effects/analysis/gfxspectrograph b/Effects/analysis/gfxspectrograph new file mode 100644 index 0000000..0c9349d --- /dev/null +++ b/Effects/analysis/gfxspectrograph @@ -0,0 +1,358 @@ +desc:Spectrograph Spectrogram Meter (Cockos) +//tags:analysis FFT meter spectrum +//author: Cockos + +/* +Copyright (C) 2007 Cockos Incorporated +License: LGPL - http://www.gnu.org/licenses/lgpl.html +*/ + +slider1:6<0,11,1{16,32,64,128,256,512,1024,2048,4096,8192,16384,32768}>-FFT size +slider2:2<0,3,1{rectangular,hamming,blackman-harris,blackman}>-window +slider3:-180<-180,6,1>-gate (dB) +slider4:0<0,10,0.1}>-frequency curve +slider5:0<0,1,1>-scroll + +in_pin:left input +in_pin:right input + +options:no_meter + +/* color ramp: +1111222233334444555566667777 +------------rrRRRRRRRRRRRRRR +----ggGGGGGGGGGGGGgg----ggGG +bbBBBBBBBBbb--------bbBBBBBB + + +7 sections, we'll say each will be 24dB + + +*/ + +@init +gfx_ext_retina=1; +fftsize=32768; +recpos=0; +gfx_clear=-1; +windowtype=-1; +over24=1/24; +histsize=fftsize + fftsize*0.5 - 1; +window=histsize; +fftworkspace=window+fftsize*0.5 + 1; + +lrecpos=0; +need_button_refs=1; + +@slider +lfft=fftsize; +a=(slider1|0); +a<0?a=0:a>11?a=11; +fftsize=2^(a+4); +minvol=10^(slider3/20*2); // squared +islogmode = slider4>0.0; +g_logscale=pow(10.0,(slider4<1 ? slider4: slider4*10.0-11.0)); + +@block + +ifftsize=1/fftsize; + +@sample +recpos[]=(spl0+spl1); +recpos+=1; +recpos >= histsize ? recpos=0; + + +@gfx 640 400 +gfx_ext_retina>1 ? gfx_setfont(1,"Arial",16*gfx_ext_retina,'b') : gfx_setfont(0); + + +old_w != gfx_w || old_h!=gfx_h? ( +cur_xpos=0; +old_w=gfx_w; old_h=gfx_h; + +gfx_r=gfx_g=gfx_b=0; gfx_a=1; +gfx_x=gfx_y=0; +gfx_rectto(gfx_w,gfx_h); +need_button_refs=1; +); + +use_h = gfx_h-gfx_texth - 4; + +function calc_color(mv, col*) globals(over24) +( + col.r=col.g=col.b=0; + + mv <= -96 ? + ( + mv>-168 ? ( + mv <= -144 ? ( col.b = (mv+168)*over24*0.25) : + mv <= -120 ? ( col.g = (mv+144)*over24*0.25; col.b = 0.25; ) : + ( col.g=0.25+(mv+120)*over24*0.5; col.b = 0.25-(mv+120)*over24*0.25) + ); + ) : ( + mv <= -72 ? ( col.r = (mv+96)*over24; col.g = 0.75; ) : + mv <= -48 ? ( col.r = 1; col.g = 0.75-(mv+72)*over24*0.75; ) : + mv <= -24 ? ( col.r = 1; col.b = (mv+48)*over24; ) : + mv <= 0 ? ( col.r=col.b=1; col.g=(mv+24)*over24; ) : + col.r=col.g=col.b=1; + ); +); + +function draw_button(xp, yp, str) instance(w,h,x,y) + globals(g_button_right_extent,gfx_r,gfx_g,gfx_b,gfx_x,gfx_y,gfx_w) +( + gfx_measurestr(str, w, h); + xp + w + 2 >= gfx_w - 140 ? ( + w = 0; + ) : ( + x=xp; + y=yp; + gfx_r=gfx_g=0; + gfx_b=0.75; + w+=3; + h+=3; + gfx_rect(x,y,w,h); + gfx_b=1.0; + gfx_g=0.5; + gfx_line(x,y,x+w,y); + gfx_line(x+w,y,x+w,y+h); + gfx_line(x,y+h,x+w,y+h); + gfx_line(x,y,x,y+h); + h+=1; + w+=1; + gfx_x=xp+2; gfx_y=yp+2; + gfx_drawstr(str); + g_button_right_extent = gfx_x + 2; + ) +); +function hit_button(xp,yp,cv) +instance(w,h,x,y) +globals(cap_mode, cap_last_x, cap_last_y) +( + xp>=x&&yp>=y&&xp0.0; + g_logscale=pow(10.0,(slider4<1 ? slider4: slider4*10.0-11.0)); + need_button_refs=1; + slider_automate(slider4); + ); + cap_mode == 3 && cap_last_y != mouse_y ? ( + slider1 = min(max(slider1 + (cap_last_y-mouse_y)*.1,0.0),11.0); + fftsize=2^((slider1|0)+4); + + cap_last_y=mouse_y; + need_button_refs=1; + slider_automate(slider1); + ); + cap_mode == 4 && cap_last_y != mouse_y ? ( + slider2 = min(max(slider2 + (cap_last_y-mouse_y)*.01,0.0),3.0); + + cap_last_y=mouse_y; + need_button_refs=1; + slider_automate(slider2); + ); + ); + +last_mouse_cap = mouse_cap; + +need_button_refs ? ( + need_button_refs=0; + gfx_a=1; + gfx_r=gfx_g=gfx_b=0; + gfx_rect(0,use_h,gfx_w,gfx_h-use_h); + gfx_x=0; + g_button_right_extent = 0; + scroll_button.draw_button(gfx_x, use_h, slider5 ? "[x] scroll" : "[ ] scroll"); + fft_button.draw_button(gfx_x+8,use_h, sprintf(#,"FFT: %d",16<= histsize ? buf1 -= histsize; + ); + buf2-=1; + loop(fftsize*.5-1, + buf3[] = buf1[]*(buf2-=1)[]; + buf3[1]=0; + buf3+=2; + + (buf1+=1) >= histsize ? buf1 -= histsize; + ); + fft(fftworkspace,fftsize); + fft_permute(fftworkspace,fftsize); + + lfftpos=0; + i=0; + lscale=10/log(10); + !(mouse_cap&1) || cap_mode>0 ? ( + slider5 ? ( + gfx_a=1; + cur_xpos = gfx_w-1; + gfx_blit(-1,1,0, 1,0,gfx_w-1,use_h, 0,0,gfx_w-1,use_h); + ) : ( + gfx_a=0.1; + gfx_x=cur_xpos+1; + gfx_y=0; + gfx_r=gfx_g=gfx_b=0; + gfx_rectto(cur_xpos+20,use_h); + cur_xpos+20 > gfx_w ? ( + gfx_x=0; + gfx_y=0; + gfx_rectto(cur_xpos+20-gfx_w,use_h); + ); + ); + uselm = islogmode; + sc = (uselm ? (1.0/log(1+g_logscale)) : (1.0/use_h)) * 0.5*fftsize; + sc2=g_logscale/use_h; + loop(use_h, + tpos = (uselm ? ((fftsize*0.5 - 1 - log(1+(use_h-1-i)*sc2)*sc)) : i*sc)|0; + tpos >= fftsize*0.5 ? tpos=fftsize*0.5; + lfftpos >= tpos ? ( lfftpos=tpos-1; ); + mv=0; + loop(tpos-lfftpos, + usei = max(lfftpos,0)*2; + aa=fftworkspace[usei]; + bb=fftworkspace[usei+1]; + dv=aa*aa+bb*bb; + dv<0.00000000000000000000001 ? dv=0.0000000000000000000000001; + dv>mv?mv=dv; + + lfftpos+=1; + ); + mv=mv <= minvol ? -200 : log(mv)*lscale; + + gfx_x=cur_xpos; + gfx_y=use_h-i-1; + gfx_a=1; + + calc_color(mv,drawc); + gfx_setpixel(drawc.r,drawc.g,drawc.b); + + i+=1; + ); + + cur_xpos+=1; + cur_xpos >= gfx_w ? cur_xpos=0; + ); +); + + +gfx_x=g_button_right_extent; +gfx_y=use_h; +gfx_r=gfx_g=gfx_b=0; +gfx_a=1; +gfx_rectto(gfx_w,gfx_h); + +mouse_x >=0 && mouse_x < gfx_w && +mouse_y >= 0 && mouse_y < use_h ? ( + !(mouse_cap&1) ? mb=-169; + bla=0; + loop(9, + gfx_x=mouse_x - 1 + (bla%3); + gfx_y=mouse_y - 1 + (bla/3); + gfx_getpixel(r,g,b); + + r||g||b ? + ( + val = i = -169; + bestdist = 10000000000; + while (i<=0) + ( + calc_color(i,tmp); + dist = sqr(tmp.r-r)+sqr(tmp.g-g)+sqr(tmp.b-b); + dist < bestdist ? ( val=i; bestdist=dist; ); + i+=1; + ); + mb = max(mb,val); + ); + bla+=1; + ); + ( + mb > -168 ? ( + sprintf(#infostr, "%.1f",mb); + ) : ( + #infostr = "-oo"; + ); + disp_hz=mouse_y/use_h; + islogmode ? ( + disp_hz = log(1+disp_hz*g_logscale)/log(1+g_logscale); + ); + + #infostr += sprintf(#,"dB %.0fHz",(1-disp_hz)*srate*0.5); + gfx_measurestr(#infostr,wid,0); + gfx_x=gfx_w-wid; + gfx_y=use_h + 2; + gfx_r=gfx_g=gfx_b=1; + gfx_drawstr(#infostr); + ); +); diff --git a/Effects/analysis/spectropaint b/Effects/analysis/spectropaint new file mode 100644 index 0000000..5f514c5 --- /dev/null +++ b/Effects/analysis/spectropaint @@ -0,0 +1,227 @@ +desc:Spectropaint Synthesis +desc:Spectropaint - Graphical Periodic Spectral Synthesis +//tags:analysis spectral generator FFT +//author: Cockos + +/* +Copyright (C) 2007 Cockos Incorporated +License: LGPL - http://www.gnu.org/licenses/lgpl.html +*/ + +slider1:20<1,100,1>period (sec) +slider2:-40<-144,0,1>amplitude (dB) +slider3:4<0,11,1{256,512,1024,2048,4096,8192,16384,32768}>FFT size +slider4:0<-1,100,0.1>project sync offset (-1 to disable) +slider5:0<0,1,1{sine,fill}>mode + +out_pin:left output +out_pin:right output +in_pin:left input +in_pin:right input + +@init + +brush_size=1; +g_lx=g_ly=-100; + +img_w = 160; +img_h = 120; +img_buf = 256*1024; + +fftsize=4096; // todo compute this based on period + +outpos=fftsize; +lastbuf=0; +nextbuf = 65536; + +gfx_clear=0; + +img_pos = img_w; // position in image (0..img_w) + +over24=1/24; +minvol = 10^(-180/20); +lscale=10/log(10); +ext_noinit=1; + +@slider +lfftsize=fftsize; +fftsize = 2^(slider3+8); +fftsize!=lfftsize ? ( + fftsize = (fftsize & (fftsize-1)) ? 4096 : fftsize < 256 ? 256 : fftsize>32768 ? 32768 : fftsize; + memset(lastbuf,0,65536); + memset(nextbuf,0,65536); +); +ihalffftsize=2.0/fftsize; +wet_mix = 10^(slider2/20); + +@block +(trigger&1) ? (need_undo=1; memset(img_buf,0,img_w*img_h); ); + +(trigger&(2^9)) ? brush_size=min(32,brush_size+1); +(trigger&(2^8)) ? brush_size=max(1,brush_size-1); + +@serialize +file_var(0,img_w); +file_Var(0,img_h); +file_mem(0,img_buf,img_w*img_h); + +@sample + +(play_state & 1) || slider4 < 0 ? ( + +outpos >= fftsize*0.5 ? ( + tmp=lastbuf; + lastbuf=nextbuf; + nextbuf=tmp; + outpos=0; + imgbkcnt=1; + + lastimgpos = img_pos; + + (play_state & 1) && slider4 >= 0 ? ( + img_pos = ((play_position+slider4) * img_w / slider1 )% img_w; + ) : + ( + dimgpos = img_w * (fftsize*0.5)/ (srate*slider1); + (img_pos += dimgpos) >= img_w ? img_pos=0; + ); + + imgbkcnt = img_pos - lastimgpos; + imgbkcnt > img_pos ? imgbkcnt=img_pos; + imgbkcnt<1?imgbkcnt=1; + + isrev=!isrev; + tmp=1; + // generate nextbuf + dtmp = img_h/(fftsize*0.5-1); + memset(nextbuf,0,fftsize*2); // zero second half + fmode = slider5>0.5; + ly=-1; + loop(fftsize*0.5 - 1, + val=0; + ty=((img_h - 1 - tmp*dtmp)|0); + ty!=ly || fmode ? + ( + img_rdpos = img_buf + img_pos + img_w*ty; + loop(imgbkcnt, + val = max(val,img_rdpos[]); + img_rdpos -= 1; + ); + isrev && (tmp & 1) ? val=-val; + nextbuf[tmp*2]=val; + ); + ly=ty; + tmp+=1; + ); + fft_ipermute(nextbuf,fftsize); + ifft(nextbuf,fftsize); + +); + +fadepos = outpos*ihalffftsize; +//fadepos=sin(fadepos*$pi*0.5); +sig=(lastbuf[fftsize+outpos*2]*(1-fadepos) + nextbuf[outpos*2]*fadepos ) * wet_mix; +spl0+=sig; +spl1+=sig; +outpos+=1; + +) : img_pos=img_w+1;// do not process if stopped and projectsync + + +@gfx 640 400 + +need_undo ? ( sliderchange(-1); need_undo=0; ); + +g_dy = gfx_h / img_h; +g_dx = gfx_w / img_w; +g_mx = (mouse_x/g_dx)|0; +g_my = (mouse_y/g_dy)|0;g_y = 0; +loop(img_h, + g_x=0; + loop(img_w, + + gfx_x = g_dx*g_x; gfx_y = g_dy*g_y; + + g_v = img_buf[g_x + g_y*img_w]; + + g_v > 0 ? ( + gfx_a=1; + gfx_r=g_v*9; + gfx_g=g_v*4; + gfx_b=g_v; + gfx_rectto(g_dx*(g_x+1)+0.9,g_dy*(g_y+1)+0.9); + ); + g_x==g_mx && g_y==g_my ? + ( + gfx_a=1; gfx_r=gfx_b=0; + gfx_b=255; + gfx_x=g_dx*g_x; gfx_y=g_dy*g_y; + gfx_lineto(g_dx*(g_x-1),g_dy*(g_y-1),1); + gfx_x=g_dx*g_x; gfx_y=g_dy*(g_y-1); + gfx_lineto(g_dx*(g_x-1),g_dy*(g_y),1); + ); + g_x+=1; + ); + g_y+=1; +); + +(mouse_cap & 3) ? ( + g_x=g_mx; g_y=g_my; + g_dir = mouse_cap&1; + g_dir = g_dir? 0.08/brush_size : -0.3; + + g_lx<-99 || g_ly<-99 ? ( g_lx=g_x; g_ly=g_y; ); + g_nsteps=max(max(abs(g_lx-g_x),abs(g_ly-g_y)),1); + g_dlx=(g_x-g_lx)/g_nsteps; + g_dly=(g_y-g_ly)/g_nsteps; + + loop(g_nsteps, // connect the dots to make it nice and easy to draw + g_vxs=((g_lx-brush_size*0.5)|0); + g_v= img_buf+g_vxs + ((g_ly-brush_size*0.5)|0)*img_w; + loop(brush_size, + g_vx=g_vxs; + loop(brush_size, + g_vx >= 0 && g_vx< img_w && g_v >= img_buf && g_v < img_buf+img_w*img_h ? ( + g_tmp = g_v[] + g_dir; + g_v[]=g_tmp<0?0 : g_tmp>1?1:g_tmp; + ); + g_v+=1; + g_vx+=1; + ); + g_v += img_w-brush_size; + ); + + g_lx += g_dlx; + g_ly += g_dly; + + ); +) : ( + g_lx >= 0 || g_ly >= 0 ? ( + sliderchange(-1); + ); + g_lx=g_ly=-100; +); + +glp=img_pos; +gfx_x= (glp) * gfx_w/img_w ; +gfx_y=0; +gfX_a=0.3; +gfx_g=gfx_r=gfx_b=1; +g_x=max((glp+1) * gfx_w/img_w ,gfx_x+4); +gfx_rectto(g_x,gfx_h); + +gfx_a=0.5; +gfx_x=0; +gfX_y=gfx_h-gfx_texth; +gfx_drawchar($'b'); +gfx_drawchar($'r'); +gfx_drawchar($':'); +gfx_drawnumber(brush_size, 0); +gfX_x+=8; +gfx_drawchar($'('); +gfx_drawchar($'8'); gfx_drawchar($'/'); gfx_drawchar($'9'); gfx_x+=8; gfx_drawchar($'s'); gfx_drawchar($'z'); +gfx_drawchar($','); gfx_x+=8; +gfx_drawchar($'0'); +gfx_drawchar($'='); +gfx_drawchar($'c');gfx_drawchar($'l');gfx_drawchar($'r'); +gfx_drawchar($')'); diff --git a/Effects/analysis/zoomanalyzer b/Effects/analysis/zoomanalyzer new file mode 100644 index 0000000..1c32c2d --- /dev/null +++ b/Effects/analysis/zoomanalyzer @@ -0,0 +1,155 @@ +desc:Zoom Analyzer Demo +//tags: visualization scope analysis FFT +//author: Cockos + +/* +Copyright (C) 2007 Cockos Incorporated +License: LGPL - http://www.gnu.org/licenses/lgpl.html +*/ + +in_pin:left input +in_pin:right input + +@init +recpos=0; +fftsize=32768; +gfx_clear=-1; +windowtype=-1; + +histsize=128*1024; +window=histsize; +fftworkspace=window+65536; +lrecpos=0; + + +@slider +lfft=fftsize; +fftsize=4096; + +@block + +ifftsize=1/fftsize; + +@sample +recpos[]=spl(0)+spl(1); +recpos+=1; +recpos >= histsize ? recpos=0; + +@gfx 640 400 + +// only update if new fft data is there or if the size changed +recpos != lrecpos || old_w != gfx_w || old_h!=gfx_h? ( + + gfx_mode=0; + +old_w=gfx_w; old_h=gfx_h; + +gfx_r=gfx_g=gfx_b=0; gfx_a=0.01; +gfx_x=gfx_y=0; +gfx_rectto(gfx_w,gfx_h); +gfx_x=gfx_y=0; +gfx_blurto(gfx_w,gfx_h); +gfX_a=0.5; +blitparms=2*1024*1024; +blitparms[0]=blitparms[1]=0; +blitparms[2]=gfx_w; +blitparms[3]=gfx_h; + +blitparms[4]=-gfx_w*0.05; blitparms[5]=-gfx_h*0.05; +blitparms[6]=gfx_w-blitparms[4]*2; +blitparms[7]=gfx_h-blitparms[5]*2; +blitparms[8]=cos(colorang2*0.03)*gfx_w*0.09; +blitparms[9]=cos(colorang*3.5)*gfx_h*0.09; +gfx_blitext(-1,blitparms,sin(blitang)*$pi*0.1); + +blitang+=0.01*cos(colorang); + + +sc=(gfx_h-20)*20/(120 * log(10)); + +wsc=gfx_w/log(1+400); + +lrecpos=recpos; + +( + windowsize != fftsize ? ( + windowsize=fftsize; + i=0; + dwindowpos = $pi*2/fftsize; + windowpos=-dwindowpos * m_fft_size / 4; + + loop(fftsize, + window[i] = (0.42 - 0.50 * cos(windowpos) + 0.08 * cos(2.0*windowpos) )*ifftsize*0.5; + windowpos+=dwindowpos; + i+=1; + ); + ); + + gfx_mode=1; + + gfx_a=0.7; + gfx_x=gfx_w/2; gfx_y=gfx_h/2; + gfx_getpixel(r,g,b); + stupidcnt > 10 ? gfx_a=-gfx_a; + + r>0.6 && g>0.6 && b>0.6 ? + ( + stupidcnt+=1; stupidcnt==9 ? stupidcnt=100; + ) + : + ( + stupidcnt-=1; + stupidcnt==10 ? stupidcnt=0; + ); + colorang2+=cos(colorang); + + gfX_r=1+sin(colorang*7); + gfx_g=1+cos(colorang*3.132+3); + gfx_b=1+cos(colorang*0.3125+1); + colorang+=0.005; + + buf1=lrecpos-fftsize; + buf1<0 ? buf1+=histsize; + buf2=window; + buf3=fftworkspace; + loop(fftsize, + buf3[] = buf1[]*buf2[]; + buf3[1]=0; + buf3+=2; + + buf2+=1; + (buf1+=1) >= histsize ? buf1 -= histsize; + ); + fft(fftworkspace,fftsize); + fft_permute(fftworkspace,fftsize); + + i=0; + ascale=gfx_h/$pi*0.25; + xscale=800/(fftsize-1); + loop(fftsize*0.5-1, + aa=fftworkspace[i*2+2]; bb=fftworkspace[i*2+3]; + dv=aa*aa+bb*bb; + dv<0.00000000000000000001 ? dv=0.0000000000000000000001; + ty= (-log(dv)*0.5)*sc+20; + + ang=-atan2(aa,bb); + + ty2=ang*ascale + gfx_h*0.5; + + tx = log(1.0+i*xscale)*wsc; + + + + i ? + ( + + gfx_x=lx; gfx_y=ly; gfx_lineto(tx,ty,1) ; + ); + + lx=tx; ly=ty; ly2=ty2; + i+=1; + ); +); + + +); diff --git a/Effects/delay/delay b/Effects/delay/delay new file mode 100644 index 0000000..7701063 --- /dev/null +++ b/Effects/delay/delay @@ -0,0 +1,80 @@ +// This effect Copyright (C) 2004 and later Cockos Incorporated +// License: LGPL - http://www.gnu.org/licenses/lgpl.html +desc: Delay +//tags: delay guitar +//author: Cockos + +slider1:300<0,4000,20>Delay (ms) +slider2:-5<-120,6,1>Feedback (dB) +slider3:0<-120,6,1>Mix In (dB) +slider4:-6<-120,6,1>Output Wet (dB) +slider5:0<-120,6,1>Output Dry (dB) +slider6:0<0,1,1{Off,On}>Resample On Length Change + +in_pin:left input +in_pin:right input +out_pin:left output +out_pin:right output + +@init +delaypos=0; + +@slider +odelay=delaylen; +delaylen=min(slider1 * srate / 1000,500000); +odelay != delaylen ? ( + slider6 && odelay > delaylen ? ( + // resample down delay buffer, heh + rspos=0; rspos2=0; + drspos=odelay/delaylen; + loop(delaylen, + + tpos = ((rspos)|0)*2; + rspos2[0]=tpos[0]; + rspos2[1]=tpos[1]; + + rspos2+=2; + rspos+=drspos; + ); + delaypos /= drspos; + delaypos|=0; + delaypos<0?delaypos=0; + ) : ( + slider6 && odelay < delaylen ? ( + // resample up delay buffer, heh + drspos=odelay/delaylen; + rspos=odelay; + rspos2=delaylen*2; + loop(delaylen, + rspos-=drspos; + rspos2-=2; + + tpos = ((rspos)|0)*2; + rspos2[0]=tpos[0]; + rspos2[1]=tpos[1]; + + ); + delaypos /= drspos; + delaypos|=0; + delaypos<0?delaypos=0; + ) : (!slider6 && delaypos >= delaylen ? delaypos = 0); + ); + freembuf(delaylen*2); +); +wetmix = 2 ^(slider2/6); +drymix = 2 ^(slider3/6); +wetmix2 = 2 ^(slider4/6); +drymix2 = 2 ^(slider5/6); + +@sample +dpint = delaypos*2; +os1=dpint[0]; +os2=dpint[1]; + +dpint[0]=min(max(spl0*drymix + os1*wetmix,-4),4); +dpint[1]=min(max(spl1*drymix + os2*wetmix,-4),4); + +(delaypos+=1) >= delaylen ? delaypos=0; + +spl0=spl0*drymix2 + os1*wetmix2; +spl1=spl1*drymix2 + os2*wetmix2; diff --git a/Effects/delay/delay_chfun b/Effects/delay/delay_chfun new file mode 100644 index 0000000..2a7b7a1 --- /dev/null +++ b/Effects/delay/delay_chfun @@ -0,0 +1,72 @@ +// This effect Copyright (C) 2004 and later Cockos Incorporated +// License: LGPL - http://www.gnu.org/licenses/lgpl.html +desc: Delay w/Stereo Bounce +//tags: delay ping-pong +//author: Cockos + +slider1:300<0,4000,20>Delay (ms) +slider2:-6<-120,6,1>Update Wet (dB) +slider3:-6<-120,6,1>Update Dry (dB) +slider4:-6<-120,6,1>Out Wet (dB) +slider5:-6<-120,6,1>Out Dry (dB) +slider6:0<0,1,1{Off,On}>Resample On Length Change + +in_pin:left input +in_pin:right input +out_pin:left output +out_pin:right output + +@init +delaypos=0; +@slider +odelay=delaylen; +delaylen=min(slider1 * srate / 1000,500000); +odelay != delaylen ? ( + slider6 && odelay > delaylen ? ( + // resample down delay buffer, heh + rspos=0; rspos2=0; + drspos=odelay/delaylen; + loop(delaylen, + + tpos = ((rspos)|0)*2; + rspos2[0]=tpos[0]; + rspos2[1]=tpos[1]; + rspos2+=2; + rspos+=drspos; + ); + delaypos /= drspos; + delaypos|=0; + ) : ( + slider6 && odelay < delaylen ? ( + // resample up delay buffer, heh + drspos=odelay/delaylen; + rspos=odelay; + rspos2=delaylen*2; + loop(delaylen, + rspos-=drspos; + rspos2-=2; + + tpos = ((rspos)|0)*2; + rspos2[0]=tpos[0]; + rspos2[1]=tpos[1]; + ); + delaypos /= drspos; + delaypos|=0; + ) : (!slider6 && delaypos >= delaylen ? delaypos = 0); + ); + delaypos<0?delaypos=0; + freembuf(delaylen*2); +); +wetmix = 2 ^(slider2/6); +drymix = (2 ^(slider3/6)) * 0.5; +wetmix2 = 2 ^(slider4/6); +drymix2 = 2 ^(slider5/6); +@sample +dpint = delaypos*2; +os1=dpint[0]; +os2=dpint[1]; +dpint[0]=min(max((spl0+spl1)*drymix + os2*wetmix,-4),4); +dpint[1]=min(max(os1*wetmix,-4),4); +(delaypos+=1) >= delaylen ? delaypos=0; +spl0=spl0*drymix2 + os1*wetmix2; +spl1=spl0*drymix2 + os2*wetmix2; diff --git a/Effects/delay/delay_chorus b/Effects/delay/delay_chorus new file mode 100644 index 0000000..c613d28 --- /dev/null +++ b/Effects/delay/delay_chorus @@ -0,0 +1,65 @@ +// This effect Copyright (C) 2004 and later Cockos Incorporated +// License: LGPL - http://www.gnu.org/licenses/lgpl.html +desc: Delay w/Chorus +//tags: delay chorus modulation +//author: Cockos + +slider1:300<0,4000,20>Delay (ms) +slider2:-6<-120,6,1>Feedback (dB) +slider3:-6<-120,6,1>Output Wet (Chorus) (dB) +slider4:-6<-120,6,1>Output Wet (Clean) (dB) +slider5:0<-120,6,1>Output Dry (dB) +slider6:500<1,1000,10>Chorus Period (ms) +slider7:2<0,100,1>Chorus Length (ms) + +in_pin:left input +in_pin:right input +out_pin:left output +out_pin:right output + +@init +delaypos=0; + +@slider +odelay=delaylen; +delaylen=min(slider1 * srate / 1000,500000); +odelay != delaylen ? freembuf(delaylen*2); + +wetmix = 2 ^ (slider2/6); +drymix = 1; +wetmix2 = 2 ^ (slider3/6); +wetmix3 = 2 ^ (slider4/6); +drymix2 = 2 ^ (slider5/6); +dppossc = $pi/(slider6 * srate * 0.001); +dpbacksc = min(max(slider7/slider1,0),1)*delaylen*0.5 - 1; + + +@sample + +dppos = dppos+dppossc; +dpback = (sin(dppos)+1)*dpbacksc; +dpint = delaypos-dpback-1; +dpint < 0 ? dpint += delaylen; +dpinto=dpint; +dpint=(0|dpint); +frac=dpinto-dpint; +dpint2=dpint>=(delaylen-1)?0:(dpint+1); + +dpint += dpint; +dpint2 += dpint2; + +os1=dpint[0]*(1-frac)+frac*dpint2[0]; +os2=dpint[1]*(1-frac)+frac*dpint2[1]; + +dpint = delaypos*2; + +oss1=dpint[0]; +oss2=dpint[1]; + +dpint[0]=min(max(spl0*drymix + oss1*wetmix,-4),4); +dpint[1]=min(max(spl1*drymix + oss2*wetmix,-4),4); + +(delaypos+=1) >= delaylen ? delaypos=0; + +spl0=spl0*drymix2 + os1*wetmix2 + oss1*wetmix3; +spl1=spl1*drymix2 + os2*wetmix2 + oss2*wetmix3; diff --git a/Effects/delay/delay_lowres b/Effects/delay/delay_lowres new file mode 100644 index 0000000..4662f74 --- /dev/null +++ b/Effects/delay/delay_lowres @@ -0,0 +1,65 @@ +// This effect Copyright (C) 2004 and later Cockos Incorporated +// License: LGPL - http://www.gnu.org/licenses/lgpl.html +desc: Delay (Lo-Fi) +//tags: delay lo-fi bitreduce +//author: Cockos + +slider1:300<0,4000,20>Delay (ms) +slider2:-6<-120,6,1>Update Wet (dB) +slider3:-6<-120,6,1>Update Dry (dB) +slider4:-6<-120,6,1>Out Wet (dB) +slider5:-6<-120,6,1>Out Dry (dB) +slider6:8<1,24,1>Resolution (bits) +slider7:0<0,1,1{Off,On}>Resample On Length Change + +in_pin:left input +in_pin:right input +out_pin:left output +out_pin:right output + +@slider +resol=2^((slider6|=0)-1); +invresl=1/resol; + + +odelay=delaylen; +delaylen=slider1 * srate / 1000; +odelay!=delaylen ? ( + slider7 && odelay > 0 ? ( + // resample delay buffer, heh + rspos=0; rspos2=0; + drspos=odelay/delaylen; + loop(delaylen, + + tpos = ((rspos)|0)*2; + rspos2[0]=tpos[0]; + rspos2[1]=tpos[1]; + + rspos2+=2; + rspos+=drspos; + ); + delaypos *= delaylen/odelay; + delaypos<0 ? delaypos=0; + ); + !slider7 && delaypos >= delaylen ? delaypos = 0; +); + +wet=2^(slider2/6); +dry=2^(slider3/6); +wet2=2^(slider4/6); +dry2=2^(slider5/6); + + + +@sample +dpint = delaypos*2; +os1=dpint[0]; +os2=dpint[1]; + +dpint[0]=min(max((((spl0*dry + os1*wet)*resol)|0)*invresl,-4),4); +dpint[1]=min(max((((spl1*dry + os2*wet)*resol)|0)*invresl,-4),4); + +spl0=spl0*dry2+os1*wet2; +spl1=spl1*dry2+os2*wet2; + +(delaypos+=1) >= delaylen ? ( delaypos=0 ); diff --git a/Effects/delay/delay_sustain b/Effects/delay/delay_sustain new file mode 100644 index 0000000..bd0c6dd --- /dev/null +++ b/Effects/delay/delay_sustain @@ -0,0 +1,66 @@ +// This effect Copyright (C) 2004 and later Cockos Incorporated +// License: LGPL - http://www.gnu.org/licenses/lgpl.html +desc: Delay w/Sustain +//tags: delay compressor dynamics +//author: Cockos + +slider1:120<0,4000,20>Length (ms) +slider2:-44<-120,6,1>Threshold (dB) +slider3:10<0,1000,1>Attack (ms) +slider4:10<0,1000,1>Release (ms) +slider5:0<-120,0,1>Maximum Mixing (dB) +slider6:0<-120,6,1>Output Wet (dB) +slider7:0<-120,6,1>Output Dry (dB) + +in_pin:left input +in_pin:right input +out_pin:left output +out_pin:right output + +@init +delaypos=0; +env=0; + +@slider +odelay=delaylen; +delaylen=min(slider1 * srate / 1000,500000); +odelay != delaylen ? ( + delaypos >= delaylen ? delaypos = 0; + freembuf(delaylen*2); +); +maxmix = 10^(slider5/20); +wetmix2 = 10^(slider6/20); +drymix2 = 10^(slider7/20); + +thresh = 10^(slider2/20); +tmp = slider3*0.001; +tmp==0 ? tmp=0.0001; +denv = exp(-1/(tmp*srate)); +tmp = slider4*0.001; +tmp==0 ? tmp=0.0001; +denvr = exp(-1/(tmp*srate)); + +@sample + +a = max(abs(spl0),abs(spl1)); + +env = a > env ? env*denv + a*(1-denv) : env*denvr + a*(1-denvr); + +dpint = delaypos*2; +os1=dpint[0]; +os2=dpint[1]; + +sc=0.0; +env > thresh ? ( + a = env/thresh; // ~6dB = 2, 12dB over=4 + sc=a*0.5*maxmix; + sc>maxmix?sc=maxmix; +); + +dpint[0]=min(max(spl0*sc + os1*(1-sc),-4),4); +dpint[1]=min(max(spl1*sc + os2*(1-sc),-4),4); + +(delaypos+=1) >= delaylen ? delaypos=0; + +spl0=spl0*drymix2 + os1*wetmix2; +spl1=spl1*drymix2 + os2*wetmix2; diff --git a/Effects/delay/delay_tone b/Effects/delay/delay_tone new file mode 100644 index 0000000..2bf0d77 --- /dev/null +++ b/Effects/delay/delay_tone @@ -0,0 +1,85 @@ +// This effect Copyright (C) 2004 and later Cockos Incorporated +// License: LGPL - http://www.gnu.org/licenses/lgpl.html +desc: Delay w/Tone Control +//tags: delay +//author: Cockos + +slider1:300<0,4000,20>Length (ms) +slider2:-4<-120,6,0.1>Feedback (dB) +slider3:0<-60,60,0.1>Bass Gain (dB) +slider4:200<20,24000,10>Bass Frequency (Hz) +slider5:0<-60,60,0.1>Treble Gain (dB) +slider6:4000<20,24000,10>Treble Frequency (Hz) +slider7:0.5<0,1,0.01>Output Mix + +in_pin:left input +in_pin:right input +out_pin:left output +out_pin:right output + +@init +delaypos=0; +Bc0=Bc1=Bc2=0; +Bli1=Bli2=Bri1=Bri2=0; +Tc0=Tc1=Tc2=0; +Tli1=Tli2=Tri1=Tri2=0; +ldelay1=ldelay2=rdelay1=rdelay2=0; + +@slider +odelay=delaylen; +delaylen=min(slider1 * srate / 1000,500000); +freembuf(delaylen*2); +delaypos >= delaylen || delaypos < 0 ? delaypos=0; + +wetmix = 2^ (slider2/6); +wetmix2 = slider7; +drymix2 = 1-slider7; + +width=1.5; +// bass control +arc=slider4*$pi/(srate*0.5); +gain=(2 ^ (slider3/6)); +a=(sin(arc)*width) * (gain < 1 ? 1 : 0.25); +tmp=1/(1+a); +Bc0=tmp*a*(gain-1); +Bc1=tmp*2*cos(arc); +Bc2=tmp*(a-1); + +// treble control +arc=slider6*$pi/(srate*0.5); +gain=(2 ^ (slider5/6)); +a=(sin(arc)*width) * (gain < 1 ? 1 : 0.25); +tmp=1/(1+a); +Tc0=tmp*a*(gain-1); +Tc1=tmp*2*cos(arc); +Tc2=tmp*(a-1); + + + +@sample +dpint = delaypos*2; +os1=dpint[0]; +os2=dpint[1]; + +// apply EQ to os1/os2 + +Btmp=Bc0*(os1-ldelay2) + Bc1*Bli1 + Bc2*Bli2; +Ttmp=Tc0*(os1-ldelay2) + Tc1*Tli1 + Tc2*Tli2; +ldelay2=ldelay1; ldelay1=os1; +Tli2=Tli1; os1 += (Tli1=Ttmp); +Bli2=Bli1; os1 += (Bli1=Btmp); + +Btmp=Bc0*(os2-rdelay2) + Bc1*Bri1 + Bc2*Bri2; +Ttmp=Tc0*(os2-rdelay2) + Tc1*Tri1 + Tc2*Tri2; +rdelay2=rdelay1; rdelay1=os2; +Tri2=Tri1; os2 += (Tri1=Ttmp); +Bri2=Bri1; os2 += (Bri1=Btmp); + + +dpint[0]=min(max(spl0 + os1*wetmix,-4),4); +dpint[1]=min(max(spl1 + os2*wetmix,-4),4); + +(delaypos+=1) >= delaylen ? delaypos=0; + +spl0=spl0*drymix2 + os1*wetmix2; +spl1=spl1*drymix2 + os2*wetmix2; diff --git a/Effects/delay/delay_varlen b/Effects/delay/delay_varlen new file mode 100644 index 0000000..748029f --- /dev/null +++ b/Effects/delay/delay_varlen @@ -0,0 +1,55 @@ +// This effect Copyright (C) 2004 and later Cockos Incorporated +// License: LGPL - http://www.gnu.org/licenses/lgpl.html +desc: Delay w/LFO-Modulated Length +//tags: delay modulation LFO +//author: Cockos + +slider1:300<0,4000,20>Delay (ms) +slider2:-6<-120,6,1>Update Wet (dB) +slider3:-6<-120,6,1>Update Dry (dB) +slider4:-6<-120,6,1>Out Wet (dB) +slider5:-6<-120,6,1>Out Dry (dB) +slider6:1<0.001,30,0.1>Period (sec) +slider7:0.3<0.001,1.0,0.01>Amplitude (ratio) + +in_pin:left input +in_pin:right input +out_pin:left output +out_pin:right output + +@init +delaypos=0; + +@slider +odelay=delaylen; +delaylen=min(slider1 * srate / 1000,500000); +odelay != delaylen ? freembuf(delaylen*2); + +wetmix = 2 ^ (slider2/6); +drymix = 2 ^ (slider3/6); +wetmix2 = 2 ^ (slider4/6); +drymix2 = 2 ^ (slider5/6); +dppossc = $pi/(slider6 * srate); +dpbacksc = min(max(slider7,0),1)*delaylen*0.5 - 1; + + +@sample + +dppos = dppos+dppossc; +dpback = (sin(dppos)+1)*dpbacksc; +dpint = delaypos-dpback-1; +dpint < 0 ? dpint += delaylen; +dpint *= 2; + +os1=dpint[0]; +os2=dpint[1]; + +dpint = delaypos*2; + +dpint[0]=min(max(spl0*drymix + os1*wetmix,-4),4); +dpint[1]=min(max(spl1*drymix + os2*wetmix,-4),4); + +(delaypos+=1) >= delaylen ? delaypos=0; + +spl0=spl0*drymix2 + os1*wetmix2; +spl1=spl1*drymix2 + os2*wetmix2; diff --git a/Effects/delay/fft-delay b/Effects/delay/fft-delay new file mode 100644 index 0000000..90b6ff2 --- /dev/null +++ b/Effects/delay/fft-delay @@ -0,0 +1,150 @@ +desc: FFT delayer +slider1:0<0,20,1>delay band 1 (frames) +slider2:-120<-120,1,1>feedback band 1 (db) +slider3:0<0,20,1>delay band 2 (frames) +slider4:-120<-120,1,1>feedback band 2 (db) +slider5:0<0,20,1>delay band 3 (frames) +slider6:-120<-120,1,1>feedback band 3 (db) +slider7:0<0,20,1>delay band 4 (frames) +slider8:-120<-120,1,1>feedback band 4 (db) +slider9:0<0,20,1>delay band 5 (frames) +slider10:-120<-120,1,1>feedback band 5 (db) +slider11:0<0,20,1>delay band 6 (frames) +slider12:-120<-120,1,1>feedback band 6 (db) +slider13:0<0,20,1>delay band 7 (frames) +slider14:-120<-120,1,1>feedback band 7 (db) +slider15:0<0,20,1>delay band 8 (frames) +slider16:-120<-120,1,1>feedback band 8 (db) + +@init + + maxdelay=21; + window= 120000; + hist= 240000; + dlens= 358000; + btops= 359000; + dfb = 359500; + delaylines=360000; + + fftsize=2048; + invfsize=1/fftsize; + hfftsize=fftsize*0.5; + tmp=0; + tsc=3.14159/hfftsize; + loop(hfftsize, + window[tmp]=0.42-0.50*cos(tmp*tsc)+0.08*cos(2*tmp*tsc); + tmp+=1; + ); + bpos=0; + curblock=0; + lastblock=65536; + delaypos=0; + pdc_top_ch=2; + pdc_bot_ch=0; + pdc_delay=fftsize; + btops[0]=2; + btops[1]=4; + btops[2]=8; + btops[3]=16; + btops[4]=64; + btops[5]=128; + btops[6]=512; + btops[7]=1024; + +@slider + dlens[0]=slider1; + dfb[0]=2^(slider2/6); + dlens[1]=slider3; + dfb[1]=2^(slider4/6); + dlens[2]=slider5; + dfb[2]=2^(slider6/6); + dlens[3]=slider7; + dfb[3]=2^(slider8/6); + dlens[4]=slider9; + dfb[4]=2^(slider10/6); + dlens[5]=slider11; + dfb[5]=2^(slider12/6); + dlens[6]=slider13; + dfb[6]=2^(slider14/6); + dlens[7]=slider15; + dfb[7]=2^(slider16/6); + tmp=0; + loop(8, + dlens[tmp]|=0; + dlens[tmp] < 1 ? dlens[tmp]=0 : (dlens[tmp] > maxdelay-1 ? dlens[tmp]=maxdelay-1); + tmp+=1; + ); + +@sample + +bpos >= fftsize ? ( + + t=curblock; + curblock=lastblock; + lastblock=t; + + fft(curblock,fftsize); + fft_permute(curblock,fftsize); + + dbo = (delaylines+delaypos*fftsize*2); + tmp=0; + loop(fftsize*2, + dbo[tmp]=curblock[tmp]; tmp+=1; + ); + + i=0; + idx=0; + loop(8, + btop=btops[idx]*2; + fb=dfb[idx]; + delamt=dlens[idx]; idx+=1; + delamt > 0 ? ( + a = delaypos - delamt; + a < 0 ? a += maxdelay; + a|=0; + delbuf = delaylines+a*fftsize*2; + while( + i2=fftsize*2-i-2; + + curblock[i] += (a=delbuf[i]); + curblock[i+1] += (b=delbuf[i+1]); + curblock[i2] += (c=delbuf[i2]); + curblock[i2+1] += (d=delbuf[i2+1]); + + fb > 0.0000001 ? ( + dbo[i]+=a*fb; + dbo[i+1]+=b*fb; + dbo[i2]+=c*fb; + dbo[i+1]+=d*fb; + ); + + (i+=2) < btop; + ); + ) : ( + i=btop; + ); + ); + fft_ipermute(curblock,fftsize); + ifft(curblock,fftsize); + (delaypos += 1) >= maxdelay ? delaypos=0; + bpos=0; +); + +// make sample +w=window[bpos*0.5]; +iw=1-w; + +os0=spl0*invfsize; +os1=spl1*invfsize; + +spl0=(curblock[bpos]*w + lastblock[fftsize+bpos]*iw); +spl1=(curblock[bpos+1]*w + lastblock[fftsize+bpos+1]*iw); + +lastblock[bpos]=hist[bpos]; +lastblock[bpos+1]=hist[bpos+1]; +lastblock[fftsize+bpos]=os0; +lastblock[fftsize+bpos+1]=os1; + +hist[bpos]=os0; +hist[bpos+1]=os1; +bpos+=2; diff --git a/Effects/delay/scratchy b/Effects/delay/scratchy new file mode 100644 index 0000000..16dad77 --- /dev/null +++ b/Effects/delay/scratchy @@ -0,0 +1,44 @@ +// This effect Copyright (C) 2004 and later Cockos Incorporated +// License: GPL - http://www.gnu.org/licenses/gpl.html +desc: scratchy +slider1:300<0,4000,20>buffer size (ms) +slider2:1<0,1>cursor position + +@init +delaypos=0; + +@slider +odelay=delaylen; +delaylen=min(slider1 * srate / 1000,500000); +odelay != delaylen ? freembuf(delaylen*2); + +seekfrom=seekpos; +seekto=slider2*delaylen; +seekcnt=0; + +@sample + +seekpos != seekto ? ( + seekcnt+=2/(srate); + t = ((sin(seekcnt*$pi - $pi/2)+1)^2)*0.5; + seekpos=t*(seekto-seekfrom)+seekfrom; + seekcnt >= 1 ? seekpos=seekto; + +); + +dpint = delaypos-seekpos; +dpint < 0 ? dpint += delaylen; +dpint = (dpint|0)*2; + +os1=dpint[0]; +os2=dpint[1]; + +dpint = delaypos*2; + +dpint[0]=spl0; +dpint[1]=spl1; + +(delaypos+=1) >= delaylen ? delaypos=0; + +spl0=spl0*0 + os1*1; +spl1=spl1*0 + os2*1; diff --git a/Effects/delay/time_adjustment b/Effects/delay/time_adjustment new file mode 100644 index 0000000..410c44a --- /dev/null +++ b/Effects/delay/time_adjustment @@ -0,0 +1,44 @@ +desc:Time Adjustment Delay +desc:Time Adjustment Delay or Negative Delay +//tags: delay time PDC +//author: Cockos + +slider1:0<-1000,1000,1>Delay Amount (ms) +slider2:0<-120,12,1>Wet Mix (dB) +slider3:-120<-120,12,1>Dry Mix (dB) +slider4:0<-40000,40000,1>Additional Delay Amount (spls) + +in_pin:left input +in_pin:right input +out_pin:left output +out_pin:right output + +@init +bpos=0; + +@slider +wet=2^(slider2/6); +dry=2^(slider3/6); +delaylen = (slider1*srate*0.001 + slider4)|0; +delaylen<0?( + pdc_delay=-delaylen; + pdc_top_ch=2; + pdc_bot_ch=0; + delaylen=0; +):( +delaylen+=pdc_delay; +//pdc_delay=0; +); +bufsize=srate*4.0; // extra in case the user wants to go over + +@sample +bpos[0]=spl0; +bpos[1]=spl1; + +rdpos=bpos-delaylen*2; +rdpos<0 ? rdpos+=bufsize*2; +spl0=spl0*dry+rdpos[0]*wet; +spl1=spl1*dry+rdpos[1]*wet; + +bpos+=2; +bpos>=bufsize*2 ? bpos=0; diff --git a/Effects/dynamics/Ultraschall_Dynamics b/Effects/dynamics/Ultraschall_Dynamics new file mode 100644 index 0000000..74ed98b --- /dev/null +++ b/Effects/dynamics/Ultraschall_Dynamics @@ -0,0 +1,580 @@ +desc:Ultraschall Dynamics (Ultraschall.fm) +//tags: graphical processing compressor expander gate +// Copyright (C) 2016 Cockos Inc +// License: LGPL - http://www.gnu.org/licenses/lgpl.html + +// Dynamics Code derived from Cockos General Dynamcis +// Limiter Code from LOSERs "MGA JS Limiter" +// modiefied by fernsehmuell (ultraschall.fm) + +slider1:slider_detect=0<0,1,1{main,aux (use with caution! can result in loud signals!),feedback (caution too!)}>-Detector Input +slider2:0<-40,40,1>-Detector Gain (dB) +slider3:slider_rms=188<0,1000,1>-Detector RMS size (ms) +slider4:slider_pdc=100<0,1000,1>-Input lookahead (ms) +slider5:slider_attack=5<0,200,0.1>-Input Attack (ms) +slider6:slider_release=250<0,1000,1>-Input Release (ms) +slider10:slider_attack_out=0<0,200,0.1>-Gain Attack (ms) +slider11:slider_release_out=0<0,200,0.1>-Gain Release (ms) +slider12:0<-150,24,1>-Wet Mix (dB) +slider13:-150<-150,24,1>-Dry Mix (dB) +slider14:slider_target_LUFS=-16<-12,-25,0.1>Target (LUFS) +slider15:slider_noisefloor=-60<-100,-20,0.1>Noisefloor (dB) +slider16:slider_noisegate=30<88,16,0.1>Noisegate (dB) +slider17:slider_b=0.266<0,1,0.001>-Kurve (b) +slider18:slider_c=-39<-200,200,1>-Kurve (c) +slider19:slider_d=48<0,200,1>-Kurve (d) +slider20:slider_u=9<-50,50,1>-Kurve (u) + +in_pin:main L +in_pin:main R +in_pin:aux L +in_pin:aux R +out_pin:main L +out_pin:main R + +@init +e=2.718281828459; +gfx_clear=-1; +gfx_ext_retina = 1; +tab=0; // gain amount in dB, evenly divided over db_bottom..db_top +tab.size == 0 ? ( + // first-time initialization + tab.size=250; + db_bottom = -108; + db_top = 0; + view.zoom=1; + view.pan_x=0; + view.pan_y=0; + + //LIMITER Code: + HOLDTIME = srate/128; + r1Timer = 0; + r2Timer = HOLDTIME/2; + gr_meter=1; + gr_meter_decay = exp(1/(1*srate)); +); + +db_i_range = 1 / (db_top-db_bottom); +at.env=0; +at.gainenv=1; +at.lspl0=at.lspl1=0; + +function amp_to_x(v) ( + v > 0.0000000001 ? ( + max(0,min(1,(log(v)*(20.0/log(10)) - db_bottom) * db_i_range)); + ); +); + +function gain_db_for_x(x) local(idx,p) ( + idx=floor(x*=(tab.size-1)); + + idx < 0 ? tab[0] : + idx >= tab.size-1 ? tab[tab.size-1] : ( + x-=idx; + p=tab[idx]; + p + (tab[idx+1]-p)*x; + ); +); + +function ms_to_slope(ms) global(srate) ( + ms = (ms*0.001*srate); + ms < 1 ? 0 : exp(-1.0 / ms); +); + +function parmchg.db_begin(idx,sv) + instance(chg_splpos, val, tgtval, dval) + global(samplesblock) +( + chg_splpos=slider_next_chg(idx, tgtval); + chg_splpos > 0 ? ( + val=sv<=-150?0:exp(sv*(0.05*log(10))); + tgtval = tgtval<=-150?0:exp(tgtval*(0.05*log(10))); + ) : ( + tgtval = sv<=-150?0:exp(sv*(0.05*log(10))); + chg_splpos = samplesblock; + ); + dval=(tgtval-val)/chg_splpos; +); + +function parmchg.process(idx, sv) + instance(val, dval, chg_splpos, tgtval) + global(at.cnt) +( + dval=0.0; + chg_splpos=slider_next_chg(idx, tgtval); + chg_splpos > at.cnt ? + ( + tgtval = tgtval<=-150 ? 0 : exp(tgtval*(0.05*log(10))); + dval=(tgtval-val)/(chg_splpos-at.cnt); + ); +); + +function get_bez_y(x2, y1,y2,y3, x) local(a,it,t) +( + t = (a = 1 - (2 * x2)) == 0 ? x : ((sqrt(x2 * x2 + a * x)-x2) / a); + it = 1.0 - t; + (it*it) * y1 + t*(2.0 * it * y2 + t * y3); +); + +function sample_tab(offs, sz) local(sum,cnt,sc,rd1,rd2) ( + rd1=offs+1; rd2=offs-1; + sum=cnt=0; + sc=1; + loop(sz, + rd1>=0 && rd1 < tab.size ? ( cnt+=sc; sum+=tab[rd1]*sc; ); + rd2>=0 && rd2 < tab.size ? ( cnt+=sc; sum+=tab[rd2]*sc; ); + rd2-=1; rd1+=1; sc*=0.5; + ); + cnt ? (tab[offs] * 0.5 + 0.5 * sum / cnt) : tab[offs]; +); + +function rms.init(buf, maxsz) global() ( + this.buf = buf; + this.maxsz=maxsz|0; + this.size=this.suml=this.sumr=this.cnt=this.ptr=0; +); + +function rms.getmax(splsquarel, splsquarer) + instance(buf suml sumr cnt ptr size maxsz) + local(i) + global() +( + while (cnt >= size) ( + i = (ptr= maxsz ? ptr=0; + (suml += splsquarel) < 0 ? suml=0; + (sumr += splsquarer) < 0 ? sumr=0; + sqrt(max(suml,sumr)/size); +); + +function rms.set_size(sz) global() ( + (this.size=max(0,min(sz|0,this.maxsz))) < 1 ? ( + this.cnt=this.suml=this.sumr=0; + ); +); + +function delay.init(buf, sz) global() ( + this.buf = buf; + this.maxsz = sz; + this.size = this.ptr = this.cnt = 0; +); + +function delay.process(s) local(a) instance(maxsz cnt ptr buf size) global() ( + cnt >= size ? ( + a = ptr - size; + a=buf[a<0?a+maxsz:a]; + ) : ( + a=0; + cnt+=1; + ); + buf[ptr]=s; + (ptr+=1)>=maxsz ? ptr=0; + a; +); + +function SCurve(x,b,c,d,u) local(y)( + y=c+(d/(1+e^-(b*(x-u)))); +); + +function amplification_for_tab_to_get_x(tab,x) local(amp) ( + amp=x - (-108 + 36/83 * tab); +); + +rms.init(16384,srate); +delay.init(rms.buf + rms.maxsz*2, srate*2); +pdc_delay=0; + +@slider +redraw=0; +attack_slope = ms_to_slope(slider_attack); +release_slope = ms_to_slope(slider_release); +out_attack_slope = ms_to_slope(slider_attack_out); +out_release_slope = ms_to_slope(slider_release_out); +rms.set_size(slider_rms * srate * 0.001); + +(pdc_delay = min(slider_pdc*srate*0.001, delay.maxsz*.5)|0) > 0 ? ( + pdc_bot_ch=0; + pdc_top_ch=2; + delay.size = pdc_delay*2; +); + +// recalculate LUT if slider changes happen +TargetLUFS = slider_target_LUFS; +Noisefloor = slider_noisefloor; +max_noisegate=(108+Noisefloor)/3.0; +max_noisegate > slider_noisegate ? ( + slider_noisegate=max_noisegate; +); + +Curve_Start=249-floor(Noisefloor/-108*249); +Curve_upper_part_Width=249-Curve_Start; +Curve_upper_part_Width_dB=-Noisefloor; + +// lower curve from left to right: +// set values before noisegate-point to -108dB: +noise_width=min(slider_noisegate, slider_noisefloor+108); +zero_width=floor( (slider_noisefloor-noise_width+108) /108*249) ; + +i=0; +loop( zero_width, + tab[i]=amplification_for_tab_to_get_x(i,-108); + i=i+1; +); + +//draw +a=noise_width; +b=Noisefloor + Startvalue_Curve +108; +m= b/(a/108*249); + +start=i; +i=0; +loop( floor(noise_width/108*249)+1 , + tab[start+i]=amplification_for_tab_to_get_x(start+i, (i*m)-108) ; + i=i+1; +); + +// STD-Scurve for upper part: start at x=-60dB (decrease to -72), endline is at -16 dB +scurve_height=TargetLUFS-Noisefloor; // hier war ich! +slider_c=-amplification_for_tab_to_get_x(0,Scurve(0/249*108,slider_b,0,slider_d,slider_u)) ; + +i=0; +loop(Curve_upper_part_Width, + slider_d=(-Noisefloor-40)*0.9 + 46 + TargetLUFS; + slider_u=(-Noisefloor-40)*0.2 + 5; + tab[Curve_Start+i]=amplification_for_tab_to_get_x(i,Scurve(i/249*108,slider_b,slider_c,slider_d,slider_u)) ; + i=i+1; +); + +Startvalue_Curve=tab[Curve_Start]; + + + +// blur dataset with a simple 3 tab FIR Filter +i=1; +loop(248, + tab[i]= (tab[i-1]*0.25) + (tab[i]*0.5) + (tab[i+1]*0.25); + i=i+1; +); +tab[i]= (tab[i-1]*0.25) + (tab[i]*0.75); + +//Limiter Code: +thresh = 10^(-3/20); +ceiling = 10^(-1.5/20); +volume = ceiling/thresh; + +release = 200/1000; +r = exp(-3/(srate*max(release,0.05))); + +redraw=1; + +//___________________________________________________________________________________________ +@serialize +file_avail()>=0?last_w=0; +file_var(0,tab.size); +file_mem(0,tab,tab.size); +file_var(0,db_top); +file_var(0,db_bottom); +db_i_range = 1 / (db_top-db_bottom); + +@block +at.cnt=0; +ingain.parmchg.db_begin(2,slider2); +wet.parmchg.db_begin(12,slider12); +dry.parmchg.db_begin(13,slider13); + +@sample +at.cnt == ingain.parmchg.chg_splpos ? ingain.parmchg.process(2,slider2); +at.cnt == wet.parmchg.chg_splpos ? wet.parmchg.process(12,slider12); +at.cnt == dry.parmchg.chg_splpos ? dry.parmchg.process(13,slider13); + +rms.size > 1 ? ( + at.mv = slider_detect ? + slider_detect == 2 ? rms.getmax(sqr(at.lspl0*ingain.parmchg.val),sqr(at.lspl1*ingain.parmchg.val)) : + rms.getmax(sqr(spl2*ingain.parmchg.val),sqr(spl3*ingain.parmchg.val)) : + rms.getmax(sqr(spl0*ingain.parmchg.val),sqr(spl1*ingain.parmchg.val)); +) : ( + at.mv = slider_detect ? + slider_detect == 2 ? max(abs(at.lspl0*ingain.parmchg.val),abs(at.lspl1*ingain.parmchg.val)) : + max(abs(spl2*ingain.parmchg.val),abs(spl3*ingain.parmchg.val)) : + max(abs(spl0*ingain.parmchg.val),abs(spl1*ingain.parmchg.val)); +); +at.env = at.mv + (at.mv > at.env ? attack_slope : release_slope)*(at.env-at.mv); +at.mv = exp(gain_db_for_x(amp_to_x(at.env))*(log(10)/20)); +at.gainenv = at.mv + (at.mv > at.gainenv ? out_attack_slope : out_release_slope)*(at.gainenv-at.mv); +at.mix = at.gainenv * wet.parmchg.val + dry.parmchg.val; + +pdc_delay > 0 ? ( + at.lspl0 = spl0 = delay.process(spl0) * at.mix; + at.lspl1 = spl1 = delay.process(spl1) * at.mix; +) : ( + at.lspl0 = (spl0 *= at.mix); + at.lspl1 = (spl1 *= at.mix); +); + +at.cnt+=1; +ingain.parmchg.val += ingain.parmchg.dval; +wet.parmchg.val += wet.parmchg.dval; +dry.parmchg.val += dry.parmchg.dval; + + +//Limiter Code: +maxSpls=max(abs(spl0),abs(spl1)); +(r1Timer+=1) > HOLDTIME ? (r1Timer = 0; max1Block = 0; ); +max1Block = max(max1Block,maxSpls); +(r2Timer+=1) > HOLDTIME ? (r2Timer = 0; max2Block = 0; ); +max2Block = max(max2Block,maxSpls); +envT = max(max1Block,max2Block); +env = env < envT ? envT : envT + r*(env-envT); +(env > thresh) ? gain = (g_meter=(thresh / env))*volume : (g_meter=1; gain=volume;); +spl0*=gain; +spl1*=gain; +g_meter < gr_meter ? gr_meter=g_meter : ( gr_meter*=gr_meter_decay; gr_meter>1?gr_meter=1; ); + + + + +@gfx 400 400 +gfx_ext_retina>1 ? gfx_setfont(1,"Arial",16*gfx_ext_retina,'b') : gfx_setfont(0); + +function view.zoom(xpos,ypos, amt) local(newsz) instance(zoom pan_x pan_y) +( + xpos=min(max(xpos,0),1); + ypos=min(max(ypos,0),1); + newsz = exp(amt); + zoom*newsz < 0.8 ? newsz = 0.8/zoom : zoom*newsz > 32.0 ? newsz=32.0/zoom; + zoom *= newsz; + + newsz=1/newsz; + pan_x = min(1,max(-1,(pan_x-xpos)*newsz + xpos)); + pan_y = min(1,max(-1,(pan_y-ypos)*newsz + ypos)); +); + +sz=min(gfx_w-60,gfx_h-gfx_texth-8)|0; +left = ((gfx_w - 60-sz)*0.5)|0; +top = ((gfx_h-gfx_texth-8-sz)*0.5)|0; + +sz = (sz*view.zoom)|0; +left-= (view.pan_x*sz)|0; +top -= (view.pan_y*sz)|0; + +right=left + sz; +bottom = top + sz; + +mouse_wheel ? ( + view.zoom((mouse_x-left)/sz,(mouse_y-top)/sz,mouse_wheel*0.002); + mouse_wheel=0; +); + + +env_x = left + max(0,(amp_to_x(at.env)*sz)|0); +gaindb = at.gainenv > 0.00000001 ? log(at.gainenv)*(20/log(10)) : -160; +gaindby = env_x < 0 ? 0 : ((gaindb*sz*db_i_range)|0); + +sz != last_sz || last_env_x != max(env_x,-1) || last_gaindby != gaindby || +gfx_w != last_w || gfx_h != last_h || (mouse_cap&3) || last_mouse_cap || redraw==1 ? ( + redraw==1 ? redraw=0; + last_sz = sz; + last_gaindby = gaindby; + last_env_x = max(env_x,-1); + last_w=gfx_w; + last_h=gfx_h; + gfx_set(0.125); + gfx_rect(0,0,gfx_w,gfx_h); + + gfx_set(0.5); + gfx_line(left,bottom,right,bottom); + gfx_line(right,bottom+gfx_texth+2,right,top); + gfx_line(left,bottom+1,left,bottom); + + gfx_a=0.25; + + i=0; + dbsc=3; + while (sz<24*(ndiv=((db_top-db_bottom)/dbsc)|0) && ndiv>1) ( + dbsc = (dbsc==12?18:dbsc*2); // the == 12?18: is a bit 108-dB-range specific + ); + gridsz = sz/ndiv; + dbsc = (db_bottom-db_top)/ndiv; + lx = -1000; + + loop(ndiv, + j = i*gridsz; + gfx_x = left + j; + top+j < gfx_h-gfx_texth-4 ? gfx_line(left,top+j,right,top+j); + gfx_x < gfx_w-50 ? gfx_line(gfx_x,top,gfx_x,bottom); + + gfx_x > lx+60*gfx_ext_retina && gfx_x < right-90*gfx_ext_retina ? ( + lx = gfx_x; + gfx_y = min(bottom + 2,gfx_h-gfx_texth-2); + gfx_line(gfx_x,min(bottom,gfx_y),gfx_x,bottom+gfx_texth+2); + gfx_x+=2; + gfx_printf("%+ddB",floor(db_bottom - i*dbsc + 0.5)); + ); + + i += 1; + gfx_y=top+i*gridsz-gfx_texth*0.5+1; + right < gfx_w - 60 ? ( + gfx_x=right+2; + ) : ( + gfx_x=gfx_w-60; + gfx_y -= gfx_texth+2; + ); + gfx_y < gfx_h-gfx_texth*2-4 ? gfx_printf("%+ddB",floor(db_top + i*dbsc + 0.5)); + ); + + + sprintf(#topstr,"%+ddB",db_top); + gfx_measurestr(#topstr,gfx_x,0); + gfx_x=right -4 - gfx_x; + gfx_y = min(bottom + 2,gfx_h-gfx_texth-2); + gfx_drawstr(#topstr); + + gfx_line(left,bottom,right,top); + gfx_a=1; + gfx_x=gfx_y=2; + + + (mouse_cap&3) ? ( + ui.capmode == 4 ? ( + (mouse_cap & 8) ? ( + gfx_drawstr("zoom"); + last_mouse_y != mouse_y ? view.zoom(click_pt_sc_x,click_pt_sc_y,(last_mouse_y-mouse_y)*0.005); + ) : ( + gfx_drawstr("pan [shift to zoom]"); + view.pan_x = min(1,max(-1,view.pan_x - (mouse_x-last_mouse_x)/sz)); + view.pan_y = min(1,max(-1,view.pan_y - (mouse_y-last_mouse_y)/sz)); + ); + ) + + : (mouse_cap&2) ? ( + // right mouse down during other edits still pans + view.pan_x = min(1,max(-1,view.pan_x - (mouse_x-last_mouse_x)/sz)); + view.pan_y = min(1,max(-1,view.pan_y - (mouse_y-last_mouse_y)/sz)); + ) : ( + ui.last_a >= 0 && ui.a >= 0 ? ( + ui.capmode == 0 ? memcpy(tab,tab+tab.size,tab.size); + ui.wpos = min(ui.a,ui.last_a); + ui.amt = ui.last_a - ui.a; + ui.midpt = (ui.last_a-ui.curve_a)/ui.amt; + ui.amt > 0 ? ( + ui.dwpos = -1; + ui.wpos += ui.amt; + ) : ( + ui.amt = -ui.amt; + ui.dwpos = 1; + ); + ui.amt > 0 ? ( + i=0; + di=1/ui.amt; + loop(ui.amt+1, + tab[ui.wpos]= + ui.capmode == 3 ? 0 : + ui.capmode == 2 ? sample_tab(ui.wpos,8) : + ( + (ui.want_curve && ui.wpos != ui.a && ui.wpos != ui.last_a ? + get_bez_y(ui.midpt, ui.last_v, ui.curve_v, ui.v, i) : + (ui.last_v + (ui.v-ui.last_v)*i) + )-((ui.wpos/(tab.size-1)*(db_top-db_bottom)) + db_bottom) + ); + i+=di; + ui.wpos+=ui.dwpos; + ); + ); + ); + + ui.capmode!=0 || ui.last_a < 0 ? ( + ui.last_a=ui.a; + ui.last_v=ui.v; + ); + ); + ) + + : ( + ui.last_a >= 0 ? ( + ui.last_a = -1; + sliderchange(-1); + ); + ui.a>=0 ? ui.a=-1; + ); + + last_mouse_cap=mouse_cap; + last_mouse_y=mouse_y; + last_mouse_x=mouse_x; + + + // draw UI here: + i=max(0,-left); + isz = 1/sz; + Target_Line_Start=left; + + loop(sz-i, + gfx_x=i + left; // X-Coordinate starts with left+0 + dbo = (((db_top-db_bottom) * i + gain_db_for_x(i*isz)*(sz)) * db_i_range)|0; // get db-Output Value from LUT + (abs(dbo - ( (slider_target_LUFS+108)/108 * sz) ) <1.5 ) && Target_Line_Start==left ? Target_Line_Start=i+left; // find Point for LUFS Line on curve + gfx_r=1; gfx_g=1; gfx_b=0; // define Color yellow + + // if x= loudness of the live signal draw line and text etc. + gfx_x==env_x && env_x>left ? ( + gfx_a=0.5; + //gfx_rect(gfx_x,bottom-dbo,1,dbo); // yellow line (actual live level) + + // draw red or green line to show amplification and render text "+x dB" + gaindb < 0 ? ( + gfx_r=1; gfx_g=gfx_b=.3; gfx_a=1; + gfx_rect(gfx_x-2,bottom-i,5,-gaindby); + ) : ( + gfx_g=1; gfx_r=gfx_b=.3; gfx_a=1; + gfx_rect(gfx_x-2,bottom-i-gaindby,5,gaindby); + ); + gfx_x+=4; + gfx_y=bottom-i-gfx_texth*.5; + gaindb > -150 ? gfx_printf("%+.1fdB", gaindb) : gfx_printf("-inf dB"); + ) : + + ( // draw normal Curve value + gfx_r=72/255; gfx_g=141/255; gfx_b=233/255; //blau + gfx_a = gfx_x < env_x ? 1.00 : 0.33; // set alpha channel to mark parts left and right from live value + gfx_rect(gfx_x,bottom - dbo,1,dbo); // draw rect to mark the value and draw the curve + ); + i+=1; + ); + + + // draw Noisefloor Line and Circle + Noisefloor_Level = (slider_noisefloor+108)/108 * sz; + dbo = (((db_top-db_bottom) * Noisefloor_Level + gain_db_for_x(Noisefloor_Level*isz)*(sz)) * db_i_range)|0; + gfx_x=left+Noisefloor_Level; + gfx_a=0.5; + gfx_r=1.0;gfx_b=gfx_g=0;; + //gfx_rect(gfx_x-1, bottom-dbo,3,dbo); + gfx_r=1.0;gfx_b=0;gfx_g=141/255;gfx_a=0.75; + gfx_circle(gfx_x, bottom-dbo,10,1,1); + Noisefloor_x=gfx_x; + Noisefloor_y=bottom-dbo; + + //draw Noisgate Line and Circle + Noisegate_Level = (slider_noisefloor+108-slider_noisegate)/108 * sz; + dbo = (((db_top-db_bottom) * Noisegate_Level + gain_db_for_x(Noisegate_Level*isz)*(sz)) * db_i_range)|0; + gfx_x=left+Noisegate_Level; + gfx_r=1.0;gfx_b=gfx_g=0; + gfx_xDetector Input +slider2:0<-40,40,1>Detector Gain (dB) +slider3:slider_rms=0<0,1000,1>Detector RMS size (ms) +slider4:slider_pdc=0<0,1000,1>Input lookahead (ms) +slider5:slider_attack=5<0,200,0.1>Input Attack (ms) +slider6:slider_release=250<0,1000,1>Input Release (ms) +slider10:slider_attack_out=0<0,200,0.1>Gain Attack (ms) +slider11:slider_release_out=0<0,200,0.1>Gain Release (ms) +slider12:0<-150,24,1>Wet Mix (dB) +slider13:-150<-150,24,1>Dry Mix (dB) + +in_pin:main L +in_pin:main R +in_pin:aux L +in_pin:aux R +out_pin:main L +out_pin:main R + +@init +gfx_clear=-1; +gfx_ext_retina = 1; +tab=0; // gain amount in dB, evenly divided over db_bottom..db_top +tab.size == 0 ? ( + // first-time initialization + tab.size=250; + db_bottom = -108; + db_top = 0; + view.zoom=1; + view.pan_x=0; + view.pan_y=0; + strcmp(sprintf(#, "%.0f", 0.5), "1") ? ( // thx Tale + #ctrlkey = "cmd"; + #altkey = "opt"; + ) : ( + #ctrlkey = "ctrl"; + #altkey = "alt"; + ); +); + +db_i_range = 1 / (db_top-db_bottom); +at.env=0; +at.gainenv=1; +at.lspl0=at.lspl1=0; + +function amp_to_x(v) ( + v > 0.0000000001 ? ( + max(0,min(1,(log(v)*(20.0/log(10)) - db_bottom) * db_i_range)); + ); +); + +function gain_db_for_x(x) local(idx,p) ( + idx=floor(x*=(tab.size-1)); + + idx < 0 ? tab[0] : + idx >= tab.size-1 ? tab[tab.size-1] : ( + x-=idx; + p=tab[idx]; + p + (tab[idx+1]-p)*x; + ); +); + +function ms_to_slope(ms) global(srate) ( + ms = (ms*0.001*srate); + ms < 1 ? 0 : exp(-1.0 / ms); +); + +function parmchg.db_begin(idx,sv) + instance(chg_splpos, val, tgtval, dval) + global(samplesblock) +( + chg_splpos=slider_next_chg(idx, tgtval); + chg_splpos > 0 ? ( + val=sv<=-150?0:exp(sv*(0.05*log(10))); + tgtval = tgtval<=-150?0:exp(tgtval*(0.05*log(10))); + ) : ( + tgtval = sv<=-150?0:exp(sv*(0.05*log(10))); + chg_splpos = samplesblock; + ); + dval=(tgtval-val)/chg_splpos; +); + +function parmchg.process(idx, sv) + instance(val, dval, chg_splpos, tgtval) + global(at.cnt) +( + dval=0.0; + chg_splpos=slider_next_chg(idx, tgtval); + chg_splpos > at.cnt ? + ( + tgtval = tgtval<=-150 ? 0 : exp(tgtval*(0.05*log(10))); + dval=(tgtval-val)/(chg_splpos-at.cnt); + ); +); + +function get_bez_y(x2, y1,y2,y3, x) local(a,it,t) +( + t = (a = 1 - (2 * x2)) == 0 ? x : ((sqrt(x2 * x2 + a * x)-x2) / a); + it = 1.0 - t; + (it*it) * y1 + t*(2.0 * it * y2 + t * y3); +); + +function sample_tab(offs, sz) local(sum,cnt,sc,rd1,rd2) ( + rd1=offs+1; rd2=offs-1; + sum=cnt=0; + sc=1; + loop(sz, + rd1>=0 && rd1 < tab.size ? ( cnt+=sc; sum+=tab[rd1]*sc; ); + rd2>=0 && rd2 < tab.size ? ( cnt+=sc; sum+=tab[rd2]*sc; ); + rd2-=1; rd1+=1; sc*=0.5; + ); + cnt ? (tab[offs] * 0.5 + 0.5 * sum / cnt) : tab[offs]; +); + +function rms.init(buf, maxsz) global() ( + this.buf = buf; + this.maxsz=maxsz|0; + this.size=this.suml=this.sumr=this.cnt=this.ptr=0; +); + +function rms.getmax(splsquarel, splsquarer) + instance(buf suml sumr cnt ptr size maxsz) + local(i) + global() +( + while (cnt >= size) ( + i = (ptr= maxsz ? ptr=0; + (suml += splsquarel) < 0 ? suml=0; + (sumr += splsquarer) < 0 ? sumr=0; + sqrt(max(suml,sumr)/size); +); + +function rms.set_size(sz) global() ( + (this.size=max(0,min(sz|0,this.maxsz))) < 1 ? ( + this.cnt=this.suml=this.sumr=0; + ); +); + +function delay.init(buf, sz) global() ( + this.buf = buf; + this.maxsz = sz; + this.size = this.ptr = this.cnt = 0; +); + +function delay.process(s) local(a) instance(maxsz cnt ptr buf size) global() ( + cnt >= size ? ( + a = ptr - size; + a=buf[a<0?a+maxsz:a]; + ) : ( + a=0; + cnt+=1; + ); + buf[ptr]=s; + (ptr+=1)>=maxsz ? ptr=0; + a; +); + +rms.init(16384,srate); +delay.init(rms.buf + rms.maxsz*2, srate*2); +pdc_delay=0; + +@slider +attack_slope = ms_to_slope(slider_attack); +release_slope = ms_to_slope(slider_release); +out_attack_slope = ms_to_slope(slider_attack_out); +out_release_slope = ms_to_slope(slider_release_out); +rms.set_size(slider_rms * srate * 0.001); + +(pdc_delay = min(slider_pdc*srate*0.001, delay.maxsz*.5)|0) > 0 ? ( + pdc_bot_ch=0; + pdc_top_ch=2; + delay.size = pdc_delay*2; +); + +@serialize +file_avail()>=0?last_w=0; + +file_var(0,tab.size); +file_mem(0,tab,tab.size); +file_var(0,db_top); +file_var(0,db_bottom); +db_i_range = 1 / (db_top-db_bottom); + +// could make this config eventually +//file_var(0,view.zoom); +//file_var(0,view.pan_x); +//file_var(0,view.pan_y); + +@block + +at.cnt=0; +ingain.parmchg.db_begin(2,slider2); +wet.parmchg.db_begin(12,slider12); +dry.parmchg.db_begin(13,slider13); + +@sample +at.cnt == ingain.parmchg.chg_splpos ? ingain.parmchg.process(2,slider2); +at.cnt == wet.parmchg.chg_splpos ? wet.parmchg.process(12,slider12); +at.cnt == dry.parmchg.chg_splpos ? dry.parmchg.process(13,slider13); + +rms.size > 1 ? ( + at.mv = slider_detect ? + slider_detect == 2 ? rms.getmax(sqr(at.lspl0*ingain.parmchg.val),sqr(at.lspl1*ingain.parmchg.val)) : + rms.getmax(sqr(spl2*ingain.parmchg.val),sqr(spl3*ingain.parmchg.val)) : + rms.getmax(sqr(spl0*ingain.parmchg.val),sqr(spl1*ingain.parmchg.val)); +) : ( + at.mv = slider_detect ? + slider_detect == 2 ? max(abs(at.lspl0*ingain.parmchg.val),abs(at.lspl1*ingain.parmchg.val)) : + max(abs(spl2*ingain.parmchg.val),abs(spl3*ingain.parmchg.val)) : + max(abs(spl0*ingain.parmchg.val),abs(spl1*ingain.parmchg.val)); +); +at.env = at.mv + (at.mv > at.env ? attack_slope : release_slope)*(at.env-at.mv); +at.mv = exp(gain_db_for_x(amp_to_x(at.env))*(log(10)/20)); +at.gainenv = at.mv + (at.mv > at.gainenv ? out_attack_slope : out_release_slope)*(at.gainenv-at.mv); +at.mix = at.gainenv * wet.parmchg.val + dry.parmchg.val; + +pdc_delay > 0 ? ( + at.lspl0 = spl0 = delay.process(spl0) * at.mix; + at.lspl1 = spl1 = delay.process(spl1) * at.mix; +) : ( + at.lspl0 = (spl0 *= at.mix); + at.lspl1 = (spl1 *= at.mix); +); + +at.cnt+=1; +ingain.parmchg.val += ingain.parmchg.dval; +wet.parmchg.val += wet.parmchg.dval; +dry.parmchg.val += dry.parmchg.dval; + +@gfx 400 400 +gfx_ext_retina>1 ? gfx_setfont(1,"Arial",16*gfx_ext_retina,'b') : gfx_setfont(0); + +function view.zoom(xpos,ypos, amt) local(newsz) instance(zoom pan_x pan_y) +( + xpos=min(max(xpos,0),1); + ypos=min(max(ypos,0),1); + newsz = exp(amt); + zoom*newsz < 0.8 ? newsz = 0.8/zoom : zoom*newsz > 32.0 ? newsz=32.0/zoom; + zoom *= newsz; + + newsz=1/newsz; + pan_x = min(1,max(-1,(pan_x-xpos)*newsz + xpos)); + pan_y = min(1,max(-1,(pan_y-ypos)*newsz + ypos)); +); + +sz=min(gfx_w-60,gfx_h-gfx_texth-8)|0; +left = ((gfx_w - 60-sz)*0.5)|0; +top = ((gfx_h-gfx_texth-8-sz)*0.5)|0; + +sz = (sz*view.zoom)|0; +left-= (view.pan_x*sz)|0; +top -= (view.pan_y*sz)|0; + +right=left + sz; +bottom = top + sz; + +mouse_wheel ? ( + view.zoom((mouse_x-left)/sz,(mouse_y-top)/sz,mouse_wheel*0.002); + mouse_wheel=0; +); + + +env_x = left + max(0,(amp_to_x(at.env)*sz)|0); +gaindb = at.gainenv > 0.00000001 ? log(at.gainenv)*(20/log(10)) : -160; +gaindby = env_x < 0 ? 0 : ((gaindb*sz*db_i_range)|0); + +sz != last_sz || last_env_x != max(env_x,-1) || last_gaindby != gaindby || +gfx_w != last_w || gfx_h != last_h || (mouse_cap&3) || last_mouse_cap ? ( + last_sz = sz; + last_gaindby = gaindby; + last_env_x = max(env_x,-1); + last_w=gfx_w; + last_h=gfx_h; + gfx_set(0.125); + gfx_rect(0,0,gfx_w,gfx_h); + + gfx_set(0.5); + gfx_line(left,bottom,right,bottom); + gfx_line(right,bottom+gfx_texth+2,right,top); + gfx_line(left,bottom+1,left,bottom); + + gfx_a=0.25; + + i=0; + dbsc=3; + while (sz<24*(ndiv=((db_top-db_bottom)/dbsc)|0) && ndiv>1) ( + dbsc = (dbsc==12?18:dbsc*2); // the == 12?18: is a bit 108-dB-range specific + ); + gridsz = sz/ndiv; + dbsc = (db_bottom-db_top)/ndiv; + lx = -1000; + loop(ndiv, + j = i*gridsz; + gfx_x = left + j; + top+j < gfx_h-gfx_texth-4 ? gfx_line(left,top+j,right,top+j); + gfx_x < gfx_w-50 ? gfx_line(gfx_x,top,gfx_x,bottom); + + gfx_x > lx+60*gfx_ext_retina && gfx_x < right-90*gfx_ext_retina ? ( + lx = gfx_x; + gfx_y = min(bottom + 2,gfx_h-gfx_texth-2); + gfx_line(gfx_x,min(bottom,gfx_y),gfx_x,bottom+gfx_texth+2); + gfx_x+=2; + gfx_printf("%+ddB",floor(db_bottom - i*dbsc + 0.5)); + ); + + i += 1; + gfx_y=top+i*gridsz-gfx_texth*0.5+1; + right < gfx_w - 60 ? ( + gfx_x=right+2; + ) : ( + gfx_x=gfx_w-60; + gfx_y -= gfx_texth+2; + ); + gfx_y < gfx_h-gfx_texth*2-4 ? gfx_printf("%+ddB",floor(db_top + i*dbsc + 0.5)); + ); + + sprintf(#topstr,"%+ddB",db_top); + gfx_measurestr(#topstr,gfx_x,0); + gfx_x=right -4 - gfx_x; + gfx_y = min(bottom + 2,gfx_h-gfx_texth-2); + gfx_drawstr(#topstr); + + gfx_line(left,bottom,right,top); + gfx_a=1; + gfx_x=gfx_y=2; + + (mouse_cap&3) ? ( + 0==(last_mouse_cap&3) ? ( + // ui.capmode: 0=line, 1=pencil, 2=smooth, 3=erase, 4=pan/zoom + ui.capmode=(mouse_cap&2) ? 4 : (mouse_cap&16) ? 3 : (mouse_cap&4)? 1 : (mouse_cap&8) ? 2 : 0; + ui.capmode == 0 ? memcpy(tab+tab.size,tab,tab.size); + last_mouse_y = mouse_y; + last_mouse_x = mouse_x; + click_pt_sc_x = (mouse_x - left)/sz; + click_pt_sc_y = (mouse_y - top)/sz; + ) : ( + (mouse_cap&4) ? ( + ui.capmode == 0 ? ( + memcpy(tab+tab.size,tab,tab.size); + ui.last_a=ui.a; + ui.last_v=ui.v; + ); + ); + ); + ui.newv = db_bottom + (bottom-mouse_y) * (db_top-db_bottom) / sz; + ui.newa = max(0,min(tab.size-1,((mouse_x - left)*(tab.size-1)/(sz-1) + 0.5)|0)); + ui.a < 0 || ui.last_a < 0 || ui.capmode != 0 || 0==(mouse_cap&16) ? ( + ui.a=ui.newa; + ui.v=ui.newv; + ui.want_curve=0; + ) : ( + ui.curve_v = ui.newv; + ui.curve_a = ui.newa; + ui.want_curve=1; + ); + + ui.capmode == 4 ? ( + (mouse_cap & 8) ? ( + gfx_drawstr("zoom"); + last_mouse_y != mouse_y ? view.zoom(click_pt_sc_x,click_pt_sc_y,(last_mouse_y-mouse_y)*0.005); + ) : ( + gfx_drawstr("pan [shift to zoom]"); + view.pan_x = min(1,max(-1,view.pan_x - (mouse_x-last_mouse_x)/sz)); + view.pan_y = min(1,max(-1,view.pan_y - (mouse_y-last_mouse_y)/sz)); + ); + ) : (mouse_cap&2) ? ( + // right mouse down during other edits still pans + view.pan_x = min(1,max(-1,view.pan_x - (mouse_x-last_mouse_x)/sz)); + view.pan_y = min(1,max(-1,view.pan_y - (mouse_y-last_mouse_y)/sz)); + ) : ( + ui.last_a >= 0 && ui.a >= 0 ? ( + ui.capmode == 0 ? memcpy(tab,tab+tab.size,tab.size); + ui.wpos = min(ui.a,ui.last_a); + ui.amt = ui.last_a - ui.a; + ui.midpt = (ui.last_a-ui.curve_a)/ui.amt; + ui.amt > 0 ? ( + ui.dwpos = -1; + ui.wpos += ui.amt; + ) : ( + ui.amt = -ui.amt; + ui.dwpos = 1; + ); + ui.amt > 0 ? ( + i=0; + di=1/ui.amt; + loop(ui.amt+1, + tab[ui.wpos]= + ui.capmode == 3 ? 0 : + ui.capmode == 2 ? sample_tab(ui.wpos,8) : + ( + (ui.want_curve && ui.wpos != ui.a && ui.wpos != ui.last_a ? + get_bez_y(ui.midpt, ui.last_v, ui.curve_v, ui.v, i) : + (ui.last_v + (ui.v-ui.last_v)*i) + )-((ui.wpos/(tab.size-1)*(db_top-db_bottom)) + db_bottom) + ); + i+=di; + ui.wpos+=ui.dwpos; + ); + ); + ); + + ui.capmode!=0 || ui.last_a < 0 ? ( + ui.last_a=ui.a; + ui.last_v=ui.v; + ); + ui.capmode == 3 ? gfx_drawstr("erase") : + ui.capmode == 2 ? gfx_drawstr("smooth") : + ui.capmode == 1 ? gfx_drawstr("pencil") : + ui.capmode == 0 ? ( + ui.want_curve ? gfx_drawstr("adjust curve") : + gfx_printf("line [%s to adjust curve, %s to commit]",#altkey,#ctrlkey); + ); + ); + ) : ( + divstr=gfx_w>=470 ? " " : "\n"; + gfx_printf("pencil: %s%s" + "smooth: shift%s" + "erase: %s%s" + "pan/zoom: right", + #ctrlkey, divstr,divstr,#altkey,divstr); + ui.last_a >= 0 ? ( + ui.last_a = -1; + sliderchange(-1); + ); + ui.a>=0 ? ui.a=-1; + ); + last_mouse_cap=mouse_cap; + last_mouse_y=mouse_y; + last_mouse_x=mouse_x; + + i=max(0,-left); + isz = 1/sz; + loop(sz-i, + gfx_x=i + left; + dbo = (((db_top-db_bottom) * i + gain_db_for_x(i*isz)*(sz)) * db_i_range)|0; + gfx_r=gfx_g=1; gfx_b=0; + gfx_x==env_x && env_x>left ? ( + gfx_a=0.5; + gfx_rect(gfx_x,bottom-dbo,1,dbo); + gaindb < 0 ? ( + gfx_r=1; gfx_g=gfx_b=.3; + gfx_rect(gfx_x-2,bottom-i,5,-gaindby); + ) : ( + gfx_g=1; gfx_r=gfx_b=.3; + gfx_rect(gfx_x-2,bottom-i-gaindby,5,gaindby); + ); + gfx_x+=4; + gfx_y=bottom-i-gfx_texth*.5; + gaindb > -150 ? gfx_printf("%+.1fdB", gaindb) : gfx_printf("-inf dB"); + ) : ( + gfx_a = gfx_x < env_x ? .25 : 0.125; + gfx_rect(gfx_x,bottom - dbo,1,dbo); + ); + i+=1; + ); +); + diff --git a/Effects/filters/FIR_8 b/Effects/filters/FIR_8 new file mode 100644 index 0000000..0dc0993 --- /dev/null +++ b/Effects/filters/FIR_8 @@ -0,0 +1,24 @@ +// This effect Copyright (C) 2004 and later Cockos Incorporated +// License: GPL - http://www.gnu.org/licenses/gpl.html + +desc: 8 tap FIR filter + +slider1:1<-1,1>coeff 1 +slider2:0<-1,1>coeff 2 +slider3:0<-1,1>coeff 3 +slider4:0<-1,1>coeff 4 +slider5:0<-1,1>coeff 5 +slider6:0<-1,1>coeff 6 +slider7:0<-1,1>coeff 7 +slider8:0<-1,1>coeff 8 + +@init +s1=0; s2=0; s3=0; s4=0; s5=0; s6=0; s7=0; s8=0; +r1=0; r2=0; r3=0; r4=0; r5=0; r6=0; r7=0; r8=0; + +@sample +s8=s7; s7=s6; s6=s5; s5=s4; s4=s3; s3=s2; s2=s1; s1=spl0; +r8=r7; r7=r6; r6=r5; r5=r4; r4=r3; r3=r2; r2=r1; r1=spl1; + +spl0 = s1*slider1 + s2*slider2 + s3*slider3 + s4*slider4 + s5*slider5 + s6*slider6 + s7*slider7 + s8*slider8; +spl1 = r1*slider1 + r2*slider2 + r3*slider3 + r4*slider4 + r5*slider5 + r6*slider6 + r7*slider7 + r8*slider8; diff --git a/Effects/filters/autopeakfilter b/Effects/filters/autopeakfilter new file mode 100644 index 0000000..4b1cfd6 --- /dev/null +++ b/Effects/filters/autopeakfilter @@ -0,0 +1,150 @@ +desc: FFT Peak-Following Filter +//tags: FFT PDC filter +//author: Cockos + +slider1:5<0,6,1{64,128,256,512,1024,2048,4096}>FFT Size +slider2:60<0,24000,10>Minimum Center Freq (Hz) +slider3:8000<0,24000,10>Maximum Center Freq (Hz) +slider4:2<0,8,0.01>Filter Width (oct) +slider5:0<-120,24,1>Peak Gain (dB) +slider6:-120<-120,24,1>Non-Peak Gain (dB) +slider7:120<0,1000,1>FiltEr Position Attack Time (ms) +slider8:1.29<0.5,1.5,0.01>High End Slope + +in_pin:left input +in_pin:right input +out_pin:left output +out_pin:right output + +@init +fftsize=-1; +curfilterpos=-1; + +@slider + fftsize != (0|(2^(slider1+6))) ? ( + fftsize=(2^(slider1+6))|0; + bpos=0; + curblock=0; + lastblock=65536; + window=120000; + hist=240000; + invfsize=1/fftsize; + hfftsize=fftsize*0.5; + tmp=0; + tsc=3.14159/hfftsize; + loop(hfftsize, + window[tmp]=0.42-0.50*cos(tmp*tsc)+0.08*cos(2*tmp*tsc); + tmp+=1; + ); + ); + lowband=hfftsize*slider2*2.0/srate; + lowband = min(max(lowband,0),hfftsize)|0; + hiband=hfftsize*slider3*2.0/srate; + hiband = min(max(hiband,0),hfftsize)|0; + lowband > hiband ? ( t=hiband; hiband=lowband; lowband=t; ); + peakgain = 2 ^ (slider5/6) * invfsize; + nonpeakgain = 2 ^ (slider6/6) * invfsize; + attack= slider7<1 ? 0 : exp(-hfftsize/(slider7*0.001*srate)); + minpeakval=pow(2,-90/6.0); + hislope=slider8/hfftsize; + pdc_delay=fftsize; + pdc_bot_ch=0; + pdc_top_ch=2; + +@sample +bpos >= fftsize ? ( + + t=curblock; + curblock=lastblock; + lastblock=t; + + fft(curblock,fftsize); + fft_permute(curblock,fftsize); + peakpos=curfilterpos; + peakval=minpeakval; + i=lowband*2; + gain=0; + loop(max(hiband-lowband,1), + a=curblock[i]; + b=curblock[i+1]; + cv=(a*a+b*b)*gain*gain; + gain+=hislope; + cv > peakval ? ( peakpos=i; peakval=cv; ); + i+=2; + ); + + peakpos *= 0.5; + curfilterpos = (curfilterpos < 0 ? peakpos : curfilterpos*attack + peakpos*(1-attack)); + + curfilterpos >= 0 ? + ( + filtersize_l=curfilterpos*slider4*0.25; + filtersize_r=curfilterpos*slider4*0.5; + ) + : filtersize_l=filtersize_r=0; +// slider8=curfilterpos; sliderchange(slider8); + + ifiltersize_l=1/filtersize_l; + ifiltersize_r=1/filtersize_r; + i=0; + pp=0; + ifilterpos=(curfilterpos+0.5)|0; + loop(hfftsize, + i2=fftsize*2-i-2; + adjust=nonpeakgain; + curfilterpos >= 0 ? ( + filtersize_l<=1 ? ( + pp==ifilterpos ? adjust=peakgain; + ) : ( + dist=pp-curfilterpos; + dist < 0 ? ( + dist=-dist; + dist <= filtersize_l ? ( + sc = dist*ifiltersize_l; + sc*=sc; + adjust = peakgain*(1-sc) + nonpeakgain*sc; + ); + ) : ( + dist <= filtersize_r ? ( + sc = dist*ifiltersize_r; + sc*=sc; + adjust = peakgain*(1-sc) + nonpeakgain*sc; + ); + ); + ); + + ); + + + + + curblock[i]*=adjust; + curblock[i+1]*=adjust; + curblock[i2]*=adjust; + curblock[i2+1]*=adjust; + i+=2; + pp+=1; + ); + fft_ipermute(curblock,fftsize); + ifft(curblock,fftsize); + bpos=0; +); + +// make sample +w=window[bpos*0.5]; +iw=1-w; + +os0=spl0; +os1=spl1; + +spl0=(curblock[bpos]*w + lastblock[fftsize+bpos]*iw); +spl1=(curblock[bpos+1]*w + lastblock[fftsize+bpos+1]*iw); + +lastblock[bpos]=hist[bpos]; +lastblock[bpos+1]=hist[bpos+1]; +lastblock[fftsize+bpos]=os0; +lastblock[fftsize+bpos+1]=os1; + +hist[bpos]=os0; +hist[bpos+1]=os1; +bpos+=2; diff --git a/Effects/filters/bandpass b/Effects/filters/bandpass new file mode 100644 index 0000000..7d35dc4 --- /dev/null +++ b/Effects/filters/bandpass @@ -0,0 +1,36 @@ +// This effect Copyright (C) 2004 and later Cockos Incorporated +// License: GPL - http://www.gnu.org/licenses/gpl.html + +desc: band pass filter + +slider1:800<1,20000,50>freq (Hz) +slider2:0.5<0,1,0.05>width (0=narrow, 1=wide) +slider3:0<-120,12,1>wet mix (dB) +slider4:-18<-120,12,1>dry mix (dB) +slider5:0<0,1,1{normal,notch}>mode + +@slider +dampening=slider2*0.999 + 0.001; +c = ( 1 / tan( $pi*slider1 / srate ) ); +a2 = 1 + c*(c+dampening); +fa1 = 2 * (1 - c*c) / a2; +fa0 = (1 + c*(c-dampening)) / a2; +fk = c*dampening / a2; +//lastdamp != dampening ? (fd1_l=fd2_l=fd1_r=fd2_r=0); + +wetsign=slider5?-1:1; +dry=2 ^ (slider4/6); +wet=2 ^ (slider3/6)*wetsign; +lastdamp=dampening; + +@sample + +d0_l = fk*spl0 - (fa1*fd1_l + fa0*fd2_l); +d0_r = fk*spl1 - (fa1*fd1_r + fa0*fd2_r); +spl0 = wet*(d0_l - fd2_l) + dry*spl0; +spl1 = wet*(d0_r - fd2_r) + dry*spl1; +fd2_l = fd1_l; +fd2_r = fd1_r; +fd1_l = d0_l; +fd1_r = d0_r; + diff --git a/Effects/filters/dc_remove b/Effects/filters/dc_remove new file mode 100644 index 0000000..f62aa48 --- /dev/null +++ b/Effects/filters/dc_remove @@ -0,0 +1,19 @@ +// This effect Copyright (C) 2004 and later Cockos Incorporated +// License: LGPL - http://www.gnu.org/licenses/lgpl.html +// based on the algorithm in Steve Harris's plug-in package: http://plugin.org.uk/ + +desc:DC Filter +//tags: filter repair +//author: Cockos + +in_pin:left input +in_pin:right input +out_pin:left output +out_pin:right output + +@init +itm1=itm2=otm1=otm2=0; + +@sample +otm1=0.999*otm1 + spl0 - itm1; itm1=spl0; spl0=otm1; +otm2=0.999*otm2 + spl1 - itm2; itm2=spl1; spl1=otm2; diff --git a/Effects/filters/fft-filter b/Effects/filters/fft-filter new file mode 100644 index 0000000..635ce6e --- /dev/null +++ b/Effects/filters/fft-filter @@ -0,0 +1,88 @@ +desc: New FFT filter +slider1:10<6,12,1>FFT size (bits) +slider2:0.1<0,1,0.01>low +slider3:0.3<0,1,0.01>high +slider4:0<-120,120>adjust (dB) + +@init +fftsize=-1; + +@slider + fftsize != (0|(2^slider1)) ? ( + fftsize=(2^slider1)|0; + bpos=0; + curblock=0; + lastblock=65536; + window=120000; + hist=240000; + invfsize=1/fftsize; + hfftsize=fftsize*0.5; + tmp=0; + tsc=3.14159/hfftsize; + loop(hfftsize, + window[tmp]=0.42-0.50*cos(tmp*tsc)+0.08*cos(2*tmp*tsc); + tmp+=1; + ); + ); + adjust = 2 ^ (slider4/6) * invfsize; + lowband=hfftsize*slider2; + hiband=hfftsize*slider3; + lowband = min(max(lowband,0),hfftsize); + hiband = min(max(hiband,0),hfftsize); + lowband > hiband ? ( t=hiband; hiband=lowband; lowband=t; ); + lowband *= 2; + hiband *= 2; + pdc_top_ch=2; + pdc_bot_ch=0; + pdc_delay=fftsize; + +@sample + +bpos >= fftsize ? ( + + t=curblock; + curblock=lastblock; + lastblock=t; + + fft(curblock,fftsize); + fft_permute(curblock,fftsize); + i=0; + loop(hfftsize, + i2=fftsize*2-i-2; + i >= lowband && i<= hiband ? + ( + curblock[i]*=adjust; + curblock[i+1]*=adjust; + curblock[i2]*=adjust; + curblock[i2+1]*=adjust; + ) : ( + curblock[i] *= invfsize; + curblock[i+1] *= invfsize; + curblock[i2] *= invfsize; + curblock[i2+1] *= invfsize; + ); + i+=2; + ); + fft_ipermute(curblock,fftsize); + ifft(curblock,fftsize); + bpos=0; +); + +// make sample +w=window[bpos*0.5]; +iw=1-w; + +os0=spl0; +os1=spl1; + +spl0=(curblock[bpos]*w + lastblock[fftsize+bpos]*iw); +spl1=(curblock[bpos+1]*w + lastblock[fftsize+bpos+1]*iw); + +lastblock[bpos]=hist[bpos]; +lastblock[bpos+1]=hist[bpos+1]; +lastblock[fftsize+bpos]=os0; +lastblock[fftsize+bpos+1]=os1; + +hist[bpos]=os0; +hist[bpos+1]=os1; +bpos+=2; diff --git a/Effects/filters/lowpass b/Effects/filters/lowpass new file mode 100644 index 0000000..d4714d9 --- /dev/null +++ b/Effects/filters/lowpass @@ -0,0 +1,30 @@ +// This effect Copyright (C) 2004 and later Cockos Incorporated +// License: GPL - http://www.gnu.org/licenses/gpl.html + +desc: low pass filter + +slider1:800<1,20000>frequency (Hz) +slider2:0.2<0,1>size (0=sharp, 1=dull) + +@slider + damp=0.01+slider2*20; + c = 1/tan($pi*slider1/srate); + fk = 1 / (1 + c*(c+damp)); + fa1 = 2 * (1 - c*c) * fk; + fa0 = (1 + c*(c-damp)) * fk; + //damp!=oldamp ? fd1l=fd2l=fd1r=fd2r=0; + oldamp=damp; + +@sample + +fd0l = (fk*spl0) - (fa1*fd1l) - (fa0*fd2l); +fd0r = (fk*spl1) - (fa1*fd1r) - (fa0*fd2r); + +spl0 = fd0l + fd1l + fd1l + fd2l; +spl1 = fd0r + fd1r + fd1r + fd2r; + +fd2l = fd1l; +fd2r = fd1r; + +fd1l = fd0l; +fd1r = fd0r; diff --git a/Effects/filters/mdct-filter b/Effects/filters/mdct-filter new file mode 100644 index 0000000..b4f7709 --- /dev/null +++ b/Effects/filters/mdct-filter @@ -0,0 +1,58 @@ +// This effect Copyright (C) 2004 and later Cockos Incorporated +// License: LGPL - http://www.gnu.org/licenses/lgpl.html + +desc: MDCT Filter +//tags: filter +//author: Cockos + +slider1:128<32,512,153.6>Bands +slider2:4<0,512,1>Start Band +slider3:8<0,512,1>End Band +slider4:0.0<-120,120,1>Adjust (dB) + +in_pin:input +out_pin:output (mono) +out_pin:output (mono) + +@slider + slider1=2 ^ (0|(0.5+log10(slider1)/log10(2)))|0; + slider1=min(512,max(slider1,32)); + fftsize != slider1*2 ? (fftsize=slider1*2; bufpos=bi1=0; bi2=fftsize*2; halfsize=fftsize*0.5); + slider2=min(slider3,max(slider2,0)); + slider3=max(slider2,min(slider3,slider1)); + adj=2 ^ (slider4/6); + +@sample +// bi2 was the previously transformed buffer, and by the time it +// is bi2 we only touch the second half (the first was replaced when +// it was bi1) + +// bi1 is the most recently transformed buffer, we only touch the first +// half, because the second will be used for the next overlap + + +t=bi1+bufpos; +p0=t[0]; +t[0]=spl0; + +t=bi2+halfsize+bufpos; +p1=t[0]; +t[0]=spl0; + +spl0 = p0 + p1; // our mdct handles windowing, so we just add + +bufpos+=1; + +bufpos >= halfsize ? ( + // swap bi1 and bi2 + t=bi1; bi1=bi2; bi2=t; + // we hit our FFT size here + + mdct(bi1,fftsize); + bufpos=bi1+slider2; + loop(slider3-slider2, bufpos[0]*=adj; bufpos+=1); + imdct(bi1,fftsize); + bufpos=0; +); + +spl1=spl0; diff --git a/Effects/filters/mdct-volsweep b/Effects/filters/mdct-volsweep new file mode 100644 index 0000000..191c50e --- /dev/null +++ b/Effects/filters/mdct-volsweep @@ -0,0 +1,70 @@ +// This effect Copyright (C) 2004 and later Cockos Incorporated +// License: LGPL - http://www.gnu.org/licenses/lgpl.html + +desc: MDCT Sweeping Filter +//tags: filter LFO +//author: Cockos + +slider1:0.00<0,1>Min Frequency (0..1) +slider2:0.05<0,1>Max Frequency (0..1) +slider3:1000<10,30000,20>Sweep Interval (ms) +slider4:-6<-120,120,1>Low Gain (dB) +slider5:12<-120,120,1>High Gain (dB) + +in_pin:input +out_pin:output (mono) +out_pin:output (mono) + +@init + fftsize=1024; + bufpos=0; bi1=0; bi2=fftsize*2; halfsize=fftsize*0.5; + sweeppos=0; + +@slider + sweepsize=(slider1-slider2)/2 * fftsize/2; + sweepcenter=((slider1+slider2))/2 * fftsize/2; + sweepinc = 1000 * $pi * 2 / (slider3*srate); + lowgain=2 ^ (slider4/6); + highgain=2 ^ (slider5/6); + + +@sample + +sweeppos+=sweepinc; + +// bi2 was the previously transformed buffer, and by the time it +// is bi2 we only touch the second half (the first was replaced when +// it was bi1) + +// bi1 is the most recently transformed buffer, we only touch the first +// half, because the second will be used for the next overlap + +t=bi1+bufpos; +p0=t[0]; +t[0]=spl0; + +t=bi2+halfsize+bufpos; +p1=t[0]; +t[0]=spl0; + +spl0 = p0 + p1; // our mdct handles windowing, so we just add + +bufpos+=1; + +bufpos >= halfsize ? +( + // swap bi1 and bi2 + t=bi1; bi1=bi2; bi2=t; + + mdct(bi1,fftsize); + + bufpos=bi1; + len1=(sweepcenter+sweepsize*sin(sweeppos))|0; + loop(len1,bufpos[0]*=lowgain; bufpos+=1;); + loop(halfsize-len1,bufpos[0]*=highgain; bufpos+=1; ); + + imdct(bi1,fftsize); + bufpos=0; +); + +spl1=spl0; diff --git a/Effects/filters/parametric_eq b/Effects/filters/parametric_eq new file mode 100644 index 0000000..52efee8 --- /dev/null +++ b/Effects/filters/parametric_eq @@ -0,0 +1,34 @@ +// Copyright (C) 2004 and on, Cockos Inc. +// License: GPL + +desc:parametric equalizer + +slider1:4000<10,40000,40>band (Hz) +slider2:0<-120,120,1>gain (dB) +slider3:0.7<0.01,50,0.05>width + +@init +c0=c1=c2=0; +ldelay1=ldelay2=rdelay1=rdelay2=0; +li1=li2=ri1=ri2=0; + +@slider + +arc=slider1*$pi/(srate*0.5); +gain=(2 ^ (slider2/6)); +a=(sin(arc)*slider3) * (gain < 1 ? 1 : 0.25); +tmp=1/(1+a); + +c0=tmp*a*(gain-1); +c1=tmp*2*cos(arc); +c2=tmp*(a-1); + +@sample + +tmp=c0*(spl0-ldelay2) + c1*li1 + c2*li2; +ldelay2=ldelay1; ldelay1=spl0; +li2=li1; spl0 += (li1=tmp); + +tmp=c0*(spl1-rdelay2) + c1*ri1 + c2*ri2; +rdelay2=rdelay1; rdelay1=spl1; +ri2=ri1; spl1 += (ri1=tmp); diff --git a/Effects/filters/resonantlowpass b/Effects/filters/resonantlowpass new file mode 100644 index 0000000..1354b80 --- /dev/null +++ b/Effects/filters/resonantlowpass @@ -0,0 +1,30 @@ +// This effect Copyright (C) 2004 and later Cockos Incorporated +// License: LGPL - http://www.gnu.org/licenses/lgpl.html + +desc: Resonant Lowpass Filter +//tags: filter +//author: Cockos + +slider1:1000<20,20000>Frequency (Hz) +slider2:0.8<0,1>Resonance + +in_pin:left input +in_pin:right input +out_pin:left output +out_pin:right output + +@slider + cut_lp = slider1*2 / (srate); + //res_lp!=slider2 ? n3=n4=rn3=rn4=0; + res_lp=slider2; + fb_lp=res_lp+res_lp/(1-cut_lp); + +@sample + +n3=n3+cut_lp*(spl0-n3+fb_lp*(n3-n4)); +n4=n4+cut_lp*(n3-n4); +spl0=n4; + +rn3=rn3+cut_lp*(spl1-rn3+fb_lp*(rn3-rn4)); +rn4=rn4+cut_lp*(rn3-rn4); +spl1=rn4; diff --git a/Effects/filters/spectro_filter_paint b/Effects/filters/spectro_filter_paint new file mode 100644 index 0000000..c98df9e --- /dev/null +++ b/Effects/filters/spectro_filter_paint @@ -0,0 +1,267 @@ +desc:Spectropaint Filter +desc:Spectropaint Filter - Graphical Periodic Spectral Filtering +//tags: analysis spectral generator FFT filter +//author: Cockos + +/* +Copyright (C) 2007 Cockos Incorporated +License: LGPL - http://www.gnu.org/licenses/lgpl.html +*/ + +slider1:20<1,100,1>Period (sec) +slider2:-144<-144,0,1>Background Gain (dB) +slider3:0<-144,64,1>Foreground Gain (dB) +slider4:4<0,11,1{256,512,1024,2048,4096,8192,16384,32768}>FFT Size +slider5:0<-1,100,0.1>Project Sync Offset (-1 to disable) +slider6:1<0,1,1{Sine,Fill}>Mode + +out_pin:left output +out_pin:right output +in_pin:left input +in_pin:right input + +@init + +brush_size=1; + +g_lx=g_ly=-100; + +img_w = 160; +img_h = 120; +img_buf = 256*1024; + +fftsize=4096; // todo compute this based on period + +outpos=fftsize; +lastbuf=0; +nextbuf = 65536; +window=128*1024; +hist = 128*1024+65536; + +gfx_clear=0; + +img_pos = img_w; // position in image (0..img_w) + +over24=1/24; +minvol = 10^(-180/20); +lscale=10/log(10); +ext_noinit=1; + +@slider +lfftsize=fftsize; +fftsize = 2^(slider4+8); +fftsize!=lfftsize ? ( + fftsize = (fftsize & (fftsize-1)) ? 4096 : fftsize < 256 ? 256 : fftsize>32768 ? 32768 : fftsize; + memset(lastbuf,0,65536); + memset(nextbuf,0,65536); + + bpos=0; + hfftsize=fftsize*0.5; + tmp=0; + tsc=$pi/hfftsize; + loop(hfftsize, + window[tmp]=0.42-0.50*cos(tmp*tsc)+0.08*cos(2*tmp*tsc); + tmp+=1; + ); +); +ifftsize=1.0/fftsize; +ihalffftsize=2.0/fftsize; +dry_mix = 10^(slider2/20); +wet_mix = 10^(slider3/20); + +pdc_delay=fftsize; +pdc_bot_ch=0; +pdc_top_ch=2; + +@serialize +file_var(0,img_w); +file_Var(0,img_h); +file_mem(0,img_buf,img_w*img_h); + +@block +(trigger&1) ? ( + memset(img_buf,0,img_w*img_h); + need_undo=1; +); + +(trigger&(2^9)) ? brush_size=min(32,brush_size+1); +(trigger&(2^8)) ? brush_size=max(1,brush_size-1); + +@sample + +(play_state & 1) || slider5 < 0 ? ( + +outpos >= fftsize*0.5 ? ( + tmp=lastbuf; + lastbuf=nextbuf; + nextbuf=tmp; + outpos=0; + imgbkcnt=1; + + fft(nextbuf,fftsize); + fft_permute(nextbuf,fftsize); + + lastimgpos = img_pos; + + (play_state & 1) && slider5 >= 0 ? ( + img_pos = ((play_position+slider5) * img_w / slider1 )% img_w; + ) : + ( + dimgpos = img_w * (fftsize*0.5)/ (srate*slider1); + (img_pos += dimgpos) >= img_w ? img_pos=0; + ); + + imgbkcnt = img_pos - lastimgpos; + imgbkcnt > img_pos ? imgbkcnt=img_pos; + imgbkcnt<1?imgbkcnt=1; + + tmp=0; + // filter nextbuf + dtmp = img_h/(fftsize*0.5-1); + fmode = slider6>0.5; + ly=-1; + loop(fftsize*0.5, + ty=((img_h - 1 - tmp*dtmp)|0); + ty!=ly || fmode ? + ( + val=0; + img_rdpos = img_buf + img_pos + img_w*ty; + loop(imgbkcnt, + val = max(val,img_rdpos[]); + img_rdpos -= 1; + ); + val=min(val,1.0); + val = dry_mix*(1.0-val)+val*wet_mix; + ) : val=dry_mix; + val *= ifftsize; + nextbuf[tmp*2]*=val; + nextbuf[tmp*2+1]*=val; + nextbuf[(fftsize-tmp)*2-2]*=val; + nextbuf[(fftsize-tmp)*2-1]*=val; + ly=ty; + tmp+=1; + ); + fft_ipermute(nextbuf,fftsize); + ifft(nextbuf,fftsize); + +); + + +// make sample +w=window[outpos]; +iw=1-w; + +os0=spl0; +os1=spl1; + +bpos = outpos+outpos; +spl0=(nextbuf[bpos]*w + lastbuf[fftsize+bpos]*iw); +spl1=(nextbuf[bpos+1]*w + lastbuf[fftsize+bpos+1]*iw); + +lastbuf[bpos]=hist[bpos]; +lastbuf[bpos+1]=hist[bpos+1]; +lastbuf[fftsize+bpos]=os0; +lastbuf[fftsize+bpos+1]=os1; +hist[bpos]=os0; +hist[bpos+1]=os1; + +outpos+=1; + +) : +( + img_pos=img_w+1;// do not process if stopped and projectsync + spl0*=dry_mix; + spl1*=dry_mix; +) + + +@gfx 640 400 + +need_undo ? ( + sliderchange(-1); + need_undo=0; +); +g_dy = gfx_h / img_h; +g_dx = gfx_w / img_w; +g_y = 0; +loop(img_h, + g_x=0; + loop(img_w, + + gfx_x = g_dx*g_x; gfx_y = g_dy*g_y; + + g_v = img_buf[g_x + g_y*img_w]; + + g_v > 0 ? ( + gfx_a=1; + gfx_r=g_v*9; + gfx_g=g_v*4; + gfx_b=g_v; + gfx_rectto(g_dx*(g_x+1)+0.9,g_dy*(g_y+1)+0.9); + ); + g_x+=1; + ); + g_y+=1; +); + +(mouse_cap & 3) ? ( + g_x = (mouse_x/g_dx)|0; + g_y = (mouse_y/g_dy)|0; + g_dir = mouse_cap&1; + g_dir = g_dir? 1.0/brush_size : -1.0; + + g_lx<-99 || g_ly<-99 ? ( g_lx=g_x; g_ly=g_y; ); + g_nsteps=max(max(abs(g_lx-g_x),abs(g_ly-g_y)),1); + g_dlx=(g_x-g_lx)/g_nsteps; + g_dly=(g_y-g_ly)/g_nsteps; + + loop(g_nsteps, // connect the dots to make it nice and easy to draw + g_vxs=((g_lx-brush_size*0.5)|0); + g_v= img_buf+g_vxs + ((g_ly-brush_size*0.5)|0)*img_w; + loop(brush_size, + g_vx=g_vxs; + loop(brush_size, + g_vx >= 0 && g_vx< img_w && g_v >= img_buf && g_v < img_buf+img_w*img_h ? ( + g_tmp = g_v[] + g_dir; + g_v[]=g_tmp<0?0 : g_tmp>1?1:g_tmp; + ); + g_v+=1; + g_vx+=1; + ); + g_v += img_w-brush_size; + ); + + g_lx += g_dlx; + g_ly += g_dly; + + ); +) : ( + g_lx>=0 || g_ly >= 0 ? ( + sliderchange(-1); + ); + g_lx=g_ly=-100; +); + +glp=img_pos; +gfx_x= (glp) * gfx_w/img_w ; +gfx_y=0; +gfX_a=0.3; +gfx_g=gfx_r=gfx_b=1; +g_x=max((glp+1) * gfx_w/img_w ,gfx_x+4); +gfx_rectto(g_x,gfx_h); + +gfx_a=0.5; +gfx_x=0; +gfX_y=gfx_h-gfx_texth; +gfx_drawchar($'b'); +gfx_drawchar($'r'); +gfx_drawchar($':'); +gfx_drawnumber(brush_size, 0); +gfX_x+=8; +gfx_drawchar($'('); +gfx_drawchar($'8'); gfx_drawchar($'/'); gfx_drawchar($'9'); gfx_x+=8; gfx_drawchar($'s'); gfx_drawchar($'z'); +gfx_drawchar($','); gfx_x+=8; +gfx_drawchar($'0'); +gfx_drawchar($'='); +gfx_drawchar($'c');gfx_drawchar($'l');gfx_drawchar($'r'); +gfx_drawchar($')'); diff --git a/Effects/filters/sweepinglowpass b/Effects/filters/sweepinglowpass new file mode 100644 index 0000000..01c670d --- /dev/null +++ b/Effects/filters/sweepinglowpass @@ -0,0 +1,41 @@ +// This effect Copyright (C) 2004 and later Cockos Incorporated +// License: LGPL - http://www.gnu.org/licenses/lgpl.html + +desc: Sweeping Resonant Lowpass Filter +//tags: LFO filter +//author: Cockos + +slider1:1000<20,20000>Frequency 1 (Hz) +slider2:2000<20,20000>Frequency 2 (Hz) +slider3:2<0.1,30,0.05>Sweep Time (sec) +slider4:0.8<0,1>Resonance + +in_pin:left input +in_pin:right input +out_pin:left output +out_pin:right output + +@init + spos=0; israte2=2/srate; + +@slider + //res_lp!=slider4 ? n3=n4=rn3=rn4=0; + res_lp=slider4; + fcenter=(slider1+slider2)*0.5; + fsize=(slider1-slider2)*0.5; + ssc=$pi*israte2 / slider3; + +@sample +cut_lp = (fcenter + cos(spos*ssc)*fsize) * israte2; + +spos=spos+1; + +fb_lp=res_lp+res_lp/(1-cut_lp); + +n3=n3+cut_lp*(spl0-n3+fb_lp*(n3-n4)); +n4=n4+cut_lp*(n3-n4); +spl0=n4; + +rn3=rn3+cut_lp*(spl1-rn3+fb_lp*(rn3-rn4)); +rn4=rn4+cut_lp*(rn3-rn4); +spl1=rn4; diff --git a/Effects/guitar/amp-model b/Effects/guitar/amp-model new file mode 100644 index 0000000..3146e93 --- /dev/null +++ b/Effects/guitar/amp-model @@ -0,0 +1,162 @@ +// This effect Copyright (C) 2004 and later Cockos Incorporated +// License: LGPL - http://www.gnu.org/licenses/lgpl.html + + +desc: Convolution Amp/Cab Modeler +//tags: guitar amplifier convolution FFT + +slider1:/amp_models:none:Model +slider2:0<-120,30,1>Preamp (dB) +slider3:1<0,1,1{No,Yes}>Upsample Impulse If Required +slider4:0<0,1,1{L-Stereo,Stereo-Stereo}>Channel Mode +slider5:0,Filter Size +slider6:0,FFT Size + + +in_pin:left input +in_pin:right input +out_pin:left output +out_pin:right output + +@init +fftsize=-1; +need_refft=1; +convsrc=128*1024; +lslider1=-1; +impbuf=256*1024; + + +@slider + tmp=slider1|0; + tmp != lslider1 ? + ( + lslider1=tmp; + + filehandle=file_open(slider1); + impbuf_l=impbuf_nch=impbuf_srate=0; + filehandle > 0 ? + ( + file_riff(filehandle,impbuf_nch,impbuf_srate); + impbuf_nch ? + ( + impbuf_l=(file_avail(filehandle)/impbuf_nch)|0; + need_refft=1; + file_mem(filehandle,impbuf,impbuf_l*impbuf_nch); + ); + file_close(filehandle); + ); + ); + !stereo_mode != !slider4 ? ( need_refft=1; stereo_mode=slider4; ); + + + + useresample != slider3 ? (useresample=slider3; need_refft=1; ); + preamp=2^(slider2/6); + + slider6=fftsize; + slider5=filtersize; + +@block + +need_refft ? ( // prepare convolution source, here... + useresample && srate > impbuf_srate && impbuf_srate > 1 ? + ( + filtersize = ((srate*impbuf_l)/impbuf_srate)|0; + isc=impbuf_srate/srate; + ) + : + ( + filtersize=impbuf_l; + isc=1.0; + ); + + fftsize=32; + + while( + filtersize > fftsize*0.5 ? + ( + fftsize += fftsize; + ) : 0; + ); + slider5=filtersize; + slider6=fftsize; + sliderchange(slider5); + sliderchange(slider6); + chunksize=fftsize-filtersize-1; // size of chunk size of audio to use + chunksize2=chunksize*2; + bpos=0; + curblock=0; + lastblock=64*1024; + invfsize=1/fftsize; + i=0; + i2=0; + loop(min(fftsize,filtersize), + ipos=i|0; + ipart=(i-ipos); + convsrc[i2]=impbuf[ipos*impbuf_nch]*(1-ipart) + impbuf[(ipos+1)*impbuf_nch]*ipart; + convsrc[i2+1]=stereo_mode ? 0.0 : (impbuf[(ipos+1)*impbuf_nch-1]*(1-ipart) + + impbuf[(ipos+1)*impbuf_nch-1]*(ipart)); + i += isc; + i2+=2; + ); + loop(fftsize-filtersize, + convsrc[i2]=convsrc[i2+1]=0; + i2+=2; + ); + fft(convsrc,fftsize); + i=0; + loop(fftsize*2, convsrc[i] *= invfsize; i+=1; ); + need_refft=0; +); + +@sample + +filtersize > 0 ? +( + +bpos >= chunksize ? +( + t=lastblock; + lastblock=curblock; + curblock=t; + + memset(curblock+chunksize*2,0,(fftsize-chunksize)*2); + + fft(curblock,fftsize); + convolve_c(curblock,convsrc,fftsize); + + +/* + i=0; + loop(fftsize, + r=curblock[i]; im=curblock[i+1]; + cr=convsrc[i]; ci=convsrc[i+1]; + curblock[i]=r*cr-im*ci; + curblock[i+1]=r*ci+im*cr; + i+=2; + ); +*/ + + ifft(curblock,fftsize); + + bpos=0; +); + +// save sample +bp2=bpos*2; +lastblock[bp2]=spl0*preamp; +lastblock[bp2+1]=stereo_mode ? (spl1*preamp) : 0; + +spl0=curblock[bp2]; +spl1=curblock[bp2+1]; + +bpos < fftsize-chunksize ? +( + spl0+=lastblock[chunksize2+bp2]; + spl1+=lastblock[chunksize2+bp2+1]; +); + + +bpos += 1; + +); diff --git a/Effects/guitar/amp-model-dual b/Effects/guitar/amp-model-dual new file mode 100644 index 0000000..70cb8f1 --- /dev/null +++ b/Effects/guitar/amp-model-dual @@ -0,0 +1,181 @@ +// This effect Copyright (C) 2004 and later Cockos Incorporated +// License: LGPL - http://www.gnu.org/licenses/lgpl.html + +desc: Convolution Dual Amp Modeler +desc: Convolution Dual Amp Modeler (mono->stereo) +//tags: guitar amplifier convolution FFT + +slider1:/amp_models:none:Model (Left) +slider2:/amp_models:none:Model (Right) +slider3:0<-120,30,1>Preamp (dB) +slider4:1<0,1,1{No,Yes}>Upsample Impulse If Required +slider5:0,Filter Size +slider6:0,FFT Size + +in_pin:left input +in_pin:right input +out_pin:left output +out_pin:right output + +@init +fftsize=-1; +need_refft=1; +convsrc=128*1024; +lslider1=lslider2=-1; +impbuf=256*1024; +rimpbuf=512*1024; + + +@slider + + tmp=slider1|0; + tmp != lslider1 ? + ( + lslider1=tmp; + impbuf_nch=impbuf_srate=impbuf_l=0; + filehandle=file_open(slider1); + filehandle > 0 ? + ( + file_riff(filehandle,impbuf_nch,impbuf_srate); + impbuf_nch? + ( + impbuf_l=file_avail(filehandle)/impbuf_nch; + need_refft=1; + file_mem(filehandle,impbuf,impbuf_l*impbuf_nch); + ); + file_close(filehandle); + ); + ); + tmp=slider2|0; + tmp != lslider2 ? + ( + lslider2=tmp; + rimpbuf_nch=rimpbuf_srate=rimpbuf_l=0; + filehandle=file_open(slider2); + filehandle > 0 ? + ( + file_riff(filehandle,rimpbuf_nch,rimpbuf_srate); + rimpbuf_nch? + ( + rimpbuf_l=file_avail(filehandle)/rimpbuf_nch; + need_refft=1; + file_mem(filehandle,rimpbuf,rimpbuf_l*rimpbuf_nch); + ); + file_close(filehandle); + ); + ); + + useresample != slider4 ? (useresample=slider4; need_refft=1; ); + slider6=fftsize; + preamp=2^(slider3/6); + slider6=fftsize; + slider5=filtersize; + +@block + +need_refft ? ( // prepare convolution source, here... + fs_l=impbuf_l; + fs_r=rimpbuf_l; + isc=1.0; + risc=1.0; + + useresample ? ( + srate > impbuf_srate && impbuf_srate > 1 ? ( + fs_l=((srate*impbuf_l)/impbuf_srate)|0; + isc=impbuf_srate/srate; + ); + srate > rimpbuf_srate && rimpbuf_srate > 1 ? ( + fs_r=((srate*rimpbuf_l)/rimpbuf_srate)|0; + risc=rimpbuf_srate/srate; + ); + ); + + filtersize = max(fs_l,fs_r); + fftsize=32; + while( + filtersize > fftsize*0.5 ? + ( + fftsize += fftsize; + ) : 0; + ); + slider5=filtersize; + slider6=fftsize; + sliderchange(16+32); + chunksize=fftsize-filtersize-1; // size of chunk size of audio to use + chunksize2=chunksize*2; + bpos=0; + curblock=0; + lastblock=64*1024; + invfsize=1/fftsize; + + i=0; + i2=0; + loop(min(fftsize,fs_l), + ipos=i|0; + ipart=(i-ipos); + convsrc[i2]=impbuf[ipos*impbuf_nch]*(1-ipart) + + impbuf[(ipos+1)*impbuf_nch]*ipart; + i += isc; + i2+=2; + ); + loop(fftsize-fs_l, + convsrc[i2]=i2==0?1:0; + i2+=2; + ); + + i=0; + i2=1; + loop(min(fftsize,fs_r), + ipos=i|0; + ipart=(i-ipos); + convsrc[i2]=rimpbuf[(ipos+1)*rimpbuf_nch-1]*(1-ipart) + + rimpbuf[(ipos+2)*rimpbuf_nch-1]*(ipart); + i += risc; + i2+=2; + ); + loop(fftsize-fs_r, + convsrc[i2]=i2==1?1:0; + i2+=2; + ); + + fft(convsrc,fftsize); + + i=0; + loop(fftsize*2, convsrc[i] *= invfsize; i+=1; ); + need_refft=0; +); + +@sample + +bpos >= chunksize ? +( + t=lastblock; + lastblock=curblock; + curblock=t; + + memset(curblock+chunksize*2,0,(fftsize-chunksize)*2); + + fft(curblock,fftsize); + convolve_c(curblock,convsrc,fftsize); + ifft(curblock,fftsize); + + bpos=0; +); + +bp2=bpos*2; + +// save sample +lastblock[bp2]=spl0*preamp; +lastblock[bp2+1]=0; + +spl0=curblock[bp2]; +spl1=curblock[bp2+1]; + +bpos < fftsize-chunksize ? +( + spl0+=lastblock[chunksize2+bp2]; + spl1+=lastblock[chunksize2+bp2+1]; +); + + +bpos += 1; diff --git a/Effects/guitar/chorus b/Effects/guitar/chorus new file mode 100644 index 0000000..0361ecc --- /dev/null +++ b/Effects/guitar/chorus @@ -0,0 +1,70 @@ +// This effect Copyright (C) 2004 and later Cockos Incorporated +// License: LGPL - http://www.gnu.org/licenses/lgpl.html + +desc:Chorus +//tags: guitar modulation chorus +//author: Cockos + +slider1:15<1,250>Chorus Length (ms) +slider2:1<1,8,1>Number Of Voices +slider3:0.5<0.1,16>Rate (Hz) +slider4:0.7<0,1>Pitch Fudge Factor +slider5:-6<-100,12,1>Wet Mix (dB) +slider6:-6<-100,12,1>Dry Mix (dB) + +in_pin:input +out_pin:output (mono) +out_pin:output (mono) + +@init + +bpos=0; + +@slider + +numvoices=min(16,max(slider2,1)); +choruslen=slider1*srate*0.001; + +i=0; +loop(numvoices, + i[0]=(i+1)/numvoices*$pi; + i+=1; +); + +bufofs=4096; + +csize=choruslen/numvoices * slider4; + +rateadj=slider3*2*$pi/srate; +wetmix = 2 ^ (slider5/6); +drymix = 2 ^ (slider6/6); + + +@sample + +bpos >= choruslen ? ( + bpos=0; +); +os0=spl0; + +// calculate new sample based on numvoices + +spl0=spl0*drymix; +vol=wetmix/numvoices; +i=0; + +loop(numvoices, + tpos = bpos - (0.5+0.49*sin( i[0] += rateadj)) * (i+1) * csize; + + tpos < 0 ? tpos += choruslen; + frac=tpos-(0|tpos); + ntpos=tpos>=(choruslen-1)?0:tpos+1; + + spl0 += (bufofs[tpos]*(1-frac) + bufofs[ntpos]*frac ) * vol; + i+=1; +); + +bufofs[bpos]=os0; +bpos+=1; + +spl1=spl0; diff --git a/Effects/guitar/distort-fuzz b/Effects/guitar/distort-fuzz new file mode 100644 index 0000000..595d544 --- /dev/null +++ b/Effects/guitar/distort-fuzz @@ -0,0 +1,36 @@ +desc:Distortion (Fuzz) +//tags: guitar distortion waveshaper +//author: Cockos + +slider1:20<1,300>Shape +slider2:-25<-60,60,1>Hard Limit (dB) +slider3:0<-120,0,1>Wet Mix (dB) +slider4:-60<-120,0,1>Dry Mix (dB) +slider5:0<0,2,1{Left,Right,Stereo}>Channel Mode + +in_pin:left input +in_pin:right input +out_pin:left output +out_pin:right output + +@init +@slider +maxv=2 ^ (slider2/6); +s11=slider1-1; +wet=2^(slider3/6); +dry=2^(slider4/6); + +@block +@sample + +slider5 != 1 ? ( +as=abs(spl0); +s0=spl0 * (as + slider1) / (as*(as + s11) + 1); +spl0=max(min(s0,maxv),-maxv)*wet + spl0*dry; +); + +slider5 != 0 ? ( +as=abs(spl1); +s0=spl1 * (as + slider1) / (as*(as + s11) + 1); +spl1=max(min(s0,maxv),-maxv)*wet + spl1*dry; +); diff --git a/Effects/guitar/distortion b/Effects/guitar/distortion new file mode 100644 index 0000000..255057e --- /dev/null +++ b/Effects/guitar/distortion @@ -0,0 +1,50 @@ +// This effect Copyright (C) 2004 and later Cockos Incorporated +// License: LGPL - http://www.gnu.org/licenses/lgpl.html + +desc:Distortion +//tags: guitar distortion waveshaper +//author: Cockos + +slider1:20<0,50,1>Gain (dB) +slider2:6<1,10,1>Hardness +slider3:-12<-40,0,1>Max Volume (dB) +slider4:0<0,2,1{Left,Right,Stereo}>Channel Mode + +in_pin:left input +in_pin:right input +out_pin:left output +out_pin:right output + +@init +@slider +preamp=2^(slider1/6); +soft=2^slider2; +maxv=2 ^ (slider3/6); + +//maxv=0.5 * (soft+maxv - sqrt((soft+maxv)*(soft+maxv)-4*(maxv*(soft-1)-1))); + +@sample + +slider4 != 1 ? ( +spl0*=preamp; +t=abs(spl0); +t > maxv ? +( + s=sign(spl0); + diff=t-maxv; + spl0=s*(maxv + diff/(soft+diff)); +); + +); + +slider4 != 0 ? ( +spl1*=preamp; +t=abs(spl1); +t > maxv ? +( + s=sign(spl1); + diff=t-maxv; + spl1=s*(maxv + diff/(soft+diff)); +); + +); diff --git a/Effects/guitar/flanger b/Effects/guitar/flanger new file mode 100644 index 0000000..3c151f9 --- /dev/null +++ b/Effects/guitar/flanger @@ -0,0 +1,54 @@ +// This effect Copyright (C) 2004 and later Cockos Incorporated +// License: LGPL - http://www.gnu.org/licenses/lgpl.html + +desc:Flanger +//tags: guitar flanger modulation +//author: Cockos + +slider1:6<0,200,1>Length (ms) +slider2:-120<-120,6,1>Feedback (dB) +slider3:-6<-120,6,1>Wet Mix (dB) +slider4:-6<-120,6,1>Dry Mix (dB) +slider5:0.6<0.001,100,0.1>Rate (Hz) + +in_pin:left input +in_pin:right input +out_pin:left output +out_pin:right output + +@init +delaypos=0; + +@slider +odelay=delaylen; +delaylen=min(slider1 * srate / 1000,500000); +odelay != delaylen ? freembuf(delaylen*2); + +wetmix = 2 ^ (slider2/6); +wetmix2 = 2 ^ (slider3/6); +drymix2 = 2 ^ (slider4/6); +dppossc = 2*$pi*slider5 / srate; +dpbacksc = delaylen*0.5 - 1; + + +@sample + +dppos = dppos+dppossc; +dpback = (sin(dppos)+1)*dpbacksc; +dpint = delaypos-dpback-1; +dpint < 0 ? dpint += delaylen; + +dpint *= 2; + +os1=dpint[0]; +os2=dpint[1]; + +dpint = delaypos*2; + +dpint[0]=spl0 + os1*wetmix; +dpint[1]=spl1 + os2*wetmix; + +(delaypos+=1) >= delaylen ? delaypos=0; + +spl0=spl0*drymix2 + os1*wetmix2; +spl1=spl1*drymix2 + os2*wetmix2; diff --git a/Effects/guitar/phaser b/Effects/guitar/phaser new file mode 100644 index 0000000..31d33c6 --- /dev/null +++ b/Effects/guitar/phaser @@ -0,0 +1,54 @@ +// This effect Copyright (C) 2004 and later Cockos Incorporated +// License: LGPL - http://www.gnu.org/licenses/lgpl.html + +desc:4-Tap Phaser +//tags: guitar modulation filter +//author: Cockos + +slider1:0.5<0,10>Rate (Hz) +slider2:440<40,20000>Range Min (Hz) +slider3:1600<40,20000>Range Max (Hz) +slider4:-3<-120,-1,1>Feedback (dB) +slider5:0<-120,12,1>Wet Mix (dB) + +in_pin:left input +in_pin:right input +out_pin:left output +out_pin:right output + +@init + +@slider +feedback=2 ^ (slider4/6); +lfoPhase=0; +wetmix =2 ^ (slider5/6); +dmin=slider2 * 2 / srate; +dmax=slider3 * 2 / srate; +dsc=abs(dmax-dmin) * 0.5; +dmin=min(dmin,dmax); +lfoInc = 2 * $pi * slider1 / srate; + +@sample + +d = dmin + dsc * (sin(lfoPhase) + 1); +lfoPhase += lfoInc; +lfoPhase >= 2*$pi ? lfoPhase -= 2*$pi; + +coef=(1-d)/(1+d); + +x1=spl0 + ly4 * feedback; +ly1 = coef * (ly1 + x1) - lx1; lx1 = x1; +ly2 = coef * (ly2 + ly1) - lx2; lx2 = ly1; +ly3 = coef * (ly3 + ly2) - lx3; lx3 = ly2; +ly4 = coef * (ly4 + ly3) - lx4; lx4 = ly3; +spl0 += ly4*wetmix; + + +// right channel, can comment this out if you +// want mono for 2x the speed :) +rx=spl1 + ry4 * feedback; +ry1 = coef * (ry1 + rx) - rx1; rx1 = rx; +ry2 = coef * (ry2 + ry1) - rx2; rx2 = ry1; +ry3 = coef * (ry3 + ry2) - rx3; rx3 = ry2; +ry4 = coef * (ry4 + ry3) - rx4; rx4 = ry3; +spl1 += ry4*wetmix; diff --git a/Effects/guitar/tremolo b/Effects/guitar/tremolo new file mode 100644 index 0000000..cd621db --- /dev/null +++ b/Effects/guitar/tremolo @@ -0,0 +1,27 @@ +// This effect Copyright (C) 2004 and later Cockos Incorporated +// License: LGPL - http://www.gnu.org/licenses/lgpl.html + +desc: Tremolo +//tags: guitar tremolo gain modulation +//author: Cockos + +slider1:4<0,100,1>Frequency (Hz) +slider2:-6<-60,0,1>Amount (dB) +slider3:0<0,1>Stereo Seperation + +in_pin:left input +in_pin:right input +out_pin:left output +out_pin:right output + +@slider + adv=$pi*2*slider1/srate; + sep=slider3*$pi; + amount=2 ^ (slider2/6); + sc=0.5*amount; amount=1-amount; + +@sample + +spl0=spl0*((cos(pos) + 1) * sc + amount); +spl1=spl1*((cos(pos+sep) + 1) * sc + amount); +pos+=adv; diff --git a/Effects/guitar/wah b/Effects/guitar/wah new file mode 100644 index 0000000..cc4487f --- /dev/null +++ b/Effects/guitar/wah @@ -0,0 +1,54 @@ +// This effect Copyright (C) 2004 and later Cockos Incorporated +// License: LGPL - http://www.gnu.org/licenses/lgpl.html + +desc: Wah-Wah +//tags: guitar modulation filter gain +//author: Cockos + +slider1:0<0,1>Position +slider2:0.7<0,1>Resonance (Top) (0..1) +slider3:0.1<0,1>Resonance (Bottom) (0..1) +slider4:0.05<0,0.1>Filter Distortion + +in_pin:input +out_pin:output + +@slider + +maxfreq=2000; +minfreq=200; +pos=slider1/.819; +pos=1-pos; +fh=minfreq+(pos)*(maxfreq-minfreq); +fhmaxfreq?fh=maxfreq; + +res = slider2*pos + slider3*(1-pos); + +res=min(max(res,0.0),1); +res*=res; +drive=min(max(slider4,0),0.1); // 0 to 0.1 +freq = 2 * sin($pi*min(0.25,fh/(srate*2))); +damp = min(2*(1-pow(res,0.25)), min(2,2/freq - freq*0.5)); +/*band*=0.3; +notch*=0.3; +low*=0.3; +high*=0.3; +*/ + +@sample + in = spl0; + notch = in - damp*band; + low = low + freq*band; + high = notch - low; + band = freq*high + band - drive*band*band*band; + out = 0.5*band; + notch = in - damp*band; + low = low + freq*band; + high = notch - low; + band = freq*high + band - drive*band*band*band; + out += 0.5*band; + +spl0=band; + + diff --git a/Effects/ix/MIDI_CCRider b/Effects/ix/MIDI_CCRider new file mode 100644 index 0000000..386c62d --- /dev/null +++ b/Effects/ix/MIDI_CCRider @@ -0,0 +1,144 @@ +/******************************************************************************* +* Copyright 2007 - 2011, Philip S. Considine * +* This program is free software: you can redistribute it and/or modify * +* it under the terms of the GNU General Public License as published by * +* the Free Software Foundation, either version 3 of the License, or * +* (at your option) any later version. * +* * +* 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 (http://www.gnu.org/licenses/)for more details. * +*******************************************************************************/ + +desc: MIDI CC LFO Generator +desc: MIDI CC LFO Generator [IXix] + +//tags: MIDI modulation generator LFO +//author: IXix + +//////////////////////////////////////////////////////////////////////////////// +slider1:0<0,15,1{1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16}>MIDI Channel +slider2:1<0,127,1{0 Bank Sel M,1 Mod Wheel M,2 Breath M,3,4 Foot P M,5 Porta M,6 Data Entry M,7 Vol M,8 Balance M,9,10 Pan M,11 Expression M,12 Ctrl 1 M,13 Ctrl 2 M,14,15,16 GP Slider 1,17 GP Slider 2,18 GP Slider 3,19 GP Slider 4,20,21,22,23,24,25,26,27,28,29,30,31,32 Bank Sel L,33 Mod Wheel L,34 Breath L,35,36 Foot P L,37 Porta L,38 Data Entry L,39 Vol L,40 Balance L,41,42 Pan L,43 Expression L,44 Ctrl 1 L,45 Ctrl 2 L,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64 Hold P sw,65 Porta sw,66 Sustenuto sw,67 Soft P sw,68 Legato P sw,69 Hold 2 P sw,70 S.Variation,71 S.Timbre,72 S.Release,73 S.Attack,74 S.Brightness,75 S.Ctrl 6,76 S.Ctrl 7,77 S.Ctrl 8,78 S.Ctrl 9,79 S.Ctrl 10,80 GP B.1 sw,81 GP B.2 sw,82 GP B.3 sw,83 GP B.4 sw,84,85,86,87,88,89,90,91 Effects Lv,92 Trem Lv,93 Chorus Lv,94 Celeste Lv,95 Phaser Lv,96 Data B. Inc,97 Data B. Dec,98 NRP L,99 NRP M,100 RP L,101 RP M,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}>Controller +slider3:0<0,127,1>Center +slider4:0<0,127,1>Range (+/-) +slider5:0<0,127,1>Off Value +slider6:0<0,0,1{Sine}>LFO Shape +slider7:1<0,32,0.1>LFO Frequency +slider8:0<0,1,1{Hz,Beats}>LFO Units +slider9:6<0,9,1{1,2,4,8,16,32,64,128,256,512}>Updates Per Beat +slider10:1<0,1,1{Off,On}>On/Off + +in_pin:none +out_pin:none + + +//////////////////////////////////////////////////////////////////////////////// +@init +statController = $xB0; + +//////////////////////////////////////////////////////////////////////////////// +@slider + +slider3 = min(max(slider3 | 0, 0), 127); // Remove fractions and clamp to legal range +slider4 = min(max(slider4 | 0, 0), 127); +slider5 = min(max(slider5 | 0, 0), 127); + +slider7 = min(max(slider7, 0), 32); + +channel = slider1; +target = slider2; +centre = slider3; +range = slider4; +offValue = slider5; +shape = slider6; +freq = slider7; +units = slider8; +updateFreq = 2 ^ slider9; + +// Reset if necessary +slider10 != on ? +( + on = slider10; + t = 0; + updateCounter = 0; +); + +//////////////////////////////////////////////////////////////////////////////// +@block +updateSamples = srate * 60 / tempo / updateFreq; + +units == 0 ? // Hz +( + oscTemp = 2 * $pi * freq; +) +: +units == 1 ? // Beats +( + oscTemp = 2 * $pi * tempo / 60 / freq; +); + +on ? +( + active = 1; + + updateCounter + samplesblock >= updateSamples ? + ( + updateSamples <= samplesblock ? + ( + // Possibly more than one update in the block + samplesLeft = samplesblock; + offset = 0; + while + ( + offset += updateSamples - updateCounter; + + t += (updateSamples - updateCounter)/srate; + + // Sine + shape == 0 ? value = centre + floor(range * sin(oscTemp * t)); + + value = min(max(value, 0), 127); + + midisend(offset, statController + channel, target | (value << 8)); + samplesLeft -= updateSamples - updateCounter; + updateCounter = 0; + + samplesLeft >= updateSamples; // Loop condition + ); + updateCounter = samplesLeft; + t += updateCounter / srate; + ) + : + ( + // Block is smaller than updateSamples, just one update + offset = updateCounter + samplesblock - updateSamples; + + t += offset / srate; + + // Sine + shape == 0 ? value = centre + floor(range * sin(oscTemp * t)); + + value = min(max(value, 0), 127); + + midisend(offset, statController + channel, target | (value << 8)); + updateCounter = samplesblock - offset; + t += updateCounter/srate; + ); + ) + : + ( + // Just update counters + updateCounter += samplesblock; + t += samplesblock /srate; + ); +) +: +( + // Send off value only if not already sent + active ? + ( + midisend(offset, statController + channel, target | (offValue << 8)); + active = 0; + ); +); diff --git a/Effects/ix/MIDI_DuplicateFilter b/Effects/ix/MIDI_DuplicateFilter new file mode 100644 index 0000000..e2cd526 --- /dev/null +++ b/Effects/ix/MIDI_DuplicateFilter @@ -0,0 +1,97 @@ +/******************************************************************************* +* Copyright 2007 - 2011, Philip S. Considine * +* This program is free software: you can redistribute it and/or modify * +* it under the terms of the GNU General Public License as published by * +* the Free Software Foundation, either version 3 of the License, or * +* (at your option) any later version. * +* * +* 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 (http://www.gnu.org/licenses/)for more details. * +*******************************************************************************/ + +desc: MIDI Duplicate Note Filter +desc: MIDI Duplicate Note Filter [IXix] +//tags: MIDI filter processing +//author: IXix + +slider1:0<0,15,1{1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16}>Input Channel + +in_pin:none +out_pin:none + +//////////////////////////////////////////////////////////////////////////////// +@init + +statNoteOn = $x90; +statNoteOff = $x80; + +//////////////////////////////////////////////////////////////////////////////// +@slider +inChannel = slider1; + +//////////////////////////////////////////////////////////////////////////////// +@block + +trigger & (2 ^ 0) ? // Reset counters and send all notes off on this channel. +( + i = 0; + while + ( + tracker[i] = 0; + midisend(0, statNoteOff + inChannel, i | 0 * 256); + (i += 1) < 127; + ); + trigger -= 2 ^ 0; +); + +while +( + midirecv(offset, msg1, msg23) ? + ( + // Reset pass flag + passThru = 1; + + // Extract message type and channel + status = msg1 & $xF0; + channel = msg1 & $x0F; + + // Is it on our channel? + channel == inChannel ? + ( + // Is it a note event? + status == statNoteOn || status == statNoteOff ? + ( + // Get note and velocity + note = msg23 & $x7F; + velocity = msg23 >> 8; + + // Update counters and flag to pass if necessary. Zero velocity is regarded as note off + status == statNoteOn && velocity > 0 ? + ( + // Note on + tracker[note] += 1; + tracker[note] == 1 ? midisend(offset, msg1, msg23); + ) + : + ( + // Note off + tracker[note] -= 1; + tracker[note] == 0 ? midisend(offset, msg1, msg23); + ); + ) + : + ( + midisend(offset, msg1, msg23); // Not a note, pass thru + ); + ) + : + ( + midisend(offset, msg1, msg23); // Not on our channel, pass thru + ); + + 1; // Force loop to continue until all messages have been processed + ); +); + diff --git a/Effects/ix/MIDI_KeyMap b/Effects/ix/MIDI_KeyMap new file mode 100644 index 0000000..c3520de --- /dev/null +++ b/Effects/ix/MIDI_KeyMap @@ -0,0 +1,120 @@ +/******************************************************************************* +* Copyright 2007 - 2011, Philip S. Considine * +* This program is free software: you can redistribute it and/or modify * +* it under the terms of the GNU General Public License as published by * +* the Free Software Foundation, either version 3 of the License, or * +* (at your option) any later version. * +* * +* 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 (http://www.gnu.org/licenses/)for more details. * +*******************************************************************************/ + +desc: MIDI Map To Key v2 +desc: MIDI Map To Key v2 [IXix] +//tags: MIDI processing mapping +//author: IXix + +slider1:0<0,15,1{1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16}>Input Channel +slider2:/ix_keymaps:none:Mapping File +slider3:0<0,127,1{0: C0,1: C#0,2: D0,3: Eb0,4: E0,5: F0,6: F#0,7: G0,8: G#0,9: A0,10: Bb0,11: B0,12: C1,13: C#1,14: D1,15: Eb1,16: E1,17: F1,18: F#1,19: G1,20: G#1,21: A1,22: Bb1,23: B1,24: C2,25: C#2,26: D2,27: Eb2,28: E2,29: F2,30: F#2,31: G2,32: G#2,33: A2,34: Bb2,35: B2,36: C3,37: C#3,38: D3,39: Eb3,40: E3,41: F3,42: F#3,43: G3,44: G#3,45: A3,46: Bb3,47: B3,48: C4,49: C#4,50: D4,51: Eb4,52: E4,53: F4,54: F#4,55: G4,56: G#4,57: A4,58: Bb4,59: B4,60: C5,61: C#5,62: D5,63: Eb5,64: E5,65: F5,66: F#5,67: G5,68: G#5,69: A5,70: Bb5,71: B5,72: C6,73: C#6,74: D6,75: Eb6,76: E6,77: F6,78: F#6,79: G6,80: G#6,81: A6,82: Bb6,83: B6,84: C7,85: C#7,86: D7,87: Eb7,88: E7,89: F7,90: F#7,91: G7,92: G#7,93: A7,94: Bb7,95: B7,96: C8,97: C#8,98: D8,99: Eb8,100: E8,101: F8,102: F#8,103: G8,104: G#8,105: A8,106: Bb8,107: B8,108: C9,109: C#9,110: D9,111: Eb9,112: E9,113: F9,114: F#9,115: G9,116: G#9,117: A9,118: Bb9,119: B9,120: C10,121: C#10,122: D10,123: Eb10,124: E10,125: F10,126: F#10,127: G10}>Note In +slider4:0<0,127,1{0: C0,1: C#0,2: D0,3: Eb0,4: E0,5: F0,6: F#0,7: G0,8: G#0,9: A0,10: Bb0,11: B0,12: C1,13: C#1,14: D1,15: Eb1,16: E1,17: F1,18: F#1,19: G1,20: G#1,21: A1,22: Bb1,23: B1,24: C2,25: C#2,26: D2,27: Eb2,28: E2,29: F2,30: F#2,31: G2,32: G#2,33: A2,34: Bb2,35: B2,36: C3,37: C#3,38: D3,39: Eb3,40: E3,41: F3,42: F#3,43: G3,44: G#3,45: A3,46: Bb3,47: B3,48: C4,49: C#4,50: D4,51: Eb4,52: E4,53: F4,54: F#4,55: G4,56: G#4,57: A4,58: Bb4,59: B4,60: C5,61: C#5,62: D5,63: Eb5,64: E5,65: F5,66: F#5,67: G5,68: G#5,69: A5,70: Bb5,71: B5,72: C6,73: C#6,74: D6,75: Eb6,76: E6,77: F6,78: F#6,79: G6,80: G#6,81: A6,82: Bb6,83: B6,84: C7,85: C#7,86: D7,87: Eb7,88: E7,89: F7,90: F#7,91: G7,92: G#7,93: A7,94: Bb7,95: B7,96: C8,97: C#8,98: D8,99: Eb8,100: E8,101: F8,102: F#8,103: G8,104: G#8,105: A8,106: Bb8,107: B8,108: C9,109: C#9,110: D9,111: Eb9,112: E9,113: F9,114: F#9,115: G9,116: G#9,117: A9,118: Bb9,119: B9,120: C10,121: C#10,122: D10,123: Eb10,124: E10,125: F10,126: F#10,127: G10}>Note Out +slider5:0<0,1,1{No,Reload Now}>Reload Mapping + +in_pin:none +out_pin:none + +//////////////////////////////////////////////////////////////////////////////// +@init + +//Set default mapping +while +( + map[i] = i; + (i += 1) < 128; +); + +mapFile = -1; + +statNoteOn = $x90; +statNoteOff = $x80; + +//////////////////////////////////////////////////////////////////////////////// +@slider +inChannel = slider1; + +slider5 == 1 ? +( + reload = 1; + slider5 = 0; sliderchange(slider5); +); + +//Load map +mapFile != slider2 | 0 || reload == 1 ? +( + reload = 0; + mapSize = 0; + mapFile = slider2; + fileHandle = file_open(slider2); + fileHandle > 0 && file_text(fileHandle) ? + ( + while + ( + file_var(fileHandle, map[mapSize]); + file_avail(fileHandle) ? mapSize += 1; + ); + file_close(fileHandle); + ); + slider4 = map[inputNote]; +); + +slider3 != inputNote ? +( + inputNote = slider3; + slider4 = map[inputNote]; +); + +//////////////////////////////////////////////////////////////////////////////// +@block + +while +( + midirecv(offset, msg1, msg23) ? + ( + // Extract message type and channel + status = msg1 & $xF0; + channel = msg1 & $x0F; + + // Is it on our channel? + channel == inChannel ? + ( + // Is it a note event? + status == statNoteOn || status == statNoteOff ? + ( + // Extract note value + note = msg23 & $x7F; + + // Update mapping sliders + slider3 = note; sliderchange(slider3); + slider4 = map[note]; sliderchange(slider4); + + // Substitute note value and pass on modified message + midisend(offset, msg1, (msg23 & $xFF00) | map[note]); + + ) + : + ( + midisend(offset, msg1, msg23); // Not a note, pass thru + ); + + ) + : + ( + midisend(offset, msg1, msg23); // Not on our channel, pass thru + ); + + 1; // Force loop to continue until all messages have been processed + ); +); + diff --git a/Effects/ix/MIDI_KeySnap b/Effects/ix/MIDI_KeySnap new file mode 100644 index 0000000..14539e0 --- /dev/null +++ b/Effects/ix/MIDI_KeySnap @@ -0,0 +1,195 @@ +/******************************************************************************* +* Copyright 2007 - 2011, Philip S. Considine * +* This program is free software: you can redistribute it and/or modify * +* it under the terms of the GNU General Public License as published by * +* the Free Software Foundation, either version 3 of the License, or * +* (at your option) any later version. * +* * +* 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 (http://www.gnu.org/licenses/)for more details. * +*******************************************************************************/ + +desc: MIDI Snap To Key +desc: MIDI Snap To Key [IXix] +//tags: MIDI processing mapping +//author: IXix + +slider1:0<0,15,1{1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16}>Input Channel + +slider2:0<0,127,1>Note Min +slider3:127<0,127,1>Note Max + +// Note min/max (names) (disabled) +//slider2:0<0,127,1{C0,C#0,D0,D#0,E0,F0,F#0,G0,G#0,A0,A#0,B0,C1,C#1,D1,D#1,E1,F1,F#1,G1,G#1,A1,A#1,B1,C2,C#2,D2,D#2,E2,F2,F#2,G2,G#2,A2,A#2,B2,C3,C#3,D3,D#3,E3,F3,F#3,G3,G#3,A3,A#3,B3,C4,C#4,D4,D#4,E4,F4,F#4,G4,G#4,A4,A#4,B4,C5,C#5,D5,D#5,E5,F5,F#5,G5,G#5,A5,A#5,B5,C6,C#6,D6,D#6,E6,F6,F#6,G6,G#6,A6,A#6,B6,C7,C#7,D7,D#7,E7,F7,F#7,G7,G#7,A7,A#7,B7,C8,C#8,D8,D#8,E8,F8,F#8,G8,G#8,A8,A#8,B8,C9,C#9,D9,D#9,E9,F9,F#9,G9,G#9,A9,A#9,B9,C10,C#10,D10,D#10,E10,F10,F#10,G10}>Note Min +//slider3:127<0,127,1{C0,C#0,D0,D#0,E0,F0,F#0,G0,G#0,A0,A#0,B0,C1,C#1,D1,D#1,E1,F1,F#1,G1,G#1,A1,A#1,B1,C2,C#2,D2,D#2,E2,F2,F#2,G2,G#2,A2,A#2,B2,C3,C#3,D3,D#3,E3,F3,F#3,G3,G#3,A3,A#3,B3,C4,C#4,D4,D#4,E4,F4,F#4,G4,G#4,A4,A#4,B4,C5,C#5,D5,D#5,E5,F5,F#5,G5,G#5,A5,A#5,B5,C6,C#6,D6,D#6,E6,F6,F#6,G6,G#6,A6,A#6,B6,C7,C#7,D7,D#7,E7,F7,F#7,G7,G#7,A7,A#7,B7,C8,C#8,D8,D#8,E8,F8,F#8,G8,G#8,A8,A#8,B8,C9,C#9,D9,D#9,E9,F9,F#9,G9,G#9,A9,A#9,B9,C10,C#10,D10,D#10,E10,F10,F#10,G10}>Note Max + +slider4:0<0,11,1{C,C#,D,Eb,E,F,F#,G,G#,A,Bb,B}>Root Note +slider5:/ix_scales:none:Scale File +slider6:1<0,1,1{Block,Remap}>Mode +slider7:1<0,1,1{Off,On}>On/Off + +in_pin:none +out_pin:none + +//////////////////////////////////////////////////////////////////////////////// +@init + +// Memory offsets +inputTracker = 0; +noteMap = 128; +scale = 1024; + +// MIDI constants +statNoteOn = $x90; +statNoteOff = $x80; + +// File change flag +scaleFile = -1; + +//////////////////////////////////////////////////////////////////////////////// +@slider + +slider2 = min(max(slider2 | 0, 0), 127); // Remove fractions and clamp to legal range +slider3 = min(max(slider3 | 0, 0), 127); + +inChannel = slider1; +noteMin = slider2; +noteMax = slider3; +root = slider4; +mode = slider6; +on = slider7; + +//Load scale +scaleFile != slider5 ? +( + scaleFile = slider5; + scaleSize = 0; + fileHandle = file_open(slider5); + fileHandle > 0 && file_text(fileHandle) ? + ( + while + ( + file_var(fileHandle, scale[scaleSize]); + file_avail(fileHandle) ? scaleSize += 1; + ); + file_close(fileHandle); + ); +); + +//////////////////////////////////////////////////////////////////////////////// +@block + +while +( + midirecv(offset, msg1, msg23) ? + ( + passThru = 1; // Assume note is good + + // Extract message type and channel + status = msg1 & $xF0; + channel = msg1 & $x0F; + + // Is it on our channel and are we working? + channel == inChannel && on ? + ( + // Is it a note event? + (status == statNoteOn || status == statNoteOff) ? + ( + // Extract note number and velocity + note = msg23 & $x7F; + velocity = msg23 >> 8; + + // Is it in our note range? + !(note < noteMin || note > noteMax) ? + ( + // What kind of note event? + status == statNoteOn && velocity > 0 ? // Note on (zero velocity is considered to be a note off) + ( + // If note not already on + inputTracker[note] == 0 ? + ( + relNote = note % 12; + octave = (note - relNote) / 12; + relNote -= root; + relNote < 0 ? relNote += 12; + + // Is it in key? + i = okay = 0; + while + ( + relNote == scale[i] ? okay = 1; + (i += 1) <= scaleSize; + ); + + okay == 0 ? // Bad note + ( + mode == 1 ? // Remap mode + ( + nearest = difference = 1000; + i = 0; + while + ( + temp = abs(scale[i] - relNote); + temp < difference ? + ( + difference = temp; + nearest = scale[i]; + ); + (i += 1) <= scaleSize; + ); + + inputTracker[note] = 2; // Mark note as active and modified + + // Map to nearest good note + nearest + root >= 11 ? octave -= 1; + noteMap[note] = (octave * 12) + nearest + root; + + // Modify MIDI message data + msg23 = noteMap[note] | (velocity << 8); + ) + : // Block mode + ( + passThru = 0; + ); + ) + : + ( + inputTracker[note] = 1; // Good note. Mark note as active. + ); + ) + : + ( + // Note already active so block the message. + passThru = 0; + ); + ) + : // Note off + ( + // Is the note active? + inputTracker[note] > 0 ? + ( + // Is it a modified note? + inputTracker[note] == 2 ? + ( + msg23 = noteMap[note] | (velocity << 8); // Modify MIDI message data + noteMap[note] = note; // Reset noteMap + ); + + inputTracker[note] = 0; // Mark note as inactive + ); + ); + ); + ); + ); + + // Pass message on if necessary + passThru ? + ( + midisend(offset, msg1, msg23); + ); + + 1; // Force loop to continue until all messages have been processed + ); +); diff --git a/Effects/ix/MIDI_Router b/Effects/ix/MIDI_Router new file mode 100644 index 0000000..2a2fb78 --- /dev/null +++ b/Effects/ix/MIDI_Router @@ -0,0 +1,98 @@ +/******************************************************************************* +* Copyright 2007 - 2011, Philip S. Considine * +* This program is free software: you can redistribute it and/or modify * +* it under the terms of the GNU General Public License as published by * +* the Free Software Foundation, either version 3 of the License, or * +* (at your option) any later version. * +* * +* 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 (http://www.gnu.org/licenses/)for more details. * +*******************************************************************************/ + +desc: MIDI Router/Transpose +desc: MIDI Router/Transpose [IXix] +//tags: MIDI processing routing +//author: IXix + +slider1:0<0,15,1{1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16}>Input Channel +slider2:0<0,15,1{1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16}>Output Channel +slider3:3<0,3,1{Off, Notes, Non-Notes, Both}>Mode +slider4:0<0,127,1>Note Min +slider5:127<0,127,1>Note Max + +// Note min/max (names) (disabled) +//slider4:0<0,127,1{C0,C#0,D0,D#0,E0,F0,F#0,G0,G#0,A0,A#0,B0,C1,C#1,D1,D#1,E1,F1,F#1,G1,G#1,A1,A#1,B1,C2,C#2,D2,D#2,E2,F2,F#2,G2,G#2,A2,A#2,B2,C3,C#3,D3,D#3,E3,F3,F#3,G3,G#3,A3,A#3,B3,C4,C#4,D4,D#4,E4,F4,F#4,G4,G#4,A4,A#4,B4,C5,C#5,D5,D#5,E5,F5,F#5,G5,G#5,A5,A#5,B5,C6,C#6,D6,D#6,E6,F6,F#6,G6,G#6,A6,A#6,B6,C7,C#7,D7,D#7,E7,F7,F#7,G7,G#7,A7,A#7,B7,C8,C#8,D8,D#8,E8,F8,F#8,G8,G#8,A8,A#8,B8,C9,C#9,D9,D#9,E9,F9,F#9,G9,G#9,A9,A#9,B9,C10,C#10,D10,D#10,E10,F10,F#10,G10}>Note Min +//slider5:127<0,127,1{C0,C#0,D0,D#0,E0,F0,F#0,G0,G#0,A0,A#0,B0,C1,C#1,D1,D#1,E1,F1,F#1,G1,G#1,A1,A#1,B1,C2,C#2,D2,D#2,E2,F2,F#2,G2,G#2,A2,A#2,B2,C3,C#3,D3,D#3,E3,F3,F#3,G3,G#3,A3,A#3,B3,C4,C#4,D4,D#4,E4,F4,F#4,G4,G#4,A4,A#4,B4,C5,C#5,D5,D#5,E5,F5,F#5,G5,G#5,A5,A#5,B5,C6,C#6,D6,D#6,E6,F6,F#6,G6,G#6,A6,A#6,B6,C7,C#7,D7,D#7,E7,F7,F#7,G7,G#7,A7,A#7,B7,C8,C#8,D8,D#8,E8,F8,F#8,G8,G#8,A8,A#8,B8,C9,C#9,D9,D#9,E9,F9,F#9,G9,G#9,A9,A#9,B9,C10,C#10,D10,D#10,E10,F10,F#10,G10}>Note Max + +slider6:0<-60,60,1>Transpose + +in_pin:none +out_pin:none + +//////////////////////////////////////////////////////////////////////////////// +@init +statNoteOn = $x90; +statNoteOff = $x80; + +//////////////////////////////////////////////////////////////////////////////// +@slider + +slider4 = min(max(slider4 | 0, 0), 127); // Remove fractions and clamp to legal range +slider5 = min(max(slider5 | 0, 0), 127); +slider6 = min(max(slider6 | 0, -60), 60); + +inChannel = slider1; +outChannel = slider2; +mode = slider3; +noteMin = slider4; +noteMax = slider5; +transpose = slider6; + +//////////////////////////////////////////////////////////////////////////////// +@block +while +( + midirecv(offset, msg1, msg23) ? + ( + // Extract message type and channel + status = msg1 & $xF0; + channel = msg1 & $x0F; + + // Is it on our channel? + channel == inChannel ? + ( + // Note events are always redirected + (status == statNoteOn || status == statNoteOff) ? + ( + // Extract note value + note = msg23 & $x7F; + + // Is it within our note range? + mode & 1 ? + ( + note >= noteMin && note <= noteMax ? + ( + // Transpose and clamp + note += transpose; + note < 0 ? note = 0; note > 127 ? note = 127; + + // Modify MIDI message data + msg1 = status + outChannel; + msg23 = (msg23 & $xFF00) | note; + ); + ); + ) + : mode & 2 ? // Redired non-note events if necessary + ( + msg1 = status + outChannel; + ); + ); + + // Pass message on + midisend(offset, msg1, msg23); + + 1; // Force loop to continue until all messages have been processed + ); +); diff --git a/Effects/ix/MIDI_Tool b/Effects/ix/MIDI_Tool new file mode 100644 index 0000000..207c5f7 --- /dev/null +++ b/Effects/ix/MIDI_Tool @@ -0,0 +1,151 @@ +/******************************************************************************* +* Copyright 2007 - 2011, Philip S. Considine * +* This program is free software: you can redistribute it and/or modify * +* it under the terms of the GNU General Public License as published by * +* the Free Software Foundation, either version 3 of the License, or * +* (at your option) any later version. * +* * +* 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 (http://www.gnu.org/licenses/)for more details. * +*******************************************************************************/ + +desc: MIDI Tool +desc: MIDI Tool [IXix] +//tags: MIDI processing +//author: IXix + +slider1:0<0,15,1{1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16}>Input Channel +slider2:0<0,127,1>Note Min +slider3:127<0,127,1>Note Max + +// Note min/max (names) (disabled) +//slider2:0<0,127,1{C0,C#0,D0,D#0,E0,F0,F#0,G0,G#0,A0,A#0,B0,C1,C#1,D1,D#1,E1,F1,F#1,G1,G#1,A1,A#1,B1,C2,C#2,D2,D#2,E2,F2,F#2,G2,G#2,A2,A#2,B2,C3,C#3,D3,D#3,E3,F3,F#3,G3,G#3,A3,A#3,B3,C4,C#4,D4,D#4,E4,F4,F#4,G4,G#4,A4,A#4,B4,C5,C#5,D5,D#5,E5,F5,F#5,G5,G#5,A5,A#5,B5,C6,C#6,D6,D#6,E6,F6,F#6,G6,G#6,A6,A#6,B6,C7,C#7,D7,D#7,E7,F7,F#7,G7,G#7,A7,A#7,B7,C8,C#8,D8,D#8,E8,F8,F#8,G8,G#8,A8,A#8,B8,C9,C#9,D9,D#9,E9,F9,F#9,G9,G#9,A9,A#9,B9,C10,C#10,D10,D#10,E10,F10,F#10,G10}>Note Min +//slider3:127<0,127,1{C0,C#0,D0,D#0,E0,F0,F#0,G0,G#0,A0,A#0,B0,C1,C#1,D1,D#1,E1,F1,F#1,G1,G#1,A1,A#1,B1,C2,C#2,D2,D#2,E2,F2,F#2,G2,G#2,A2,A#2,B2,C3,C#3,D3,D#3,E3,F3,F#3,G3,G#3,A3,A#3,B3,C4,C#4,D4,D#4,E4,F4,F#4,G4,G#4,A4,A#4,B4,C5,C#5,D5,D#5,E5,F5,F#5,G5,G#5,A5,A#5,B5,C6,C#6,D6,D#6,E6,F6,F#6,G6,G#6,A6,A#6,B6,C7,C#7,D7,D#7,E7,F7,F#7,G7,G#7,A7,A#7,B7,C8,C#8,D8,D#8,E8,F8,F#8,G8,G#8,A8,A#8,B8,C9,C#9,D9,D#9,E9,F9,F#9,G9,G#9,A9,A#9,B9,C10,C#10,D10,D#10,E10,F10,F#10,G10}>Note Max + +slider4:0<0,127,1>Input Velocity Min +slider5:127<0,127,1>Input Velocity Max +slider6:0<0,100,1>Random Velocity (%) +slider7:0<0,127,1>Output Velocity Min +slider8:127<0,127,1>Output Velocity Max +slider9:0<-60,60,1>Transpose (st) +slider10:0<0,100,1>Random Pitch (%) +slider11:0<0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,1{1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16}>Output Channel + +in_pin:none +out_pin:none + +@init +statNoteOff = $x80; +statNoteOn = $x90; +statPitch = $xE0; +pitchCentre = 16384; + +@slider + +// Discard fractions +slider2 |= 0; +slider3 |= 0; +slider4 |= 0; +slider5 |= 0; +slider6 |= 0; +slider7 |= 0; +slider8 |= 0; +slider9 |= 0; +slider10 |= 0; + +// Clamp to respectable values +slider2 = min(slider2, slider3); +slider3 = max(slider2, slider3); +slider4 = min(slider4, slider5); +slider5 = max(slider4, slider5); +slider6 = min(max(slider6, 0), 100); +slider7 = min(slider7, slider8); +slider8 = max(slider7, slider8); +slider9 = min(max(slider9, -60), 60); +slider10 = min(max(slider10, 0), 100); + +// Set variables +inChannel = slider1; +outChannel = slider11; +noteMin = slider2; +noteMax = slider3; +inVelMin = slider4; +inVelMax = slider5; +velocityRand = slider6 / 100; +outVelMin = slider7; +outVelMax = slider8; +transpose = slider9; +pitchRand = slider10 / 100; + +//////////////////////////////////////////////////////////////////////////////////////////// +@block +while +( + midirecv(offset, msg1, msg23) ? + ( + doPitch = 0; // Reset pitch bend flag + + // Extract message type and channel + status = msg1 & $xF0; + channel = msg1 & $x0F; + + // Is it on our channel? + channel == inChannel ? + ( + // Is it a note event? + status == statNoteOn || status == statNoteOff ? + ( + // Extract note number + note = msg23 & $x7F; + + // Is it within our note range? + !(note < noteMin || note > noteMax) ? + ( + t += 1; + osc = sin(t); // used to make random values positive or negative + + // Extract velocity + velocity = msg23 >> 8; + + // Do velocity. Zero velocity is considered a note-off so don't clamp it + velocity > 0 ? + ( + // Clamp input velocity + velocity = min(max(velocity, inVelMin), inVelMax); + + // Randomise clamped velocity by percentage + velocityRand > 0 ? velocity = floor(velocity + (rand(velocity * velocityRand) * osc)); + + // Clamp output velocity + velocity = min(max(velocity, outVelMin), outVelMax); + ); + + // Do transpose and clamp result if necessary + note += transpose; + note = min(max(note, 0), 127); + + // Adjust message values + msg1 = status + outChannel; + msg23 = note | (velocity << 8); + + // Flag to send pitchbend if needed + pitchRand > 0 ? doPitch = 1; + ); + ); + ); + + // Generate and send pitch bend message if necessary + doPitch ? + ( + pitch = pitchCentre + floor(rand(pitchCentre * pitchRand) * osc); + midisend(offset, statPitch + outChannel, pitch); + ); + + // Pass message on + midisend(offset, msg1, msg23); + + 1; // Force loop to continue until all messages have been processed + ); +); diff --git a/Effects/ix/MIDI_Tool II b/Effects/ix/MIDI_Tool II new file mode 100644 index 0000000..c5fbc33 --- /dev/null +++ b/Effects/ix/MIDI_Tool II @@ -0,0 +1,195 @@ +/******************************************************************************* +* Copyright 2007 - 2013, Philip S. Considine * +* This program is free software: you can redistribute it and/or modify * +* it under the terms of the GNU General Public License as published by * +* the Free Software Foundation, either version 3 of the License, or * +* (at your option) any later version. * +* * +* 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 (http://www.gnu.org/licenses/)for more details. * +*******************************************************************************/ + +desc: MIDI Tool v2 +desc: MIDI Tool v2 [IXix] +//tags: MIDI processing +//author: IXix + +slider1:0<0,16,1{Any,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16}>Input Channel +slider2:0<0,127,1>Note Min +slider3:127<0,127,1>Note Max + +// Note min/max (names) (disabled) +//slider2:0<0,127,1{C0,C#0,D0,D#0,E0,F0,F#0,G0,G#0,A0,A#0,B0,C1,C#1,D1,D#1,E1,F1,F#1,G1,G#1,A1,A#1,B1,C2,C#2,D2,D#2,E2,F2,F#2,G2,G#2,A2,A#2,B2,C3,C#3,D3,D#3,E3,F3,F#3,G3,G#3,A3,A#3,B3,C4,C#4,D4,D#4,E4,F4,F#4,G4,G#4,A4,A#4,B4,C5,C#5,D5,D#5,E5,F5,F#5,G5,G#5,A5,A#5,B5,C6,C#6,D6,D#6,E6,F6,F#6,G6,G#6,A6,A#6,B6,C7,C#7,D7,D#7,E7,F7,F#7,G7,G#7,A7,A#7,B7,C8,C#8,D8,D#8,E8,F8,F#8,G8,G#8,A8,A#8,B8,C9,C#9,D9,D#9,E9,F9,F#9,G9,G#9,A9,A#9,B9,C10,C#10,D10,D#10,E10,F10,F#10,G10}>Note Min +//slider3:127<0,127,1{C0,C#0,D0,D#0,E0,F0,F#0,G0,G#0,A0,A#0,B0,C1,C#1,D1,D#1,E1,F1,F#1,G1,G#1,A1,A#1,B1,C2,C#2,D2,D#2,E2,F2,F#2,G2,G#2,A2,A#2,B2,C3,C#3,D3,D#3,E3,F3,F#3,G3,G#3,A3,A#3,B3,C4,C#4,D4,D#4,E4,F4,F#4,G4,G#4,A4,A#4,B4,C5,C#5,D5,D#5,E5,F5,F#5,G5,G#5,A5,A#5,B5,C6,C#6,D6,D#6,E6,F6,F#6,G6,G#6,A6,A#6,B6,C7,C#7,D7,D#7,E7,F7,F#7,G7,G#7,A7,A#7,B7,C8,C#8,D8,D#8,E8,F8,F#8,G8,G#8,A8,A#8,B8,C9,C#9,D9,D#9,E9,F9,F#9,G9,G#9,A9,A#9,B9,C10,C#10,D10,D#10,E10,F10,F#10,G10}>Note Max + +slider4:0<0,127,1>Input Velocity Min +slider5:127<0,127,1>Input Velocity Max +slider6:0<0,1,1{Clamp To Range,Ignore Outside Range}>Input Velocity Mode +slider7:100<0,1000,1>Velocity Scaling(%) +slider8:0<0,100,1>Random Velocity (%) +slider9:0<0,127,1>Output Velocity Min +slider10:127<0,127,1>Output Velocity Max +slider11:0<-60,60,1>Transpose (semitones) +slider12:0<0,100,1>Random Pitch (%) +slider13:1<0,1,1{No,Yes}>Pitch Reset +slider14:0<0,16,1{Original,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16}>Output Channel +slider15:0<0,2,1{Original,Destination,Both}>Controller Routing + +in_pin:none +out_pin:none + +//////////////////////////////////////////////////////////////////////////////////////////// +@init + +statNoteOff = $x80; +statNoteOn = $x90; +statPitch = $xE0; +pitchCentre = 16384; + +//////////////////////////////////////////////////////////////////////////////////////////// +@slider + +// No fractions! +slider2 = slider2 | 0; +slider3 = slider3 | 0; +slider4 = slider4 | 0; +slider5 = slider5 | 0; +slider8 = slider8 | 0; +slider9 = slider9 | 0; +slider10 = slider10 | 0; +slider11 = slider11 | 0; +slider12 = slider12 | 0; + +// Clamp to respectable values +slider2 = min(slider2, slider3); +slider3 = max(slider2, slider3); +slider4 = min(slider4, slider5); +slider5 = max(slider4, slider5); +slider7 < 0 ? slider7 = 0; +slider8 = min(max(slider8, 0), 100); +slider9 = min(slider9, slider10); +slider10 = max(slider9, slider10); +slider11 = min(max(slider11, -60), 60); +slider12 = min(max(slider12, 0), 100); + +inChannel = slider1 - 1; // 0-15 is specific channel, -1 is any. +noteMin = slider2; +noteMax = slider3; +inVelMin = slider4; +inVelMax = slider5; +velMode = slider6; +velScale = slider7 * 0.01; +velocityRand = slider8 * 0.01; +outVelMin = slider9; +outVelMax = slider10; +transpose = slider11; +pitchRand = slider12 * 0.01; +pitchReset = slider13; +outChannel = slider14 - 1; // 0-15 is force specific, -1 is use original +controlMode = slider15 + 1; // +1 necessary for bit masking + +//////////////////////////////////////////////////////////////////////////////////////////// +@block +while +( + midirecv(offset, msg1, msg23) ? + ( + t += 1; // Counter for random stuff + + // Extract message type and channel + status = msg1 & $xF0; + channel = msg1 & $x0F; + + // Is it on a channel we care about? + (channel == inChannel || inChannel == -1)? + ( + // Set dest channel if necessary + outChannel > -1 ? channel = outChannel; + + // Is it a note event? + (status == statNoteOn || status == statNoteOff) ? + ( + // Extract note number and velocity + note = msg23 & $x7F; + velocity = msg23 >> 8; + + inVelRange = 0; + + velMode == 1 ? // Ignore notes outside velocity range + ( + velocity > 0 ? // Zero velocity is regarded as a note off + ( + inVelRange = (velocity < inVelMin || velocity > inVelMax) ? 0 : 1; + ); + ) + : // Clamp input velocity to range + ( + inVelRange = 1; + velocity < inVelMin ? velocity = inVelMin; + velocity > inVelMax ? velocity = inVelMax; + ); + + // Is it within our note/velocity range? + !(note < noteMin || note > noteMax) && inVelRange ? + ( + osc = sin(t); // Used to make random values positive or negative + + // Do velocity but leave fake note-off (zero velocity) events alone + velocity > 0 ? + ( + // Scale velocity by percentage, discard fractional values + velocity = (velocity * velScale) | 0; + + // Randomise clamped velocity by percentage, discard fractional values + velocityRand > 0 ? velocity = (velocity + (rand(velocity * velocityRand) * osc)) | 0; + + // Clamp output velocity + velocity = min(max(velocity, outVelMin), outVelMax); + ); + + // Do transpose and clamp result + note = min(max(note + transpose, 0), 127); + + // Generate and send pitch bend message if necessary + pitchRand > 0 ? + ( + pitch = pitchCentre + floor(rand(pitchCentre * pitchRand) * osc); + midisend(offset, statPitch + channel, pitch); + ); + + // Pass on modified MIDI message + midisend(offset, status + channel, note | (velocity << 8)); + ) + : // Outside note/velocity range, pass thru + ( + // Send pitch reset if necessary + pitchRand > 0 && pitchReset == 1 ? midisend(offset, statPitch + channel, pitchCentre); + + // Pass MIDI message on + midisend(offset, msg1, msg23); + ); + ) + : // Not a note + ( + controlMode & 1 ? // Pass thru on original channel if necessary + ( + midisend(offset, msg1, msg23); + ); + + controlMode & 2 ? // Route to destination channel if necessary + ( + midisend(offset, status | channel, msg23); + ); + ); + ) + : + ( + midisend(offset, msg1, msg23); // Not on our channel, pass thru + ); + + 1; // Force loop to continue until all messages have been processed + ); +); + diff --git a/Effects/ix/MIDI_Variant b/Effects/ix/MIDI_Variant new file mode 100644 index 0000000..43cd047 --- /dev/null +++ b/Effects/ix/MIDI_Variant @@ -0,0 +1,192 @@ +/******************************************************************************* +* Copyright 2007 - 2011, Philip S. Considine * +* This program is free software: you can redistribute it and/or modify * +* it under the terms of the GNU General Public License as published by * +* the Free Software Foundation, either version 3 of the License, or * +* (at your option) any later version. * +* * +* 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 (http://www.gnu.org/licenses/)for more details. * +*******************************************************************************/ + +desc: MIDI Pattern/Scale Variation Generator +desc: MIDI Pattern/Scale Variation Generator [IXix] +//tags: MIDI processing mapping +//author: IXix + +slider1:0<0,15,1{1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16}>Input Channel +slider2:0<0,127,1>Note Min +slider3:127<0,127,1>Note Max + +// Note min/max (names) (disabled) +//slider2:0<0,127,1{C0,C#0,D0,D#0,E0,F0,F#0,G0,G#0,A0,A#0,B0,C1,C#1,D1,D#1,E1,F1,F#1,G1,G#1,A1,A#1,B1,C2,C#2,D2,D#2,E2,F2,F#2,G2,G#2,A2,A#2,B2,C3,C#3,D3,D#3,E3,F3,F#3,G3,G#3,A3,A#3,B3,C4,C#4,D4,D#4,E4,F4,F#4,G4,G#4,A4,A#4,B4,C5,C#5,D5,D#5,E5,F5,F#5,G5,G#5,A5,A#5,B5,C6,C#6,D6,D#6,E6,F6,F#6,G6,G#6,A6,A#6,B6,C7,C#7,D7,D#7,E7,F7,F#7,G7,G#7,A7,A#7,B7,C8,C#8,D8,D#8,E8,F8,F#8,G8,G#8,A8,A#8,B8,C9,C#9,D9,D#9,E9,F9,F#9,G9,G#9,A9,A#9,B9,C10,C#10,D10,D#10,E10,F10,F#10,G10}>Note Min +//slider3:127<0,127,1{C0,C#0,D0,D#0,E0,F0,F#0,G0,G#0,A0,A#0,B0,C1,C#1,D1,D#1,E1,F1,F#1,G1,G#1,A1,A#1,B1,C2,C#2,D2,D#2,E2,F2,F#2,G2,G#2,A2,A#2,B2,C3,C#3,D3,D#3,E3,F3,F#3,G3,G#3,A3,A#3,B3,C4,C#4,D4,D#4,E4,F4,F#4,G4,G#4,A4,A#4,B4,C5,C#5,D5,D#5,E5,F5,F#5,G5,G#5,A5,A#5,B5,C6,C#6,D6,D#6,E6,F6,F#6,G6,G#6,A6,A#6,B6,C7,C#7,D7,D#7,E7,F7,F#7,G7,G#7,A7,A#7,B7,C8,C#8,D8,D#8,E8,F8,F#8,G8,G#8,A8,A#8,B8,C9,C#9,D9,D#9,E9,F9,F#9,G9,G#9,A9,A#9,B9,C10,C#10,D10,D#10,E10,F10,F#10,G10}>Note Max + +slider4:0<0,11,1{C,C#,D,Eb,E,F,F#,G,G#,A,Bb,B}>Root Note +slider5:/ix_scales:01 Major.txt:Scale File +slider6:5<0,10,1> Low Octave +slider7:5<0,10,1> High Octave +slider8:/ix_sequences:none:Sequence File +slider9:1<0,1,1{Off,On}>On/Off + +in_pin:none +out_pin:none + +//////////////////////////////////////////////////////////////////////////////// +@init + +// Memory offsets +inputTracker = 0; +noteMap = 128; +scale = 1024; +seq = 2048; + +// MIDI constants +statNoteOff = $x80; +statNoteOn = $x90; + +// File change flags +scaleFile = seqFile -1; + +//////////////////////////////////////////////////////////////////////////////// +@slider + +slider2 = min(max(slider2 | 0, 0), 127); // Remove fractions and clamp to legal range +slider3 = min(max(slider3 | 0, 0), 127); +slider6 = min(max(slider6 | 0, 0), 10); +slider7 = min(max(slider7 | 0, 0), 10); + +inChannel = slider1; +noteMin = slider2; +noteMax = slider3; +root = slider4; +octMin = slider6; +octMax = slider7; + +// Reset if necessary +slider9 != on ? +( + on = slider9; + step = 0; +); + +// Load scale if necessary +scaleFile != slider5 ? +( + scaleFile = slider5; + scaleSize = 0; + fileHandle = file_open(slider5); + fileHandle > 0 && file_text(fileHandle) ? + ( + while + ( + file_var(fileHandle, scale[scaleSize]); + file_avail(fileHandle) ? scaleSize += 1; + ); + file_close(fileHandle); + ); +); + +// Load sequence if necessary +seqFile != slider8 ? +( + seqFile = slider8; + seqSize = 0; + fileHandle = file_open(slider8); + fileHandle > 0 && file_text(fileHandle) ? + ( + while + ( + file_var(fileHandle,seq[seqSize]); + file_avail(fileHandle) ? seqSize += 1; + ); + file_close(fileHandle); + ); +); + +//////////////////////////////////////////////////////////////////////////////// +@block + +while +( + midirecv(offset, msg1, msg23) ? + ( + passThru = 1; // Reset pass flag + + // Extract message type and channel + status = msg1 & $xF0; + channel = msg1 & $x0F; + + // Is it on our channel and are we working? + channel == inChannel && on ? + ( + // Is it a note event? + (status == statNoteOn || status == statNoteOff) ? + ( + // Extract note number and velocity + note = msg23 & $x7F; + velocity = msg23 >> 8; + + // Is it within our note range? + !(note < noteMin || note > noteMax) ? + ( + // What kind of note event? + (status == statNoteOn && velocity > 0) ? // Note on (zero velocity is considered to be a note off) + ( + inputTracker[note] == 0 ? + ( + inputTracker[note] = 1; // Mark note as active + + // Are we on an active step? + seq[step] > 0 ? + ( + inputTracker[note] = 2; // Mark note as modified + + // Do note generation and clamp to useful range + noteMap[note] = scale[rand(scaleSize+1)] + root + (12 * (octMin + floor(rand(octMax - octMin)))); + noteMap[note] = min(max(noteMap[note], 0), 127); + + msg23 = noteMap[note] | (velocity << 8); // Modify MIDI data + ); + + // Advance/reset step counter + (step += 1) >= seqSize ? + ( + step = 0; + ); + ) + : + ( + // Note already active so block the message. + passThru = 0; + ); + ) + : // Note off + ( + inputTracker[note] > 0 ? + ( + // Is it a modified note? + inputTracker[note] == 2 ? + ( + msg23 = noteMap[note] | (velocity << 8); // Modify MIDI data + noteMap[note] = note; // Reset noteMap + ); + + inputTracker[note] = 0; // Mark note as inactive + ); + ); + ); + ); + ); + + // Pass message on if necessary + passThru ? + ( + midisend(offset, msg1, msg23); + ); + + 1; // Force loop to continue until all messages have been processed + ); +); diff --git a/Effects/ix/MIDI_Velocifier II b/Effects/ix/MIDI_Velocifier II new file mode 100644 index 0000000..4e9f3aa --- /dev/null +++ b/Effects/ix/MIDI_Velocifier II @@ -0,0 +1,134 @@ +/******************************************************************************* +* Copyright 2007 - 2011, Philip S. Considine * +* This program is free software: you can redistribute it and/or modify * +* it under the terms of the GNU General Public License as published by * +* the Free Software Foundation, either version 3 of the License, or * +* (at your option) any later version. * +* * +* 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 (http://www.gnu.org/licenses/)for more details. * +*******************************************************************************/ + +desc: MIDI Velocity Variation Generator +desc: MIDI Velocity Variation Generator [IXix] +//tags: MIDI processing mapping +//author: IXix + +slider1:0<0,15,1{1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16}>Input Channel +slider2:0<0,127,1>Note Min +slider3:127<0,127,1>Note Max + +// Note min/max (names) (disabled) +//slider2:0<0,127,1{C0,C#0,D0,D#0,E0,F0,F#0,G0,G#0,A0,A#0,B0,C1,C#1,D1,D#1,E1,F1,F#1,G1,G#1,A1,A#1,B1,C2,C#2,D2,D#2,E2,F2,F#2,G2,G#2,A2,A#2,B2,C3,C#3,D3,D#3,E3,F3,F#3,G3,G#3,A3,A#3,B3,C4,C#4,D4,D#4,E4,F4,F#4,G4,G#4,A4,A#4,B4,C5,C#5,D5,D#5,E5,F5,F#5,G5,G#5,A5,A#5,B5,C6,C#6,D6,D#6,E6,F6,F#6,G6,G#6,A6,A#6,B6,C7,C#7,D7,D#7,E7,F7,F#7,G7,G#7,A7,A#7,B7,C8,C#8,D8,D#8,E8,F8,F#8,G8,G#8,A8,A#8,B8,C9,C#9,D9,D#9,E9,F9,F#9,G9,G#9,A9,A#9,B9,C10,C#10,D10,D#10,E10,F10,F#10,G10}>Note Min +//slider3:127<0,127,1{C0,C#0,D0,D#0,E0,F0,F#0,G0,G#0,A0,A#0,B0,C1,C#1,D1,D#1,E1,F1,F#1,G1,G#1,A1,A#1,B1,C2,C#2,D2,D#2,E2,F2,F#2,G2,G#2,A2,A#2,B2,C3,C#3,D3,D#3,E3,F3,F#3,G3,G#3,A3,A#3,B3,C4,C#4,D4,D#4,E4,F4,F#4,G4,G#4,A4,A#4,B4,C5,C#5,D5,D#5,E5,F5,F#5,G5,G#5,A5,A#5,B5,C6,C#6,D6,D#6,E6,F6,F#6,G6,G#6,A6,A#6,B6,C7,C#7,D7,D#7,E7,F7,F#7,G7,G#7,A7,A#7,B7,C8,C#8,D8,D#8,E8,F8,F#8,G8,G#8,A8,A#8,B8,C9,C#9,D9,D#9,E9,F9,F#9,G9,G#9,A9,A#9,B9,C10,C#10,D10,D#10,E10,F10,F#10,G10}>Note Max + +slider4:64<0,127,1>Base Velocity +slider5:0<0,100>Variation (%) +slider6:/ix_sequences:none:Sequence File +slider7:1<0,1,1{Off,On}>On/Off + +in_pin:none +out_pin:none + +//////////////////////////////////////////////////////////////////////////////// +@init + +// MIDI constants +statNoteOn = $x90; + +//File change flags +seqFile -1; + +//////////////////////////////////////////////////////////////////////////////// +@slider + +slider2 = min(max(slider2 | 0, 0), 127); // Remove fractions and clamp to legal range +slider3 = min(max(slider3 | 0, 0), 127); +slider4 = min(max(slider4 | 0, 0), 127); +slider5 = min(max(slider5 | 0, 0), 100); + +inChannel = slider1; +noteMin = slider2; +noteMax = slider3; +value = slider4; +vRand = slider5 * 0.01; + +// Reset if necessary +slider7 != on ? +( + on = slider7; + step = 0; +); + +// Load sequence if necessary +seqFile != slider6 ? +( + seqFile = slider6; + seqSize = 0; + fileHandle = file_open(slider6); + fileHandle > 0 && file_text(fileHandle) ? + ( + while + ( + file_var(fileHandle,seq[seqSize]); + file_avail(fileHandle) ? seqSize += 1; + ); + file_close(fileHandle); + ); +); + +//////////////////////////////////////////////////////////////////////////////// +@block + +while +( + midirecv(offset, msg1, msg23) ? + ( + // Extract message type and channel + status = msg1 & $xF0; + channel = msg1 & $x0F; + + // Is it on our channel and are we working? + channel == inChannel && on ? + ( + // Extract velocity + velocity = msg23 >> 8; + + //Is it a note on? Zero velocity is considered to be a note off. + status == statNoteOn && velocity > 0 ? + ( + t += 1; + osc = sin(t); // Used to make random values positive or negative + + // Extract note number + note = msg23 & $x7F; + + // Is it within our note range? + note >= noteMin && note <= noteMax ? + ( + // Are we on an active step? + seq[step] > 0 ? + ( + // Generate random velocity value and clamp to legal range + velocity = min(max((value + (rand(value * vRand) * osc)) | 0, 0), 127); + + // Modify MIDI data + msg23 = note | (velocity << 8); + ); + + // Advance/reset step counter + (step += 1) >= seqSize ? + ( + step = 0; + ); + ); + ); + ); + + midisend(offset, msg1, msg23); // Pass MIDI message on + + 1; // Force loop to continue until all messages have been processed + ); +); diff --git a/Effects/ix/MIDI_Wobulator b/Effects/ix/MIDI_Wobulator new file mode 100644 index 0000000..14d7701 --- /dev/null +++ b/Effects/ix/MIDI_Wobulator @@ -0,0 +1,121 @@ +/******************************************************************************* +* Copyright 2007 - 2011, Philip S. Considine * +* This program is free software: you can redistribute it and/or modify * +* it under the terms of the GNU General Public License as published by * +* the Free Software Foundation, either version 3 of the License, or * +* (at your option) any later version. * +* * +* 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 (http://www.gnu.org/licenses/)for more details. * +*******************************************************************************/ + +desc:MIDI Pitch Wheel LFO +desc:MIDI Pitch Wheel LFO Generator [IXix] +//tags: MIDI modulation generator LFO +//author: IXix + +slider1:0<0,15,1{1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16}>MIDI Channel +slider2:0<0,100,1>Max Bend (%) +slider3:1<0,24,0.1>LFO Frequency +slider4:0<0,1,1{Hz,Beats}>LFO Units +slider5:6<0,9,1{1,2,4,8,16,32,64,128,256,512}>Updates Per Beat +slider6:1<0,1,1{Off,On}>On/Off + +in_pin:none +out_pin:none + +//////////////////////////////////////////////////////////////////////////////// +@init +statPitch = $xE0; +pitchCentre = 16384; + +//////////////////////////////////////////////////////////////////////////////// +@slider +slider2 = min(max(slider2, 0), 100); +slider3 = min(max(slider3, 0), 50); + +channel = slider1; +valMax = pitchCentre * slider2 * 0.01; +freq = slider3; +units = slider4; +updateFreq = 2 ^ slider5; + +// Reset if necessary +slider6 != on ? +( + on = slider6; + t = 0; + updateCounter = 0; +); + +//////////////////////////////////////////////////////////////////////////////// +@block +updateSamples = srate * 60 / tempo / updateFreq; + +units == 0 ? // Hz +( + sinTemp = 2 * $pi * freq; +) +: +units == 1 ? // Beats +( + sinTemp = 2 * $pi * tempo / 60 / freq; +); + +on ? +( + active = 1; + + updateCounter + samplesblock >= updateSamples ? + ( + updateSamples <= samplesblock ? + ( + // Possibly more than one update in the block + samplesLeft = samplesblock; + offset = 0; + while + ( + offset += updateSamples - updateCounter; + + t += (updateSamples - updateCounter) / srate; + value = pitchCentre + floor(valMax * sin(sinTemp * t)); + + midisend(offset, statPitch + channel, value); + samplesLeft -= updateSamples - updateCounter; + updateCounter = 0; + samplesLeft >= updateSamples; + ); + updateCounter = samplesLeft; + t += updateCounter / srate; + ) + : + ( + // Block is smaller than updateSamples, just one update + offset = updateCounter + samplesblock - updateSamples; + + t += offset / srate; + value = pitchCentre + floor(valMax * sin(sinTemp * t)); + + midisend(offset, statPitch + channel, value); + updateCounter = samplesblock - offset; + t += updateCounter / srate; + ); + ) + : + ( + // Just update counters + updateCounter += samplesblock; + t += samplesblock / srate; + ); +) +: +( + // Send off value only if not already sent + active ? + ( + midisend(offset, statController + channel, target | (offValue << 8)); + active = 0; + ); +); diff --git a/Effects/ix/Mixer_8xM-1xS b/Effects/ix/Mixer_8xM-1xS new file mode 100644 index 0000000..5f97cde --- /dev/null +++ b/Effects/ix/Mixer_8xM-1xS @@ -0,0 +1,128 @@ +/******************************************************************************* +* Copyright 2007 - 2011, Philip S. Considine * +* This program is free software: you can redistribute it and/or modify * +* it under the terms of the GNU General Public License as published by * +* the Free Software Foundation, either version 3 of the License, or * +* (at your option) any later version. * +* * +* 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 (http://www.gnu.org/licenses/)for more details. * +*******************************************************************************/ + +desc:8x Mono to 1x Stereo Mixer +desc:8x Mono to 1x Stereo Mixer [IXix] +//tags: mixer gain pan +//author: IXix + +//////////////////////////////////////////////////////////////////////////////// +slider1:0<-120,30,0.1>Level 1 (dB) +slider2:0<-120,30,0.1>Level 2 (dB) +slider3:0<-120,30,0.1>Level 3 (dB) +slider4:0<-120,30,0.1>Level 4 (dB) +slider5:0<-120,30,0.1>Level 5 (dB) +slider6:0<-120,30,0.1>Level 6 (dB) +slider7:0<-120,30,0.1>Level 7 (dB) +slider8:0<-120,30,0.1>Level 8 (dB) +slider9:0<0,1,0.01>Pan 1 L<>R +slider10:1<0,1,0.01>Pan 2 L<>R +slider11:0<0,1,0.01>Pan 3 L<>R +slider12:1<0,1,0.01>Pan 4 L<>R +slider13:0<0,1,0.01>Pan 5 L<>R +slider14:1<0,1,0.01>Pan 6 L<>R +slider15:0<0,1,0.01>Pan 7 L<>R +slider16:1<0,1,0.01>Pan 8 L<>R + +in_pin:input 1 +in_pin:input 2 +in_pin:input 3 +in_pin:input 4 +in_pin:input 5 +in_pin:input 6 +in_pin:input 7 +in_pin:input 8 +out_pin:output L +out_pin:output R + +//////////////////////////////////////////////////////////////////////////////// +@init +gainMin = -120; +gainMax = 30; + +//////////////////////////////////////////////////////////////////////////////// +@slider + +// Clamp to repectable values +slider1 = min(max(slider1, gainMin), gainMax); +slider2 = min(max(slider2, gainMin), gainMax); +slider3 = min(max(slider3, gainMin), gainMax); +slider4 = min(max(slider4, gainMin), gainMax); +slider5 = min(max(slider5, gainMin), gainMax); +slider6 = min(max(slider6, gainMin), gainMax); +slider7 = min(max(slider7, gainMin), gainMax); +slider8 = min(max(slider8, gainMin), gainMax); + +slider9 = min(max(slider9, 0), 1); +slider10 = min(max(slider10, 0), 1); +slider11 = min(max(slider11, 0), 1); +slider12 = min(max(slider12, 0), 1); +slider13 = min(max(slider13, 0), 1); +slider14 = min(max(slider14, 0), 1); +slider15 = min(max(slider15, 0), 1); +slider16 = min(max(slider16, 0), 1); + +//Calculate gains and pans +gain1 = 2 ^ (slider1 / 6); L1 = sqrt(1 - slider9); R1 = sqrt(slider9); +gain2 = 2 ^ (slider2 / 6); L2 = sqrt(1 - slider10); R2 = sqrt(slider10); +gain3 = 2 ^ (slider3 / 6); L3 = sqrt(1 - slider11); R3 = sqrt(slider11); +gain4 = 2 ^ (slider4 / 6); L4 = sqrt(1 - slider12); R4 = sqrt(slider12); +gain5 = 2 ^ (slider5 / 6); L5 = sqrt(1 - slider13); R5 = sqrt(slider13); +gain6 = 2 ^ (slider6 / 6); L6 = sqrt(1 - slider14); R6 = sqrt(slider14); +gain7 = 2 ^ (slider7 / 6); L7 = sqrt(1 - slider15); R7 = sqrt(slider15); +gain8 = 2 ^ (slider8 / 6); L8 = sqrt(1 - slider16); R8 = sqrt(slider16); + +modL1 = gain1 * L1; +modL2 = gain2 * L2; +modL3 = gain3 * L3; +modL4 = gain4 * L4; +modL5 = gain5 * L5; +modL6 = gain6 * L6; +modL7 = gain7 * L7; +modL8 = gain8 * L8; + +modR1 = gain1 * R1; +modR2 = gain2 * R2; +modR3 = gain3 * R3; +modR4 = gain4 * R4; +modR5 = gain5 * R5; +modR6 = gain6 * R6; +modR7 = gain7 * R7; +modR8 = gain8 * R8; + +//////////////////////////////////////////////////////////////////////////////// +@sample + +// Catch the inputs +in1 = spl0; in2 = spl1; in3 = spl2; in4 = spl3; +in5 = spl4; in6 = spl5; in7 = spl6; in8 = spl7; + +// Do the left mix +spl0 = (in1 * modL1) + + (in2 * modL2) + + (in3 * modL3) + + (in4 * modL4) + + (in5 * modL5) + + (in6 * modL6) + + (in7 * modL7) + + (in8 * modL8); + +// Do the right mix +spl1 = (in1 * modR1) + + (in2 * modR2) + + (in3 * modR3) + + (in4 * modR4) + + (in5 * modR5) + + (in6 * modR6) + + (in7 * modR7) + + (in8 * modR8); diff --git a/Effects/ix/Mixer_8xS-1xS b/Effects/ix/Mixer_8xS-1xS new file mode 100644 index 0000000..a6caa89 --- /dev/null +++ b/Effects/ix/Mixer_8xS-1xS @@ -0,0 +1,91 @@ +/******************************************************************************* +* Copyright 2007 - 2011, Philip S. Considine * +* This program is free software: you can redistribute it and/or modify * +* it under the terms of the GNU General Public License as published by * +* the Free Software Foundation, either version 3 of the License, or * +* (at your option) any later version. * +* * +* 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 (http://www.gnu.org/licenses/)for more details. * +*******************************************************************************/ + +desc:8x Stereo to 1x Stereo Mixer +desc:8x Stereo to 1x Stereo Mixer [IXix] +//tags: mixer gain +//author: IXix + +slider1:0<-60,30,0.1>Level 1+2 (dB) +slider2:0<-60,30,0.1>Level 3+4 (dB) +slider3:0<-60,30,0.1>Level 5+6 (dB) +slider4:0<-60,30,0.1>Level 7+8 (dB) +slider5:0<-60,30,0.1>Level 9+10 (dB) +slider6:0<-60,30,0.1>Level 11+12 (dB) +slider7:0<-60,30,0.1>Level 13+14 (dB) +slider8:0<-60,30,0.1>Level 15+16 (dB) + +in_pin:input 1 L +in_pin:input 1 R +in_pin:input 2 L +in_pin:input 2 R +in_pin:input 3 L +in_pin:input 3 R +in_pin:input 4 L +in_pin:input 4 R +in_pin:input 5 L +in_pin:input 5 R +in_pin:input 6 L +in_pin:input 6 R +in_pin:input 7 L +in_pin:input 7 R +in_pin:input 8 L +in_pin:input 8 R +out_pin:output L +out_pin:output R +/////////////////////////////////////////////////////////////////////////////// +@init +gainMin = -60; +gainMax = 30; + +/////////////////////////////////////////////////////////////////////////////// +@slider +slider1 = min(max(slider1, gainMin), gainMax); +slider2 = min(max(slider2, gainMin), gainMax); +slider3 = min(max(slider3, gainMin), gainMax); +slider4 = min(max(slider4, gainMin), gainMax); +slider5 = min(max(slider5, gainMin), gainMax); +slider6 = min(max(slider6, gainMin), gainMax); +slider7 = min(max(slider7, gainMin), gainMax); +slider8 = min(max(slider8, gainMin), gainMax); + +levelA = 2 ^ (slider1 / 6); +levelB = 2 ^ (slider2 / 6); +levelC = 2 ^ (slider3 / 6); +levelD = 2 ^ (slider4 / 6); +levelE = 2 ^ (slider5 / 6); +levelF = 2 ^ (slider6 / 6); +levelG = 2 ^ (slider7 / 6); +levelH = 2 ^ (slider8 / 6); + +/////////////////////////////////////////////////////////////////////////////// +@sample +// Do the left mix +spl0 = (spl0 * levelA) + + (spl2 * levelB) + + (spl4 * levelC) + + (spl6 * levelD) + + (spl8 * levelE) + + (spl10 * levelF)+ + (spl12 * levelG)+ + (spl14 * levelH); + +// Do the right mix +spl1 = (spl1 * levelA) + + (spl3 * levelB) + + (spl5 * levelC) + + (spl7 * levelD) + + (spl9 * levelE) + + (spl11 * levelF)+ + (spl13 * levelG)+ + (spl15 * levelH); diff --git a/Effects/ix/PhaseAdjustingRouter b/Effects/ix/PhaseAdjustingRouter new file mode 100644 index 0000000..d49762e --- /dev/null +++ b/Effects/ix/PhaseAdjustingRouter @@ -0,0 +1,37 @@ +/******************************************************************************* +* Copyright 2007 - 2011, Philip S. Considine * +* This program is free software: you can redistribute it and/or modify * +* it under the terms of the GNU General Public License as published by * +* the Free Software Foundation, either version 3 of the License, or * +* (at your option) any later version. * +* * +* 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 (http://www.gnu.org/licenses/)for more details. * +*******************************************************************************/ + +desc:Channel Router w/Polarity +desc:Channel Router w/Polarity [IXix] +//tags: processing routing polarity phase +//author: IXix + +slider1:0<0,31,1{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}>Input Channels +slider2:0<0,3,1{Normal,Invert Left,Invert Right,Invert Both}>Polarity Mode +slider3:0<0,31,1{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}>Output Channels +slider4:0<0,1,1{Replace,Merge}>Output Mode + +//////////////////////////////////////////////////////////////////////////////// +@slider +inL = slider1 * 2; +inR = inL + 1; +phaseL = slider2 & 1 ? -1 : 1; +phaseR = slider2 & 2 ? -1 : 1; +outL = slider3 * 2; +outR = outL + 1; +merge = slider4; + +//////////////////////////////////////////////////////////////////////////////// +@sample +spl(outL) = spl(outL) * merge + spl(inL) * phaseL; +spl(outR) = spl(outR) * merge + spl(inR) * phaseR; diff --git a/Effects/ix/StereoPhaseInvert b/Effects/ix/StereoPhaseInvert new file mode 100644 index 0000000..ae950e2 --- /dev/null +++ b/Effects/ix/StereoPhaseInvert @@ -0,0 +1,35 @@ +/******************************************************************************* +* Copyright 2007 - 2011, Philip S. Considine * +* This program is free software: you can redistribute it and/or modify * +* it under the terms of the GNU General Public License as published by * +* the Free Software Foundation, either version 3 of the License, or * +* (at your option) any later version. * +* * +* 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 (http://www.gnu.org/licenses/)for more details. * +*******************************************************************************/ + +desc:Channel Polarity Control +desc:Channel Polarity Control [IXix] +//tags: processing phase polarity +//author: IXix + +slider1:0<0,3,1{Normal,Invert Left,Invert Right,Invert Both}>Polarity Mode + +in_pin:left input +in_pin:right input +out_pin:left output +out_pin:right output + +@slider +modL = slider1 & 1 ? -1 : 1; +modR = slider1 & 2 ? -1 : 1; + +@sample +spl0 *= modL ; +spl1 *= modR ; + + + diff --git a/Effects/ix/Switcher b/Effects/ix/Switcher new file mode 100644 index 0000000..4c188f1 --- /dev/null +++ b/Effects/ix/Switcher @@ -0,0 +1,28 @@ +/******************************************************************************* +* Copyright 2007 - 2011, Philip S. Considine * +* This program is free software: you can redistribute it and/or modify * +* it under the terms of the GNU General Public License as published by * +* the Free Software Foundation, either version 3 of the License, or * +* (at your option) any later version. * +* * +* 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 (http://www.gnu.org/licenses/)for more details. * +*******************************************************************************/ + +desc:8 channel input switcher + +slider1:0<0,31,1{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}>Input channelsOutput Source + +@slider +source = slider1; + +ch12 = source == 0 ? 1 : 0; +ch34 = source == 1 ? 1 : 0; +ch56 = source == 2 ? 1 : 0; +ch78 = source == 3 ? 1 : 0; + +@sample +spl0 = spl0 * ch12 + spl2 * ch34 + spl4 * ch56 + spl6 * ch78; +spl1 = spl1 * ch12 + spl3 * ch34 + spl5 * ch56 + spl7 * ch78; diff --git a/Effects/ix/Switcher2 b/Effects/ix/Switcher2 new file mode 100644 index 0000000..9785b92 --- /dev/null +++ b/Effects/ix/Switcher2 @@ -0,0 +1,62 @@ +/******************************************************************************* +* Copyright 2007 - 2011, Philip S. Considine * +* This program is free software: you can redistribute it and/or modify * +* it under the terms of the GNU General Public License as published by * +* the Free Software Foundation, either version 3 of the License, or * +* (at your option) any later version. * +* * +* 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 (http://www.gnu.org/licenses/)for more details. * +*******************************************************************************/ + +desc:8-Channel Input Switcher +desc:8-Channel Input Switcher [IXix] +//tags: processing routing mixer +//author: IXix + + +slider1:0<0,3,1{1+2,3+4,5+6,7+8}>Output Source +slider2:0<-60,30,0.1>Level 1+2 (dB) +slider3:0<-60,30,0.1>Level 3+4 (dB) +slider4:0<-60,30,0.1>Level 5+6 (dB) +slider5:0<-60,30,0.1>Level 7+8 (dB) + +in_pin:input 1 +in_pin:input 2 +in_pin:input 3 +in_pin:input 4 +in_pin:input 5 +in_pin:input 6 +in_pin:input 7 +in_pin:input 8 +out_pin:output L +out_pin:output R + +@init +gainMin = -60; +gainMax = 30; + +@slider + +slider2 = min(max(slider2, gainMin), gainMax); +slider3 = min(max(slider3, gainMin), gainMax); +slider4 = min(max(slider4, gainMin), gainMax); +slider5 = min(max(slider5, gainMin), gainMax); + +source = slider1; + +gain12 = 2 ^ (slider2 / 6); +gain34 = 2 ^ (slider3 / 6); +gain56 = 2 ^ (slider4 / 6); +gain78 = 2 ^ (slider5 / 6); + +ch12 = gain12 * (source == 0 ? 1 : 0); +ch34 = gain34 * (source == 1 ? 1 : 0); +ch56 = gain56 * (source == 2 ? 1 : 0); +ch78 = gain78 * (source == 3 ? 1 : 0); + +@sample +spl0 = spl0 * ch12 + spl2 * ch34 + spl4 * ch56 + spl6 * ch78; +spl1 = spl1 * ch12 + spl3 * ch34 + spl5 * ch56 + spl7 * ch78; diff --git a/Effects/ix/SwixMitch b/Effects/ix/SwixMitch new file mode 100644 index 0000000..ebc291e --- /dev/null +++ b/Effects/ix/SwixMitch @@ -0,0 +1,57 @@ +/******************************************************************************* +* Copyright 2007 - 2011, Philip S. Considine * +* This program is free software: you can redistribute it and/or modify * +* it under the terms of the GNU General Public License as published by * +* the Free Software Foundation, either version 3 of the License, or * +* (at your option) any later version. * +* * +* 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 (http://www.gnu.org/licenses/)for more details. * +*******************************************************************************/ + +desc:SwixMitch (4x Stereo In, 2 Bus X-Fader) +desc:SwixMitch 4x Stereo Input 2 Bus X-Fader [IXix] +//tags: processing routing mixer +//author: IXix + + +slider1:3<0,3,1{Off,A,B,A+B}>Destination 1+2 +slider2:0<0,3,1{Off,A,B,A+B}>Destination 3+4 +slider3:0<0,3,1{Off,A,B,A+B}>Destination 5+6 +slider4:0<0,3,1{Off,A,B,A+B}>Destination 7+8 +slider5:0.5<0,1>Mix A<>B + +in_pin:input 1 +in_pin:input 2 +in_pin:input 3 +in_pin:input 4 +in_pin:input 5 +in_pin:input 6 +in_pin:input 7 +in_pin:input 8 +out_pin:output L +out_pin:output R + +//////////////////////////////////////////////////////////////////////////////// +@slider +dest12 = slider1; +dest34 = slider2; +dest56 = slider3; +dest78 = slider4; + +slider5 = min(max(slider5, 0), 1); + +// Calculate the gain multipliers +mixA = 1 - slider5; +mixB = slider5; +ch12 = (dest12 == 1 || dest12 == 3 ? 1:0) * mixA + (dest12 == 2 || dest12 == 3 ? 1:0) * mixB; +ch34 = (dest34 == 1 || dest34 == 3 ? 1:0) * mixA + (dest34 == 2 || dest34 == 3 ? 1:0) * mixB; +ch56 = (dest56 == 1 || dest56 == 3 ? 1:0) * mixA + (dest56 == 2 || dest56 == 3 ? 1:0) * mixB; +ch78 = (dest78 == 1 || dest78 == 3 ? 1:0) * mixA + (dest78 == 2 || dest78 == 3 ? 1:0) * mixB; + +//////////////////////////////////////////////////////////////////////////////// +@sample +spl0 = spl0 * ch12 + spl2 * ch34 + spl4 * ch56 + spl6 * ch78; +spl1 = spl1 * ch12 + spl3 * ch34 + spl5 * ch56 + spl7 * ch78; diff --git a/Effects/loopsamplers/autoloop b/Effects/loopsamplers/autoloop new file mode 100644 index 0000000..5ef1c80 --- /dev/null +++ b/Effects/loopsamplers/autoloop @@ -0,0 +1,110 @@ +// This effect Copyright (C) 2004 and later Cockos Incorporated +// License: LGPL - http://www.gnu.org/licenses/lgpl.html + +desc:Auto Looper +//tags: processing sampler +//author: Cockos + +slider1:0<-120,6,1>Wet (dB) +slider2:0<-120,6,1>Dry (dB) +slider3:-30<-100,60,1>Threshold (dB) +slider4:100<1,1000,20>Threshold Length (ms) +slider5:60<0,400,10>Edge Overlap (ms) +slider6:100<0,4000,30>Minimum Length (ms) +slider7:0<-100,6,1>Decay (dB) +slider8:1<0,1,1{Disabled,Enabled}>Record +slider9:0<0,1,1,{Disabled,Enabled}>Flush Loop On Playback Start + +in_pin:input +out_pin:output (mono) +out_pin:output (mono) + +@init + isplay=1; + silcnt=rbufpos=pbuflen=pbuf=0; + rbuf=1000000/2; + sscnt=sstot=playfade=pbufpos=0; + ext_noinit=0; + +@serialize + +file_var(0,isplay); +file_var(0,pbuf); +file_var(0,pbuflen); +file_var(0,playfade); +isplay ? file_mem(0,pbuf,pbuflen); + + + +@slider + wet=2 ^ (slider1/6); + dry=2 ^ (slider2/6); + silthres=2 ^ (slider3/6); + sillen=srate*slider4/1000; + olsize=srate*slider5/1000; + minsize=slider6*srate/1000; + decay=2 ^ (slider7/6); + playfade=0; + ext_noinit=slider9<0.5; + +@sample + +s0=spl0; +issil=abs(spl0) < silthres; + +slider8 ? ( + isplay ? ( + rbuf[sstot]=s0; + sstot+=1; + + issil ? ( + sscnt+=1; + sscnt > sstot*0.5 ? sstot=sscnt=0; // if our silent samples are a significant percent + ); + + sstot > sillen ? (rbufpos=sstot; isplay=sstot=sscnt=silcnt=0; ); + ) : ( + + rbuf[rbufpos]=spl0; + + (rbufpos+=1) >= 500000 ? ( + isplay=1; + pbuflen=rbufpos-silcnt; + tmp=rbuf; rbuf=pbuf; pbuf=tmp; + rbufpos=pbufpos=0; + ); + + issil ? ( + (silcnt+=1) > sillen ? ( + rbufpos > minsize ? ( + isplay=1; + pbuflen=rbufpos-silcnt; + tmp=rbuf; rbuf=pbuf; pbuf=tmp; + rbufpos=0; + pbufpos=silcnt; + ); + silcnt=0; + ); + ) + : + silcnt=0; + ); +); + +isplay || playfade > 0 ? ( + + spl0= (pbuf[pbufpos]*=decay); + + pbufpos < olsize ? ( + tmpsc=pbufpos/olsize; + spl0=spl0*tmpsc + pbuf[pbuflen-olsize+pbufpos]*(1-tmpsc); + ); + + spl0=spl0*playfade; + playfade = isplay ? min(playfade+0.01,1) : max(playfade-0.01,0); + (pbufpos+=1) > (pbuflen-olsize-1) ? pbufpos=0; +); + +spl0=spl0*wet + s0*dry; + +spl1=spl0; diff --git a/Effects/loopsamplers/loopsampler-granul b/Effects/loopsamplers/loopsampler-granul new file mode 100644 index 0000000..afe3183 --- /dev/null +++ b/Effects/loopsamplers/loopsampler-granul @@ -0,0 +1,254 @@ +// This effect Copyright (C) 2004 and later Cockos Incorporated +// License: LGPL - http://www.gnu.org/licenses/lgpl.html + +desc:Granular Loop Sampler +//tags: processing sampler granular +//author: Cockos + +/* trigger 1 starts recording + trigger 2 stops recording + looped play + trigger 3 one off play +*/ + +slider1:0<-120,12,1>Loop Volume (dB) +slider2:1<-8,8,0.1>Play Speed (neg=reverse) +slider3:1<0,10,1>Trigger Base (uses x...x+3) +slider4:0<0,30000,1>Length (ms) +slider5:1000<0,30000,200>Loop Granularity (ms) +slider6:16000<0,30000,200>Maximum Length (ms) +slider7:-120<-120,0,1>Silence Removal Threshold (dB) +slider8:0<0,6,1{Stopped,Recording,Playing Looped,Playing Once,Playing Looped+Recording,Playing Once+Recording>State + +/* idle mix=volume when not playing sample + play mix = mix when playing sample + record mix = mix of new and old sample + playlen lets you play only part of the sample + + if you hit button1 and isrec is active, we switch to play, keeping isrec + active. + + if you hit button1 and isplay is active, we mix in the source signal with + the sample. + + +*/ + + +in_pin:input +out_pin:output (mono) +out_pin:output (mono) + +@init +isplay=isrec=recpos=playpos=0; +ext_noinit=1; + + +@slider +playmix=2 ^ (slider1/6); +trigstart=(2 ^ ((slider3+0.1)|0))|0; +playspeed=slider2; + +slider4 < 0 ? slider4=0; +gmaxl=1000000000/srate; +slider4=min(slider4,gmaxl); + +granule=(slider5*srate/1000)|0; +maxgran=(slider6*srate/1000)|0; +maxgran > 1000000 ? maxgran = 1000000; + +olsize=0; + +silthresh=slider7 > -119 ? (2^(slider7/6)) : 0; + +vstpos=0*srate/1000; +vreclen=(slider4*srate/1000-vstpos)-olsize; +slider8=lslider8; + +@serialize +file_var(0,isplay); +file_var(0,isrec); +file_var(0,recpos); +!isrec ? file_mem(0,0,recpos); + +file_avail(0) >= 0 ?( + a=0; + slider4=(recpos * 1000 / srate)|0; + sliderchange(slider4); +); + +@block +trigger&(trigstart) ? ( + isplay ? // if playing, switch record and play on + ( + !isrec ? lastioffs=-1; + isrec=1; + ) + : + ( + isrec ? ( // start playing, but keep recording + playpos=0; + isplay=1; + lastioffs=-1; + ) + : + ( // stop playing, start recording + recpos=isplay=0; isrec=1; + silstart=-1; + ) + ) +); +trigger&(trigstart*6) ? +( + isrec ? ( + isplay ? + ( + isrec=0; + ) + : + ( + // switch to playback + playpos=isrec=0; + isplay=vreclen > 4 ? (trigger&(trigstart*4) ? 2 : 1) : 0; + + orecpos=recpos; + + recpos = (((silstart + granule/2) / granule)|0) * granule; + recpos < granule ? recpos=granule; + recpos > maxgran ? recpos=maxgran; + + slider4=(recpos * 1000 / srate)|0; + sliderchange(slider4); + vreclen=(slider4*srate/1000-vstpos)-olsize; + + // figure out what the delta between where we need to be and where we + // are is + + // how many samples we went over + delta=((orecpos-recpos)*abs(playspeed))%granule; + delta > 0 ? ( + playpos=playspeed > 0 ? delta : vreclen-delta; + ); // eat the samples + + freembuf(recpos); // free any unused memory + ) + ) : ( + isplay && !(trigger&(trigstart*4)) ? isplay=0 : ( + // start over playback + playpos=0; + isplay=vreclen > 4 ? (trigger&(trigstart*4)?2:1) : 0; + ) + ) +); + +lslider8=slider8; +isplay ? +( + isrec ? + ( + slider8=3+isplay; + ) + : + slider8=1+isplay; +) : ( + slider8=isrec?1:0; +); + +slider8!=lslider8 ? +( + lslider8=slider8; + sliderchange(slider8); +) + +@sample + +// if recording, record, and if we run out of +// buffer, switch mode to looped playback +isrec ? ( + + isplay ? + ( + offs = playspeed<0?vreclen-playpos:playpos; + ioffs=offs|0; // fr=offs-ioffs; + lastioffs < 0 ? + ( + vstpos[ioffs] += spl0; + lastioffs=ioffs; + ) + : + ( + cnt=0; + mcnt=(abs(playspeed)+0.9)|0; + while( + ioffs != lastioffs ? + ( + //update current sample with our sample, but only once + //maybe get around this by just adding spl0*(1-fr) + vstpos[lastioffs] += spl0; + lastioffs+=sign(playspeed); + lastioffs < 0 ? (lastioffs=vreclen-1) : (lastioffs >= vreclen ? lastioffs=0); + ); + ioffs != lastioffs && (cnt+=1) < mcnt; + ) // while + ) + ) + : + ( + recpos >= maxgran ? + ( + isplay=1; + playpos=isrec=0; + + recpos = (((silstart / granule) + granule/2)|0) * granule; + recpos < granule ? recpos=granule; + recpos > maxgran ? recpos=maxgran; + + slider4=(recpos * 1000 / srate)|0; + sliderchange(slider4); + vreclen=(slider4*srate/1000-vstpos)-olsize; + ) : ( + recpos[0]=spl0; + recpos+=1; + + abs(spl0) >= silthresh ? + ( + silstart < 0 ? + ( + recpos=1; + recpos[-1]=spl0; + vstpos=0; + ); + silstart=recpos; + ); + slider4=(silstart * 1000 / srate)|0; + sliderchange(slider4); + vreclen=(silstart-vstpos)-olsize; + ); + ); +); // if isrec + + +// if isplay = 1, loop playback +// if isplay = 2, one shot playback +isplay ? ( + isplay==2 || olsize <= playpos ? ( + offs = playspeed<0?vreclen-playpos:playpos; + ioffs=offs|0; fr=offs-ioffs; + spl0=spl0 + (vstpos[ioffs]*(1-fr)+vstpos[ioffs+1]*fr)*playmix; // one shot gets no overlap + ) : ( + tmpmix=playpos/olsize; + offs=playspeed<0?vreclen-playpos:playpos; + ioffs=offs|0; fr=offs-ioffs; + spl0=spl0 + (vstpos[ioffs]*(1-fr)+vstpos[ioffs+1]*fr)*playmix*tmpmix; // overlap with self + offs=playspeed<0?playpos:vreclen+playpos; + ioffs=offs|0; fr=offs-ioffs; + spl0=spl0 + (vstpos[ioffs]*(1-fr)+vstpos[ioffs+1]*fr)*playmix*(1-tmpmix); // overlap with self + ); + + spl1=spl0; + + isplay == 2 ? ( + playpos+abs(playspeed) > vreclen ? isrec=isplay=playpos=0 : playpos=playpos+abs(playspeed); + ) : ( + playpos=playpos+abs(playspeed)>vreclen?0:playpos+abs(playspeed); + ) +); diff --git a/Effects/loopsamplers/loopsampler-m2 b/Effects/loopsamplers/loopsampler-m2 new file mode 100644 index 0000000..37de6a4 --- /dev/null +++ b/Effects/loopsamplers/loopsampler-m2 @@ -0,0 +1,225 @@ +// This effect Copyright (C) 2004 and later Cockos Incorporated +// License: LGPL - http://www.gnu.org/licenses/lgpl.html + +desc:Loop Sampler +//tags: processing sampler +//author: Cockos + +/* trigger 1 starts recording + trigger 2 stops recording + looped play + trigger 3 one off play +*/ + +slider1:0<-120,12,1>Loop Volume (dB) +slider2:1<-8,8,0.1>Play Speed (neg=reverse) +slider3:0<0,30000,1>Play Start Position (ms) +slider4:0<0,30000,1>Play End Position (ms) +slider5:1<0,10,1>Trigger Base (uses x..x+3) +slider6:10<0,1000,1>Edge Overlap (ms) +slider7:-120<-120,0,1>Silence Removal Threshold (dB) +slider8:0<0,6,1{Stopped,Recording,Playing Looped,Playing Once,Playing Looped+Recording,Playing Once+Recording>State + +/* idle mix=volume when not playing sample + play mix = mix when playing sample + record mix = mix of new and old sample + playlen lets you play only part of the sample + + if you hit button1 and isrec is active, we switch to play, keeping isrec + active. + + if you hit button1 and isplay is active, we mix in the source signal with + the sample. + + +*/ + + +in_pin:input +out_pin:output (mono) +out_pin:output (mono) + +@init +// isplay=isrec=reclen=recpos=playpos=0; +// dont set these here because sometimes init will get called after the state is loaded +ext_noinit=1; + + +@slider +playmix=2 ^ (slider1/6); +trigstart=(2 ^ ((slider5+0.1)|0))|0; +playspeed=slider2; + +slider3 < 0 ? slider3=0; +slider4 < 0 ? slider4=0; +gmaxl=1000000000/srate; +slider3=min(slider3,gmaxl); +slider4=min(slider4,gmaxl); + +olsize=srate*slider6/1000; +slider4=max(slider3,slider4); + +silthresh=slider7 > -119 ? (2^(slider7/6)) : 0; + +vstpos=slider3*srate/1000; +vreclen=(slider4*srate/1000-vstpos)-olsize; +slider8=lslider8; + +@serialize +file_var(0,isplay); +file_var(0,isrec); +file_var(0,reclen); +file_var(0,recpos); +file_var(0,0);//playpos); +!isrec ? file_mem(0,0,reclen); + +@block +trigger&(trigstart) ? ( + isplay ? // if playing, switch record and play on + ( + !isrec ? lastioffs=-1; + isrec=1; + ) + : + ( + isrec ? ( // start playing, but keep recording + playpos=0; + isplay=1; + lastioffs=-1; + ) + : + ( // stop playing, start recording + recpos=isplay=0; isrec=1; + slider3=0; + silstart=-1; + sliderchange(slider3); + ) + ) +); +trigger&(trigstart*6) ? +( + isrec ? ( + isplay ? + ( + isrec=0; + ) + : + ( + // switch to playback + playpos=isrec=0; + isplay=vreclen > 4 ? (trigger&(trigstart*4) ? 2 : 1) : 0; + freembuf(reclen); // free any unused memory + + ) + ) : ( + isplay && !(trigger&(trigstart*4)) ? isplay=0 : ( + // start over playback + playpos=0; + isplay=vreclen > 4 ? (trigger&(trigstart*4)?2:1) : 0; + ) + ) +); + +lslider8=slider8; +isplay ? +( + isrec ? + ( + slider8=3+isplay; + ) + : + slider8=1+isplay; +) : ( + slider8=isrec?1:0; +); + +slider8!=lslider8 ? +( + lslider8=slider8; + sliderchange(slider8); +) + +@sample + +// if recording, record, and if we run out of +// buffer, switch mode to looped playback +isrec ? ( + + isplay ? + ( + offs = playspeed<0?vreclen-playpos:playpos; + ioffs=offs|0; // fr=offs-ioffs; + lastioffs < 0 ? + ( + vstpos[ioffs] += spl0; + lastioffs=ioffs; + ) + : + ( + cnt=0; + mcnt=(abs(playspeed)+0.9)|0; + while( + ioffs != lastioffs ? + ( + //update current sample with our sample, but only once + //maybe get around this by just adding spl0*(1-fr) + vstpos[lastioffs] += spl0; + lastioffs+=sign(playspeed); + lastioffs < 0 ? (lastioffs=vreclen-1) : (lastioffs >= vreclen ? lastioffs=0); + ); + ioffs != lastioffs && (cnt+=1) < mcnt; + ) // while + ) + ) + : + ( + recpos >= 1000000 ? + ( + isplay=1; + playpos=isrec=0; + ) : ( + recpos[0]=spl0; + reclen=recpos+=1; + + abs(spl0) >= silthresh ? + ( + silstart < 0 ? + ( + recpos=1; + recpos[-1]=spl0; + vstpos=0; + ); + silstart=recpos; + ); + slider4=(silstart * 1000 / srate)|0; + sliderchange(slider4); + vreclen=(silstart-vstpos)-olsize; + ); + ); +); // if isrec + + +// if isplay = 1, loop playback +// if isplay = 2, one shot playback +isplay ? ( + isplay==2 || olsize <= playpos ? ( + offs = playspeed<0?vreclen-playpos:playpos; + ioffs=offs|0; fr=offs-ioffs; + spl0=spl0 + (vstpos[ioffs]*(1-fr)+vstpos[ioffs+1]*fr)*playmix; // one shot gets no overlap + ) : ( + tmpmix=playpos/olsize; + offs=playspeed<0?vreclen-playpos:playpos; + ioffs=offs|0; fr=offs-ioffs; + spl0=spl0 + (vstpos[ioffs]*(1-fr)+vstpos[ioffs+1]*fr)*playmix*tmpmix; // overlap with self + offs=playspeed<0?playpos:vreclen+playpos; + ioffs=offs|0; fr=offs-ioffs; + spl0=spl0 + (vstpos[ioffs]*(1-fr)+vstpos[ioffs+1]*fr)*playmix*(1-tmpmix); // overlap with self + ); + + spl1=spl0; + + isplay == 2 ? ( + playpos+abs(playspeed) > vreclen ? isrec=isplay=playpos=0 : playpos=playpos+abs(playspeed); + ) : ( + playpos=playpos+abs(playspeed)>vreclen?0:playpos+abs(playspeed); + ) +); diff --git a/Effects/loopsamplers/loopsampler-m2-midi b/Effects/loopsamplers/loopsampler-m2-midi new file mode 100644 index 0000000..b55caa7 --- /dev/null +++ b/Effects/loopsamplers/loopsampler-m2-midi @@ -0,0 +1,238 @@ +// This effect Copyright (C) 2004 and later Cockos Incorporated +// License: LGPL - http://www.gnu.org/licenses/lgpl.html + +desc:Loop Sampler w/MIDI Triggers +//tags: processing sampler +//author: Cockos + +slider1:0<-120,12,1>Loop Volume (dB) +slider2:1<-8,8,0.1>Play Speed (neg=reverse) +slider3:0<0,30000,1>Play Start Position (ms) +slider4:0<0,30000,1>Play End Position (ms) +slider5:50<0,120,1>MIDI Note For First Trigger +slider6:10<0,1000,1>Edge Overlap (ms) +slider7:-120<-120,0,1>Silence Removal Threshold (dB) +slider8:0<0,6,1{Stopped,Recording,Playing Looped,Playing Once,Playing Looped+Recording,Playing Once+Recording>State +slider9:0<0,16,1>MIDI Channel (0=omni) + +/* idle mix=volume when not playing sample + play mix = mix when playing sample + record mix = mix of new and old sample + playlen lets you play only part of the sample + + if you hit button1 and isrec is active, we switch to play, keeping isrec + active. + + if you hit button1 and isplay is active, we mix in the source signal with + the sample. + + +*/ + +in_pin:input +out_pin:output (mono) +out_pin:output (mono) + + +@init +// isplay=isrec=reclen=recpos=playpos=0; +// dont set these here because sometimes init will get called after the state is loaded +ext_noinit=1; + + +@slider +playmix=2 ^ (slider1/6); +playspeed=slider2; + +slider3 < 0 ? slider3=0; +slider4 < 0 ? slider4=0; +gmaxl=1000000000/srate; +slider3=min(slider3,gmaxl); +slider4=min(slider4,gmaxl); + +olsize=srate*slider6/1000; +slider4=max(slider3,slider4); + +silthresh=slider7 > -119 ? (2^(slider7/6)) : 0; + +vstpos=slider3*srate/1000; +vreclen=(slider4*srate/1000-vstpos)-olsize; +slider8=lslider8; + +@serialize +file_var(0,isplay); +file_var(0,isrec); +file_var(0,reclen); +file_var(0,recpos); +file_var(0,0);//playpos); +!isrec ? file_mem(0,0,reclen); + +@block + +thetrig=0; +while( + midirecv(msgt,msg1,msg23) ? ( + vel=(msg23/256.0)|0; + chan = msg1&15; + (chan==(slider9-1) || !slider9) && msg1 == $x90 && vel ? ( + note=(msg23%256); + note == slider5 ? thetrig |= 1; + note == slider5+1 ? thetrig |= 2; + note == slider5+2 ? thetrig |= 4; + ); + + midisend(msgt,msg1,msg23); + 1; + ); +); + +(thetrig&1) ? ( + isplay ? // if playing, switch record and play on + ( + !isrec ? lastioffs=-1; + isrec=1; + ) + : + ( + isrec ? ( // start playing, but keep recording + playpos=0; + isplay=1; + lastioffs=-1; + ) + : + ( // stop playing, start recording + recpos=isplay=0; isrec=1; + slider3=0; + silstart=-1; + sliderchange(slider3); + ) + ) +); +(thetrig&6) ? +( + isrec ? ( + isplay ? + ( + isrec=0; + ) + : + ( + // switch to playback + playpos=isrec=0; + isplay=vreclen > 4 ? ((thetrig&4) ? 2 : 1) : 0; + freembuf(reclen); // free any unused memory + + ) + ) : ( + isplay && !(thetrig&4) ? isplay=0 : ( + // start over playback + playpos=0; + isplay=vreclen > 4 ? ((thetrig&4)?2:1) : 0; + ) + ) +); + +lslider8=slider8; +isplay ? +( + isrec ? + ( + slider8=3+isplay; + ) + : + slider8=1+isplay; +) : ( + slider8=isrec?1:0; +); + +slider8!=lslider8 ? +( + lslider8=slider8; + sliderchange(slider8); +) + +@sample + +// if recording, record, and if we run out of +// buffer, switch mode to looped playback +isrec ? ( + + isplay ? + ( + offs = playspeed<0?vreclen-playpos:playpos; + ioffs=offs|0; // fr=offs-ioffs; + lastioffs < 0 ? + ( + vstpos[ioffs] += spl0; + lastioffs=ioffs; + ) + : + ( + cnt=0; + mcnt=(abs(playspeed)+0.9)|0; + while( + ioffs != lastioffs ? + ( + //update current sample with our sample, but only once + //maybe get around this by just adding spl0*(1-fr) + vstpos[lastioffs] += spl0; + lastioffs+=sign(playspeed); + lastioffs < 0 ? (lastioffs=vreclen-1) : (lastioffs >= vreclen ? lastioffs=0); + ); + ioffs != lastioffs && (cnt+=1) < mcnt; + ) // while + ) + ) + : + ( + recpos >= 1000000 ? + ( + isplay=1; + playpos=isrec=0; + ) : ( + recpos[0]=spl0; + reclen=recpos+=1; + + abs(spl0) >= silthresh ? + ( + silstart < 0 ? + ( + recpos=1; + recpos[-1]=spl0; + vstpos=0; + ); + silstart=recpos; + ); + slider4=(silstart * 1000 / srate)|0; + sliderchange(slider4); + vreclen=(silstart-vstpos)-olsize; + ); + ); +); // if isrec + + +// if isplay = 1, loop playback +// if isplay = 2, one shot playback +isplay ? ( + isplay==2 || olsize <= playpos ? ( + offs = playspeed<0?vreclen-playpos:playpos; + ioffs=offs|0; fr=offs-ioffs; + spl0=spl0 + (vstpos[ioffs]*(1-fr)+vstpos[ioffs+1]*fr)*playmix; // one shot gets no overlap + ) : ( + tmpmix=playpos/olsize; + offs=playspeed<0?vreclen-playpos:playpos; + ioffs=offs|0; fr=offs-ioffs; + spl0=spl0 + (vstpos[ioffs]*(1-fr)+vstpos[ioffs+1]*fr)*playmix*tmpmix; // overlap with self + offs=playspeed<0?playpos:vreclen+playpos; + ioffs=offs|0; fr=offs-ioffs; + spl0=spl0 + (vstpos[ioffs]*(1-fr)+vstpos[ioffs+1]*fr)*playmix*(1-tmpmix); // overlap with self + ); + + spl1=spl0; + + isplay == 2 ? ( + playpos+abs(playspeed) > vreclen ? isrec=isplay=playpos=0 : playpos=playpos+abs(playspeed); + ) : ( + playpos=playpos+abs(playspeed)>vreclen?0:playpos+abs(playspeed); + ) +); diff --git a/Effects/loopsamplers/super8 b/Effects/loopsamplers/super8 new file mode 100644 index 0000000..515bea4 --- /dev/null +++ b/Effects/loopsamplers/super8 @@ -0,0 +1,1217 @@ +desc:Super8 MIDI-controlled synchronized looper (Cockos) + +// Copyright (C) 2015 and onward Cockos Inc +// LICENSE: LGPL v2 or later - http://www.gnu.org/licenses/lgpl.html + +// General notes: +// 8 channels of audio input (1 channel per channel) +// 9 channels of audio output (1 channel per channel, 9th channel is selected-channel-only monitoring output) + +// 8 channels are all synchronized. You can turn each channel on and off and overdub on each channel. + +// MIDI assigments are mappable by right-click-dragging them in the UI. +// for each channel: +// - note1=if not recording, start record. +// If already recording (and initial length-setting pass), sets length and continues (overdub) +// If already recording (and length is set), goes back to playback +// - note2=toggle playback (stop/rec->play, play->stop) +// - note3=toggle selected-for-monitoring +// - note4=reverse loop +// Right click the channel's monitoring icon to go through off/auto/always-on. +// - I use 'off' for things like mic'd drums +// - I use 'always-on' for stuff where the source should always be audible (usually looping is less important) + +// extra buttons (click, or drag them): +// - kill (click) -- deletes ALL! +// - halve length (click) +// - double length (click) +// - double length (no repeat) (click) -- if there's existing content after the current loop, it won't be overwritten +// - start gate: when recording the initial loop, use this gate value before starting recording +// (useful for hand-shortages) +// - halve fadesize: crossfade this amount when halving loop. +// If you intend to double (no repeat) back up, set to 0ms and accept the clicks. +// - add to project: adds active channels as .wav files to the end of the project, on their respective tracks, +// setting the tempo accordingly. (!) This uses a new undocumented (except for this) JSFX API... + + +in_pin:input 1 +in_pin:input 2 +in_pin:input 3 +in_pin:input 4 +in_pin:input 5 +in_pin:input 6 +in_pin:input 7 +in_pin:input 8 +out_pin:output 1 +out_pin:output 2 +out_pin:output 3 +out_pin:output 4 +out_pin:output 5 +out_pin:output 6 +out_pin:output 7 +out_pin:output 8 +out_pin:monitor output +out_pin:click output + +options: maxmem=33000000 no_meter + +@init + +// constants +g_nchan = 8; +g_max_alloc = __memtop(); // JSFX memory available +g_latchq_len = 1024; // 1024 midi events queueable for latch mode +g_maxlen = ((g_max_alloc-4096 - g_latchq_len*3)/(g_nchan+1))|0; // use nearly all of available memory +g_fadespeed = exp(-1/(srate * 0.002)); // fade speed for playback/monitoring +g_slope_recin = 1/(srate * 0.001); // fade length for starting rec +g_slope_recout = 1/(srate * 0.030); // fade length for ending rec +g_infthreshdb = -120; +g_infthresh = 10^(g_infthreshdb/20); +g_latchmode=0; + +// per-channel state/configuration record (mem_stlist) +st_monmode = 0; // mirrors chX.monmode +st_note1 = 1; // mirrors chX.note/chX.note2/chX.note3/chX.note4 +st_note2 = 2; +st_note3 = 3; +st_note4 = 4; // reverse note + +st_state = 5; // 0=off, 1=play, 2=recording +st_buf = 6; // pointer to audio buffer +st_dirty = 7; // set if buffer is dirty, and also may indicate how much of it + // is using max(mem_stlist[st_dirty],chX.dirty_top+1) +st_lastd = 8; // UI flags for mode + monitor + dirty +st_lastpkupd = 9; // time of last peak drawin +st_peak_in = 10; +st_rdc = 11; // msec, chX.rdc is samples +st_num = 12; + + +function get_section(s) local(r) ( s?(r=s):r; ); + +function alloc(sz) ( (this.top+=sz)-sz; ); + +function updatefromrec() instance(rec) +( + this.note = rec[st_note1]; + this.note2 = rec[st_note2]; + this.note3 = rec[st_note3]; + this.note4 = rec[st_note4]; + this.monmode = rec[st_monmode]; + this.rdc =(rec[st_rdc]*.001*samplerate+.5)|0; +); + +function init(x, n1,n2,n3) + instance(idx rec buf monvol fpos fpos2 fpos_slope sk_fpos2 dirty_top) +( + idx = x; + fpos_slope = monvol = fpos = fpos2 = sk_fpos2 = 0; + dirty_top = -1; + buf = alloc(g_maxlen); + + rec = mem_stlist + x*st_num; + rec[st_note1] = n1; + rec[st_note2] = n2; + rec[st_note3] = n3; + rec[st_note4] = 128; + rec[st_state]=0; + rec[st_lastd]=-1; + rec[st_dirty]=0; + rec[st_monmode] = 1; + rec[st_buf] = buf; + rec[st_peak_in] = 0; + rec[st_rdc] = 0; + + this.updatefromrec(); +); + +function get_zero_buffer(buf,buftop) ( + buftop > 0 ? ( + get_section() != 'gfx' && buftop > max(8192, g_spare_buf_ztop) ? ( + atomic_exch(buf, g_spare_buf); + atomic_exch(buftop, g_spare_buf_ztop); + ); + buftop > 0 ? memset(buf,0,buftop); + ); + buf; +); + +function setstate(st) instance(fpos_slope, sk_fpos2, rec) local(dt) +( + rec[st_state] ? ( + st==0 ? ( + g_active_cnt -= 1; + ) : g_length > 0 ? ( + g_firstrec = 0; + g_recstart_gate = 0; + ); + ) : ( + st>0 ? ( + st == 2 && (dt = max(rec[st_dirty], this.dirty_top+1)) > 0 ? ( + this.buf = rec[st_buf] = get_zero_buffer(this.buf,dt); + this.dirty_top=-1; + rec[st_dirty]=0; + ); + + (g_active_cnt += 1) == 1 ? ( + st == 2 ? ( + g_recstart_gate = mem_gen_cfg[4] > g_infthreshdb ? ( 10^(mem_gen_cfg[4]/20) ); + g_pos = 0; + g_length = 0; + g_firstrec = 1; + ); + ); + ); + ); + rec[st_state] = st; + rec[st_dirty] = max(max(rec[st_dirty],this.dirty_top+1),st==2); + + st == 2 ? ( + fpos_slope = g_slope_recin; + sk_fpos2 = 1 - g_fadespeed; + ) : ( + fpos_slope = -g_slope_recout; + sk_fpos2 = st > 0 ? (1 - g_fadespeed) : 0; + ); +); + + +function process(s) instance(buf, fpos, fpos2, monvol, monmode, rec, peak_in) local(r,wrpos) ( + g_recstart_gate==0 ? ( + fpos = min(max(0,fpos+this.fpos_slope),1); + fpos2 = fpos2*g_fadespeed + this.sk_fpos2; + ) : ( + fpos = fpos2 = 0; + ); + peak_in = max(abs(s),peak_in); + + wrpos = g_pos; + g_firstrec == 0 && this.rdc < g_length ? ( + wrpos -= this.rdc; + wrpos < 0 ? wrpos += g_length; + ); + + monmode == 0 ? ( + // no monitoring + fpos > 0.0001 ? ( + this.dirty_top = max(this.dirty_top,wrpos); + r=buf[g_pos]*fpos2; + buf[wrpos] += s*fpos; + r; + ) : fpos2 > 0.0001 ? ( + buf[g_pos]*fpos2; + ) : 0; + + ) : ( + (monmode>=2 || g_chan_selected == this.idx) ? ( + monvol = 1 + (monvol-1)*g_fadespeed; + ) : ( + monvol *= g_fadespeed; + ); + + fpos > 0.0001 ? ( + this.dirty_top = max(this.dirty_top,wrpos); + wrpos == g_pos ? ( + (buf[g_pos] += s*fpos) * fpos2 + s * max(0, monvol - fpos*fpos2); + ) : ( + buf[wrpos] += s*fpos; + buf[g_pos] * fpos2 + s * monvol; + ); + ) : fpos2 > 0.0001 ? ( + buf[g_pos]*fpos2 + s*monvol; + ) : ( + s*monvol; + ); + ); +); + +function reverse(want_defer) instance(rec) local(i,x,tmp) +( + // reverse + i=this.buf; + x=this.buf+g_length-1; + loop(g_length/2, + tmp=i[0]; + i[0]=x[0]; + x[0]=tmp; + x-=1; + i+=1; + ); + rec[st_dirty] = this.dirty_top = max(rec[st_dirty],max(this.dirty_top,g_length)); + rec[st_lastd] = -1; +); + +function onmsg(m1,m2,m3) instance(rec,note,note2,note3,note4) ( + m2 == note || m2 == 1024+rec+st_note1 ? ( + this.setstate((rec[st_state] == 2 && g_firstrec==0) ? 1 : 2); + g_chan_selected = this.idx; + ) : m2 == note2 || m2 == 1024+rec+st_note2 ? ( + this.setstate(rec[st_state] == 2 || (rec[st_state]==0 && g_length) ? 1 : 0); + g_chan_selected = this.idx; + ) : m2 == note3 ? ( + g_chan_selected = (g_chan_selected == this.idx) ? -1 : this.idx; + ) : m2 == note4 || m2 == 1024+rec+st_note4 ? ( + this.reverse(1); + ); +); + +function redraw_channels() local(p) +( + p=mem_stlist+st_lastd; + loop(g_nchan, + p[0] = -1; + p+=st_num; + ); +); + +function repeatbuf(buf,osz, nsz) local(p,s) +( + p=buf+osz; + while (p < buf+nsz) + ( + s = min(buf+nsz-p,osz); + memcpy(p,buf,s); + p+=s; + ); +); + +function xfadebuf(buf, osz, nsz) local(fsz,s,ds) +( + fsz = (0.001*mem_gen_cfg[5]*srate)|0; + s=0; + osz>0 && osz == nsz ? osz += fsz; + fsz = min(fsz,osz-nsz)|0; + ds=1/fsz; + // fade buf[0..fsz] with buf[nsz..nsz+fsz] + loop(fsz, + buf[0] = buf[0] * s + buf[nsz]*(1-s); + s+=ds; + buf+=1; + ); + +); + +function adjustsizes(scale, repup) local(nlen,olen, lp) +( + olen = g_length; + nlen = (olen*scale)|0; + nlen >= 1 && nlen < g_maxlen ? ( + lp=mem_stlist; + loop(g_nchan, + lp[st_dirty] ? ( + nlen > olen ? ( + repup ? repeatbuf(lp[st_buf],olen,nlen); + nlen > lp[st_dirty] ? lp[st_dirty] = nlen; + ) : ( + xfadebuf(lp[st_buf],olen,nlen); + ); + ); + lp += st_num; + ); + g_length = nlen; + g_pos %= nlen; + redraw_channels(); + ); +); + +function updatechfromrec() +( + ch1.updatefromrec(); + ch2.updatefromrec(); + ch3.updatefromrec(); + ch4.updatefromrec(); + ch5.updatefromrec(); + ch6.updatefromrec(); + ch7.updatefromrec(); + ch8.updatefromrec(); +); + +function reset() local(i,lp) +( + g_chan_selected=-1; + ch1.setstate(0); ch1.dirty_top=-1; // setstate() will latch dirty_top to st_dirty + ch2.setstate(0); ch2.dirty_top=-1; + ch3.setstate(0); ch3.dirty_top=-1; + ch4.setstate(0); ch4.dirty_top=-1; + ch5.setstate(0); ch5.dirty_top=-1; + ch6.setstate(0); ch6.dirty_top=-1; + ch7.setstate(0); ch7.dirty_top=-1; + ch8.setstate(0); ch8.dirty_top=-1; + i=0; + lp = mem_stlist; + loop(g_nchan, + lp[st_dirty] > 0 ? ( + memset(lp[st_buf], 0, lp[st_dirty]); + lp[st_dirty] = 0; + ); + i+=1; + lp += st_num; + ); + g_length=g_pos=0; +); + + +function estbpm(len) local(bpm, tsnum) global(ts_num, srate, mem_gen_cfg) +( + bpm = 120.0 * srate / len; + (tsnum = (mem_gen_cfg[9]|0)) < 2 ? tsnum = ts_num; + tsnum >= 2 ? bpm *= tsnum * .25; + + while (bpm < 60) ( bpm*=2; ); + while (bpm > 240) ( bpm/=2; ); + bpm; +); + +function gen_action(i) +( + i == 0 ? reset() : + i == 1 ? adjustsizes(0.5,1) : + i == 2 ? adjustsizes(2,1) : + i == 3 ? adjustsizes(2,0) : + i == 7 ? g_need_export=1 : + i == 11 ? adjustsizes(1, 0); +); + + +// one-time initialization +ext_noinit == 0 ? ( + ext_noinit=1; + ext_nodenorm=1; + + alloc.top=32; + + g_latchq = alloc(g_latchq_len*3); + g_latchq_used=0; + + mem_gen_sz=12; + mem_gen_cfg = alloc(mem_gen_sz); + memset(mem_gen_cfg,128,mem_gen_sz); + mem_gen_cfg[4]=g_infthreshdb; // gate threshold + mem_gen_cfg[5]=5; // msec fade when using halve + mem_gen_cfg[6]=0; + mem_gen_cfg[8]=0; + mem_gen_cfg[9]=0; + mem_gen_cfg[10]=0; + + mem_gen_names = alloc(mem_gen_sz); + mem_gen_names[0] = "kill"; + mem_gen_names[1] = "halve"; + mem_gen_names[2] = "double"; + mem_gen_names[3] = "double\nno rep"; + mem_gen_names[4] = "init\nrec\ngate"; + mem_gen_names[5] = ""; + mem_gen_names[6] = ""; + mem_gen_names[7] = "add to\nproject"; + mem_gen_names[8] = ""; + mem_gen_names[9] = ""; + mem_gen_names[10] = ""; + mem_gen_names[11] = "x-fade\nshortened\nloop"; + + mem_gen_order = alloc(mem_gen_sz); + mem_gen_order[0]=0; + mem_gen_order[1]=1; + mem_gen_order[2]=2; + mem_gen_order[3]=3; + mem_gen_order[4]=7; + mem_gen_order[5]=11; + mem_gen_order[6]=-1; + mem_gen_order[7]=-1; + mem_gen_order[8]=-1; + mem_gen_order[9]=-1; + mem_gen_order[10]=-1; + mem_gen_order[11]=-1; + + mem_stlist = alloc(g_nchan * st_num); + + g_inject_midinote = 0; + g_need_export = 0; + + g_inactive_blockcnt=0; + g_active_cnt = 0; + g_length = 0; + g_pos=0; + g_firstrec=0; + g_recstart_gate=0; + g_chan_selected = -1; // currently selected channel + g_lastmsg = -1; + g_spare_buf = alloc(g_maxlen); + g_spare_buf_ztop = 0; + + ch1.init(0, 36,37, 128); + ch2.init(1, 38,39, 128); + ch3.init(2, 41,42, 128); + ch4.init(3, 43,44, 128); + ch5.init(4, 45,46, 128); + ch6.init(5, 48,49, 128); + ch7.init(6, 50,51, 128); + ch8.init(7, 53,54, 128); +); + + + + +@serialize +function doconf() local(i,s) ( + i=mem_stlist; + loop(g_nchan, + file_var(0,i[st_monmode]); + i+=st_num; + ); + + s=mem_gen_sz; // safe to increase mem_gen_sz without breaking compat + file_var(0,s); + + i=0; + loop(s, + file_var(0,i < mem_gen_sz ? mem_gen_cfg[i] : 0); + i+=1; + ); + + i = mem_stlist; + loop(g_nchan, + file_var(0,i[st_note1]); + file_var(0,i[st_note2]); + file_var(0,i[st_note3]); + i+=st_num; + ); + + file_avail(0) != 0 ? ( + i = mem_stlist; + loop(g_nchan, + file_var(0,i[st_note4]); + i+=st_num; + ); + ); + + file_avail(0) != 0 ? ( + i = mem_stlist; + loop(g_nchan, + file_var(0,i[st_rdc]); + i+=st_num; + ); + ); + + file_avail(0)>=0 ? ( // is reading config + updatechfromrec(); + g_latchmode = mem_gen_cfg[8]; + last_w=0; + ); +); +doconf(); + +@block +ccmode_blockcnt+=1; +g_peak_decay = 10^(-samplesblock/srate*10); + +function trimspare() local(a) ( + a = min(g_spare_buf_ztop, 65536); + memset(g_spare_buf + (g_spare_buf_ztop -= a),0,a); +); +g_spare_buf_ztop > 0 ? trimspare(); + +g_active_cnt==0? ( + g_inactive_blockcnt < 2 ? ( + g_inactive_blockcnt+=1; + ) : ( + g_pos = 0 + ); +) : g_inactive_blockcnt=0; + +sidx=0; +nextmsg_offs=-1; +g_inject_midinote >= 1024 ? ( + nextmsg_offs = 0; + nextmsg_1=0x90; + nextmsg_2=g_inject_midinote; + nextmsg_3=127; + g_inject_midinote=0; +) : ( + midirecv(nextmsg_offs,nextmsg_1,nextmsg_2,nextmsg_3) ? midisend(nextmsg_offs,nextmsg_1,nextmsg_2,nextmsg_3); +); + +function onblock() instance(rec peak_in) global(g_peak_decay st_peak_in) +( +rec[st_peak_in] = peak_in; +peak_in *= g_peak_decay; +); + +ch1.onblock(); +ch2.onblock(); +ch3.onblock(); +ch4.onblock(); +ch5.onblock(); +ch6.onblock(); +ch7.onblock(); +ch8.onblock(); + +(g_click_int = (mem_gen_cfg[9]|0)) > 0 ?( + g_click_lenspls = (0.01*srate)|0; + g_click_fadesz = (0.0041*srate)|0; + g_click_fadesz_i = 1/g_click_fadesz; +); + +i_srate = 1.0/srate; + +@sample + +function chan_onmsg(m1,m2,m3) +( + ch1.onmsg(m1,m2,m3); + ch2.onmsg(m1,m2,m3); + ch3.onmsg(m1,m2,m3); + ch4.onmsg(m1,m2,m3); + ch5.onmsg(m1,m2,m3); + ch6.onmsg(m1,m2,m3); + ch7.onmsg(m1,m2,m3); + ch8.onmsg(m1,m2,m3); +); + +function latchq_add(m1,m2,m3) local(v) +( + g_latchq_used < g_latchq_len ? + ( + v = g_latchq_used*3; + g_latchq[v]=m1; + g_latchq[v+1]=m2; + g_latchq[v+2]=m3; + g_latchq_used+=1; + ); +); + +function latchq_process() local(r) +( + r=g_latchq; + loop(g_latchq_used, + chan_onmsg(r[0],r[1],r[2]); + r+=3; + ); + g_latchq_used=0; +); + + +function tonegen(x) ( + 1/*change to 0 for sine*/ ? ( + x = x - floor(x); + 4 * (x < 0.25 ? x : x < 0.75 ? 0.5-x : (x-1)); + ) : sin(x*2*$pi); +); + +function generate_click() + global(g_pos, g_length, i_srate, + g_click_int, g_click_lenspls, g_click_fadesz, g_click_fadesz_i) + local(s, int) +( + int = (g_length/g_click_int); + s = g_pos - floor(g_pos/int)*int; + s < g_click_lenspls ? ( + (s < g_click_lenspls-g_click_fadesz ? 1 : ( (g_click_lenspls-s)*g_click_fadesz_i )) * ( + g_pos < int ? + tonegen(s*800*i_srate)*1 + : + tonegen(s*1600*i_srate)*.75; + ); + ); +); + +g_latchq_used>0 && (g_pos == 0 || g_firstrec) ? latchq_process(); + +while (sidx == nextmsg_offs) +( + + // if you want to enable a CC to trigger the current channel, you could enable this: + 0 && g_chan_selected >= 0 && + nextmsg_1 == 0xb0 && nextmsg_3 == 0x7f && (nextmsg_2 == 0x14 || nextmsg_2 == 0x15) && + ccmode_blockcnt > (srate/samplesblock)*.5 ? + ( + ccmode_blockcnt=0; + nextmsg_1 = 0x90; + // if not stopped, treat as play button + nextmsg_2 = mem_stlist[g_chan_selected*st_num + st_note1 + (mem_stlist[g_chan_selected*st_num + st_state]?1:0)]; + // nextmsg_2 = mem_stlist[g_chan_selected*st_num + st_note1 + nextmsg_2 - 0x14]; + nextmsg_3 = 100; + ); + + nextmsg_1 == 0x90 && nextmsg_3 != 0 ? ( + (!g_latchmode || g_pos == 0 || g_firstrec) ? ( + chan_onmsg(nextmsg_1,nextmsg_2,nextmsg_3); + ) : ( + latchq_add(nextmsg_1,nextmsg_2,nextmsg_3); + ); + + nextmsg_2 == mem_gen_cfg[0] ? gen_action(0); + nextmsg_2 == mem_gen_cfg[1] ? gen_action(1); + nextmsg_2 == mem_gen_cfg[2] ? gen_action(2); + nextmsg_2 == mem_gen_cfg[3] ? gen_action(3); + nextmsg_2 == mem_gen_cfg[7] ? gen_action(7); + nextmsg_2 == mem_gen_cfg[11] ? gen_action(11); + + nextmsg_2 < 128 ? g_lastmsg = nextmsg_2; + ); + nextmsg_offs=-1; + midirecv(nextmsg_offs,nextmsg_1,nextmsg_2,nextmsg_3) ? midisend(nextmsg_offs,nextmsg_1,nextmsg_2,nextmsg_3); +); + +sidx+=1; +g_chan_selected >= 0 ? ( + g_chan_peak = abs(spl(g_chan_selected)); + g_peakvol = max(g_chan_peak,g_peakvol); + + g_recstart_gate && g_firstrec ? ( + g_chan_peak >= g_recstart_gate ? g_recstart_gate=0; + ); +); + +spl0=ch1.process(spl0); +spl1=ch2.process(spl1); +spl2=ch3.process(spl2); +spl3=ch4.process(spl3); +spl4=ch5.process(spl4); +spl5=ch6.process(spl5); +spl6=ch7.process(spl6); +spl7=ch8.process(spl7); + +g_recstart_gate==0 ? ( + g_click_int > 0 && g_active_cnt > 0 && g_length > 0 && !g_firstrec ? ( + spl9 = generate_click(); + ); + + (g_pos += 1) >= g_length ? ( + g_firstrec ? ( + g_pos >= g_maxlen ? ( + g_firstrec=0; + g_pos=0; + ) : ( + g_length = g_pos+1; + ); + ) : ( + g_pos=0; + ); + ); +); + +g_chan_selected >= 0 ? ( + spl8= spl(g_chan_selected); +) : ( + spl8=0; +); + +@gfx 420 480 + +get_section('gfx'); + +gfx_clear=-1; + +function draw_button(xpos,ypos, w, h, bordersz) +( + gfx_rect(xpos,ypos,w,h); + bordersz > 0 ? ( + gfx_set(1,1,1); + gfx_rect(xpos,ypos,bordersz,h); + gfx_rect(xpos+bordersz,ypos,w-bordersz*2,bordersz); + gfx_rect(xpos+w-bordersz,ypos,bordersz,h); + gfx_rect(xpos+bordersz,ypos+h-bordersz,w-bordersz*2,bordersz); + ); +); + +function mouse_in(xpos,ypos,w,h) ( + mouse_x>=xpos && mouse_x <= xpos+w && + mouse_y>=ypos && mouse_y <= ypos+h; +); + +function draw_speaker(xpos, ypos, w) +( + xpos -= w*.5; + gfx_line(xpos,ypos-w*.35,xpos+w*.4,ypos-w*.35); + gfx_line(xpos,ypos-w*.35,xpos,ypos+w*.35); + gfx_line(xpos,ypos+w*.35,xpos+w*.4,ypos+w*.35); + gfx_line(xpos+w*.4,ypos-w*.35,xpos+w*.4,ypos+w*.35); + + gfx_line(xpos+w*.4,ypos-w*.35,xpos+w*.8,ypos-w*.7); + gfx_line(xpos+w*.4,ypos+w*.35,xpos+w*.8,ypos+w*.7); + + gfx_line(xpos+w*.8,ypos-w*.7,xpos+w*.8,ypos+w*.7); + +); + +// draws it right-aligned to xpos, returns width used +function draw_value_tweaker(xpos,ypos,midimem,draw, lbl) local(t w tw th) +( + w = 24; + xpos < 0 ? xpos = (-xpos)-w; + cap_mode == midimem ? ( + t = ((mouse_y-cap_last_y)*.25); + t ? ( + lbl == "RDC" ? + midimem[0] = min(max(midimem[0]-t*(.1/.25),0),100) + : + midimem[0] = min(max(midimem[0]-(t|0),0),128); + updatechfromrec(); + cap_last_y=mouse_y; + draw=1; + ); + ); + cap_mode == 0 && mouse_in(xpos,ypos,w,24) ? ( + (mouse_cap & 1) && !(last_mouse_cap&1) ? ( + midimem >= mem_stlist && midimem < mem_stlist+st_num*g_nchan ? ( + t = (midimem-mem_stlist)%st_num; + t == st_note1 || t == st_note2 || t == st_note4 ? ( + t != st_note4 || g_latchmode ? ( + g_inject_midinote = 1024+midimem; + ) : ( + t = ((midimem-mem_stlist)/st_num)|0; + t == 0 ? ch1.reverse() : + t == 1 ? ch2.reverse() : + t == 2 ? ch3.reverse() : + t == 3 ? ch4.reverse() : + t == 4 ? ch5.reverse() : + t == 5 ? ch6.reverse() : + t == 6 ? ch7.reverse() : + t == 7 ? ch8.reverse(); + ); + ); + ); + ) : (mouse_cap & 2) && !(last_mouse_cap&2) ? ( + cap_mode = midimem; + cap_last_y = mouse_y; + ); + ); + draw ? ( + t=midimem[0]; + gfx_set(.35); + gfx_rect(xpos,ypos,w,24); + lbl == "RDC" ? ( + t=floor(t*10)*.1; + t = t<0.1 ? "0mS" : sprintf(#, t<10?"%.1f":"%d",t); + ) : ( + t = t > 127 ? "OFF" : sprintf(#, "%d",t); + ); + gfx_measurestr(t,tw,th); + gfx_y=ypos + (lbl?(22-th):(24-th)*.5); + gfx_x=xpos + (w-tw)*.5; + gfx_set(0.1); + gfx_drawstr(t); + lbl ? ( + gfx_set(.5); + gfx_measurestr(lbl,tw,th); + gfx_x=xpos+(w-tw)*.5; + gfx_y=ypos+2; + gfx_drawstr(lbl); + ); + ); + w; +); + +function draw_waveform(xpos,ycent,w,amp,bptr,srclen) local(minv,maxv, i,v, di, dbptr) +( + minv=100; + maxv=-100; + i=xpos|0; + dbptr = 1; + while (srclen > 100000) ( srclen*=0.5; dbptr *= 2.0; ); + di = w / srclen; + ycent|=0; + loop(srclen, + v=bptr[0]; + minv=min(v,minv); + maxv=max(v,maxv); + bptr+=dbptr; + v=0|(i+=di); + v>xpos ? ( + gfx_line(xpos=v,ycent+amp*max(min(minv,1),-1),v,ycent+amp*max(min(maxv,1),-1),0); + minv=100; maxv=-100; + ); + ); +); + +function draw(xpos, ypos) local(i w h gap rec mode force_redraw rowsize mx my mw t nrows lx ly wantr tw th now) +( + force_redraw = gfx_w != last_w || gfx_h != last_h; + + gap = 4; + rowsize=4; + nrows = 4; + w=0|min( + ((gfx_w - 2 - gap*(rowsize-1))/rowsize), + ((gfx_h - ypos - 8 - gap*(nrows-1))/nrows)); + + h=w; + i=0; + rec = mem_stlist; + now=time_precise(); + xpos += 2; + loop(g_nchan, + i>0 && (i%rowsize) == 0 ? ( + xpos=2; + ypos += h + gap; + ); + + !cap_mode && (mouse_cap&1) && mouse_in(xpos,ypos,w,h) ? ( + g_chan_selected=i; + ); + mode = rec[st_state]; + mode ? ( + gfx_set(mode==2 ? 1 : 0.25,mode==1?1:0.25, 0.25); + ) : ( + rec[st_dirty] ? gfx_set(0.3,0.3,0.4) : gfx_set(0.25); + ); + g_chan_selected == i ? mode|=8; + rec[st_dirty] ? mode|=16; + mode |= rec[st_monmode] << 8; + g_firstrec ? mode |= 1<<30; + mw = (w*.2)|0; + mx = xpos + w - mw - gap; + my = ypos+gap; + + force_redraw || rec[st_lastd] != mode || ((mode&2) && now>rec[st_lastpkupd]+0.5) ? ( + rec[st_lastd] = mode; + rec[st_lastpkupd]=now; + draw_button(xpos,ypos,w,h,g_chan_selected == i ? gap : 0); + + gfx_set(1,1,1); + gfx_x = xpos + 8; + gfx_y = ypos + 8; + gfx_printf("%d",i+1); + + gfx_set(0.5); + g_length && rec[st_dirty] && w > 80 ? draw_waveform(xpos+gap,ypos+h*.5,w-2*gap,h*.25,rec[st_buf],g_length); + + rec[st_monmode]==0 ? ( + gfx_set(0.2) + ) : rec[st_monmode]==1 ? ( + (mode&8) ? gfx_set(0.3,0.3,1.0) : gfx_set(0.3,0.3,0.7) + ) : ( + gfx_set(0.9,0.8,0); + ); + + gfx_rect(mx,my,mw,mw); + + rec[st_monmode] == 0 ? ( + gfx_set(0); + ) : ( + rec[st_monmode]==2 || (mode&8) ? ( + gfx_set(1,1,1, 1); + ) : ( + gfx_set(1,1,1, .25); + ); + ); + draw_speaker(mx+mw/2,my+mw/2,mw/2); + + rec[st_monmode] == 0 ? ( + gfx_set(0); + gfx_line(mx,my,mx+mw,my+mw); + gfx_line(mx+mw,my,mx,my+mw); + ); + + wantr=1; + ) : ( + wantr=0; + ); + t = mem_stlist + i*st_num; + lx = xpos + w - gap; + ly = ypos+h-24-gap; + w > 80 ? ( lx -= draw_value_tweaker(-lx,ly,t + st_note3,wantr, "mon") + gap; ); + lx -= draw_value_tweaker(-lx,ly,t + st_note2,wantr, rec[st_state] == 1 ? "stp" : "ply") + gap; + lx -= draw_value_tweaker(-lx,ly,t + st_note1,wantr, rec[st_state] == 2 && !g_firstrec ? "ply" : "rec") + gap; + + draw_value_tweaker(-mx+gap,my,t + st_rdc, wantr, "RDC"); + + w > 80 ? ( + lx = xpos+gap; + w < 120 ? ly = ypos+h-48-gap*2; + lx -= draw_value_tweaker(xpos+gap,ly,t + st_note4,wantr, "rev") + gap; + ); + + (mouse_cap&2) && !(last_mouse_cap&2) && !cap_mode && mouse_in(mx,my,mw,mw) ? ( + rec[st_monmode] = (rec[st_monmode]+1)%3; + updatechfromrec(); + sliderchange(-1); + ); + + g_curpk = (max(min(log10(rec[st_peak_in]) * 20,0),-68) * w * (1/68) + w); + g_curpk = g_curpk > (10^-5) && g_curpk<3 ? 3 : (g_curpk|0); + + gfx_set(0); + gfx_rect(xpos-2,ypos,2,w-g_curpk); + gfx_set(.75,.75,0); + gfx_rect(xpos-2,ypos+w-g_curpk,2,g_curpk); + + xpos += w + gap; + i+=1; + rec += st_num; + ); + xpos = 2; + ypos += h+gap; + + t=0; + loop(mem_gen_sz, + xpos >= gfx_w-4 || t==4 ? ( + xpos=2; + ypos += h + gap; + ); + i=mem_gen_order[t]; + + i>=0 ? ( + force_redraw ? ( + i == 1 ? gfx_set(0.0, 0.5, 0.6) : + i == 2 ? gfx_set(0.0, 0.6, 0.5) : + i == 3 ? gfx_set(0.0, 0.6, 0.4) : + i == 7 ? gfx_set(0.7, 0.6, 0.7) : + i == 11 ? gfx_set(0,0.5,0.5) : + gfx_set(0.5, 0.0, 0.0); + + draw_button(xpos,ypos,w,h,0); + gfx_set(1); + gfx_measurestr(mem_gen_names[i],tw,th); + gfx_x=xpos+(w-tw)*.5; + gfx_y=ypos+(h-th)*.5; + gfx_drawstr(mem_gen_names[i]); + ); + draw_value_tweaker(-(xpos+w-gap),ypos+h-24-gap,mem_gen_cfg + i, force_redraw, 0); + + !(last_mouse_cap&1) && (mouse_cap&1) && mouse_in(xpos,ypos,w,h) ? ( + gen_action(i); + ); + + xpos += w+gap; + ); + t+=1; + ); +); + +function draw_position(ypos) local(last_pos,last_len) +( + last_w != gfx_w || last_h != gfx_h || last_pos != g_pos || last_len != g_length ? ( + last_len = g_length; + last_pos = g_pos; + gfx_set(0.25,0.125,0.0); + gfx_rect(0,ypos,gfx_w,20); + gfx_set(0.125,0.25,0.5); + gfx_rect(0,ypos,g_pos/g_length * gfx_w,20); + gfx_x=2; + gfx_y=ypos+2; + gfx_set(1,1,1); + gfx_printf("%d mS\n%.1f BPM",g_length/srate * 1000,estbpm(last_len)); + ); +); + +function draw_topbar_button(xp, yp, str) + instance(w,h,x,y) + globals(gfx_x,gfx_y) +( + gfx_measurestr(str, w, h); + x=xp; + y=yp; + w+=3; + h+=3; + gfx_set(.5,.7,1); + gfx_line(x,y,x+w,y); + gfx_line(x+w,y,x+w,y+h); + gfx_line(x,y+h,x+w,y+h); + gfx_line(x,y,x,y+h); + h+=1; + w+=1; + gfx_x=xp+2; gfx_y=yp+2; + gfx_drawstr(str); + gfx_x = xp+w; +); +function hit_topbar_button(xp,yp,cm) + instance(w,h,x,y) + globals(cap_mode, cap_last_x, cap_last_y) +( + xp>=x&&yp>=y&&xp0 ? vclick_button.draw_topbar_button(gfx_x+4,2, + (lastvclickoffs=mem_gen_cfg[10])>0 ? sprintf(#,"vclick: +%.1fmS",lastvclickoffs): + "vclick: off"); + + fadesz_button.draw_topbar_button(gfx_x+4,2, + sprintf(#,"halve fade: %.0f mS",lasthalve=mem_gen_cfg[5])); + ); + + (mouse_cap&1) && !(mouse_cap&2) ? ( + !(last_mouse_cap&1) ? ( + + latch_button.hit_topbar_button(mouse_x,mouse_y,-1) ? ( + // toggle + mem_gen_cfg[8] = g_latchmode = !g_latchmode; + ) : ( + gate_button.hit_topbar_button(mouse_x,mouse_y,mem_gen_cfg+4)|| + length_button.hit_topbar_button(mouse_x,mouse_y,mem_gen_cfg+6)|| + clickcnt_button.hit_topbar_button(mouse_x,mouse_y,mem_gen_cfg+9)|| + (lastclickcount&&vclick_button.hit_topbar_button(mouse_x,mouse_y,mem_gen_cfg+10))|| + fadesz_button.hit_topbar_button(mouse_x,mouse_y,mem_gen_cfg+5); + ); + ) : (mouse_y != cap_last_y && cap_mode) ? ( + cap_mode == mem_gen_cfg + 4 ? ( + mem_gen_cfg[4] = min(max(mem_gen_cfg[4]-(mouse_y-cap_last_y)*.2,g_infthreshdb),-1); + cap_last_y=mouse_y; + ) : cap_mode == mem_gen_cfg + 6 ? ( + t = ((mouse_y-cap_last_y)*((mouse_cap&8)?4:100))|0; + t ? ( + g_length = max(g_length-t,1); + g_pos %= g_length; + redraw_channels(); + cap_last_y=mouse_y; + ); + ) : cap_mode == mem_gen_cfg + 5 ? ( + mem_gen_cfg[5] = min(max(mem_gen_cfg[5]-(mouse_y-cap_last_y)*0.05,0),500); + cap_last_y=mouse_y; + ) : cap_mode == mem_gen_cfg + 9 ? ( + mem_gen_cfg[9] = min(max(mem_gen_cfg[9]-(mouse_y-cap_last_y)*0.05,0),64); + cap_last_y=mouse_y; + ) : cap_mode == mem_gen_cfg + 10 ? ( + mem_gen_cfg[10] = min(max(mem_gen_cfg[10]-(mouse_y-cap_last_y)*0.05,0),100); + cap_last_y=mouse_y; + ); + ); + ); + + + // animated logo + gfx_x=0; + gfx_y=4; + t=time_precise(); + s="Super8"; + i=0; + loop(strlen(s), + gfx_set(sin(t+i*0.2)*0.3+0.5, cos(t*.61+i*0.5)*.7+0.3, sin(t*2.1-i*0.6)*.3+0.7); + gfx_drawchar(str_getchar(s,i)); + i+=1; + ); +); + +function get_vclick_pos(latms, clickcnt) + global(g_length, g_pos, srate, samplesblock) + local(tmp) +( + clickcnt >= 1 ? ( + tmp = g_pos - latms*srate*0.001; + tmp < 0 ? tmp += g_length; + (tmp >= 0) ? ( + floor(g_pos * clickcnt / g_length) + ) : -1; + ) : -1; +); + +vclick_pos = mem_gen_cfg[10]>0 && g_active_cnt && !g_firstrec ? get_vclick_pos(mem_gen_cfg[10],mem_gen_cfg[9]|0) : -1; + +last_vclick_pos != vclick_pos ? ( + last_w=0; + last_vclick_pos=vclick_pos; +); + +last_w != gfx_w || last_h != gfx_h ? ( + gfx_set(0.125); + gfx_rect(0,0,gfx_w,gfx_h); +); + +draw_topbar(last_w != gfx_w || last_h != gfx_h); +draw_position(15); +draw(0, 40); + +gfx_x=0; +gfx_y=gfx_h-8; +gfx_set(0); +gfx_rect(gfx_x,gfx_y,6*8,8); +gfx_set(.3); +g_peakvol < g_infthresh ? ( + gfx_printf("-inf"); +) : ( + gfx_printf("%.0fdB",log10(g_peakvol)*20); + g_peakvol *= 0.93; +); + + +g_lastmsg>=0 && g_lastmsg_draw!=g_lastmsg ? ( + gfx_x=gfx_w-24; + gfx_y=gfx_h-8; + gfx_set(0); + gfx_rect(gfx_x,gfx_y,24,8); + gfx_set(.3); + gfx_x += g_lastmsg<10?16:g_lastmsg<100?8; + gfx_printf("%d",g_lastmsg); + g_lastmsg_draw=g_lastmsg; +); + +last_w = gfx_w; +last_h = gfx_h; +last_mouse_cap = mouse_cap; +0 == (mouse_cap & 3) ? ( + cap_mode > 0 ? ( + sliderchange(-1); + ); + cap_mode = 0; +); + +function draw_vclick(pos) + global(gfx_w,gfx_h,gfx_x,gfx_y) + local(sw,sh,str) +( + gfx_setfont(2,"Arial",min(gfx_h,gfx_w)*.5); + str=sprintf(#,"%d",1 + pos); + gfx_measurestr(str,sw,sh); + + gfx_x=gfx_w*.5 + ((pos&1)?sw*.3:-sw*1.3); + gfx_y=gfx_h*.5 + ((pos&2)?0:-sh); + gfx_set(1); + gfx_drawstr(str); + gfx_setfont(0); +); + +vclick_pos >= 0 ? draw_vclick(vclick_pos); + +// export must happen from UI thread +function export() local(rec, flag) +( + // export, yay reaper 5.05 undocumented function! + rec = mem_stlist; + flag=1<<16; // go to end of project + flag|=2<<16; // use tempo from next parameter + g_length > 0 ? loop(g_nchan, + rec[st_state] ? ( + export_buffer_to_project(rec[st_buf],g_length,1,srate,(rec-mem_stlist)/st_num, flag, flag?estbpm(g_length)); + flag=0; // only go to end/set tempo for first item + ); + rec+=st_num; + ); +); + +g_need_export ? ( + export(); + g_need_export = 0; +); + diff --git a/Effects/loser/3BandEQ b/Effects/loser/3BandEQ new file mode 100644 index 0000000..62b668d --- /dev/null +++ b/Effects/loser/3BandEQ @@ -0,0 +1,62 @@ +// (C) 2006, Michael Gruhn. + +// NO WARRANTY IS GRANTED. THIS PLUG-IN IS PROVIDED ON AN "AS IS" BASIS, WITHOUT +// WARRANTY OF ANY KIND. NO LIABILITY IS GRANTED, INCLUDING, BUT NOT LIMITED TO, +// ANY DIRECT OR INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGE ARISING +// OUT OF THE USE OR INABILITY TO USE THIS PLUG-IN, COMPUTER FAILTURE OF +// MALFUNCTION INCLUDED. THE USE OF THE SOURCE CODE, EITHER PARTIALLY OR IN +// TOTAL, IS ONLY GRANTED, IF USED IN THE SENSE OF THE AUTHOR'S INTENTION, AND +// USED WITH ACKNOWLEDGEMENT OF THE AUTHOR. FURTHERMORE IS THIS PLUG-IN A THIRD +// PARTY CONTRIBUTION, EVEN IF INCLUDED IN REAPER(TM), COCKOS INCORPORATED OR +// ITS AFFILIATES HAVE NOTHING TO DO WITH IT. LAST BUT NOT LEAST, BY USING THIS +// PLUG-IN YOU RELINQUISH YOUR CLAIM TO SUE IT'S AUTHOR, AS WELL AS THE CLAIM TO +// ENTRUST SOMEBODY ELSE WITH DOING SO. + +desc:3-Band EQ +desc:3-Band EQ [LOSER] +//tags: equalizer +//author: LOSER + +slider1:0<-24,24,1>Low (dB) +slider2:200<0,22000,1>Frequency (Hz) +slider3:0<-24,24,1>Mid (dB) +slider4:2000<0,22000,1>Frequency (Hz) +slider5:0<-24,24,1>High (dB) +slider6:0<-24,24,1>Output (dB) + +in_pin:left input +in_pin:right input +out_pin:left output +out_pin:right output + +@init +cDenorm = 10^-30; +cAmpDB = 8.65617025; + +@slider +lVol = exp(slider1/cAmpDB); +mVol = exp(slider3/cAmpDB); +hVol = exp(slider5/cAmpDB); +outVol = exp(slider6/cAmpDB); + +freqLP = min(min(slider2,srate),slider4); +xLP = exp(-2.0*$pi*freqLP/srate); +a0LP = 1.0-xLP; +b1LP = -xLP; + +freqHP = max(min(slider4,srate),slider2); +xHP = exp(-2.0*$pi*freqHP/srate); +a0HP = 1.0-xHP; +b1HP = -xHP; + +@sample + +sl0 = (tmplLP = a0LP*spl0 - b1LP*tmplLP + cDenorm); +sl1 = (tmprLP = a0LP*spl1 - b1LP*tmprLP + cDenorm); + +sh0 = spl0 - (tmplHP = a0HP*spl0 - b1HP*tmplHP + cDenorm); +sh1 = spl1 - (tmprHP = a0HP*spl1 - b1HP*tmprHP + cDenorm); + +spl0 = (sl0*lVol + (spl0 - sl0 - sh0)*mVol + sh0*hVol)*outVol; +spl1 = (sl1*lVol + (spl1 - sl1 - sh1)*mVol + sh1*hVol)*outVol; + diff --git a/Effects/loser/3BandJoiner b/Effects/loser/3BandJoiner new file mode 100644 index 0000000..971c75d --- /dev/null +++ b/Effects/loser/3BandJoiner @@ -0,0 +1,43 @@ +// (C) 2006, Michael Gruhn. + +// NO WARRANTY IS GRANTED. THIS PLUG-IN IS PROVIDED ON AN "AS IS" BASIS, WITHOUT +// WARRANTY OF ANY KIND. NO LIABILITY IS GRANTED, INCLUDING, BUT NOT LIMITED TO, +// ANY DIRECT OR INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGE ARISING +// OUT OF THE USE OR INABILITY TO USE THIS PLUG-IN, COMPUTER FAILTURE OF +// MALFUNCTION INCLUDED. THE USE OF THE SOURCE CODE, EITHER PARTIALLY OR IN +// TOTAL, IS ONLY GRANTED, IF USED IN THE SENSE OF THE AUTHOR'S INTENTION, AND +// USED WITH ACKNOWLEDGEMENT OF THE AUTHOR. FURTHERMORE IS THIS PLUG-IN A THIRD +// PARTY CONTRIBUTION, EVEN IF INCLUDED IN REAPER(TM), COCKOS INCORPORATED OR +// ITS AFFILIATES HAVE NOTHING TO DO WITH IT. LAST BUT NOT LEAST, BY USING THIS +// PLUG-IN YOU RELINQUISH YOUR CLAIM TO SUE IT'S AUTHOR, AS WELL AS THE CLAIM TO +// ENTRUST SOMEBODY ELSE WITH DOING SO. + +desc:3-Band Joiner +desc:3-Band-Joiner (Combines Signal From 3-Band Splitter) [LOSER] +//tags: processing routing +//author: LOSER + +slider1:0<-24,24,.1>Low (dB) +slider2:0<-24,24,.1>Mid (dB) +slider3:0<-24,24,.1>High (dB) + +in_pin:low input left +in_pin:low input right +in_pin:mid input left +in_pin:mid input right +in_pin:high input left +in_pin:high input right +out_pin:left output +out_pin:right output + +@init +c_ampdB = 8.65617025; + +@slider +band1 = exp(slider1/c_ampdB); +band2 = exp(slider2/c_ampdB); +band3 = exp(slider3/c_ampdB); + +@sample +spl0 = spl0 * band1 + spl2 * band2 + spl4 * band3; +spl1 = spl1 * band1 + spl3 * band2 + spl5 * band3; diff --git a/Effects/loser/3BandSplitter b/Effects/loser/3BandSplitter new file mode 100644 index 0000000..4392e05 --- /dev/null +++ b/Effects/loser/3BandSplitter @@ -0,0 +1,60 @@ +// (C) 2006, Michael Gruhn. + +// NO WARRANTY IS GRANTED. THIS PLUG-IN IS PROVIDED ON AN "AS IS" BASIS, WITHOUT +// WARRANTY OF ANY KIND. NO LIABILITY IS GRANTED, INCLUDING, BUT NOT LIMITED TO, +// ANY DIRECT OR INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGE ARISING +// OUT OF THE USE OR INABILITY TO USE THIS PLUG-IN, COMPUTER FAILTURE OF +// MALFUNCTION INCLUDED. THE USE OF THE SOURCE CODE, EITHER PARTIALLY OR IN +// TOTAL, IS ONLY GRANTED, IF USED IN THE SENSE OF THE AUTHOR'S INTENTION, AND +// USED WITH ACKNOWLEDGEMENT OF THE AUTHOR. FURTHERMORE IS THIS PLUG-IN A THIRD +// PARTY CONTRIBUTION, EVEN IF INCLUDED IN REAPER(TM), COCKOS INCORPORATED OR +// ITS AFFILIATES HAVE NOTHING TO DO WITH IT. LAST BUT NOT LEAST, BY USING THIS +// PLUG-IN YOU RELINQUISH YOUR CLAIM TO SUE IT'S AUTHOR, AS WELL AS THE CLAIM TO +// ENTRUST SOMEBODY ELSE WITH DOING SO. + +desc:3-Band Splitter +desc:3-Band Splitter (Splits In Low:1+2,Mid:3+4,High:5+6) [LOSER] +//tags: processing routing +//author: LOSER + +slider1:200<0,22000,1>Crossover 1 (Hz) +slider2:2000<0,22000,1>Crossover 2 (Hz) + +in_pin:left input +in_pin:right input +out_pin:low output left +out_pin:low output right +out_pin:mid output left +out_pin:mid output right +out_pin:high output left +out_pin:high output right + +@init +cDenorm=10^-30; + +@slider +freqHP = max(min(slider2,srate),slider4); +xHP = exp(-2.0*$pi*freqHP/srate); +a0HP = 1.0-xHP; +b1HP = -xHP; + +freqLP = min(min(slider1,srate),slider2); +xLP = exp(-2.0*$pi*freqLP/srate); +a0LP = 1.0-xLP; +b1LP = -xLP; + +@sample + +s0 = spl0; +s1 = spl1; + +spl0 = (tmplLP = a0LP*s0 - b1LP*tmplLP + cDenorm); +spl1 = (tmprLP = a0LP*s1 - b1LP*tmprLP + cDenorm); + +spl4 = s0 - (tmplHP = a0HP*s0 - b1HP*tmplHP + cDenorm); +spl5 = s1 - (tmprHP = a0HP*s1 - b1HP*tmprHP + cDenorm); + +spl2 = s0 - spl0 - spl4; +spl3 = s1 - spl1 - spl5; + + diff --git a/Effects/loser/4BandEQ b/Effects/loser/4BandEQ new file mode 100644 index 0000000..b30a5ed --- /dev/null +++ b/Effects/loser/4BandEQ @@ -0,0 +1,86 @@ +// (C) 2006, Michael Gruhn. + +// NO WARRANTY IS GRANTED. THIS PLUG-IN IS PROVIDED ON AN "AS IS" BASIS, WITHOUT +// WARRANTY OF ANY KIND. NO LIABILITY IS GRANTED, INCLUDING, BUT NOT LIMITED TO, +// ANY DIRECT OR INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGE ARISING +// OUT OF THE USE OR INABILITY TO USE THIS PLUG-IN, COMPUTER FAILTURE OF +// MALFUNCTION INCLUDED. THE USE OF THE SOURCE CODE, EITHER PARTIALLY OR IN +// TOTAL, IS ONLY GRANTED, IF USED IN THE SENSE OF THE AUTHOR'S INTENTION, AND +// USED WITH ACKNOWLEDGEMENT OF THE AUTHOR. FURTHERMORE IS THIS PLUG-IN A THIRD +// PARTY CONTRIBUTION, EVEN IF INCLUDED IN REAPER(TM), COCKOS INCORPORATED OR +// ITS AFFILIATES HAVE NOTHING TO DO WITH IT. LAST BUT NOT LEAST, BY USING THIS +// PLUG-IN YOU RELINQUISH YOUR CLAIM TO SUE IT'S AUTHOR, AS WELL AS THE CLAIM TO +// ENTRUST SOMEBODY ELSE WITH DOING SO. + +desc:4-Band EQ +desc:4-Band EQ [LOSER] +//tags: equalizer +//author: LOSER + +slider1:0<-24,24,1>Low (dB) +slider2:200<0,22000,1>Frequency (Hz) +slider3:0<-24,24,1>Low Mid (dB) +slider4:2000<0,22000,1>Frequency (Hz) +slider5:0<-24,24,1>High Mid (dB) +slider6:5000<0,22000,1>Frequency (Hz) +slider7:0<-24,24,1>High (dB) +slider8:0<-24,24,1>Output (dB) + +in_pin:left input +in_pin:right input +out_pin:left output +out_pin:right output + +@init +cDenorm=10^-30; +cAmpDB = 8.65617025; + +@slider + +lVol = exp(slider1/cAmpDB); +lmVol = exp(slider3/cAmpDB); +hmVol = exp(slider5/cAmpDB); +hVol = exp(slider7/cAmpDB); +outVol = exp(slider8/cAmpDB); + +freqHI = max(min(slider6,srate),slider4); +xHI = exp(-2.0*$pi*freqHI/srate); +a0HI = 1.0-xHI; +b1HI = -xHI; + +freqMID = max(min(min(slider4,srate),slider6),slider2); +xMID = exp(-2.0*$pi*freqMID/srate); +a0MID = 1.0-xMID; +b1MID = -xMID; + +freqLOW = min(min(slider2,srate),slider4); +xLOW = exp(-2.0*$pi*freqLOW/srate); +a0LOW = 1.0-xLOW; +b1LOW = -xLOW; + +@sample + +s0 = spl0; +s1 = spl1; + +low0 = (tmplMID = a0MID*s0 - b1MID*tmplMID + cDenorm); +low1 = (tmprMID = a0MID*s1 - b1MID*tmprMID + cDenorm); + +spl0 = (tmplLOW = a0LOW*low0 - b1LOW*tmplLOW + cDenorm); +spl1 = (tmprLOW = a0LOW*low1 - b1LOW*tmprLOW + cDenorm); + +lowS0 = low0 - spl0; +lowS1 = low1 - spl1; + +hi0 = s0 - low0; +hi1 = s1 - low1; + +midS0 = (tmplHI = a0HI*hi0 - b1HI*tmplHI + cDenorm); +midS1 = (tmprHI = a0HI*hi1 - b1HI*tmprHI + cDenorm); + +highS0 = hi0 - midS0; +highS1 = hi1 - midS1; + +spl0 = (spl0*lVol + lowS0*lmVol + midS0*hmVol + highS0*hVol)*outVol; +spl1 = (spl1*lVol + lowS1*lmVol + midS1*hmVol + highS1*hVol)*outVol; + diff --git a/Effects/loser/4BandJoiner b/Effects/loser/4BandJoiner new file mode 100644 index 0000000..68b7ee0 --- /dev/null +++ b/Effects/loser/4BandJoiner @@ -0,0 +1,48 @@ +// (C) 2006, Michael Gruhn. + +// NO WARRANTY IS GRANTED. THIS PLUG-IN IS PROVIDED ON AN "AS IS" BASIS, WITHOUT +// WARRANTY OF ANY KIND. NO LIABILITY IS GRANTED, INCLUDING, BUT NOT LIMITED TO, +// ANY DIRECT OR INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGE ARISING +// OUT OF THE USE OR INABILITY TO USE THIS PLUG-IN, COMPUTER FAILTURE OF +// MALFUNCTION INCLUDED. THE USE OF THE SOURCE CODE, EITHER PARTIALLY OR IN +// TOTAL, IS ONLY GRANTED, IF USED IN THE SENSE OF THE AUTHOR'S INTENTION, AND +// USED WITH ACKNOWLEDGEMENT OF THE AUTHOR. FURTHERMORE IS THIS PLUG-IN A THIRD +// PARTY CONTRIBUTION, EVEN IF INCLUDED IN REAPER(TM), COCKOS INCORPORATED OR +// ITS AFFILIATES HAVE NOTHING TO DO WITH IT. LAST BUT NOT LEAST, BY USING THIS +// PLUG-IN YOU RELINQUISH YOUR CLAIM TO SUE IT'S AUTHOR, AS WELL AS THE CLAIM TO +// ENTRUST SOMEBODY ELSE WITH DOING SO. + +desc:4-Band Joiner +desc:4-Band Joiner (Combines Signal From 4-Band Splitter) [LOSER] +//tags: processing routing +//author: LOSER + +slider1:0<-24,24,.1>Low (dB) +slider2:0<-24,24,.1>Mid (dB) +slider3:0<-24,24,.1>High (dB) +slider4:0<-24,24,.1>UberHigh (dB) + +in_pin:low input left +in_pin:low input right +in_pin:mid input left +in_pin:mid input right +in_pin:high input left +in_pin:high input right +in_pin:uberhigh input left +in_pin:uberhigh input right +out_pin:left output +out_pin:right output + +@init +c_ampdB = 8.65617025; + +@slider +band1 = exp(slider1/c_ampdB); +band2 = exp(slider2/c_ampdB); +band3 = exp(slider3/c_ampdB); +band4 = exp(slider4/c_ampdB); + +@sample +spl0 = spl0 * band1 + spl2 * band2 + spl4 * band3 + spl6 * band4; +spl1 = spl1 * band1 + spl3 * band2 + spl5 * band3 + spl7 * band4; + diff --git a/Effects/loser/4BandSplitter b/Effects/loser/4BandSplitter new file mode 100644 index 0000000..9540ee8 --- /dev/null +++ b/Effects/loser/4BandSplitter @@ -0,0 +1,78 @@ +// (C) 2006, Michael Gruhn. + +// NO WARRANTY IS GRANTED. THIS PLUG-IN IS PROVIDED ON AN "AS IS" BASIS, WITHOUT +// WARRANTY OF ANY KIND. NO LIABILITY IS GRANTED, INCLUDING, BUT NOT LIMITED TO, +// ANY DIRECT OR INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGE ARISING +// OUT OF THE USE OR INABILITY TO USE THIS PLUG-IN, COMPUTER FAILTURE OF +// MALFUNCTION INCLUDED. THE USE OF THE SOURCE CODE, EITHER PARTIALLY OR IN +// TOTAL, IS ONLY GRANTED, IF USED IN THE SENSE OF THE AUTHOR'S INTENTION, AND +// USED WITH ACKNOWLEDGEMENT OF THE AUTHOR. FURTHERMORE IS THIS PLUG-IN A THIRD +// PARTY CONTRIBUTION, EVEN IF INCLUDED IN REAPER(TM), COCKOS INCORPORATED OR +// ITS AFFILIATES HAVE NOTHING TO DO WITH IT. LAST BUT NOT LEAST, BY USING THIS +// PLUG-IN YOU RELINQUISH YOUR CLAIM TO SUE IT'S AUTHOR, AS WELL AS THE CLAIM TO +// ENTRUST SOMEBODY ELSE WITH DOING SO. + +desc:4-Band Splitter +desc:4-Band Splitter (Splits In Low:1+2,Mid:3+4,High:5+6,Uberhigh:7+8) [LOSER] +//tags: processing routing +//author: LOSER + +slider1:200<0,22000,1>Crossover 1 (Hz) +slider2:2000<0,22000,1>Crossover 2 (Hz) +slider3:5000<0,22000,1>Crossover 3 (Hz) + +in_pin:left input +in_pin:right input +out_pin:low output left +out_pin:low output right +out_pin:mid output left +out_pin:mid output right +out_pin:high output left +out_pin:high output right +out_pin:uberhigh output left +out_pin:uberhigh output right + +@init +cDenorm=10^-30; + +@slider + +freqHI = max(min(slider3,srate),slider2); +xHI = exp(-2.0*$pi*freqHI/srate); +a0HI = 1.0-xHI; +b1HI = -xHI; + +freqMID = max(min(min(slider2,srate),slider3),slider1); +xMID = exp(-2.0*$pi*freqMID/srate); +a0MID = 1.0-xMID; +b1MID = -xMID; + +freqLOW = min(min(slider1,srate),slider2); +xLOW = exp(-2.0*$pi*freqLOW/srate); +a0LOW = 1.0-xLOW; +b1LOW = -xLOW; + +@sample + +s0 = spl0; +s1 = spl1; + +low0 = (tmplMID = a0MID*s0 - b1MID*tmplMID + cDenorm); +low1 = (tmprMID = a0MID*s1 - b1MID*tmprMID + cDenorm); + +spl0 = (tmplLOW = a0LOW*low0 - b1LOW*tmplLOW + cDenorm); +spl1 = (tmprLOW = a0LOW*low1 - b1LOW*tmprLOW + cDenorm); + +spl2 = low0 - spl0; +spl3 = low1 - spl1; + +hi0 = s0 - low0; +hi1 = s1 - low1; + +spl4 = (tmplHI = a0HI*hi0 - b1HI*tmplHI + cDenorm); +spl5 = (tmprHI = a0HI*hi1 - b1HI*tmprHI + cDenorm); + +spl6 = hi0 - spl4; +spl7 = hi1 - spl5; + + diff --git a/Effects/loser/50HzKicker b/Effects/loser/50HzKicker new file mode 100644 index 0000000..45f86c5 --- /dev/null +++ b/Effects/loser/50HzKicker @@ -0,0 +1,67 @@ +// (C) 2007, Michael Gruhn. + +// NO WARRANTY IS GRANTED. THIS PLUG-IN IS PROVIDED ON AN "AS IS" BASIS, WITHOUT +// WARRANTY OF ANY KIND. NO LIABILITY IS GRANTED, INCLUDING, BUT NOT LIMITED TO, +// ANY DIRECT OR INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGE ARISING +// OUT OF THE USE OR INABILITY TO USE THIS PLUG-IN, COMPUTER FAILTURE OF +// MALFUNCTION INCLUDED. THE USE OF THE SOURCE CODE, EITHER PARTIALLY OR IN +// TOTAL, IS ONLY GRANTED, IF USED IN THE SENSE OF THE AUTHOR'S INTENTION, AND +// USED WITH ACKNOWLEDGEMENT OF THE AUTHOR. FURTHERMORE IS THIS PLUG-IN A THIRD +// PARTY CONTRIBUTION, EVEN IF INCLUDED IN REAPER(TM), COCKOS INCORPORATED OR +// ITS AFFILIATES HAVE NOTHING TO DO WITH IT. LAST BUT NOT LEAST, BY USING THIS +// PLUG-IN YOU RELINQUISH YOUR CLAIM TO SUE IT'S AUTHOR, AS WELL AS THE CLAIM TO +// ENTRUST SOMEBODY ELSE WITH DOING SO. + +// Further more is this released under the GPL License: +// http://www.gnu.org/licenses/gpl.html + +desc:50 Hz Kicker +desc:50 Hz Kicker (Kick Drum Enhancer) [LOSER] +//tags: processing equalizer +//author: LOSER + +slider1:50<10,200,1>Freqency (Hz) +slider2:-12<-120,12,1>Wet (dB) +slider3:-3<-120,12,1>Dry (dB) + +in_pin:left input +in_pin:right input +out_pin:left output +out_pin:right output + +@init +b1Det = -exp(-300 / srate ); +a0Det = 1.0 + b1Det; + +b1Env1 = -exp(-3 / srate ); +a0Env1 = 1.0 + b1Env1; +b1Env2 = -exp(-30 / srate ); +a0Env2 = 1.0 + b1Env2; + +@slider + +adj = 2*$pi*slider1 / srate; + + +wet = 2^(slider2/6); +dry = 2^(slider3/6); + +gain = 0; +tmpDet = 0; +tmpEnv1 = 0.1; +tmpEnv2 = 0; + +@sample + +det = abs(sqrt(tmpDet = a0Det*(spl0+spl1)*2 - b1Det*tmpDet)); +env1 = sqrt(tmpEnv1 = a0Env1*det - b1Env1*tmpEnv1); +env2 = sqrt(tmpEnv2 = a0Env2*det - b1Env2*tmpEnv2); + +gain = min(max(env2/env1,1)-1,1); + +gain == 0 ? pos=0; + +spl0 = sin(pos)*gain*wet + spl0*dry; +spl1 = sin(pos)*gain*wet + spl1*dry; + +pos += adj; diff --git a/Effects/loser/5BandJoiner b/Effects/loser/5BandJoiner new file mode 100644 index 0000000..827c34a --- /dev/null +++ b/Effects/loser/5BandJoiner @@ -0,0 +1,52 @@ +// (C) 2006, Michael Gruhn. + +// NO WARRANTY IS GRANTED. THIS PLUG-IN IS PROVIDED ON AN "AS IS" BASIS, WITHOUT +// WARRANTY OF ANY KIND. NO LIABILITY IS GRANTED, INCLUDING, BUT NOT LIMITED TO, +// ANY DIRECT OR INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGE ARISING +// OUT OF THE USE OR INABILITY TO USE THIS PLUG-IN, COMPUTER FAILTURE OF +// MALFUNCTION INCLUDED. THE USE OF THE SOURCE CODE, EITHER PARTIALLY OR IN +// TOTAL, IS ONLY GRANTED, IF USED IN THE SENSE OF THE AUTHOR'S INTENTION, AND +// USED WITH ACKNOWLEDGEMENT OF THE AUTHOR. FURTHERMORE IS THIS PLUG-IN A THIRD +// PARTY CONTRIBUTION, EVEN IF INCLUDED IN REAPER(TM), COCKOS INCORPORATED OR +// ITS AFFILIATES HAVE NOTHING TO DO WITH IT. LAST BUT NOT LEAST, BY USING THIS +// PLUG-IN YOU RELINQUISH YOUR CLAIM TO SUE IT'S AUTHOR, AS WELL AS THE CLAIM TO +// ENTRUST SOMEBODY ELSE WITH DOING SO. + +desc:5-Band Joiner +desc:5-Band Joiner (Combines Signal From 5-Band Splitter) [LOSER] +//tags: processing routing +//author: LOSER + +slider1:0<-24,24,.1>Low (dB) +slider2:0<-24,24,.1>Mid (dB) +slider3:0<-24,24,.1>High (dB) +slider4:0<-24,24,.1>UberHigh (dB) +slider5:0<-24,24,.1>SomeMore (dB) + +in_pin:low input left +in_pin:low input right +in_pin:mid input left +in_pin:mid input right +in_pin:high input left +in_pin:high input right +in_pin:uberhigh input left +in_pin:uberhigh input right +in_pin:sommore input left +in_pin:somremore input right +out_pin:left output +out_pin:right output + +@init +c_ampdB = 8.65617025; + +@slider +band1 = exp(slider1/c_ampdB); +band2 = exp(slider2/c_ampdB); +band3 = exp(slider3/c_ampdB); +band4 = exp(slider4/c_ampdB); +band5 = exp(slider4/c_ampdB); + +@sample +spl0 = spl0 * band1 + spl2 * band2 + spl4 * band3 + spl6 * band4 + spl8 * band5; +spl1 = spl1 * band1 + spl3 * band2 + spl5 * band3 + spl7 * band4 + spl9 * band5; + diff --git a/Effects/loser/5BandSplitter b/Effects/loser/5BandSplitter new file mode 100644 index 0000000..e0b34d7 --- /dev/null +++ b/Effects/loser/5BandSplitter @@ -0,0 +1,94 @@ +// (C) 2006, Michael Gruhn. + +// NO WARRANTY IS GRANTED. THIS PLUG-IN IS PROVIDED ON AN "AS IS" BASIS, WITHOUT +// WARRANTY OF ANY KIND. NO LIABILITY IS GRANTED, INCLUDING, BUT NOT LIMITED TO, +// ANY DIRECT OR INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGE ARISING +// OUT OF THE USE OR INABILITY TO USE THIS PLUG-IN, COMPUTER FAILTURE OF +// MALFUNCTION INCLUDED. THE USE OF THE SOURCE CODE, EITHER PARTIALLY OR IN +// TOTAL, IS ONLY GRANTED, IF USED IN THE SENSE OF THE AUTHOR'S INTENTION, AND +// USED WITH ACKNOWLEDGEMENT OF THE AUTHOR. FURTHERMORE IS THIS PLUG-IN A THIRD +// PARTY CONTRIBUTION, EVEN IF INCLUDED IN REAPER(TM), COCKOS INCORPORATED OR +// ITS AFFILIATES HAVE NOTHING TO DO WITH IT. LAST BUT NOT LEAST, BY USING THIS +// PLUG-IN YOU RELINQUISH YOUR CLAIM TO SUE IT'S AUTHOR, AS WELL AS THE CLAIM TO +// ENTRUST SOMEBODY ELSE WITH DOING SO. + +desc:5-Band Splitter +desc:5-Band Splitter (Splits In Low:1+2,Mid:3+4,High:5+6,UberHigh:7+8,SomeMore:9+10) [LOSER] +//tags: processing routing +//author: LOSER + +slider1:200<0,22000,1>Crossover 1 (Hz) +slider2:2000<0,22000,1>Crossover 2 (Hz) +slider3:5000<0,22000,1>Crossover 3 (Hz) +slider4:8000<0,22000,1>Crossover 4 (Hz) + +in_pin:left input +in_pin:right input +out_pin:low output left +out_pin:low output right +out_pin:mid output left +out_pin:mid output right +out_pin:high output left +out_pin:high output right +out_pin:uberhigh output left +out_pin:uberhigh output right +out_pin:somemore output left +out_pin:somemore output right + +@init +cDenorm=10^-30; + +@slider + +freqHII = max(min(slider4,srate),slider3); +xHII = exp(-2.0*$pi*freqHII/srate); +a0HII = 1.0-xHII; +b1HII = -xHII; + +freqHI = max(min(min(slider3,srate),slider4),slider2); +xHI = exp(-2.0*$pi*freqHI/srate); +a0HI = 1.0-xHI; +b1HI = -xHI; + +freqMID = max(min(min(slider2,srate),slider3),slider1); +xMID = exp(-2.0*$pi*freqMID/srate); +a0MID = 1.0-xMID; +b1MID = -xMID; + +freqLOW = min(min(slider1,srate),slider3); +xLOW = exp(-2.0*$pi*freqLOW/srate); +a0LOW = 1.0-xLOW; +b1LOW = -xLOW; + +@sample + +s0 = spl0; +s1 = spl1; +s0 = (tmplHII = a0HII*s0 - b1HII*tmplHII + cDenorm); +s1 = (tmprHII = a0HII*s1 - b1HII*tmprHII + cDenorm); +spl8 = spl0 - s0; +spl9 = spl1 - s1; + +spl0 = s0; +spl1 = s1; +s0 = (tmplHI = a0HI*s0 - b1HI*tmplHI + cDenorm); +s1 = (tmprHI = a0HI*s1 - b1HI*tmprHI + cDenorm); +spl6 = spl0 - s0; +spl7 = spl1 - s1; + +spl0 = s0; +spl1 = s1; +s0 = (tmplMID = a0MID*s0 - b1MID*tmplMID + cDenorm); +s1 = (tmprMID = a0MID*s1 - b1MID*tmprMID + cDenorm); +spl4 = spl0 - s0; +spl5 = spl1 - s1; + +spl0 = s0; +spl1 = s1; +s0 = (tmplLOW = a0LOW*s0 - b1LOW*tmplLOW + cDenorm); +s1 = (tmprLOW = a0LOW*s1 - b1LOW*tmprLOW + cDenorm); +spl2 = spl0 - s0; +spl3 = spl1 - s1; + +spl0 = s0; +spl1 = s1; diff --git a/Effects/loser/CenterCanceler b/Effects/loser/CenterCanceler new file mode 100644 index 0000000..59d225a --- /dev/null +++ b/Effects/loser/CenterCanceler @@ -0,0 +1,35 @@ +// (C) 2007, Michael Gruhn. + +// NO WARRANTY IS GRANTED. THIS PLUG-IN IS PROVIDED ON AN "AS IS" BASIS, WITHOUT +// WARRANTY OF ANY KIND. NO LIABILITY IS GRANTED, INCLUDING, BUT NOT LIMITED TO, +// ANY DIRECT OR INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGE ARISING +// OUT OF THE USE OR INABILITY TO USE THIS PLUG-IN, COMPUTER FAILTURE OF +// MALFUNCTION INCLUDED. THE USE OF THE SOURCE CODE, EITHER PARTIALLY OR IN +// TOTAL, IS ONLY GRANTED, IF USED IN THE SENSE OF THE AUTHOR'S INTENTION, AND +// USED WITH ACKNOWLEDGEMENT OF THE AUTHOR. FURTHERMORE IS THIS PLUG-IN A THIRD +// PARTY CONTRIBUTION, EVEN IF INCLUDED IN REAPER(TM), COCKOS INCORPORATED OR +// ITS AFFILIATES HAVE NOTHING TO DO WITH IT. LAST BUT NOT LEAST, BY USING THIS +// PLUG-IN YOU RELINQUISH YOUR CLAIM TO SUE IT'S AUTHOR, AS WELL AS THE CLAIM TO +// ENTRUST SOMEBODY ELSE WITH DOING SO. + +desc:Center Canceler +desc:Center Canceler [LOSER] +//tags: processing stereo +//author: LOSER + +slider1:0<0,100,1>Amount (%) + +in_pin:left input +in_pin:right input +out_pin:left output +out_pin:right output + +@slider +a=slider1/100; + +@sample +m=(spl0+spl1)/2; +n=(spl0-spl1); +spl0=n*a+m*(a-1); +spl1=n*a+m*(a-1); + diff --git a/Effects/loser/Compciter b/Effects/loser/Compciter new file mode 100644 index 0000000..e0369d8 --- /dev/null +++ b/Effects/loser/Compciter @@ -0,0 +1,68 @@ +// (C) 2007, Michael Gruhn. + +// NO WARRANTY IS GRANTED. THIS PLUG-IN IS PROVIDED FOR FREE ON AN "AS IS" +// BASIS, WITHOUT WARRANTY OF ANY KIND. NO LIABILITY IS GRANTED, INCLUDING, BUT +// NOT LIMITED TO, ANY DIRECT OR INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL +// DAMAGE ARISING OUT OF THE USE OR INABILITY TO USE THIS PLUG-IN, COMPUTER +// FAILTURE OF MALFUNCTION INCLUDED. THE USE OF THE SOURCE CODE, EITHER +// PARTIALLY OR IN TOTAL, IS ONLY GRANTED, IF USED IN THE SENSE OF THE AUTHOR'S +// INTENTION, AND USED WITH ACKNOWLEDGEMENT OF THE AUTHOR. LAST BUT NOT LEAST, +// BY USING THIS PLUG-IN YOU RELINQUISH YOUR CLAIM TO SUE IT'S AUTHOR, AS WELL +// AS YOUR CLAIM TO ENTRUST SOMEBODY ELSE WITH DOING SO. + +// NOTE: This is a early alpha release! + +desc:Compciter +desc:Compciter [LOSER] +//tags: processing distortion exciter +//author: LOSER + +slider1:0<0,60,.1>Drive (dB) +slider2:25<0,100,1>Distortion (%) +slider3:5000<800,12000,1>Highpass (Hz) +slider4:-6<-60,24,1>Wet (dB) +slider5:0<-120,0,1>Dry (dB) + +in_pin:left input +in_pin:right input +out_pin:left output +out_pin:right output + +@init +gain = seekgain = 1; +c = 8.65617025; +dc = 10^-30; + +gain = seekGain = 1; + +@slider +threshDB = -slider1; +thresh = exp(threshDB/c); +ratio = 1/20; + +release = exp( -60 / ( pow(1-slider2/100,3) *500*srate/1000) / c ); + +t0 = t1 = 0; +blp = -exp(-2*$pi*slider3*3 / srate ); +alp = 1.0 + blp; + +wet = exp(slider4/c) / exp(( threshDB -threshDB*ratio )/c); +dry = exp(slider5/c); + +seekgain = 1; + + +@sample +s0 = (t00 = alp*spl0-blp*t00); +s1 = (t01 = alp*spl1-blp*t01); +s0 = (t10 = alp*s0 -blp*t10); +s1 = (t11 = alp*s1 -blp*t11); +s0 = spl0-(t20 = alp*s0-blp*t20); +s1 = spl1-(t21 = alp*s1-blp*t21); + +rms = max( abs(spl0) , abs(spl1) ); +seekGain = ((rms > thresh) ? exp((threshDB + (log(rms)*c-threshDB)*ratio) /c) / rms : 1); +gain = ((gain > seekGain) ? seekGain : min( gain/release , seekGain )); +spl0 = spl0*dry + s0 *gain * wet; +spl1 = spl1*dry + s1 *gain * wet; + diff --git a/Effects/loser/DDC b/Effects/loser/DDC new file mode 100644 index 0000000..46d85dd --- /dev/null +++ b/Effects/loser/DDC @@ -0,0 +1,110 @@ +// (C) 2006, Michael Gruhn. + +// NO WARRANTY IS GRANTED. THIS PLUG-IN IS PROVIDED ON AN "AS IS" BASIS, WITHOUT +// WARRANTY OF ANY KIND. NO LIABILITY IS GRANTED, INCLUDING, BUT NOT LIMITED TO, +// ANY DIRECT OR INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGE ARISING +// OUT OF THE USE OR INABILITY TO USE THIS PLUG-IN, COMPUTER FAILTURE OF +// MALFUNCTION INCLUDED. THE USE OF THE SOURCE CODE, EITHER PARTIALLY OR IN +// TOTAL, IS ONLY GRANTED, IF USED IN THE SENSE OF THE AUTHOR'S INTENTION, AND +// USED WITH ACKNOWLEDGEMENT OF THE AUTHOR. FURTHERMORE IS THIS PLUG-IN A THIRD +// PARTY CONTRIBUTION, EVEN IF INCLUDED IN REAPER(TM), COCKOS INCORPORATED OR +// ITS AFFILIATES HAVE NOTHING TO DO WITH IT. LAST BUT NOT LEAST, BY USING THIS +// PLUG-IN YOU RELINQUISH YOUR CLAIM TO SUE IT'S AUTHOR, AS WELL AS THE CLAIM TO +// ENTRUST SOMEBODY ELSE WITH DOING SO. + +// Also Useable For None Digital Drums ;) + +desc:Digital Drum Compressor +desc:Digital Drum Compressor (DDC) [LOSER] +//tags: dynamics compressor +//author: LOSER + +slider1:-20<-60,0,.1>Threshold (dB) +slider2:20<0,50,.1>Ratio +slider3:20<0,500,1>Attack (ms) +slider4:.5<0,500,.1>Hold (ms) +slider5:200<0,1000,1>Release (ms) +slider6:0<0,1000,1>RMS Size (ms) +slider7:0<0,2,1{Feedforward,Feedback,Sidechain}>Feed +slider8:1<0,1,1{No,Yes}>Auto Make-Up +slider9:0<-120,60,1>Output (dB) +slider10:0,Reduction (dB) + +in_pin:left input +in_pin:right input +in_pin:sidechain left input +in_pin:sidechain right input +out_pin:left output +out_pin:right output + +@init +gain = seekgain = 1; +c_ampdB = 8.65617025; + +@slider +treshdB = min(slider1,-.1); +tresh = exp(treshdB/c_ampdB); +ratio_1 = ratio; +ratio = max(slider2,0.0001); + +treshdB == -.1 || ratio_1 < .1 ? (gain = seekgain = 1; ); + +attack = exp( -treshdB/max( slider3*srate/1000 , 0) / c_ampdB ) ; +hold = slider4/1000*srate; +under_tresh = 0; +release = exp( -treshdB/max( slider5*srate/1000 , 0) / c_ampdB ) ; + +rms_size_1 = rms_size; +rms_size = min( max(slider6/1000*srate,1) , 1000000); +rms_size_1 != rms_size ? ( + rms_sqr_sum = rms_bpos = 0; + memset(0,0,rms_size); +); + +feed = slider7; + +mode_make_up = ratio < .5 ? 1:slider8; + +rms_size == 1 ? ( + volume = exp(slider9/c_ampdB) / (mode_make_up ? tresh+(1-tresh)/ratio : 1); +):( + volume = exp(slider9/c_ampdB) / (mode_make_up ? tresh+(1-tresh)/ratio * 2.828427125 : 1); +); + +seekgain = 1; + +@sample +feed == 0 ? (maxsamples = max(abs(spl0),abs(spl1)); ); +feed == 1 ? (maxsamples = max(abs(spl0_out),abs(spl1_out)); ); +feed == 2 ? (maxsamples = max(abs(spl2),abs(spl3)); ); + +rms_sqr_sum = max(rms_sqr_sum - rms_bpos[0],0) + (rms_bpos[0] = sqr(maxsamples)); +(rms_bpos+=1) >= rms_size ? rms_bpos=0; +rms = sqrt(rms_sqr_sum/rms_size); + +rms > tresh ? ( + hold ? + ( + ratio > 1 ? ( + seekgain = min( (tresh+(rms-tresh)/ratio)/rms ,seekgain ); + ):( + seekgain = max( (tresh+(rms-tresh)/ratio)/rms ,seekgain ); + ); + ):( + seekgain = (tresh+(rms-tresh)/ratio)/rms; + ); + under_tresh = 0; +):( + (under_tresh+=1)>hold ? (seekgain = 1; ); +); + + +gain > seekgain ? gain=max(gain/attack,seekgain):gain=min(gain*release,seekgain); + + +spl0_out = (spl0 *= gain * volume) ; +spl1_out = (spl1 *= gain * volume) ; + +slider10 = log(gain)*c_ampdB; +sliderchange(512); + diff --git a/Effects/loser/DVC2JS b/Effects/loser/DVC2JS new file mode 100644 index 0000000..89c94ad --- /dev/null +++ b/Effects/loser/DVC2JS @@ -0,0 +1,120 @@ +// (C) 2006-2007, Michael Gruhn. + +// NO WARRANTY IS GRANTED. THIS PLUG-IN IS PROVIDED ON AN "AS IS" BASIS, WITHOUT +// WARRANTY OF ANY KIND. NO LIABILITY IS GRANTED, INCLUDING, BUT NOT LIMITED TO, +// ANY DIRECT OR INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGE ARISING +// OUT OF THE USE OR INABILITY TO USE THIS PLUG-IN, COMPUTER FAILTURE OF +// MALFUNCTION INCLUDED. THE USE OF THE SOURCE CODE, EITHER PARTIALLY OR IN +// TOTAL, IS ONLY GRANTED, IF USED IN THE SENSE OF THE AUTHOR'S INTENTION, AND +// USED WITH ACKNOWLEDGEMENT OF THE AUTHOR. FURTHERMORE IS THIS PLUG-IN A THIRD +// PARTY CONTRIBUTION, EVEN IF INCLUDED IN REAPER(TM), COCKOS INCORPORATED OR +// ITS AFFILIATES HAVE NOTHING TO DO WITH IT. LAST BUT NOT LEAST, BY USING THIS +// PLUG-IN YOU RELINQUISH YOUR CLAIM TO SUE IT'S AUTHOR, AS WELL AS THE CLAIM TO +// ENTRUST SOMEBODY ELSE WITH DOING SO. + +desc:Digital Versatile Compressor v2 +desc:Digital Versatile Compressor v2 [LOSER] +//tags: dynamics compressor limiter +//author: LOSER + +slider1:-.1<-30,-.1,.1>Threshold (dB) +slider2:1<1,20,.1>Ratio +slider3:20<0,500,1>Attack (ms) +slider4:200<0,1000,1>Release (ms) +slider5:0<0,100,1>RMS Size (ms) +slider6:0<0,1,1{No,Yes}>Auto Make-Up +slider7:0<-12,12,.1>Output (dB) +slider8:0<0,1,1{Compress,Limit}>Character + +in_pin:left input +in_pin:right input +out_pin:left output +out_pin:right output + +@init +gain = seekgain = 1; +c = 8.65617025; +dc = 10^-30; + +gain = seekGain = 1; +t = 0; +b = -exp(-60 / srate ); +a = 1.0 + b; + +gr_meter=1; +gr_meter_decay = exp(1/(1*srate)); + +@slider +threshDB = slider1; +thresh = exp(threshDB/c); +ratio = 1/slider2; + +attack = exp( threshDB / (slider3*srate/1000) / c); +release = exp( threshdB / (slider4*srate/1000) / c ); +rmsSize = floor(slider5/1000*srate); + +rms_size = floor(slider5/1000*srate); +rmsSqrSum = rmsPos = 0; +memset(0,0,rmsSize); + +volume = exp(slider7/c) / (slider6 ? exp(( threshDB -threshDB*ratio )/c) : 1 ); + +seekgain = 1; + +@sample +rmsS = rms = max( abs(spl0) , abs(spl1) ); +rms = sqrt( (t = a*rms-b*t) ); +slider8 ? rms = max(rms,rmsS); + + +rmsSize > 1 ? ( + rmsSqrSum = max(rmsSqrSum - rmsPos[0],0) + (rmsPos[0] = sqr(rms)); + (rmsPos+=1) >= rmsSize ? rmsPos=0; + rms = sqrt(rmsSqrSum/rmsSize); +); + +seekGain = ((rms > thresh) ? exp((threshDB + (log(rms)*c-threshDB)*ratio) /c) / rms : 1); +gain = ((gain > seekGain) ? max( gain*attack , seekGain ) : min( gain/release , seekGain )); +spl0 *= gain * volume; +spl1 *= gain * volume; + +gain < gr_meter ? gr_meter=gain : ( gr_meter*=gr_meter_decay; gr_meter>1?gr_meter=1; ); + +@gfx 0 32 // request horizontal/vertical heights (0 means dont care) + + gr_meter *= exp(1/30); gr_meter>1?gr_meter=1; // decay meter here so if the audio processing stops it doesnt "stick" + gfx_r=1; gfx_g=gfx_b=0; gfx_a=0.8; + + meter_bot=20; + meter_h=min(gfx_h,32); + xscale=gfx_w*20/meter_bot; + + gfx_y=0; + gfx_x=gfx_w + log10(gr_meter)*xscale; + gfx_rectto(gfx_w,meter_h); + + gfx_r=gfx_g=gfx_b=1.0; gfx_a=0.6; + + s2=sqrt(2)/2; + g = s2; + while( + gfx_x=gfx_w + log10(g)*xscale; + gfx_x >= 0 ? + ( + gfx_y=0; + gfx_lineto(gfx_x,meter_h,0); + gfx_y=meter_h-gfx_texth; + gfx_x+=2; + gfx_drawnumber(log10(g)*20,0); + gfx_drawchar($'d'); + gfx_drawchar($'B'); + ); + g*=s2; + gfx_x >=0; + ); + gfx_a=1; + + gfx_x=0; gfx_y=meter_h/2 - gfx_texth/2; + gfx_drawnumber(log10(gr_meter)*20,1); + gfx_drawchar($'d'); + gfx_drawchar($'B'); diff --git a/Effects/loser/DVCJS b/Effects/loser/DVCJS new file mode 100644 index 0000000..2bc4199 --- /dev/null +++ b/Effects/loser/DVCJS @@ -0,0 +1,104 @@ +// (C) 2006, Michael Gruhn. + +// NO WARRANTY IS GRANTED. THIS PLUG-IN IS PROVIDED ON AN "AS IS" BASIS, WITHOUT +// WARRANTY OF ANY KIND. NO LIABILITY IS GRANTED, INCLUDING, BUT NOT LIMITED TO, +// ANY DIRECT OR INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGE ARISING +// OUT OF THE USE OR INABILITY TO USE THIS PLUG-IN, COMPUTER FAILTURE OF +// MALFUNCTION INCLUDED. THE USE OF THE SOURCE CODE, EITHER PARTIALLY OR IN +// TOTAL, IS ONLY GRANTED, IF USED IN THE SENSE OF THE AUTHOR'S INTENTION, AND +// USED WITH ACKNOWLEDGEMENT OF THE AUTHOR. FURTHERMORE IS THIS PLUG-IN A THIRD +// PARTY CONTRIBUTION, EVEN IF INCLUDED IN REAPER(TM), COCKOS INCORPORATED OR +// ITS AFFILIATES HAVE NOTHING TO DO WITH IT. LAST BUT NOT LEAST, BY USING THIS +// PLUG-IN YOU RELINQUISH YOUR CLAIM TO SUE IT'S AUTHOR, AS WELL AS THE CLAIM TO +// ENTRUST SOMEBODY ELSE WITH DOING SO. + +desc:Digital Versatile Compressor +desc:Digital Versatile Compressor (DVC) [LOSER] +//tags: dynamics compressor +//author: LOSER + +slider1:-.1<-30,-.1,.1>Threshold (dB) +slider2:1<1,20,.1>Ratio +slider3:20<0,500,1>Attack (ms) +slider4:200<0,1000,1>Release ( ms) +slider5:1<0,1,1{No,Yes}>Auto Make-Up +slider6:0<-12,12,.1>Output (dB) + +in_pin:left input +in_pin:right input +out_pin:left output +out_pin:right output + +@init +gain = seekgain = 1; +c = 8.65617025; +dc = 10^-30; + +gr_meter=1; +gr_meter_decay = exp(1/(1*srate)); + +gain = seekGain = 1; +t = 0; +b = -exp(-62.83185307 / srate ); +a = 1.0 + b; + +@slider +threshDB = slider1; +thresh = exp(threshDB/c); +ratio = 1/slider2; + +attack = exp( threshDB / (slider3*srate/1000) / c); +release = exp( threshdB / (slider4*srate/1000) / c ); + +volume = exp(slider6/c) / (slider5 ? exp(( threshDB -threshDB*ratio )/c) : 1 ); + +seekgain = 1; + +@sample +rms = max( abs(spl0) , abs(spl1) ); +rms = max( sqrt( (t = a*rms-b*t) ) , rms); +seekGain = ((rms > thresh) ? exp((threshDB + (log(rms)*c-threshDB)*ratio) /c) / rms : 1); +gain = ((gain > seekGain) ? max( gain*attack , seekGain ) : min( gain/release , seekGain )); +spl0 *= gain * volume; +spl1 *= gain * volume; + +gain < gr_meter ? gr_meter=gain : ( gr_meter*=gr_meter_decay; gr_meter>1?gr_meter=1; ); + +@gfx 0 32 // request horizontal/vertical heights (0 means dont care) + + gr_meter *= exp(1/30); gr_meter>1?gr_meter=1; // decay meter here so if the audio processing stops it doesnt "stick" + gfx_r=1; gfx_g=gfx_b=0; gfx_a=0.8; + + meter_bot=20; + meter_h=min(gfx_h,32); + xscale=gfx_w*20/meter_bot; + + gfx_y=0; + gfx_x=gfx_w + log10(gr_meter)*xscale; + gfx_rectto(gfx_w,meter_h); + + gfx_r=gfx_g=gfx_b=1.0; gfx_a=0.6; + + s2=sqrt(2)/2; + g = s2; + while( + gfx_x=gfx_w + log10(g)*xscale; + gfx_x >= 0 ? + ( + gfx_y=0; + gfx_lineto(gfx_x,meter_h,0); + gfx_y=meter_h-gfx_texth; + gfx_x+=2; + gfx_drawnumber(log10(g)*20,0); + gfx_drawchar($'d'); + gfx_drawchar($'B'); + ); + g*=s2; + gfx_x >=0; + ); + gfx_a=1; + + gfx_x=0; gfx_y=meter_h/2 - gfx_texth/2; + gfx_drawnumber(log10(gr_meter)*20,1); + gfx_drawchar($'d'); + gfx_drawchar($'B'); diff --git a/Effects/loser/Exciter b/Effects/loser/Exciter new file mode 100644 index 0000000..0dc0422 --- /dev/null +++ b/Effects/loser/Exciter @@ -0,0 +1,64 @@ +// (C) 2007, Michael Gruhn. + +// NO WARRANTY IS GRANTED. THIS PLUG-IN IS PROVIDED ON AN "AS IS" BASIS, WITHOUT +// WARRANTY OF ANY KIND. NO LIABILITY IS GRANTED, INCLUDING, BUT NOT LIMITED TO, +// ANY DIRECT OR INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGE ARISING +// OUT OF THE USE OR INABILITY TO USE THIS PLUG-IN, COMPUTER FAILTURE OF +// MALFUNCTION INCLUDED. THE USE OF THE SOURCE CODE, EITHER PARTIALLY OR IN +// TOTAL, IS ONLY GRANTED, IF USED IN THE SENSE OF THE AUTHOR'S INTENTION, AND +// USED WITH ACKNOWLEDGEMENT OF THE AUTHOR. FURTHERMORE IS THIS PLUG-IN A THIRD +// PARTY CONTRIBUTION, EVEN IF INCLUDED IN REAPER(TM), COCKOS INCORPORATED OR +// ITS AFFILIATES HAVE NOTHING TO DO WITH IT. LAST BUT NOT LEAST, BY USING THIS +// PLUG-IN YOU RELINQUISH YOUR CLAIM TO SUE IT'S AUTHOR, AS WELL AS THE CLAIM TO +// ENTRUST SOMEBODY ELSE WITH DOING SO. + +desc:Exciter +desc:Exciter [LOSER] +//tags: processing exciter distortion +//author: LOSER + +slider1:2000<100,18000,1>Frequency (Hz) +slider2:0<0,6,.1>Clip Boost (dB) +slider3:0<0,100,1>Harmonics (%) +slider4:-6<-120,0,.1>Mix Back (dB) + +in_pin:left input +in_pin:right input +out_pin:left output +out_pin:right output + +@init +c_ampDB = 8.65617025; +cDenorm=10^-30; + +@slider +clipBoost = exp(slider2/c_ampDB); +mixBack = exp(slider4/c_ampDB); + +hdistr = min(slider3/100,.9); +foo = 2*hdistr/(1-hdistr); + +freq = min(slider1,srate); +x = exp(-2.0*$pi*freq/srate); +a0 = 1.0-x; +b1 = -x; + +@sample +s0 = spl0; +s1 = spl1; + +s0 -= (tmplONE = a0*s0 - b1*tmplONE + cDenorm); +s1 -= (tmprONE = a0*s1 - b1*tmprONE + cDenorm); + +s0 = min(max(s0*clipBoost,-1),1); +s1 = min(max(s1*clipBoost,-1),1); + +s0 = (1+foo)*s0/(1+foo*abs(spl0)); +s1 = (1+foo)*s1/(1+foo*abs(spl1)); + +s0 -= (tmplTWO = a0*s0 - b1*tmplTWO + cDenorm); +s1 -= (tmprTWO = a0*s1 - b1*tmprTWO + cDenorm); + +spl0 += s0 * mixBack; +spl1 += s1 * mixBack; + diff --git a/Effects/loser/MGA_JSLimiter b/Effects/loser/MGA_JSLimiter new file mode 100644 index 0000000..c17139f --- /dev/null +++ b/Effects/loser/MGA_JSLimiter @@ -0,0 +1,103 @@ +// MGA JS Limiter: Limits the maximum output volume of a audio signal +// Copyright (C) 2008 Michael Gruhn +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// 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 for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . + +desc:MGA JS Limiter +//tags: dynamics limiter +//author: LOSER + +slider1:0<-30,0,0.1>Threshold (dB) +slider2:200<0,500,1>Release (ms) +slider3:-0.1<-6,0,0.1>Ceiling + +in_pin:left input +in_pin:right input +out_pin:left output +out_pin:right output + +@init +HOLDTIME = srate/128; + +r1Timer = 0; +r2Timer = HOLDTIME/2; + +gr_meter=1; +gr_meter_decay = exp(1/(1*srate)); + +@slider +thresh = 10^(slider1/20); +ceiling = 10^(slider3/20); +volume = ceiling/thresh; + +release = slider2/1000; +r = exp(-3/(srate*max(release,0.05))); + +@sample +maxSpls=max(abs(spl0),abs(spl1)); + +(r1Timer+=1) > HOLDTIME ? (r1Timer = 0; max1Block = 0; ); +max1Block = max(max1Block,maxSpls); +(r2Timer+=1) > HOLDTIME ? (r2Timer = 0; max2Block = 0; ); +max2Block = max(max2Block,maxSpls); + +envT = max(max1Block,max2Block); + +env = env < envT ? envT : envT + r*(env-envT); + +(env > thresh) ? gain = (g_meter=(thresh / env))*volume : (g_meter=1; gain=volume;); + +spl0*=gain; +spl1*=gain; + +g_meter < gr_meter ? gr_meter=g_meter : ( gr_meter*=gr_meter_decay; gr_meter>1?gr_meter=1; ); + +@gfx 0 32 // request horizontal/vertical heights (0 means dont care) + + gr_meter *= exp(1/30); gr_meter>1?gr_meter=1; // decay meter here so if the audio processing stops it doesnt "stick" + gfx_r=1; gfx_g=gfx_b=0; gfx_a=0.8; + + meter_bot=20; + meter_h=min(gfx_h,32); + xscale=gfx_w*20/meter_bot; + + gfx_y=0; + gfx_x=gfx_w + log10(gr_meter)*xscale; + gfx_rectto(gfx_w,meter_h); + + gfx_r=gfx_g=gfx_b=1.0; gfx_a=0.6; + + s2=sqrt(2)/2; + g = s2; + while( + gfx_x=gfx_w + log10(g)*xscale; + gfx_x >= 0 ? + ( + gfx_y=0; + gfx_lineto(gfx_x,meter_h,0); + gfx_y=meter_h-gfx_texth; + gfx_x+=2; + gfx_drawnumber(log10(g)*20,0); + gfx_drawchar($'d'); + gfx_drawchar($'B'); + ); + g*=s2; + gfx_x >=0; + ); + gfx_a=1; + + gfx_x=0; gfx_y=meter_h/2 - gfx_texth/2; + gfx_drawnumber(log10(gr_meter)*20,1); + gfx_drawchar($'d'); + gfx_drawchar($'B'); diff --git a/Effects/loser/MGA_JSLimiterST b/Effects/loser/MGA_JSLimiterST new file mode 100644 index 0000000..f7f6bca --- /dev/null +++ b/Effects/loser/MGA_JSLimiterST @@ -0,0 +1,134 @@ +// MGA JS Limiter: Limits the maximum output volume of a audio signal +// Copyright (C) 2008 Michael Gruhn +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// 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 for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . + +desc:MGA JS Limiter (Unlinked Stereo) +//tags: dynamics limiter stereo +//author: LOSER + +slider1:0<-30,0,0.1>Threshold (dB) +slider2:200<0,500,1>Release (ms) +slider3:75<0,100,1>Link Stereo (%) +slider4:-0.1<-6,0,0.1>Ceiling + +in_pin:left input +in_pin:right input +out_pin:left output +out_pin:right output + +@init +HOLDTIME = srate/128; + +r1Timer = 0; +r2Timer = HOLDTIME/2; + +r1TimerO = 0; +r2TimerO = HOLDTIME/2; + +gr_meter=1; +gr_meter_decay = exp(1/(1*srate)); + +@slider +thresh = 10^(slider1/20); +ceiling = 10^(slider4/20); +volume = ceiling/thresh; + +release = slider2/1000; +r = exp(-3/(srate*max(release,0.05))); + +link = sqrt(slider3*0.01); + +@sample +maxSpls=abs(spl0); + +(r1Timer+=1) > HOLDTIME ? (r1Timer = 0; max1Block = 0; ); +max1Block = max(max1Block,maxSpls); +(r2Timer+=1) > HOLDTIME ? (r2Timer = 0; max2Block = 0; ); +max2Block = max(max2Block,maxSpls); + +envT = max(max1Block,max2Block); + + +maxSplsO=abs(spl1); + +(r1TimerO+=1) > HOLDTIME ? (r1TimerO = 0; max1BlockO = 0; ); +max1BlockO = max(max1BlockO,maxSplsO); +(r2TimerO+=1) > HOLDTIME ? (r2TimerO = 0; max2BlockO = 0; ); +max2BlockO = max(max2BlockO,maxSplsO); + +envTO = max(max1BlockO,max2BlockO); + + + +env = max(env,envO*link); +envO = max(env*link,envO); + + +env = env < envT ? envT : envT + r*(env-envT); + +(env > thresh) ? gain = (g_meter=(thresh / env))*volume : (g_meter=1; gain=volume;); + + +envO = envO < envTO ? envTO : envTO + r*(envO-envTO); + +(envO > thresh) ? gainO = (g_meterO=(thresh / envO))*volume : (g_meterO=1; gainO=volume;); + + + +spl0*=gain; +spl1*=gainO; + +g_meter = min(g_meter,g_meterO); + +g_meter < gr_meter ? gr_meter=g_meter : ( gr_meter*=gr_meter_decay; gr_meter>1?gr_meter=1; ); + +@gfx 0 32 // request horizontal/vertical heights (0 means dont care) + + gr_meter *= exp(1/30); gr_meter>1?gr_meter=1; // decay meter here so if the audio processing stops it doesnt "stick" + gfx_r=1; gfx_g=gfx_b=0; gfx_a=0.8; + + meter_bot=20; + meter_h=min(gfx_h,32); + xscale=gfx_w*20/meter_bot; + + gfx_y=0; + gfx_x=gfx_w + log10(gr_meter)*xscale; + gfx_rectto(gfx_w,meter_h); + + gfx_r=gfx_g=gfx_b=1.0; gfx_a=0.6; + + s2=sqrt(2)/2; + g = s2; + while( + gfx_x=gfx_w + log10(g)*xscale; + gfx_x >= 0 ? + ( + gfx_y=0; + gfx_lineto(gfx_x,meter_h,0); + gfx_y=meter_h-gfx_texth; + gfx_x+=2; + gfx_drawnumber(log10(g)*20,0); + gfx_drawchar($'d'); + gfx_drawchar($'B'); + ); + g*=s2; + gfx_x >=0; + ); + gfx_a=1; + + gfx_x=0; gfx_y=meter_h/2 - gfx_texth/2; + gfx_drawnumber(log10(gr_meter)*20,1); + gfx_drawchar($'d'); + gfx_drawchar($'B'); diff --git a/Effects/loser/MIDI_EQ_Ducker b/Effects/loser/MIDI_EQ_Ducker new file mode 100644 index 0000000..fae2bab --- /dev/null +++ b/Effects/loser/MIDI_EQ_Ducker @@ -0,0 +1,148 @@ +// (C) 2008 Michael Gruhn. +// Idea by beat.by.bit +// For low/high shelf mode anything lower than a 2 oct width will give resonance + +// Shapes: < 1 concave +// = 1 linear +// > 1 convex + +desc:MIDI EQ Ducker +desc:MIDI EQ Ducker [LOSER] +//tags: dynamics equalizer compressor processing MIDI +//author: LOSER + +slider1:0<0,129,1{All,0,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}>MIDI Note # +slider2:10<0,75,1>Attack (ms) +slider3:1<0,4,.01>Atack Shape +slider4:100<0,500,1>Release (ms) +slider5:1<0,4,.1>Release Shape +slider6:0<0,15000,100>Frequency Coarse (Hz) +slider7:60<0,100,1>Frequency Fine (Hz) +slider8:1<0,2,.1>Width (Oct) +slider9:0<-32,32,1>Volume (dB) +slider10:0<0,4,1{Freq Peak,Freq Low Shelf,Freq High Shelf,Gate,Pump}> Mode +slider11:0<0,1,1{No,Yes}>Gate/Pump React To MIDI Velocity + +in_pin:left input +in_pin:right input +out_pin:left output +out_pin:right output + +@init +pos = vol_s = 0; + +@slider + +att_s = max(slider3,0.01); +rel_s = max(slider5,0.01); + +att = 1 / max(srate*slider2/1000,1); +rel = 1 / max(srate*slider4/1000,1); + +freq = slider6+slider7; +Q = max(slider8,0.1); + +to_db = slider9; + +mode = slider10; + +@block +memset(0,-1,samplesblock); + +while ( +midirecv(offs,msg1,msg23) ? +( + m=msg1&240; + vel = (msg23/256)|0; + note=msg23&127; + (m == 9*16 || m == 8*16) && (note == (slider1-1) || slider1 == 0) ? + ( + m == 9*16 ? volume[offs] = vel/127; + m == 8*16 ? volume[offs] = 0; + ); +); +); + +pos = 0; + + +@sample +volume[pos] == -1 ? vol_in = vol_in : (vol_in = sign(volume[pos]); volume[pos] > 0 ? vol_m = volume[pos]); + +att_s == 1 ? att_l = att; +att_s < 1 ? att_l = (att_s+vol_s*(1-att_s))*att; +att_s > 1 ? att_l = (att_s-vol_s*(att_s-1))*att; + +rel_s == 1 ? rel_l = rel; +rel_s < 1 ? rel_l = (rel_s+vol_s*(1-rel_s))*rel; +rel_s > 1 ? rel_l = (rel_s-vol_s*(rel_s-1))*rel; + +vol_s = vol_s < vol_in ? min(vol_s + att_l , vol_in) : max(vol_s - rel_l , vol_in); + + +mode == 0 || mode == 1 || mode == 2 ? ( + +vol = vol_s * vol_m; + +A = sqrt( 10^(to_db*(vol)/20) ); +w0 = 2*$pi*freq/srate; +tmp = log(2)/2 * Q * w0/sin(w0); +alpha = sin(w0) * (exp(tmp)-exp(-tmp))/2; + +mode == 0 ? ( + b0 = 1 + alpha*A ; + b1 = -2*cos(w0) ; + b2 = 1 - alpha*A ; + a0 = 1 + alpha/A ; + a1 = -2*cos(w0) ; + a2 = 1 - alpha/A ; +):( + +mode == 1 ? ( + b0 = A*( (A+1) - (A-1)*cos(w0) + 2*sqrt(A)*alpha ); + b1 = 2*A*( (A-1) - (A+1)*cos(w0) ); + b2 = A*( (A+1) - (A-1)*cos(w0) - 2*sqrt(A)*alpha ); + a0 = (A+1) + (A-1)*cos(w0) + 2*sqrt(A)*alpha ; + a1 = -2*( (A-1) + (A+1)*cos(w0) ); + a2 = (A+1) + (A-1)*cos(w0) - 2*sqrt(A)*alpha ; +):( + b0 = A*( (A+1) + (A-1)*cos(w0) + 2*sqrt(A)*alpha ); + b1 = -2*A*( (A-1) + (A+1)*cos(w0) ); + b2 = A*( (A+1) + (A-1)*cos(w0) - 2*sqrt(A)*alpha ); + a0 = (A+1) - (A-1)*cos(w0) + 2*sqrt(A)*alpha ; + a1 = 2*( (A-1) - (A+1)*cos(w0) ); + a2 = (A+1) - (A-1)*cos(w0) - 2*sqrt(A)*alpha ; +); +); +// normalize a0 +b0 /= a0; +b1 /= a0; +b2 /= a0; +a1 /= a0; +a2 /= a0; + +tmp = spl0; +spl0 = b0 * spl0 + b1 * xl1 + b2 * xl2 - a1 * yl1 - a2 * yl2; +xl2 = xl1; xl1 = tmp; yl2 = yl1; yl1 = spl0; + +tmp = spl1; +spl1 = b0 * spl1 + b1 * xr1 + b2 * xr2 - a1 * yr1 - a2 * yr2; +xr2 = xr1; xr1 = tmp; yr2 = yr1; yr1 = spl1; +):( + +slider11 ? vol = vol_s * vol_m : vol = vol_s; + +mode == 3 ? ( +spl0 *= vol; +spl1 *= vol; + +):( + +spl0 *= (1-vol); +spl1 *= (1-vol); + +); + + +); +pos += 1; diff --git a/Effects/loser/SP1LimiterJS b/Effects/loser/SP1LimiterJS new file mode 100644 index 0000000..e0632a8 --- /dev/null +++ b/Effects/loser/SP1LimiterJS @@ -0,0 +1,89 @@ +// (C) 2006, Michael Gruhn. + +// NO WARRANTY IS GRANTED. THIS PLUG-IN IS PROVIDED ON AN "AS IS" BASIS, WITHOUT +// WARRANTY OF ANY KIND. NO LIABILITY IS GRANTED, INCLUDING, BUT NOT LIMITED TO, +// ANY DIRECT OR INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGE ARISING +// OUT OF THE USE OR INABILITY TO USE THIS PLUG-IN, COMPUTER FAILTURE OF +// MALFUNCTION INCLUDED. THE USE OF THE SOURCE CODE, EITHER PARTIALLY OR IN +// TOTAL, IS ONLY GRANTED, IF USED IN THE SENSE OF THE AUTHOR'S INTENTION, AND +// USED WITH ACKNOWLEDGEMENT OF THE AUTHOR. FURTHERMORE IS THIS PLUG-IN A THIRD +// PARTY CONTRIBUTION, EVEN IF INCLUDED IN REAPER(TM), COCKOS INCORPORATED OR +// ITS AFFILIATES HAVE NOTHING TO DO WITH IT. LAST BUT NOT LEAST, BY USING THIS +// PLUG-IN YOU RELINQUISH YOUR CLAIM TO SUE IT'S AUTHOR, AS WELL AS THE CLAIM TO +// ENTRUST SOMEBODY ELSE WITH DOING SO. + +desc:Simple Peak-1 Limiter +desc:Simple Peak-1 Limiter [LOSER] +//tags: dynamics limiter +//author: LOSER + +slider1:-0<-20,0,.1>Threshold (dB) + +in_pin:left input +in_pin:right input +out_pin:left output +out_pin:right output + +@init +gain = 1; c = 8.65617025; dc = 10^(-30); + + +gr_meter=1; +gr_meter_decay = exp(1/(1*srate)); + + +@slider + +thresh = exp(slider1/c); seekgain = 1; +gain = 1; +t = 0; +b = -exp(-62.83185307 / srate ); +a = 1.0 + b; + +@sample +rms = max( abs(spl0) , abs(spl1) ); +rms = max( sqrt( (t = a*rms-b*t+dc)-dc) , rms); +(rms > thresh) ? gain = rms : gain = thresh; +spl0 /= gain; +spl1 /= gain; + +gain < gr_meter ? gr_meter=gain : ( gr_meter*=gr_meter_decay; gr_meter>1?gr_meter=1; ); + +@gfx 0 32 // request horizontal/vertical heights (0 means dont care) + + gr_meter *= exp(1/30); gr_meter>1?gr_meter=1; // decay meter here so if the audio processing stops it doesnt "stick" + gfx_r=1; gfx_g=gfx_b=0; gfx_a=0.8; + + meter_bot=20; + meter_h=min(gfx_h,32); + xscale=gfx_w*20/meter_bot; + + gfx_y=0; + gfx_x=gfx_w + log10(gr_meter)*xscale; + gfx_rectto(gfx_w,meter_h); + + gfx_r=gfx_g=gfx_b=1.0; gfx_a=0.6; + + s2=sqrt(2)/2; + g = s2; + while( + gfx_x=gfx_w + log10(g)*xscale; + gfx_x >= 0 ? + ( + gfx_y=0; + gfx_lineto(gfx_x,meter_h,0); + gfx_y=meter_h-gfx_texth; + gfx_x+=2; + gfx_drawnumber(log10(g)*20,0); + gfx_drawchar($'d'); + gfx_drawchar($'B'); + ); + g*=s2; + gfx_x >=0; + ); + gfx_a=1; + + gfx_x=0; gfx_y=meter_h/2 - gfx_texth/2; + gfx_drawnumber(log10(gr_meter)*20,1); + gfx_drawchar($'d'); + gfx_drawchar($'B'); diff --git a/Effects/loser/Saturation b/Effects/loser/Saturation new file mode 100644 index 0000000..1ab4626 --- /dev/null +++ b/Effects/loser/Saturation @@ -0,0 +1,78 @@ +// (C) 2006-2007, Michael Gruhn. + +// NO WARRANTY IS GRANTED. THIS PLUG-IN IS PROVIDED ON AN "AS IS" BASIS, WITHOUT +// WARRANTY OF ANY KIND. NO LIABILITY IS GRANTED, INCLUDING, BUT NOT LIMITED TO, +// ANY DIRECT OR INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGE ARISING +// OUT OF THE USE OR INABILITY TO USE THIS PLUG-IN, COMPUTER FAILTURE OF +// MALFUNCTION INCLUDED. THE USE OF THE SOURCE CODE, EITHER PARTIALLY OR IN +// TOTAL, IS ONLY GRANTED, IF USED IN THE SENSE OF THE AUTHOR'S INTENTION, AND +// USED WITH ACKNOWLEDGEMENT OF THE AUTHOR. FURTHERMORE IS THIS PLUG-IN A THIRD +// PARTY CONTRIBUTION, EVEN IF INCLUDED IN REAPER(TM), COCKOS INCORPORATED OR +// ITS AFFILIATES HAVE NOTHING TO DO WITH IT. LAST BUT NOT LEAST, BY USING THIS +// PLUG-IN YOU RELINQUISH YOUR CLAIM TO SUE IT'S AUTHOR, AS WELL AS THE CLAIM TO +// ENTRUST SOMEBODY ELSE WITH DOING SO. + +desc:Saturation +desc:Saturation [LOSER] +//tags: processing amplitude gain saturation +//author: LOSER + +slider1:0<0,100,1>Amount (%) + +in_pin:left input +in_pin:right input +out_pin:left output +out_pin:right output + +@init +gfx_clear = 0; +@slider +foo=slider1/200*$pi; +bar = sin(slider1/200*$pi); + + +@sample +slider1 ? ( +spl0 = min(max( sin(max(min(spl0,1),-1)*foo)/bar ,-1) ,1); +spl1 = min(max( sin(max(min(spl1,1),-1)*foo)/bar ,-1) ,1); +); + +@gfx 192 192 + +gfxSize = min(gfx_w,gfx_h); + + +gfx_r=gfx_g=gfx_b=0; gfx_a=1; +gfx_x=gfx_y=0; +gfx_rectto(gfx_w,gfx_h); + +gfx_r=gfx_g=gfx_b=0.8; gfx_a=1; +gfx_x=gfxSize/2; gfx_y=0; +gfx_lineto(gfxSize/2,gfxSize,0); +gfx_x=0; gfx_y=gfxSize/2; +gfx_lineto(gfxSize,gfxSize/2,0); + +gfx_x = gfxSize-20; gfx_y = gfxSize/2; +gfx_drawchar($'I'); +gfx_drawchar($'N'); + +gfx_x = gfxSize/2+2; gfx_y = 0; +gfx_drawchar($'O'); +gfx_drawchar($'U'); +gfx_drawchar($'T'); + +slider1 ? ( + gfx_r=0.5; gfx_g=1; gfx_b=0; gfx_a=1; + gfx_x=0; gfx_y=gfxSize; + x = -1; + while( + y = -sin(x*foo)/bar; + gfx_lineto(x*gfxSize/2+gfxSize/2,y*gfxSize/2+gfxSize/2,1); + (x+=0.1) <= 1; + ); + gfx_lineto(gfxSize,0,1); +):( + gfx_r=0.5; gfx_g=1; gfx_b=0; gfx_a=1; + gfx_x=0; gfx_y=gfxSize; + gfx_lineto(gfxSize,0,1); +); diff --git a/Effects/loser/StereoField b/Effects/loser/StereoField new file mode 100644 index 0000000..be200e3 --- /dev/null +++ b/Effects/loser/StereoField @@ -0,0 +1,62 @@ +// (C) 2006-2007, Michael Gruhn. + +// NO WARRANTY IS GRANTED. THIS PLUG-IN IS PROVIDED ON AN "AS IS" BASIS, WITHOUT +// WARRANTY OF ANY KIND. NO LIABILITY IS GRANTED, INCLUDING, BUT NOT LIMITED TO, +// ANY DIRECT OR INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGE ARISING +// OUT OF THE USE OR INABILITY TO USE THIS PLUG-IN, COMPUTER FAILTURE OF +// MALFUNCTION INCLUDED. THE USE OF THE SOURCE CODE, EITHER PARTIALLY OR IN +// TOTAL, IS ONLY GRANTED, IF USED IN THE SENSE OF THE AUTHOR'S INTENTION, AND +// USED WITH ACKNOWLEDGEMENT OF THE AUTHOR. FURTHERMORE IS THIS PLUG-IN A THIRD +// PARTY CONTRIBUTION, EVEN IF INCLUDED IN REAPER(TM), COCKOS INCORPORATED OR +// ITS AFFILIATES HAVE NOTHING TO DO WITH IT. LAST BUT NOT LEAST, BY USING THIS +// PLUG-IN YOU RELINQUISH YOUR CLAIM TO SUE IT'S AUTHOR, AS WELL AS THE CLAIM TO +// ENTRUST SOMEBODY ELSE WITH DOING SO. + +desc:Stereo Field Manipulator +desc:Stereo Field Manipulator [LOSER] +//tags: processing stereo +//author: LOSER + +slider1:0<-90,90,1>Rotate () +slider2:100<0,200,1>Width (%) +slider3:0<-100,100,1>Center (%) +slider4:0<-100,100,1>Left/Right (%) + +in_pin:left input +in_pin:right input +out_pin:left output +out_pin:right output + +@slider +rot=slider1*0.017453292; +width = slider2 / 200; +center = min(slider3/100+1,1); +side = (1-slider3/100); +left = -min(slider4/100,0); +left1 = -max(slider4/100-1,-1); +right = max(slider4/100,0); +right1 = min(1+slider4/100,1); + +update = 0; + +@sample + +// Rotation +s0 = sign(spl0); +s1 = sign(spl1); +angle = atan( spl0 / spl1 ); +(s0 == 1 && s1 == -1) || (s0 == -1 && s1 == -1) ? angle += 3.141592654; +s0 == -1 && s1 == 1 ? angle += 6.283185307; +spl1 == 0 ? spl0 > 0 ? angle = 1.570796327 : angle = 4.71238898; +spl0 == 0 ? spl1 > 0 ? angle = 0 : angle = 3.141592654; +angle -= rot; +radius = sqrt( sqr(spl0)+sqr(spl1) ) ; +spl0 = sin(angle)*radius; +spl1 = cos(angle)*radius; + +// 3 Way Balancer + Enhancer +mono = (spl0 + spl1)/2 * center; +stereo = (spl0 - spl1) * side; +spl0 = (mono + (stereo*left1 - stereo*right )* width) / max(width,1); +spl1 = (mono + (-stereo*right1 + stereo*left )* width) / max(width,1); + diff --git a/Effects/loser/TimeDelayer b/Effects/loser/TimeDelayer new file mode 100644 index 0000000..a48b3b2 --- /dev/null +++ b/Effects/loser/TimeDelayer @@ -0,0 +1,60 @@ +// (C) 2007, Michael Gruhn. + +// NO WARRANTY IS GRANTED. THIS PLUG-IN IS PROVIDED ON AN "AS IS" BASIS, WITHOUT +// WARRANTY OF ANY KIND. NO LIABILITY IS GRANTED, INCLUDING, BUT NOT LIMITED TO, +// ANY DIRECT OR INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGE ARISING +// OUT OF THE USE OR INABILITY TO USE THIS PLUG-IN, COMPUTER FAILTURE OF +// MALFUNCTION INCLUDED. THE USE OF THE SOURCE CODE, EITHER PARTIALLY OR IN +// TOTAL, IS ONLY GRANTED, IF USED IN THE SENSE OF THE AUTHOR'S INTENTION, AND +// USED WITH ACKNOWLEDGEMENT OF THE AUTHOR. FURTHERMORE IS THIS PLUG-IN A THIRD +// PARTY CONTRIBUTION, EVEN IF INCLUDED IN REAPER(TM), COCKOS INCORPORATED OR +// ITS AFFILIATES HAVE NOTHING TO DO WITH IT. LAST BUT NOT LEAST, BY USING THIS +// PLUG-IN YOU RELINQUISH YOUR CLAIM TO SUE IT'S AUTHOR, AS WELL AS THE CLAIM TO +// ENTRUST SOMEBODY ELSE WITH DOING SO. + +desc:Channel Time Delayer +desc:Channel Time Delayer [LOSER] +//tags: stereo delay +//author: LOSER + +slider1:0<-100,100,1>Delay L (ms) +slider2:0<-100,100,1>Delay R (ms) + +in_pin:left input +in_pin:right input +out_pin:left output +out_pin:right output + +@slider +slider1 >= 0 && slider2 >= 0 ? +( + buflL = floor(slider1 / 1000 * srate) ; + buflR = floor(slider2 / 1000 * srate) + buflL+1; + +):( + + slider1 <= slider2 ? + ( + buflL = 0 ; + buflR = floor((slider2-slider1) / 1000 * srate) + buflL+1; + ):( + buflL = floor((slider1-slider2) / 1000 * srate) ; + buflR = buflL+1; + ); + + pdc_delay = floor(min( -min(slider1,slider2)/1000 * srate,500000)); + pdc_bot_ch=0; pdc_top_ch=2; + +); + +@sample +bufLpos[0] = spl0 ; +bufLpos = bufLpos + 1 ; +bufLpos >= buflL ? bufLpos = 0; + +bufRpos[0] = spl1 ; +bufRpos = bufRpos + 1 ; +bufRpos >= buflR ? bufRpos = buflL+1; + +spl0 = bufLpos[0] ; +spl1 = bufRpos[0] ; diff --git a/Effects/loser/TransientController b/Effects/loser/TransientController new file mode 100644 index 0000000..e8ad624 --- /dev/null +++ b/Effects/loser/TransientController @@ -0,0 +1,53 @@ +// (C) 2007, Michael Gruhn. + +// NO WARRANTY IS GRANTED. THIS PLUG-IN IS PROVIDED ON AN "AS IS" BASIS, WITHOUT +// WARRANTY OF ANY KIND. NO LIABILITY IS GRANTED, INCLUDING, BUT NOT LIMITED TO, +// ANY DIRECT OR INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGE ARISING +// OUT OF THE USE OR INABILITY TO USE THIS PLUG-IN, COMPUTER FAILTURE OF +// MALFUNCTION INCLUDED. THE USE OF THE SOURCE CODE, EITHER PARTIALLY OR IN +// TOTAL, IS ONLY GRANTED, IF USED IN THE SENSE OF THE AUTHOR'S INTENTION, AND +// USED WITH ACKNOWLEDGEMENT OF THE AUTHOR. FURTHERMORE IS THIS PLUG-IN A THIRD +// PARTY CONTRIBUTION, EVEN IF INCLUDED IN REAPER(TM), COCKOS INCORPORATED OR +// ITS AFFILIATES HAVE NOTHING TO DO WITH IT. LAST BUT NOT LEAST, BY USING THIS +// PLUG-IN YOU RELINQUISH YOUR CLAIM TO SUE IT'S AUTHOR, AS WELL AS THE CLAIM TO +// ENTRUST SOMEBODY ELSE WITH DOING SO. + +// Further more is this released under the GPL License: +// http://www.gnu.org/licenses/gpl.html + +desc:Transient Controller +//tags: processing dynamics transient +//author: LOSER + +slider1:0<-100,100,1>Attack (%) +slider2:0<-100,100,1>Sustain (%) +slider3:0<-12,6,.1>Output (dB) + +in_pin:left input +in_pin:right input +out_pin:left output +out_pin:right output + +@init +b1Env1 = -exp(-30 / srate ); +a0Env1 = 1.0 + b1Env1; +b1Env2 = -exp(-1250 / srate ); +a0Env2 = 1.0 + b1Env2; +b1Env3 = -exp(-3 / srate ); +a0Env3 = 1.0 + b1Env3; + +@slider +attack=slider1/100; +sustain=slider2/50; +vol = 2^(slider3/6); + +@sample +maxSpls = max(abs(spl0),abs(spl1)); +env1 = sqrt(tmpEnv1 = a0Env1*maxSpls - b1Env1*tmpEnv1); +env2 = sqrt(tmpEnv2 = a0Env2*maxSpls - b1Env2*tmpEnv2); +env3 = sqrt(tmpEnv3 = a0Env3*maxSpls - b1Env3*tmpEnv3); + +gain = exp(log(max(env2/env1,1))*attack) * exp( log( max(env3/env1,1))*sustain); + +spl0 *= (gain *= vol); +spl1 *= gain; diff --git a/Effects/loser/TransientKiller b/Effects/loser/TransientKiller new file mode 100644 index 0000000..2071456 --- /dev/null +++ b/Effects/loser/TransientKiller @@ -0,0 +1,43 @@ +// (C) 2006, Michael Gruhn. + +// NO WARRANTY IS GRANTED. THIS PLUG-IN IS PROVIDED ON AN "AS IS" BASIS, WITHOUT +// WARRANTY OF ANY KIND. NO LIABILITY IS GRANTED, INCLUDING, BUT NOT LIMITED TO, +// ANY DIRECT OR INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGE ARISING +// OUT OF THE USE OR INABILITY TO USE THIS PLUG-IN, COMPUTER FAILTURE OF +// MALFUNCTION INCLUDED. THE USE OF THE SOURCE CODE, EITHER PARTIALLY OR IN +// TOTAL, IS ONLY GRANTED, IF USED IN THE SENSE OF THE AUTHOR'S INTENTION, AND +// USED WITH ACKNOWLEDGEMENT OF THE AUTHOR. FURTHERMORE IS THIS PLUG-IN A THIRD +// PARTY CONTRIBUTION, EVEN IF INCLUDED IN REAPER(TM), COCKOS INCORPORATED OR +// ITS AFFILIATES HAVE NOTHING TO DO WITH IT. LAST BUT NOT LEAST, BY USING THIS +// PLUG-IN YOU RELINQUISH YOUR CLAIM TO SUE IT'S AUTHOR, AS WELL AS THE CLAIM TO +// ENTRUST SOMEBODY ELSE WITH DOING SO. + +desc:Transient Killer +desc:Transient Killer (Instant Compressor) [LOSER] +//tags: dynamics compressor +//author: LOSER + +slider1:0<-12,1,.1>Threshold (dB) +slider2:1<1,50,.1>Ratio + +in_pin:left input +in_pin:right input +out_pin:left output +out_pin:right output + +@init +cAmpDB_ = 8.65617025; + +@slider +treshDB = slider1; + +ratio = slider2; + +vol = 1/exp( (treshDB -treshDB/ratio) / cAmpDB_); + +@sample +(db0 = log(abs(spl0))*cAmpDB_) > treshDB ? spl0 = exp( (treshDB + (db0 - treshDB)/ratio) / cAmpDB_)* sign(spl0); +(db1 = log(abs(spl1))*cAmpDB_) > treshDB ? spl1 = exp( (treshDB + (db1 - treshDB)/ratio) / cAmpDB_)* sign(spl1); +spl0 *= vol; +spl1 *= vol; + diff --git a/Effects/loser/UpwardExpander b/Effects/loser/UpwardExpander new file mode 100644 index 0000000..ad18864 --- /dev/null +++ b/Effects/loser/UpwardExpander @@ -0,0 +1,85 @@ +// (C) 2007, Michael Gruhn. + +// NO WARRANTY IS GRANTED. THIS PLUG-IN IS PROVIDED ON AN "AS IS" BASIS, WITHOUT +// WARRANTY OF ANY KIND. NO LIABILITY IS GRANTED, INCLUDING, BUT NOT LIMITED TO, +// ANY DIRECT OR INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGE ARISING +// OUT OF THE USE OR INABILITY TO USE THIS PLUG-IN, COMPUTER FAILTURE OF +// MALFUNCTION INCLUDED. THE USE OF THE SOURCE CODE, EITHER PARTIALLY OR IN +// TOTAL, IS ONLY GRANTED, IF USED IN THE SENSE OF THE AUTHOR'S INTENTION, AND +// USED WITH ACKNOWLEDGEMENT OF THE AUTHOR. FURTHERMORE IS THIS PLUG-IN A THIRD +// PARTY CONTRIBUTION, EVEN IF INCLUDED IN REAPER(TM), COCKOS INCORPORATED OR +// ITS AFFILIATES HAVE NOTHING TO DO WITH IT. LAST BUT NOT LEAST, BY USING THIS +// PLUG-IN YOU RELINQUISH YOUR CLAIM TO SUE IT'S AUTHOR, AS WELL AS THE CLAIM TO +// ENTRUST SOMEBODY ELSE WITH DOING SO. + +desc:Upward Expander +desc:Upward Expander [LOSER] +//tags: dynamics expander +//author: LOSER + +slider1:0<-30,0,.1>Threshold (dB) +slider2:1<0.25,1,.01>Ratio +slider3:20<0,250,1>Attack (ms) +slider4:200<0,500,1>Release (ms) +slider5:0<0,250,1>RMS Size (ms) +slider6:0<-6,50,.1>Output (dB) +slider7:0<0,1,1{Feedforward (1+2),Sidechain (3+4)}>Feed +slider8:0,Expansion (dB) +slider9:-120<-120,0,.1>Dry Mix (dB) + +in_pin:main left +in_pin:main right +in_pin:sidechain left +in_pin:sidechain right +out_pin:left output +out_pin:right output + +@init +gain = seekgain = 1; +c = 8.65617025; +dc = 10^-30; + +t = 0; +b = -exp(-120 / srate ); +a = 1.0 + b; + +@block +slider8=slid8; +sliderchange(64); +slid8=0; + +@slider +threshDB = slider1; +thresh = exp(threshDB/c); +ratio = 1/slider2; + +attack = exp( -60 / (slider3*srate/1000) / c); +release = exp( -30 / (slider4*srate/1000) / c ); + +rmsSize = floor(slider5/1000*srate); +rmsSqrSum = rmsPos = 0; +memset(0,0,rmsSize); + +volume = exp(slider6/c) / exp(( threshDB -threshDB*ratio )/c) ; + +dry = exp(slider9/c); + +seekgain = 1; + +@sample +slider7 == 0 ? rms = max( abs(spl0) , abs(spl1) ):rms = max( abs(spl2) , abs(spl3) ); + +rms = max( sqrt( (t = a*rms-b*t) ) , rms); + +rmsSize > 1 ? ( + rmsSqrSum = max(rmsSqrSum - rmsPos[0],0) + (rmsPos[0] = sqr(rms)); + (rmsPos+=1) >= rmsSize ? rmsPos=0; + rms = sqrt(rmsSqrSum/rmsSize); +); + +seekGain = (rms > thresh) ? exp((threshDB + (log(rms)*c-threshDB)*ratio) /c) / rms : 1; +gain = ((gain > seekGain) ? max( gain*release , seekGain ) : min( gain/attack , seekGain )); +spl0 = spl0 * gain * volume + spl0 * dry; +spl1 = spl1 * gain * volume + spl1 * dry; +slid8 = max(log(gain)*c,slid8); + diff --git a/Effects/loser/WhiteNoise b/Effects/loser/WhiteNoise new file mode 100644 index 0000000..b7777c2 --- /dev/null +++ b/Effects/loser/WhiteNoise @@ -0,0 +1,34 @@ +// (C) 2006-2007, Michael Gruhn. + +// NO WARRANTY IS GRANTED. THIS PLUG-IN IS PROVIDED ON AN "AS IS" BASIS, WITHOUT +// WARRANTY OF ANY KIND. NO LIABILITY IS GRANTED, INCLUDING, BUT NOT LIMITED TO, +// ANY DIRECT OR INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGE ARISING +// OUT OF THE USE OR INABILITY TO USE THIS PLUG-IN, COMPUTER FAILTURE OF +// MALFUNCTION INCLUDED. THE USE OF THE SOURCE CODE, EITHER PARTIALLY OR IN +// TOTAL, IS ONLY GRANTED, IF USED IN THE SENSE OF THE AUTHOR'S INTENTION, AND +// USED WITH ACKNOWLEDGEMENT OF THE AUTHOR. FURTHERMORE IS THIS PLUG-IN A THIRD +// PARTY CONTRIBUTION, EVEN IF INCLUDED IN REAPER(TM), COCKOS INCORPORATED OR +// ITS AFFILIATES HAVE NOTHING TO DO WITH IT. LAST BUT NOT LEAST, BY USING THIS +// PLUG-IN YOU RELINQUISH YOUR CLAIM TO SUE IT'S AUTHOR, AS WELL AS THE CLAIM TO +// ENTRUST SOMEBODY ELSE WITH DOING SO. + +desc:White Noise Generator +//tags: analysis generator synthesis +//author: LOSER + +slider1:-120<-120,0,1>Dry Volume (dB) +slider2:-12<-120,0,1>Noise Volume (dB) + +in_pin:left input +in_pin:right input +out_pin:left output +out_pin:right output + +@slider +vd=2^(slider1/6); +vn=2^(slider2/6); + +@sample +noise=rand(2)-1; +spl0=spl0*vd+noise*vn; +spl1=spl1*vd+noise*vn; diff --git a/Effects/loser/ZeroCrossingMaximizer b/Effects/loser/ZeroCrossingMaximizer new file mode 100644 index 0000000..6abdd78 --- /dev/null +++ b/Effects/loser/ZeroCrossingMaximizer @@ -0,0 +1,98 @@ +// (C) 2006-2007, Michael Gruhn. + +// NO WARRANTY IS GRANTED. THIS PLUG-IN IS PROVIDED ON AN "AS IS" BASIS, WITHOUT +// WARRANTY OF ANY KIND. NO LIABILITY IS GRANTED, INCLUDING, BUT NOT LIMITED TO, +// ANY DIRECT OR INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGE ARISING +// OUT OF THE USE OR INABILITY TO USE THIS PLUG-IN, COMPUTER FAILTURE OF +// MALFUNCTION INCLUDED. THE USE OF THE SOURCE CODE, EITHER PARTIALLY OR IN +// TOTAL, IS ONLY GRANTED, IF USED IN THE SENSE OF THE AUTHOR'S INTENTION, AND +// USED WITH ACKNOWLEDGEMENT OF THE AUTHOR. FURTHERMORE IS THIS PLUG-IN A THIRD +// PARTY CONTRIBUTION, EVEN IF INCLUDED IN REAPER(TM), COCKOS INCORPORATED OR +// ITS AFFILIATES HAVE NOTHING TO DO WITH IT. LAST BUT NOT LEAST, BY USING THIS +// PLUG-IN YOU RELINQUISH YOUR CLAIM TO SUE IT'S AUTHOR, AS WELL AS THE CLAIM TO +// ENTRUST SOMEBODY ELSE WITH DOING SO. + +desc:Zero Crossing Maximizer +desc:Zero Crossing Maximizer [LOSER] +//tags: processing dynamics +//author: LOSER + +slider1:0<-12,0,.1>Threshold (dB) +slider2:0<-12,0,.1>Ceiling (dB) +slider3:500<250,1000,1>Buffer Size (ms) + +in_pin:left input +in_pin:right input +out_pin:left output +out_pin:right output + +@slider +thresh = 2^(slider1/6); +buffer = 0; +pdc_delay = bufSize = floor(min(slider3/1000 * srate,500000)); +bufOffs = bufSize + 1; +pdc_bot_ch=0; pdc_top_ch=2; +ceiling = 2^(slider2/6); +volume = ceiling/thresh; + +@sample + +buffer[bufPos] = spl0; + +// track zero crossings +spl0 > 0 ? s0=1 : s0=0; + +maxSpl0 = max ( maxSpl0, abs(spl0)); + +s0 != lastS0 ? +( +maxSpl0 > thresh ? gain=thresh/maxSpl0 : gain=1; +adjPos = length0; + + loop(length0+1, + buffer[bufPos - adjPos + ((bufPos-adjPos)<0 ? bufSize+1:0;) ] *= gain; + (adjPos -= 1); + ); + +length0 = -1; +maxSpl0 = 0; +); +(length0+=1) > bufSize ? length0 = maxSpl1 = 0; +lastS0 = s0; + +bufOffs[bufPos] = spl1; + + + +// track zero crossings +spl1 > 0 ? s1=1 : s1=0; + +maxSpl1 = max ( maxSpl1, abs(spl1)); + + +s1 != lastS1 ? +( +maxSpl1 > thresh ? gain=thresh/maxSpl1 : gain=1; +adjPos = length1; + + loop(length1+1, + bufOffs[bufPos - adjPos + ((bufPos-adjPos)<0 ? bufSize+1:0;) ] *= gain; + (adjPos -= 1); + ); + +length1 = -1; +maxSpl1 = 0; +); +(length1+=1) > bufSize ? length1 = maxSpl1 = 0; +lastS1 = s1; + + +(bufPos += 1) > bufSize ? bufPos = 0 ; + +spl0 = buffer[bufPos]*volume; +spl1 = bufOffs[bufPos]*volume; + +// Can comment this out for more speed ;) +spl0 = min(max(spl0,-1),1); +spl1 = min(max(spl1,-1),1); + diff --git a/Effects/loser/amplitudeModulator b/Effects/loser/amplitudeModulator new file mode 100644 index 0000000..0ca0e62 --- /dev/null +++ b/Effects/loser/amplitudeModulator @@ -0,0 +1,35 @@ +// (C) 2006, Michael Gruhn. + +// NO WARRANTY IS GRANTED. THIS PLUG-IN IS PROVIDED ON AN "AS IS" BASIS, WITHOUT +// WARRANTY OF ANY KIND. NO LIABILITY IS GRANTED, INCLUDING, BUT NOT LIMITED TO, +// ANY DIRECT OR INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGE ARISING +// OUT OF THE USE OR INABILITY TO USE THIS PLUG-IN, COMPUTER FAILTURE OF +// MALFUNCTION INCLUDED. THE USE OF THE SOURCE CODE, EITHER PARTIALLY OR IN +// TOTAL, IS ONLY GRANTED, IF USED IN THE SENSE OF THE AUTHOR'S INTENTION, AND +// USED WITH ACKNOWLEDGEMENT OF THE AUTHOR. FURTHERMORE IS THIS PLUG-IN A THIRD +// PARTY CONTRIBUTION, EVEN IF INCLUDED IN REAPER(TM), COCKOS INCORPORATED OR +// ITS AFFILIATES HAVE NOTHING TO DO WITH IT. LAST BUT NOT LEAST, BY USING THIS +// PLUG-IN YOU RELINQUISH YOUR CLAIM TO SUE IT'S AUTHOR, AS WELL AS THE CLAIM TO +// ENTRUST SOMEBODY ELSE WITH DOING SO. + + +desc:Amplitude Modulator +//tags: processing amplitude modulation +//author: LOSER + +slider1:440<80,1000,1>Frequency (Hz) + +in_pin:left input +in_pin:right input +out_pin:left output +out_pin:right output + +@slider +x=(2*$pi*slider1)/srate; + +@sample +spl0=spl0*sin(t); +spl1=spl1*sin(t); + +t=t+x; + diff --git a/Effects/loser/gfxGoniometer b/Effects/loser/gfxGoniometer new file mode 100644 index 0000000..16a29ba --- /dev/null +++ b/Effects/loser/gfxGoniometer @@ -0,0 +1,133 @@ +(C) 2007, Michael Gruhn. + +desc:Goniometer +desc:Goniometer [LOSER] +//tags: analysis visualization +//author: LOSER + +slider1:0<0,2,1{Dots,Lines,Rays}>Display + +in_pin:left input +in_pin:right input +out_pin:none + +@init +gfx_clear=-1; +off = 500000; +rot=-45*0.017453292; +DOTS = 0; +LINES = 1; +RAYS = 2; +MAXDRAWSPLS = 10000; +PHASEUPDATERATE = srate/8; +n = 0; +phC = 0; +ph = 0; +@slider + +@block + +@sample +s0 = sign(spl0); +s1 = sign(spl1); +angle = atan( spl0 / spl1 ); +(s0 == 1 && s1 == -1) || (s0 == -1 && s1 == -1) ? angle += 3.141592654; +s0 == -1 && s1 == 1 ? angle += 6.283185307; +spl1 == 0 ? spl0 > 0 ? angle = 1.570796327 : angle = 4.71238898; +spl0 == 0 ? spl1 > 0 ? angle = 0 : angle = 3.141592654; +radius = sqrt( sqr(spl0)+sqr(spl1) ) ; +angle -= rot; +vert = 0[b] = cos(angle)*radius; +horiz = off[b] = sin(angle)*radius; +b PHASEUPDATERATE ? ( + ph = (1-(phC/n))/2; + phC = n = 0; +); + +@gfx 256 450 + +size = min(gfx_w,gfx_h); +sizeH = size/2; +sizeDSqr05 = sizeH * 0.70710681; +sizeQ = sizeH/2; +size3Q = 3*sizeQ; + +(mouse_cap) ? ( + gfx_r=gfx_g=gfx_b=0; gfx_a=1; + gfx_x=gfx_y=0; + gfx_rectto(gfx_w,gfx_h); +); + +gfx_r=gfx_g=gfx_b=0; gfx_a=0.025; +gfx_x=gfx_y=0; +gfx_rectto(gfx_w,gfx_h); + +x = y = sizeH; + +i = min(b,MAXDRAWSPLS); +while ( + slider1 == DOTS ? ( + gfx_a=1; + gfx_x=sizeH+0[i]*sizeDSqr05; + gfx_y=sizeH-off[i]*sizeDSqr05; + gfx_setpixel(0.5,1,0); + ):( + slider1 == LINES ? ( + gfx_x=x; gfx_y=y; + x=sizeH+0[i]*sizeDSqr05; + y=sizeH-off[i]*sizeDSqr05; + ):( + gfx_x=sizeH+0[i]*sizeDSqr05; + gfx_y=sizeH-off[i]*sizeDSqr05; + ); + gfx_r=0.5; gfx_g=1; gfx_b=0; gfx_a=0.6; + gfx_lineto(x,y,0); + ); + (i-=1)>0; +); +b=0; + +gfx_r=gfx_g=gfx_b=0.8; gfx_a=1; + +gfx_x=sizeQ; gfx_y=sizeQ; +gfx_lineto(size3Q,size3Q,0); + +gfx_x=sizeQ; gfx_y=size3Q; +gfx_lineto(size3Q,sizeQ,0); + +gfx_x = gfx_y = sizeQ; +gfx_drawchar($'L'); +gfx_x = size3Q; gfx_y = sizeQ; +gfx_drawchar($'R'); +gfx_x = sizeH; gfx_y = 0; +gfx_drawchar($'M'); +gfx_x = 0; gfx_y = sizeH; +gfx_drawchar($'+'); +gfx_drawchar($'S'); +gfx_x = size-20; gfx_y = sizeH; +gfx_drawchar($'-'); +gfx_drawchar($'S'); + + +gfx_r=gfx_g=gfx_b=0; gfx_a=1; +gfx_x=0; gfx_y=size; +gfx_rectto(size+1,size+20); +gfx_r=1; gfx_g=0; gfx_b=0; gfx_a=1; +gfx_x=1+ph*(size-1); gfx_y=size+1; +gfx_lineto(gfx_x,size+19,0); + +gfx_r=gfx_g=gfx_b=0.8; gfx_a=1; +gfx_x = 0; gfx_y = size+10; +gfx_drawnumber(0,0); +gfx_x = sizeH-8; gfx_y = size+10; +gfx_drawnumber(90,0); +gfx_x = size-25; gfx_y = size+10; +gfx_drawnumber(180,0); + +gfx_r=0.5; gfx_g=1; gfx_b=0; gfx_a=1; +gfx_x = 0; gfx_y = size; +gfx_drawnumber(ph*180,0); diff --git a/Effects/loser/gmemReceive b/Effects/loser/gmemReceive new file mode 100644 index 0000000..59b3b41 --- /dev/null +++ b/Effects/loser/gmemReceive @@ -0,0 +1,15 @@ +desc:gmem Receive +slider1:0<0,99,1>From Slot +slider2:0<0,4,1{1+2,3+4,5+6,7+8,9+10}>To Channels + +@block +pos=slider1*2*samplesblock; + +@sample +slider2==0 ? (spl0+=gmem[pos]; spl1+=gmem[pos+1];); +slider2==1 ? (spl2+=gmem[pos]; spl3+=gmem[pos+1];); +slider2==2 ? (spl4+=gmem[pos]; spl5+=gmem[pos+1];); +slider2==3 ? (spl6+=gmem[pos]; spl7+=gmem[pos+1];); +slider2==4 ? (spl8+=gmem[pos]; spl9+=gmem[pos+1];); + +pos+=2; \ No newline at end of file diff --git a/Effects/loser/gmemSend b/Effects/loser/gmemSend new file mode 100644 index 0000000..d3ef369 --- /dev/null +++ b/Effects/loser/gmemSend @@ -0,0 +1,16 @@ +desc:gmem Send +slider1:0<0,4,1{1+2,3+4,5+6,7+8,9+10}>From Channels +slider2:0<0,99,1>To Slot + +@block +pos=slider2*2*samplesblock; + +@sample + +slider1 == 0 ? (gmem[pos] = spl0; gmem[pos+1] = spl1;); +slider1 == 1 ? (gmem[pos] = spl2; gmem[pos+1] = spl3;); +slider1 == 2 ? (gmem[pos] = spl4; gmem[pos+1] = spl5;); +slider1 == 3 ? (gmem[pos] = spl6; gmem[pos+1] = spl7;); +slider1 == 4 ? (gmem[pos] = spl8; gmem[pos+1] = spl9;); + +pos+=2; \ No newline at end of file diff --git a/Effects/loser/masterLimiter b/Effects/loser/masterLimiter new file mode 100644 index 0000000..cc4ae26 --- /dev/null +++ b/Effects/loser/masterLimiter @@ -0,0 +1,89 @@ +// (C) 2006, Michael Gruhn. + +// NO WARRANTY IS GRANTED. THIS PLUG-IN IS PROVIDED ON AN "AS IS" BASIS, WITHOUT +// WARRANTY OF ANY KIND. NO LIABILITY IS GRANTED, INCLUDING, BUT NOT LIMITED TO, +// ANY DIRECT OR INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGE ARISING +// OUT OF THE USE OR INABILITY TO USE THIS PLUG-IN, COMPUTER FAILTURE OF +// MALFUNCTION INCLUDED. THE USE OF THE SOURCE CODE, EITHER PARTIALLY OR IN +// TOTAL, IS ONLY GRANTED, IF USED IN THE SENSE OF THE AUTHOR'S INTENTION, AND +// USED WITH ACKNOWLEDGEMENT OF THE AUTHOR. FURTHERMORE IS THIS PLUG-IN A THIRD +// PARTY CONTRIBUTION, EVEN IF INCLUDED IN REAPER(TM), COCKOS INCORPORATED OR +// ITS AFFILIATES HAVE NOTHING TO DO WITH IT. LAST BUT NOT LEAST, BY USING THIS +// PLUG-IN YOU RELINQUISH YOUR CLAIM TO SUE IT'S AUTHOR, AS WELL AS THE CLAIM TO +// ENTRUST SOMEBODY ELSE WITH DOING SO. + + +desc:Master Limiter +//tags: dynamics limiter +//author: LOSER + +slider1:-3<-20,-.1,.1>Threshold (dB) +slider2:200<0,1000,1>Look Ahead (s) +slider3:100<0,1000,1>Attack (s) +slider4:0<0,10,.1>Hold (ms) +slider5:250<0,1000,1>Release (ms) +slider6:-.1<-6,0,.01>Limit (dB) +slider7:0,Reduction + +in_pin:left input +in_pin:right input +out_pin:left output +out_pin:right output + +@init +gain = seekgain = 1; +c_ampdB = 8.65617025; + +@slider +treshdB = min(slider1,-.1); +tresh = exp(treshdB/c_ampdB); + +treshdB == -.1 ? (gain = seekgain = 1; ); + +look = floor(max( min( slider2/1000000*srate , 500000) , 1)); +attack = exp( -treshdB/max( slider3/1000000*srate , 0) / c_ampdB ) ; +hold = slider4/1000*srate; +under_tresh = 0; +release = exp( -treshdB/max( slider5/1000*srate , 0) / c_ampdB ) ; + +limit = exp(slider6/c_ampdB); + +mode_make_up = 1; + +volume = limit / (mode_make_up ? tresh : 1); + +seekgain = 1; + +@sample +detect = max(abs(spl0),abs(spl1)); + +bufPos[0] = spl0; +bufPos[look] = spl1; +(bufPos += 1) >= look ? bufPos = 0 ; +spl0 = bufPos[0]; +spl1 = bufPos[look]; + +// Prevent From Preopening, I Know There Might Be Transients In Between, But Fuck'Em :/ +detect = max(max(abs(spl0),abs(spl1)),detect); + +detect > tresh ? ( + under_tresh = 0; + hold ? seekgain = min( tresh/detect ,seekgain ) : seekgain = tresh/detect; +):( + (under_tresh+=1)>hold ? (seekgain = 1; ); +); + +gain > seekgain ? gain=max(gain/attack,seekgain):gain=min(gain*release,seekgain); + +spl0 *= gain * volume; +spl1 *= gain * volume; + +// Prevent From Unecessary Distortion, Better Distort Just Once Even Tho Hard :) +max(abs(spl0),abs(spl1)) > limit ? gain = seekgain; // Uber Nifty Metering For This Doesn't Work :( + +spl0 = max(min(spl0,limit),-limit); +spl1 = max(min(spl1,limit),-limit); + +slider7 = log(gain)*c_ampdB; +sliderchange(64); + diff --git a/Effects/loser/phaseMeter b/Effects/loser/phaseMeter new file mode 100644 index 0000000..e977f87 --- /dev/null +++ b/Effects/loser/phaseMeter @@ -0,0 +1,42 @@ +// (C) 2006, Michael Gruhn. + +// NO WARRANTY IS GRANTED. THIS PLUG-IN IS PROVIDED ON AN "AS IS" BASIS, WITHOUT +// WARRANTY OF ANY KIND. NO LIABILITY IS GRANTED, INCLUDING, BUT NOT LIMITED TO, +// ANY DIRECT OR INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGE ARISING +// OUT OF THE USE OR INABILITY TO USE THIS PLUG-IN, COMPUTER FAILTURE OF +// MALFUNCTION INCLUDED. THE USE OF THE SOURCE CODE, EITHER PARTIALLY OR IN +// TOTAL, IS ONLY GRANTED, IF USED IN THE SENSE OF THE AUTHOR'S INTENTION, AND +// USED WITH ACKNOWLEDGEMENT OF THE AUTHOR. FURTHERMORE IS THIS PLUG-IN A THIRD +// PARTY CONTRIBUTION, EVEN IF INCLUDED IN REAPER(TM), COCKOS INCORPORATED OR +// ITS AFFILIATES HAVE NOTHING TO DO WITH IT. LAST BUT NOT LEAST, BY USING THIS +// PLUG-IN YOU RELINQUISH YOUR CLAIM TO SUE IT'S AUTHOR, AS WELL AS THE CLAIM TO +// ENTRUST SOMEBODY ELSE WITH DOING SO. + +desc:Channel Phase Meter +//tags: analysis utility +//author: LOSER + +slider1:0,Sample Rate +slider2:0<0,1,1{Mono,Stereo}>Output +slider3:0<0,2,1{Out Of Phase,In Phase,-}>Stereo Channels +slider4:200<0,1000,1>Check Interval (ms) + +in_pin:left input +in_pin:right input +out_pin:none + +@slider +a = srate/1000 * slider4; +@block +(t+=samplesblock) > a ? +( +phase > 0 ? slider3=1:slider3=0; +spl0==spl1 ? (slider2=0;slider3=2;):slider2=1; +slider1=srate; +sliderchange(1+2+4); +phase=0; +t=0; +); +@sample +sign(spl0)!= sign(spl1) ? phase-=1 : phase+=1; + diff --git a/Effects/loser/ppp b/Effects/loser/ppp new file mode 100644 index 0000000..16e14f9 --- /dev/null +++ b/Effects/loser/ppp @@ -0,0 +1,38 @@ +// (C) 2006, Michael Gruhn. + +// NO WARRANTY IS GRANTED. THIS PLUG-IN IS PROVIDED ON AN "AS IS" BASIS, WITHOUT +// WARRANTY OF ANY KIND. NO LIABILITY IS GRANTED, INCLUDING, BUT NOT LIMITED TO, +// ANY DIRECT OR INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGE ARISING +// OUT OF THE USE OR INABILITY TO USE THIS PLUG-IN, COMPUTER FAILTURE OF +// MALFUNCTION INCLUDED. THE USE OF THE SOURCE CODE, EITHER PARTIALLY OR IN +// TOTAL, IS ONLY GRANTED, IF USED IN THE SENSE OF THE AUTHOR'S INTENTION, AND +// USED WITH ACKNOWLEDGEMENT OF THE AUTHOR. FURTHERMORE IS THIS PLUG-IN A THIRD +// PARTY CONTRIBUTION, EVEN IF INCLUDED IN REAPER(TM), COCKOS INCORPORATED OR +// ITS AFFILIATES HAVE NOTHING TO DO WITH IT. LAST BUT NOT LEAST, BY USING THIS +// PLUG-IN YOU RELINQUISH YOUR CLAIM TO SUE IT'S AUTHOR, AS WELL AS THE CLAIM TO +// ENTRUST SOMEBODY ELSE WITH DOING SO. + +desc:Ping Pong Pan +//tags: modulation stereo +//author: LOSER + +slider1:.25<0,20,.1>Frequency (Hz) +slider2:75<0,100,1>Width (%) + +in_pin:left input +in_pin:right input +out_pin:left output +out_pin:right output + +@slider +x=(2*$pi*slider1)/srate; +width = slider2/100; + +@sample +pan = min( max( (sin(t)) * width, -1 ) , 1 ); + +spl0 *= (pan > 0 ? 1-pan:1); +spl1 *= (pan < 0 ? 1+pan:1); + +t=t+x; + diff --git a/Effects/loser/stereo b/Effects/loser/stereo new file mode 100644 index 0000000..dc8df7b --- /dev/null +++ b/Effects/loser/stereo @@ -0,0 +1,41 @@ +// (C) 2007, Michael Gruhn. + +// NO WARRANTY IS GRANTED. THIS PLUG-IN IS PROVIDED ON AN "AS IS" BASIS, WITHOUT +// WARRANTY OF ANY KIND. NO LIABILITY IS GRANTED, INCLUDING, BUT NOT LIMITED TO, +// ANY DIRECT OR INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGE ARISING +// OUT OF THE USE OR INABILITY TO USE THIS PLUG-IN, COMPUTER FAILTURE OF +// MALFUNCTION INCLUDED. THE USE OF THE SOURCE CODE, EITHER PARTIALLY OR IN +// TOTAL, IS ONLY GRANTED, IF USED IN THE SENSE OF THE AUTHOR'S INTENTION, AND +// USED WITH ACKNOWLEDGEMENT OF THE AUTHOR. FURTHERMORE IS THIS PLUG-IN A THIRD +// PARTY CONTRIBUTION, EVEN IF INCLUDED IN REAPER(TM), COCKOS INCORPORATED OR +// ITS AFFILIATES HAVE NOTHING TO DO WITH IT. LAST BUT NOT LEAST, BY USING THIS +// PLUG-IN YOU RELINQUISH YOUR CLAIM TO SUE IT'S AUTHOR, AS WELL AS THE CLAIM TO +// ENTRUST SOMEBODY ELSE WITH DOING SO. + +desc:Stereo Upmix +desc:Stereo Upmix (Left->Stereo) +//tags: processing stereo +//author: LOSER + +slider1:125<0,250,.1>Delay (ms) + +in_pin:input +out_pin:left output +out_pin:right output + +@init +b=0; +@slider +tmp=bs; +bs=floor( min(slider1*srate/1000 , 500000) ); +tmp < bs ? freembuf(bs*2+1); +@sample +b[0]=spl0; +(b+=1) >= (bs) ? b=0; + +spl0_ = (spl0*2 + b[0])/2; +spl1_ = (spl0*2 - b[0])/2; + +spl0 = (spl0_ + spl1_/2)/1.5; +spl1 = (spl1_ + spl0_/2)/1.5; + diff --git a/Effects/loser/stereoEnhancer b/Effects/loser/stereoEnhancer new file mode 100644 index 0000000..47f4612 --- /dev/null +++ b/Effects/loser/stereoEnhancer @@ -0,0 +1,64 @@ +// (C) 2006, Michael Gruhn. + +// NO WARRANTY IS GRANTED. THIS PLUG-IN IS PROVIDED ON AN "AS IS" BASIS, WITHOUT +// WARRANTY OF ANY KIND. NO LIABILITY IS GRANTED, INCLUDING, BUT NOT LIMITED TO, +// ANY DIRECT OR INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGE ARISING +// OUT OF THE USE OR INABILITY TO USE THIS PLUG-IN, COMPUTER FAILTURE OF +// MALFUNCTION INCLUDED. THE USE OF THE SOURCE CODE, EITHER PARTIALLY OR IN +// TOTAL, IS ONLY GRANTED, IF USED IN THE SENSE OF THE AUTHOR'S INTENTION, AND +// USED WITH ACKNOWLEDGEMENT OF THE AUTHOR. FURTHERMORE IS THIS PLUG-IN A THIRD +// PARTY CONTRIBUTION, EVEN IF INCLUDED IN REAPER(TM), COCKOS INCORPORATED OR +// ITS AFFILIATES HAVE NOTHING TO DO WITH IT. LAST BUT NOT LEAST, BY USING THIS +// PLUG-IN YOU RELINQUISH YOUR CLAIM TO SUE IT'S AUTHOR, AS WELL AS THE CLAIM TO +// ENTRUST SOMEBODY ELSE WITH DOING SO. + + +desc:Stereo Enhancer +//tags: processing stereo +//author: LOSER + +slider1:100<0,200,1>Width Low (%) +slider2:500<0,20000,1>Crossover (Hz) +slider3:100<0,200,1>Width High (%) + +in_pin:left input +in_pin:right input +out_pin:left output +out_pin:right output + +@init +cDenorm = 10^-30; + +@slider +widthLP = slider1 / 200; +width = slider3 / 200; + +freq = min(slider2,srate); +x = exp(-2.0*$pi*freq/srate); +a0 = 1.0-x; +b1 = -x; + +@sample +s0 = spl0; +s1 = spl1; + +spl0 = (tmpl = a0*spl0 - b1*tmpl + cDenorm); +spl1 = (tmpr = a0*spl1 - b1*tmpr + cDenorm); + +s0 -= spl0; +s1 -= spl1; + +mono = (s0 + s1)/2; +stereo = (s0 - s1); +s0 = (mono + stereo * width) / max(width,1); +s1 = (mono - stereo * width) / max(width,1); + +monoLP = (spl0 + spl1)/2; +stereoLP = (spl0 - spl1); +spl0 = (monoLP + stereoLP * widthLP) / max(widthLP,1); +spl1 = (monoLP - stereoLP * widthLP) / max(widthLP,1); + +spl0 += s0; +spl1 += s1; + + diff --git a/Effects/loser/timeDifferencePan b/Effects/loser/timeDifferencePan new file mode 100644 index 0000000..8d55e9f --- /dev/null +++ b/Effects/loser/timeDifferencePan @@ -0,0 +1,42 @@ +// (C) 2006, Michael Gruhn. + +// NO WARRANTY IS GRANTED. THIS PLUG-IN IS PROVIDED ON AN "AS IS" BASIS, WITHOUT +// WARRANTY OF ANY KIND. NO LIABILITY IS GRANTED, INCLUDING, BUT NOT LIMITED TO, +// ANY DIRECT OR INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGE ARISING +// OUT OF THE USE OR INABILITY TO USE THIS PLUG-IN, COMPUTER FAILTURE OF +// MALFUNCTION INCLUDED. THE USE OF THE SOURCE CODE, EITHER PARTIALLY OR IN +// TOTAL, IS ONLY GRANTED, IF USED IN THE SENSE OF THE AUTHOR'S INTENTION, AND +// USED WITH ACKNOWLEDGEMENT OF THE AUTHOR. FURTHERMORE IS THIS PLUG-IN A THIRD +// PARTY CONTRIBUTION, EVEN IF INCLUDED IN REAPER(TM), COCKOS INCORPORATED OR +// ITS AFFILIATES HAVE NOTHING TO DO WITH IT. LAST BUT NOT LEAST, BY USING THIS +// PLUG-IN YOU RELINQUISH YOUR CLAIM TO SUE IT'S AUTHOR, AS WELL AS THE CLAIM TO +// ENTRUST SOMEBODY ELSE WITH DOING SO. + +desc:Time Difference Pan +//tags: processing stereo +//author: LOSER + +slider1:0<-100,100,1>Pan (%) + +in_pin:left input +in_pin:right input +out_pin:left output +out_pin:right output + +@init +b=0; +@slider +tmp=bs; +pan = abs(slider1/100); +bs=floor( min(pan/500*srate , 1000000) ); +tmp < bs ? freembuf(bs); +@sample +b[0]= slider1 > 0 ? spl0:spl1; +(b+=1) >= (bs) ? b=0; + +slider1 > 0 ? ( + spl0 = b[0]; +):( + spl1 = b[0]; +); + diff --git a/Effects/loser/transhape b/Effects/loser/transhape new file mode 100644 index 0000000..6b3040a --- /dev/null +++ b/Effects/loser/transhape @@ -0,0 +1,37 @@ +// (C) 2007, Michael Gruhn. + +// NO WARRANTY IS GRANTED. THIS PLUG-IN IS PROVIDED ON AN "AS IS" BASIS, WITHOUT +// WARRANTY OF ANY KIND. NO LIABILITY IS GRANTED, INCLUDING, BUT NOT LIMITED TO, +// ANY DIRECT OR INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGE ARISING +// OUT OF THE USE OR INABILITY TO USE THIS PLUG-IN, COMPUTER FAILTURE OF +// MALFUNCTION INCLUDED. THE USE OF THE SOURCE CODE, EITHER PARTIALLY OR IN +// TOTAL, IS ONLY GRANTED, IF USED IN THE SENSE OF THE AUTHOR'S INTENTION, AND +// USED WITH ACKNOWLEDGEMENT OF THE AUTHOR. FURTHERMORE IS THIS PLUG-IN A THIRD +// PARTY CONTRIBUTION, EVEN IF INCLUDED IN REAPER(TM), COCKOS INCORPORATED OR +// ITS AFFILIATES HAVE NOTHING TO DO WITH IT. LAST BUT NOT LEAST, BY USING THIS +// PLUG-IN YOU RELINQUISH YOUR CLAIM TO SUE IT'S AUTHOR, AS WELL AS THE CLAIM TO +// ENTRUST SOMEBODY ELSE WITH DOING SO. + +desc:Transhape (for Drums) + +slider1:0<-100,100,1>Attack (%) +slider2:0<-100,100,1>Sustain (%) + +@init +b1Env1 = -exp(-10 / srate ); +a0Env1 = 1.0 + b1Env1; +b1Env2 = -exp(-62 / srate ); +a0Env2 = 1.0 + b1Env2; + +@slider +attack=slider1/100; +sustain=slider2/100; + +@sample +maxSpls = max(abs(spl0),abs(spl1)); +env1 = (tmpEnv1 = a0Env1*maxSpls - b1Env1*tmpEnv1); +env2 = (tmpEnv2 = a0Env2*maxSpls - b1Env2*tmpEnv2); +gain = env2 - env1; +(gain > 0) ? gain = exp( log(1+(env2/env1))*attack ) : gain = exp( log(1+(env1/env2))*sustain ) ; +spl0 *= gain; +spl1 *= gain; diff --git a/Effects/loser/waveShapingDstr b/Effects/loser/waveShapingDstr new file mode 100644 index 0000000..44acada --- /dev/null +++ b/Effects/loser/waveShapingDstr @@ -0,0 +1,75 @@ +// (C) 2007, Michael Gruhn. + +// NO WARRANTY IS GRANTED. THIS PLUG-IN IS PROVIDED ON AN "AS IS" BASIS, WITHOUT +// WARRANTY OF ANY KIND. NO LIABILITY IS GRANTED, INCLUDING, BUT NOT LIMITED TO, +// ANY DIRECT OR INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGE ARISING +// OUT OF THE USE OR INABILITY TO USE THIS PLUG-IN, COMPUTER FAILTURE OF +// MALFUNCTION INCLUDED. THE USE OF THE SOURCE CODE, EITHER PARTIALLY OR IN +// TOTAL, IS ONLY GRANTED, IF USED IN THE SENSE OF THE AUTHOR'S INTENTION, AND +// USED WITH ACKNOWLEDGEMENT OF THE AUTHOR. FURTHERMORE IS THIS PLUG-IN A THIRD +// PARTY CONTRIBUTION, EVEN IF INCLUDED IN REAPER(TM), COCKOS INCORPORATED OR +// ITS AFFILIATES HAVE NOTHING TO DO WITH IT. LAST BUT NOT LEAST, BY USING THIS +// PLUG-IN YOU RELINQUISH YOUR CLAIM TO SUE IT'S AUTHOR, AS WELL AS THE CLAIM TO +// ENTRUST SOMEBODY ELSE WITH DOING SO. + +desc:Waveshaping Distortion +//tags: processing distortion waveshaper +//author: LOSER + +slider1:0<0,100,.1>Distortion (%) + +in_pin:left input +in_pin:right input +out_pin:left output +out_pin:right output + +@slider +hdistr = min(slider1/100,.999); +foo = 2*hdistr/(1-hdistr); + +@sample +spl0 = min(max(spl0,-1),1); +spl1 = min(max(spl1,-1),1); + +spl0 = (1+foo)*spl0/(1+foo*abs(spl0)); +spl1 = (1+foo)*spl1/(1+foo*abs(spl1)); + + +@gfx 192 192 +gfxSize = min(gfx_w,gfx_h); + + +gfx_r=gfx_g=gfx_b=0; gfx_a=1; +gfx_x=gfx_y=0; +gfx_rectto(gfx_w,gfx_h); + +gfx_r=gfx_g=gfx_b=0.8; gfx_a=1; +gfx_x=gfxSize/2; gfx_y=0; +gfx_lineto(gfxSize/2,gfxSize,0); +gfx_x=0; gfx_y=gfxSize/2; +gfx_lineto(gfxSize,gfxSize/2,0); + +gfx_x = gfxSize-20; gfx_y = gfxSize/2; +gfx_drawchar($'I'); +gfx_drawchar($'N'); + +gfx_x = gfxSize/2+2; gfx_y = 0; +gfx_drawchar($'O'); +gfx_drawchar($'U'); +gfx_drawchar($'T'); + +slider1 ? ( + gfx_r=0.5; gfx_g=1; gfx_b=0; gfx_a=1; + gfx_x=0; gfx_y=gfxSize; + x = -1; + while( + y = -(1+foo)*x/(1+foo*abs(x)); + gfx_lineto(x*gfxSize/2+gfxSize/2,y*gfxSize/2+gfxSize/2,1); + (x+=0.05) <= 1; + ); + gfx_lineto(gfxSize,0,1); +):( + gfx_r=0.5; gfx_g=1; gfx_b=0; gfx_a=1; + gfx_x=0; gfx_y=gfxSize; + gfx_lineto(gfxSize,0,1); +); diff --git a/Effects/meters/dynamics_meter b/Effects/meters/dynamics_meter new file mode 100644 index 0000000..155ed93 --- /dev/null +++ b/Effects/meters/dynamics_meter @@ -0,0 +1,215 @@ +desc:Dynamic Range Meter +//tags: analysis utility dynamics + +in_pin:left input +in_pin:right input +out_pin:none + +@init + +// change these if you like +RMS_MS = 300.0; +GREEN_DR = 12; +RED_DR = 6; + +// calibrate to JS frame meter numbers +MAX_DB = 0.0; +MIN_DB = -54.0; + +MAX_DR = 40; +DR_BINS = 128; + +decay = exp(-1.0/(RMS_MS*srate*0.001)); + +DB_LO = -60.0; + +buf = 0; +buflen = (RMS_MS*srate*0.001)|0; +memset(p, 0, 2*buflen); +pos = 0; + +peak0 = peak1 = 0.0; +sumsq0 = sumsq1 = 0.0; +peakdb0 = peakdb1 = rmsdb0 = rmsdb1 = DB_LO; + +dyn = sumdyn = meandyn = 0.0; +ndyn = 0; + +@block + +peak0 <= 0.0 ? peakdb0 = DB_LO : peakdb0 = 8.6562*log(peak0); +rms = sqrt(sumsq0/buflen); +rms == 0.0 ? rmsdb0 = DB_LO : rmsdb0 = 8.6562*log(rms); + +peak1 <= 0.0 ? peakdb1 = DB_LO : peakdb1 = 8.6562*log(peak1); +rms = sqrt(sumsq1/buflen); +rms == 0.0 ? rmsdb1 = DB_LO : rmsdb1 = 8.6562*log(rms); + +dyn = 0.5*(peakdb0+peakdb1-rmsdb0-rmsdb1); +dyn < 0.0 ? dyn = 0.0; + +play_state == 1 ? +( + ndyn = ndyn+1; + sumdyn = sumdyn+dyn; + meandyn = sumdyn/ndyn; +); + +@sample + +new = abs(spl0); +new > peak0 ? peak0 = new : peak0 = peak0*decay; +newsq = new*new; +oldsq = buf[pos]; +buf[pos] = newsq; +sumsq0 = sumsq0+newsq-oldsq; +pos = pos+1; + +new = abs(spl1); +new > peak1 ? peak1 = new : peak1 = peak1*decay; +newsq = new*new; +oldsq = buf[pos]; +buf[pos] = newsq; +sumsq1 = sumsq1+newsq-oldsq; +pos = pos+1; + +pos == 2*buflen ? pos = 0; + +@gfx 100 200 + +// calibrate to JS frame meter numbers +T = (gfx_h-pxperdb*60.0)|0; +B = (gfx_h-pxperdb*6.0)|0; +pxperdb = (gfx_h+22.5)/66.0; + +greenpx = GREEN_DR*pxperdb; +redpx = RED_DR*pxperdb; + +resetx = gfx_w-gfx_texth*5-4; + +doreset = 0; +mouse_cap ? +( + mouse_x >= resetx && mouse_y < 4+gfx_texth ? doreset = 1; +); + +xw = -gfx_W*3/64; +xs = -gfx_W/16; + +gfx_a = 1.0; + +i = 0; +loop +( + 2, + i == 0 ? + ( + tpeak = peakdb0; + trms = rmsdb0; + ) + : + ( + tpeak = peakdb1; + trms = rmsdb1; + ); + + peaky = B-pxperdb*(tpeak-MIN_DB); + peaky < T ? peaky = T : peaky > B ? peakY = B; + rmsy = B-pxperdb*(trms-MIN_DB); + rmsy < T ? rmsy = T : rmsy > B ? rmsY = B; + + d = (rmsy-peaky-redpx)/(greenpx-redpx); + d < 0.0 ? d = 0.0 : d > 1.0 ? d = 1.0; + gfx_r = 1.0-d; + gfx_g = d; + gfx_b = 0.0; + + gfx_x = gfx_w/2+xw/4; + gfx_y = rmsy; + gfx_rectto(gfx_x+xw, peaky); + + gfx_r = 0.2; + gfx_g = 0.8; + gfx_b = 0.3; + + gfx_x = gfx_x+xs; + gfx_rectto(gfx_x+xw, B); + gfx_x = gfx_x+xs; + gfx_rectto(gfx_x+xw, rmsy); + + xw = -xw; + xs = -xs; + i = i+1; +); + +i = 0; +db = 60; +while +( + i%2 ? gfx_r=gfx_g=gfx_b=0.0 : gfx_r=gfx_g=gfx_b=0.375; + gfx_x = 4; + gfx_y = gfx_h-pxperdb*db-0.5; + gfx_lineto(gfx_w-4, gfx_y, 0); + db = db-3; + i = i+1; + db > 0.0; +); + +gfx_r=gfx_g=gfx_b=1.0; + +txtw = gfx_texth; +dyn >= 10.0 ? txtw += gfx_texth; +gfx_x = (gfx_w-txtw)/2; +gfx_y = gfx_h-gfx_texth/2-20; +gfx_drawnumber(dyn+0.5,0); + +gfx_x = (gfx_w-gfx_texth*14)/2; +gfx_y = gfx_h-gfx_texth/2-8; +gfx_drawchar($'c'); +gfx_drawchar($'u'); +gfx_drawchar($'m'); +gfx_drawchar($'u'); +gfx_drawchar($'l'); +gfx_drawchar($'a'); +gfx_drawchar($'t'); +gfx_drawchar($'i'); +gfx_drawchar($'v'); +gfx_drawchar($'e'); +gfx_drawchar($':'); +gfx_drawchar($' '); + +doreset ? +( + gfx_r=gfx_g=gfx_b=1.0; + gfx_drawchar($'-'); +) +: +( + d = (meandyn-RED_DR)/(GREEN_DR-RED_DR); + d < 0.0 ? d = 0.0 : d > 1.0 ? d = 1.0; + gfx_r = 1.0-d; + gfx_g = d; + gfx_b = 0.0; + + gfx_drawnumber(meandyn+0.5,0); + gfx_r=gfx_g=gfx_b=0.75; +); + +gfx_x = resetx; +gfx_y = 4; +gfx_drawchar($'r'); +gfx_drawchar($'e'); +gfx_drawchar($'s'); +gfx_drawchar($'e'); +gfx_drawchar($'t'); + +doreset ? +( + memset(p, 0, 2*buflen); + peak0 = peak1 = 0.0; + sumsq0 = sumsq1 = 0.0; + peakdb0 = peakdb1 = rmsdb0 = rmsdb1 = DB_LO; + pos = 0; + dyn = sumdyn = meandyn = 0.0; + ndyn = 0; +); diff --git a/Effects/meters/tonemeter b/Effects/meters/tonemeter new file mode 100644 index 0000000..bd9afa4 --- /dev/null +++ b/Effects/meters/tonemeter @@ -0,0 +1,51 @@ +desc: tone meter (left channel only) -- doesnt really work + +slider1:750<1,2000,10>block size (ms) +slider2:250<1,2000,10>update interval (ms) +slider3:0,octaves from a440 +slider4:0<0,11,1{A,A#,B,C,C#,D,D#,E,F,F#,G,G#}>note +slider5:0,cents +slider6:0,freq (Hz) + +@slider + bsize=(slider1*srate*0.001)|0; + bpos=0; + zccnt0=0; + ls0=0; + updlen=slider2*srate*0.001; + isc=srate/bsize; + +@block + updcnt+=samplesblock; + updcnt>updlen ? + ( + updcnt=0; + oofs=log(slider6/440)/log(2); + slider3=oofs|0; + slider4=(oofs*12+0.5)%12; + slider5=((oofs*12+0.5)*100)%100 - 50; + sliderchange(4+8+16+32); + ); + +@sample + +// count zero crossings +ts0=spl0>0; + +ts0 && ls0 ? zccnt0+=1; + +ls0=!ts0; + +lcnt0=lzccnt0+zccnt0-bpos[0]; +bpos[0]=zccnt0; + +slider6=lcnt0*isc; + +// advance buffer +bpos+=1; +bpos >= bsize ? ( + bpos=0; + lzccnt0=zccnt0; + zccnt0=0; +); + diff --git a/Effects/meters/tuner b/Effects/meters/tuner new file mode 100644 index 0000000..ffcb70b --- /dev/null +++ b/Effects/meters/tuner @@ -0,0 +1,118 @@ +// This effect Copyright (C) 2004 and later Cockos Incorporated +// License: GPL - http://www.gnu.org/licenses/gpl.html +// this algorithm is based on the one used by gtkguituner, the schmitt-triggering. + +desc: schmitt-triggering tuner + +slider1:0.5<0.001,0.990>trigger factor +slider2:1024<128,16384>numsamples +slider4:0,octaves from a110 +slider5:0<0,12,1{-,A,A#,B,C,C#,D,D#,E,F,F#,G,G#}>note +slider6:0<0,10,1{-,[*----|-----],[-*---|-----],[--*--|-----],[---*-|-----],[----*|-----],[-----*-----],[-----|*----],[-----|-*---],[-----|--*--],[-----|---*-],[-----|----*]}>tune +slider7:0,freq (Hz) + +@init + + volthresh=2^(-60/6); + +@slider + state=0; + splpos=0; + trigfact=slider1; + numsamples=slider2; + ufreq = (srate/numsamples)/3; + freqcnt=0; + + +@sample + + +state ? +( + // track minimum and maximum values for sample + a1=max(a1,spl0); + a2=min(a2,spl0); + + splpos[0]=spl0; + maxvol = max(maxvol,spl0); + splpos += 1; + splpos >= numsamples ? + ( + splpos=0; + state=0; + a2 *= trigfact; + a1 *= trigfact; + + lst=0; + startp=1; + loop(numsamples-1, + lst == 0 && startp[0] > a1 ? lst=1; + lst == 1 && startp[0] >= a2 && startp[1] < a2 ? lst=2; + lst != 2 ? startp+=1; + ); + smtrig=0; + endp=startp+1; + tc=0; + i=startp; + loop(numsamples-startp, + smtrig ? + ( + i[0] >= a2 && i[1] < a2 ? ( + endp=i; + tc+=1; + smtrig=0; + ) + ) + : + ( + smtrig = i[0] >= a1; + ); + i+=1; + + ); + endp == startp ? endp += 1; + + s = srate * tc / (endp-startp); + s > 4 ? slider7=s; + + (freqcnt += 1) >= ufreq ? ( + freqcnt=0; + + oofs=log(slider7/110)/log(2); + slider4=oofs|0; + slider5=(oofs*12)%12; + + slider6=((oofs*12)*100)%100; + slider6 >= 50 ? ( slider5 += 1; slider6 -= 100; ); + + oofs < 0 ? ( slider5 = 12-slider5; slider4-=1;); + + slider5 >= 12 ? (slider5-=12; slider4+=1; ); + + maxvol >= volthresh ? ( + abs(slider6)>=25 ? slider6=sign(slider6)*50 : slider6*=2; + slider6 += 50; slider6/=10; // 0-10 for funny lookin meter + slider6=max(min(slider6+1,10),0); + slider5+=1; + ) : slider5=slider6=0; + + ); + + sliderchange(8+16+32+64); + maxvol =0; + + ); +) +: +( + 0[0] <= 0 && spl0 > 0 ? + ( + state=1; + 1[0]=spl0; + splpos=2; + a1=spl0; + a2=0[0]; + ); +); + + diff --git a/Effects/meters/vumeter b/Effects/meters/vumeter new file mode 100644 index 0000000..42fcab9 --- /dev/null +++ b/Effects/meters/vumeter @@ -0,0 +1,28 @@ +// This effect Copyright (C) 2004 and later Cockos Incorporated +// License: GPL - http://www.gnu.org/licenses/gpl.html + +desc: VU meter +slider1:0,L volume (dB) +slider2:0,R volume (dB) +slider3:200, sample time (ms) + +@init + sc=6/log(2); + +@slider + sampletime=slider3*srate/1000; + +@block + bscnt>sampletime ? + ( + slider1=log(peakvoll)*sc; + slider2=log(peakvolr)*sc; + sliderchange(3); + bscnt=peakvoll=peakvolr=0; + ); + bscnt += samplesblock; + +@sample + +peakvoll=max(peakvoll,abs(spl0)); +peakvolr=max(peakvolr,abs(spl1)); diff --git a/Effects/midi/drumtrigger b/Effects/midi/drumtrigger new file mode 100644 index 0000000..59a9f5b --- /dev/null +++ b/Effects/midi/drumtrigger @@ -0,0 +1,109 @@ +// drumtrigger: generates MIDI note information from audio impulses +// Copyright 2006, Thomas Scott Stillwell +// All rights reserved. +// +//Redistribution and use in source and binary forms, with or without modification, are permitted +//provided that the following conditions are met: +// +//Redistributions of source code must retain the above copyright notice, this list of conditions +//and the following disclaimer. +// +//Redistributions in binary form must reproduce the above copyright notice, this list of conditions +//and the following disclaimer in the documentation and/or other materials provided with the distribution. +// +//The name of Thomas Scott Stillwell may not be used to endorse or +//promote products derived from this software without specific prior written permission. +// +//THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR +//IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +//FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS +//BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +//(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +//PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, +//STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +//THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +desc:Audio To MIDI Drum Trigger +desc:Audio To MIDI Drum Trigger [Stillwell] +//tags: processing MIDI generator +//author: Stillwell + +slider1:-17<-60,6,1>Open Threshold (dB) +slider2:-18<-60,6,1>Close Threshold (dB) +slider3:30<0,200,0.1>Retrigger Interval (ms) +slider4:0<0,100,0.1>Original Signal Mix (%) +slider5:10<1,16,1>MIDI Channel +slider6:69<0,127,1>MIDI Note +slider7:1<0.1,7.0,0.1>Peak Detection Interval +slider8:1<-5.0,5.0,0.01>Trigger Align (ms) + +in_pin:left input +in_pin:right input +out_pin:left output +out_pin:right output + +@init + sending=0; + sent=0; + noteon=9*16; + noteoff=8*16; + measuring=0; + meascnt=0; + maxvel=0; + triggerpos=0; + threshlat = 0.001 * srate; + +@block + pos=0; + triggerpos=0; + +@slider + othresh=2^(slider1/6); + cthresh=2^(slider2/6); + retrigger = (slider3 / 1000) * srate; + mix = slider4 / 100; + chan=slider5-1; + note=slider6; + velperiod=(slider7 / 1000) * srate; + threshlat=(slider8 / 1000) * srate; + oncmd=noteon+chan; + offcmd=noteoff+chan; + +@sample + pos += 1; + trigwait += 1; + + linvel=min(1,max(abs(spl0),abs(spl1))); + velocity=max(0,min(127,floor(maxvel*127))); + + linvel >= othresh && sent==0 && sending==0 && measuring==0 && trigwait >= retrigger ? ( + measuring=1; + maxvel=linvel; + meascnt=0; + triggerpos=pos; + ); + measuring==1 ? ( + meascnt += 1; + meascnt >= velperiod ? ( + measuring=0; + sending=1; + meascnt=0; + ) : ( + maxvel=max(maxvel,linvel); + ); + ); + sent==0 && sending==1 ? ( + sent=1; + sending=0; + trigwait=0; + midisend(max(0,triggerpos-threshlat), oncmd, note|velocity*256); + ); + linvel <= cthresh && sent==1 && trigwait >= retrigger ? ( + sent=0; + trigwait=0; + maxvel=0; + midisend(max(0,triggerpos-threshlat), offcmd, note); + ); + + spl0 = spl0 * mix; + spl1 = spl1 * mix; diff --git a/Effects/midi/midi_CC_mapper b/Effects/midi/midi_CC_mapper new file mode 100644 index 0000000..8b6dccb --- /dev/null +++ b/Effects/midi/midi_CC_mapper @@ -0,0 +1,44 @@ +desc: MIDI CC Mapper +//tags: MIDI processing routing + +slider1:1<0,127,1{0 Bank Sel M,1 Mod Wheel M,2 Breath M,3,4 Foot P M,5 Porta M,6 Data Entry M,7 Vol M,8 Balance M,9,10 Pan M,11 Expression M,12 Ctrl 1 M,13 Ctrl 2 M,14,15,16 GP Slider 1,17 GP Slider 2,18 GP Slider 3,19 GP Slider 4,20,21,22,23,24,25,26,27,28,29,30,31,32 Bank Sel L,33 Mod Wheel L,34 Breath L,35,36 Foot P L,37 Porta L,38 Data Entry L,39 Vol L,40 Balance L,41,42 Pan L,43 Expression L,44 Ctrl 1 L,45 Ctrl 2 L,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64 Hold P sw,65 Porta sw,66 Sustenuto sw,67 Soft P sw,68 Legato P sw,69 Hold 2 P sw,70 S.Variation,71 S.Timbre,72 S.Release,73 S.Attack,74 S.Brightness,75 S.Ctrl 6,76 S.Ctrl 7,77 S.Ctrl 8,78 S.Ctrl 9,79 S.Ctrl 10,80 GP B.1 sw,81 GP B.2 sw,82 GP B.3 sw,83 GP B.4 sw,84,85,86,87,88,89,90,91 Effects Lv,92 Trem Lv,93 Chorus Lv,94 Celeste Lv,95 Phaser Lv,96 Data B. Inc,97 Data B. Dec,98 NRP L,99 NRP M,100 RP L,101 RP M,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}>Controller Source +slider2:1<0,127,1{0 Bank Sel M,1 Mod Wheel M,2 Breath M,3,4 Foot P M,5 Porta M,6 Data Entry M,7 Vol M,8 Balance M,9,10 Pan M,11 Expression M,12 Ctrl 1 M,13 Ctrl 2 M,14,15,16 GP Slider 1,17 GP Slider 2,18 GP Slider 3,19 GP Slider 4,20,21,22,23,24,25,26,27,28,29,30,31,32 Bank Sel L,33 Mod Wheel L,34 Breath L,35,36 Foot P L,37 Porta L,38 Data Entry L,39 Vol L,40 Balance L,41,42 Pan L,43 Expression L,44 Ctrl 1 L,45 Ctrl 2 L,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64 Hold P sw,65 Porta sw,66 Sustenuto sw,67 Soft P sw,68 Legato P sw,69 Hold 2 P sw,70 S.Variation,71 S.Timbre,72 S.Release,73 S.Attack,74 S.Brightness,75 S.Ctrl 6,76 S.Ctrl 7,77 S.Ctrl 8,78 S.Ctrl 9,79 S.Ctrl 10,80 GP B.1 sw,81 GP B.2 sw,82 GP B.3 sw,83 GP B.4 sw,84,85,86,87,88,89,90,91 Effects Lv,92 Trem Lv,93 Chorus Lv,94 Celeste Lv,95 Phaser Lv,96 Data B. Inc,97 Data B. Dec,98 NRP L,99 NRP M,100 RP L,101 RP M,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}>Controller Target +slider3:0<0,127,1>Clamp Low Value +slider4:127<0,127,1>Clamp High Value +slider5:0<0,1,1{No, Yes}>Pass Through CC Source + +in_pin:none +out_pin:none + +@init + +CC_MSG = 11; + +@slider + +ccsrc = slider1; +cctgt = slider2; +clamplo = slider3; +clamphi = slider4; +passthru = slider5; + +@block + +while ( + midirecv(mpos, msg1, msg23) ? ( + status = msg1; + statusHi = (msg1/16)|0; + statusLo = msg1-(statusHi*16); + msg3 = (msg23/256)|0; + msg2 = msg23-(msg3*256); + (statusHi == CC_MSG && msg2 == ccsrc) ? ( + passthru ? midisend(mpos, msg1, msg23); + msg2 = cctgt; + msg3 = max(msg3, clamplo); + msg3 = min(msg3, clamphi); + msg23 = (msg3*256+msg2)|0; + ); + midisend(mpos, msg1, msg23); + ); +); + diff --git a/Effects/midi/midi_arp b/Effects/midi/midi_arp new file mode 100644 index 0000000..6c54983 --- /dev/null +++ b/Effects/midi/midi_arp @@ -0,0 +1,158 @@ +desc: MIDI Arpeggiator +//tags: MIDI processing + +slider1:1<0.0,16,0.25>Rate (x BPM) +slider2:1<0.01,1,0.1>Note Length +slider3:0<0,3,1{Down,Up,Down Alt,Up Alt}>Mode +slider4:0<0,3,1>Number Of Variants +slider5:0<-64,64,1>Variant 1 +slider6:0<-64,64,1>Variant 2 +slider7:0<-64,64,1>Variant 3 +slider8:127<0,127,1>Velocity (0=use played velocity) + +in_pin:none +out_pin:none + +@init +notelist=0; +notecnt=0; +lastnote=-1; + +pbincpos=0; +pbnotepos=0; +pbvarpos=0; + +@slider +rate=slider1; +notelen=slider2; +notelen<0?notelen=0:notelen>1?notelen=1; +notedir= (slider3&1)?1:-1; +diralt=slider3&2; +nvar=slider4; +var1=slider5; +var2=slider6; +var3=slider7; +velmode=slider8|0; + +@block + +lastnotecnt=notecnt; + + +while ( +midirecv(ts,msg1,msg23) ? +( + m=msg1&240; + note=msg23&127; + (m == 9*16 && msg23>=256) ? + ( + notelist[note] < 0.001 ? ( + notelist[note]=velmode ? velmode : ((msg23/256.0)|0); + notecnt+=1; + ); + ) : (m == 8*16 || m == 9*16) ? ( + notelist[note] > 0.001 ? ( + lastnote==note ? ( + midisend(ts,8*16,note); // send note off + lastnote=-1; + ); + + notecnt-=1; + notelist[note]=0.0; + ); + ) : ( + midisend(ts,msg1,msg23); + ); + bla=1; +); +); +notecnt < 1 && lastnote>=0 ? +( + midisend(0,8*16,lastnote); // send note off + lastnote=-1; +); + +spos=0; +dinc=1/srate*(tempo/60)*rate; + +notecnt > 0 && !lastnotecnt ? + ( + pbincpos=1; + pbnotepos=0; + pbvarpos=1000; + ); + +@sample +pbincpos+=dinc; +notecnt > 0 && pbincpos >= notelen ? ( + lastnote>=0 ? + ( + midisend(spos,8*16,lastnote); // send note off + lastnote=-1; + ); +); +notecnt > 0 && pbincpos >= 1.0 ? +( + pbincpos-=1; + // calc new lastnote + !diralt ? + ( + pbvarpos+=1; + pbvarpos > nvar || !notelist[pbnotepos] ? + ( + pbvarpos=0; + // next note + cnt=0; + while + ( + cnt+=1; + pbnotepos += notedir; + pbnotepos > 127? pbnotepos=0 : pbnotepos<0 ? pbnotepos=127; + notelist[pbnotepos] > 0.001 ? + ( + pbnotepos >= 0 && pbnotepos < 128 ? ( + lastnote=pbnotepos; + midisend(spos,9*16,lastnote+notelist[pbnotepos]*256); // send note on + ); + tmp=0; + ) + : cnt < 128; + ); + ) + : + ( + lastnote=pbnotepos; + pbvarpos == 1? lastnote+=var1 : pbvarpos==2?lastnote+=var2:pbvarpos==3?lastnote+=var3; + lastnote >= 0 && lastnote < 128 ? ( + midisend(spos,9*16,lastnote+notelist[pbnotepos]*256); // send note on + ) : lastnote=-1; + ); + ) + : + ( // alternate (notes first, then variants) + cnt=0; + while + ( + cnt+=1; + pbnotepos += notedir; + turd=0; + pbnotepos > 127? pbnotepos=0 : pbnotepos<0 ? pbnotepos=127 : turd=1; + !turd ? ( + pbvarpos+=1; + pbvarpos>nvar ? pbvarpos=0; + ); + notelist[pbnotepos] > 0.001 ? + ( + lastnote=pbnotepos; + pbvarpos == 1? lastnote+=var1 : pbvarpos==2?lastnote+=var2:pbvarpos==3?lastnote+=var3; + midisend(spos,9*16,lastnote+notelist[pbnotepos]*256); // send note on + tmp=0; + ) + : cnt < 128; + ); + ); +); + +//spos+=1; + + diff --git a/Effects/midi/midi_choke b/Effects/midi/midi_choke new file mode 100644 index 0000000..c82f556 --- /dev/null +++ b/Effects/midi/midi_choke @@ -0,0 +1,90 @@ +desc:MIDI Choke +//tags: MIDI processing +//author: Cockos + +slider1:1<1,16,1>MIDI Channel +slider2:42<0,127,1>Choke Note Range Start +slider3:1<1,16,1>Number Of Choke Notes +slider4:46<0,127,1>Affected Note Range Start +slider5:1<1,16,1>Number Of Affected Notes +slider6:0<0,1,1{Prevent Note On During Choke,Allow Note On During Choke}>Action During Choke +slider7:-1<-1,127,1>Additional Choke Note +slider8:-1<-1,127,1>Additional Choke Note +slider9:-1<-1,127,1>Additional Choke Note +slider10:-1<-1,127,1>Additional Choke Note + +in_pin:none +out_pin:none + +@init + +choke_count = 0; + +@slider + +choke_buf=500; // 128 slots of whether choke is down +affected_buf=1000; // 128 slots +chan = (slider1|0)-1; +allow_noteon_choke = slider6; + +@block + +while ( + midirecv(msgoffs,msg1,msg23) ? ( + passthrough = 1; + msg1==(chan|0x90) || msg1 == (chan|0x80) ? ( + note = msg23&0x7f; + vel = (msg1&0x10) ? ((msg23/256)|0) : 0; + + // update choke state + (note >= slider2 && note < slider2+slider3) || + note==slider7 || + note==slider8 || + note==slider9 || + note==slider10 + ? ( + choke_buf[note] != !!vel ? ( + choke_count += vel ? 1 : -1; + choke_buf[note] = !!vel; + + vel && choke_count == 1 ? ( + // choke just hit, kill any active notes + i = slider4; + loop(slider5, + affected_buf[i] ? ( + midisend(msgoffs,0x80|chan,i); + affected_buf[i]=0; + ); + i+=1; + ); + ); + ); + ); + + // decide what to do with notes + note >= slider4 && note < slider4+slider5 ? ( + vel ? ( + choke_count < 1 || allow_noteon_choke ? ( + // not choking, or allow note-on during choke is on, + // allow noteon through (and update state) + affected_buf[note] = 1; // mark this as open + ) : ( + // choking, filter out noteon + passthrough = 0; + ); + ) : ( + choke_count > 0 && allow_noteon_choke ? ( + // if choking and allow note-on during choke is on, + // allow noteoff through (and update state) + affected_buf[note] = 0; + ) : ( + passthrough = 0; // always filter out noteoff + ); + ); + ); + ); + + passthrough && midisend(msgoffs,msg1,msg23); + 1; + ); +); diff --git a/Effects/midi/midi_chorderizer b/Effects/midi/midi_chorderizer new file mode 100644 index 0000000..d5ba5fc --- /dev/null +++ b/Effects/midi/midi_chorderizer @@ -0,0 +1,96 @@ +desc:MIDI Chorderizer +//tags: MIDI processing + +slider1:5<1,24,1>Voice 1 Offset (st) +slider2:0<1,24,1>Voice 2 Offset (st) +slider3:0<1,24,1>Voice 3 Offset (st) +slider4:0<1,24,1>Voice 4 Offset (st) +slider5:1<0,1>Velocity Scale @ 1 +slider6:1<0,1>Velocity Scale @ 4 +slider7:0<0,127,1>Lowest Key (MIDI Note #) +slider8:127<0,127,1>Highest Key (MIDI Note #) + +in_pin:none +out_pin:none + +@init + + +@slider +slider1|=0; +slider2|=0; +slider3|=0; +slider4|=0; + +@block + +while ( +midirecv(ts,msg1,msg23) ? +( + m=msg1&240; + note=msg23&127; + + (m == 8*16 || m==9*16) && note >= slider7 && note <= slider8 ? + ( + + slider1 ? ( + note2 = note+slider1; + ) : note2=-1; + + slider2 ? ( + note3 = note+slider2; + ) : note3=-1; + + slider3 ? ( + note4 = note+slider3; + ) : note4=-1; + + slider4 ? ( + note5 = note+slider4; + ) : note5=-1; + + (m == 9*16 && msg23>=256) ? + ( + vel=(msg23/256)|0; + vel<0?vel=0:vel>=127?vel=127:vel|=0; + ov=vel; + vel *= 256.0; + + + note >= 0 && note < 128 ? midisend(ts,9*16,note+vel); // send note on + note2 >= 0 && note2 < 128 ? ( + sc=slider5; vel2=ov*sc; vel2<0?vel2=0:vel2>=127?vel2=127:vel2|=0; vel2 *= 256.0; + midisend(ts,9*16,note2+vel2); // send note on + ); + note3 >= 0 && note3 < 128 ? ( + sc=slider5*0.75 * slider6*0.25; vel2=ov*sc; vel2<0?vel2=0:vel2>=127?vel2=127:vel2|=0; vel2 *= 256.0; + midisend(ts,9*16,note3+vel2); // send note on + ); + note4 >= 0 && note4 < 128 ? ( + sc=slider5*0.25 * slider6*0.75; vel2=ov*sc; vel2<0?vel2=0:vel2>=127?vel2=127:vel2|=0; vel2 *= 256.0; + midisend(ts,9*16,note4+vel2); // send note on + ); + note5 >= 0 && note5 < 128 ? ( + sc=slider6; vel2=ov*sc; vel2<0?vel2=0:vel2>=127?vel2=127:vel2|=0; vel2 *= 256.0; + midisend(ts,9*16,note5+vel2); // send note on + ); + ) : (m == 8*16 || m == 9*16) ? ( + note >= 0 && note < 128 ? midisend(ts,8*16,note); // send note off + note2 >= 0 && note2 < 128 ? midisend(ts,8*16,note2); // send note off + note3 >= 0 && note3 < 128 ? midisend(ts,8*16,note3); // send note off + note4 >= 0 && note4 < 128 ? midisend(ts,8*16,note4); // send note off + note5 >= 0 && note5 < 128 ? midisend(ts,8*16,note5); // send note off + ); + ) : + ( + midisend(ts,msg1,msg23); + ); + bla=1; +); +); + + +@sample + + + diff --git a/Effects/midi/midi_chordkey b/Effects/midi/midi_chordkey new file mode 100644 index 0000000..7a83e26 --- /dev/null +++ b/Effects/midi/midi_chordkey @@ -0,0 +1,99 @@ +desc:MIDI Chord In Key +//tags: MIDI processing + +slider1:2<-24,24,1>Notes In Key Advance For Note 1 +slider2:4<-24,24,1>Notes In Key Advance For Note 2 +slider3:0<0,11,1{C,C#,D,D#,E,F,F#,G,G#,A,A#,B}>Key +slider4:1<0,1>Velocity Scale For Additional Notes +slider5:0<0,127,1>Lowest Key (MIDI Note #) +slider6:127<0,127,1>Highest Key (MIDI Note #) + +in_pin:none +out_pin:none + +@init + +// maps a in-key note to a semitone note +tab=0; +tab[0]=0; +tab[1]=2; +tab[2]=4; +tab[3]=5; +tab[4]=7; +tab[5]=9; +tab[6]=11; + +// maps a note to its nearest in-Cmaj note +tab2=16; +tab2[0]=0; +tab2[1]=0; +tab2[2]=2; +tab2[3]=2; +tab2[4]=4; +tab2[5]=5; +tab2[6]=5; +tab2[7]=7; +tab2[8]=7; +tab2[9]=9; +tab2[10]=9; +tab2[11]=11; + +@slider +slider1|=0; +slider2|=0; +key = slider3|0; + +@block + +while ( +midirecv(ts,msg1,msg23) ? +( + m=msg1&240; + note=msg23&127; + + (m == 8*16 || m==9*16) && note >= slider5 && note <= slider6 ? + ( + note += 12-key; + noteidx=note%12; + octavebase=note-noteidx; + + n2=noteidx+tab[slider1%7]; + note2 = octavebase + tab2[n2%12] + ((n2/12)|0)*12; + + n2=noteidx+tab[slider2%7]; + note3 = octavebase + tab2[n2%12] + ((n2/12)|0)*12; + + note-=12-key; + note2-=12-key; + note3-=12-key; + + + (m == 9*16 && msg23>=256) ? + ( + vel=(msg23/256)|0; + vel<0?vel=0:vel>=127?vel=127:vel|=0; + vel2=vel*slider4; + vel2<0?vel2=0:vel2>=127?vel2=127:vel2|=0; + vel2 *= 256.0; + vel *= 256.0; + note >= 0 && note < 128 ? midisend(ts,9*16,note+vel); // send note on + note2 >= 0 && note2 < 128 ? midisend(ts,9*16,note2+vel2); // send note on + note3 >= 0 && note3 < 128 ? midisend(ts,9*16,note3+vel2); // send note on + ) : (m == 8*16 || m == 9*16) ? ( + note >= 0 && note < 128 ? midisend(ts,8*16,note); // send note off + note2 >= 0 && note2 < 128 ? midisend(ts,8*16,note2); // send note off + note3 >= 0 && note3 < 128 ? midisend(ts,8*16,note3); // send note off + ); + ) : + ( + midisend(ts,msg1,msg23); + ); + bla=1; +); +); + + +@sample + + + diff --git a/Effects/midi/midi_delay b/Effects/midi/midi_delay new file mode 100644 index 0000000..67dbb2c --- /dev/null +++ b/Effects/midi/midi_delay @@ -0,0 +1,64 @@ +desc:MIDI Delay + +slider1:0<0,1000,1>Delay (ms) +slider2:0<0,16,0.25>Delay (QN) +slider3:0<0,10000,1>Delay (samples) +slider4:0<0,16,1>Channel (0=omni) +slider5:0<0,16,1>Bus (0=all buses) + +in_pin:none +out_pin:none + +@init +ext_midi_bus=ext_nodenorm=1; +buf_l=buf_r=0; +buf_hdr = 3; // position, length (incl header), bus +max_ram = __memtop(); + +@slider +chan = slider4-1; +bus = slider5-1; + +@block +delay_samples = floor((slider1*0.001 + slider2*60.0/tempo)*srate + slider3 + 0.5); +delay_sc = (delay_samples + samplesblock); +delay_isc = 1.0 / delay_sc; + +// process incoming events +while((l=midirecv_buf(offs,buf_r+buf_hdr,max_ram-buf_r-buf_hdr))>0) +( + (bus<0 || midi_bus == bus) && + (chan<0 || (l <= 3 && (fb=buf_r[buf_hdr])<0xf0 && (fb&0xf) == chan)) ? ( + buf_r[0] = (delay_samples+offs) * delay_isc; + buf_r[1] = buf_hdr + l; + buf_r[2] = midi_bus; + buf_r += buf_hdr + l; + ) : ( + midisend_buf(offs,buf_r+buf_hdr,l); + ); +); + +// process outgoing events +rd = buf_l; +while (rd= buf_r ? ( + buf_l=buf_r=0; +) : ( + buf_l > max(1024,buf_r*.5) ? ( + (buf_r-=buf_l) > 0 ? memcpy(0,buf_l,buf_r) : buf_r=0; + buf_l=0; + ); +); diff --git a/Effects/midi/midi_eater b/Effects/midi/midi_eater new file mode 100644 index 0000000..5d917fd --- /dev/null +++ b/Effects/midi/midi_eater @@ -0,0 +1,12 @@ +desc:midi eater + +@init + +@slider + +@block +while ( + midirecv(ts,msg1,msg23); +); + +@sample \ No newline at end of file diff --git a/Effects/midi/midi_logger b/Effects/midi/midi_logger new file mode 100644 index 0000000..cd194d3 --- /dev/null +++ b/Effects/midi/midi_logger @@ -0,0 +1,224 @@ +desc:MIDI Logger +//tags: MIDI analysis utility + +in_pin:none +out_pin:none + +@init +ext_midi_bus = 1; // causes midi_bus to be used for send/recv and midirecv() receives on all buses +ent_time = 0; +ent_blockoffs = 1; +ent_midiinfo = 2; +ent_seq=3; +ent_bus = 4; +ent_size = 5; + +hextab = 0; +i=0; +loop(10,hextab[i] = $'0' + i; i+=1; ); +loop(6,hextab[i] = $'a' + i - 10; i+=1; ); + +hist = 1000; +hist_size = 0; +hist_max = 10000*ent_size; +hist_chunk = 1000*ent_size; // advance + +seq=0; + +log_active=1; +g_cap=0; +g_capst=0; +g_at_end = 1; +g_force_redraw=1; + +gfx_clear=-1; + +@block + +log_active ? while ( + midirecv(ts,msg1,msg23) ? ( + hist_size >= hist_max ? ( + memcpy(hist,hist+hist_chunk,hist_max-hist_chunk); + hist_size = hist_max - hist_chunk; + ); + + hist[hist_size+ent_time] = play_position; + hist[hist_size+ent_blockoffs] = ts; + hist[hist_size+ent_midiinfo] = msg1 + msg23*256; + hist[hist_size+ent_seq] = seq; seq+=1; + hist[hist_size+ent_bus] = midi_bus; + + hist_size+=ent_size; + + g_force_redraw=1; + midisend(ts,msg1,msg23); + 1; + ); +); + +@gfx 600 400 + +top_margin=gfx_texth + 4.0; +g_histsize = ((hist_size/ent_size)|0); +g_viewsize = (((gfx_h-top_margin-1)/(gfx_texth+2))|0); + +g_pos = g_histsize - g_viewsize; +g_at_end ? ( + g_pos += 1; + g_scroll = g_pos; +) : ( + g_pos > g_scroll ? g_pos = g_scroll; +); + +g_pos < 0 ? g_pos=0; + +g_scrollbar_top = top_margin+1 + g_pos * (gfx_h-top_margin-1) / g_histsize; +g_scrollbar_bot = top_margin + 1+ (g_pos + g_viewsize)*(gfx_h-top_margin-1)/g_histsize; + +g_cap ? ( + g_capst=0; + g_cap == 1 ? ( + g_pos = mouse_y; + g_scrollbar_offs >= 0 ? g_pos-= g_scrollbar_offs; + g_pos -= top_margin+1; + g_pos = g_histsize * g_pos / (gfx_h-top_margin-1); + + g_scroll = (g_pos |= 0); + g_pos < 0 ? g_pos=0; + + g_pos >= g_histsize-g_viewsize ? ( g_at_end=1; g_pos = g_histsize-g_viewsize; ) : g_at_end=0; + g_pos < 0 ? g_pos=0; + + g_scrollbar_top = top_margin+1 + g_pos * (gfx_h-top_margin-1) / g_histsize; + g_scrollbar_bot = top_margin + 1+ (g_pos + g_viewsize)*(gfx_h-top_margin-1)/g_histsize; + ) : + g_cap == 4 && mouse_y < top_margin && mouse_X >= g_logx && mouse_x <= g_logx_e ? ( + !(mouse_cap&1)? log_active=!log_active; + g_capst=1; + ) : + g_cap == 3 && mouse_y < top_margin && mouse_X >= g_clearx && mouse_x <= g_clearx_e ? ( + !(mouse_cap&1) ? ( + seq=hist_size=0;g_histsize=0; + g_pos=1; g_at_end=1; + g_scrollbar_top = top_margin+1 + g_pos * (gfx_h-top_margin-1) / g_histsize; + g_scrollbar_bot = top_margin + 1+ (g_pos + g_viewsize)*(gfx_h-top_margin-1)/g_histsize; ); + g_capst=1; + ); + + !(mouse_cap&1) ? g_cap=0; + g_force_redraw=1; +) : ( + (mouse_cap & 1) ? ( + g_capst=1; + mouse_y > top_margin && mouse_x > gfx_w - top_margin ? ( + g_scrollbar_offs = -1; + + mouse_y >= g_scrollbar_top && mouse_y <= g_scrollbar_bot ? g_scrollbar_offs = mouse_y - g_scrollbar_top; + + g_cap=1; // scrollbar + ) : ( + g_cap = 2; + mouse_y < top_margin ? ( + mouse_x >= g_logx && mouse_x <= g_logx_e ? ( + g_force_redraw=1; + g_cap=4; + ) : mouse_x >= g_clearx && mouse_x <= g_clearx_e ? ( + g_force_redraw=1; + g_cap=3; + ); + ); + + ); + ) : g_cap=0; +); + +gfx_w != g_lw || gfx_h != g_lh || g_force_redraw ? ( + g_force_redraw=0; + g_lw=gfx_w; g_lh=gfx_h; + gfx_r=gfx_g=gfx_b=0; gfx_a=1; + gfx_x=gfx_y=0; + gfx_rectto(g_lw,g_lh); + + + // draw top line + gfx_r=gfx_g=gfx_b=0.3; + gfx_x=gfx_y=0; + gfx_rectto(g_lw,top_margin); + + g_cap == 4 && g_capst ? ( + gfx_r=1; gfx_g=gfx_b=0; gfx_x=0; gfx_y=0; gfx_rectto(gfx_x+3*8,top_margin); + ); + gfx_r=gfx_g=gfx_b=log_active?1:0; + gfx_x=0; + gfx_y=2; + g_logx = gfx_x; + gfx_drawchar($'L'); + gfx_drawchar($'O'); + gfx_drawchar($'G'); + g_logx_e = gfx_x; + + gfx_x += 16; + + g_cap == 3 && g_capst ? ( + g_lx=gfx_x; + gfx_y=0; gfx_r=1; gfx_g=gfx_b=0; gfx_rectto(gfx_x+5*8,top_margin); + gfx_x=g_lx; + gfx_y=2; + ); + + gfx_r=gfx_g=gfx_b=1; + g_clearx = gfx_x; + gfx_drawchar($'C'); + gfx_drawchar($'L'); + gfx_drawchar($'E'); + gfx_drawchar($'A'); + gfx_drawchar($'R'); + g_clearx_e = gfx_x; + + // right scrollbar + gfx_r=0.0; gfx_g=gfx_b=0.3; + gfx_x=gfx_w-top_margin; + gfx_y=top_margin+1; + gfx_rectto(gfx_w,gfx_h); + + gfx_r=0.0; gfx_g=gfx_b=0.7; + + gfx_y = g_scrollbar_top; + gfx_x=gfx_w-top_margin+1; + gfx_rectto(gfx_w-1,g_scrollbar_bot); + + + gfx_r=gfx_g=gfx_b=1; + g_pos = (g_pos|0) * ent_size + hist; + gfx_y=top_margin+1; + hist_size ? while ( + gfx_x=0; + gfx_drawnumber(g_pos[ent_seq],0); + gfx_x=60; + gfx_drawnumber(g_pos[ent_time] + g_pos[ent_blockoffs]/srate,4); + gfx_x=180; + gfx_drawnumber(g_pos[ent_blockoffs],0); + gfx_x=230; + gfx_drawchar($'B'); + gfx_drawnumber(g_pos[ent_bus]+1,0); + gfx_x=300; + g_msg = g_pos[ent_midiinfo]; + loop(3, + gfx_drawchar(hextab[(g_msg/16)&15]); + gfx_drawchar(hextab[g_msg&15]); + gfx_x+=8; + g_msg/=256; + ); + + + gfx_y += gfx_texth+2; + + g_pos += ent_size; + gfx_y < gfx_h && g_pos < hist + hist_size; + ); + g_at_end ? ( + gfx_x=0; + gfx_drawchar($'_'); + ); + +); diff --git a/Effects/midi/midi_maptokey b/Effects/midi/midi_maptokey new file mode 100644 index 0000000..0766677 --- /dev/null +++ b/Effects/midi/midi_maptokey @@ -0,0 +1,72 @@ +desc:MIDI Map To Key +//tags: MIDI processing +//author: Justin Frankel + +slider1:0<0,11,1{C,C#,D,D#,E,F,F#,G,G#,A,A#,B}>Key +slider3:0<0,127,1>Lowest Key (MIDI Note #) +slider4:127<0,127,1>Highest Key (MIDI Note #) + +in_pin:none +out_pin:none + +@init +// maps a note to its nearest in-Cmaj note +tab2=16; +tab2[0]=0; +tab2[1]=2; +tab2[2]=2; +tab2[3]=4; +tab2[4]=4; +tab2[5]=5; +tab2[6]=5; +tab2[7]=7; +tab2[8]=7; +tab2[9]=9; +tab2[10]=11; +tab2[11]=11; + +notetab=512; +memset(notetab,0,128); + +@slider +key = slider1|0; + +@block +while ( +midirecv(ts,msg1,msg23) ? +( + m=msg1&240; + note=msg23&127; + (m == 8*16 || m==9*16) && note >= slider3 && note <= slider4 ? + ( + oldnote=note; + note += 12-key; + + noteidx=note%12; + octavebase=note-noteidx; + note=octavebase + tab2[noteidx]; + + note-=12-key; + (m == 9*16 && msg23>=256) ? + ( + vel=(msg23/256)|0; + note >= 0 && note < 128 ? ( + notetab[note]|=2^(12+ note-oldnote); + midisend(ts,9*16,note+vel*256); // send note on + ); + ) : (m == 8*16 || m == 9*16) ? ( + note >= 0 && note < 128 ? ( + a=notetab[note]; + mask = 2^(12+note-oldnote); + (a&mask) ? ( notetab[note] = (a-=mask)); + !a ? midisend(ts,8*16,note); // send note off + ); + ); + ) : + ( + midisend(ts,msg1,msg23); + ); + bla=1; +); +); +@sample diff --git a/Effects/midi/midi_note2channel b/Effects/midi/midi_note2channel new file mode 100644 index 0000000..2d1ac7a --- /dev/null +++ b/Effects/midi/midi_note2channel @@ -0,0 +1,32 @@ +desc:MIDI Route Note To Channel +//tags: MIDI processing routing + +slider1:60<0,127,1>Note +slider2:0<0,15,1{1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16>Channel + +in_pin:none +out_pin:none + +@init + +NOTE_ON = 8; +NOTE_OFF = 9; + +@slider + +note = slider1; +channel = slider2; + +@block + +while ( + midirecv(ts, msg1, msg23) ? ( + m = msg1&240; + n = msg23&127; + ((m == NOTE_ON*16 || m == NOTE_OFF*16) && n == note) ? ( + msg1 = m+channel; + ); + midisend(ts, msg1, msg23); + ); +); + diff --git a/Effects/midi/midi_note_filter b/Effects/midi/midi_note_filter new file mode 100644 index 0000000..ee01799 --- /dev/null +++ b/Effects/midi/midi_note_filter @@ -0,0 +1,55 @@ +desc:MIDI Note Filter +//tags: MIDI processing filter +//author: Unknown + +//slider1:0<-0,127,1{0: C-2,1: C#-2,2: D-2,3: D#-2,4: E-2,5: F-2,6: F#-2,7: G-2,8: G#-2,9: A-2,10: Bb-2,11: B-2,12: C-1,13: C#-1,14: D-1,15: D#-1,16: E-1,17: F-1,18: F#-1,19: G-1,20: G#-1,21: A-1,22: Bb-1,23: B-1,24: C0,25: C#0,26: D0,27: D#0,28: E0,29: F0,30: F#0,31: G0,32: G#0,33: A0,34: Bb0,35: B0,36: C1,37: C#1,38: D1,39: D#1,40: E1,41: F1,42: F#1,43: G1,44: G#1,45: A1,46: Bb1,47: B1,48: C2,49: C#2,50: D2,51: D#2,52: E2,53: F2,54: F#2,55: G2,56: G#2,57: A2,58: Bb2,59: B2,60: C3,61: C#3,62: D3,63: D#3,64: E3,65: F3,66: F#3,67: G3,68: G#3,69: A3,70: Bb3,71: B3,72: C4,73: C#4,74: D4,75: D#4,76: E4,77: F4,78: F#4,79: G4,80: G#4,81: A4,82: Bb4,83: B4,84: C5,85: C#5,86: D5,87: D#5,88: E5,89: F5,90: F#5,91: G5,92: G#5,93: A5,94: Bb5,95: B5,96: C6,97: C#6,98: D6,99: D#6,100: E6,101: F6,102: F#6,103: G6,104: G#6,105: A6,106: Bb6,107: B6,108: C7,109: C#7,110: D7,111: D#7,112: E7,113: F7,114: F#7,115: G7,116: G#7,117: A7,118: Bb7,119: B7,120: C8,121: C#8,122: D8,123: D#8,124: E8,125: F8,126: F#8,127: G8}>Lowest Key +//slider2:0<-0,127,1{0: C-2,1: C#-2,2: D-2,3: D#-2,4: E-2,5: F-2,6: F#-2,7: G-2,8: G#-2,9: A-2,10: Bb-2,11: B-2,12: C-1,13: C#-1,14: D-1,15: D#-1,16: E-1,17: F-1,18: F#-1,19: G-1,20: G#-1,21: A-1,22: Bb-1,23: B-1,24: C0,25: C#0,26: D0,27: D#0,28: E0,29: F0,30: F#0,31: G0,32: G#0,33: A0,34: Bb0,35: B0,36: C1,37: C#1,38: D1,39: D#1,40: E1,41: F1,42: F#1,43: G1,44: G#1,45: A1,46: Bb1,47: B1,48: C2,49: C#2,50: D2,51: D#2,52: E2,53: F2,54: F#2,55: G2,56: G#2,57: A2,58: Bb2,59: B2,60: C3,61: C#3,62: D3,63: D#3,64: E3,65: F3,66: F#3,67: G3,68: G#3,69: A3,70: Bb3,71: B3,72: C4,73: C#4,74: D4,75: D#4,76: E4,77: F4,78: F#4,79: G4,80: G#4,81: A4,82: Bb4,83: B4,84: C5,85: C#5,86: D5,87: D#5,88: E5,89: F5,90: F#5,91: G5,92: G#5,93: A5,94: Bb5,95: B5,96: C6,97: C#6,98: D6,99: D#6,100: E6,101: F6,102: F#6,103: G6,104: G#6,105: A6,106: Bb6,107: B6,108: C7,109: C#7,110: D7,111: D#7,112: E7,113: F7,114: F#7,115: G7,116: G#7,117: A7,118: Bb7,119: B7,120: C8,121: C#8,122: D8,123: D#8,124: E8,125: F8,126: F#8,127: G8}>Highest Key + +slider1:21<0,127,1>Lowest Key (MIDI Note #) +slider2:108<0,127,1>Highest Key (MIDI Note #) +slider3:0<0,1,1{No,Yes}>Other events (CC, etc) pass through + +in_pin:none +out_pin:none + +@init + +NOTE_OFF = 8; +NOTE_ON = 9; + +was_filtered = 1024; // array for storing which notes are filtered + +@block + + while ( + input = midirecv(mpos, msg1, msg23); + input ? ( + statusHi = (msg1/16)|0; + statusLo = (msg1-(statusHi*16))|0; + + data2 = (msg23/256)|0; + data1 = (msg23-(data2*256))|0; + +// .... for Note Ons + statusHi == NOTE_ON && data2 > 0 ? ( + filter = (data1 < slider1 || data1 > slider2); + (!filter) ? ( + midisend(mpos, msg1, msg23); + ):( + was_filtered[data1] = 1; + ); + ): + +// .... for Note Offs + statusHi == NOTE_OFF || (statusHi == NOTE_ON && data2 == 0 ) ? ( + was_filtered[data1] ? ( + was_filtered[data1] = 0; + ):( + midisend(mpos, msg1, msg23); + ); + ) : slider3 ? ( + midisend(mpos, msg1, msg23); + ); + ); + input; + ); diff --git a/Effects/midi/midi_note_hold b/Effects/midi/midi_note_hold new file mode 100644 index 0000000..535b988 --- /dev/null +++ b/Effects/midi/midi_note_hold @@ -0,0 +1,33 @@ +desc:MIDI Note Hold +//tags: MIDI processing + +slider1:0<0,16,1>Channel (0=omni) + +in_pin:none +out_pin:none + +@init +held=-1; + +@slider +chan=slider1|0; + +@block + +while ( + midirecv(ts,msg,msg23) ? ( + (msg&$xf) == chan && (msg&$xe0)==$x80 ? ( + vel = (msg23/256)&$xff; + (msg&16) && vel ? + ( + held >= 0 ? midisend(ts,$x80 + chan, held); + held = msg23&$xff; + midisend(ts,$x90+chan,held + (vel*256)); + ); + ) : ( + midisend(ts,msg,msg23); + ); + + 1; // always loop if received msg + ); +); diff --git a/Effects/midi/midi_note_repeater b/Effects/midi/midi_note_repeater new file mode 100644 index 0000000..aa9aec7 --- /dev/null +++ b/Effects/midi/midi_note_repeater @@ -0,0 +1,64 @@ +desc:MIDI Note Repeater +//tags: MIDI processing + +slider1:1<0.1,4>Size (beats) + +in_pin:none +out_pin:none + +@init +status=0; +status2=128; +memset(status,-1,128); +memset(status2,0,128); + +@slider +div=slider1; + +@block + +while ( +midirecv(ts,msg1,msg23) ? +( + m=msg1&240; + note=msg23&127; + (m == 9*16 && msg23>=256) ? ( + status[note]=0; + vel=(msg23/256); + vel<1?vel=1:vel>=127?vel=127:vel|=0; + status2[note]=vel; + midisend(ts,9*16,note+vel*256); // send note on + ) : (m == 8*16 || m == 9*16) ? ( + status[note]=-1; + status2[note]>0.0 ? ( + midisend(ts,8*16,note); // send note off + status2[note]=0; + ); + ) : ( + midisend(ts,msg1,msg23); + ); + bla=1; +); +); + +inc = samplesblock/srate*(tempo/60)*2/div; +x=0; +loop(128, + status[x]>=0.0 ? + ( + status[x] += inc; + status[x] >= 1.0 ? + ( + status[x] -= 1.0; + status2[x]>0.0 ? midisend(0,8*16,x) : midisend(0,9*16,x - status2[x]*256); + status2[x]*=-1; + ); + ); + x+=1; +); + + +@sample + + + diff --git a/Effects/midi/midi_transpose b/Effects/midi/midi_transpose new file mode 100644 index 0000000..84a0c7f --- /dev/null +++ b/Effects/midi/midi_transpose @@ -0,0 +1,108 @@ +desc:MIDI Transpose Notes +//tags: MIDI processing + +slider1:0<-64,64,1>Transpose Semitones +slider2:1<-16,16,1>Premultiply +slider3:0<0,127,1>Lowest Key (MIDI Note #) +slider4:127<0,127,1>Highest Key (MIDI Note #) + +// these lines tell Reaper the effect has no audio input/output, +// which enables processing optimizations. +// MIDI-only FX should always have these lines. +in_pin:none +out_pin:none + +@init + +notebuf = 0; // 4 entries per open note: orignote, channel, vel, transnote +buflen = 0; + +last_transpose = 0; +last_mult = 1; +last_samplepos = 0; + +@slider + +@block + +samplepos = play_position*srate; +samplechg = samplepos-last_samplepos; +samplechg < -samplesblock/2.0 || samplechg > samplesblock*3.0/2.0 ? +( + buflen = 0; // clear state on seek +); +last_samplepos = samplepos; + +slider1|0 != last_transpose || slider2 != last_mult ? +( + last_transpose = slider1|0; + last_mult = slider2; + + i = 0; + loop + ( + buflen, + + n = notebuf[4*i]|0; // original note + c = notebuf[4*i+1]|0; // channel + v = notebuf[4*i+2]|0; // velocity + t = notebuf[4*i+3]|0; // transposed note + + midisend(0, $x80|c, t); // clear the sustaining transposed note + + t = (n*last_mult+last_transpose)|0; // new transposed note + t < 0 ? t = 0 : t > 127 ? t = 127; + midisend(0, $x90|c, (v*256)|t); // send the new transposed note + notebuf[4*i+3] = t; // update the buffer + + i = i+1; + ); +); + +while +( + midirecv(offs, m1, m2) ? + ( + s = m1&$xF0; + s == $x90 || s == $x80 ? // note-on or note-off + ( + n = m2&$xFF; // original note + + n >= slider3 && n <= slider4 ? + ( + c = m1&$xF; // channel + v = (m2&$xFF00)/256; // velocity + t = (n*last_mult+last_transpose)|0; // transposed note + t < 0 ? t = 0 : t > 127 ? t = 127; + m2 = m2+t-n; // apply transposition + + i = -1; + while // look for this note|channel already in the buffer + ( + i = i+1; + i < buflen && (notebuf[4*i]|0 != n || notebuf[4*i+1]|0 != c); + ); + + (s == $x90 && v > 0) ? // note-on, add to buffer + ( + notebuf[4*i] = n; + notebuf[4*i+1] = c; + notebuf[4*i+2] = v; + notebuf[4*i+3] = t; + i == buflen ? buflen = buflen+1; + ) + : // note-off, remove from buffer + ( + i < buflen ? + ( + memcpy(notebuf+4*i, notebuf+4*(i+1), 4*(buflen-i-1)); // delete the entry + buflen = buflen-1; + ); + ); + ); + ); + midisend(offs, m1, m2); + ); +); + + diff --git a/Effects/midi/midi_velocitycontrol b/Effects/midi/midi_velocitycontrol new file mode 100644 index 0000000..fa911d9 --- /dev/null +++ b/Effects/midi/midi_velocitycontrol @@ -0,0 +1,41 @@ +desc:MIDI Velocity Control +//tags: MIDI processing + +slider1:1<-16,16,0.1>Velocity Multiply +slider2:0<-128,128,1>Velocity Add +slider3:0<0,127,1>Min Velocity +slider4:127<0,127,1>Max Velocity +slider5:0<0,127,1>Lowest Key (MIDI Note #) +slider6:127<0,127,1>Highest Key (MIDI Note #) + +in_pin:none +out_pin:none + +@init + +@slider +slider3<0?slider3=0; +slider4>127?slider4=127; + +@block +while ( +midirecv(ts,msg1,msg23) ? +( + m=msg1&240; + vel=(msg23/256)|0; + note=msg23&127; + m == 9*16 && vel > 0 && note >= slider5 && note <= slider6 ? + ( + vel = (vel*slider1)+slider2; + velslider4?vel=slider4; + vel|=0; + + vel > 0 ? midisend(ts,msg1,note+vel*256); // send note on + ) : + ( + midisend(ts,msg1,msg23); // passthru + ); + bla=1; +); +); + diff --git a/Effects/midi/midinoteondelay b/Effects/midi/midinoteondelay new file mode 100644 index 0000000..01e4a06 --- /dev/null +++ b/Effects/midi/midinoteondelay @@ -0,0 +1,26 @@ +desc:MIDI Note-On Delay +//tags: MIDI processing delay + +slider1:0<0,4096>Max Delay Samples (limited to blocksize) +slider2:0,--Poo + +in_pin:none +out_pin:none + +@init +slider2=1; + +@block + +while( + midirecv(msgt,msg1,msg23)? + ( + ((msg1&240)==144)?( + msgt+=rand(slider1); + slider2+=1; + sliderchange(slider2); + ); + midisend(msgt,msg1,msg23); + 1; + ):0; +); diff --git a/Effects/midi/mtc_logger b/Effects/midi/mtc_logger new file mode 100644 index 0000000..4ac6883 --- /dev/null +++ b/Effects/midi/mtc_logger @@ -0,0 +1,264 @@ +desc:MTC Logger +//tags: MIDI analysis utility + +in_pin:none +out_pin:none + +@init +ext_midi_bus = 1; // causes midi_bus to be used for send/recv and midirecv() receives on all buses +ent_time = 0; +ent_blockoffs = 1; +ent_midiinfo = 2; +ent_seq=3; +ent_bus = 4; +ent_size = 5; + +hextab = 0; +i=0; +loop(10,hextab[i] = $'0' + i; i+=1; ); +loop(6,hextab[i] = $'a' + i - 10; i+=1; ); + +hist = 1000; +hist_size = 0; +hist_max = 10000*ent_size; +hist_chunk = 1000*ent_size; // advance + +seq=0; + +log_active=1; +g_cap=0; +g_capst=0; +g_at_end = 1; +g_force_redraw=1; + +gfx_clear=-1; + +@block + +log_active ? while ( + midirecv(ts,msg1,msg23) ? ( + msg1 == 0xf1 ? ( + hist_size >= hist_max ? ( + memcpy(hist,hist+hist_chunk,hist_max-hist_chunk); + hist_size = hist_max - hist_chunk; + ); + + hist[hist_size+ent_time] = play_position; + hist[hist_size+ent_blockoffs] = ts; + hist[hist_size+ent_midiinfo] = msg1 + msg23*256; + hist[hist_size+ent_seq] = seq; seq+=1; + hist[hist_size+ent_bus] = midi_bus; + + hist_size+=ent_size; + + g_force_redraw=1; + ); + midisend(ts,msg1,msg23); + 1; + ); +); + +@gfx 600 400 + +top_margin=gfx_texth + 4.0; +g_histsize = ((hist_size/ent_size / 8)|0); +g_viewsize = (((gfx_h-top_margin-1)/(gfx_texth+2))|0); + +g_pos = g_histsize - g_viewsize; +g_at_end ? ( + g_pos += 1; + g_scroll = g_pos; +) : ( + g_pos > g_scroll ? g_pos = g_scroll; +); + +g_pos < 0 ? g_pos=0; + +g_scrollbar_top = top_margin+1 + g_pos * (gfx_h-top_margin-1) / g_histsize; +g_scrollbar_bot = top_margin + 1+ (g_pos + g_viewsize)*(gfx_h-top_margin-1)/g_histsize; + +g_cap ? ( + g_capst=0; + g_cap == 1 ? ( + g_pos = mouse_y; + g_scrollbar_offs >= 0 ? g_pos-= g_scrollbar_offs; + g_pos -= top_margin+1; + g_pos = g_histsize * g_pos / (gfx_h-top_margin-1); + + g_scroll = (g_pos |= 0); + g_pos < 0 ? g_pos=0; + + g_pos >= g_histsize-g_viewsize ? ( g_at_end=1; g_pos = g_histsize-g_viewsize; ) : g_at_end=0; + g_pos < 0 ? g_pos=0; + + g_scrollbar_top = top_margin+1 + g_pos * (gfx_h-top_margin-1) / g_histsize; + g_scrollbar_bot = top_margin + 1+ (g_pos + g_viewsize)*(gfx_h-top_margin-1)/g_histsize; + ) : + g_cap == 4 && mouse_y < top_margin && mouse_X >= g_logx && mouse_x <= g_logx_e ? ( + !(mouse_cap&1)? log_active=!log_active; + g_capst=1; + ) : + g_cap == 3 && mouse_y < top_margin && mouse_X >= g_clearx && mouse_x <= g_clearx_e ? ( + !(mouse_cap&1) ? ( + seq=hist_size=0;g_histsize=0; + g_pos=1; g_at_end=1; + g_scrollbar_top = top_margin+1 + g_pos * (gfx_h-top_margin-1) / g_histsize; + g_scrollbar_bot = top_margin + 1+ (g_pos + g_viewsize)*(gfx_h-top_margin-1)/g_histsize; ); + g_capst=1; + ); + + !(mouse_cap&1) ? g_cap=0; + g_force_redraw=1; +) : ( + (mouse_cap & 1) ? ( + g_capst=1; + mouse_y > top_margin && mouse_x > gfx_w - top_margin ? ( + g_scrollbar_offs = -1; + + mouse_y >= g_scrollbar_top && mouse_y <= g_scrollbar_bot ? g_scrollbar_offs = mouse_y - g_scrollbar_top; + + g_cap=1; // scrollbar + ) : ( + g_cap = 2; + mouse_y < top_margin ? ( + mouse_x >= g_logx && mouse_x <= g_logx_e ? ( + g_force_redraw=1; + g_cap=4; + ) : mouse_x >= g_clearx && mouse_x <= g_clearx_e ? ( + g_force_redraw=1; + g_cap=3; + ); + ); + + ); + ) : g_cap=0; +); + +gfx_w != g_lw || gfx_h != g_lh || g_force_redraw ? ( + g_force_redraw=0; + g_lw=gfx_w; g_lh=gfx_h; + gfx_r=gfx_g=gfx_b=0; gfx_a=1; + gfx_x=gfx_y=0; + gfx_rectto(g_lw,g_lh); + + + // draw top line + gfx_r=gfx_g=gfx_b=0.3; + gfx_x=gfx_y=0; + gfx_rectto(g_lw,top_margin); + + g_cap == 4 && g_capst ? ( + gfx_r=1; gfx_g=gfx_b=0; gfx_x=0; gfx_y=0; gfx_rectto(gfx_x+3*8,top_margin); + ); + gfx_r=gfx_g=gfx_b=log_active?1:0; + gfx_x=0; + gfx_y=2; + g_logx = gfx_x; + gfx_drawchar($'L'); + gfx_drawchar($'O'); + gfx_drawchar($'G'); + g_logx_e = gfx_x; + + gfx_x += 16; + + g_cap == 3 && g_capst ? ( + g_lx=gfx_x; + gfx_y=0; gfx_r=1; gfx_g=gfx_b=0; gfx_rectto(gfx_x+5*8,top_margin); + gfx_x=g_lx; + gfx_y=2; + ); + + gfx_r=gfx_g=gfx_b=1; + g_clearx = gfx_x; + gfx_drawchar($'C'); + gfx_drawchar($'L'); + gfx_drawchar($'E'); + gfx_drawchar($'A'); + gfx_drawchar($'R'); + g_clearx_e = gfx_x; + + // right scrollbar + gfx_r=0.0; gfx_g=gfx_b=0.3; + gfx_x=gfx_w-top_margin; + gfx_y=top_margin+1; + gfx_rectto(gfx_w,gfx_h); + + gfx_r=0.0; gfx_g=gfx_b=0.7; + + gfx_y = g_scrollbar_top; + gfx_x=gfx_w-top_margin+1; + gfx_rectto(gfx_w-1,g_scrollbar_bot); + + + gfx_r=gfx_g=gfx_b=1; + gfx_y=top_margin+1 - ((g_pos*8)|0)*(gfx_texth+2); + g_pos = hist; + g_lastseq = 0; + g_f_lsb=0; + g_s_lsb=0; + g_m_lsb=0; + g_h_lsb=0; + hist_size ? while ( + g_msg = g_pos[ent_midiinfo]; + g_sf = (g_msg>>8)&0xff; + g_wq = (g_sf>>4)&0xf; + g_nib = g_sf&0xf; + + g_wq == 0 ? g_f_lsb=g_nib; + g_wq == 2 ? g_s_lsb=g_nib; + g_wq == 4 ? g_m_lsb=g_nib; + g_wq == 6 ? g_h_lsb=g_nib; + g_wq == 1 ? g_f_lsb += g_nib*16.0; + g_wq == 3 ? g_s_lsb += g_nib*16.0; + g_wq == 5 ? g_m_lsb += g_nib*16.0; + g_wq == 7 ? g_h_lsb += g_nib*16.0; + + + gfx_y >= top_margin && (g_wq == 7 || g_wq != g_lastseq) ? ( + gfx_x=0; + gfx_drawnumber(g_pos[ent_seq],0); + gfx_x=60; + gfx_drawnumber(g_pos[ent_time] + g_pos[ent_blockoffs]/srate,4); + gfx_x=180; + gfx_drawnumber(g_pos[ent_blockoffs],0); + gfx_x=230; + gfx_drawchar($'B'); + gfx_drawnumber(g_pos[ent_bus]+1,0); + gfx_x=300; + + g_wq != g_lastseq ? ( + gfx_drawchar($'E'); + gfx_drawchar($'R'); + gfx_drawchar($'R'); + gfx_x+=8; + ) : ( + + gfx_drawchar($'T'); + gfx_drawchar($'='); + gfx_x += 8; + + gfx_drawnumber(g_h_lsb>>5,0); + gfx_drawchar($':'); + gfx_drawnumber(g_h_lsb&31,0); + gfx_drawchar($':'); + gfx_drawnumber(g_m_lsb,0); + gfx_drawchar($':'); + gfx_drawnumber(g_s_lsb,0); + gfx_drawchar($':'); + gfx_drawnumber(g_f_lsb,0); + ); + gfx_y += gfx_texth+2; + ) : gfx_y < top_margin ? ( + gfx_y += gfx_texth+2; + ); + g_lastseq = (g_wq+1)&7; + + g_pos += ent_size; + gfx_y < gfx_h && g_pos < hist + hist_size; + ); + g_at_end ? ( + gfx_x=0; + gfx_drawchar($'_'); + ); + +); diff --git a/Effects/midi/program_bank_onload b/Effects/midi/program_bank_onload new file mode 100644 index 0000000..20e6371 --- /dev/null +++ b/Effects/midi/program_bank_onload @@ -0,0 +1,31 @@ +desc:MIDI Program/Bank Switch on Load +//tags: MIDI generator + +slider1:1<1,16,1>MIDI Channel +slider2:0<0,127,1>MSB +slider3:0<0,127,1>LSB +slider4:0<0,127,1>Program +slider5:0<0,1,1{No,Yes}>Has Sent + +in_pin:none +out_pin:none + +@init +ext_noinit=1; +has_sent = 0; + +@block +!slider5 || !has_sent ? ( + has_sent=slider5=1; + sliderchange(slider5); + while ( + midirecv(ts,msg1,msg23) ? midisend(ts,msg1,msg23); + ); + chan = (slider1|0)-1; + msb = slider2|0; + lsb = slider3|0; + midisend(0,$xB0 + chan,0 + msb*256); + midisend(0,$xB0 + chan,32 + lsb*256); + midisend(0,$xC0 + chan, slider4|0); +); + diff --git a/Effects/midi/sequencer_baby b/Effects/midi/sequencer_baby new file mode 100644 index 0000000..b1077e6 --- /dev/null +++ b/Effects/midi/sequencer_baby @@ -0,0 +1,173 @@ +desc:MIDI Sequencer Baby +//tags: MIDI generator sequencing + +slider1:0<0,15,1{0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15}>Pattern +slider2:60<0,127,1>Note Start + +in_pin:none +out_pin:none + +@init +listlength=16; +numnotes=16; +lbeatpos=-1; +npatterns=16; +mstate=-1; +lastpreviewsel=-1; +gfx_clear=-1; +ext_noinit=1; +noteonstate=0; +want_preview=-1; +want_previewoff=0; + + +@slider +basenote=slider2|0; +p=slider1|0; +p<0?p=0:p>=npatterns?p=npatterns-1; + +notelist=listlength*p; + +@serialize +file_mem(0,0,listlength*npatterns); + +@block + +want_previewoff && last_preview >=0 ? ( + midisend(0,$x80,last_preview+basenote); + last_preview=-1; +); +want_previewoff=0; + + +want_preview >=0 ? +( + midisend(0,$x90,want_preview+basenote+127*256); + last_preview=want_preview; + want_preview=-1; +); + +curbeatpos = beat_position; +cursplpos=0; +dbeatpos = (tempo * 4.0 / (60.0 * ts_denom * srate)); + +loop((play_state&1) ? samplesblock : 1, + beatpos=(play_state&1) ? (curbeatpos * 4.0)%listlength : -100; + beatpos != lbeatpos || !(play_state&1) ? ( + a = (play_state&1) ? notelist[beatpos] : 0; + npos=basenote; + noneed=noteonstate; + noteonstate=0; + while( + (noneed&1) ? ( + midisend(cursplpos,$x80,npos); + ); + (a&1) ? ( + midisend(cursplpos,$x90,npos + 127*256); + noteonstate+=2^(npos-basenote); + ); + npos+=1; + noneed*=0.5; + (a*=0.5) >=1 || noneed >= 1; + ); + lbeatpos=beatpos; + ); + cursplpos += 1; + curbeatpos += dbeatpos; +); + +@sample + +@gfx 400 300 + +lgfx_w != gfx_w || lgfx_h != gfx_h ? ( + lgfx_w = gfx_w; lgfx_h = gfx_h; + gfx_r=gfx_g=gfx_b=gfx_x=gfx_y=0; + gfx_rectto(gfx_w,gfx_h); +); + +y = numnotes - 1 - (((mouse_y / gfx_h)*numnotes )|0); + +(mouse_cap&2) ? ( + y != lastpreviewsel && y >= 0 && y < numnotes ? + ( + lastpreviewsel>=0 ? want_previewoff=1; + want_preview=lastpreviewsel=y; + ); +):( + want_previewoff=1; + lastpreviewsel=-1; +); + +(mouse_cap&1) ? ( + x = ((mouse_x/gfx_w)*listlength)|0; + x >= 0 && x < listlength && y >= 0 && y < numnotes? ( + mstate<0 ? ( + mask = 2^y; + nlm=(notelist[x] & mask); + mstate=nlm?0:1; + mstate==0 && nlm ? notelist[x]-=mask; + mstate==1 && !nlm ? notelist[x]+=mask; + ) : ( + lcnt = max(abs(last_x-x),abs(last_y-y))|0; + dx = (x-last_x)/lcnt; + dy = (y-last_y)/lcnt; + lcnt >= 1 ? loop(lcnt, + last_x += dx; + last_y += dy; + mask = 2^(last_y|0); + nlm=(notelist[last_x|0] & mask); + mstate==0 && nlm ? notelist[last_x|0]-=mask; + mstate==1 && !nlm ? notelist[last_x|0]+=mask; + + ); + ); + last_x = x; + last_y = y; + ); +) : ( + mstate >= 0 ? sliderchange(-1); + mstate=-1; +); + + +ly=0; + +notepos=0; +loop(numnotes, + +ty=((notepos+1)*gfx_h)/(numnotes); +lx=0; +xpos=0; +mask = 2^(numnotes-1-notepos); +cidx=(slider1&7); +gfx_a=1; + +use_r=(cidx&1) ? 0.6 : 0.2; +use_g=(cidx&2) ? 0.6 : 0.2; +use_b=(cidx&4) ? 0.2 : 0.6; +cidx==3 ? use_r*=2; +cidx==4 ? use_g*=2; + +loop(listlength, + tx = ((xpos+1)*gfx_w)/listlength; + + sel=(notelist[xpos]&mask); + + gfx_r=use_r; gfx_g=use_g; gfx_b=use_b; + + !(xpos&3) ? ( gfx_g=gfx_r; gfx_r=gfx_b; gfx_b=use_g;); + + lbeatpos == xpos ? ( gfx_r=gfx_g=gfx_b=sel?0.8:0.4; ) : + !sel ? (gfx_r*=0.55; gfx_g*=0.55; gfx_b*=0.55; ); + + + gfx_x=lx; gfx_y=ly; gfx_rectto(tx,ty); + + lx=tx+2; + xpos+=1; +); + +ly=ty+2; +notepos+=1; +); diff --git a/Effects/midi/sequencer_baby_v2 b/Effects/midi/sequencer_baby_v2 new file mode 100644 index 0000000..db80b22 --- /dev/null +++ b/Effects/midi/sequencer_baby_v2 @@ -0,0 +1,222 @@ +desc:MIDI Sequencer Baby v2 +//tags: MIDI generator sequencing + +slider1:0<0,15,1{0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15}>Pattern +slider2:60<0,127,1>Note Start +slider3:16<4,128,1>Sequence Length +slider4:16<1,32,1>Number Of Notes +slider5:1<0.125,4.0,.125>Rate + +in_pin:none +out_pin:none + +@init +listlength=16; +numnotes=16; +lbeatpos=-1; +npatterns=16; +mstate=-1; +lastpreviewsel=-1; +gfx_clear=-1; +ext_noinit=1; +noteonstate=0; +want_preview=-1; +want_previewoff=0; + +@slider +rateadj = 4 * slider5; + +basenote=slider2|0; +p=slider1|0; +p<0?p=0:p>=npatterns?p=npatterns-1; + +numnotes=slider4|0; + +newsz=slider3|0; +newsz >= 1 && listlength != newsz ? ( + x=0; + + sparebuf = 1024*1024; + loop(npatterns, + newsz < listlength ? ( + // decrease size + memcpy(sparebuf + x*1024, x*listlength, listlength); // save a copy of the full quality + + x ? memcpy(x*newsz, x*listlength, newsz); + ) : ( + // increase size + x < npatterns-1 ? memcpy((npatterns-1-x)*newsz,(npatterns-1-x)*listlength,listlength); + + memcpy((npatterns-1-x)*newsz + listlength, sparebuf + (npatterns-1-x)*1024 + listlength,newsz-listlength); + ); + + x+=1; + ); + + + listlength = newsz; +); + +notelist=listlength*p; + +@serialize + +sersz = listlength*npatterns; +file_avail(0) >= 0 ? ( + // loading config, clear spare buf + memset(sparebuf,0,1024*1024); + + // clear in case config is partial + memset(0, 0, sersz); + file_mem(0,0,sersz); +) : ( + // writing config, dont write trailing 0s + while ( + sersz[-1] == 0 ? ( + (sersz -= 1) > 0; + ); + ); + file_mem(0,0,max(sersz,1)); // always write at least one 0 +); + +@block + +want_previewoff && last_preview >=0 ? ( + midisend(0,$x80,last_preview+basenote); + last_preview=-1; +); +want_previewoff=0; + + +want_preview >=0 ? +( + midisend(0,$x90,want_preview+basenote+127*256); + last_preview=want_preview; + want_preview=-1; +); + +curbeatpos = beat_position; +cursplpos=0; +dbeatpos = (tempo * 4.0 / (60.0 * ts_denom * srate)); + +loop((play_state&1) ? samplesblock : 1, + beatpos=(play_state&1) ? (curbeatpos * rateadj)%listlength : -100; + beatpos != lbeatpos || !(play_state&1) ? ( + a = (play_state&1) ? notelist[beatpos] : 0; + npos=basenote; + noneed=noteonstate; + noteonstate=0; + while( + (noneed&1) ? ( + midisend(cursplpos,$x80,npos); + ); + (a&1) ? ( + midisend(cursplpos,$x90,npos + 127*256); + noteonstate+=2^(npos-basenote); + ); + npos+=1; + noneed*=0.5; + (a*=0.5) >=1 || noneed >= 1; + ); + lbeatpos=beatpos; + ); + cursplpos += 1; + curbeatpos += dbeatpos; +); + +@sample + +@gfx 400 300 + +lgfx_w != gfx_w || lgfx_h != gfx_h || llistlength != listlength || lnumnotes != numnotes ? ( + lgfx_w = gfx_w; lgfx_h = gfx_h; + llistlength = listlength; + lnumnotes = numnotes; + gfx_r=gfx_g=gfx_b=gfx_x=gfx_y=0; + gfx_rectto(gfx_w,gfx_h); +); + +y = numnotes - 1 - (((mouse_y / gfx_h)*numnotes )|0); + +(mouse_cap&2) ? ( + y != lastpreviewsel && y >= 0 && y < numnotes ? + ( + lastpreviewsel>=0 ? want_previewoff=1; + want_preview=lastpreviewsel=y; + ); +):( + want_previewoff=1; + lastpreviewsel=-1; +); + +(mouse_cap&1) ? ( + x = ((mouse_x/gfx_w)*listlength)|0; + x >= 0 && x < listlength && y >= 0 && y < numnotes? ( + mstate<0 ? ( + mask = 2^y; + nlm=(notelist[x] & mask); + mstate=nlm?0:1; + mstate==0 && nlm ? notelist[x]-=mask; + mstate==1 && !nlm ? notelist[x]+=mask; + ) : ( + lcnt = max(abs(last_x-x),abs(last_y-y))|0; + dx = (x-last_x)/lcnt; + dy = (y-last_y)/lcnt; + lcnt >= 1 ? loop(lcnt, + last_x += dx; + last_y += dy; + mask = 2^(last_y|0); + nlm=(notelist[last_x|0] & mask); + mstate==0 && nlm ? notelist[last_x|0]-=mask; + mstate==1 && !nlm ? notelist[last_x|0]+=mask; + + ); + ); + last_x = x; + last_y = y; + ); +) : ( + mstate >=0 ? sliderchange(-1); + mstate=-1; +); + +ly=0; + +notepos=0; +loop(numnotes, + +ty=((notepos+1)*gfx_h)/(numnotes); +lx=0; +xpos=0; +mask = 2^(numnotes-1-notepos); +cidx=(slider1&7); +gfx_a=1; + +use_r=(cidx&1) ? 0.6 : 0.2; +use_g=(cidx&2) ? 0.6 : 0.2; +use_b=(cidx&4) ? 0.2 : 0.6; +cidx==3 ? use_r*=2; +cidx==4 ? use_g*=2; + +loop(listlength, + tx = ((xpos+1)*gfx_w)/listlength; + + sel=(notelist[xpos]&mask); + + gfx_r=use_r; gfx_g=use_g; gfx_b=use_b; + + !(xpos&3) ? ( gfx_g=gfx_r; gfx_r=gfx_b; gfx_b=use_g;); + + lbeatpos == xpos ? ( gfx_r=gfx_g=gfx_b=sel?0.8:0.4; ) : + !sel ? (gfx_r*=0.55; gfx_g*=0.55; gfx_b*=0.55; ); + + + gfx_x=lx; gfx_y=ly; gfx_rectto(tx,ty); + + lx=tx+2; + xpos+=1; +); + +ly=ty+2; +notepos+=1; +); diff --git a/Effects/midi/sequencer_megababy b/Effects/midi/sequencer_megababy new file mode 100644 index 0000000..3095054 --- /dev/null +++ b/Effects/midi/sequencer_megababy @@ -0,0 +1,3563 @@ +/* Quick Guide + + If you want drum maps for Battery 3 or Battery 4, they are included here: + + http://stash.reaper.fm/v/18598/sequencer_baby_v2_jnif.zip + +- Right click/drag: Audition existing note or empty location. + Sets velocity for new notes if existing note is auditioned. + +- Left click/drag: Draw or erase notes on the same row. +- Shift + Ctrl + Alt + Left click/drag: Freehand draw or erase notes. +- Ctrl + Left click/drag: Edit velocity of notes. + Drag over multiple notes on the same row to create velocity curves. +- Ctrl + Alt + Left click/drag: Adjust velocity of all notes on the same row. +- Shift + Left click/drag left/right: Adjust note start offset. +- Shift + Alt + Left click/drag: Adjust note start offset of all notes on the same row. +- Alt + Left click: Tie/untie notes. +- Alt + Left drag: Tie/untie multiple notes in a row. +- Shift + Right click drag up/down: Subdivide note. + +- Left click drag up/down note names in Drum map mode: Transpose note row. +- Left click drag up/down MIDI channel number in Drum map mode: Change MIDI channel of note row. +- Shift + Left click piano keys / note names: Duplicate sequence. Sequence length is doubled. +- Ctrl + Left click piano keys / note names: Halve steps per beat, slow down +- Ctrl + Right click piano keys / note names: Double steps per beat, speed up +- Ctrl + Alt + Left click piano keys / note names: Halve steps per beat, preserve note positions. Sequence length is halved. +- Ctrl + Alt + Right click piano keys / note names: Double steps per beat, preserve note positions. Sequence length is doubled. + +- Left click drag green area on toolbar pianokeys: Change base note of the grid. +- Right click drag green area on toolbar pianokeys: Change number of notes in the grid. +- Left click drag red area on toolbar pianokeys: Change MIDI trigger notes for pattern triggering. + +- Left click pattern button: Change pattern. +- Ctrl + Left click pattern button: Copy the active pattern to clicked pattern and change to the clicked pattern. +- Ctrl + Right click pattern button: Clear pattern. +- Alt + Left click pattern button: Set pattern chain end + +- Left click Mode button (PR=Piano Roll, DM=Drum Map): Change mode. +- Left click "Play before start" button: Enable/Disable playback before start beat position. + ">|>" = play everywhere + " |>" = play only after start beat position +- Left click "Start beat position" value: Set start beat position to current play cursor position. +- Left click "End beat position" value: Set end beat position to current play cursor position. "---" = play infinitely. +- Right click "Start beat position" value: Set start beat position to default value, "0.000". +- Right click "End beat position" value: Set end beat position to default value, "---". +- Left click/drag "Note length" slider: Set/adjust note length for all notes. 100% equals full step length. +- Left click/drag Swing slider: Set/adjust swing. + +- Left click/drag on envelope lane: Draw/adjust envelope of the active envelope type. +- Right click/drag on envelope lane: Erase envelope of the active envelope type. +- Left click drag up/down envelope MIDI channel (in Drum map mode): Change MIDI channel of envelope. +- Left click drag up/down envelope type names/numbers: Change envelope type. + Types: + MIDI CC 0-127. + On first envelope (the blue one) type 127 has a special meaning. + It controls probability of note playback on each sequence step. + Only notes on same channel as the envelope will be affected. + +*/ + +desc:MIDI Sequencer Megababy +//tags: MIDI generator sequencing +//author: jnif + +slider1:0<0,15,1{0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15}>Pattern +slider2:36<0,127,1>--Note Start +slider3:16<4,128,1>Sequence Length +slider4:16<1,32,1>--Number Of Notes +slider5:1<0.125,4.0,.125>Rate +slider6:100<1,100,1>--Note Length +slider7:1<0,1,1{Piano Roll,Drum Map}>--Mode +slider8:0<0,100,1>--Swing +slider9:4<1,16,1>Steps Per Beat +slider10:0<0,6,1{Off,On (Pattern Change),On (Pattern Change + Transpose),On (Pattern Change + Resync),On (Pattern Change + Transpose + Resync),On (Pattern Change + Resync Quantized),On (Pattern Change + Transpose + Resync Quantized)}>MIDI Trigger +slider11:72<0,127,1>--Trigger Note Start +slider12:0<0,15,1{Off,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15}>--Chain +slider13:0.2<0.0,1.0,0.001>--Lane Height Percent +slider14:0<0,3,1>--CC To Adjust (Active For Editing) +slider15:/seqbaby_data:_Default Kit.txt:Drum Map Note Names +slider20:1<0,127,1>--Controller 1 Type +slider21:7<0,127,1>--Controller 2 Type +slider22:10<0,127,1>--Controller 3 Type +slider23:11<0,127,1>--Controller 4 Type +slider30:0<0,15,0>--Controller 1 Channel +slider31:0<0,15,0>--Controller 2 Channel +slider32:0<0,15,0>--Controller 3 Channel +slider33:0<0,15,0>--Controller 4 Channel +slider40:0<-99,9999,1>--Start Beat Position +slider41:1<0,1,1>--Play Before Start +slider42:-99<-99,9999,1>--End Beat Position + +in_pin:none +out_pin:none + +@init + +octave_offset=-1; // Set this value as you prefer. +// It works the same way as "MIDI octave name display offset" in Reaper's preferences +// 1 : MIDI note 60 = C5 +// 0 : MIDI note 60 = C4 +// -1 : MIDI note 60 = C3 ... + +listlength=16; // sequence length of current pattern +numnotes=16; +max_numnotes=32; +max_seqlength=128; +max_steps_per_beat=16; +lbeatpos=-1; +ltickpos=-1; +npatterns=16; +p=-1; //Current pattern (use -1 here to force call to change_pattern right after init) +prev_p=p; + +// Mouse state encodings +mstate=0; // OFF +ms_grid=2^8; // note grid area +ms_noteerase=ms_grid+0; +ms_notedraw=ms_grid+1; +ms_veloedit=ms_grid+2; +ms_veloeditrow=ms_grid+3; +ms_notetie=ms_grid+4; +ms_startoffsetedit=ms_grid+5; +ms_startoffseteditrow=ms_grid+6; +ms_subdivnum=ms_grid+7; +ms_pk=2^9; //piano key area +ms_duplseq=ms_pk+0; +ms_rowtranpose=ms_pk+1; +ms_doublespbpreservepos=ms_pk+2; // double steps per beat, preserve note positions +ms_halvespbpreservepos=ms_pk+3; // halve steps per beat, preserve note positions +ms_doublespb=ms_pk+4; +ms_halvespb=ms_pk+5; +ms_tb=2^10; // toolbar area +ms_tb_r1=2^5; // toolbar row 1 +ms_tb_pianokey_base=ms_tb+ms_tb_r1+0; +ms_tb_pianokey_trig=ms_tb+ms_tb_r1+1; +ms_tb_pianokey_numnotes=ms_tb+ms_tb_r1+2; +ms_tb_r2=2^6; // toolbar row 2 +ms_tb_patchange=ms_tb+ms_tb_r2+0; +ms_tb_patcopy=ms_tb+ms_tb_r2+1; +ms_tb_chain=ms_tb+ms_tb_r2+2; +ms_tb_r3=2^7; // toolbar row 3 +ms_tb_button=ms_tb+ms_tb_r3+0; +ms_tb_notelen=ms_tb+ms_tb_r3+1; +ms_tb_swing=ms_tb+ms_tb_r3+2; +ms_tb_button_noundo=ms_tb+ms_tb_r3+3; +ms_el=2^11; // envelope lane area +ms_el_divider=ms_el+0; +ms_el_envdraw=ms_el+1; +ms_el_enverase=ms_el+2; +ms_el_ctrlchange=ms_el+3; +ms_preview=2^12; // preview note or piano key + +ms_sub_drawfreehand=0; // substate for ms_noteerase and ms_notedraw. 0=off, 1=on + +ms_sub_channelchange=0; // substate for ms_rowtranpose and ms_el_ctrlchange + +// Toolbar element highlight states +hl_state=0; +hl_pattern=2^4; // Lowest 4 bits indicate the pattern number to highlight +hl_mode=32; +hl_playbeforestart=33; +hl_startpos=34; +hl_endpos=35; +hl_notelen=36; +hl_swing=37; +last_hl_state=0; + +lastpreviewsel=-1; +gfx_clear=-1; +ext_noinit=1; +noteonstate=0; +want_preview=-1; +last_preview=-1; +want_preview_nt=-1; +last_preview_nt=-1; +want_previewoff=0; +defaultvelo=100; +lastvelo=defaultvelo; +notelist_base = 0; +velolist_base = 1*16*32*128; //64k +new_velolist_base = 2*16*32*128; //2*64k +velobarwidth = 3; +ticks = 0; +tpb = 128; // ticks per beat +pianow=3*8+8; +chw = 0; //MIDI channel column width +pkw = pianow+chw; // piano key area width (pianokeys or note_names + MIDI channel column ) +tbrh = 18; // toolbar row height +tbh = 3*tbrh+1; // toolbar height +el_divh = 6; // envelope lane divider height +recalc_elh = 1; // recalculate envelope lane height +lbasenote = -1; +lnumnotes = -1; +rateadj = 1; +lrateadj = -1; +lhl = 0; +lmode = -1; +notetranspose = 3*16*32*128; //3*64k +notrans = notetranspose+max_numnotes; +listlength_pat = notrans+max_numnotes; +memset(listlength_pat, listlength, npatterns); //initialize all patterns to same length +listlength_all=listlength*npatterns; +rowchannel = listlength_pat+npatterns; +memset(rowchannel, 0, max_numnotes); // initialize all rows to MIDI channel 0 +zerochan = rowchannel+max_numnotes; +steps_per_beat=4; +steps_per_beat_pat=zerochan+max_numnotes; +memset(steps_per_beat_pat, steps_per_beat, npatterns); //initialize all patterns to same steps_per_beat +numccs=4; +cc_type=steps_per_beat_pat+npatterns; +cc_chan=cc_type+numccs; +cc_to_adjust=0; // Currently highlighted envelope active for editing +refresh_cc_controls=1; // force refresh at init +sd_playstate=cc_chan+numccs;// state of subdivided notes on each playing note row (2 subsequent values per row: sdnum and sdena) +want_noteoff_nt = 0; +ldraglen = -1; +start_beatpos = 0; +end_beatpos = -99; // if end_beatpos <= start_beatpos, then play infinitely +recmask = 0xFFFFFFFF; +notelen_p = 100; +defnotelen = tpb; +swing_p = 0; +swing = 0; +rate = 1.0; +notetie_base = 4*16*32*128; //4*64k +notetie=notetie_base; +ltiestate=0; +refresh_tb=1; +busp=24; //toolbar button spacing (pixels) +mouse_on_button=0; +serz_data_ver=6; // Version of data format used in state saving in @serialize +serz_data_ver_running=serz_data_ver; +midi_trigger=0; +trig_note_start=36; +pat_trigger_pending=0; +pat_trigger_note=0; +pattrans_trigger_pending=0; +pattrans_trigger_note=0; +has_notes=0; // flags indicating patterns that have notes. 0=empty pattern, 1=has notes. bit0 = pat0, bit1 = pat1, ... +chain_beats=listlength/steps_per_beat; +ts_num_l=4; +ts_denom_l=4; + +sparebuf = 1024*1024; //for notes +sparebuf2 = 2*1024*1024; //for velocities +sparebuf_tie = sparebuf+1024*npatterns; // for note ties +sparebuf_cc = sparebuf_tie+1024*npatterns; // for CCs + +cclist_base = 5*16*32*128; //5*64k +cclist=cclist_base; + +start_adj_orig_list = 6*16*32*128; //6*64k + +buf_offset = 7*16*32*128; //7*64k +buf_msg1 = buf_offset+1024; +buf_msg23 = buf_msg1+1024; + +nn = 8*16*32*128; //8*64k +nn[0] = strcpy(500, "C"); +nn[1] = strcpy(501, "C"); +nn[2] = strcpy(502, "D"); +nn[3] = strcpy(503, "D"); +nn[4] = strcpy(504, "E"); +nn[5] = strcpy(505, "F"); +nn[6] = strcpy(506, "F"); +nn[7] = strcpy(507, "G"); +nn[8] = strcpy(508, "G"); +nn[9] = strcpy(509, "A"); +nn[10] = strcpy(510, "A"); +nn[11] = strcpy(511, "B"); +#name_str=""; +notename_digit=0; + +notenames=nn+128; +nn_filename=1000; // string slot for notename file name +lnotenames_file=-1; +max_notename_length=4; //Number of characters in note name. This controls the notename field width in GUI. + +max_subdivs=8; +// // Sub division list lengths for each row in each pattern +// sdlist_len = 10*16*32*128; //9*64k + +// Note Sub division list (contains velocities and start offsets for subdivided notes) +sdlist = 9*16*32*128; //10*64k (reserve 8 64k blocks) +//max_subdivs*max_seqlength*max_numnotes*npatterns=8*64k + +sdlist_p=0; // sdlist location of current pattern + +tb_pianokey_end=10*(7*4+5*3+2)+5*4+3*3+1; + +// colors +c_grid_r = 41/256; +c_grid_g = 61/256; +c_grid_b = 104/256; +c_grid_a = 1.0; + +c_barline_r = 51/256; +c_barline_g = 76/256; +c_barline_b = 127/256; +c_barline_a = 1.0; + +c_hl_r = 0.2; +c_hl_g = 0.4; +c_hl_b = 1.0; +c_hl_a = 0.4; + + +// Set note velocity value to bits (7:0) +function setVelo(note, velo) +( + velolist[note] &= 0xFFFFFF80; //clear old + velolist[note] += velo; //set new +); + +// Get note velocity value from bits (7:0) +function getVelo(note) +( + velolist[note] & 0x7F; +); + +// Set note start offset to bits (15:8) +function setStart(note, start) +( + velolist[note] &= 0xFFFF00FF; //clear old + velolist[note] += (start << 8); //set new +); + +// Get note start value from bits (15:8) +function getStart(note) +( + (velolist[note] & 0x0000FF00) >> 8; +); + +// Set number of subdivs to bits (19:16) +function setSubdivNum(note, num) +( + velolist[note] &= 0xFFF0FFFF; //clear old + velolist[note] += (num << 16); //set new +); + +// Get number of subdivs from bits (19:16) +function getSubdivNum(note) +( + (velolist[note] & 0x000F0000) >> 16; +); + +function setSubdivVelo(row, step, sd_pos, velo) +( + sdlist[sdlist_p+row*max_seqlength*max_subdivs+step*max_subdivs+sd_pos] &= 0xFFFFFF80; //clear old + sdlist[sdlist_p+row*max_seqlength*max_subdivs+step*max_subdivs+sd_pos] += velo; +); + +function getSubdivVelo(row, step, sd_pos) +( + sdlist[sdlist_p+row*max_seqlength*max_subdivs+step*max_subdivs+sd_pos] & 0x7F; +); + +// Set subdiv notelist indicating which subdiv steps are enabled +function setSubdivNotelist(row, step, notes) +( + sdlist[sdlist_p+row*max_seqlength*max_subdivs+step*max_subdivs] &= 0xFF00FFFF; //clear old + sdlist[sdlist_p+row*max_seqlength*max_subdivs+step*max_subdivs] += (notes << 16); //set new + +); + +// Get subdiv notelist indicating which subdiv steps are enabled +function getSubdivNotelist(row, step) +( + (sdlist[sdlist_p+row*max_seqlength*max_subdivs+step*max_subdivs] & 0x00FF0000) >> 16; +); + +// Get CC value from source's bit field indicated by ccpos +function getCc(source, ccpos) local(val) +( + val = 0; + ccpos == 0 ? val = source & 0xFF; + ccpos == 1 ? val = (source & 0x0000FF00) >> 8; + ccpos == 2 ? val = (source & 0x00FF0000) >> 16; + ccpos == 3 ? ( + source & 0x80000000 ? ( // bit 31 = 1 + val = ((source & 0x7F000000) >> 24) + 0x80; + ) : ( + val = (source & 0x7F000000) >> 24; + ); + ); + val; +); + +// Set CC value val to target's bit field indicated by ccpos +function setCc(target, ccpos, val) +( + ccpos == 0 ? (target &= 0xFFFFFF00; target += val;); + ccpos == 1 ? (target &= 0xFFFF00FF; target += val * 2^8;); + ccpos == 2 ? (target &= 0xFF00FFFF; target += val * 2^16;); + ccpos == 3 ? (target &= 0x00FFFFFF; target += val * 2^24;); + target; +); + +// Is the value within valid MIDI value range (7bit)? +function is_midi_val(value) +( + valid = 0; + value >= 0 && value < 128 ? valid = 1; + valid; +); + +// Truncate to valid MIDI value range (7bit). +function trunc_midi_val(value) +( + value < 0 ? ( + value = 0; + ) : ( + value > 127 ? value = 127; + ); + value; +); + +function scale_velobarwidth(seqlen) local(width, gfx_w_l) +( + width = 2; + gfx_w == 0 ? gfx_w_l=400+pkw : gfx_w_l=gfx_w; + seqlen/(gfx_w_l/(400+pkw)) > 65 ? width = 1; + seqlen/(gfx_w_l/(400+pkw)) < 42 ? width = 3; + width; // return scaled width +); + +// Update flags indicating patterns that are not empty +function update_has_notes() local(p, step, note_found, notelist, cclist) +( + has_notes=0; + notelist=notelist_base; + cclist=cclist_base; + p=0; + loop(npatterns, + note_found=0; + step=0; + while(step < listlength_pat[p] && !note_found ? ( + notelist[step] != 0 ? note_found=1; + cclist[step] != 0 ? note_found=1; + step+=1; + ); + ); + note_found ? has_notes+=2^p; + notelist+=listlength_pat[p]; + cclist+=listlength_pat[p]; + p+=1; + ); +); + +// Change pattern +function change_pattern(new_p) local(i) +( + new_p<0 ? new_p=0 : new_p>=npatterns ? new_p=npatterns-1; + p=new_p; + notelist=0; + velolist=velolist_base; + i=0; + loop(p, + notelist+=listlength_pat[i]; + velolist+=max_numnotes*listlength_pat[i]; + i+=1; + ); + notetie=notetie_base+notelist; + cclist=cclist_base+notelist; + notelist=notelist_base+notelist; + + listlength=listlength_pat[p]; + velobarwidth = scale_velobarwidth(listlength); + steps_per_beat = steps_per_beat_pat[p]; + rateadj = steps_per_beat * rate; + update_has_notes(); + refresh_tb=1; + ltiestate = 0; // clear all note ties + sdlist_p=p*max_numnotes*max_seqlength*max_subdivs; +); + +// Update chain beats +function update_chain_beats() local(i_pat) +( + chain_beats=listlength_pat[0]/steps_per_beat_pat[0]; + i_pat=1; + loop(chain, + chain_beats+=listlength_pat[i_pat]/steps_per_beat_pat[i_pat]; + i_pat+=1; + ); +); + +// Change sequence length +function change_seqlen(newsz) local(ip, y, pstart, pstartv, pstart_n, pstartv_n, new_listlength_all) +( + newsz >= 1 && listlength_pat[p] != newsz ? ( + + new_listlength_all=listlength_all-listlength_pat[p]+newsz; + + newsz < listlength_pat[p] ? ( // decrease size + + pstart=0; // old pattern start offset for notes + pstartv=0; // old pattern start offset for velocities + pstart_n=0; // new pattern start offset for notes + pstartv_n=0; // new pattern start offset for velocities + ip=0; // loop index iterating over patterns + loop(npatterns, + memcpy(sparebuf + ip*1024, pstart, listlength_pat[ip]); // save a copy of the full quality notelist + memcpy(sparebuf_tie + ip*1024, notetie_base+pstart, listlength_pat[ip]); // save a copy of the full quality notetielist + memcpy(sparebuf_cc + ip*1024, cclist_base+pstart, listlength_pat[ip]); // save a copy of the full quality notetielist + y=0; + loop(max_numnotes, + memcpy(sparebuf2 + ip*max_numnotes*max_seqlength+y*max_seqlength, velolist_base+pstartv+y*listlength_pat[ip], listlength_pat[ip]); // save a copy of the full quality + y+=1; + ); + + ip < p ? ( + memcpy(new_velolist_base+pstartv_n, velolist_base+pstartv, max_numnotes*listlength_pat[ip]); + pstart_n+=listlength_pat[ip]; + pstartv_n+=max_numnotes*listlength_pat[ip]; + ) : ip == p ? ( + memcpy(pstart_n, pstart, newsz); + memcpy(notetie_base+pstart_n, notetie_base+pstart, newsz); + memcpy(cclist_base+pstart_n, cclist_base+pstart, newsz); + y=0; + loop(max_numnotes, + memcpy(new_velolist_base+pstartv_n+y*newsz, velolist_base+pstartv+y*listlength_pat[ip], newsz); + y+=1; + ); + pstart_n+=newsz; + pstartv_n+=max_numnotes*newsz; + ) : ( + memcpy(pstart_n, pstart, listlength_pat[ip]); + memcpy(notetie_base+pstart_n, notetie_base+pstart, listlength_pat[ip]); + memcpy(cclist_base+pstart_n, cclist_base+pstart, listlength_pat[ip]); + memcpy(new_velolist_base+pstartv_n, velolist_base+pstartv, max_numnotes*listlength_pat[ip]); + pstart_n+=listlength_pat[ip]; + pstartv_n+=max_numnotes*listlength_pat[ip]; + ); + + pstart+=listlength_pat[ip]; + pstartv+=max_numnotes*listlength_pat[ip]; + ip+=1; + ); + + ) : ( // increase size + + pstart=listlength_all; // old pattern start offset for notes + pstartv=max_numnotes*listlength_all; // old pattern start offset for velocities + pstart_n=new_listlength_all; // new pattern start offset for notes + pstartv_n=max_numnotes*new_listlength_all; // new pattern start offset for velocities + + ip=npatterns-1; // loop index iterating over patterns in reverse order + loop(npatterns, + pstart-=listlength_pat[ip]; + pstartv-=max_numnotes*listlength_pat[ip]; + + ip < p ? ( + pstart_n-=listlength_pat[ip]; + pstartv_n-=max_numnotes*listlength_pat[ip]; + memcpy(new_velolist_base+pstartv_n, velolist_base+pstartv, max_numnotes*listlength_pat[ip]); + ) : ip == p ? ( + pstart_n-=newsz; + pstartv_n-=max_numnotes*newsz; + y=0; + loop(max_numnotes, + memcpy(new_velolist_base+pstartv_n+y*newsz, velolist_base+pstartv+y*listlength_pat[ip], listlength_pat[ip]); + memcpy(new_velolist_base+pstartv_n+y*newsz+listlength_pat[ip], sparebuf2+ip*max_numnotes*max_seqlength+y*max_seqlength+listlength_pat[ip], newsz-listlength_pat[ip]); + y+=1; + ); + memcpy(cclist_base+pstart_n, cclist_base+pstart, listlength_pat[ip]); + memcpy(cclist_base+pstart_n+listlength_pat[ip], sparebuf_cc+ip*1024+listlength_pat[ip], newsz-listlength_pat[ip]); + memcpy(notetie_base+pstart_n, notetie_base+pstart, listlength_pat[ip]); + memcpy(notetie_base+pstart_n+listlength_pat[ip], sparebuf_tie+ip*1024+listlength_pat[ip], newsz-listlength_pat[ip]); + memcpy(pstart_n, pstart, listlength_pat[ip]); + memcpy(pstart_n+listlength_pat[ip], sparebuf+ip*1024+listlength_pat[ip], newsz-listlength_pat[ip]); + ) : ( + pstart_n-=listlength_pat[ip]; + pstartv_n-=max_numnotes*listlength_pat[ip]; + memcpy(new_velolist_base+pstartv_n, velolist_base+pstartv, max_numnotes*listlength_pat[ip]); + memcpy(cclist_base+pstart_n, cclist_base+pstart, listlength_pat[ip]); + memcpy(notetie_base+pstart_n, notetie_base+pstart, listlength_pat[ip]); + memcpy(pstart_n, pstart, listlength_pat[ip]); + ); + ip-=1; + ); + ); + + listlength_pat[p] = newsz; + temp = new_velolist_base; + new_velolist_base = velolist_base; + velolist_base = temp; + + listlength = newsz; // Update current sequence length + listlength_all = new_listlength_all; + //change_pattern(p); + + velolist=velolist_base; + ip=0; + loop(p, + velolist+=max_numnotes*listlength_pat[ip]; + ip+=1; + ); + + velobarwidth = scale_velobarwidth(listlength); + + p <= chain ? update_chain_beats(); + + ); +); + +@slider + + +basenote=slider2|0; + +new_p=slider1|0; +new_p!=p ? change_pattern(new_p); + +numnotes=slider4|0; + +rate=slider5; + +notelen_p = slider6|0; +defnotelen = (tpb*(notelen_p/100))|0; + +mode = slider7|0; //0= piano roll, 1 = drum map +mode == 0 ? ( + chw=0; + pianow=3*8+8; +) : ( + chw = 2*8+8; + pianow=max_notename_length*8+8; +); +pkw=chw+pianow; + +swing_p = slider8|0; +swing = ((tpb/2)*(swing_p/100))|0; + +prev_p==p ? ( // not changing pattern + newsz=slider3|0; + change_seqlen(newsz); + steps_per_beat=slider9|0; + steps_per_beat_pat[p]=steps_per_beat; + rateadj = steps_per_beat * rate; + p <= chain ? update_chain_beats(); +); + +midi_trigger=slider10|0; +trig_note_start=slider11|0; + +chain=slider12|0; + +elh_percent=slider13; + +cc_to_adjust=slider14|0; + +cc_type[0]=slider20|0; +cc_type[1]=slider21|0; +cc_type[2]=slider22|0; +cc_type[3]=slider23|0; + +cc_chan[0]=slider30|0; +cc_chan[1]=slider31|0; +cc_chan[2]=slider32|0; +cc_chan[3]=slider33|0; + +start_beatpos=slider40; +play_before_start=slider41|0; +end_beatpos=slider42; + +notenames_file=slider15|0; + +@serialize +// Write: +// collect properties of active notes -> runlength encode -> encode to saveable -> serialize +// +// Read: +// unserialize -> decode from saveable -> runlength decode -> expand note properties +// + +runl_flags=5*1024*1024; + +function enc_to_saveable(target, source, length) local(i, i_t, s) +( + i=0; + i_t=0; + loop(length, + s = source[i]; + s < 0 ? ( // negative source value + target[i_t] = 0x200000; // add flag to bit 21 indicating negative value + s = abs(s); // store absolute value + ) : ( + target[i_t] = 0; + ); + s > 0xFFFFF ? (//using more than 20 bits -> split + target[i_t] += (s & 0xFFFFF) + 0x100000; // copy bits (19:0) and add flag to bit 20 + i_t += 1; + s & 0x80000000 ? ( // bit 31 = 1 + target[i_t] = ((s & 0x7FFFFFFF) >> 20) + 0x800; // copy bits (31:20) + ) : ( + target[i_t] = ((s & 0x7FFFFFFF) >> 20); // copy bits (31:20) + ); + ) : ( + runl_flags[i] ? ( + target[i_t] = s + 2^23; //bit 23 flags a run length. It is safe to do because length of run is always < 2^23 and > 0. + ) : ( + target[i_t] += s; + ); + ); + i += 1; + i_t += 1; + ); + i_t; // return length of target +); + +function dec_from_saveable(target, source, length) local(i, i_t, s) +( + memset(runl_flags, 0, length); //clear run length flags + i=0; + i_t=0; + loop(length, + s = source[i]; + s_neg = s & 0x200000; // extract negative value flag + s_neg ? s -= 0x200000; //clear negative value flag + s & 0x100000 ? ( // split data flag + s &= 0xFFFFF; // extract bits (19:0) + i+=1; + s += source[i] * 2^20; // extract bits (31:20) + target[i_t] = s; + ) : ( + s & 0x800000 ? ( // run length flag + runl_flags[i_t] = 1; // copy run length flag + target[i_t] = s & 0xFFFFF; // remove flag and copy source data to target + ):( + target[i_t] = s; // copy to target + ); + ); + s_neg ? target[i_t]=-target[i_t]; // negate target data if source data was flagged negative + i += 1; + i_t += 1; + ); + i_t; // return length of target +); + + +// Run length encoder +function runl_enc(target, source, length) local(i, i_t, s, run, prev_s, rl) +( + memset(runl_flags, 0, length); //clear run length flags + i_t=0; + rl=1; + run=0; + prev_s=source[0]; + i=1; + loop(length-1, + s = source[i]; + s==prev_s ? ( + run=1; + rl+=1; + ) : ( + run ? ( //end of run + run=0; + target[i_t]=rl; //store run length + rl=1; + runl_flags[i_t]=1; // flag run length position + i_t += 1; + target[i_t]=prev_s; // store data to be repeated + ) : ( //there was no run active + target[i_t]=prev_s; // store previous source data + ); + i_t += 1; + ); + prev_s=s; + i+=1; + ); + // End of source data + run ? ( // Data ends in a run + target[i_t]=rl; //store run length + runl_flags[i_t]=1; // flag run length position + i_t += 1; + target[i_t]=prev_s; // store data to be repeated + ) : ( //no run in the end + target[i_t]=prev_s; // store previous source data + ); + i_t + 1; // return length of target +); + +// Run length decoder +function runl_dec(target, source, length) local(i, i_t) +( + i=0; + i_t=0; + while( + runl_flags[i] ? ( // Current source data is a run length + memset(target+i_t, source[i+1], source[i]); // Fill target with next source data. Fill length = run length. + i_t+=source[i]; + i+=1; + ) : ( + target[i_t]=source[i]; + i_t+=1; + ); + i+=1; + i < length; + ); + i_t; // return length of target +); + +savedata=3*1024*1024; +savedata2=4*1024*1024; + +serialread= (file_avail(0) >= 0); + +serilen=0; + +!serialread ?( + memcpy(savedata, notelist_base, listlength_all); + serilen += (listlength_all); + memcpy(savedata+serilen, notetie_base, listlength_all); + serilen += (listlength_all); + memcpy(savedata+serilen, cclist_base, listlength_all); + serilen += (listlength_all); + memcpy(savedata+serilen, notetranspose, max_numnotes); + serilen += max_numnotes; + memcpy(savedata+serilen, rowchannel, max_numnotes); + serilen += max_numnotes; + memcpy(savedata+serilen, listlength_pat, npatterns); + serilen += npatterns; + memcpy(savedata+serilen, steps_per_beat_pat, npatterns); + serilen += npatterns; + pat = 0; + pstart = notelist_base; + pstartv = velolist_base; + pstartsd = sdlist; + loop ( npatterns, + step = 0; + loop ( listlength_pat[pat], + stepnotes = pstart[step]; + stepnotes!=0 ? ( // has notes in current step + row = 0; + while ( + (stepnotes&1) ? ( // note on current row + velo_save = pstartv[row*listlength_pat[pat]+step]; + savedata[serilen] = velo_save; + serilen += 1; + (velo_save & 0x000F0000) ? ( // has subdivs + subdivnotelist_save=((pstartsd[row*max_seqlength*max_subdivs+step*max_subdivs] & 0x00FF0000) >> 16); + savedata[serilen] = subdivnotelist_save; + serilen += 1; + sdpos_save=0; + while ( + (subdivnotelist_save&1) ? ( // save only active subdiv notes + savedata[serilen] = pstartsd[row*max_seqlength*max_subdivs+step*max_subdivs+sdpos_save]; + serilen += 1; + ); + subdivnotelist_save *= 0.5; + sdpos_save += 1; + subdivnotelist_save>=1; + ); + ); + ); + stepnotes *= 0.5; + row +=1; + stepnotes>=1; + ); + ); + step += 1; + ); + pstart += listlength_pat[pat]; + pstartv += listlength_pat[pat]*max_numnotes; + pstartsd += max_numnotes*max_seqlength*max_subdivs; + pat += 1; + ); + + serilen = runl_enc(savedata2, savedata, serilen); + serilen = enc_to_saveable(savedata, savedata2, serilen); + +); + +file_var(0,listlength); +file_var(0,serilen); +file_mem(0,savedata,serilen); +serz_data_ver_running=serz_data_ver; // Save current version. +file_var(0,serz_data_ver); +file_var(0,listlength_all); +file_var(0,lastvelo); + +serialread ?( + + serz_data_ver > 0 ? ( + serilen = dec_from_saveable(savedata2, savedata, serilen); + serilen = runl_dec(savedata, savedata2, serilen); + ); + serz_data_ver < 2 ? ( + listlength_all = listlength*npatterns; + ); + serz_data_ver < 4 ? ( + chain=0; + ); + + // clear spare buffers and noteties first + memset(sparebuf, 0, npatterns*1024); + memset(sparebuf2, 0, npatterns*max_numnotes*max_seqlength); + memset(sparebuf_tie, 0, npatterns*1024); + memset(sparebuf_cc, 0, npatterns*1024); + + // clear subdivs + memset(sdlist, 0, npatterns*max_numnotes*max_seqlength*max_subdivs); + + i_srz = 0; + memcpy(notelist_base, savedata, listlength_all); + i_srz += listlength_all; + memcpy(notetie_base, savedata+i_srz, listlength_all); + i_srz += listlength_all; + serz_data_ver < 5 ? ( + memset(cclist_base, 0, listlength_all); // set all CCs to same zero + ) : ( + memcpy(cclist_base, savedata+i_srz, listlength_all); // read CCs from saved data + i_srz += listlength_all; + ); + memcpy(notetranspose, savedata+i_srz, max_numnotes); + i_srz += max_numnotes; + serz_data_ver < 3 ? ( + memset(rowchannel, 0, max_numnotes); // set all rowchannels to same zero + ) : ( + memcpy(rowchannel, savedata+i_srz, max_numnotes); + i_srz += max_numnotes; + ); + serz_data_ver < 2 ? ( + memset(listlength_pat, listlength, npatterns); // set all patterns to same length + ) : ( + memcpy(listlength_pat, savedata+i_srz, npatterns); // read pattern lengths from saved data + i_srz += npatterns; + ); + serz_data_ver < 4 ? ( + memset(steps_per_beat_pat, slider9|0, npatterns); // set all patterns to same steps_per_beat + ) : ( + memcpy(steps_per_beat_pat, savedata+i_srz, npatterns); // read steps_per_beat from saved data + i_srz += npatterns; + ); + pat = 0; + pstart = notelist_base; + pstartv = velolist_base; + pstartsd = sdlist; + loop ( npatterns, + step = 0; + memset(pstartv, 0, max_numnotes*listlength_pat[pat]); //initialize all velocities of pat to 0 + loop ( listlength_pat[pat], + stepnotes = pstart[step]; + stepnotes!=0 ? ( + row = 0; + while ( + (stepnotes&1) ? ( + velo_save = savedata[i_srz]; + i_srz += 1; + pstartv[row*listlength_pat[pat]+step] = velo_save; + serz_data_ver >= 6 ? ( // read subdivs from savedata + (velo_save & 0x000F0000) ? ( // has subdivs + subdivnotelist_save = savedata[i_srz]; + i_srz += 1; + subdivnotelist_save_orig = subdivnotelist_save; + sdpos_save=0; + while ( + (subdivnotelist_save&1) ? ( // restore active subdiv notes + pstartsd[row*max_seqlength*max_subdivs+step*max_subdivs+sdpos_save] = savedata[i_srz]; + i_srz += 1; + ); + subdivnotelist_save *= 0.5; + sdpos_save += 1; + subdivnotelist_save>=1; + ); + // set subdivnotelist + pstartsd[row*max_seqlength*max_subdivs+step*max_subdivs] &= 0xFF00FFFF; //clear old + pstartsd[row*max_seqlength*max_subdivs+step*max_subdivs] += (subdivnotelist_save_orig << 16); //set new + ); + ); + ); + stepnotes *= 0.5; + row += 1; + stepnotes>=1; + ); + ); + step += 1; + ); + pstart += listlength_pat[pat]; + pstartv += listlength_pat[pat]*max_numnotes; + pstartsd += max_numnotes*max_seqlength*max_subdivs; + pat += 1; + ); + recalc_elh = 1; // recalculate envelope lane height + lbasenote = -1; // Force graphics redraw + lnotenames_file = -1; // Force notenames reload + change_pattern(slider1|0); + update_chain_beats(); +); + +serz_data_ver = serz_data_ver_running; // Return current version back if it was changed when reading old file + +@block + +ts_num_l=ts_num; +ts_denom_l=ts_denom; + +function all_playing_notes_off() +( + npos=0; + noneed=noteonstate; + noteonstate=0; + while( + (noneed&1) ? ( + midisend(cursplpos,0x80+chan[npos],npos+basenote+trans[npos]); + ); + npos+=1; + noneed*=0.5; + noneed >= 1; + ); +); + +prev_p!=p ? ( + prev_p=p; + sliderchange(slider3=listlength); + sliderchange(slider9=steps_per_beat); +); + + +mode == 1 ? ( + trans=notetranspose; + chan=rowchannel; +):( + trans=notrans; + chan=zerochan; +); + +want_previewoff && last_preview >=0 ? ( + midisend(0,0x80+chan[last_preview],last_preview+basenote+trans[last_preview]); + last_preview=-1; +); +want_previewoff=0; + +want_previewoff_nt && last_preview_nt >=0 ? ( + midisend(0,0x80+preview_nt_chan,last_preview_nt+basenote+trans[last_preview_nt]); + last_preview_nt=-1; +); +want_previewoff_nt=0; + +want_noteoff_nt ? ( + is_midi_val(prev_nt) ? midisend(0,0x80+preview_nt_chan,prev_nt); +); +want_noteoff_nt=0; + +want_preview >=0 ? +( + is_midi_val(note_to_send = want_preview+basenote+trans[want_preview]) ? ( + midisend(0,0x90+chan[want_preview],note_to_send+previewvelo*256); + last_preview=want_preview; + ); + want_preview=-1; +); + +want_preview_nt >=0 ? +( + is_midi_val(note_to_send = want_preview_nt+basenote+trans[want_preview_nt]) ? ( + preview_nt_chan=chan[want_preview_nt]; + midisend(0,0x90+preview_nt_chan,note_to_send+lastvelo*256); + last_preview_nt=want_preview_nt; + ); + want_preview_nt=-1; +); + +chain > 0 && beatpos == listlength-1 && pat_trigger_pending == 0? ( + p < chain ? ( + pat_trigger_num=p+1; + pat_trigger_pending=1; + ) : p==chain ? ( + pat_trigger_num=0; + pat_trigger_pending=1; + ); +); + +i_buf=0; +pat_triggered=0; +cur_note_trigger=0; +while ( + midirecv(offset,msg1,msg23) ? ( + midi_trigger > 0 ? ( // trigger enabled + s = msg1&0xF0; + n=msg23&0x7F; + vel=(msg23/256)|0; + s==0x90 && vel > 0 ? ( // Note-On event + n >= trig_note_start && n < trig_note_start+npatterns ? ( // Note within pattern change trigger range + !pat_triggered ? ( // Not yet triggered pattern + pat_trigger_num=n-trig_note_start; + pat_trigger_pending=1; + pat_triggered=1; + midi_trigger > 2 ? ( // trigger resync enabled + beat_position >= -100 && beat_position <= 9999 ? ( + start_beatpos = beat_position; // set start beat position to current beat_position + midi_trigger > 4 ? ( // trigger resync qunatizing enabled + start_beatpos_float = start_beatpos; + start_beatpos = start_beatpos_float|0; + start_beatpos_float - start_beatpos > 0.5 ? start_beatpos+=1; + ); + ); + sliderchange(slider40=start_beatpos); + refresh_tb=1; + ); + ); + cur_note_trigger=1; // Always flag cur_note_trigger, even when already triggered, to keep trigger notes silent. + ) : midi_trigger==2 || midi_trigger==4 || midi_trigger==6 ? ( // Transpose enabled + n != basenote ? ( + pattrans_trigger_pending=1; + pattrans_trigger_note=n; + ); + cur_note_trigger=1; // Always flag cur_note_trigger to keep trigger notes silent. + ); + ) : (s==0x90 && vel == 0) || s==0x80 ? ( // Note-off event + n >= trig_note_start && n < trig_note_start+npatterns ? ( // Note within pattern change trigger range + cur_note_trigger=1; // Always flag cur_note_trigger, even when already triggered, to keep trigger notes silent. + ) : midi_trigger==2 || midi_trigger==4 || midi_trigger==6 ? ( // Transpose enabled + cur_note_trigger=1; // Always flag cur_note_trigger to keep trigger notes silent. + ); + ); + ); + !cur_note_trigger ? ( // This note was not triggering pattern change + buf_offset[i_buf]=offset; + buf_msg1[i_buf]=msg1; + buf_msg23[i_buf]=msg23; + i_buf+=1; + ); + cur_note_trigger=0; + loop_to_start=1; // just to keep while loop repeating + ); +); + + +beat_position >= start_beatpos ? ( + curbeatpos = beat_position - start_beatpos; +) : ( + chain > 0 && p <= chain ? ( + pat_beats=chain_beats / rate; + ) : ( + pat_beats=listlength/steps_per_beat / rate; + ); + curbeatpos = beat_position - (start_beatpos - pat_beats * ceil((start_beatpos - beat_position)/pat_beats)); +); + +cursplpos=0; +dbeatpos = (tempo * 4.0 / (60.0 * ts_denom * srate)); + +beat_position_int=beat_position; + +loop((play_state&1) ? samplesblock : 1, + + play_state_i=play_state; + (!play_before_start && beat_position_int < start_beatpos) || (end_beatpos > start_beatpos && beat_position_int >= end_beatpos) ? ( + play_state_i&=0xFFFE; // set bit 0 to 0. Prevents playback. + ); + + chain > 0 && p <= chain ? ( + chains_passed_full=floor(curbeatpos/(chain_beats / rate)); + beats_remaining=curbeatpos-((curbeatpos/(chain_beats / rate))|0)*(chain_beats / rate); + chain_preceding_beats=0; + chain_pat_beats = listlength_pat[0]/steps_per_beat_pat[0] / rate; + i_cp=0; + beats_remaining >= chain_pat_beats ? ( + while( + chain_preceding_beats+=chain_pat_beats; + i_cp+=1; + chain_pat_beats = listlength_pat[i_cp]/steps_per_beat_pat[i_cp] / rate; + chain_preceding_beats+chain_pat_beats < beats_remaining; + ); + ); + !pat_trigger_pending && i_cp != p && (play_state_i&1) ? ( + pat_trigger_num=i_cp; + pat_trigger_pending=1; + ); + curbeatpos_c=curbeatpos-chains_passed_full*(chain_beats / rate)-chain_preceding_beats; + curbeatpos_c < 0 ? ( // Position outside current pattern. Produces unpredictable behaviour. May happen if a pattern in chain contains incomplete beat(s). + curbeatpos_c=0; + debug_hits+=1; + ); + beatpos=(play_state_i&1) ? (curbeatpos_c * rateadj)%listlength : -100; + tickpos=(play_state_i&1) ? (curbeatpos_c * rateadj * tpb)%(listlength * tpb) : -100; + ) : ( + beatpos=(play_state_i&1) ? (curbeatpos * rateadj)%listlength : -100; + tickpos=(play_state_i&1) ? (curbeatpos * rateadj * tpb)%(listlength * tpb) : -100; + ); + + tickpos != ltickpos && (beatpos == lbeatpos) && (play_state_i&1) ? ( + npos=0; + noneed=noteonstate; + a = swingstate; + ltiestate_t=ltiestate; + swing > 0 ? (defnotelen+swing < tpb ? notelen_swinged=defnotelen+swing : notelen_swinged=tpb;); + while( + sdnum=getSubdivNum(npos*listlength+beatpos); + sdnum == 0 ? ( // not subdiv + start_offset = getStart(npos*listlength+beatpos); + swing == 0 ? (defnotelen+start_offset < tpb ? notelen_offseted=defnotelen+start_offset : notelen_offseted=tpb;); + (noneed&1) && ( + (swing > 0 && ((swing_beat && notelen_swinged == ticks) || (!swing_beat && defnotelen == ticks))) + ||(swing == 0 && notelen_offseted == ticks)) && !(ltiestate_t&1) ? ( + midisend(cursplpos,0x80+chan[npos],npos+basenote+trans[npos]); + noteonstate &= (0xFFFFFFFF ~ (1 << npos)); + ); + ((swing_beat && swing > 0 && swing == ticks) || (swing == 0 && getStart(npos*listlength+beatpos) == ticks)) && (a&1) ? ( + is_midi_val(note_to_send = npos+basenote+trans[npos]) ? ( + !(ltiestate_t&1) ? ( // send new note only when there is no tie from previous note + midisend(cursplpos,0x90+chan[npos],note_to_send + getVelo(npos*listlength+beatpos)*256); + ) : ( + ltiestate-=2^npos; // clear old tiestate + ); + noteonstate+=2^npos; + (swingtiestate & 2^npos) && (beatpos < listlength-1) ? ltiestate+=2^npos; // Set tie state if tie enabled and not last note of sequence + ); + ); + ) : ( // subdiv note + ticks > 0 && sd_playstate[2*npos] ? ( + swing_beat ? ( + sd_ticks=((tpb-swing) / (sd_playstate[2*npos]+1))|0; + ) : ( + sd_ticks=(tpb / (sd_playstate[2*npos]+1))|0; + ); + (!swing_beat && (ticks % sd_ticks) == 0) || (swing_beat && ticks >= swing && ((ticks-swing) % sd_ticks) == 0 ) ? ( + !swing_beat ? ( + sdpos=(ticks/sd_ticks)|0; + ) : ( + sdpos=((ticks-swing)/sd_ticks)|0; + ); + (sd_playstate[2*npos+1] >> (sdpos-1))&1 ? (// previous sd step was enabled + midisend(cursplpos,0x80+chan[npos],npos+basenote+trans[npos]); // note-off previous subdiv note + ); + (sd_playstate[2*npos+1] >> (sdpos))&1 ? (// current sd step is enabled + playvelo=getSubdivVelo(npos, beatpos, sdpos); + midisend(cursplpos,0x90+chan[npos],npos+basenote+trans[npos] + playvelo*256); // note-on subdiv note + ); + sdpos==sd_playstate[2*npos] ? sd_playstate[2*npos]=0; + ); + ); + ); + npos+=1; + noneed*=0.5; + ltiestate_t*=0.5; + (a*=0.5) >=1 || noneed >= 1; + ); + ticks+=1; + ltickpos=tickpos; + ); + beatpos != lbeatpos || !(play_state_i&1) ? ( + + pat_trigger_pending ? ( + pat_trigger_pending=0; + change_pattern(pat_trigger_num); + sliderchange(slider1=p); + sliderchange(slider3=listlength); + ); + pattrans_trigger_pending ? ( + pattrans_trigger_pending=0; + all_playing_notes_off(); + basenote=pattrans_trigger_note; + sliderchange(slider2=basenote); + refresh_tb=1; + ltiestate = 0; // clear all note ties + ); + + // Send CC + (play_state_i&1) ? ( + i_blk=0; + ccvalues = cclist[beatpos]; + loop(numccs, + val = getCc(ccvalues, i_blk); + val & 0x80 && (cc_type[i_blk] < 127)? ( // event enabled and not special type + midisend(cursplpos, 0xB0 + cc_chan[i_blk], cc_type[i_blk] | ((val&0x7F) << 8)); + ); + i_blk+=1; + ); + ); + + (play_state_i&1) ? ( + a = notelist[beatpos]; + // Step probability + rand_a_play=1; + cc_type[0] == 127 ? ( + val = getCc(cclist[beatpos], 0); + (val&0x80) && (rand(127) > val&0x7F) ? rand_a_play=0; + ); + ) : a = 0; + + a &= recmask; + !(play_state_i&1) ? ( + ltiestate = 0; // clear all note ties if transport is stopped + memset(sd_playstate, 0, max_numnotes*2); // clear all subdiv states + ); + npos=0; + swing_beat = !((beatpos-1) % 2); + noneed=noteonstate; + noteonstate=0; + tiestate=0; + swingtiestate=0; + swingstate=0; + ticks = 0; + while( + (noneed&1) && !(ltiestate&1) ? ( + midisend(cursplpos,0x80+chan[npos],npos+basenote+trans[npos]); // send note off + ); + (a&1) && (rand_a_play || chan[npos]!=cc_chan[0] || (ltiestate&1))? ( + sdnum=getSubdivNum(npos*listlength+beatpos); + //(swing_beat && swing > 0 && sdnum == 0) || (swing == 0 && getStart(npos*listlength+beatpos) > 0) ? ( + + sdnum == 0 ? ( // not subdiv + (swing_beat && swing > 0) || (swing == 0 && getStart(npos*listlength+beatpos) > 0) ? ( + swingstate+=2^npos; // flag a swung or start offseted note to be played later + (notetie[beatpos] & 2^npos) ? swingtiestate+=2^npos; + (ltiestate&1) ? tiestate+=2^npos; // keep the tiestate + ) : ( //normal non-swung note playback + + playvelo=getVelo(npos*listlength+beatpos); + is_midi_val(note_to_send = npos+basenote+trans[npos]) ? ( + !(ltiestate&1) ? ( // send new note only when there is no tie from previous note + midisend(cursplpos,0x90+chan[npos],note_to_send + playvelo*256); // send note on + ); + noteonstate+=2^npos; + (notetie[beatpos] & 2^npos) && (beatpos < listlength-1) ? tiestate+=2^npos; // Set tie state if tie enabled and not last note of sequence + ); + + ); + + ) : ( // subdiv note + + sd_playstate[2*npos]=sdnum; + sd_playstate[2*npos+1]=getSubdivNotelist(npos, beatpos); // sd note enable bits + (swing_beat && swing > 0) ? ( + swingstate+=2^npos; // flag a swung note to be played later + ) : ( + sd_playstate[2*npos+1]&1 ? (// first sd step is enabled + playvelo=getSubdivVelo(npos, beatpos, 0); + midisend(cursplpos,0x90+chan[npos],npos+basenote+trans[npos] + playvelo*256); // note-on subdiv note + ); + noteonstate+=2^npos; + ); + ); + + + + ); + npos+=1; + noneed*=0.5; + ltiestate*=0.5; + (a*=0.5) >=1 || noneed >= 1; + ); + lbeatpos=beatpos; + recmask = 0xFFFFFFFF; + ltiestate=tiestate; + ); + cursplpos += 1; + curbeatpos += dbeatpos; + beat_position_int+=dbeatpos; +); + +midi_buf_len=i_buf; +i_buf=0; +loop(midi_buf_len, + offset=buf_offset[i_buf]; + msg1=buf_msg1[i_buf]; + msg23=buf_msg23[i_buf]; + s = msg1&0xF0; + n=msg23&0x7F; + npos=n-basenote; + (play_state_i==5) ? ( // Recording + vel=(msg23/256)|0; + s==0x90 && vel > 0 ? ( // Note-On + (npos >= 0 && npos < numnotes) ? ( + mask = 2^npos; + ticks > (tpb/2) ? ( // Quantize to nearest beatpos + bp = (beatpos+1) % listlength; + chain > 0 && p <= chain && bp == 0 ? ( + chain_rec_to_next = 1; + ); + ) : ( + bp = beatpos; + ); + chain_rec_to_next ? ( // record note to next pattern in chain + rec_p = p+1 % chain; + rec_p == 0 ? ( + rec_p_notelist=notelist_base; + rec_p_velolist=velolist_base; + ) : ( + rec_p_notelist=notelist+listlength; + rec_p_velolist=velolist+listlength*max_numnotes; + ); + nlm=(rec_p_notelist[bp] & mask); + nlm==0 ? ( + rec_p_notelist[bp]+=mask; // Record new note + ); + // Overwrite velocity + rec_velpos=npos*listlength_pat[rec_p]+bp; + rec_p_velolist[rec_velpos] &= 0xFFFFFF80; //clear old velocity + rec_p_velolist[rec_velpos] += vel; //set new velocity + ) : ( + nlm=(notelist[bp] & mask); + nlm==0 ? ( + notelist[bp]+=mask; // Record new note + ); + setVelo(npos*listlength+bp, vel); // Overwrite velocity + ); + recmask -= mask; + chain_rec_to_next = 0; + ); + ); + ); + // Transpose notes (Only in in Drum map mode) + (s == 0x90 || s == 0x80) && npos >= 0 && npos < numnotes ? ( // note-on or note-off, and within visible grid + is_midi_val(note_to_send = npos+basenote+trans[npos]) ? ( + msg23 = msg23-n+note_to_send; // transpose note + msg1 = (msg1&0xF0) + chan[npos]; // remap MIDI channel + midisend(offset,msg1,msg23); + ); + ) : ( // received note is not within visible grid, or some other event received. -> send unmodified + midisend(offset,msg1,msg23); + ); + i_buf+=1; +); + + +@sample + +@gfx 400+pkw 320+tbh + +recalc_elh || lgfx_h != gfx_h? ( + recalc_elh=0; + elh=(gfx_h - tbh) * elh_percent|0; + elh < el_divh ? elh = el_divh; //keep lane divider always visible + grid_bottom=gfx_h - elh; + refresh_pianokeys=1; + refresh_cc_controls=1; +); + +function draw_button(x, y) +( + gfx_r=gfx_g=gfx_b=0.7;gfx_a=1; + gfx_x=x+2;gfx_y=y+1; + gfx_rectto(gfx_x+busp-2,y+tbrh-1); +); + +function draw_button_highlight(x, y) +( + gfx_r=c_hl_r; gfx_g=c_hl_g; gfx_b=c_hl_b; gfx_a=c_hl_a; + gfx_x=x+2;gfx_y=y+1; + gfx_rectto(gfx_x+busp-2,y+tbrh-1); +); + +function draw_pat_button(patnum, y, hl) +( + // Draw pattern button background + chain > 0 && chain >= patnum ? ( + gfx_r=0.6; gfx_g=0.9; gfx_b=0.6;gfx_a=1; + ) : ( + gfx_r=gfx_g=gfx_b=0.7;gfx_a=1; + ); + gfx_x=patnum*busp+2;gfx_y=y+1; + gfx_rectto(gfx_x+busp-2, y+tbrh-1); + + //Draw chain link + chain >patnum ? ( + gfx_r=0; gfx_g=0.7; gfx_b=0 ;gfx_a=1; + gfx_y=y+tbrh/2-3; + gfx_rectto(gfx_x+2,gfx_y+6); + ); + + // Draw pattern button number + patnum == p ? ( + number_c=1.0; + ) : (2^patnum)&has_notes ? ( + number_c=0.3; + ) : ( + number_c=0.55; + ); + gfx_r=gfx_g=gfx_b=number_c; + gfx_x=patnum*busp+5; gfx_y=(y+tbrh/2-4)|0; + patnum < 10 ? gfx_x+=4; // shift single digit number right by half digit width + gfx_drawnumber(patnum, 0); + + hl ? draw_button_highlight(patnum*busp,y); +); + +function draw_mode_button(x,y,hl) +( + draw_button(x,y); + gfx_r=gfx_g=gfx_b=0.3;gfx_a=1; + gfx_x=x+4; gfx_y=y+5; + mode == 0 ? ( + gfx_printf("PR"); + ) : ( + gfx_printf("DM"); + ); + hl ? draw_button_highlight(x,y); +); + +function draw_startmode_button(x,y,hl) +( + draw_button(x,y); + gfx_r=gfx_g=gfx_b=0.3;gfx_a=1; + gfx_x=x+4; gfx_y=y+5; + play_before_start == 0 ? ( + gfx_drawchar($' '); + gfx_x-=3; + gfx_drawchar($'|'); + gfx_x-=2; + gfx_drawchar($'>'); + ) : ( + gfx_drawchar($'>'); + gfx_x-=3; + gfx_drawchar($'|'); + gfx_x-=2; + gfx_drawchar($'>'); + ); + hl ? draw_button_highlight(x,y); +); + +function draw_position_display(x, y, hl, value) +( + // Draw edges + gfx_r=gfx_g=gfx_b=0.7;gfx_a=1; + gfx_x=x+2;gfx_y=y+1; + gfx_lineto(gfx_x+(busp*2-2-1), gfx_y, 0); + gfx_lineto(gfx_x, gfx_y+(tbrh-2-1), 0); + gfx_lineto(gfx_x-(busp*2-2-1), gfx_y, 0); + gfx_lineto(gfx_x, gfx_y-(tbrh-2-1), 0); + + // Draw value + gfx_r=gfx_g=gfx_b=0.5;gfx_a=1; + gfx_x=x+6; gfx_y=y+5; + value < 0 && abs(value) >= 100 ? ( + gfx_printf(" --- "); + ) : value < 0 && abs(value) >= 10 ? ( + gfx_drawnumber(value,1); + ) : value < 0 ? ( + gfx_drawnumber(value,2); + ) : value < 10 ? ( + gfx_drawnumber(value,3); + ) : value < 100 ? ( + gfx_drawnumber(value,2); + ) : value < 1000 ? ( + gfx_drawnumber(value,1); + ) : ( + gfx_x+=4; + gfx_drawnumber(value,0); + ); + hl ? ( + gfx_r=c_hl_r; gfx_g=c_hl_g; gfx_b=c_hl_b; gfx_a=c_hl_a; + gfx_x=x+2;gfx_y=y+1; + gfx_rectto(gfx_x+(busp*2-2),gfx_y+(tbrh-2)); + ); +); + +function draw_slider(x,y,pos) +( + // Draw edges + gfx_r=gfx_g=gfx_b=0.7;gfx_a=1; + gfx_x=x+2;gfx_y=y+1; + gfx_lineto(gfx_x+(busp*6-2-1), gfx_y, 0); + gfx_lineto(gfx_x, gfx_y+(tbrh-2-1), 0); + gfx_lineto(gfx_x-(busp*6-2-1), gfx_y, 0); + gfx_lineto(gfx_x, gfx_y-(tbrh-2-1), 0); + + // Draw horizontal control bar + gfx_r=gfx_g=gfx_b=0.7;gfx_a=0.5; + gfx_x=x+2;gfx_y=y+1; + gfx_rectto(gfx_x+(busp*6-2-1)*pos, gfx_y+(tbrh-2-1)); +); + +function draw_slider_highlight(x, y) +( + gfx_r=c_hl_r; gfx_g=c_hl_g; gfx_b=c_hl_b; gfx_a=c_hl_a; + gfx_x=x+2;gfx_y=y+1; + gfx_rectto(gfx_x+(busp*6-2), gfx_y+(tbrh-2)); +); + +function draw_notelen_slider(x, y, hl) +( + gfx_r=gfx_g=gfx_b=0.5;gfx_a=1; + gfx_x=x+8; gfx_y=y+5; + gfx_printf("Note Length"); + gfx_x=x+108; + gfx_drawnumber(notelen_p,0); + gfx_drawchar($'%'); + draw_slider(x,y,notelen_p/100); + hl ? draw_slider_highlight(x,y); +); + +function draw_swing_slider(x, y, hl) +( + gfx_r=gfx_g=gfx_b=0.5;gfx_a=1; + gfx_x=x+8; gfx_y=y+5; + gfx_printf("Swing"); + gfx_x=x+108; + gfx_drawnumber(swing_p,0); + gfx_drawchar($'%'); + draw_slider(x,y,swing_p/100); + hl ? draw_slider_highlight(x,y); +); + +function draw_velo_display(x,y,hl) +( + // Draw edges + gfx_r=gfx_g=gfx_b=0.7;gfx_a=1; + gfx_x=x+2;gfx_y=y+1; + gfx_lineto(gfx_x+(busp*2-2-1), gfx_y, 0); + gfx_lineto(gfx_x, gfx_y+(tbrh-2-1), 0); + gfx_lineto(gfx_x-(busp*2-2-1), gfx_y, 0); + gfx_lineto(gfx_x, gfx_y-(tbrh-2-1), 0); + + // Draw label: + gfx_r=gfx_g=gfx_b=0.5;gfx_a=1; + gfx_y=y+5; + gfx_x=x+6; + gfx_printf("V:"); + + // Draw value + lastvelo < 10 ? ( + gfx_x=x+22+2*8; + ) : lastvelo < 100 ? ( + gfx_x=x+22+8; + ) : ( + gfx_x=x+22; + ); + gfx_drawnumber(lastvelo,0); + hl ? ( + gfx_r=c_hl_r; gfx_g=c_hl_g; gfx_b=c_hl_b; gfx_a=c_hl_a; + gfx_x=x+2;gfx_y=y+1; + gfx_rectto(gfx_x+(busp*2-2-1),gfx_y+(tbrh-2-1)); + ); +); + +function isSharp(note) local(octavestart) +( + octavestart = note % 12; + octavestart == 1 || octavestart == 3 || octavestart == 6 || octavestart == 8 || octavestart == 10 ? ( + 1; + ) : ( + 0; + ); +); + +function getNotename(note, default_names) +( + notenames[note]==0 || default_names ? ( // empty notename -> use default note names + #name_str=nn[note % 12]; + isSharp(note) ? ( + #name_str+="#"; + ) : ( + #name_str+=" "; + ); + notename_digit=floor((note-12)/12 + octave_offset); + strcat(#name_str, sprintf(#, "%{notename_digit}d")); + ) : ( // use notename extracted from file + #name_str=notenames[note]; + ); +); + +function draw_trigstart_display(x,y,hl) +( + // Draw edges + gfx_r=gfx_g=gfx_b=0.7;gfx_a=1; + gfx_x=x+2;gfx_y=y+1; + gfx_lineto(gfx_x+(busp*4-2-1), gfx_y, 0); + gfx_lineto(gfx_x, gfx_y+(tbrh-2-1), 0); + gfx_lineto(gfx_x-(busp*4-2-1), gfx_y, 0); + gfx_lineto(gfx_x, gfx_y-(tbrh-2-1), 0); + + // Print label and value + gfx_r=gfx_g=gfx_b=0.5;gfx_a=1; + gfx_y=y+5; + gfx_x=x+6; + gfx_printf("Trig: "); + gfx_printf(getNotename(trig_note_start, 1)); + + hl ? ( + gfx_r=c_hl_r; gfx_g=c_hl_g; gfx_b=c_hl_b; gfx_a=c_hl_a; + gfx_x=x+2;gfx_y=y+1; + gfx_rectto(gfx_x+(busp*2-2-1),gfx_y+(tbrh-2-1)); + ); +); + +function draw_drum_note(note) local(notepos, nt, trans, half_rh, scaled_tr, offset, name) +( + notepos = numnotes-1-note; + nt = basenote+note+notetranspose[note]; + name=#; + name=getNotename(nt, 0); + // Erase previous text by drawing black text over + gfx_r=gfx_g=gfx_b=0; gfx_a=1; + gfx_x=chw+4.0; gfx_y=tbh+notepos*row_height+row_height/2-3; + gfx_printf(name); + gfx_x=4.0; + rowchannel[note]+1 < 10 ? gfx_x=gfx_x+3.0; + gfx_drawnumber(rowchannel[note]+1, 0); + + gfx_r=gfx_g=0; gfx_b=0.5 ;gfx_a=1; + gfx_x=2.0; gfx_y=tbh+notepos*row_height+1; + gfx_rectto(chw-3, gfx_y+row_height-2); + !isSharp(basenote+note) ? ( // draw faint white key background + gfx_r=gfx_g=gfx_b=0.12 ;gfx_a=1; + gfx_x=chw; gfx_y=tbh+notepos*row_height+1; + gfx_rectto(pkw-3, gfx_y+row_height-2); + ); + gfx_r=gfx_g=gfx_b=1.0; gfx_a=0.6; + gfx_x=4.0; gfx_y=tbh+notepos*row_height+row_height/2-3; + rowchannel[note]+1 < 10 ? gfx_x=gfx_x+3.0; + gfx_drawnumber(rowchannel[note]+1, 0); + gfx_x=chw+4.0; + + gfx_r=gfx_g=gfx_b=1; + notenames[nt]==0 ? gfx_a=0.3 : gfx_a=0.6; + gfx_printf(name); + + //Draw transpose indicator + trans = notetranspose[note]; + trans != 0 ? ( + half_rh = row_height/2|0; + gfx_r=1.0; gfx_g=0.0; gfx_b=0.0; gfx_a=0.8; + gfx_x=chw+0.0; gfx_y=tbh+(notepos*row_height+half_rh)|0; + + scaled_tr = trans/8; + offset = (half_rh-1)*scaled_tr; + offset > 0 && offset < 1 ? offset=1; + offset < 0 && offset > -1 ? offset=-1; + offset=offset|0; + offset > half_rh-1 ? offset = half_rh-1; + offset < (-half_rh)+1 ? offset = (-half_rh)+1; + gfx_rectto(gfx_x+3, gfx_y - offset); + ); +); + +function draw_tb_pianokeys(x, y) local(note, w, gap, in_range, in_trig_range, ) +( + gfx_x=x+2;gfx_y=y+1; + w_scale=-1; + while( + w_scale+=1; + gfx_w-128 > 483+w_scale*128; + ); + + note=0; + loop(128, + note >= basenote && note < basenote+numnotes ? in_range=1 : in_range=0; + note >= trig_note_start && note < trig_note_start+npatterns ? in_trig_range=1 : in_trig_range=0; + isSharp(note) ? ( + gfx_r=gfx_g=gfx_b=0.3;gfx_a=1; + in_range ? (gfx_r=gfx_g=gfx_b=0.5; gfx_r*=0.5; gfx_b*=0.5;); + in_trig_range ? (!in_range ? gfx_r=gfx_g=gfx_b=0.5; gfx_g*=0.5; gfx_b*=0.5;); + w=3; + gap=0; + ) : ( + gfx_r=gfx_g=gfx_b=1.0;gfx_a=1; + in_range ? (gfx_r*=0.5;gfx_b*=0.5;); + in_trig_range ? (gfx_g*=0.5;gfx_b*=0.5;); + w=4; + !isSharp(note+1) ? gap=1 : gap=0; + ); + gfx_rectto(gfx_x+w+w_scale,gfx_y+tbrh-2); + gfx_x+=gap; gfx_y=y+1; + note+=1; + ); + tb_pianokey_end=10*(7*4+5*3+12*w_scale+2)+5*4+3*3+8*w_scale+1; +); + +function clear_pattern(pat) local(i, notelist, velolist, notetie, cclist) +( + notelist=0; + velolist=velolist_base; + i=0; + loop(pat, + notelist+=listlength_pat[i]; + velolist+=max_numnotes*listlength_pat[i]; + i+=1; + ); + notetie=notetie_base+notelist; + cclist=cclist_base+notelist; + notelist=notelist_base+notelist; + memset(notelist, 0, listlength_pat[pat]); + memset(notetie, 0, listlength_pat[pat]); + memset(cclist, 0, listlength_pat[pat]); + memset(velolist, 0, listlength_pat[pat]*max_numnotes); + memset(sparebuf + pat*1024, 0, max_seqlength); + memset(sparebuf_tie + pat*1024, 0, max_seqlength); + memset(sparebuf_cc + pat*1024, 0, max_seqlength); + memset(sparebuf2 + pat*max_numnotes*max_seqlength, 0, max_numnotes*max_seqlength); +); + +function draw_pianokeys() local(notepos, octavestart) +( + // Erase old keys + gfx_r=gfx_g=gfx_b=gfx_x=0; gfx_y=tbh-1; gfx_a=1; + gfx_rectto(pkw,grid_bottom); + + // Draw new keys + notepos=0; + loop(numnotes, + octavestart = (basenote+(numnotes-1-notepos)) % 12; + // Draw piano keys + row_height >= 2 ? ( + mode == 0 && !(octavestart == 1 || octavestart == 3 || octavestart == 6 || octavestart == 8 || octavestart == 10) ? ( + gfx_r=gfx_g=gfx_b=1;gfx_a=1; + gfx_x=2.0; gfx_y=tbh+notepos*row_height+1; + gfx_rectto(pkw-3, gfx_y+row_height-2); + ); + ); + // Draw note names + row_height >= 4 ? ( + mode == 0 ? ( + octavestart == 0 ? ( + gfx_r=0.0; gfx_g=0.0; gfx_b=0.0; gfx_a=0.6; + gfx_x=chw+4.0; gfx_y=tbh+notepos*row_height+row_height/2-3; + gfx_drawchar($'C'); + gfx_drawnumber(((basenote+(numnotes-1-notepos)) / 12)-1+octave_offset,0); + ); + ) : ( + draw_drum_note(numnotes-1-notepos); + ); + ); + notepos+=1; + ); +); + +function getEnvColor(env) +( + env == 0 ? (use_r=0.2; use_g=0.3; use_b=1.0 ); + env == 1 ? (use_r=0.2; use_g=0.6; use_b=0.2 ); + env == 2 ? (use_r=1.0; use_g=0.5; use_b=0.0 ); + env == 3 ? (use_r=0.6; use_g=0.2; use_b=0.6 ); +); + +function setEnvColor(env) +( + env == cc_to_adjust ? ( + getEnvColor(env); + use_a=1; + ):( + use_r=0.3; use_g=0.3; use_b=0.3; use_a=0.5; + ); +); + +function setCcControlColor(env) +( + getEnvColor(env); + use_a=1; + env != cc_to_adjust ? ( + use_r*=0.3; use_g*=0.3; use_b*=0.3; + ); +); + +function draw_cc_controls() local(cc_control_top, cc_control_height, ccpos) +( + cc_control_top=grid_bottom+el_divh; + + // Erase old cc controls + gfx_r=gfx_g=gfx_b=gfx_x=0; gfx_y=cc_control_top; gfx_a=1; + gfx_rectto(pkw,gfx_h); + + cc_control_height=(elh-el_divh)/numccs; + // Draw new cc controls + cc_control_height >= 2 ? ( + ccpos=0; + loop(numccs, + setCcControlColor(ccpos); + mode == 1 ? ( + gfx_r=use_r; gfx_g=use_g; gfx_b=use_b; gfx_a=use_a; + //gfx_r=gfx_g=0; gfx_b=0.5 ;gfx_a=1; + gfx_x=2.0; gfx_y=cc_control_top+ccpos*cc_control_height+1; + gfx_rectto(chw-3, gfx_y+cc_control_height-2); + gfx_r=1.0; gfx_g=1.0; gfx_b=1.0; + ccpos == cc_to_adjust ? gfx_a=0.6 : gfx_a=0.3; + gfx_x=4.0; gfx_y=cc_control_top+ccpos*cc_control_height+cc_control_height/2-3; + cc_chan[ccpos]+1 < 10 ? gfx_x=gfx_x+3.0; + gfx_drawnumber(cc_chan[ccpos]+1, 0); + ); + gfx_r=use_r; gfx_g=use_g; gfx_b=use_b; gfx_a=use_a; + //gfx_r=gfx_g=0; gfx_b=0.5; gfx_a=1; + gfx_x=chw; gfx_y=cc_control_top+ccpos*cc_control_height+1; + gfx_rectto(pkw-3, gfx_y+cc_control_height-2); + gfx_r=1.0; gfx_g=1.0; gfx_b=1.0; + ccpos == cc_to_adjust ? gfx_a=0.6 : gfx_a=0.3; + gfx_x=chw+4.0; gfx_y=cc_control_top+ccpos*cc_control_height+cc_control_height/2-3; + elh >=32 ? ( + cc_type[ccpos] == 1 ? ( + gfx_printf("Mod"); + ) : cc_type[ccpos] == 7 ? ( + gfx_printf("Vol"); + ) : cc_type[ccpos] == 10 ? ( + gfx_printf("Pan"); + ) : cc_type[ccpos] == 11 ? ( + gfx_printf("Exp"); + ) : cc_type[ccpos] == 64 ? ( + gfx_printf("HPd"); + ) : cc_type[ccpos] == 127 && ccpos==0 ? ( + gfx_printf("Prb"); + ) : ( + cc_type[ccpos] < 10 ? gfx_x=gfx_x+3.0; + gfx_drawnumber(cc_type[ccpos], 0); + ); + ); + + ccpos+=1; + ); + ); +); + +function draw_velobar(x, y, velo, note_w, note_h) local(tip_y, barwidth) // x, y is the bottom left corner of bar +( + tip_y = 0.95*row_height*velo/128; + tip_y < 1.0 ? tip_y = 1.0; + tip_y > note_h ? tip_y = note_h; + tip_y=tip_y|0; + gfx_r=1.0; gfx_g=1.0; gfx_b=1.0; gfx_a=0.55; + velobarwidth > note_w ? barwidth = note_w : barwidth = velobarwidth; + gfx_x=x; gfx_y=y; + gfx_rectto(gfx_x + barwidth, gfx_y - tip_y); +); + +function veloadjust_row(y, x, sd_x, veloadj) local(mask, i, sd_nl, sd_i, newvelo) +( + lastnote_changed_x=x; + mask = 2^y; + i=0; + loop(listlength, + (notelist[i] & mask) ? ( + getSubdivNum(y*listlength+i) ? ( // subdiv note + sd_nl = getSubdivNotelist(y, i); + sd_nl ? ( // has enabled subdiv notes + sd_i=0; + loop(max_subdivs, + sd_nl&(2^sd_i) ? ( + newvelo = getSubdivVelo(y, i, sd_i) + veloadj; + newvelo < 1 ? newvelo=1; + newvelo > 127 ? newvelo=127; + setSubdivVelo(y, i, sd_i, newvelo); // Edit velocity + i == x && sd_i == sd_x ? (lastnote_changed_velo = newvelo; sd_editval_show=1;); + ); + sd_i+=1; + ); + ); + ) : ( // not subdiv + newvelo = getVelo(y*listlength+i) + veloadj; + newvelo < 1 ? newvelo=1; + newvelo > 127 ? newvelo=127; + setVelo(y*listlength+i, newvelo); + i == x ? lastnote_changed_velo = newvelo; + ); + ); + i+=1; + ); +); + +row_height = (grid_bottom-tbh) / numnotes; + +lgfx_w != gfx_w || lgfx_h != gfx_h || llistlength != listlength || lnumnotes != numnotes || lbasenote != basenote || lrateadj != rateadj || lmode != mode ? ( + + lgfx_w = gfx_w; lgfx_h = gfx_h; + llistlength = listlength; + lnumnotes = numnotes; + lbasenote = basenote; + lrateadj = rateadj; + lmode = mode; + gfx_r=gfx_g=gfx_b=gfx_x=0; gfx_y=tbh; gfx_a=1; + gfx_rectto(gfx_w,gfx_h); + + draw_pianokeys(); + draw_cc_controls(); + + velobarwidth = scale_velobarwidth(listlength); + + // Precalc values for bar line drawing + nbars = listlength/rateadj/4/(ts_num_l/ts_denom_l); + barlen = (gfx_w - pkw)/nbars; + + // Precalc note square width + note_w = (gfx_w - pkw)/listlength; +); + +lnotenames_file != notenames_file && mode==1 ? ( + lnotenames_file=notenames_file; + + memset(notenames, 0, 128); // clear old note names + max_notename_length=4; // reset to default + notename_str = #; + nn_filename = #; + // handle = file_open("seqbaby_data/GM Kit.txt"); + strcpy_fromslider(nn_filename, slider15); + !((handle = file_open(nn_filename)) < 0) ? ( // file_open successful + nn_name=1; // collect note names to string slots starting from slot 1, slot 0 is always empty string + notename_name = #; + while( + str_len = file_string(handle,notename_str); + match("%-3{notename_note}d\t%{notename_name}s",notename_str) ? ( + notename_note >= 0 && notename_note <= 127 ? ( + strncpy(nn_name, notename_name, strlen(notename_name)-2); + notenames[notename_note]=nn_name; + strlen(nn_name) > max_notename_length ? max_notename_length = strlen(nn_name); + nn_name+=1; + ); + ); + str_len > 0; + ); + file_close(handle); + ); + pianow=max_notename_length*8+8; + pkw=chw+pianow; + barlen = (gfx_w - pkw)/nbars; // Update barlen for bar line drawing + note_w = (gfx_w - pkw)/listlength; // Update note square width + draw_pianokeys(); + draw_cc_controls(); +); + +refresh_pianokeys ? ( + refresh_pianokeys=0; + draw_pianokeys(); +); + +y_from_top=((mouse_y-tbh) / (grid_bottom-tbh))*numnotes; +y = numnotes - 1 - (y_from_top|0); +y_acc = numnotes - y_from_top; +mouse_y < tbh ? y+=1; + +((mouse_y >= tbh && mouse_y < grid_bottom) || mstate&ms_grid || mstate&ms_pk) && !(mstate&ms_tb) && !(mstate&ms_el)? ( // Mouse below toolbar and above env lane or clicking/dragging in progress + + // Highlight current piano key + (y != lhl && mouse_x >= 0 && mouse_x < gfx_w && mouse_y >= tbh && mouse_y < grid_bottom) && (mstate == 0 || ms_sub_drawfreehand || mstate == ms_preview) ? ( + // Remove previous highlight + ypos = (numnotes-1-lhl)*row_height; + octavestart = (basenote+lhl) % 12; + mode == 0 && (octavestart == 0 || octavestart == 2 || octavestart == 4 || octavestart == 5 || octavestart == 7 || octavestart == 9 || octavestart == 11) ? ( + gfx_r=gfx_g=gfx_b=1;gfx_a=1; // white key + gfx_x=2.0; gfx_y=tbh+ypos+1; + gfx_rectto(pkw-3, gfx_y+row_height-2); + ) : ( + gfx_r=gfx_g=gfx_b=0;gfx_a=1; // black key + gfx_x=0.0; gfx_y=tbh+ypos+1; + gfx_rectto(pkw-3, gfx_y+row_height-2); + ); + mode == 0 && octavestart == 0 ? ( + gfx_r=0.0; gfx_g=0.0; gfx_b=0.0; gfx_a=0.6; + gfx_x=chw+4.0; gfx_y=tbh+ypos+row_height/2-3; + gfx_drawchar($'C'); + gfx_drawnumber(((basenote+lhl) / 12)-1+octave_offset,0); + ); + mode == 1 ? ( + draw_drum_note(lhl); + ); + + lhl = y; + + // Draw new highlight + ypos = (numnotes-1-y)*row_height; + gfx_r=c_hl_r; gfx_g=c_hl_g; gfx_b=c_hl_b; gfx_a=c_hl_a; + gfx_x=2.0; gfx_y=tbh+ypos+1; + gfx_rectto(pkw-3, gfx_y+row_height-2); + ); + + // Right click + (mouse_cap==2) ? ( + x = (((mouse_x - pkw)/(gfx_w - pkw))*listlength)|0; + y >= 0 && y < numnotes ? ( + mstate==0 || mstate==ms_preview ? ( // Click / Button down or dragging + mstate==0 ? ( + last_x=last_y=last_sd_x=-1; + ); + mstate=ms_preview; + + x >= 0 && x < listlength ? ( + sd_edit_num = getSubdivNum(y*listlength+x); + sd_edit_num ? ( // subdiv note + sd_edit_nl = getSubdivNotelist(y, x); + sd_x = ((sd_edit_num+1)*((mouse_x - pkw) - x*note_w)/note_w)|0; + sd_edit_nl&(2^sd_x) && (last_x != x || last_sd_x != sd_x || last_y != y ) ? ( + new_note_at_mousepos=1; + ) : ( + new_note_at_mousepos=0; + ); + ) : (notelist[x] & 2^y) && (last_x != x || last_y != y) ? ( // not subdiv + new_note_at_mousepos=1; + ) : ( + new_note_at_mousepos=0; + ); + ); + + x >= 0 && x < listlength && new_note_at_mousepos ? + ( + previewvelo=lastvelo; + sd_edit_num ? ( // subdiv note + previewvelo = getSubdivVelo(y, x, sd_x); + lastvelo=previewvelo; + ) : ( // not subdiv + previewvelo=getVelo(y*listlength+x); + lastvelo=previewvelo; + ); + lastpreviewsel>=0 ? want_previewoff=1; + want_preview=lastpreviewsel=y; + ) : y != lastpreviewsel ? ( + previewvelo=lastvelo; + lastpreviewsel>=0 ? want_previewoff=1; + want_preview=lastpreviewsel=y; + ); + last_x = x; + last_y = y; + last_sd_x = sd_x; + ); + + ); + + ):( + want_previewoff=1; + lastpreviewsel=-1; + ); + + (mouse_x > pkw || mstate == ms_startoffsetedit || mstate == ms_startoffseteditrow) && mstate != ms_rowtranpose ? ( + // Left click or Shift + Ctrl + Alt + Left click + (mouse_cap==1) || (mouse_cap==(1|4|8|16)) ? ( + x_acc=((mouse_x - pkw)/(gfx_w - pkw))*listlength; + x = x_acc|0; + x >= 0 && x < listlength && y >= 0 && y < numnotes ? ( + mstate==0 ? ( + ylock = y; + mask = 2^y; + sd_edit_num = getSubdivNum(ylock*listlength+x); + + sd_edit_num ? ( // subdiv note + sd_edit_nl = getSubdivNotelist(ylock, x); + sd_x = ((sd_edit_num+1)*((mouse_x - pkw) - x*note_w)/note_w)|0; + mstate=sd_edit_nl&(2^sd_x) ? ms_noteerase : ms_notedraw; + mstate==ms_notedraw ? ( // Draw note + setSubdivNotelist(ylock, x, sd_edit_nl+2^sd_x); + setSubdivVelo(ylock, x, sd_x, lastvelo); + ); + mstate==ms_noteerase ? ( // Erase note + setSubdivNotelist(ylock, x, sd_edit_nl-2^sd_x); + ); + + ) : ( // not subdiv + nlm=(notelist[x] & mask); + mstate=nlm ? ms_noteerase : ms_notedraw; + mstate==ms_noteerase ? ( // Erase note + notelist[x]-=mask; + (notetie[x] & mask) ? notetie[x]-=mask; // Erase tie + x > 0 && (notetie[x-1] & mask) ? notetie[x-1]-=mask; // Erase tie from previous + setStart(y*listlength+x, 0); //Reset start offset of the erased note to 0 + ); + mstate==ms_notedraw ? ( // Draw note + notelist[x]+=mask; + setVelo(y*listlength+x, lastvelo); + ); + ); + + (mouse_cap!=1) ? ms_sub_drawfreehand=1; + + ) : ( + lcnt = max(abs(last_x-x),abs(last_y-y))|0; + lcnt > 0 ? ( + dx = (x_acc-last_x_acc)/lcnt; + dy = (y_acc-last_y_acc)/lcnt; + //y_step = (abs(dy) > abs(dx)); + ); + lcnt >= 1 ? ( + loop(lcnt, + last_x_prev=last_x_acc|0; + last_x_acc += dx; + last_x_int=last_x_acc|0; + ms_sub_drawfreehand ? ( + last_y_acc += dy; + last_y_int = last_y_acc|0; + ) : ( + last_y_int = ylock ; + ); + + + last_x_int != last_x_prev ? ( // Fast drawing over to note on left or right -> need draw subdivs in prev note + sd_edit_num_prev = getSubdivNum(last_y_int*listlength+last_x_prev); + + sd_edit_num_prev ? ( // previous was subdiv note + last_sd_x=sd_x; + dx < 0 && last_sd_x > 0 ? ( + lcnt_sd = last_sd_x; + dx_sd = -1; + ) : dx > 0 && last_sd_x < sd_edit_num_prev ? ( + lcnt_sd = sd_edit_num_prev-last_sd_x; + dx_sd = 1; + ); + + lcnt_sd >= 1 ? ( + loop(lcnt_sd, + last_sd_x += dx_sd; + sd_edit_nl = getSubdivNotelist(last_y_int, last_x_prev); + mstate==ms_noteerase ? ( + (sd_edit_nl&(2^last_sd_x)) ? ( + setSubdivNotelist(last_y_int, last_x_prev, sd_edit_nl-2^last_sd_x); + ); + ); + mstate==ms_notedraw ? ( // Draw note + !(sd_edit_nl&(2^last_sd_x)) ? ( + setSubdivNotelist(last_y_int, last_x_prev, sd_edit_nl+2^last_sd_x); + setSubdivVelo(last_y_int, last_x_prev, last_sd_x, lastvelo); + ); + ); + ); + ); + ); + ); + + sd_edit_num = getSubdivNum(last_y_int*listlength+last_x_int); + + sd_edit_num ? ( // subdiv note + last_x_int != last_x_prev ? ( + dx < 0 ? sd_x=sd_edit_num+1 : sd_x=-1; + ); + + ) : ( // not subdiv + mask = 2^last_y_int; + nlm=(notelist[last_x_int] & mask); + mstate==ms_noteerase && nlm ? ( + notelist[last_x_int]-=mask; // Erase note + (notetie[last_x_int] & mask) ? notetie[last_x_int]-=mask; // Erase tie + last_x_int > 0 && (notetie[last_x_int-1] & mask) ? notetie[last_x_int-1]-=mask; // Erase tie from previous + setStart(last_y_int*listlength+(last_x_int), 0); //Reset start offset of the erased note to 0 + ); + mstate==ms_notedraw && !nlm ? ( // Draw note + notelist[last_x_int]+=mask; + setVelo(last_y_int*listlength+(last_x_int), lastvelo); + ); + ); + ); + ) : ( // lcnt == 0. Within same note + sd_edit_num = getSubdivNum(ylock*listlength+x); + sd_edit_num ? ( // subdiv note + sd_x = ((sd_edit_num+1)*((mouse_x - pkw) - x*note_w)/note_w)|0; + lcnt_sd = abs(last_sd_x-sd_x)|0; + lcnt_sd > 0 ? ( + dx_sd = (sd_x-last_sd_x)/lcnt_sd; + //dy = (y-last_y)/lcnt_sd; + ); + lcnt_sd >= 1 ? ( + loop(lcnt_sd, + last_sd_x += dx_sd; + //last_y += dy; + ms_sub_drawfreehand==0 ? last_y_int=ylock; + last_x_int=(last_x|0); + sd_edit_nl = getSubdivNotelist(last_y_int, last_x_int); + mstate==ms_noteerase ? ( + (sd_edit_nl&(2^last_sd_x)) ? ( + setSubdivNotelist(last_y_int, last_x_int, sd_edit_nl-2^last_sd_x); + ); + ); + mstate==ms_notedraw ? ( // Draw note + !(sd_edit_nl&(2^last_sd_x)) ? ( + setSubdivNotelist(last_y_int, last_x_int, sd_edit_nl+2^last_sd_x); + setSubdivVelo(last_y_int, last_x_int, last_sd_x, lastvelo); + ); + ); + ); + ); + ); + ); + ); + last_x = x; + last_x_acc = x_acc; + last_y = y; + last_y_acc = y_acc; + last_sd_x = sd_x; + ); + ) : ms_sub_drawfreehand=0; + + // Ctrl + Left click + (mouse_cap==(1|4)) ? ( + x = (((mouse_x - pkw)/(gfx_w - pkw))*listlength)|0; + x >= 0 && x < listlength ? ( + velo = (((grid_bottom - mouse_y)-y*row_height) / row_height)*127|0; + mstate==0 ? ( // clicking + sd_editval_show=0; + ylock = y; + mask = 2^y; + sd_edit_num = getSubdivNum(ylock*listlength+x); + sd_edit_num ? ( // subdiv note + sd_edit_nl = getSubdivNotelist(ylock, x); + sd_x = ((sd_edit_num+1)*((mouse_x - pkw) - x*note_w)/note_w)|0; + mstate=sd_edit_nl&(2^sd_x) ? ms_veloedit; + mstate==ms_veloedit ? ( + setSubdivVelo(ylock, x, sd_x, velo); // Edit velocity + lastvelo=velo; + sd_editval_show=1; + ); + ) : ( // not subdiv + nlm=(notelist[x] & mask); + mstate = nlm ? ms_veloedit; + nlm ? ( + setVelo(y*listlength+x, velo); // Edit velocity + lastvelo=velo; + ); + ); + lastnote_changed_x=x; + + ) : ( // dragging + sd_editval_show=0; + y < ylock ? velo = 1; + y > ylock ? velo = 127; + lcnt = max(abs(last_x-x),abs(last_y-y))|0; + lcnt > 0 ? ( + dx = (x-last_x)/lcnt; + dy = (y-last_y)/lcnt; + dmoy = (mouse_y - last_mo_y)/lcnt; + ); + lcnt >= 1 ? ( + loop(lcnt, + last_x_prev=last_x|0; + last_x += dx; + last_y += dy; + last_mo_y += dmoy; + last_x_int=(last_x|0); + + last_x_int != last_x_prev ? ( + sd_edit_num_prev = getSubdivNum(ylock*listlength+last_x_prev); + + sd_edit_num_prev ? ( // previous was subdiv note + last_sd_x=sd_x; + dx < 0 && last_sd_x > 0 ? ( + lcnt_sd = last_sd_x; + dx_sd = -1; + ) : dx > 0 && last_sd_x < sd_edit_num_prev ? ( + lcnt_sd = sd_edit_num_prev-last_sd_x; + dx_sd = 1; + ); + + lcnt_sd >= 1 ? ( + loop(lcnt_sd, + last_sd_x += dx_sd; + sd_edit_nl = getSubdivNotelist(ylock, last_x_prev); + (sd_edit_nl&(2^last_sd_x)) ? ( + last_y > ylock ? ( + velo = 127; + ) : last_y < ylock ? ( + velo = 1; + ) : ( + velo = (((grid_bottom - last_mo_y)-last_y*row_height) / row_height)*127|0; + ); + setSubdivVelo(ylock, last_x_prev, last_sd_x, velo); + ); + ); + ); + ); + ); + + sd_edit_num = getSubdivNum(ylock*listlength+last_x_int); + sd_edit_num ? ( // subdiv note + last_x_int != last_x_prev ? ( + dx < 0 ? sd_x=sd_edit_num+1 : sd_x=-1; + ); + + ) : ( // not subdiv + mask = 2^(ylock|0); + nlm=(notelist[last_x|0] & mask); + last_y > ylock ? ( + velo = 127; + ) : last_y < ylock ? ( + velo = 1; + ) : ( + velo = (((grid_bottom - last_mo_y)-last_y*row_height) / row_height)*127|0; + ); + nlm ? (lastnote_changed_x=last_x|0; setVelo(ylock*listlength+lastnote_changed_x, velo); lastvelo=velo;); + ); + ); + + ) : ( // lcnt == 0. Within same note + sd_edit_num = getSubdivNum(ylock*listlength+x); + sd_edit_num ? ( // subdiv note + sd_x = ((sd_edit_num+1)*((mouse_x - pkw) - x*note_w)/note_w)|0; + lcnt_sd = abs(last_sd_x-sd_x)|0; + lcnt_sd > 0 ? ( + dx_sd = (sd_x-last_sd_x)/lcnt_sd; + dmoy = (mouse_y - last_mo_y)/lcnt_sd; + ); + lcnt_sd >= 1 ? ( + loop(lcnt_sd, + last_sd_x += dx_sd; + last_mo_y += dmoy; + last_x_int=(last_x|0); + sd_edit_nl = getSubdivNotelist(ylock, last_x_int); + (sd_edit_nl&(2^last_sd_x)) ? ( + last_y > ylock ? ( + velo = 127; + ) : last_y < ylock ? ( + velo = 1; + ) : ( + velo = (((grid_bottom - last_mo_y)-last_y*row_height) / row_height)*127|0; + ); + setSubdivVelo(ylock, last_x_int, last_sd_x, velo); + lastnote_changed_x=last_x_int; + lastvelo=velo; + sd_editval_show=1; + ); + + ); + ) : ( // lcnt_sd == 0. Adjusting single subdiv note velocity + sd_edit_nl = getSubdivNotelist(ylock, last_x); + (sd_edit_nl&(2^sd_x)) ? ( + last_y > ylock ? ( + velo = 127; + ) : last_y < ylock ? ( + velo = 1; + ); + setSubdivVelo(ylock, last_x, sd_x, velo); + lastnote_changed_x=last_x; + lastvelo=velo; + sd_editval_show=1; + ); + ); + ) : ( // not subdiv + last_y > ylock ? ( + velo = 127; + ) : last_y < ylock ? ( + velo = 1; + ); + nlm ? (lastnote_changed_x=x; setVelo(ylock*listlength+lastnote_changed_x, velo); lastvelo=velo;); + ); + ); + ); + last_x = x; + last_y = y; + last_sd_x = sd_x; + last_mo_y = mouse_y; + ); + ); + + // Ctrl + Alt + Left click + (mouse_cap==(1|4|16)) ? ( + x = (((mouse_x - pkw)/(gfx_w - pkw))*listlength)|0; + x >= 0 && x < listlength ? ( + velo = (((grid_bottom - mouse_y)-y*row_height) / row_height)*127|0; + mstate==0 ? ( // clicking + ylock = y; + mask = 2^y; + sd_edit_num = getSubdivNum(ylock*listlength+x); + sd_edit_num ? ( // subdiv note + sd_edit_nl = getSubdivNotelist(ylock, x); + sd_x = ((sd_edit_num+1)*((mouse_x - pkw) - x*note_w)/note_w)|0; + sd_edit_nl&(2^sd_x) ? ( + mstate=ms_veloeditrow; + veloadj = velo - getSubdivVelo(y, x, sd_x); + ); + ) : ( // not subdiv + nlm=(notelist[x] & mask); + nlm ? ( + mstate = ms_veloeditrow; + veloadj = velo - getVelo(y*listlength+x); + ); + ); + ms_veloeditrow ? ( + veloadjust_row(y, x, sd_x, veloadj); + lastvelo=velo; + ); + + ) : ( // dragging + y < ylock ? velo = 1; + y > ylock ? velo = 127; + veloadj_ena = 0; + sd_edit_num = getSubdivNum(ylock*listlength+x); + sd_edit_num ? ( // subdiv note + sd_edit_nl = getSubdivNotelist(ylock, x); + sd_x = ((sd_edit_num+1)*((mouse_x - pkw) - x*note_w)/note_w)|0; + sd_edit_nl&(2^sd_x) ? ( + veloadj = velo - getSubdivVelo(ylock, x, sd_x); + veloadj_ena = 1; + ); + ) : ( // not subdiv + nlm=(notelist[x] & 2^ylock); + nlm ? ( + veloadj = velo - getVelo(ylock*listlength+x); + veloadj_ena = 1; + ); + ); + veloadj_ena ? ( + veloadjust_row(ylock, x, sd_x, veloadj); + lastvelo=velo; + ); + ); + ); + ); + + // Shift + Left click + mouse_cap==(1|8) ? ( + x = (((mouse_x - pkw)/(gfx_w - pkw))*listlength)|0; + mstate==0 ? ( + x >= 0 && x < listlength ? ( + sd_edit_num = getSubdivNum(y*listlength+x); + !sd_edit_num ? ( // not subdiv note + ylock = y; + xlock = x; + mask = 2^y; + nlm=(notelist[x] & mask); + mstate = nlm ? ms_startoffsetedit; + morig = mouse_x; + start_adj_orig = getStart(ylock*listlength+x); + lastnote_changed_x=x; + ); + ); + ) : ( + draglen=((mouse_x - morig))|0; + ldraglen != draglen ? ( + ldraglen = draglen; + nlm ? ( + new_start = start_adj_orig+draglen; + new_start < 0 ? new_start = 0; + new_start > tpb ? new_start = tpb; + setStart(ylock*listlength+xlock, new_start); + ); + ); + ); + ); + + // Shift + Alt + Left click + mouse_cap==(1|8|16) ? ( + x = (((mouse_x - pkw)/(gfx_w - pkw))*listlength)|0; + mstate==0 ? ( + x >= 0 && x < listlength ? ( + sd_edit_num = getSubdivNum(y*listlength+x); + !sd_edit_num ? ( // not subdiv note + ylock = y; + xlock = x; + mask = 2^y; + nlm=(notelist[x] & mask); + mstate = nlm ? ms_startoffseteditrow; + morig = mouse_x; + i=0; + loop(listlength, + start_adj_orig_list[i] = getStart(ylock*listlength+i); + i == x ? start_adj_all_value = start_adj_orig_list[i]; + i+=1; + ); + lastnote_changed_x=x; + ); + ); + ) : ( + draglen=((mouse_x - morig))|0; + ldraglen != draglen ? ( + ldraglen = draglen; + mask = 2^ylock; + nlm ? ( + i=0; + loop(listlength, + (notelist[i] & mask) && !getSubdivNum(ylock*listlength+i) ? ( + new_start = start_adj_orig_list[i]+draglen; + new_start < 0 ? new_start = 0; + new_start > tpb ? new_start = tpb; + setStart(ylock*listlength+i, new_start); + i == xlock ? start_adj_all_value = new_start; + ); + i+=1; + ); + ); + ); + ); + ); + + // Alt + Left click + (mouse_cap==1|16) ? ( + x = (((mouse_x - pkw)/(gfx_w - pkw))*listlength)|0; + x >= 0 && x < listlength && y >= 0 && y < numnotes ? ( + mstate==0 ? ( // Click mouse button down + sd_edit_num = getSubdivNum(y*listlength+x); + !sd_edit_num ? ( // not subdiv note + tie_erase=0; + ylock = y; + mask = 2^y; + nlm=(notelist[x] & mask); // nlm != 0 if note exists in clicked location + mstate = nlm ? ms_notetie; + nlm ? ( + (notetie[x] & mask) ? ( + notetie[x]-=mask; // Erase note tie + tie_erase=1; + ) : ( + x < listlength-1 && !getSubdivNum(y*listlength+x+1) ? ( // Don't add tie to the last note of sequence or before subdiv + notetie[x]+=mask; // Add note tie + !(notelist[x+1] & mask) ? ( // No note in next square + notelist[x+1]+=mask; // Add note to next square + setVelo(y*listlength+x+1, getVelo(y*listlength+x)); // using same velocity + ); + ); + ); + ); + ); + ) : ( // Keeping mouse button down / dragging + lcnt = abs(last_x-x)|0; + lcnt > 0 ? ( + dx = (x-last_x)/lcnt; + ); + lcnt >= 1 ? loop(lcnt, + last_x += dx; + mask = 2^(ylock|0); + last_x_int=(last_x|0); + nlm=(notelist[last_x_int] & mask); + nlm && !getSubdivNum(ylock*listlength+last_x_int) ? ( //Drag started on top of note and is currently on top of note and not on top of subdiv + !(notetie[last_x_int] & mask) ? ( // No note tie in current note + !tie_erase ? ( // Drag was started by adding tie, so we continue adding ties + last_x_int < listlength-1 && !getSubdivNum(ylock*listlength+last_x_int+1) ? ( // Don't add tie to the last note of sequence or before subdiv + notetie[last_x_int]+=mask; // Add note tie + !(notelist[last_x_int+1] & mask) ? ( // No note in next square + notelist[last_x_int+1]+=mask; // Add note to next square + setVelo(ylock*listlength+last_x_int+1, getVelo(ylock*listlength+last_x_int)); // using same velocity + ); + ); + ); + ) : ( // Note tie already exists in current note + tie_erase ? ( // Drag was started by erasing tie, so we continue erasing ties + notetie[last_x_int]-=mask; // Erase note tie + ); + ); + ); + ); + ); + last_x = x; + ); + ); // Mouse button released + + // Shift + Right click + mouse_cap==(2|8) ? ( + x = (((mouse_x - pkw)/(gfx_w - pkw))*listlength)|0; + mstate==0 ? ( + x >= 0 && x < listlength ? ( + ylock = y; + xlock = x; + mask = 2^y; + nlm=(notelist[x] & mask); + nlm_orig=nlm; + mstate = ms_subdivnum; + morig = mouse_y; + sd_orig = getSubdivNum(ylock*listlength+x); + draglen=ldraglen=0; + note_enabled_for_sd=0; + sd_set_to_disabled=0; + ); + ) : ( + draglen=((morig - mouse_y)/10)|0; + ldraglen != draglen ? ( + ldraglen = draglen; + mask=2^ylock; + sd_new = sd_orig+draglen; + sd_new < 0 ? sd_new = 0; + sd_new > 7 ? sd_new = 7; + !nlm && sd_new > 0 ? (notelist[xlock]+=mask; nlm=(notelist[xlock] & mask); note_enabled_for_sd=1; ); + setSubdivNum(ylock*listlength+xlock, sd_new); + nlm_orig && (sd_orig == 0 || sd_set_to_disabled) && sd_new > 0 ? ( + setSubdivVelo(ylock, xlock, 0, getVelo(ylock*listlength+xlock)); + setSubdivNotelist(ylock, xlock, 1); + sd_set_to_disabled=0; + (notetie[xlock] & mask) ? notetie[xlock]-=mask; // Erase tie from current + xlock > 0 && (notetie[xlock-1] & mask) ? notetie[xlock-1]-=mask; // Erase tie from previous + ); + sd_new == 0 ? ( + getSubdivNotelist(ylock, xlock)&1 ? ( + setVelo(ylock*listlength+xlock, getSubdivVelo(ylock, xlock, 0)); + setSubdivNotelist(ylock, xlock, 0); + sd_set_to_disabled=1; + ) : ( + (sd_orig || note_enabled_for_sd) && !sd_set_to_disabled ? ( + nlm ? (notelist[xlock]-=mask; nlm=0;); + ); + ); + ); + ); + ); + ); + + ) : !(mstate&ms_grid) ? ( // Mouse within piano roll keys + + // Left click + (mouse_cap==(1) && mode == 1) ? ( + mstate==0 ? ( // Click / Button down + mstate=ms_rowtranpose; + mouse_x < chw ? ms_sub_channelchange=1; + nt_note=y; + mstart = mouse_y; + nt_trans_start = notetranspose[nt_note]; + nt_channel_start = rowchannel[nt_note]; + ) : ( // Drag + draglen=((mstart - mouse_y)/10)|0; + + ldraglen != draglen ? ( + ldraglen = draglen; + prev_nt = basenote+nt_note+notetranspose[nt_note]; + want_noteoff_nt=1; + ms_sub_channelchange ? ( // Change row MIDI channel + new_chan = nt_channel_start + draglen; + new_chan < 0 ? new_chan = 16 - (new_chan % 16) : new_chan = new_chan % 16; + rowchannel[nt_note]= new_chan; + ) : ( // Change row transpose + is_midi_val(basenote+nt_note+nt_trans_start+draglen) ? ( + notetranspose[nt_note]=nt_trans_start + draglen; + ); + ); + want_preview_nt = nt_note; + + // Clear old note name + ypos = tbh+(numnotes-1-nt_note)*row_height; + gfx_r=gfx_g=gfx_b=0;gfx_a=1; + gfx_x=0.0; gfx_y=ypos; + gfx_rectto(pkw+8, ypos+row_height); // +8 because negative octave numbers will overlap with note squares + // Update note name + draw_drum_note(nt_note); + // Draw new highlight + draglen == 0 ? ( + gfx_r=c_hl_r; gfx_g=c_hl_g; gfx_b=c_hl_b; gfx_a=c_hl_a; + ) : ( + gfx_r=1.0; gfx_g=0.0; gfx_b=0.0; gfx_a=0.4; + ); + gfx_x=2.0; gfx_y=ypos+1; + gfx_rectto(pkw-3, ypos+row_height-1); + ); + + ); + ) : ( + want_previewoff_nt=1; + ms_sub_channelchange=0; + ); + + // Shift + Left click on piano roll keys + (mouse_cap==(1|8)) ? ( + mstate==0 ? ( // Click / Button down + mstate=ms_duplseq; + listlength*2 <= max_seqlength ? ( + change_seqlen(listlength*2); + sliderchange(slider3=listlength); + memcpy(notelist+listlength/2, notelist, listlength/2); // Duplicate notes + memcpy(notetie+listlength/2, notetie, listlength/2); // Duplicate notetie + // Duplicate other note properties (velocity, start offset, subdivided notes) + y=0; + loop(max_numnotes, + memcpy(velolist+y*listlength+listlength/2, velolist+y*listlength, listlength/2); + memcpy(sdlist+sdlist_p+y*max_seqlength*max_subdivs+(listlength/2)*max_subdivs, sdlist+sdlist_p+y*max_seqlength*max_subdivs, (listlength/2)*max_subdivs); + y+=1; + ); + memcpy(cclist+listlength/2, cclist, listlength/2); // Duplicate envelopes + ); + ); + ); + + // Ctrl + Alt + Right click on piano roll keys + (mouse_cap==(2|4|16)) ? ( + mstate==0 ? ( // Click / Button down + mstate=ms_doublespbpreservepos; + listlength*2 <= max_seqlength && steps_per_beat*2 <= max_steps_per_beat ? ( + change_seqlen(listlength*2); + sliderchange(slider3=listlength); + steps_per_beat=steps_per_beat*2; + sliderchange(slider9=steps_per_beat); + steps_per_beat_pat[p]=steps_per_beat; + rateadj = steps_per_beat * rate; + p <= chain ? update_chain_beats(); + x=listlength/2-1; + loop(listlength/2-1, + notelist[2*x]=notelist[x]; notelist[x]=0; // Move notes + notelist[2*x+1]=0; + notetie[2*x]=notetie[x]; notetie[x]=0; // Move noteties + notetie[2*x+1]=0; + // Move other note properties (velocity, start offset, subdivided notes) + y=0; + loop(max_numnotes, + velolist[y*listlength+2*x]=velolist[y*listlength+x]; velolist[y*listlength+x]=0; + velolist[y*listlength+2*x+1]=0; + memcpy(sdlist+sdlist_p+y*max_seqlength*max_subdivs+2*x*max_subdivs, sdlist+sdlist_p+y*max_seqlength*max_subdivs+x*max_subdivs, max_subdivs); + memset(sdlist+sdlist_p+y*max_seqlength*max_subdivs+x*max_subdivs, 0, max_subdivs); + memset(sdlist+sdlist_p+y*max_seqlength*max_subdivs+2*x*max_subdivs+1, 0, max_subdivs); + y+=1; + ); + cclist[2*x]=cclist[x]; cclist[x]=0; // Move envelopes + cclist[2*x+1]=0; + x-=1; + ); + ); + ); + ); + + // Ctrl + Alt + Left click on piano roll keys + (mouse_cap==(1|4|16)) ? ( + mstate==0 ? ( // Click / Button down + mstate=ms_halvespbpreservepos; + half_listlength=(listlength/2)|0; + half_steps_per_beat=(steps_per_beat/2)|0; + half_listlength >= 4 && half_steps_per_beat >= 1 ? ( + x=1; + loop(half_listlength-1, + notelist[x]=notelist[2*x]; // Move notes + notetie[x]=notetie[2*x]; // Move noteties + // Move other note properties (velocity, start offset, subdivided notes) + y=0; + loop(max_numnotes, + velolist[y*listlength+x]=velolist[y*listlength+2*x]; + memcpy(sdlist+sdlist_p+y*max_seqlength*max_subdivs+x*max_subdivs, sdlist+sdlist_p+y*max_seqlength*max_subdivs+2*x*max_subdivs, max_subdivs); + y+=1; + ); + cclist[x]=cclist[2*x]; // Move envelopes + x+=1; + ); + // Clear the second half that will be outside sequence length + memset(notelist+half_listlength, 0, listlength-half_listlength); + memset(notetie+half_listlength, 0, listlength-half_listlength); + y=0; + loop(max_numnotes, + memset(velolist+y*listlength+half_listlength, 0, listlength-half_listlength); + memset(sdlist+sdlist_p+y*max_seqlength*max_subdivs+half_listlength*max_subdivs, 0, (listlength-half_listlength)*max_subdivs); + y+=1; + ); + memset(cclist+half_listlength, 0, listlength-half_listlength); + change_seqlen(half_listlength); + sliderchange(slider3=listlength); + steps_per_beat=half_steps_per_beat; + sliderchange(slider9=steps_per_beat); + steps_per_beat_pat[p]=steps_per_beat; + rateadj = steps_per_beat * rate; + p <= chain ? update_chain_beats(); + ); + ); + ); + + // Ctrl + Left click on piano roll keys + (mouse_cap==(1|4)) ? ( + mstate==0 ? ( // Click / Button down + mstate=ms_halvespb; + half_steps_per_beat=(steps_per_beat/2)|0; + half_steps_per_beat >= 1 ? ( + steps_per_beat=half_steps_per_beat; + sliderchange(slider9=steps_per_beat); + steps_per_beat_pat[p]=steps_per_beat; + rateadj = steps_per_beat * rate; + p <= chain ? update_chain_beats(); + ); + ); + ); + + // Ctrl + Right click on piano roll keys + (mouse_cap==(2|4)) ? ( + mstate==0 ? ( // Click / Button down + mstate=ms_doublespb; + steps_per_beat*2 <= max_steps_per_beat ? ( + steps_per_beat=steps_per_beat*2; + sliderchange(slider9=steps_per_beat); + steps_per_beat_pat[p]=steps_per_beat; + rateadj = steps_per_beat * rate; + p <= chain ? update_chain_beats(); + ); + ); + ); + + // Shift + Left click on piano roll keys + (mouse_cap==(1|8)) ? ( + mstate==0 ? ( // Click / Button down + mstate=ms_duplseq; + listlength*2 <= max_seqlength ? ( + change_seqlen(listlength*2); + sliderchange(slider3=listlength); + memcpy(notelist+listlength/2, notelist, listlength/2); // Duplicate notes + memcpy(notetie+listlength/2, notetie, listlength/2); // Duplicate notetie + // Duplicate other note properties (velocity, start offset, subdivided notes) + y=0; + loop(max_numnotes, + memcpy(velolist+y*listlength+listlength/2, velolist+y*listlength, listlength/2); + memcpy(sdlist+sdlist_p+y*max_seqlength*max_subdivs+(listlength/2)*max_subdivs, sdlist+sdlist_p+y*max_seqlength*max_subdivs, (listlength/2)*max_subdivs); + y+=1; + ); + memcpy(cclist+listlength/2, cclist, listlength/2); // Duplicate envelopes + ); + ); + ); + ); + +) : (mouse_y > tbrh && mouse_y < 2*tbrh && mouse_x > 0 && mstate==0) || (mstate&ms_tb_r2) ? ( // Mouse on pattern buttons + + button = (mouse_x / busp)|0; + + buttton >= 0 && button <= 15 ? ( + hl_state=hl_pattern+button; + ) : ( + hl_state=0; + ); + + // Left click + (mouse_cap==1) ? ( + mstate==0 ? ( // Click / Button down + mstate=ms_tb_patchange; + button < npatterns ? ( + change_pattern(button); // Change active pattern + sliderchange(slider1=p); + sliderchange(slider3=listlength); + ); + ); + ); + + // Ctrl + Left click + (mouse_cap==1|4) ? ( + mstate==0 ? ( // Click / Button down + mstate=ms_tb_patcopy; + button < npatterns && button != p ? ( + source_p = p; + source_length = listlength; + s_sdlist = sdlist_p; + steps_per_beat_pat[button]=steps_per_beat_pat[source_p]; // set steps_per_beat of the target pattern + change_pattern(button); // Change active pattern to clicked + listlength != source_length ?( + change_seqlen(source_length); + ); + p <= chain ? update_chain_beats(); + s_notelist=0; + s_velolist=velolist_base; + i=0; + loop(source_p, + s_notelist+=listlength_pat[i]; + s_velolist+=max_numnotes*listlength_pat[i]; + i+=1; + ); + s_notetie=notetie_base+s_notelist; + s_cclist=cclist_base+s_notelist; + s_notelist=notelist_base+s_notelist; + // Copy content from source pattern to the target pattern + memcpy(notelist, s_notelist, listlength); + memcpy(notetie, s_notetie, listlength); + memcpy(cclist, s_cclist, listlength); + memcpy(velolist, s_velolist, listlength*max_numnotes); + memcpy(sdlist+sdlist_p, sdlist+s_sdlist, max_seqlength*max_numnotes*max_subdivs); + memcpy(sparebuf + p*1024, sparebuf + source_p*1024, max_seqlength); + memcpy(sparebuf_tie + p*1024, sparebuf_tie + source_p*1024, max_seqlength); + memcpy(sparebuf2 + p*max_numnotes*max_seqlength, sparebuf2 + source_p*max_numnotes*max_seqlength, max_numnotes*max_seqlength); + sliderchange(slider1=p); + sliderchange(slider3=listlength); + sliderchange(slider9=steps_per_beat); + + ); + ); + ); + + // Alt + Left click + (mouse_cap==1|16) ? ( + mstate==0 ? ( // Click / Button down + mstate=ms_tb_chain; + button < npatterns ? ( + chain=button; + sliderchange(slider12=chain); + refresh_tb=1; + update_chain_beats(); + ); + ); + ); + + // Ctrl + Right click + (mouse_cap==2|4) ? ( + mstate==0 ? ( // Click / Button down + mstate=ms_tb_patclear; + button < npatterns ? ( + clear_pattern(button); + update_has_notes(); + refresh_tb=1; + ); + ); + ); +) : (mouse_y > 2*tbrh && mouse_y < 3*tbrh && mouse_x > 0 && mstate==0) || (mstate&ms_tb_r3) ? ( // Mouse on third toolbar row + + button = (mouse_x / busp)|0; + + button == 0 ? ( + // Left click Mode button + (mouse_cap==1) ? ( + mstate==0 ? ( // Click / Button down + mstate=ms_tb_button_noundo; + mode = !mode; // toggle Mode state + mode == 0 ? ( + chw=0; + pianow=3*8+8; + ) : ( + chw = 2*8+8; + pianow=max_notename_length*8+8; + ); + pkw=chw+pianow; + sliderchange(slider7=mode); + refresh_tb=1; + ); + ); + mstate==0 ? hl_state=hl_mode; + ) : button == 1 ? ( + // Left click play_before_start button + (mouse_cap==1) ? ( + mstate==0 ? ( // Click / Button down + mstate=ms_tb_button_noundo; + play_before_start = !play_before_start; // toggle play_before_start state + sliderchange(slider41=play_before_start); + refresh_tb=1; + ); + ); + mstate==0 ? hl_state=hl_playbeforestart; + ) : button == 2 || button == 3 ? ( + // Left click Start beat position display + (mouse_cap==1) || (mouse_cap==2) ? ( + mstate==0 ? ( // Click / Button down + ((mouse_cap==1) && beat_position != start_beatpos)||((mouse_cap==2) && start_beatpos != 0) ? ( + mstate=ms_tb_button; + (mouse_cap==1) ? ( + beat_position >= -99 && beat_position <= 9999 ? ( + start_beatpos = beat_position; // set start beat position to current beat_position + ); + ) : start_beatpos = 0; // reset to default + sliderchange(slider40=start_beatpos); + refresh_tb=1; + ) : ( + mstate=ms_tb_button_noundo; + ); + ); + ); + mstate==0 ? hl_state=hl_startpos; + ) : button == 4 || button == 5 ? ( + // Left click Start beat position display + (mouse_cap==1) || (mouse_cap==2) ? ( + mstate==0 ? ( // Click / Button down + ((mouse_cap==1) && beat_position != end_beatpos)||((mouse_cap==2) && end_beatpos != -99) ? ( + mstate=ms_tb_button; + (mouse_cap==1) ? ( + beat_position >= -99 && beat_position <= 9999 ? ( + beat_position <= start_beatpos ? ( + end_beatpos = -99; // -99 means "end position disabled" or play infinitely + ) : ( + end_beatpos = beat_position; // set start beat position to current beat_position + ); + ); + ) : end_beatpos = -99; // reset to default + sliderchange(slider42=end_beatpos); + refresh_tb=1; + ) : ( + mstate=ms_tb_button_noundo; + ); + ); + ); + mstate==0 ? hl_state=hl_endpos; + ); + + (button >= 6 && button <= 11 && mstate==0) || mstate==ms_tb_notelen ? ( + // Left click Note length slider + (mouse_cap==1) ? ( + zeropos=busp*6+1; + x=(100*((mouse_x-zeropos)/(busp*12-2-zeropos)))|0; + mstate==0 ? ( // Click / Button down + mstate=ms_tb_notelen; + notelen_p=x; + defnotelen = (tpb*(notelen_p/100))|0; + sliderchange(slider6=notelen_p); + refresh_tb=1; + ) : ( + x < 0 ? x=0; + x > 100 ? x=100; + notelen_p=x; + defnotelen = (tpb*(notelen_p/100))|0; + sliderchange(slider6=notelen_p); + refresh_tb=1; + ); + ); + mstate==0 ? hl_state=hl_notelen; + ); + + (button >= 12 && button <= 17 && mstate==0) || mstate==ms_tb_swing ? ( + // Left click Swing slider + (mouse_cap==1) ? ( + zeropos=busp*12+1; + x=(100*((mouse_x-zeropos)/(busp*18-2-zeropos)))|0; + mstate==0 ? ( // Click / Button down + mstate=ms_tb_swing; + swing_p=x; + swing = ((tpb/2)*(swing_p/100))|0; + sliderchange(slider8=swing_p); + refresh_tb=1; + ) : ( + x < 0 ? x=0; + x > 100 ? x=100; + swing_p=x; + swing = ((tpb/2)*(swing_p/100))|0; + sliderchange(slider8=swing_p); + refresh_tb=1; + ); + ); + mstate==0 ? hl_state=hl_swing; + ); + +) : (mouse_y > 0 && mouse_y < tbrh && mouse_x > 0 && mstate==0) || (mstate&ms_tb_r1) ? ( // Mouse on first toolbar row + x=(128*(mouse_x / tb_pianokey_end))|0; + (x >= basenote && x <= basenote+numnotes && mstate==0) || mstate==ms_tb_pianokey_base || mstate==ms_tb_pianokey_numnotes? ( + (mouse_cap==1) ? ( // Left click toolbar pianokeys on grid note range + mstate==0 ? ( // Click / Button down + mstate=ms_tb_pianokey_base; + last_x=x; + ) : ( + x != last_x ? ( + new_note=basenote+(x - last_x); + new_note >= 0 && new_note <= 127 ? last_x=x; + new_note < 0 ? new_note=0; + new_note > 127 ? new_note=127; + basenote=new_note; + sliderchange(slider2=basenote); + refresh_tb=1; + ); + ); + ); + (mouse_cap==2) ? ( // Right click toolbar pianokeys on grid note range + mstate==0 ? ( // Click / Button down + mstate=ms_tb_pianokey_numnotes; + last_x=x; + ) : ( + x != last_x ? ( + new_note=numnotes+(x - last_x); + new_note >= 1 && new_note <= 32 ? last_x=x; + new_note < 1 ? new_note=1; + new_note > 32 ? new_note=32; + numnotes=new_note; + sliderchange(slider4=numnotes); + refresh_tb=1; + ); + ); + ); + ) : (x >= trig_note_start && x <= trig_note_start+numnotes && mstate==0) || mstate==ms_tb_pianokey_trig ? ( + // Left click toolbar pianokeys on trigger note range + (mouse_cap==1) ? ( + mstate==0 ? ( // Click / Button down + mstate=ms_tb_pianokey_trig; + last_x=x; + ) : ( + x != last_x ? ( + new_note=trig_note_start+(x - last_x); + new_note >= 0 && new_note <= 127 ? last_x=x; + new_note < 0 ? new_note=0; + new_note > 127 ? new_note=127; + trig_note_start=new_note; + sliderchange(slider11=trig_note_start); + refresh_tb=1; + ); + ); + ); + ); +) : (mouse_y > grid_bottom && mouse_y < gfx_h && mouse_x > 0 && mstate==0) || (mstate&ms_el) ? ( // Mouse on envelope lane + + ((mouse_y < grid_bottom+el_divh && mstate==0) || mstate==ms_el_divider) ? ( + // Left click + (mouse_cap==1) ? ( + mstate==0 ? ( // Click / Button down + mstate=ms_el_divider; + morig = mouse_y; + dmouse_y = morig-grid_bottom; + + ) : ( + mouse_y != morig ? ( + (mouse_y-dmouse_y > tbh) ? ( + (mouse_y+(el_divh-dmouse_y) <= gfx_h) ? ( + elh_percent = (gfx_h-tbh-(mouse_y-tbh-dmouse_y))/(gfx_h-tbh); + ) : ( + elh_percent = 0; // hit to bottom + ); + ) : ( + elh_percent = 1; // hit to top + ); + sliderchange(slider13=elh_percent); + recalc_elh=1; + ); + ); + ); + ); + + ((mouse_x > pkw && mouse_y >= grid_bottom+el_divh && mstate==0) || mstate==ms_el_envdraw || mstate==ms_el_enverase) ? ( + // Left click + (mouse_cap==1) ? ( + x = (((mouse_x - pkw)/(gfx_w - pkw))*listlength)|0; + x >= 0 && x < listlength ? ( + envval = ((gfx_h - mouse_y) / env_max_h)*127|0; + mstate==0 ? ( // Click / Button down + mstate=ms_el_envdraw; + cclist[x]=setCc(cclist[x], cc_to_adjust, envval | 0x80); + lastenv_changed_x=x; + ) : ( + lcnt = abs(last_x-x)|0; + lcnt > 0 ? ( + dx = (x-last_x)/lcnt; + dmoy = (mouse_y - last_mo_y)/lcnt; + ); + lcnt >= 1 ? loop(lcnt, + last_x += dx; + last_mo_y += dmoy; + envval = ((gfx_h - last_mo_y) / env_max_h)*127|0; + envval > 127 ? envval=127; + envval < 0 ? envval=0; + cclist[last_x|0]=setCc(cclist[last_x|0], cc_to_adjust, envval | 0x80); + lastenv_changed_x=last_x|0; + ) : ( + envval > 127 ? envval=127; + envval < 0 ? envval=0; + cclist[x]=setCc(cclist[x], cc_to_adjust, envval | 0x80); + lastenv_changed_x=x; + ); + ); + last_x = x; + last_mo_y = mouse_y; + ); + ); + + // Right click + (mouse_cap==2) ? ( + x = (((mouse_x - pkw)/(gfx_w - pkw))*listlength)|0; + x >= 0 && x < listlength ? ( + mstate==0 ? ( // Click / Button down + mstate=ms_el_enverase; + cclist[x]=setCc(cclist[x], cc_to_adjust, 0); + ) : ( + lcnt = abs(last_x-x)|0; + lcnt > 0 ? ( + dx = (x-last_x)/lcnt; + ); + lcnt >= 1 ? loop(lcnt, + last_x += dx; + cclist[last_x|0]=setCc(cclist[last_x|0], cc_to_adjust, 0); + ) : ( + cclist[x]=setCc(cclist[x], cc_to_adjust, 0); + ); + ); + last_x = x; + ); + ); + ); + + (mouse_x < pkw && mouse_y >= grid_bottom+el_divh && mstate==0) || mstate==ms_el_ctrlchange ? ( + // Left click + (mouse_cap==1) ? ( + y = (((mouse_y - grid_bottom - el_divh) / (elh - el_divh))*numccs )|0; + mstate==0 ? ( // Click / Button down + mstate = ms_el_ctrlchange; + mouse_x < chw ? ms_sub_channelchange=1; + cc_to_adjust=y; + sliderchange(slider14=cc_to_adjust); + mstart = mouse_y; + cc_type_start = cc_type[cc_to_adjust]; + cc_chan_start = cc_chan[cc_to_adjust]; + draw_cc_controls(); + ) : ( // Drag + draglen=((mstart - mouse_y)/10)|0; + ldraglen != draglen ? ( + ldraglen = draglen; + ms_sub_channelchange==0 ? ( + new_cc = cc_type_start + draglen; + new_cc < 0 ? new_cc = 128 - (new_cc % 128) : new_cc = new_cc % 128; + cc_type[cc_to_adjust]=new_cc; + cc_to_adjust == 0 ? sliderchange(slider20=cc_type[cc_to_adjust]); + cc_to_adjust == 1 ? sliderchange(slider21=cc_type[cc_to_adjust]); + cc_to_adjust == 2 ? sliderchange(slider22=cc_type[cc_to_adjust]); + cc_to_adjust == 3 ? sliderchange(slider23=cc_type[cc_to_adjust]); + ) : ( + new_cc = cc_chan_start + draglen; + new_cc < 0 ? new_cc = 16 - (new_cc % 16) : new_cc = new_cc % 16; + cc_chan[cc_to_adjust]=new_cc; + cc_to_adjust == 0 ? sliderchange(slider30=cc_chan[cc_to_adjust]); + cc_to_adjust == 1 ? sliderchange(slider31=cc_chan[cc_to_adjust]); + cc_to_adjust == 2 ? sliderchange(slider32=cc_chan[cc_to_adjust]); + cc_to_adjust == 3 ? sliderchange(slider33=cc_chan[cc_to_adjust]); + ); + draw_cc_controls(); + ); + ); + ) : ( + ms_sub_channelchange=0; + ); + ); + +); + +!(mouse_cap&3) ? ( + mstate ? ( + mstate != ms_el_divider && mstate != ms_preview && mstate != ms_tb_button_noundo ? ( + sliderchange(-1); // create undo point + ); + mstate=0; // Clear all mouse states + sd_editval_show=0; + ); +); + +(mouse_y < tbrh || mouse_y > 3*tbrh || mouse_x < 0 || ( mouse_x > 16*busp && (mouse_y > tbrh && mouse_y < 2*tbrh) ) || mouse_x > 18*busp ) && !(mstate&ms_tb) ? hl_state=0; // Clear toolbar highlights + +// Erase everything within note matrix +gfx_r=gfx_g=gfx_b=0; gfx_a=1.0; +gfx_x=pkw; gfx_y=tbh; gfx_rectto(gfx_w,grid_bottom); + +// Erase everything within envelope lane +gfx_x=pkw-1; // -1 to erase also the leftmost pixels of event dots +gfx_y=gfx_h - elh+el_divh; gfx_rectto(gfx_w,gfx_h); + +refresh_cc_controls ? ( + draw_cc_controls(); + refresh_cc_controls=0; +); + +// Draw octave lines +ly=tbh; +notepos=0; +loop(numnotes, + ly += row_height; + octavestart = (basenote+(numnotes-1-notepos)) % 12; + octavestart == 0 ? ( + gfx_r=c_grid_r; gfx_g=c_grid_g; gfx_b=c_grid_b; gfx_a=c_grid_a; + gfx_x=0.0; gfx_y=ly; + gfx_lineto(gfx_w,gfx_y,0); + ); + notepos+=1; +); + +// Draw bar lines +xpos=pkw; +bar=1; +loop(nbars, + xpos+=barlen; + gfx_r=c_barline_r; gfx_g=c_barline_g; gfx_b=c_barline_b; gfx_a=c_barline_a; + gfx_x=xpos+1; gfx_y=tbh; + gfx_lineto(gfx_x,gfx_h,0); + bar+=1; +); + +ly=tbh; +notepos=0; +loop(numnotes, + + ty=(tbh+((notepos+1)*(grid_bottom-tbh))/(numnotes))|0; + + lx=pkw; + xpos=0; + mask = 2^(numnotes-1-notepos); + cidx=(p & 7); + + use_r=(cidx&1) ? 0.6 : 0.2; + use_g=(cidx&2) ? 0.6 : 0.2; + use_b=(cidx&4) ? 0.2 : 0.6; + cidx==3 ? use_r*=2; + cidx==4 ? use_g*=2; + + loop(listlength, + tx = (((xpos+1)*(gfx_w - pkw))/listlength)+pkw|0; + + sel=(notelist[xpos]&mask); + + // Draw square + gfx_r=use_r; gfx_g=use_g; gfx_b=use_b; gfx_a=1; + + (xpos % steps_per_beat) == 0 ? ( gfx_g=gfx_r; gfx_r=gfx_b; gfx_b=use_g;); + + lbeatpos == xpos ? ( gfx_r=gfx_g=gfx_b=sel?0.8:0.4; ) : + !sel ? (gfx_r*=0.55; gfx_g*=0.55; gfx_b*=0.55; ); + + curnote=(numnotes-1-notepos)*listlength+xpos; + num_sd = getSubdivNum(curnote); + num_sd ? ( + sd_ena = getSubdivNotelist((numnotes-1-notepos), xpos); + sd_r=gfx_r;sd_g=gfx_g;sd_b=gfx_b; + sd = 0; + lx_sd=lx; + loop(num_sd+1, + tx_sd = (((sd+1)*(tx-lx))/(num_sd+1))+lx|0; + (sd_ena >> sd)&1 ? ( // enabled sd step + gfx_r=sd_r; gfx_g=sd_g; gfx_b=sd_b; + ) : ( // disabled sd step + gfx_r=sd_r*0.55; gfx_g=sd_g*0.55; gfx_b=sd_b*0.55; + ); + gfx_x=lx_sd ;gfx_y=ly; gfx_rectto(tx_sd,ty); + lx_sd=tx_sd+1; + sd += 1; + ); + ) : ( + gfx_x=lx; gfx_y=ly; gfx_rectto(tx,ty); + ); + + // lbeatpos == xpos && notepos == numnotes-1 ? ( + // gfx_r=0.5; gfx_g=0.7; gfx_b=1; gfx_a=0.2; + // gfx_x=lx; gfx_y=tbh; gfx_rectto(tx,grid_bottom); + // ); + + notetie[xpos]&mask ? ( + // Draw note tie + gfx_x=tx; gfx_y=ly; gfx_rectto(tx+2,ty); + ); + + sel && !(notetie[xpos-1]&mask) ? ( //Note exists and is not tied to previous note. + // Draw velocity bar + num_sd ? ( + sd = 0; + lx_sd=lx; + loop(num_sd+1, + tx_sd = (((sd+1)*(tx-lx))/(num_sd+1))+lx|0; + (sd_ena&1) ? ( + draw_velobar(lx_sd, ty, getSubdivVelo((numnotes-1-notepos), xpos, sd), tx_sd-lx_sd, ty-ly); + ); + sd_ena *= 0.5; + lx_sd=tx_sd+1; + sd += 1; + ); + ) : ( + draw_velobar(lx+(tx-lx-velobarwidth)*(getStart(curnote)/tpb), ty, getVelo(curnote), tx-lx, ty-ly); + ); + ); + + lx=tx+2; + xpos+=1; + ); + + ly=ty+2; + notepos+=1; +); +(mstate == ms_veloedit || mstate == ms_veloeditrow || mstate == ms_startoffsetedit || mstate == ms_startoffseteditrow)&& ((nlm && sd_edit_num==0) || sd_editval_show)? ( + // Draw velocity or start offset value + gfx_r=1.0; gfx_g=1.0; gfx_b=1.0; gfx_a=1.0; + gfx_x=(((lastnote_changed_x)*(gfx_w - pkw))/listlength)+6+pkw|0; + gfx_y=tbh+(numnotes-1-ylock)*row_height-10; + gfx_y < tbh+1 ? gfx_y = tbh+1; + mstate == ms_veloedit ? ( + sd_edit_num ? gfx_x+=sd_x*note_w/(sd_edit_num+1); + gfx_drawnumber(velo,0); + ) : mstate == ms_veloeditrow ? ( + sd_edit_num ? gfx_x+=sd_x*note_w/(sd_edit_num+1); + gfx_drawnumber(lastnote_changed_velo,0); + ) : mstate == ms_startoffsetedit ?( + gfx_drawnumber(new_start,0); + ) : ( + gfx_drawnumber(start_adj_all_value,0); + ); +); + + +// Draw CC envelopes + +env_max_h=gfx_h-grid_bottom-el_divh-1; +env_half_h=(env_max_h/2)|0; + +// Draw step colors to envelope background +lx=pkw; +xpos=0; +loop(listlength, + tx = (((xpos+1)*(gfx_w - pkw))/listlength)+pkw|0; + gfx_r=use_r; gfx_g=use_g; gfx_b=use_b; gfx_a=1; + (xpos % steps_per_beat) == 0 ? ( gfx_g=gfx_r; gfx_r=gfx_b; gfx_b=use_g;); + lbeatpos == xpos ? ( gfx_r=gfx_g=gfx_b=0.4) : (gfx_r*=0.55; gfx_g*=0.55; gfx_b*=0.55; ); + gfx_x=lx; gfx_y=gfx_h; gfx_rectto(tx,gfx_h-env_max_h); + lx=tx+2; + xpos+=1; +); + +// Draw envelope +tx = (gfx_w - pkw)/listlength; +i=(cc_to_adjust+1) % numccs; // make sure that active envelope is drawn last +loop(numccs, + gfx_x=pkw;gfx_y=gfx_h; + x_int=gfx_x; + x_float=gfx_x+tx; + x_int_prev=x_int; + x_int=x_float|0; + cc_step=0; + // Find first and last enabled event + event_enabled=0; + first_event=0; + last_event=0; + loop(listlength, + val=getCc(cclist[cc_step], i); + val & 0x80 ? ( // Enabled event + !event_enabled ? ( + first_event=cc_step; + event_enabled=1; + ); + last_event=cc_step; + ); + cc_step+=1; + ); + event_enabled ? ( // At least one enabled event found in this pattern + setEnvColor(i); + cc_step=0; + loop(listlength, + val=getCc(cclist[cc_step], i); + gfx_x=x_int_prev; gfx_y_mem=gfx_y; + val & 0x80 ? ( // event enabled + event_enabled=1; + val_y=gfx_h-((val&0x7F)/128*env_max_h); + i == cc_to_adjust ? ( + gfx_r=use_r; gfx_g=use_g; gfx_b=use_b; gfx_a=c_hl_a; + cc_type[i]==10 ? gfx_y=gfx_h - env_half_h : gfx_y=gfx_h; // Draw Pan (CC 10) using bipolar env + gfx_rectto(x_int,val_y); // Fill + ); + gfx_x=x_int_prev; gfx_y=gfx_y_mem; + gfx_r=use_r; gfx_g=use_g; gfx_b=use_b; gfx_a=use_a; + cc_step > 0 ? gfx_lineto(gfx_x,val_y,0) : gfx_y=val_y; // Vertical line + i == cc_to_adjust ? ( + gfx_x-=1; gfx_y-=1; + gfx_rectto(gfx_x+4,gfx_y+4); // Event dot + gfx_x-=3; gfx_y-=3; + ); + gfx_lineto(x_int,gfx_y,0); // Horizontal line + ):( + cc_step < first_event ? ( + val_y=gfx_h-((getCc(cclist[last_event], i)&0x7F)/128*env_max_h); + ); + i == cc_to_adjust ? ( + gfx_r=use_r; gfx_g=use_g; gfx_b=use_b; gfx_a=c_hl_a; + cc_type[i]==10 ? gfx_y=gfx_h - env_half_h : gfx_y=gfx_h; + gfx_rectto(x_int,val_y); // Fill + ); + gfx_r=use_r; gfx_g=use_g; gfx_b=use_b; gfx_a=use_a; + gfx_x=x_int_prev; gfx_y=val_y; + gfx_lineto(x_int,gfx_y,0); // Horizontal line + ); + x_float+=tx; + x_int_prev=x_int; + x_int=x_float|0; + cc_step+=1; + ); + ); + i=(i+1) % numccs;; +); + +// Draw envelope lane divider +gfx_r=gfx_g=gfx_b=0.9;gfx_a=1; // top edge +gfx_x=0; gfx_y=gfx_h - elh; +gfx_lineto(gfx_w,gfx_y,0); +gfx_r=gfx_g=gfx_b=0.7; // center +gfx_x=0; gfx_y+=1; +gfx_rectto(gfx_w,gfx_y+el_divh-2); +gfx_r=gfx_g=gfx_b=0.5; //bottom edge +gfx_x=0; +gfx_lineto(gfx_w,gfx_y,0); + +mstate == ms_el_envdraw ? ( + // Draw envelope value + gfx_r=1.0; gfx_g=1.0; gfx_b=1.0; gfx_a=1.0; + gfx_x=(((lastenv_changed_x)*(gfx_w - pkw))/listlength)+6+pkw|0; + gfx_y=gfx_h - envval/128*env_max_h - 8; + gfx_y < grid_bottom+el_divh+1 ? gfx_y+=10; + gfx_drawnumber(envval,0); +); + +// Draw toolbar +refresh_tb || lgfx_w_tb != gfx_w || lgfx_h_tb != gfx_h || last_hl_state!=hl_state ? ( + refresh_tb=0; + lgfx_w_tb=gfx_w; + lgfx_h_tb=gfx_h; + last_hl_state=hl_state; + // Clear toolbar + gfx_r=gfx_g=gfx_b=gfx_x=gfx_y=0; gfx_a=1; + gfx_rectto(gfx_w,tbh); + + // Draw pattern buttons + pat=0; + loop(npatterns, + draw_pat_button(pat, tbrh, ((hl_state&hl_pattern)&&((hl_state&0xF)==pat))); + pat+=1; + ); + + draw_trigstart_display(busp*16, tbrh, 0); + draw_mode_button(busp*0, 2*tbrh, hl_state==hl_mode); + draw_startmode_button(busp*1, 2*tbrh, hl_state==hl_playbeforestart); + draw_position_display(busp*2, 2*tbrh, hl_state==hl_startpos, start_beatpos); + draw_position_display(busp*4, 2*tbrh, hl_state==hl_endpos, end_beatpos == -99 ? -100 : end_beatpos); + draw_notelen_slider(busp*6, 2*tbrh, hl_state==hl_notelen); + draw_swing_slider(busp*12, 2*tbrh, hl_state==hl_swing); + + draw_tb_pianokeys(busp*0, 0); +); + +// Draw default velocity value +gfx_r=gfx_g=gfx_b=gfx_x=gfx_y=0; gfx_a=1; +gfx_x=busp*18; gfx_y=2*tbrh; +gfx_rectto(gfx_x+(busp*2-2-1),gfx_y+(tbrh-4-1)); +draw_velo_display(busp*18,2*tbrh,0); diff --git a/Effects/misc/adpcm_simulator b/Effects/misc/adpcm_simulator new file mode 100644 index 0000000..8841941 --- /dev/null +++ b/Effects/misc/adpcm_simulator @@ -0,0 +1,96 @@ +desc:ADPCM Simulator +//tags: processing lo-fi +//author: Cockos + +// encodes/decodes to IMA ADPCM to give it that "crunchy" sound + +slider1:4<1,4,1>Bits +slider2:4096<2,65538,128>Block Size +slider3:0<0,7,1>Bit Bias (mostly for 1-bit) +slider4:0<-60,60,1>Gain (dB) + + +in_pin:left input +in_pin:right input +out_pin:left output +out_pin:right output + +@init +a=1000000; + +// build tables +index_table = a; +a[] = -1; a+=1; a[] = -1; a+=1; a[] = -1; a+=1; a[] = -1; a+=1; a[] = 2; +a+=1; a[] = 4; a+=1; a[] = 6; a+=1; a[] = 8; a+=1; + +step_table=a; +a[]=7; a+=1; a[]=8; a+=1; a[]=9; a+=1; a[]=10; a+=1; a[]=11; a+=1; +a[]=12; a+=1; a[]=13; a+=1; a[]=14; a+=1; a[]=16; a+=1; a[]=17; a+=1; +a[]=19; a+=1; a[]=21; a+=1; a[]=23; a+=1; a[]=25; a+=1; a[]=28; a+=1; +a[]=31; a+=1; a[]=34; a+=1; a[]=37; a+=1; a[]=41; a+=1; a[]=45; a+=1; +a[]=50; a+=1; a[]=55; a+=1; a[]=60; a+=1; a[]=66; a+=1; a[]=73; a+=1; +a[]=80; a+=1; a[]=88; a+=1; a[]=97; a+=1; a[]=107; a+=1; a[]=118; a+=1; +a[]=130; a+=1; a[]=143; a+=1; a[]=157; a+=1; a[]=173; a+=1; a[]=190; a+=1; +a[]=209; a+=1; a[]=230; a+=1; a[]=253; a+=1; a[]=279; a+=1; a[]=307; a+=1; +a[]=337; a+=1; a[]=371; a+=1; a[]=408; a+=1; a[]=449; a+=1; a[]=494; a+=1; +a[]=544; a+=1; a[]=598; a+=1; a[]=658; a+=1; a[]=724; a+=1; a[]=796; a+=1; +a[]=876; a+=1; a[]=963; a+=1; a[]=1060; a+=1; a[]=1166; a+=1; a[]=1282; a+=1; +a[]=1411; a+=1; a[]=1552; a+=1; a[]=1707; a+=1; a[]=1878; a+=1; a[]=2066; a+=1; +a[]=2272; a+=1; a[]=2499; a+=1; a[]=2749; a+=1; a[]=3024; a+=1; a[]=3327; a+=1; +a[]=3660; a+=1; a[]=4026; a+=1; a[]=4428; a+=1; a[]=4871; a+=1; a[]=5358; a+=1; +a[]=5894; a+=1; a[]=6484; a+=1; a[]=7132; a+=1; a[]=7845; a+=1; a[]=8630; a+=1; +a[]=9493; a+=1; a[]=10442; a+=1; a[]=11487; a+=1; a[]=12635; a+=1; +a[]=13899; a+=1; a[]=15289; a+=1; a[]=16818; a+=1; a[]=18500; a+=1; +a[]=20350; a+=1; a[]=22385; a+=1; a[]=24623; a+=1; a[]=27086; a+=1; +a[]=29794; a+=1; a[]=32767; a+=1; + +blockpos=0; + +state0 = state1 = 0; +last0 = last1 = 0; + +@slider +bitbias=slider3|0; +iscale = (10^(slider4/20))/32768; +bits = min(max(slider1|0,1),4); +mask = 7; +bits==3?mask=6; +bits==2?mask=4; +bits==1?mask=0; + +resetevery = slider2|0; +resetevery > 65537 ? resetevery = 10^10; + +@sample + +inspl0 = min(max((spl0*32768)|0,-32768),32767); +inspl1 = min(max((spl1*32768)|0,-32768),32767); + + +blockpos ? ( + sign0=0; + step0 = step_table[state0]; + adiff0 = (inspl0 - last0)|0; + adiff0<0 ? ( adiff0=-adiff0; sign0=8; ); + nib0 = (min(max((step0 ? ((4 * adiff0 - ((step0*0.5)|0)) / step0) : 0)|0,0 ),7)&mask) + bitbias; + diff0 = ((nib0+0.5)*step0*0.25)|0; + outspl0 = (last0 += (sign0?-diff0:diff0)); + state0 = min(max(state0+index_table[nib0],0),88); + + sign1=0; + step1 = step_table[state1]; + adiff1 = (inspl1 - last1)|0; + adiff1<0 ? ( adiff1=-adiff1; sign1=8; ); + nib1 = (min(max((step1 ? ((4 * adiff1 - ((step1*0.5)|0)) / step1) : 0)|0,0 ),7)&mask) + bitbias; + diff1 = ((nib1+0.5)*step1*0.25)|0; + outspl1 = (last1 += (sign1?-diff1:diff1)); + state1 = min(max(state1+index_table[nib1],0),88); +) : ( + last0 = outspl0 = inspl0; + last1 = outspl1 = inspl1; +); + +spl0 = min(max(outspl0*iscale,-1),1); +spl1 = min(max(outspl1*iscale,-1),1); + +(blockpos+=1) >= resetevery ? blockpos=0; diff --git a/Effects/misc/noisegate b/Effects/misc/noisegate new file mode 100644 index 0000000..ab2d7b6 --- /dev/null +++ b/Effects/misc/noisegate @@ -0,0 +1,44 @@ +// This effect Copyright (C) 2004 and later Cockos Incorporated +// License: GPL - http://www.gnu.org/licenses/gpl.html +desc: noise gate (simple) +slider1:-60<-120,6,1>threshold (dB) +slider2:50<1,4000,10>silence length for fadeout (ms) +slider3:10<1,100,5>fadein response (ms) +slider4:100<1,1000,10>fadeout response (ms) + +@init +silentcnt=0; +seekv=1; seekto=1; + +@slider +thresh=2 ^ (slider1/6); +sillen=slider2*srate/1000; +fadeout = 1/pow(10,1/(srate*slider4/1000)); +fadein = 1/pow(10,1/(srate*slider3/1000)); + +@sample + +a=abs(spl0) > thresh || abs(spl1) > thresh; + +a ? +( + silentcnt=0; + seekto=1; +) : ( + (silentcnt+=1) > sillen ? seekto=0; +); + +// we should make this better, me thinks + +seekto > 0.5 ? +( // fading in + seekv=seekv*fadein + (1-fadein); +) +: +( // fading out + seekv=seekv*fadeout; +); + + +spl0=spl0*seekv; +spl1=spl1*seekv; diff --git a/Effects/misc/reverseness b/Effects/misc/reverseness new file mode 100644 index 0000000..5df73db --- /dev/null +++ b/Effects/misc/reverseness @@ -0,0 +1,49 @@ +// This effect Copyright (C) 2004 and later Cockos Incorporated +// License: LGPL - http://www.gnu.org/licenses/lgpl.html +// fade fix/improvements thanks to dan mcmullen + +desc: Delay w/Reverseness +//tags: processing sampler mangler delay +//author: Cockos + +slider1:500<0,4000,10>Length (ms) +slider2:-6<-120,6,1>Wet Mix (dB) +slider3:-6<-120,6,1>Dry Mix (dB) +slider4:0.1<0,1>Edge Overlap +slider5:0<0,1,1{Off,On}>Old Compatible And Clicky Mode + +in_pin:left input +in_pin:right input +out_pin:left output +out_pin:right output + +@init + pos=0; + +@slider + len=srate*slider1/1000; + wet=2 ^ (slider2/6); + dry=2 ^ (slider3/6); + nonclickymode = slider5 != 1; + fadelen=len*min(slider4,nonclickymode?0.5:1.0)*0.5; + freembuf(len*2); + +@sample + +s0=((len-pos)*2)[0]; +s1=((len-pos)*2)[1]; +(pos*2)[0]=spl0; +(pos*2)[1]=spl1; + +pp=len-pos; +w2=pp len-fadelen?(len-pp)/fadelen:1); + +nonclickymode && w2 == 1 ?( + pp= abs(len*0.5-pos); + w2= pp=len ? pos=0; diff --git a/Effects/misc/tonifier b/Effects/misc/tonifier new file mode 100644 index 0000000..e6c4a81 --- /dev/null +++ b/Effects/misc/tonifier @@ -0,0 +1,103 @@ +// This effect Copyright (C) 2004 and later Cockos Incorporated +// License: LGPL - http://www.gnu.org/licenses/lgpl.html + +desc: Tonifier +//tags: processing generator mangler +//author: Cockos + +slider1:0<-100,6,1>Wet Mix (dB) +slider2:-100<-100,6,1>Dry Mix (dB) +slider3:10<1,1000,10>Block Size (ms) +slider4:0<-48,48,1>Frequency Shift (st) + +slider5:0<0,6,1>max auto shift (octaves) +slider6:100<0,20000>auto shift min frequency (Hz) +slider7:1000<0,20000>auto shift max frequency (Hz) +slider8:0,Output frequency (Hz) + + +in_pin:left input +in_pin:right input +out_pin:left output +out_pin:right output + +@slider + lbsize=bsize; + bsize=(slider3*srate*0.001)|0; + ibsize=1/bsize; + sscal=2 ^ (slider4/12)*ibsize*2; + wet=2 ^ (slider1/6)*ibsize*1.7; // 1.7 seems about right for volume scaling + dry=2 ^ (slider2/6); + + lbsize != bsize ? ( + bpos= + zccnt0=zccnt1= + lzccnt0=lzccnt1= + ampcnt0=ampcnt1= + lampcnt0=lampcnt1= + ls0=ls1=0; + ); + + maxf=slider7/srate*2; minf=slider6/srate*2; + +@block + updcnt=updcnt+samplesblock; + updcnt > srate*0.2 ? ( updcnt=0; slider8=(freq0+freq1)*0.25*srate; sliderchange(128); ); + +@sample + +// count zero crossings +ts0=spl0>0; + +ts0 && ls0 ? zccnt0+=1; +ls0=!ts0; + +ts1=spl1>0; +ts1 && ls1 ? zccnt1+=1; +ls1=!ts1; + +// count amplitude (square maybe?) +ampcnt0+=abs(spl0); +ampcnt1+=abs(spl1); + +// find local amplitude and update buffer +fbpos=bsize+bsize+bpos+bpos; +acnt0=lampcnt0+ampcnt0-fbpos[0]; +fbpos[0]=ampcnt0; +fbpos+=1; +acnt1=lampcnt1+ampcnt1-fbpos[0]; +fbpos[0]=ampcnt1; + +// find local zero crossing count and update buffer +fbpos=bpos+bpos; +lcnt0=lzccnt0+zccnt0-fbpos[0]; +fbpos[0]=zccnt0; +fbpos+=1; +lcnt1=lzccnt1+zccnt1-fbpos[0]; +fbpos[0]=zccnt1; + +// advance buffer +bpos+=1; +bpos >= bsize ? ( + bpos=0; + // keep ampcnt* and zccnt* in a reasonable range + lampcnt0=ampcnt0; + lampcnt1=ampcnt1; + lzccnt0=zccnt0; + lzccnt1=zccnt1; + ampcnt0=ampcnt1=zccnt0=zccnt1=0; +); + +freq0=lcnt0*sscal; +freq1=lcnt1*sscal; + +loop(slider5, + freq0 > maxf ? freq0*=0.5 : (freq0 < minf ? freq0 *= 2); + freq1 > maxf ? freq1*=0.5 : (freq1 < minf ? freq1 *= 2); +); + +tpos0=tpos0+$pi*freq0; +tpos1=tpos1+$pi*freq1; + +spl0=sin(tpos0)*acnt0*wet + spl0*dry; +spl1=sin(tpos1)*acnt1*wet + spl1*dry; diff --git a/Effects/misc/tonifier2 b/Effects/misc/tonifier2 new file mode 100644 index 0000000..35a6fb9 --- /dev/null +++ b/Effects/misc/tonifier2 @@ -0,0 +1,128 @@ +// This effect Copyright (C) 2004 and later Cockos Incorporated +// License: LGPL - http://www.gnu.org/licenses/lgpl.html +// this algorithm is based on the one used by gtkguituner, the schmitt-triggering. + +desc: Tonifier v2 +//tags: processing generator mangler +//author: Cockos + +slider1:0<-100,6,1>Wet Mix (dB) +slider2:-100<-100,6,1>Dry Mix (dB) +slider3:0.995<0.96,1>Amplitude Falloff (factor) +slider4:0<-48,48,1>Frequency Shift (st) + +slider5:4<0,6,1>max auto shift (octaves) +slider6:100<0,20000>auto shift min frequency (Hz) +slider7:300<0,20000>auto shift max frequency (Hz) +slider8:0,Output frequency (Hz) + +in_pin:left input +in_pin:right input +out_pin:left output +out_pin:right output + +@slider + sscal=2 ^ (slider4/12) / srate; + wet=2 ^ (slider1/6); + dry=2 ^ (slider2/6); + + maxf=slider7/srate*2; minf=slider6/srate*2; + + state=0; + splpos=0; + trigfact=0.5; + numsamples=1024; + lastrate=0; + + +@block + updcnt=updcnt+samplesblock; + updcnt > srate*0.5 ? ( updcnt=0; slider8=(freq0+freq1)*0.25*srate; sliderchange(128); ); + +@sample + +@sample + +state ? +( + // track minimum and maximum values for sample + a1=max(a1,spl0); + a2=min(a2,spl0); + + splpos[0]=spl0; + splpos += 1; + splpos >= 1024 ? + ( + splpos=0; + state=0; + a2 *= trigfact; + a1 *= trigfact; + + lst=0; + startpoint=1; + loop(numsamples-1, + lst == 0 && startpoint[0] > a1 ? lst=1; + lst == 1 && startpoint[0] >= a2 && startpoint[1] < a2 ? lst=2; + lst != 2 ? startpoint+=1; + ); + smtrig=0; + endpoint=startpoint+1; + tc=0; + i=startpoint; + loop(numsamples-startpoint, + smtrig ? + ( + i[0] >= a2 && i[1] < a2 ? ( + endpoint=i; + tc+=1; + smtrig=0; + ) + ) + : + ( + smtrig = i[0] >= a1; + ); + i+=1; + + ); + endpoint == startpoint ? endpoint += 1; + + lastrate = tc / (endpoint-startpoint); + + ); +) +: +( + 0[0] <= 0 && spl0 > 0 ? + ( + state=1; + 1[0]=spl0; + splpos=2; + a1=spl0; + a2=0[0]; + ); +); + + +// count amplitude (square maybe?) +ampcnt0=max(ampcnt0,abs(spl0)); +ampcnt1=max(ampcnt1,abs(spl1)); + +acnt0=ampcnt0 * (1-slider3) + acnt0*slider3; +acnt1=ampcnt1 * (1-slider3) + acnt0*slider3; +ampcnt0 *= slider3; +ampcnt1 *= slider3; + +freq0=lastrate*2; +freq1=lastrate*2; + +loop(slider5, + freq0 > maxf ? freq0*=0.5 : (freq0 < minf ? freq0 *= 2); + freq1 > maxf ? freq1*=0.5 : (freq1 < minf ? freq1 *= 2); +); + +tpos0=tpos0+$pi*freq0; +tpos1=tpos1+$pi*freq1; + +spl0=sin(tpos0)*acnt0*wet + spl0*dry; +spl1=sin(tpos1)*acnt1*wet + spl1*dry; diff --git a/Effects/old_unsupported/bitred b/Effects/old_unsupported/bitred new file mode 100644 index 0000000..8bdae56 --- /dev/null +++ b/Effects/old_unsupported/bitred @@ -0,0 +1,65 @@ +desc:bit depth reduction + +slider1:16<1,32,1>resolution (bits) +slider2:0<-48,48,1>input gain (dB) +slider3:0<0,1,1{off,on}>dither +slider4:0<0,1,1{off,on}>noiseshape +slider5:0<0,2,1{rect,tri,gauss}>dither type +slider6:0<0,1,1{off,on}>highpass dither +slider7:1<0,4,.01>dither amplitude (lsb) +slider8:0<-2,2,.01>DC shift (lsb) + +@slider +resol=2^((slider1|0)-1); +invresl=1/resol; +gain=2^(slider2/6); +dit=slider3?1:0; +s=slider4>0.5?0.5:0; +s1l=s1r=s2l=s2r=0; +ldv=0; +dcshift = slider8+0.5; +GAUSSIAN_UNINITIALIZED = -9999; // Magic number. +z0 = z1 = GAUSSIAN_UNINITIALIZED; + +@sample + +s0 = spl0*gain + s * (s1l+s1l - s2l); +s1 = spl1*gain + s * (s1r+s1r - s2r); + +slider6 ? dv2 = dv:dv2=0; +dit ? ( + slider5==0 ? dv=rand(20000)/10000 - 1; + slider5==1 ? dv=(rand(10000)+rand(10000))/10000 - 1; + + slider5==2 ? ( + (z1 == GAUSSIAN_UNINITIALIZED) ? ( + // Box-Muller twofer. + w = 0; + while ( + z0 = 2.0 * rand(1) - 1.0; + z1 = 2.0 * rand(1) - 1.0; + w = z0 * z0 + z1 * z1; + w >= 1.0; + ); + w = sqrt(-2.0 * log(w) / w); + z0 *= w; + z1 *= w; + dv = z0*0.25; + ) : ( + dv = z1*0.25; + z0 = z1 = GAUSSIAN_UNINITIALIZED; + ); + ); +) : dv=0; + +noise = (dv-dv2) * slider7 + dcShift; + +spl0 = max(min((floor(s0*resol + noise))*invresl,1),-1); +spl1 = max(min((floor(s1*resol + noise))*invresl,1),-1); + +s2l=s1l; +s2r=s1r; + +s1l = s0 - spl0; +s1r = s1 - spl1; + diff --git a/Effects/old_unsupported/dither b/Effects/old_unsupported/dither new file mode 100644 index 0000000..fe886b2 --- /dev/null +++ b/Effects/old_unsupported/dither @@ -0,0 +1,72 @@ +desc:Bit Reduction/Dither +//tags: processing lo-fi dither +//author: Cockos + +slider1:16<1,32,1>Resolution (bits) +slider2:0<-48,48,1>Input Gain (dB) +slider3:1<0,1,1{Off,On}>Dither +slider4:0<0,1,1{Off,On}>Noise Shaping +slider5:2<0,2,1{Rectangular,Triangular,Gaussian}>Dither Type +slider6:0<0,1,1{Off,On}>Highpass Dither +slider7:1<0,4,.01>Dither Amplitude (LSB) +slider8:0<-2,2,.01>DC Shift (LSB) + +in_pin:left input +in_pin:right input +out_pin:left output +out_pin:right output + +@slider +resol=2^((slider1|0)-1); +invresl=1/resol; +gain=2^(slider2/6); +dit=slider3?1:0; +s=slider4>0.5?0.5:0; +s1l=s1r=s2l=s2r=0; +ldv=0; +dcshift = slider8+0.5; +GAUSSIAN_UNINITIALIZED = -9999; // Magic number. +z0 = z1 = GAUSSIAN_UNINITIALIZED; + +@sample + +s0 = spl0*gain + s * (s1l+s1l - s2l); +s1 = spl1*gain + s * (s1r+s1r - s2r); + +slider6 ? dv2 = dv:dv2=0; +dit ? ( + slider5==0 ? dv=rand(20000)/10000 - 1; + slider5==1 ? dv=(rand(10000)+rand(10000))/10000 - 1; + + slider5==2 ? ( + (z1 == GAUSSIAN_UNINITIALIZED) ? ( + // Box-Muller twofer. + w = 0; + while ( + z0 = 2.0 * rand(1) - 1.0; + z1 = 2.0 * rand(1) - 1.0; + w = z0 * z0 + z1 * z1; + w >= 1.0; + ); + w = sqrt(-2.0 * log(w) / w); + z0 *= w; + z1 *= w; + dv = z0*0.25; + ) : ( + dv = z1*0.25; + z0 = z1 = GAUSSIAN_UNINITIALIZED; + ); + ); +) : dv=0; + +noise = (dv-dv2) * slider7 + dcShift; + +spl0 = max(min((floor(s0*resol + noise))*invresl,1),-1); +spl1 = max(min((floor(s1*resol + noise))*invresl,1),-1); + +s2l=s1l; +s2r=s1r; + +s1l = s0 - spl0; +s1r = s1 - spl1; + diff --git a/Effects/pitch/fft-ps b/Effects/pitch/fft-ps new file mode 100644 index 0000000..beea1fa --- /dev/null +++ b/Effects/pitch/fft-ps @@ -0,0 +1,124 @@ +desc: New FFT pitch-experimenter +slider1:10<6,12,1>FFT size (bits) +slider2:0<-1,1,0.01>slide amt (linear) +slider3:0<-48,48,1>shift amt (scale semitones) +slider4:1<0,1,0.01>width around peak +slider5:0<-120,6,1>passthru mix + +@init +fftsize=-1; + +@slider + fftsize != (0|(2^slider1)) ? ( + fftsize=(2^slider1)|0; + bpos=0; + curblock=0; + lastblock=curblock+65536*2; + window=lastblock+65536*2; + hist=window+32768; + invfsize=1/fftsize; + hfftsize=fftsize*0.5; + tmp=0; + tsc=3.14159/hfftsize; + memset(curblock,0,fftsize*4); + memset(lastblock,0,fftsize*4); + memset(hist,0,fftsize*2); + loop(hfftsize, + window[tmp]=0.42-0.50*cos(tmp*tsc)+0.08*cos(2*tmp*tsc); + tmp+=1; + ); + ); + slideramt=(slider2*hfftsize)|0; + shiftamt=2^(slider3/12); + ptmix=2^(slider5/6); + +@sample + +bpos >= fftsize ? ( + + t=curblock; + curblock=lastblock; + lastblock=t; + + fft(curblock,fftsize); + fft_permute(curblock,fftsize); + i=0; + swidth=slider4*hfftsize; + peakpos=fftsize*0.25; + slider4 < 1.0 ? ( + peakval=0.0; + loop(hfftsize*0.25, + u=curblock[i]; v=curblock[i+1]; + cval=(u*u+v*v); + cval > peakval ? (peakval=cval; peakpos=i*0.5; ); + i+=2; + peakval*=1.01; + ); + ); + i=0; + cbout=curblock+fftsize*2; + memset(cbout,0,fftsize*2); + endpos=fftsize*2-2; + loop(hfftsize, + i2=endpos-i; + + abs(i*0.5 - peakpos)>swidth ? ( + cbout[i]+=curblock[i]*invfsize*ptmix; + cbout[i+1]+=curblock[i+1]*invfsize*ptmix; + + cbout[i2]+=curblock[i2]*invfsize*ptmix; + cbout[i2+1]+=curblock[i2+1]*invfsize*ptmix; + ) : ( + opos=((i*0.5+slideramt)*shiftamt)|0; + opos >= 0 && opos < hfftsize ? ( + opos+=opos; + + 0?( + cbout[opos]+=curblock[i]*invfsize; + cbout[opos+1]+=curblock[i+1]*invfsize; + + cbout[endpos-opos]+=curblock[i2]*invfsize; + cbout[endpos-opos+1]+=curblock[i2+1]*invfsize; + ):( + u=curblock[i]; v=curblock[i+1]; + u2=cbout[opos]; v2=cbout[opos+1]; + phase1=(atan2(u,v)+atan2(u2,v2))*0.5; + mag1=sqrt(u2*u2+v2*v2)+sqrt(u*u+v*v); + mag1*=invfsize; + cbout[opos]=sin(phase1)*mag1; + cbout[opos+1]=cos(phase1)*mag1; + + u=curblock[i2]; v=curblock[i2+1]; + u2=cbout[endpos-opos]; v2=cbout[endpos-opos+1]; + phase1=(atan2(u,v)+atan2(u2,v2)); + mag1=sqrt(u2*u2+v2*v2)+sqrt(u*u+v*v); + mag1*=invfsize; + cbout[endpos-opos]=sin(phase1)*mag1; + cbout[endpos-opos+1]=cos(phase1)*mag1; + ); + ); + ); + i+=2; + ); + fft_ipermute(cbout,fftsize); + ifft(cbout,fftsize); + bpos=0; +); + +// make sample +w=window[bpos*0.5]; +iw=1-w; + +lastblock[bpos]=hist[bpos]; +lastblock[bpos+1]=hist[bpos+1]; +lastblock[fftsize+bpos]=spl0; +lastblock[fftsize+bpos+1]=spl1; + +hist[bpos]=spl0; +hist[bpos+1]=spl1; + +spl0=(curblock[fftsize*2+bpos]*w + lastblock[fftsize*3+bpos]*iw); +spl1=(curblock[fftsize*2+bpos+1]*w + lastblock[fftsize*3+bpos+1]*iw); + + +bpos+=2; diff --git a/Effects/pitch/mdct-shift b/Effects/pitch/mdct-shift new file mode 100644 index 0000000..a0b5e31 --- /dev/null +++ b/Effects/pitch/mdct-shift @@ -0,0 +1,71 @@ +// This effect Copyright (C) 2004 and later Cockos Incorporated +// License: LGPL - http://www.gnu.org/licenses/lgpl.html + +desc: MDCT Shifter +//tags: processing pitch mangler +//author: Cockos + +slider1:128<32,512,153.6>Bands +slider2:4<-512,512,1>Band Shift (neg=down, pos=up) + +in_pin:input +out_pin:output (mono) +out_pin:output (mono) + +@slider +slider1=2 ^ (0|(0.5+log10(slider1)/log10(2)))|0; +slider1=min(512,max(slider1,32)); +fftsize!=slider1*2 ? (fftsize=slider1*2; bufpos=bi1=0; bi2=fftsize*2; halfsize=fftsize*0.5); +slider2=min(slider1,max(slider2,-slider1)); + +@sample +// bi2 was the previously transformed buffer, and by the time it +// is bi2 we only touch the second half (the first was replaced when +// it was bi1) + +// bi1 is the most recently transformed buffer, we only touch the first +// half, because the second will be used for the next overlap + + +t=bi1+bufpos; +p0=t[0]; +t[0]=spl0; + +t=bi2+halfsize+bufpos; +p1=t[0]; +t[0]=spl0; + +spl0 = p0 + p1; // our mdct handles windowing, so we just add + +bufpos+=1; + +bufpos >= halfsize ? +( + // swap bi1 and bi2 + t=bi1; bi1=bi2; bi2=t; + // we hit our FFT size here + + mdct(bi1,fftsize); + + slider2 > 0 ? + ( + bufpos=bi1+halfsize; + loop(halfsize-slider2, + bufpos[0]=bufpos[-slider2]; + bufpos-=1; + ); + loop(slider2,bufpos[0]=0; bufpos-=1;) + ) : ( + bufpos=bi1; + loop(halfsize+slider2, + bufpos[0]=bufpos[-slider2]; + bufpos+=1; + ); + loop(-slider2,bufpos[0]=0; bufpos+=1) + ); + + imdct(bi1,fftsize); + bufpos=0; +); + +spl1=spl0; diff --git a/Effects/pitch/octavedown b/Effects/pitch/octavedown new file mode 100644 index 0000000..9c2ab86 --- /dev/null +++ b/Effects/pitch/octavedown @@ -0,0 +1,51 @@ +// This effect Copyright (C) 2004 and later Cockos Incorporated +// License: LGPL - http://www.gnu.org/licenses/lgpl.html + +desc: Pitch an Octave Down +//tags: processing pitch +//author: Cockos + +slider1:150<4,500,10>Chunk (ms) +slider2:0.5<0,1>Overlap +slider3:0<-120,6,1>Wet Mix (dB) +slider4:-120<-120,6,1>Dry Mix (dB) + +in_pin:left input +in_pin:right input +out_pin:left output +out_pin:right output + +@init +bufsize=-1; + +@slider +nbufsize=srate*0.001*slider1; nbufsize=nbufsize&65534; +nbufsize != bufsize ? (bufsize=nbufsize; bufpos=0); +slider2=min(1,max(0,slider2)); rspos=bufsize*slider2; invbs=1/rspos; +drymix=2 ^ (slider4/6); wetmix=2 ^ (slider3/6); + + +@sample +ss0=spl0; +ss1=spl1; + +hbp=bufpos&65534; +s0r=bufsize[hbp]; // read these early +s1r=bufsize[hbp+1]; + +(bufpos*2)[0]=spl0; +(bufpos*2)[1]=spl1; + +bufpos < rspos ? ( + sc=bufpos*invbs; + spl0=hbp[0]*sc + s0r*(1-sc); + spl1=hbp[1]*sc + s1r*(1-sc); +) : ( + spl0=hbp[0]; + spl1=hbp[1]; +); + +(bufpos+=1) >= bufsize ? bufpos=0; + +spl0=spl0*wetmix + ss0*drymix; +spl1=spl1*wetmix + ss1*drymix; diff --git a/Effects/pitch/octaveup b/Effects/pitch/octaveup new file mode 100644 index 0000000..709a182 --- /dev/null +++ b/Effects/pitch/octaveup @@ -0,0 +1,102 @@ +// This effect Copyright (C) 2004 and later Cockos Incorporated +// License: LGPL - http://www.gnu.org/licenses/lgpl.html + +desc: Pitch an Octave Up +//tags: processing pitch +//author: Cockos + +slider1:120<4,500,10>Chunk (ms) +slider2:0.4<0,1>Overlap +slider3:0<-120,6,1>Wet Mix (dB) +slider4:-120<-120,6,1>Dry Mix (dB) + +in_pin:left input +in_pin:right input +out_pin:left output +out_pin:right output + +@init +bufsize=-1; + +@slider +nbufsize=srate*0.001*slider1; +nbufsize=nbufsize&(65536-1-7); +bufsize != nbufsize ? +( + bufsize=nbufsize; + hbsz=bufsize*0.5; + qbsz=bufsize*0.25; + playbuf=0; + recpos=0; + playpos=hbsz; + recbuf=bufsize; +); + +slider2=min(1,max(slider2,0)); +o_start=qbsz * (2 - slider2); +o_end=qbsz * (2 + slider2); +fadesc=1/(hbsz-o_start); +drymix=2 ^ (slider4/6); wetmix=2 ^ (slider3/6); + +@sample + +s0=spl0; +s1=spl1; + +recbuf[recpos*2]=spl0; +recbuf[recpos*2+1]=spl1; + +playpos < o_start ? ( + // first quarter (first half of first block) + spl0=playbuf[playpos*4]; + spl1=playbuf[playpos*4+1]; +) : ( + playpos < hbsz ? ( + // second quarter + sc=(playpos-o_start)*fadesc; + + spl0= + // second half of first block mix + playbuf[playpos*4]*(1-sc) + + // first half of second block mix + playbuf[(playpos-qbsz)*4]*sc; + spl1= + // second half of first block mix + playbuf[playpos*4+1]*(1-sc) + + // first half of second block mix + playbuf[(playpos-qbsz)*4+1]*sc; + ) : ( + playpos < o_end ? ( + // third quarter + sc=(playpos-hbsz)*fadesc; + spl0= + // second half of second block + playbuf[(playpos-qbsz)*4]*(1-sc) + + // first half of third block + playbuf[(playpos-hbsz)*4]*sc; + spl1= + // second half of second block + playbuf[(playpos-qbsz)*4+1]*(1-sc) + + // first half of third block + playbuf[(playpos-hbsz)*4+1]*sc; + ) : ( + // last quarter (second half of third block) + spl0=playbuf[(playpos-hbsz)*4]; + spl1=playbuf[(playpos-hbsz)*4+1]; + ) + ) + +); + +(recpos+=1) >= bufsize ? ( + recpos=0; + recbuf=(!recbuf)*bufsize*2; +); + +(playpos+=1) >= bufsize ? ( + playpos=0; + playbuf=(!playbuf)*bufsize*2; +); + +spl0=spl0*wetmix + s0*drymix; +spl1=spl1*wetmix + s1*drymix; diff --git a/Effects/pitch/pitch2 b/Effects/pitch/pitch2 new file mode 100644 index 0000000..47365b8 --- /dev/null +++ b/Effects/pitch/pitch2 @@ -0,0 +1,91 @@ +// This effect Copyright (C) 2004 and later Cockos Incorporated +// License: LGPL - http://www.gnu.org/licenses/lgpl.html + +desc: Pitch Down-Shifter 2 +//tags: processing pitch +//author: Cockos + +slider1:1<0,6,1>Octaves Down +slider2:0<0,11,1>Semitones Down +slider3:0<0,99,1>Cents Down +slider4:250<4,500,10>Chunk Size (ms) +slider5:0.5<0.001,1>Overlap Size +slider6:-120<-120,6,1>Dry Mix (dB) +slider7:0.9<0.1,1,0.1>Subdivide Ratio +slider8:4<1,8,1>Subdivide + +in_pin:left input +in_pin:right input +out_pin:left output +out_pin:right output + +@slider + lbufsize=bufsize; bufsize=(srate*0.001*slider4)&65534; + lbufsize!=bufsize ? ( memset(0,0,1024); freembuf(0); ); + scl=2 ^ (-(slider1 + slider2/12 + slider3/1200)); + rilen=(max(scl,0.5)*bufsize)|0; + rrilen=((scl*bufsize)|0); + slider5=min(1,max(slider5,0)); + rspos=slider5*(bufsize-rilen); + invbs=1/rspos; + drymix=2 ^ (slider6/6); + subdivide=max(slider8|0,1); + wetmix=1 / subdivide; + sdfact=slider7; + isdfact=1/sdfact; + +@sample +ss0=spl0; ss1=spl1; +s0=0; +s1=0; + + +splbuf=1024; +tbufsize=bufsize; +posbuf=0; +rrilen_l=rrilen; +rspos_l = rspos; +invbs_l = invbs; + +loop(subdivide, + + bufpos = posbuf[0]; + + hbp=((bufpos * scl)|0)*2; + + // pre read these before writing + s0r=splbuf[2*rrilen_l+hbp]; + s1r=splbuf[2*rrilen_l+hbp+1]; + + splbuf[bufpos*2]=spl0; + splbuf[bufpos*2+1]=spl1; + + bufpos < rspos_l ? + ( + // mix + sc=bufpos*invbs_l; + s0+=splbuf[hbp]*sc + s0r*(1-sc); + s1+=splbuf[hbp+1]*sc + s1r*(1-sc); + ) : ( + // straight resample + s0+=splbuf[hbp]; + s1+=splbuf[hbp+1]; + ); + (bufpos+=1) >= tbufsize ? bufpos=0; + + posbuf[0] = bufpos; + posbuf += 1; + + splbuf += tbufsize*2+1024; + + + invbs_l *= isdfact; + tbufsize *= sdfact; + rspos_l *= sdfact; + rrilen_l = (rrilen_l*sdfact)|0; + +); + + +spl0 = s0*wetmix + ss0*drymix; +spl1 = s1*wetmix + ss1*drymix; diff --git a/Effects/pitch/pitchdown b/Effects/pitch/pitchdown new file mode 100644 index 0000000..02e74e6 --- /dev/null +++ b/Effects/pitch/pitchdown @@ -0,0 +1,60 @@ +// This effect Copyright (C) 2004 and later Cockos Incorporated +// License: LGPL - http://www.gnu.org/licenses/lgpl.html + +desc: Pitch Down-Shifter +//tags: processing pitch +//author: Cockos + +slider1:1<0,6,1>Octaves Down +slider2:0<0,11,1>Semitones Down +slider3:0<0,99,1>Cents Down +slider4:100<4,500,10>Chunk Size (ms) +slider5:1<0.001,1>Overlap Size +slider6:0<-120,6,1>Wet Mix (dB) +slider7:-120<-120,6,1>Dry Mix (dB) + +in_pin:left input +in_pin:right input +out_pin:left output +out_pin:right output + +@slider + lbufsize=bufsize; bufsize=(srate*0.001*slider4)&65534; + lbufsize!=bufsize ? bufpos=0; + scl=2 ^ (-(slider1 + slider2/12 + slider3/1200)); + rilen=(max(scl,0.5)*bufsize)|0; + rrilen=((scl*bufsize)|0)*2; + slider5=min(1,max(slider5,0)); + rspos=slider5*(bufsize-rilen); + invbs=1/rspos; + drymix=2 ^ (slider7/6); + wetmix=2 ^ (slider6/6); + +@sample +ss0=spl0; ss1=spl1; + +hbp=((bufpos * scl)|0)*2; + +// pre read these before writing +s0r=rrilen[hbp]; +s1r=rrilen[hbp+1]; + +(bufpos*2)[0]=spl0; +(bufpos*2)[1]=spl1; + +bufpos < rspos ? +( + // mix + sc=bufpos*invbs; + spl0=hbp[0]*sc + s0r*(1-sc); + spl1=hbp[1]*sc + s1r*(1-sc); +) : ( + // straight resample + spl0=hbp[0]; + spl1=hbp[1]; +); + +(bufpos+=1) >= bufsize ? bufpos=0; + +spl0 = spl0*wetmix + ss0*drymix; +spl1 = spl1*wetmix + ss1*drymix; diff --git a/Effects/pitch/superpitch b/Effects/pitch/superpitch new file mode 100644 index 0000000..8e2e818 --- /dev/null +++ b/Effects/pitch/superpitch @@ -0,0 +1,135 @@ +desc: Pitch Shifter 2 +//tags: processing pitch +//author: Cockos + +slider1:0<-100,100,1>Pitch Adjust (cents) +slider2:0<-12,12,1>Pitch Adjust (st) +slider3:0<-12,12,1>Pitch Adjust (oct) +slider4:50<0,200,1>Window Size (ms) +slider5:20<0.05,50,0.5>Overlap Size (ms) +slider6:0<-120,6,1>Wet Mix (dB) +slider7:-120<-120,6,1>Dry Mix (dB) +slider8:1<0,1,1{No,Yes}>Filter + +in_pin:left input +in_pin:right input +out_pin:left output +out_pin:right output + +@init + bufsize = srate|0; + xfade=100; + bufloc0 = 10000; + bufloc1 = bufloc0+bufsize+1000; + + buffer0 = bufloc0; + buffer1 = bufloc1; + bufdiff=bufloc1-bufloc0; + pitch=1.0; + denorm=10^-20; + +@slider + filter=slider8>0.5; + bsnew=(min(slider4,1000)*0.001*srate)|0; + bsnew!=bufsize ? + ( + bufsize = bsnew; + v0=buffer0+bufsize*0.5; + v0 > bufloc0 + bufsize? v0-=bufsize; + ); + + xfade=(slider5*0.001*srate)|0; + xfade>bsnew*0.5 ? xfade=bsnew*0.5; + + npitch=2^((slider2+slider1*0.01)/12+slider3); + pitch!=npitch ? ( + pitch=npitch; + lppos=pitch > 1.0 ? 1.0/pitch : pitch; + lppos< (.1/srate) ? lppos=.1/srate; + r=1.0; + c = 1.0 / tan($pi * lppos * 0.5); + a1 = 1.0 / ( 1.0 + r * c + c * c); + a2 = 2*a1; + a3 = a1; + b1 = 2.0 * ( 1.0 - c*c) * a1; + b2 = ( 1.0 - r * c + c * c) * a1; + h01=h02=h03=h04=0; + h11=h12=h13=h14=0; + ); + drymix = 2 ^ (slider7/6); + wetmix = 2 ^ (slider6/6); + +@sample + iv0=0|(v0); frac0=v0-iv0; + iv02 = iv0 >= (bufloc0+bufsize-1) ? iv0-bufsize+1 : iv0+1; + + ren0=(iv0[0]*(1-frac0)+iv02[0]*frac0); + ren1=(iv0[bufdiff]*(1-frac0)+iv02[bufdiff]*frac0); + vr=pitch; + + vr >= 1.0 ? + ( + tv=v0; + tv>buffer0?tv-=bufsize; + (tv >= buffer0-xfade && tv < buffer0) ? ( + // xfade + frac=(buffer0-tv)/xfade; + tmp=v0+xfade; + tmp>=bufloc0+bufsize?tmp-=bufsize; + tmp2=tmp>=bufloc0+bufsize-1?bufloc0:tmp+1; + ren0 = ren0*frac + (1-frac)*( tmp[0]*(1-frac0)+tmp2[0]*frac0 ); + ren1 = ren1*frac + (1-frac)*( tmp[bufdiff]*(1-frac0)+tmp2[bufdiff]*frac0 ); + tv+vr > buffer0+1 ? v0+=xfade; + ); + ) : ( // read pointer moving slower than write pointer + tv=v0; + tv= buffer0 && tv < buffer0+xfade) ? ( + // xfade + frac=(tv-buffer0)/xfade; + tmp=v0+xfade; + tmp>=bufloc0+bufsize?tmp-=bufsize; + tmp2=tmp>=bufloc0+bufsize-1?bufloc0:tmp+1; + ren0 = ren0*frac + (1-frac)*( tmp[0]*(1-frac0)+tmp2[0]*frac0 ); + ren1 = ren1*frac + (1-frac)*( tmp[bufdiff]*(1-frac0)+tmp2[bufdiff]*frac0 ); + tv+vr < buffer0+1 ? v0+=xfade; + ); + ); + + + ((v0+=vr) >= (bufloc0+bufsize)) ? v0 -= bufsize; + + os0=spl0; os1=spl1; + filter && pitch>1.0? + ( + t0=spl0; t1=spl1; + spl0=a1*spl0 + a2*h01 + a3*h02 - b1*h03 - b2*h04 + denorm; + spl1=a1*spl1 + a2*h11 + a3*h12 - b1*h13 - b2*h14 + denorm; + h02=h01; h01=t0; + h12=h11; h11=t1; + h04=h03; h03=spl0; + h14=h13; h13=spl1; + ); + + + buffer0[0] = spl0; // write after reading it to avoid clicks + buffer0[bufdiff] = spl1; + + spl0 = ren0 * wetmix; + spl1 = ren1 * wetmix; + + filter && pitch<1.0? + ( + t0=spl0; t1=spl1; + spl0=a1*spl0 + a2*h01 + a3*h02 - b1*h03 - b2*h04 + denorm; + spl1=a1*spl1 + a2*h11 + a3*h12 - b1*h13 - b2*h14 + denorm; + h02=h01; h01=t0; + h12=h11; h11=t1; + h04=h03; h03=spl0; + h14=h13; h13=spl1; + ); + + spl0+=os0*drymix; + spl1+=os1*drymix; + + ((buffer0+=1) >= (bufloc0 + bufsize)) ? buffer0 -= bufsize; diff --git a/Effects/remaincalm_org/avocado_glitch b/Effects/remaincalm_org/avocado_glitch new file mode 100644 index 0000000..cf1cfad --- /dev/null +++ b/Effects/remaincalm_org/avocado_glitch @@ -0,0 +1,270 @@ +// License: GPL - http://www.gnu.org/licenses/gpl.html +// avocado (ducking glitch generator) +// by daniel arena (dan@remaincalm.org) +// http://remaincalm.org +// 2008/09/16 - first version! contact me with bugs etc +// 2008/09/20 - updated: tempo sync, handle slider and buffer changes more gracefully + +desc: Avocado Ducking Glitch Generator +desc: Avocado Ducking Glitch Generator [remaincalm.org] +//tags: processing mangler glitch +//author: remaincalm.org + +slider1:50<0,4000,1>Buffer Length (ms) +slider2:90<0,100,1>Mix (%) +slider3:8<1,16,1>Buffers +slider4:70<0,99,1>Repeat Probability (%) +slider5:5<0,100,1>Pitch Modulation Probability (%) +slider6:10<0,99,1>Reverse Probability (%) +slider7:18<0,99,1>Fadeout Probability (%) +slider8:8<0,99,1>Threshold (%) +slider9:15<0,99,1>Glitch Attack (%) +slider10:0<0,4,1{Off,Major,Minor,Fifths,Octaves}>Arpeggiator Mode +slider11:0<0,64,1>Tempo Sync (64th notes, 0 to disable) +//slider12:0<0,100,1>Modulate Buffer Length + +in_pin:left input +in_pin:right input +out_pin:left output +out_pin:right output + +@init +pi = 3.141592653589793; +fade_samples = 48; // controls fade in/out on buffer playback +play_rate = 1; +max_bufsiz = ceil(4000 * srate / 1000); +max_buffers = 16; +r_offset = max_bufsiz * max_buffers + 1; +notedata_offset = r_offset * 2; +sync_counter = 0; +is_recording = 0; +playback_buffer = 0; +playback_csr = 0; +record_buffer = 0; +record_csr = 0; + +@block +(slider11 > 0 && tempo > 0) ? +( + (slider1 | 0 != (1000 * slider11 * 60/16/tempo) | 0) ? + (slider1 = 1000 * slider11 * 60/16/tempo;); +); +//slider12 = can_start_rec_or_play; + +@slider +bufsiz = slider1 * srate / 1000; + +// arpeg data major +(slider10 == 1) ? +( + // 1.18920 -- minor + max_arpeg = 4; + note[notedata_offset + 0] = 1; + note[notedata_offset + 1] = 1.25993; + note[notedata_offset + 2] = 1.49830; + note[notedata_offset + 3] = 2; +); +// arpeg data minor +(slider10 == 2) ? +( + // 1.18920 -- minor + max_arpeg = 4; + note[notedata_offset + 0] = 1; + note[notedata_offset + 1] = 1.18920; + note[notedata_offset + 2] = 1.49830; + note[notedata_offset + 3] = 2; +); +// arpeg data fifths +(slider10 == 3) ? +( + // 1.33485 -- ? + max_arpeg = 3; + note[notedata_offset + 0] = 1; + note[notedata_offset + 1] = 1.49830; + note[notedata_offset + 2] = 2; +); +// arpeg data octaves +(slider10 == 4) ? +( + // 1.33485 -- ? + max_arpeg = 3; + note[notedata_offset + 0] = 1; + note[notedata_offset + 1] = 2; + note[notedata_offset + 2] = 3; +); + + +@sample +/* +record: + if rnd() > ?, start recording else stop recording. + if recording, add to buffer. if buffer full, stop recording. +*/ +// if we're beat syncing, only record on start of beat etc +can_start_rec_or_play = (old_tempo == tempo && old_slider1 == slider1) ? can_start_rec_or_play : false; +can_start_rec_or_play = can_start_rec_or_play || (slider11 == 0); +can_start_rec_or_play = can_start_rec_or_play || (((beat_position * 256) | 0) == ((beat_position | 0) * 256)); +old_tempo = tempo; +old_slider1 = slider1; + +(is_recording) ? +( + buffer[max_bufsiz*record_buffer + record_csr] = spl0; + buffer[r_offset + max_bufsiz*record_buffer + record_csr] = spl1; + record_csr += 1; + + record_csr > bufsiz ? + ( + // TODO: measure volume level of that block + is_recording = false; + + // resync occasionally (every 16 sec) + sync_counter += 1; + (slider11 > 0 && sync_counter > srate * 16 / bufsiz) ? + ( + sync_counter = 0; + can_start_rec_or_play = 0; + ); + + ); + +): +( + can_start_rec_or_play ? + ( + // start recording + record_buffer = floor(rand(slider3)); + record_csr = 0; + is_recording = 1; + ); +); + + +/* +playback: + if buffer ended, choose either same buffer or a new buffer + play selected buffer +*/ +playback_csr = (can_start_rec_or_play) ? playback_csr : 0; +floor(playback_csr) > bufsiz ? +( + playback_csr = 0; + + // TODO: try and choose a block that matches last input volume level? + + rand(100) > slider4 ? + ( + playback_buffer = floor(rand(slider3)); + ); + + // change rate + (slider10 > 0) ? /* c64 style! */ + ( + play_rate = note[notedata_offset + arpeg_idx]; + arpeg_idx = (arpeg_idx + 1) % max_arpeg; + + //play_rate = (play_rate == 1) ? 1.25993 : (play_rate == 1.25993) ? 2 : 1; + ) : ( + // normal! + play_rate = 1; + (rand(100)> 110 - slider5) ? + ( + play_rate = 2; + ); + ) ; + + // mutilation options + // reverse block? + ( rand(100)> 105 - slider6) ? + ( + i=0; + loop + (ceil(bufsiz/2 - 2), + start_pos = max_bufsiz*playback_buffer + i; + end_pos = max_bufsiz*playback_buffer + bufsiz - i - 1; + swapL = buffer[start_pos]; + swapR = buffer[r_offset + start_pos]; + buffer[start_pos] = buffer[end_pos]; + buffer[r_offset + start_pos] = buffer[r_offset + end_pos]; + buffer[end_pos] = swapL; + buffer[r_offset + end_pos] = swapR; + i += 1; + ); + ); + + // quieten block? + ( rand(100)> 105 - slider7) ? + ( + i=0; + loop + (ceil(bufsiz), + buffer[max_bufsiz*playback_buffer + i] *= 0.85; + buffer[r_offset + max_bufsiz*playback_buffer + i] *= 0.85; + i += 1; + ); + ); +); + +// fade edges +mult = 1; + +(floor(playback_csr) < fade_samples) ? +( + mult = floor(playback_csr)/fade_samples; +) : +( + (floor(playback_csr) > bufsiz - fade_samples) ? + ( + mult = (bufsiz - floor(playback_csr) - 1)/fade_samples; + ); +); + +// calculate raw output +tmpL = mult * buffer[max_bufsiz*playback_buffer + floor(playback_csr)]; +tmpR = mult * buffer[r_offset + max_bufsiz*playback_buffer + floor(playback_csr)]; + +// move cursor +playback_csr += play_rate; + + +// TODO: filter? + +// calculate threshold - moving slightly to correct for input level +(max(abs(spl1),abs(spl0)) > thresh) ? +( + thresh = thresh * 0.9 + 0.1 * max(abs(spl1),abs(spl0)); +) : +( + thresh = thresh * 0.98 + 0.02 * max(abs(spl1),abs(spl0)); +); +(thresh > max(slider8/100, max_thresh * slider8/65)) ? +( + target_gain = 1; +) : ( + target_gain = 1 - (slider2/100); +); +max_thresh = (thresh > max_thresh) ? max(max_thresh, max_thresh * 0.1 + thresh * 0.9) : max_thresh * 0.99998; + +// output mix +(target_gain > gain) ? +( + gain = gain * 0.95 + 0.05 * target_gain; +) : +( + gain = gain * (1 - slider9 / 100000) + slider9 / 100000 * target_gain; +); +last_gain = gain; + +// output +(can_start_rec_or_play) ? +( + spl0 = spl0 * gain + tmpL*(1-gain); + spl1 = spl1 * gain + tmpR*(1-gain); +) : +( + spl0 = spl0;// * gain + tmpL*(1-gain); + spl1 = spl1; // * gain + tmpR*(1-gain); +); + + + diff --git a/Effects/remaincalm_org/floaty_delay b/Effects/remaincalm_org/floaty_delay new file mode 100644 index 0000000..3a8c2c0 --- /dev/null +++ b/Effects/remaincalm_org/floaty_delay @@ -0,0 +1,150 @@ +// License: GPL - http://www.gnu.org/licenses/gpl.html +// floaty (modulated delay) +// by daniel arena (dan@remaincalm.org) +// http://remaincalm.org +// 2008/09/16 - first version! contact me with bugs etc +// 2008/09/20 - updated: less glitching on overlap, tempo sync (backward compatible) +// 2008/10/04 - updated: L/R offset +// 2009/10/08 - updated: fixed bug where L/R offset active with playrate != 1, tweaked clamping behaviour (default = old behaviour) +// 2009/10/09 - updated: fixed default clamp value + +desc: Delay (Floaty) +desc: Floaty (Modulated Delay) [remaincalm.org] +//tags: delay modulation mangler +//author: remaincalm.org + +slider1:250<0,4000,1>Delay (ms) +slider2:40<0,100,1>Mix (%) +slider3:30<0,80,1>Feedback (%) +slider4:0.1<0,10,0.001>Warp Rate (Hz) +slider5:0.5<0,4,0.1>Warp Amount (%) +slider6:80<0,100,1>Filter Cutoff (%) +slider7:80<0,150,1>Filter Resonance (%) +slider8:1<-2,2,0.5>Playback Rate +slider9:0<0,64,1>Tempo Sync (32nd notes, 0 to disable) +slider10:98<70,100,1>L/R Offset (%) +slider11:6<-12,12,0.1>Pre-Filter Clamp (dB) + +in_pin:left input +in_pin:right input +out_pin:left output +out_pin:right output + +@init +pi = 3.141592653589793; +old_delaysiz = -1; +reset = 1; +clamp = 2; // ugly limiter (pre-filter) +target_clamp = clamp; +smooth_overlap = 128; // smooth out if rec/play csr overlap + +@block +(slider9 > 0 && tempo > 0) ? +( + slider1 = 1000 * slider9 * 60/8/tempo; +); + +@slider + +delaysiz = (slider1 * srate / 1000)|0; +bufsiz = delaysiz*4; //max(delaysiz, srate); +(delaysiz != old_delaysiz || slider8 != old_slider8 || slider4 != old_slider4 || slider10 != old_slider10 ) ? +( + play_csr = 0; + rec_csrL = delaysiz-2 ; + rec_csrR = (slider10 * rec_csrL / 100) | 0; + t = 0; + reset = 1; + old_delaysiz = delaysiz; + old_slider8 = slider8; + old_slider4 = slider4; + old_slider10 = slider10; +); + +rate = 2*pi*slider4/srate; + +// RC filter params (hi/lo) +LPF_c = 0.5^(5-(slider6/25)); +LPF_r = 0.5^((slider7/40)-0.6); +HPF_c = 0.5^4.8; +HPF_r = 0.5^(3-(slider7/40)); + +// update clamp value +target_clamp = 2 ^ (slider11/6); + + +@sample + +// move play head +lplay_csr = play_csr; +play_csr += (reset>0) ? slider8 : (slider8 + (slider5/100) * sin(t)); +t+= (reset>0) ? 0 : rate; +reset = (play_csr >= bufsiz) ? 0 : reset; // allow one full record cycle before modulation +play_csr += (play_csr >= bufsiz) ? -bufsiz: 0; +play_csr += (play_csr < 0) ? bufsiz: 0; + +play_csr_0 = 0|play_csr; +play_csr_1 = (play_csr_0+1 == bufsiz) ? 0 : play_csr_0+1; + +// get from play head +frac0= play_csr - play_csr_0; +tmpL = (buf[play_csr_0] * (1-frac0) + buf[play_csr_1] * (frac0)); +tmpR = (buf[play_csr_0+bufsiz] * (1-frac0) + buf[play_csr_1+bufsiz] * (frac0)); + +// clean up if play/rec overlapping +overlap_distL = abs((play_csr % bufsiz) - (rec_csrL % bufsiz)); +overlap_multL = (overlap_distL >= smooth_overlap) ? 1 : overlap_distL/smooth_overlap; + +overlap_distR = abs((play_csr % bufsiz) - (rec_csrR % bufsiz)); +overlap_multR = (overlap_distR >= smooth_overlap) ? 1 : overlap_distR/smooth_overlap; + +tmpL *= overlap_multL; +tmpR *= overlap_multR; + +// clamp (before filter!) +// updated +(clamp != target_clamp) ? (clamp = 0.8 * clamp + 0.2 * target_clamp) ; +(abs(tmpL) > clamp) ? ( tmpL = (tmpL > 0) ? clamp : -clamp ); +(abs(tmpR) > clamp) ? ( tmpR = (tmpR > 0) ? clamp : -clamp ); + + +// run filter +(slider6 > 0 && slider7 > 0) ? +( + // new lpf + v0L = (1 - LPF_r*LPF_c)*v0L - LPF_c*v1L + LPF_c*tmpL; + v1L = (1 - LPF_r*LPF_c)*v1L + LPF_c*v0L; + tmpL = v1L; + + // new hpf + hv0L = (1 - HPF_r*HPF_c)*hv0L - HPF_c*hv1L + HPF_c*tmpL; + hv1L = (1 - HPF_r*HPF_c)*hv1L + HPF_c*hv0L; + tmpL -= hv1L; + + // new lpf + v0R = (1 - LPF_r*LPF_c)*v0R - LPF_c*v1R + LPF_c*tmpR; + v1R = (1 - LPF_r*LPF_c)*v1R + LPF_c*v0R; + tmpR = v1R; + + // new hpf + hv0R = (1 - HPF_r*HPF_c)*hv0R - HPF_c*hv1R + HPF_c*tmpR; + hv1R = (1 - HPF_r*HPF_c)*hv1R + HPF_c*hv0R; + tmpR -= hv1R; +); + +// store and feedback +buf[rec_csrL]= tmpL * slider3/100 + spl0; +buf[rec_csrR+bufsiz]= tmpR * slider3/100 + spl1; + +// move rec head +rec_csrL += 1; +rec_csrL += (rec_csrL >= bufsiz) ? -bufsiz : 0; +rec_csrL += (rec_csrL < 0) ? bufsiz : 0; + +rec_csrR += 1; +rec_csrR += (rec_csrR >= bufsiz) ? -bufsiz : 0; +rec_csrR += (rec_csrR < 0) ? bufsiz : 0; + +// output +spl0 = tmpL*(slider2/100) + spl0*(1-(slider2/100)); +spl1 = tmpR*(slider2/100) + spl1*(1-(slider2/100)); diff --git a/Effects/remaincalm_org/paranoia_mangler b/Effects/remaincalm_org/paranoia_mangler new file mode 100644 index 0000000..8dc9ed1 --- /dev/null +++ b/Effects/remaincalm_org/paranoia_mangler @@ -0,0 +1,352 @@ +// License: GPL - http://www.gnu.org/licenses/gpl.html +// paranoia (destructive mangler) +// by daniel arena (dan@remaincalm.org) +// http://remaincalm.org + +desc:Paranoia Mangler +desc:paranoia mangler [remaincalm.org] +//tags: lo-fi distortion filter mangler +//author: remaincalm.org + +slider1:0<-24,12,1>Input Gain (dB) +slider2:-3<-96,12,1>Dry Out (dB) +slider3:-3<-96,12,1>Wet Out (dB) +slider4:12000<125,33150,1>Bad Resampler (Hz) +slider5:1<0,2,1{Off,On,On+Noisier}>Bitcrusher +slider6:0<0,16,0.01>Thermonuclear War +slider7:8<3,10,1>Bitdepth +slider8:0<0,100,1>Gate (%) +slider13:75<0,100,1>Love (%) +slider14:15<0,150,1>Jive (%) +slider15:1<0,3,1{No,Murky,Confused,Unpleasant}>Attitude + +in_pin:left input +in_pin:right input +out_pin:left output +out_pin:right output + +@init +itm1=itm2=otm1=otm2=0; + +dcshift = 1; + +// bit patterns +relgain=0; +lut_start=128; +lut=lut_start; +lut[7]=1;lut[6]=1;lut[5]=1;lut[4]=1; +lut[3]=1;lut[2]=1;lut[1]=1;lut[0]=1; +relgain[0]=1.0; + +lut+=16; +lut[7]=1;lut[6]=1;lut[5]=1;lut[4]=1; +lut[3]=1;lut[2]=1;lut[1]=1;lut[0]=0; +relgain[1]=1.0; + +lut+=16; +lut[7]=1;lut[6]=1;lut[5]=1;lut[4]=1; +lut[3]=1;lut[2]=1;lut[1]=1;lut[0]=-1; +relgain[2]=1.0; + +lut+=16;; +lut[7]=1;lut[6]=1;lut[5]=1;lut[4]=1; +lut[3]=1;lut[2]=1;lut[1]=0;lut[0]=1; +relgain[3]=1.0; + +lut+=16;; +lut[7]=1;lut[6]=1;lut[5]=1;lut[4]=1; +lut[3]=1;lut[2]=1;lut[1]=-1;lut[0]=1; +relgain[4]=1.0; + +lut+=16;; +lut[7]=1;lut[6]=1;lut[5]=1;lut[4]=1; +lut[3]=1;lut[2]=0;lut[1]=0;lut[0]=1; +relgain[5]=1.0; + +lut+=16;; +lut[7]=1;lut[6]=1;lut[5]=1;lut[4]=1; +lut[3]=1;lut[2]=1;lut[1]=-1;lut[0]=-1; +relgain[6]=1.0; + +lut+=16;; +lut[7]=1;lut[6]=1;lut[5]=1;lut[4]=-1; +lut[3]=1;lut[2]=1;lut[1]=1;lut[0]=1; +relgain[7]=0.4 ; + +lut+=16;; +lut[7]=1;lut[6]=1;lut[5]=0;lut[4]=1; +lut[3]=1;lut[2]=1;lut[1]=1;lut[0]=1; +relgain[8]=0.08; + +lut+=16;; +lut[7]=0;lut[6]=-1;lut[5]=1;lut[4]=0; +lut[3]=-1;lut[2]=0;lut[1]=-1;lut[0]=1; +relgain[9]=0.5; + +lut+=16; +lut[7]=-1;lut[6]=-1;lut[5]=1;lut[4]=1; +lut[3]=-1;lut[2]=1;lut[1]=-1;lut[0]=1; +relgain[10]=0.08; + +lut+=16; +lut[7]=0;lut[6]=0;lut[5]=0;lut[4]=0; +lut[3]=1;lut[2]=0;lut[1]=0;lut[0]=0; +relgain[11]=1.5; +lut+=16;; +lut[7]=0;lut[6]=0;lut[5]=0;lut[4]=0; +lut[3]=0;lut[2]=-1;lut[1]=0;lut[0]=1; +relgain[12]=3; +lut+=16;; +lut[7]=0;lut[6]=0;lut[5]=1;lut[4]=1; +lut[3]=0;lut[2]=0;lut[1]=-1;lut[0]=1; +relgain[13]=0.2; +lut+=16;; +lut[7]=0;lut[6]=0;lut[5]=0;lut[4]=1; +lut[3]=1;lut[2]=-1;lut[1]=0;lut[0]=-1; +relgain[14]=2; +lut+=16;; +lut[7]=0;lut[6]=0;lut[5]=0;lut[4]=0; +lut[3]=1;lut[2]=1;lut[1]=-1;lut[0]=-1; +relgain[15]=1.0; +lut+=16;; +lut[7]=0;lut[6]=0;lut[5]=0;lut[4]=0; +lut[3]=1;lut[2]=1;lut[1]=1;lut[0]=1; +relgain[16]=1.0; + +// waveshapes +shaper_amt = 0.857; + +// less waveshaping here +shaper_amt_2 = 0.9; + +@slider + +// gate params + +gate_amt = slider8 / 100; +gate_open_time = (0.05 + (1-gate_amt)*0.3) * srate; +fade_point = gate_open_time * 0.5; +gate_threshold =(0.15 + gate_amt *0.25); +gate_leakage = (gate_amt > 0.5) ? 0 : (1-gate_amt)*0.2; + +bitdepth = slider7; +resol=2^(bitdepth-1); +invresl=1/resol; + +target_per_sample = srate / slider4; +//sample_csr = 0; +//next_sample = target_per_sample; + +gain=2^(slider1/6); +dry_gain=2^(slider2/6); +wet_gain=2^(slider3/6); + +// get lookup + +left_bit_slider = slider6 | 0; +mix = slider6-left_bit_slider; +right_bit_slider = (mix>0) ? left_bit_slider + 1 : left_bit_slider; + + + +bit_1=lut_start + left_bit_slider*16; +bit_2=lut_start + right_bit_slider*16; + + +(bitdepth<8)? +loop(8-bitdepth, +(bit_1+=1;bit_2+=1;); +); + +(bitdepth>8)? +loop(bitdepth-8, +bit_1-=1;bit_2-=1;bit_1[0]=1;bit_2[0]=1; +); + +clear_mask_1 = 0; +xor_mask_1 = 0; +clear_mask_2 = 0; +xor_mask_2 = 0; +i = 0; +loop(bitdepth, + (bit_1[i]==0)?clear_mask_1 = (clear_mask_1 | (2^i)); + (bit_2[i]==0)?clear_mask_2 = (clear_mask_2 | (2^i)); + (bit_1[i]==-1)?(xor_mask_1 = xor_mask_1 | 2^i;); + (bit_2[i]==-1)?(xor_mask_2 = xor_mask_2 | 2^i;); + i+=1; +); + +post_bit_gain=relgain[left_bit_slider] * (1-mix) + relgain[right_bit_slider]*mix; + +// RC filter params (hi/lo) +LPF_c = 0.5^(5-(slider13/25)); +LPF_r = 0.5^((slider14/40)-0.6); +HPF_c = 0.5^(5-(slider13/32)); +HPF_r = 0.5^(3-(slider14/40)); + + // precalc +Lrc = LPF_r*LPF_c; +Hrc = HPF_r*HPF_c; + +@sample + +dry0 = spl0; +dry1 = spl1; + +per_sample = 0.9995* per_sample + 0.0005 * target_per_sample; + + +// deliberately broken resampler +// (BAD DIGITAL) +sample_csr += 1; +(sample_csr < next_sample && slider4 < 33150) ? ( + + spl0 = last_spl0; + spl1 = last_spl1; + +) : ( + + + + // for resampler - this doesn't work properly but sounds cool + next_sample += per_sample; + (slider4 == 33150) ? (sample_csr = next_sample); + + // gain + s0 = spl0*gain; + s1 = spl1*gain; + + // simple gate + (slider8 > 0) ? ( + + detector = abs(s0)*0.15 + abs(s1)*0.15 + detector*0.7; + (detector > gate_threshold) ? ( + // open gate + gate_open = gate_open_time; + ); + + // gate open + gate_gain = 1; + (gate_open <= fade_point) ? ( + (gate_open <= 0) ? ( + // hard close + gate_gain = gate_leakage; + ) : ( + // fade out + gate_gain = gate_leakage + (1-gate_leakage) * (fade_point - gate_open)/fade_point; + ) + ); + + gate_open -= 1; + s0 *= gate_gain; + s1 *= gate_gain; + ); + + // and shape + s0 = (1+shaper_amt)*s0/(1+shaper_amt*abs(s0)); + s1 = (1+shaper_amt)*s1/(1+shaper_amt*abs(s1)); + + // clamp + s0 = max(min(s0,0.95),-0.95); + s1 = max(min(s1,0.95),-0.95); + + + (slider5>0) ? ( + (slider5==2) ? ( + // boost to positive range, 0->255 + // SOMETHING GOES WRONG HERE + s0 = ((dcshift + s0) * resol) | 0; + s1 = ((dcshift + s1) * resol) | 0; + ) : ( + // boost to positive range, -resol to +resol-1 + s0 = (s0 * resol) | 0; + s1 = (s1 * resol) | 0; + + // 2s complement + (s0<0)?(s0=(2^bitdepth)+s0); + (s1<0)?(s1=(2^bitdepth)+s1); + ); + + (slider6>0)?( + + // mangle + s0A = s0 & (1023-clear_mask_1); + s1A = s1 & (1023-clear_mask_1); + s0A = (s0A & (1023-xor_mask_1)) | ((1023-s0A) & xor_mask_1); + s1A = (s1A & (1023-xor_mask_1)) | ((1023-s1A) & xor_mask_1); + s0B = s0 & (1023-clear_mask_2); + s1B = s1 & (1023-clear_mask_2); + s0B = (s0B & (1023-xor_mask_2)) | ((1023-s0B) & xor_mask_2); + s1B = (s1B & (1023-xor_mask_2)) | ((1023-s1B) & xor_mask_2); + + s0 = s0A * (1-mix) + s0B * mix; + s1 = s1A * (1-mix) + s1B * mix; + + ); + + (slider5==2) ? ( + // revert + s0 = (s0 * invresl - dcshift); + s1 = (s1 * invresl - dcshift); + ) : ( + // revert + s0 = (s0 * invresl); + s1 = (s1 * invresl); + (s0>=1.0)?(s0=s0-2); + (s1>=1.0)?(s1=s1-2); + ); + ); + + spl0 = s0; + spl1 = s1; + + // remember last sample + last_spl0 = spl0; + last_spl1 = spl1; + +); + +// LPF +(slider15 == 1 || slider15 == 2) ? +( + v0L = (1 - Lrc)*v0L - LPF_c*(v1L - spl0); + v1L = (1 - Lrc)*v1L + LPF_c*v0L; + spl0 = v1L; + v0R = (1 - Lrc)*v0R - LPF_c*(v1R - spl1); + v1R = (1 - Lrc)*v1R + LPF_c*v0R; + spl1 = v1R; +); + + +// HPF +(slider15 == 2 || slider15 == 3) ? +( + hv0L = (1 - Hrc)*hv0L - HPF_c*(hv1L - spl0); + hv1L = (1 - Hrc)*hv1L + HPF_c*hv0L; + spl0 -= hv1L; + hv0R = (1 - Hrc)*hv0R - HPF_c*(hv1R - spl1); + hv1R = (1 - Hrc)*hv1R + HPF_c*hv0R; + spl1 -= hv1R; +); + +// waveshape again, just because +spl0 = wet_gain * spl0; +spl1 = wet_gain * spl1; +spl0 = (1+shaper_amt_2)*spl0/(1+shaper_amt_2*abs(spl0)); +spl1 = (1+shaper_amt_2)*spl1/(1+shaper_amt_2*abs(spl1)); + + +// dc filter +otm1=0.99*otm1 + spl0 - itm1; itm1=spl0; spl0=otm1; +otm2=0.99*otm2 + spl1 - itm2; itm2=spl1; spl1=otm2; + +// try and handle weird bit pattern supergain +(slider5>0)?( + spl0 = spl0 * post_bit_gain; + spl1 = spl1 * post_bit_gain; +); + +// mix +spl0 = spl0 + dry0 * dry_gain; +spl1 = spl1 + dry1 * dry_gain; + diff --git a/Effects/remaincalm_org/paranoia_mangler.rpl b/Effects/remaincalm_org/paranoia_mangler.rpl new file mode 100644 index 0000000..4e60946 --- /dev/null +++ b/Effects/remaincalm_org/paranoia_mangler.rpl @@ -0,0 +1,90 @@ + + + + + + + + + + + +> diff --git a/Effects/remaincalm_org/tonegate b/Effects/remaincalm_org/tonegate new file mode 100644 index 0000000..8173aff --- /dev/null +++ b/Effects/remaincalm_org/tonegate @@ -0,0 +1,159 @@ +// License: GPL - http://www.gnu.org/licenses/gpl.html +// cobbled together from a bunch of other plugins - tonegenerator, noisegate, lowpassfilter, +// plus some more bits +// by daniel arena (dan@remaincalm.org) +// http://remaincalm.org +// yay! +// 2008/04/23 - added dynamic pitch + +desc: Tone Gate +desc: Tone Gate [remaincalm.org] +//tags: generator processing gate +//author: remaincalm.org + +// tone gen +slider1:-15<-120,6,1>Wet Mix (dB) +slider2:-3<-120,6,1>Dry Mix (dB) +slider3:80<20,400,1>Frequency (Hz) +slider4:0<0,2,1{Sine,Square,Noise}>Waveform +slider5:1000<50,10000>Lowpass (Hz) +slider6:-20<-120,6,1>Threshold (dB) +slider7:50<1,4000,10>Silence Length For Fadeout (ms) +slider8:10<1,100,5>Fade In Response (ms) +slider9:100<1,1000,10>Fade Out Response (ms) +slider10: 0<0,4,1{Normal,Div 2,Div 4,Mult 2,Mult 4}>Dynamic Pitch + +in_pin:left input +in_pin:right input +out_pin:left output +out_pin:right output + +@init +// sin +silentcnt=0; +seekv=0; seekto=0; +a = 0; + + +@slider +// gate +thresh=2 ^ (slider6/6); +sillen=slider7*srate/1000; +fadeout = 1/pow(10,1/(srate*slider9/1000)); +fadein = 1/pow(10,1/(srate*slider8/1000)); +// gen +vol=2 ^ (slider1/6); +dry=2 ^ (slider2/6); +adj=2*$pi* slider3 / srate; +// filter +damp=0.01+0.2*20; +c = 1/tan($pi*slider5/srate); +fk = 1 / (1 + c*(c+damp)); +fa1 = 2 * (1 - c*c) * fk; +fa0 = (1 + c*(c-damp)) * fk; +oldamp=damp; + +// generator cursor and freq +init_freq = slider3; +decaytime = fadeout/4; + +// pitch mode +slider10 == 0 ? +( + final_freq = init_freq; +); +slider10 == 1 ? +( + final_freq = 0.5*init_freq; +); +slider10 == 2 ? +( + final_freq = 0.25*init_freq; +); +slider10 == 3 ? +( + final_freq = 2*init_freq; +); +slider10 == 4 ? +( + final_freq = 4*init_freq; +); + + +@sample +// gate - detector +a=abs(spl0) > thresh || abs(spl1) > thresh; +// fire sample! +a ? +( + silentcnt=0; + seekto=1; +) : ( + (silentcnt+=1) > sillen ? seekto=0; +); + +// we should make this better, me thinks + +seekto > 0.5 ? +( // fading in + seekv=seekv*fadein + (1-fadein); +) +: +( // fading out + seekv=seekv*fadeout; +); + + +//generator +oldspl0 = spl0; +oldspl1 = spl1; + + +(silentcnt < (srate * decaytime)) ? +( + freq = final_freq * (silentcnt/(srate * decaytime)) + + init_freq * (1-(silentcnt/(srate * decaytime))) ; +) : +( + freq = final_freq; +); + +adj=2*$pi* freq / srate; + + +// sin +slider4==0 ? +( + spl0=cos(pos); +); + +// square +slider4==1 ? +( + cos(pos)>0 ? + ( + spl0=0.7; + ) : + ( + spl0=0; + ); +); + +// noise +slider4==2 ? +( + spl0=(rand(2)-1); +); + +// filter +fd0l = (fk*spl0) - (fa1*fd1l) - (fa0*fd2l); +spl0 = fd0l + fd1l + fd1l + fd2l; +fd2l = fd1l; +fd1l = fd0l; + +// mix +spl1=spl0; +spl0 = spl0 * seekv * vol + oldspl0 * dry; +spl1 = spl1 * seekv * vol + oldspl1 * dry; + +pos=pos+adj; diff --git a/Effects/sault-4xlimiter/sault-4xlimiter.txt b/Effects/sault-4xlimiter/sault-4xlimiter.txt new file mode 100644 index 0000000..3761227 --- /dev/null +++ b/Effects/sault-4xlimiter/sault-4xlimiter.txt @@ -0,0 +1,94 @@ +desc:sault :: 4x oversampled peak limiter + +// by Sault +// 2017-01-31 + + +slider1:0<-15,15,0.1>Boost (dB) +slider2:-0.3<-6,0,0.1>Ceiling (dB) +slider3:-3<-15,0,0.1>Threshold (dB) +slider4:0<-15,15,0.1>Volume (dB) +slider7:0<0,1,0.01>Saturation +slider11:0<0,6>Gain Reduction (dB) + +import st-oversampler.jsfx-inc + +@init + +pdc_bot_ch = 0; pdc_top_ch = 2; +pdc_delay = 31; + +function int(x) ( x|0 ); +dbc = 20/log(10); +function db2ratio(d) ( 10^(d/20); ); +function ratio2db(r) ( log(abs(r))*dbc; ); + + +function saturate(in) ( (in*foo - ((in*foo)^4)*0.25)*div; ); + +function spline2(mu,dv1,dv2) ( mu*dv1 + mu*mu*0.5*(dv2-dv1); ); + +max_ratio = 0.01; // 1:100 + +display_coeff = exp(-3/(srate * 0.4 * 8)); // 400 ms, called 8x per sample + +function update_diff(val) ( + slider11 *= display_coeff; + slider11 = max(slider11,val); +); + +function process(in) + local(spl,out) +( + slider7 ? ( in = saturate(abs(in))*sign(in) ); + spl = ratio2db(in); + spl >= ceil ? ( + out = (thresh+knee*0.5) + (spl - (thresh+knee*0.5)) * max_ratio; + ) : + spl <= thresh ? ( + out = spl; + ) : ( // (spl > thresh && spl < ceil) + out = thresh + spline2((spl - thresh)/knee,1,max_ratio)*knee; + ); + update_diff(abs(out - spl)); + db2ratio(out)*sign(in); +); + + + +@slider + +ceil = slider2-0.05; +slider3 >= ceil ? ( slider3 = slider2 - 0.05; sliderchange(); ); + +boost = db2ratio(slider1); + +thresh = slider3; +volume = db2ratio(slider4); +knee = ceil - thresh; + +foo = slider7*0.99 + 0.01; +div = 1/(foo - (foo^4)*0.25); + +@sample + +s0 = spl0 * boost; +s1 = spl1 * boost; + +os0.os_up4(s0); +os1.os_up4(s1); + +os0.y3 = process(os0.y3); +os0.y2 = process(os0.y2); +os0.y1 = process(os0.y1); +os0.y0 = process(os0.y0); +s0 = os0.os_down4(); + +os1.y3 = process(os1.y3); +os1.y2 = process(os1.y2); +os1.y1 = process(os1.y1); +os1.y0 = process(os1.y0); +s1 = os1.os_down4(); + +spl0 = s0 * volume; +spl1 = s1 * volume; \ No newline at end of file diff --git a/Effects/sault-4xlimiter/st-oversampler.jsfx-inc b/Effects/sault-4xlimiter/st-oversampler.jsfx-inc new file mode 100644 index 0000000..4de0cbe --- /dev/null +++ b/Effects/sault-4xlimiter/st-oversampler.jsfx-inc @@ -0,0 +1,186 @@ +desc:Oversampler library + + + +@init + +//--------------------Cubic Hermite Interpolator (6 pt, 3 o) + +function hermite_up2(x) + instance(x5,x4,x3,x2,x1,x0,y0,y1,c0,c1,c2,c3) +( + x5 = x4; x4 = x3; x3 = x2; x2 = x1; x1 = x0; x0 = x; + + c0 = x2; + c1 = 0.083333 * (x0-x4) + 0.666667 * (x3-x1); + c2 = 1.25 * x1 - 2.333333 * x2 + 1.666667 * x3 - 0.5 * x4; + c2 += 0.083333 * x5 - 0.166667 * x0; + c3 = 0.083333 * (x0-x5) + 0.583333 * (x4-x1) + 1.333333 * (x2-x3); + + y1 = ((c3*0.5+c2)*0.5+c1)*0.5+c0; + y0 = x2; +); + + +function hermite_up4(x) + instance(x5,x4,x3,x2,x1,x0,y0,y1,y2,y3,c0,c1,c2,c3) +( + x5 = x4; x4 = x3; x3 = x2; x2 = x1; x1 = x0; x0 = x; + + c0 = x2; + c1 = 0.083333 * (x0-x4) + 0.666667 * (x3-x1); + c2 = 1.25 * x1 - 2.333333 * x2 + 1.666667 * x3 - 0.5 * x4; + c2 += 0.083333 * x5 - 0.166667 * x0; + c3 = 0.083333 * (x0-x5) + 0.583333 * (x4-x1) + 1.333333 * (x2-x3); + + y3 = ((c3*0.75 + c2)*0.75 + c1)*0.75 + c0; + y2 = ((c3*0.5 + c2)*0.5 + c1)*0.5 + c0; + y1 = ((c3*0.25 + c2)*0.25 + c1)*0.25 + c0; + y0 = x2; +); + +//--------------------Trilinear Interpolator (4 pt, 2 o) + +function trilinear_up2(x) + instance(x0,x1,x2,x3,y0,y1,c0,c1,c2,n) +( + + x3 = x2; x2 = x1; x1 = x0; x0 = x; + + n = x0 + x3; + c0 = x1; + c1 = 1.5*x2 - 0.5*(x1+n); + c2 = 0.5*(n-x1-x2); + + y1 = (c2*0.5+c1)*0.5+c0; + y0 = x1; + +); + +function trilinear_up4(x) + instance(x0,x1,x2,x3,y0,y1,y2,y3,c0,c1,c2,n) +( + + x3 = x2; x2 = x1; x1 = x0; x0 = x; + + n = x0 + x3; + c0 = x1; + c1 = 1.5*x2 - 0.5*(x1+n); + c2 = 0.5*(n-x1-x2); + + y3 = (c2*0.75 + c1)*0.75 + c0; + y2 = (c2*0.5 + c1)*0.5 + c0; + y1 = (c2*0.25 + c1)*0.25 + c0; + y0 = x1; + +); + + +//--------------------Halfband filter (19-tap) + + +function os_os2() + instance(y18, y17, y16, y15, y14, y13, y12, y11, y10, + y9, y8, y7, y6, y5, y4, y3, y2, y1, y0) +( + y18 = y16; y17 = y15; y16 = y14; y15 = y13; + y14 = y12; y13 = y11; y12 = y10; y11 = y9; + y10 = y8; y9 = y7; y8 = y6; y7 = y5; + y6 = y4; y5 = y3; y4 = y2; y3 = y1; + y2 = y0; +); + +function os_up2(x) + instance(x9, x8, x7, x6, x5, x4, x3, x2, x1, x0, + y18, y17, y16, y15, y14, y13, y12, y11, y10, + y9, y8, y7, y6, y5, y4, y3, y2, y1, y0) +( + x9 = x8; x8 = x7; x7 = x6; x6 = x5; x5 = x4; x4 = x3; + x3 = x2; x2 = x1; x1 = x0; x0 = x * 2; + + this.os_os2(); + y1 = 0.0028*(x0+x9) - 0.0118*(x1+x8) + 0.0334*(x2+x7) + - 0.0849*(x3+x6) + 0.3106*(x4+x5); + y0 = 0.5*x4; + +); + + +function os_down2() + instance(y18, y16, y14, y12, y10, y9, y8, y6, y4, y2, y0) +( + 0.0028*(y0+y18) - 0.0118*(y2+y16) + 0.0334*(y4+y14) + - 0.0849*(y6+y12) + 0.3106*(y8+y10) + 0.5*y9; +); + + +function os_reset2() + instance(x9, x8, x7, x6, x5, x4, x3, x2, x1, x0, + y18, y17, y16, y15, y14, y13, y12, y11, y10, + y9, y8, y7, y6, y5, y4, y3, y2, y1, y0) +( + x9 = x8 = x7 = x6 = x5 = x4 = x3 = x2 = x1 = x0 = + y18 = y17 = y16 = y15 = y14 = y13 = y12 = y11 = y10 = + y9 = y8 = y7 = y6 = y5 = y4 = y3 = y2 = y1 = y0 = 0; +); + + +//--------------------Quarterband filter (31 tap) + +function os_os4() + instance( y30 y29 y28 y27 y26 y25 y24 y23 y22 y21 + y20 y19 y18 y17 y16 y15 y14 y13 y12 y11 + y10 y9 y8 y7 y6 y5 y4 y3 y2 y1 y0) +( + y30 = y26; y29 = y25; y28 = y24; y27 = y23; + y26 = y22; y25 = y21; y24 = y20; y23 = y19; + y22 = y18; y21 = y17; y20 = y16; y19 = y15; + y18 = y14; y17 = y13; y16 = y12; y15 = y11; + y14 = y10; y13 = y9; y12 = y8; y11 = y7; + y10 = y6; y9 = y5; y8 = y4; y7 = y3; + y6 = y2; y5 = y1; y4 = y0; +); + + +function os_up4(x) + instance( x0 x1 x2 x3 x4 x5 x6 x7 y0 y1 y2 y3 ) +( + x7 = x6; x6 = x5; x5 = x4; x4 = x3; x3 = x2; x2 = x1; x1 = x0; +// x0 = x * 4.0189; + x0 = x * 4; + + this.os_os4(); + + y0 = -0.0025*x0 + 0.0079*x1 - 0.0224*x2 + 0.0703*x3 + 0.2235*x4 + - 0.0375*x5 + 0.0135*x6 - 0.0043*x7; + y1 = -0.0045*(x0 + x7) + 0.0147*(x1 + x6) - 0.0407*(x2 + x5) + + 0.1546*(x3 + x4); + y2 = -0.0043*x0 + 0.0135*x1 - 0.0375*x2 + 0.2235*x3 + 0.0703*x4 + - 0.0224*x5 + 0.0079*x6 - 0.0025*x7; + y3 = x3*0.25; +); + +function os_down4() + instance( y30 y29 y28 y26 y25 y24 y22 y21 + y20 y18 y17 y16 y15 y14 y13 y12 + y10 y9 y8 y6 y5 y4 y2 y1 y0) +( + -0.0025*( y0+y30) - 0.0045*( y1+y29) - 0.0043*( y2+y28) + + 0.0079*( y4+y26) + 0.0147*( y5+y25) + 0.0135*( y6+y24) + + -0.0224*( y8+y22) - 0.0407*( y9+y21) - 0.0375*(y10+y20) + + 0.0703*(y12+y18) + 0.1546*(y13+y17) + 0.2235*(y14+y16) + + 0.25*y15; +); + +function os_reset4() + instance( y30 y29 y28 y27 y26 y25 y24 y23 y22 y21 + y20 y19 y18 y17 y16 y15 y14 y13 y12 y11 + y10 y9 y8 y7 y6 y5 y4 y3 y2 y1 + y0 x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 ) +( + y30 = y29 = y28 = y27 = y26 = y25 = y24 = y23 = y22 = y21 = + y20 = y19 = y17 = y16 = y15 = y14 = y13 = y12 = y11 = y10 = + y9 = y8 = y7 = y6 = y5 = y4 = y3 = y2 = y1 = y0 = + x0 = x1 = x2 = x3 = x4 = x5 = x6 = x7 = x8 = x9 = 0; +); + diff --git a/Effects/schwa/audio_statistics b/Effects/schwa/audio_statistics new file mode 100644 index 0000000..6c233a5 --- /dev/null +++ b/Effects/schwa/audio_statistics @@ -0,0 +1,343 @@ +desc:Audio Statistics +//tags: analysis utility visualization +//author: Schwa + +slider1:300<50,1000,1.0>RMS Window (ms) (user input) +slider2:-30<-44,-3,0.1>RMS Meter Min (dB) (user input) +slider3:0<-44,3,0.1>RMS Window Current L (dB) +slider4:0<-44,3,0.1>RMS Window Min L (dB) +slider5:0<-44,3,0.1>RMS Window Max L (dB) +slider6:0<0,18,0.1>RMS Dynamic Range L (dB) +slider7:0<-44,3,0.1>RMS Window Current R (dB) +slider8:0<-44,3,0.1>RMS Window Min R (dB) +slider9:0<-44,3,0.1>RMS Window Max R (dB) +slider10:0<0,18,0.1>RMS Dynamic Range R (dB) +slider11:0<-44,3,0.1>Peak L (dB) +slider12:0<-44,3,0.1>Peak R (dB) +slider13:0<-44,3,0.1>RMS Total Loudness L (dB) +slider14:0<-44,3,0.1>RMS Total Loudness R (dB) +slider15:0<-1,1,0.0001>DC Offset L +slider16:0<-1,1,0.0001>DC Offset R + +in_pin:left input +in_pin:right input +out_pin:none + +@init + +AMP_dB = 8.6562; +DB_MAX = 0.0; + +GFX_RANGE_L = 0.05; +GFX_RANGE_R = 0.95; +GFX_RANGE_H = 0.23; +GFX_RANGE_Y = 0.15; + +GFX_PEAK_W = 0.02; +GFX_PEAK_H = 0.03; +GFX_PEAK_Y = 0.07; +GFX_CUR_Y = 0.08; + +GFX_SUM_W = 0.02; +GFX_SUM_H = 0.03; +GFX_SUM_Y = GFX_RANGE_Y+GFX_RANGE_H+0.04; + +GFX_METER_MAJ_Y = 0.47; +GFX_METER_MIN_Y = 0.49; + +prevGfxW = 0; + +densityBufN = 2048; // Something over the maximum screen width. +densityBufL = 0; +densityBufR = densityBufL + densityBufN; +bufL = densityBufR + densityBufN; +bufR = bufL + 131072; // Something over the max # of samples in the RMS window. + +winMS = slider1; +holdIdx = bufN = (0.001*winMS*srate)|0; +nSamples = playing = 0; +bufOK = bufIdx = initBuf = 0; +peakL = peakR = ampEnvL = ampEnvR = 0.0; +sumL = sumR = sum2L = sum2R = win2L = win2R = 0.0; +win2LMin = win2LMax = win2RMin = win2RMax = 0.0; +memset(densityBufL, 0, densityBufN); +memset(densityBufR, 0, densityBufN); +maxDensityL = maxDensityR = 0.0; + +@slider + +winMS = slider1; +dbMin = slider2; + +dbRange = DB_MAX - dbMin; + +holdIdx = bufN = (0.001*winMS*srate)|0; +bufOK = bufIdx = initBuf = 0; +ampEnvCoeff = exp(-1.0/bufN); + +nSamples = playing = 0; +bufOK = bufIdx = initBuf = 0; +peakL = peakR = ampEnvL = ampEnvR = 0.0; +sumL = sumR = sum2L = sum2R = win2L = win2R = 0.0; +win2LMin = win2LMax = win2RMin = win2RMax = 0.0; +memset(densityBufL, 0, densityBufN); +memset(densityBufR, 0, densityBufN); +maxDensityL = maxDensityR = 0.0; + +@block + +(playing && bufOK) ? ( + slider3 = floor(dbRMSL*100.0)/100.0; + slider4 = floor(AMP_DB*log(sqrt(win2LMin/bufN))*100.0)/100.0; + slider5 = floor(AMP_DB*log(sqrt(win2LMax/bufN))*100.0)/100.0; + slider6 = slider5-slider4; + + slider7 = floor(dbRMSR*100.0)/100.0; + slider8 = floor(AMP_DB*log(sqrt(win2RMin/bufN))*100.0)/100.0; + slider9 = floor(AMP_DB*log(sqrt(win2RMax/bufN))*100.0)/100.0; + slider10 = slider9-slider8; + + slider11 = floor(AMP_DB*log(peakL)*100.0)/100.0; + slider12 = floor(AMP_DB*log(peakR)*100.0)/100.0; + + slider13 = floor(AMP_DB*log(sqrt(sum2L/nSamples))*100.0)/100.0; + slider14 = floor(AMP_DB*log(sqrt(sum2R/nSamples))*100.0)/100.0; + + slider15 = sumL/nSamples; + slider16 = sumR/nSamples; +); + +(play_state == 1) ? ( + playing = 1; +) : ( + playing = 0; +); + +@sample + +(playing) ? ( + (holdIdx) ? ( + holdIdx -= 1; + ) : ( + nSamples += 1; + + sumL += spl0; + sumR += spl1; + + ampL = abs(spl0); + ampR = abs(spl1); + + peakL = max(peakL, ampL); + peakR = max(peakR, ampR); + + (ampL > ampEnvL) ? ( + ampEnvL = ampL; + ) : ( + ampEnvL = ampL + ampEnvCoeff * (ampEnvL - ampL); + ); + (ampR > ampEnvR) ? ( + ampEnvR = ampR; + ) : ( + ampEnvR = ampR + ampEnvCoeff * (ampEnvR - ampR); + ); + + amp2L = ampL*ampL; + amp2R = ampR*ampR; + sum2L += amp2L; + sum2R += amp2R; + win2L += amp2L; + win2R += amp2R; + + prev2L = bufL[bufIdx]; + prev2R = bufR[bufIdx]; + bufL[bufIdx] = amp2L; + bufR[bufIdx] = amp2R; + + bufIdx += 1; + (bufIdx == bufN) ? ( + bufIdx = 0; + (!bufOK) ? ( + win2LMin = win2LMax = win2L; + win2RMin = win2RMax = win2R; + bufOK = 1; + ); + ); + + (bufOK) ? ( + win2LMin = min(win2LMin, win2L); + win2LMax = max(win2LMax, win2L); + win2RMin = min(win2RMin, win2R); + win2RMax = max(win2RMax, win2R); + win2L -= prev2L; + win2R -= prev2R; + + dbRMSL = AMP_DB*log(sqrt(win2L/bufN)); + dbRMSLX = min(max((dbRMSL-dbMin)/dbRange, 0.0), 1.0); + densityIdx = floor(dbRMSLX*(densityBufN-1)); + densityBufL[densityIdx] += 1; + maxDensityL = max(maxDensityL, densityBufL[densityIdx]); + + dbRMSR = AMP_DB*log(sqrt(win2R/bufN)); + dbRMSRX = min(max((dbRMSR-dbMin)/dbRange, 0.0), 1.0); + densityIdx = floor(dbRMSRX*(densityBufN-1)); + densityBufR[densityIdx] += 1; + maxDensityR = max(maxDensityR, densityBufR[densityIdx]); + ); + ); +); + +@gfx 400 150 + +(gfx_w != prevGfxW) ? ( + prevGfxW = gfx_w; + rangeL = floor(gfx_w*GFX_RANGE_L); + rangeR = floor(gfx_w*GFX_RANGE_R); + rangeW = rangeR-rangeL; + rangeH = floor(gfx_h*GFX_RANGE_H); + rangeY = floor(gfx_h*GFX_RANGE_Y); + peakW = floor(gfx_w*GFX_PEAK_W); + peakH = floor(gfx_h*GFX_PEAK_H); + peakY = floor(gfx_h*GFX_PEAK_Y); + curY = floor(gfx_h*GFX_CUR_Y); + sumW = floor(gfx_w*GFX_SUM_W); + sumH = floor(gfx_h*GFX_SUM_H); + sumY = floor(gfx_h*GFX_SUM_Y); + meterMajY = floor(gfx_h*GFX_METER_MAJ_Y); + meterMinY = floor(gfx_h*GFX_METER_MIN_Y); + + // Would be nice to preserve the existing data. + densityBufN = rangeW; + memset(densityBufL, 0, densityBufN); + memset(densityBufR, 0, densityBufN); + maxDensityL = maxDensityR = 0.0; +); + +// Frame elements. + +gfx_r = gfx_g = gfx_b = gfx_a = 1.0; + +gfx_x = rangeL-1; +gfx_y = rangeY-1; +gfx_lineto(gfx_x+rangeW+2, gfx_y, 0); +gfx_lineto(gfx_x, gfx_y+rangeH+2, 0); +gfx_lineto(gfx_x-rangeW-2, gfx_y, 0); +gfx_lineto(gfx_x, gfx_y-rangeH-2, 0); + +gfx_x = rangeL-1; +gfx_y = gfx_h-rangeY-rangeH-1; +gfx_lineto(gfx_x+rangeW+2, gfx_y, 0); +gfx_lineto(gfx_x, gfx_y+rangeH+2, 0); +gfx_lineto(gfx_x-rangeW-2, gfx_y, 0); +gfx_lineto(gfx_x, gfx_y-rangeH-2, 0); + +// Meter. + +dbMeter = ceil(dbMin); +while (gfx_x = rangeL+(dbMeter-dbMin)/dbRange*rangeW; + (dbMeter/3.0 == floor(dbMeter/3.0)) ? ( + gfx_y = meterMajY; + ) : ( + gfx_y = meterMinY; + ); + gfx_lineto(gfx_x, gfx_h-gfx_y, 0); + dbMeter += 1.0; + dbMeter <= dbMax; +); + +// Current amp lines. + +gfx_r = gfx_g = gfx_b = 0.5; + +ampDB = AMP_DB*log(ampEnvL); +ampX = min(max((ampDB-dbMin)/dbRange, 0.0), 1.0); +gfx_x = rangeL; +gfx_y = curY; +gfx_rectto(gfx_x+ampX*rangeW, gfx_y+3); + +ampDB = AMP_DB*log(ampEnvR); +ampX = min(max((ampDB-dbMin)/dbRange, 0.0), 1.0); +gfx_x = rangeL; +gfx_y = gfx_h-curY; +gfx_rectto(gfx_x+ampX*rangeW, gfx_y-3); + +// Peak markers. + +gfx_r = gfx_g = gfx_b = 0.75; + +peakX = min(max((slider11-dbMin)/dbRange, 0.0), 1.0); +gfx_x = rangeL+peakX*rangeW; +gfx_y = peakY; +gfx_lineto(gfx_x-peakW/2, gfx_y-peakH, 1); +gfx_lineto(gfx_x+peakW, gfx_y, 0); +gfx_lineto(gfx_x-peakW/2, gfx_y+peakH, 1); + +peakX = min(max((slider12-dbMin)/dbRange, 0.0), 1.0); +gfx_x = rangeL+peakX*rangeW; +gfx_y = gfx_h-peakY; +gfx_lineto(gfx_x-peakW/2, gfx_y+peakH, 1); +gfx_lineto(gfx_x+peakW, gfx_y, 0); +gfx_lineto(gfx_x-peakW/2, gfx_y-peakH, 1); + +(bufOK) ? ( + + // Total volume markers. + + gfx_r = gfx_g = gfx_b = 1.0; + + sumX = min(max((slider13-dbMin)/dbRange, 0.0), 1.0); + gfx_x = rangeL+sumX*rangeW; + gfx_y = sumY; + gfx_lineto(gfx_x-sumW/2, gfx_y+sumH, 1); + gfx_lineto(gfx_x+sumW, gfx_y, 0); + gfx_lineto(gfx_x-sumW/2, gfx_y-sumH, 1); + + sumX = min(max((slider14-dbMin)/dbRange, 0.0), 1.0); + gfx_x = rangeL+sumX*rangeW; + gfx_y = gfx_h-sumY; + gfx_lineto(gfx_x-sumW/2, gfx_y-sumH, 1); + gfx_lineto(gfx_x+sumW, gfx_y, 0); + gfx_lineto(gfx_x-sumW/2, gfx_y+sumH, 1); + + // Density. + + gfx_b = 0.0; + gfx_x = rangeL; + idx = 0; + loop(rangeW, + densityAtPxL = sqrt(densityBufL[idx]/maxDensityL); + densityAtPxR = sqrt(densityBufR[idx]/maxDensityR); + + gfx_r = max(2.0*(densityAtPxL-0.5), 0.0); + gfx_g = 1.0-abs(2.0*densityAtPxL-1.0); + gfx_y = rangeY; + gfx_lineto(gfx_x, gfx_y+rangeH, 0); + + gfx_r = max(2.0*(densityAtPxR-0.5), 0.0); + gfx_g = 1.0-abs(2.0*densityAtPxR-1.0); + gfx_y = gfx_h-rangeY; + gfx_lineto(gfx_x, gfx_y-rangeH, 0); + + gfx_x += 1; + idx += 1; + ); + + // Current RMS lines. + + gfx_r = gfx_g = gfx_b = 1.0; + + gfx_x = rangeL+dbRMSLX*rangeW; + gfx_y = rangeY-3; + gfx_lineto(gfx_x, gfx_y+rangeH+6, 0); + + gfx_x = rangeL+dbRMSRX*rangeW; + gfx_y = gfx_h-rangeY+3; + gfx_lineto(gfx_x, gfx_y-rangeH-6, 0); +); + + + + + + + + diff --git a/Effects/schwa/fft_splitter b/Effects/schwa/fft_splitter new file mode 100644 index 0000000..53ebc1d --- /dev/null +++ b/Effects/schwa/fft_splitter @@ -0,0 +1,151 @@ +desc: FFT Splitter +//tags: processing FFT routing +//author: Schwa + +slider1:2<0,4,1{1024,2048,4096,8192}>FFT Size +slider2:5000<0,20000,1>Split Frequency (Hz) +slider3:0<0,4,1{1/2,3/4,5/6,7/8}>Low Band Destination +slider4:1<0,4,1{1/2,3/4,5/6,7/8}>High Band Destination +// slider5:0<0,1,0.1>Debug + +in_pin:left input +in_pin:right input +out_pin:output 1 +out_pin:output 2 +out_pin:output 3 +out_pin:output 4 +out_pin:output 5 +out_pin:output 6 +out_pin:output 7 +out_pin:output 8 + +@init + + fftsize = -1; + pdc_bot_ch = 0; + pdc_top_ch = 8; + + // array pointers + window=0; + buf1 = 16384; + buf2 = 32768; + splitLo1 = 49152; + splitLo2 = 65536; + splitHi1 = 81920; + splitHi2 = 98304; + +@slider + + pos = 0; + memset(buf1, 0, 2*fftsize); + memset(buf2, 0, 2*fftsize); + memset(splitLo1, 0, 2*fftsize); + memset(splitLo2, 0, 2*fftsize); + memset(splitHi1, 0, 2*fftsize); + memset(splitHi2, 0, 2*fftsize); + + sliderfft = (2^(slider1+10))|0; + fftsize != sliderfft ? ( + memset(window, 0, fftsize); + fftsize = sliderfft; + w = 2.0*3.14159/fftsize; + i = 0; + loop(fftsize/2, + window[i] = 0.42-0.50*cos(i*w)+0.08*cos(2.0*i*w); + i += 1; + ); + pdc_delay = fftsize; + ); + + splitfreq = 2*((fftsize * slider2 / srate)|0); + wLo_01 = (slider3 == 0 ? 1.0 : 0.0); + wLo_23 = (slider3 == 1 ? 1.0 : 0.0); + wLo_45 = (slider3 == 2 ? 1.0 : 0.0); + wLo_67 = (slider3 == 3 ? 1.0 : 0.0); + wHi_01 = (slider4 == 0 ? 1.0 : 0.0); + wHi_23 = (slider4 == 1 ? 1.0 : 0.0); + wHi_45 = (slider4 == 2 ? 1.0 : 0.0); + wHi_67 = (slider4 == 3 ? 1.0 : 0.0); + +@sample + + pos >= fftsize ? ( + //memcpy(buf1, buf2+fftsize, fftsize); + tmp = buf1; + buf1 = buf2; + buf2 = tmp; + + tmp = splitLo1; + splitLo1 = splitLo2; + splitLo2 = tmp; + + tmp = splitHi1; + splitHi1 = splitHi2; + splitHi2 = tmp; + + fft(buf1, fftsize); + fft_permute(buf1, fftsize); + + memcpy(splitLo1+2, buf1+2, splitfreq); + memset(splitLo1+splitfreq+2, 0, 2*(fftsize-splitfreq-1)); + memcpy(splitLo1+2*fftsize-splitfreq, buf1+2*fftsize-splitfreq, splitfreq); + + i = 0; + sumRe = sumIm = 0.0; + loop(splitfreq/2, + sumRe += splitLo1[i+2] + splitLo1[2*fftsize-i-2]; + sumIm += splitLo1[i+3] + splitLo1[2*fftsize-i-1]; + i += 2; + ); + splitLo1[0] = -sumRe; + splitLo1[1] = -sumIm; + + memset(splitHi1, 0, splitfreq+2); + memcpy(splitHi1+splitfreq+2, buf1+splitfreq+2, 2*(fftsize-splitfreq-1)); + memset(splitHi1+2*fftsize-splitfreq, 0, splitfreq); + + i = splitfreq+2; + sumRe = sumIm = 0.0; + loop(fftsize-splitfreq-1, + sumRe += splitHi1[i]; + sumIm += splitHi1[i+1]; + i += 2; + ); + splitHi1[0] = -sumRe; + splitHi1[1] = -sumIm; + + fft_ipermute(splitLo1, fftsize); + fft_ipermute(splitHi1, fftsize); + ifft(splitLo1, fftsize); + ifft(splitHi1, fftsize); + + pos=0; + ); + + w1 = window[pos/2]; + w2 = window[(fftsize-pos)/2-1]; + sw = (w1+w2)*fftsize; + + buf1[pos] = w1*spl0; + buf1[pos+1] = w1*spl1; + buf2[fftsize+pos] = w2*spl0; + buf2[fftsize+pos+1] = w2*spl1; + + spl0Lo = (splitLo1[pos]+splitLo2[fftsize+pos])/sw; + spl1Lo = (splitLo1[pos+1]+splitLo2[fftsize+pos+1])/sw; + + spl0Hi = (splitHi1[pos]+splitHi2[fftsize+pos])/sw; + spl1Hi = (splitHi1[pos+1]+splitHi2[fftsize+pos+1])/sw; + + spl0 = wLo_01*spl0Lo + wHi_01*spl0Hi; + spl1 = wLo_01*spl1Lo + wHi_01*spl1Hi; + spl2 = wLo_23*spl0Lo + wHi_23*spl0Hi; + spl3 = wLo_23*spl1Lo + wHi_23*spl1Hi; + spl4 = wLo_45*spl0Lo + wHi_45*spl0Hi; + spl5 = wLo_45*spl1Lo + wHi_45*spl1Hi; + spl6 = wLo_67*spl0Lo + wHi_67*spl0Hi; + spl7 = wLo_67*spl1Lo + wHi_67*spl1Hi; + + pos += 2; + + diff --git a/Effects/schwa/gaussian_noise_generator b/Effects/schwa/gaussian_noise_generator new file mode 100644 index 0000000..5f35d12 --- /dev/null +++ b/Effects/schwa/gaussian_noise_generator @@ -0,0 +1,157 @@ +desc:Gaussian Noise Generator +//tags: analysis generator synthesis +//author: Schwa + +// Generator choices are listed in rough order of fanciness and cost. + +slider1:0<-120,6,0.1>Noise dB (RMS) +slider2:1<0,1,0.01>Wet Mix +slider3:0<0,3,1{Central Limit Approximation,Box-Muller,Ziggurat (not implemented yet),Inverse Transform}>Gaussian Generator +slider4:0<-1,1>Noise Mean (should be ~0) +slider5:0<0,2>Noise Standard Deviation (should be ~1) + +in_pin:left input +in_pin:right input +out_pin:left output +out_pin:right output + +@init + +AMP_DB = 20.0 / log(10); + +CENTRAL_LIMIT = 0; +BOX_MULLER = 1; +ZIGGURAT = 2; +INV_TRANSFORM = 3; + +@slider + +noise_level = exp(slider1 / AMP_DB); + +(slider3 == CENTRAL_LIMIT) ? ( + N_DEV = 12; +) +: +(slider3 == INV_TRANSFORM) ? ( + A1 = -39.69683028665376; + A2 = 220.9460984245205; + A3 = -275.9285104469687; + A4 = 138.3577518672690; + A5 = -30.66479806614716; + A6 = 2.506628277459239; + + B1 = -54.47609879822406; + B2 = 161.5858368580409; + B3 = -155.6989798598866; + B4 = 66.80131188771972; + B5 = -13.28068155288572; + + C1 = -0.007784894002430293; + C2 = -0.3223964580411365; + C3 = -2.400758277161838; + C4 = -2.549732539343734; + C5 = 4.374664141464968; + C6 = 2.938163982698783; + + D1 = 0.007784695709041462; + D2 = 0.3224671290700398; + D3 = 2.445134137142996; + D4 = 3.754408661907416; + + P_LO = 0.02425; + P_HI = 1.0 - P_LO; +); + +i = sum = sum2 = 0; + +@sample + +z0 = z1 = 0; + +(slider3 == CENTRAL_LIMIT) ? ( + + // Quick & dirty. + loop (N_DEV, + z0 += rand(1); + z1 += rand(1); + ); + z0 -= N_DEV / 2.0; + z1 -= N_DEV / 2.0; +) +: +(slider3 == BOX_MULLER) ? ( + + // Conveniently a stereo twofer. + w = 0; + while ( + z0 = 2.0 * rand(1) - 1.0; + z1 = 2.0 * rand(1) - 1.0; + w = z0 * z0 + z1 * z1; + w >= 1.0; + ); + w = sqrt(-2.0 * log(w) / w); + z0 *= w; + z1 *= w; +) +: +(slider3 == INV_TRANSFORM) ? ( + + r0 = rand(1); + r1 = rand(1); + + (r0 < P_LO) ? ( + q = sqrt(-2.0 * log(r0)); + z0 = ((((C1 * q + C2) * q + C3) * q + C4) * q + C5) * q + C6; + z0 /= (((D1 * q + D2) * q + D3) * q + D4) * q + 1.0; + ) + : + (r0 < P_HI) ? ( + q = r0 - 0.5; + r = q * q; + z0 = (((((A1 * r + A2) * r + A3) * r + A4) * r + A5) * r + A6) * q; + z0 /= ((((B1 * r + B2) * r + B3) * r + B4) * r + B5) * r + 1.0; + ) + : + ( + q = sqrt(-2.0 * log(1.0 - r0)); + z0 = -(((((C1 * q + C2) * q + C3) * q + C4) * q + C5) * q + C6); + z0 /= (((D1 * q + D2) * q + D3) * q + D4) * q + 1.0; + ); + + (r1 < P_LO) ? ( + q = sqrt(-2.0 * log(r1)); + z1 = ((((C1 * q + C2) * q + C3) * q + C4) * q + C5) * q + C6; + z1 /= (((D1 * q + D2) * q + D3) * q + D4) * q + 1.0; + ) + : + (r1 < P_HI) ? ( + q = r1 - 0.5; + r = q * q; + z1 = (((((A1 * r + A2) * r + A3) * r + A4) * r + A5) * r + A6) * q; + z1 /= ((((B1 * r + B2) * r + B3) * r + B4) * r + B5) * r + 1.0; + ) + : + ( + q = sqrt(-2.0 * log(1.0 - r0)); + z1 = -(((((C1 * q + C2) * q + C3) * q + C4) * q + C5) * q + C6); + z1 /= (((D1 * q + D2) * q + D3) * q + D4) * q + 1.0; + ); +); + +spl0 = spl0 * (1.0 - slider2) + z0 * noise_level * slider2; +spl1 = spl1 * (1.0 - slider2) + z1 * noise_level * slider2; + +sum += z0; +sum2 += z0 * z0; + +i += 1; +(i == srate) ? ( + mean = sum / srate; + stdev = sqrt(sum2 / srate - mean * mean); + slider4 = mean; + slider5 = stdev; + sliderchange(2^4 + 2^5); + i = sum = sum2 = 0; +); + + diff --git a/Effects/schwa/midi_examine b/Effects/schwa/midi_examine new file mode 100644 index 0000000..a021667 --- /dev/null +++ b/Effects/schwa/midi_examine @@ -0,0 +1,54 @@ +desc:MIDI Examiner +//tags: MIDI analysis utility +//author: Schwa + +//Examine midi messages (http://www.midi.org/about-midi/table1.shtml) + +slider1:0<0,255,1>Sample Offset Within @block +slider2:0<0,255,1>Status Byte +slider3:0<0,127,1>Data Byte 1 +slider4:0<0,127,1>Data Byte 2 +slider5:0<0,16,1>Status High Bits +slider6:0<0,16,1>Status Low Bits +slider7:0<0,8,1{-,Note Off,Note On,Poly Aftertouch,Control Change,Program Change,Channel Aftertouch,Pitch Wheel,System Special}>Status High Bits Interpretation + +in_pin:none +out_pin:none + +// Data byte high bit is used for system exclusive messages, +// we're ignoring it here. + +@block + + while ( + midirecv(mpos, msg1, msg23) ? ( + midisend(mpos, msg1, msg23); + + status = msg1; + + statusHi = (msg1 / 16) | 0; + statusLo = msg1 - (statusHi * 16); + + data2 = (msg23 / 256) | 0; + data1 = msg23 - (data2 * 256); + + /* + You could reassemble the message like this. + msg1 = (statusHi * 16 + statusLo) | 0; + msg23 = (data2 * 256 + data1) | 0; + */ + + slider1 = mpos; + slider2 = status; + slider3 = data1; + slider4 = data2; + slider5 = statusHi; + slider6 = statusLo; + slider7 = statusHi - 7; + + sliderchange(255); // We changed all the sliders. + ); + ); + + + diff --git a/Effects/schwa/midi_humanizer b/Effects/schwa/midi_humanizer new file mode 100644 index 0000000..ad13c73 --- /dev/null +++ b/Effects/schwa/midi_humanizer @@ -0,0 +1,137 @@ +desc:MIDI Velocity and Timing Humanizer +//tags: MIDI processing +//author: Schwa + +slider1:0<0,127,1>Baseline Velocity (0=use original) (automate!) +slider2:0<0,1,1{No (Subtle timing humanization/bias),Yes (Shift original MIDI 1 beat early)}>Add 1 Beat Delay +slider3:0<-10,10>Bias Timing Humanization (ms) +slider4:0<0,10>Timing Humanization Level +slider5:0<0,10>Velocity Humanization Level +slider6:0<0,16,1>MIDI Channel (0=omni) +slider7:0<-30,30>Output Timing Humanization (ms) (read-only) +slider8:0<-64,64,1>Output Velocity Humanization (read-only) + +in_pin:none +out_pin:none + +@init + + // We are "humanizing" not "crapifying" + MAX_VEL_SHIFT = 0.25; // Fraction of baseline velocity. + MAX_MSEC_SHIFT = 15; // Only applies if orig is shifted. + MAX_IS_X_STDEV = 1.5; // Max shift represents this many std dev + + DEV_N = 12; + buffer = 0; + MSG_BUF = 128; // msg buffer start location. + memset(0, 0, MSG_BUF); + n_buf = 0; + + NOTE_ON = 9; + NOTE_OFF = 8; + AFTERTCH = 10; + +@block + + while ( + midirecv(mpos, msg1, msg23) ? ( + + bias_samples = srate * slider3 / 1000; + + (slider2 == 0) ? ( + baseline_pos_shift = 0; + min_pos = 0; + max_pos = samplesblock - 1; + ) : ( + samples_per_beat = srate * 60 / tempo; + baseline_pos_shift = samples_per_beat; + min_pos = baseline_pos_shift - MAX_MSEC_SHIFT / 1000 * srate; + max_pos = baseline_pos_shift + MAX_MSEC_SHIFT / 1000 * srate; + ); + + + msg = (msg1 / 16) | 0; + channel = 1 + msg1 - (msg * 16); + note_num = msg23 & 127; + velocity = (msg23 / 256) | 0; + + (slider6 == 0 || slider6 == channel) ? ( + (msg == NOTE_ON && velocity > 0 ) ? ( + // Generate two quick & dirty normal deviates. + z1 = 0; + z2 = 0; + loop (DEV_N, + z1 += rand(100) / 100; + z2 += rand(100) / 100; + ); + z1 -= DEV_N / 2; + z2 -= DEV_N / 2; + + pos_shift = z1 * slider4 / 10; + pos_shift *= (max_pos - min_pos) / MAX_IS_X_STDEV; + + new_pos = mpos + bias_samples + baseline_pos_shift + pos_shift; + new_pos = max(min_pos, new_pos); + new_pos = min(new_pos, max_pos); + + pos_shift = new_pos - mpos; + buffer[note_num] = pos_shift; + mpos = new_pos; + + (slider1 == 0) ? ( + velocity = (msg23 / 256) | 0; + ) : ( + velocity = slider1; + ); + min_vel = (1 - MAX_VEL_SHIFT) * velocity; + max_vel = (1 + MAX_VEL_SHIFT) * velocity; + + vel_shift = z2 * slider5 / 10; + vel_shift *= (max_vel - min_vel) / MAX_IS_X_STDEV; + vel_shift = floor(vel_shift + 0.5); + velocity += vel_shift; + velocity = max(1, velocity); + velocity = min(velocity, 127); + velocity |= 0; + msg23 = note_num + velocity * 256; + + msec_shift = (pos_shift - baseline_pos_shift) * 1000 / srate; + slider7 = floor(msec_shift * 10) / 10; + slider8 = vel_shift; + sliderchange(2^6 + 2^7); + ); + + (msg == AFTERTCH) ? ( + mpos += buffer[note_num]; + ); + + (msg == NOTE_OFF || (msg == NOTE_ON && velocity == 0)) ? ( + mpos += buffer[note_num]; + buffer[note_num] = 0; + ); + ); + + buffer[MSG_BUF+n_buf] = mpos; + buffer[MSG_BUF+n_buf+1] = msg1; + buffer[MSG_BUF+n_buf+2] = msg23; + n_buf += 3; + ); + ); + + // Find everything in the buffer that is due + // to be played back in this block. + i = 0; + while ( + (i < n_buf) ? ( + mpos = buffer[MSG_BUF + i]; + + (mpos < samplesblock) ? ( + midisend(mpos, buffer[MSG_BUF+i+1], buffer[MSG_BUF+i+2]); + memcpy(MSG_BUF+i, MSG_BUF+i+3, n_buf-i); + n_buf -= 3; + ) : ( + buffer[MSG_BUF+i] -= samplesblock; + i += 3; + ); + ); + ); diff --git a/Effects/schwa/midi_modal_randomness b/Effects/schwa/midi_modal_randomness new file mode 100644 index 0000000..3ae314d --- /dev/null +++ b/Effects/schwa/midi_modal_randomness @@ -0,0 +1,216 @@ +desc:MIDI Modal Randomness +//tags: MIDI generator +//author: Schwa + +//Convert midi notes into modal randomness + +slider1:0<0,11,{1,1.5,2,2.5,3,4,4.5,5,5.5,6,6.5,7>Interval A +slider2:50<0,100,1>Probability A + +slider3:4<0,11,{1,1.5,2,2.5,3,4,4.5,5,5.5,6,6.5,7>Interval B +slider4:30<0,100,1>Probability B + +slider5:7<0,11,{1,1.5,2,2.5,3,4,4.5,5,5.5,6,6.5,7>Interval C +slider6:40<0,100,1>Probability C + +slider7:9<0,11,{1,1.5,2,2.5,3,4,4.5,5,5.5,6,6.5,7>Interval D +slider8:20<0,100,1>Probability D + +slider9:50<0,100,1>Speed +slider10:50<0,100,1>Octave Randomness +slider11:50<0,100,1>Timing Randomness +slider12:50<0,100,1>Velocity Randomness + +slider13:10<0,600,1>Decay Time (sec) +slider14:4<0,8,1>Number Of Simultaneous Notes + +slider15:4<1,8,1>Quantize Targets Per Beat +slider16:0<0,100,1>Quantize Strength + +in_pin:none +out_pin:none + +@init + +// SPB = samples per beat. +// NPB = notes per beat. +// SPN = samples per note. + +NOTE_ON = 9; +NOTE_OFF = 8; + +MIN_NPB = 0.25; +MAX_NPB = 4.0; +MIN_DECAY_VEL = 2; + +// Note buffer offsets. +B_LEN = 0; // Play this note for this many samples. +B_ITEMS = 1; +buf = 0; +memset(buf, 0, 128*B_ITEMS); + +// Input queue offsets. +Q_NOTE = 0; +Q_VEL = 1; // Input velocity, decays according to speed slider. +Q_POS = 2; // When this note is due to trigger another note. +Q_ITEMS = 3; +queue = 128*B_ITEMS; +memset(queue, 0, 16*Q_ITEMS); + +active_notes = 0; +max_active_notes = 0; + +@slider + +iA = slider1; +pA = 0.01*slider2; +iB = slider3; +pB = 0.01*slider4; +iC = slider5; +pC = 0.01*slider6; +iD = slider7; +pD = 0.01*slider8; + +speed = 0.02*slider9; +r_oct = 0.07*slider10; +r_time = 0.01*slider11; +r_vel = 0.02*slider12; + +decay = slider13; +max_active_notes = slider14; +q_tgt = slider15; +quant = 0.01*slider16; + +pSum = pA+pB+pC+pD; +pSum > 0 ? ( + pA /= pSum; + pB = pA+pB/pSum; + pC = pB+pC/pSum; + pD = pC+pD/pSum; +); + +NPB = MIN_NPB+speed*(MAX_NPB-MIN_NPB); +decay_samples = 0.5*decay*srate; + + +@block + +BP0 = beat_position; +SPB = srate * 60.0 / tempo; +SPN = SPB / NPB; + +midirecv(mpos, msg1, msg23); +while ( + (msg1/16)|0 == NOTE_ON ? ( + vel = (msg23/256)|0; + note = msg23 - (vel*256); + + pq = active_notes*Q_ITEMS; + queue[pq+Q_NOTE] = note; + queue[pq+Q_VEL] = vel; + queue[pq+Q_POS] = mpos; + + active_notes += 1; + ); + midirecv(mpos, msg1, msg23); +); + +active_notes > max_active_notes ? ( + dq = active_notes - max_active_notes; + memcpy(queue, queue+dq*Q_ITEMS, max_active_notes*Q_ITEMS); + active_notes = max_active_notes; +); + +active_notes ? ( + qi = 0; + while ( + dead = 0; + pq = qi*Q_ITEMS; + mpos = queue[pq+Q_POS]; + mpos < samplesblock ? ( + + note = queue[pq+Q_NOTE]; + + r = rand(1); + r < pA ? ( + note += iA; + ) : ( + r < pB ? ( + note += iB; + ) : ( + r < pC ? ( + note += iC; + ) : ( + r < pD ? ( + note += iD; + ); ); ); ); + +// rand(1) < 0.5 ? ( +// note -= 12; +// ); + + oct = (r_oct*(rand(1)-0.5))|0; + note += oct*12; + + in_vel = queue[pq+Q_VEL]; + + len = (SPN/2*(1.0+r_time*(rand(1)-0.5)))|0; + pos = len + (SPN*(1.0+r_time*(rand(1)-0.5)))|0; + + qb = (0.5+q_tgt*(BP0+pos/SPB))|0; + qb = max(qb, 1); + qpos = (qb-BP0*q_tgt)*(SPB/q_tgt); + + pos = (pos*(1.0-quant)+qpos*quant)|0; + + pn = note*B_ITEMS+B_LEN; + buf[pn] == 0 ? ( + out_vel = (in_vel*(1.0+r_vel*(rand(1)-0.5)))|0; + buf[pn] = len; + midisend(mpos, NOTE_ON*16, out_vel*256+note); + ); // Else skip it. + + in_vel *= 1.0 - pos/decay_samples; //permute? + in_vel |= 0; + + in_vel < MIN_DECAY_VEL ? ( + dead = 1; + ) : ( + queue[pq+Q_POS] = pos; + queue[pq+Q_VEL] = in_vel; + ); + ) : ( + queue[pq+Q_POS] = mpos - samplesblock; + ); + + dead ? ( + memcpy(queue+pq, queue+pq+Q_ITEMS, (active_notes-i)*Q_ITEMS); + active_notes -= 1; + ) : ( + qi += 1; + ); + + qi < active_notes; + ); +); + +ni = 0; +while ( + pn = ni*B_ITEMS+B_LEN; + len = buf[pn]; + len > 0 ? ( + len -= samplesblock; + len < samplesblock ? ( + midisend(len, NOTE_OFF*16, ni); + len = 0; + ); + buf[pn] = len; + ); + ni += 1; + ni < 128; +); + + + + + diff --git a/Effects/schwa/soft_clipper b/Effects/schwa/soft_clipper new file mode 100644 index 0000000..6a4e801 --- /dev/null +++ b/Effects/schwa/soft_clipper @@ -0,0 +1,51 @@ +desc:Soft Clipper/Limiter +//tags: processing gain amplitude saturation limiter +//author: Schwa + +// for a nice final level boost. + +// Modeled after the soft-clipping stage in a popular +// "tube mastering" plug-in. This is really just +// a low threshold brick wall limiter that is all knee. + +slider1:0<0,9,0.1>Boost (dB) +slider2:0<-3,1,0.1>Output Brickwall (dB) + +in_pin:left input +in_pin:right input +out_pin:left output +out_pin:right output + +@init + +amp_dB = 8.6562; +baseline_threshold_dB = -9.0; +a = 1.017; +b = -0.025; + +@slider + +boost_dB = slider1; +limit_dB = slider2; +threshold_dB = baseline_threshold_dB + limit_dB; + +@sample + +dB0 = amp_dB * log(abs(spl0)) + boost_dB; +dB1 = amp_dB * log(abs(spl1)) + boost_dB; + +(dB0 > threshold_dB) ? ( + over_dB = dB0 - threshold_dB; + over_dB = a * over_dB + b * over_dB * over_dB; + dB0 = min(threshold_dB + over_dB, limit_dB); +); + +(dB1 > threshold_dB) ? ( + over_dB = dB1 - threshold_dB; + over_dB = a * over_dB + b * over_dB * over_dB; + dB1 = min(threshold_dB + over_dB, limit_dB); +); + +spl0 = exp(dB0 / amp_dB) * sign(spl0); +spl1 = exp(dB1 / amp_dB) * sign(spl1); + diff --git a/Effects/sstillwell/1175 b/Effects/sstillwell/1175 new file mode 100644 index 0000000..38e43d9 --- /dev/null +++ b/Effects/sstillwell/1175 @@ -0,0 +1,157 @@ +// Copyright 2006, Thomas Scott Stillwell +// All rights reserved. +// +//Redistribution and use in source and binary forms, with or without modification, are permitted +//provided that the following conditions are met: +// +//Redistributions of source code must retain the above copyright notice, this list of conditions +//and the following disclaimer. +// +//Redistributions in binary form must reproduce the above copyright notice, this list of conditions +//and the following disclaimer in the documentation and/or other materials provided with the distribution. +// +//The name of Thomas Scott Stillwell may not be used to endorse or +//promote products derived from this software without specific prior written permission. +// +//THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR +//IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +//FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS +//BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +//(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +//PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, +//STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +//THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +desc:1175 Compressor +desc:1175 FAST Attack Compressor with Program-Dependent Release [Stillwell] +//tags: dynamics compressor +//author: Stillwell + +slider1:0<-60,0,0.1>Threshold (dB) +slider2:1<0,3,1{4,8,12,20,All}>Ratio +slider3:0<-20,20,0.1>Gain (dB) +slider4:20<20,2000,10>Attack (s) +slider5:250<20,1000,1>Release (ms) +slider6:100<0,100,0.1>Mix (%) + +in_pin:left input +in_pin:right input +out_pin:left output +out_pin:right output + +@init + log2db = 8.6858896380650365530225783783321; // 20 / ln(10) + db2log = 0.11512925464970228420089957273422; // ln(10) / 20 + attime=0.010; + reltime=0.100; + ratio=0; + cratio=0; + rundb=0; + overdb=0; + ratatcoef = exp(-1/(0.00001 * srate)); + ratrelcoef = exp(-1/(0.5 * srate)); + atcoef=exp(-1/(attime * srate)); + relcoef=exp(-1/(reltime * srate)); + mix=1; + gr_meter=1; + gr_meter_decay = exp(1/(1*srate)); + +@slider + thresh = slider1; + threshv = exp(thresh * db2log); + ratio = (slider2==0 ? 4 : (slider2==1 ? 8 : (slider2 == 2 ? 12 : (slider2 == 3 ? 20 : 20 )))); + slider2 == 4 ? (allin=1; cratio=20;) : (allin=0; cratio = ratio;); + cthresh = (softknee ? (thresh -3) : thresh); + cthreshv = exp(cthresh * db2log); + makeup = slider3; + makeupv = exp((makeup+autogain) * db2log); + attime = slider4 / 1000000; + reltime = slider5 / 1000; + atcoef=exp(-1/(attime * srate)); + relcoef=exp(-1/(reltime * srate)); + mix=slider6/100; + +@sample + ospl0 = spl0; + ospl1 = spl1; + aspl0 = abs(spl0); + aspl1 = abs(spl1); + maxspl = max(aspl0, aspl1); + maxspl = maxspl * maxspl; + runave = maxspl + rmscoef * (runave - maxspl); + det = sqrt(max(0,runave)); + + overdb = 2.08136898 * log(det/cthreshv) * log2db; + overdb = max(0,overdb); + + overdb - rundb > 5 ? (averatio = 4;); + + overdb > rundb ? ( + rundb = overdb + atcoef * (rundb - overdb); + runratio = averatio + ratatcoef * (runratio - averatio); + ) : ( + rundb = overdb + relcoef * (rundb - overdb); + runratio = averatio + ratrelcoef * (runratio - averatio); + ); + overdb = rundb; + averatio = runratio; + + allin ? ( + cratio = 12 + averatio; + ) : ( + cratio = ratio; + ); + + gr = -overdb * (cratio-1)/cratio; + grv = exp(gr * db2log); + + runmax = maxover + relcoef * (runmax - maxover); // highest peak for setting att/rel decays in reltime + maxover = runmax; + + grv < gr_meter ? gr_meter=grv : ( gr_meter*=gr_meter_decay; gr_meter>1?gr_meter=1; ); + + spl0 *= grv * makeupv * mix; + spl1 *= grv * makeupv * mix; + + spl0 += ospl0 * (1-mix); + spl1 += ospl1 * (1-mix); + + +@gfx 0 32 // request horizontal/vertical heights (0 means dont care) + + gr_meter *= exp(1/30); gr_meter>1?gr_meter=1; // decay meter here so if the audio processing stops it doesnt "stick" + gfx_r=1; gfx_g=gfx_b=0; gfx_a=0.8; + + meter_bot=20; + meter_h=min(gfx_h,32); + xscale=gfx_w*20/meter_bot; + + gfx_y=0; + gfx_x=gfx_w + log10(gr_meter)*xscale; + gfx_rectto(gfx_w,meter_h); + + gfx_r=gfx_g=gfx_b=1.0; gfx_a=0.6; + + s2=sqrt(2)/2; + g = s2; + while( + gfx_x=gfx_w + log10(g)*xscale; + gfx_x >= 0 ? + ( + gfx_y=0; + gfx_lineto(gfx_x,meter_h,0); + gfx_y=meter_h-gfx_texth; + gfx_x+=2; + gfx_drawnumber(log10(g)*20,0); + gfx_drawchar($'d'); + gfx_drawchar($'B'); + ); + g*=s2; + gfx_x >=0; + ); + gfx_a=1; + + gfx_x=0; gfx_y=meter_h/2 - gfx_texth/2; + gfx_drawnumber(log10(gr_meter)*20,1); + gfx_drawchar($'d'); + gfx_drawchar($'B'); diff --git a/Effects/sstillwell/3x3 b/Effects/sstillwell/3x3 new file mode 100644 index 0000000..6ecf3b3 --- /dev/null +++ b/Effects/sstillwell/3x3 @@ -0,0 +1,118 @@ +// Copyright 2006, Thomas Scott Stillwell +// All rights reserved. +// +//Redistribution and use in source and binary forms, with or without modification, are permitted +//provided that the following conditions are met: +// +//Redistributions of source code must retain the above copyright notice, this list of conditions +//and the following disclaimer. +// +//Redistributions in binary form must reproduce the above copyright notice, this list of conditions +//and the following disclaimer in the documentation and/or other materials provided with the distribution. +// +//The name of Thomas Scott Stillwell may not be used to endorse or +//promote products derived from this software without specific prior written permission. +// +//THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR +//IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +//FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS +//BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +//(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +//PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, +//STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +//THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +desc:3x3 EQ +desc:3x3 EQ [Stillwell] +//tags: equalizer saturation +//author: Stillwell + +slider1:0<0,100,0.1>Low Drive (%) +slider2:0<-12,12,0.1>Low Gain (dB) +slider3:0<0,100,0.1>Mid Drive (%) +slider4:0<-12,12,0.1>Mid Gain (dB) +slider5:0<0,100,0.1>High Drive (%) +slider6:0<-12,12,0.1>High Gain (dB) +slider7:240<60,680,1>Low-Mid Freq (Hz) +slider8:2400<720,12000,10>Mid-High Freq (Hz) + +in_pin:left input +in_pin:right input +out_pin:left output +out_pin:right output + +@init + log2db = 8.6858896380650365530225783783321; // 20 / ln(10) + db2log = 0.11512925464970228420089957273422; // ln(10) / 20 + pi = 3.1415926535; + halfpi = pi / 2; + halfpiscaled = halfpi * 1.41254; + +@slider + + mixl=slider1 / 100; + mixm=slider3 / 100; + mixh=slider5 / 100; + al = min(slider7,srate) / srate; + ah = max( min(slider8,srate) / srate , al ); + mixl1 = 1 - mixl; + mixm1 = 1 - mixm; + mixh1 = 1 - mixh; + gainl = exp(slider2 * db2log); + gainm = exp(slider4 * db2log); + gainh = exp(slider6 * db2log); + mixlg = mixl * gainl; + mixmg = mixm * gainm; + mixhg = mixh * gainh; + mixlg1 = mixl1 * gainl; + mixmg1 = mixm1 * gainm; + mixhg1 = mixh1 * gainh; + + +@sample + + dry0 = spl0; + dry1 = spl1; + + lf1h=lfh; + lfh=dry0 + lfh - ah*lf1h; + high_l=dry0-lfh*ah; + + lf1l=lfl; + lfl=dry0 + lfl - al*lf1l; + low_l=lfl*al; + + mid_l = dry0 - low_l - high_l; + + rf1h=rfh; + rfh=dry1 + rfh - ah*rf1h; + high_r=dry1-rfh*ah; + + rf1l=rfl; + rfl=dry1 + rfl - al*rf1l; + low_r=rfl*al; + + mid_r = dry1 - low_r - high_r; + + wet0_l = mixlg * sin(low_l * halfpiscaled); + wet0_m = mixmg * sin(mid_l * halfpiscaled); + wet0_h = mixhg * sin(high_l * halfpiscaled); + wet0 = (wet0_l + wet0_m + wet0_h); + + dry0_l = low_l * mixlg1; + dry0_m = mid_l * mixmg1; + dry0_h = high_l * mixhg1; + dry0 = (dry0_l + dry0_m + dry0_h); + + wet1_l = mixlg * sin(low_r * halfpiscaled); + wet1_m = mixmg * sin(mid_r * halfpiscaled); + wet1_h = mixhg * sin(high_r * halfpiscaled); + wet1 = (wet1_l + wet1_m + wet1_h); + + dry1_l = low_r * mixlg1; + dry1_m = mid_r * mixmg1; + dry1_h = high_r * mixhg1; + dry1 = (dry1_l + dry1_m + dry1_h); + + spl0 = dry0 + wet0; + spl1 = dry1 + wet1; diff --git a/Effects/sstillwell/3x3_6dbSlope b/Effects/sstillwell/3x3_6dbSlope new file mode 100644 index 0000000..fd4dcf8 --- /dev/null +++ b/Effects/sstillwell/3x3_6dbSlope @@ -0,0 +1,119 @@ +// Copyright 2006, Thomas Scott Stillwell +// All rights reserved. +// +//Redistribution and use in source and binary forms, with or without modification, are permitted +//provided that the following conditions are met: +// +//Redistributions of source code must retain the above copyright notice, this list of conditions +//and the following disclaimer. +// +//Redistributions in binary form must reproduce the above copyright notice, this list of conditions +//and the following disclaimer in the documentation and/or other materials provided with the distribution. +// +//The name of Thomas Scott Stillwell may not be used to endorse or +//promote products derived from this software without specific prior written permission. +// +//THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR +//IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +//FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS +//BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +//(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +//PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, +//STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +//THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +desc:3x3 EQ (1-Pole Crossover) +desc:3x3 EQ (1-Pole Crossover) [Stillwell] +//tags: equalizer saturation +//author: Stillwell + +slider1:0<0,100,0.1>Low Drive (%) +slider2:0<-12,12,0.1>Low Gain (dB) +slider3:0<0,100,0.1>Mid Drive (%) +slider4:0<-12,12,0.1>Mid Gain (dB) +slider5:0<0,100,0.1>High Drive (%) +slider6:0<-12,12,0.1>High Gain (dB) +slider7:240<60,680,1>Low-Mid Freq (Hz) +slider8:2400<720,12000,10>Mid-High Freq (Hz) + +in_pin:left input +in_pin:right input +out_pin:left output +out_pin:right output + +@init + log2db = 8.6858896380650365530225783783321; // 20 / ln(10) + db2log = 0.11512925464970228420089957273422; // ln(10) / 20 + pi = 3.1415926535; + halfpi = pi / 2; + halfpiscaled = halfpi * 1.41254; + +cDenorm = 10^-30; + +@slider + + mixl=slider1 / 100; + mixm=slider3 / 100; + mixh=slider5 / 100; + +freqLP = min(min(slider7,srate),freqHP); +xLP = exp(-2.0*$pi*freqLP/srate); +a0LP = 1.0-xLP; +b1LP = -xLP; + +freqHP = max(min(slider8,srate),freqLP); +xHP = exp(-2.0*$pi*freqHP/srate); +a0HP = 1.0-xHP; +b1HP = -xHP; + + mixl1 = 1 - mixl; + mixm1 = 1 - mixm; + mixh1 = 1 - mixh; + gainl = exp(slider2 * db2log); + gainm = exp(slider4 * db2log); + gainh = exp(slider6 * db2log); + mixlg = mixl * gainl; + mixmg = mixm * gainm; + mixhg = mixh * gainh; + mixlg1 = mixl1 * gainl; + mixmg1 = mixm1 * gainm; + mixhg1 = mixh1 * gainh; + + +@sample + + dry0 = spl0; + dry1 = spl1; + +low_l = (tmplLP = a0LP*dry0 - b1LP*tmplLP + cDenorm); +low_r = (tmprLP = a0LP*dry1 - b1LP*tmprLP + cDenorm); + +high_l = dry0 - (tmplHP = a0HP*dry0 - b1HP*tmplHP + cDenorm); +high_r = dry1 - (tmprHP = a0HP*dry1 - b1HP*tmprHP + cDenorm); + + mid_l = dry0 - low_l - high_l; + mid_r = dry1 - low_r - high_r; + + wet0_l = mixlg * sin(low_l * halfpiscaled); + wet0_m = mixmg * sin(mid_l * halfpiscaled); + wet0_h = mixhg * sin(high_l * halfpiscaled); + wet0 = (wet0_l + wet0_m + wet0_h); + + dry0_l = low_l * mixlg1; + dry0_m = mid_l * mixmg1; + dry0_h = high_l * mixhg1; + dry0 = (dry0_l + dry0_m + dry0_h); + + wet1_l = mixlg * sin(low_r * halfpiscaled); + wet1_m = mixmg * sin(mid_r * halfpiscaled); + wet1_h = mixhg * sin(high_r * halfpiscaled); + wet1 = (wet1_l + wet1_m + wet1_h); + + dry1_l = low_r * mixlg1; + dry1_m = mid_r * mixmg1; + dry1_h = high_r * mixhg1; + dry1 = (dry1_l + dry1_m + dry1_h); + + spl0 = dry0 + wet0; + spl1 = dry1 + wet1; + diff --git a/Effects/sstillwell/4x4 b/Effects/sstillwell/4x4 new file mode 100644 index 0000000..5d4157b --- /dev/null +++ b/Effects/sstillwell/4x4 @@ -0,0 +1,111 @@ +desc:4x4 EQ +desc:4x4 EQ [Stillwell] +//tags: equalizer saturation +//author: Stillwell + +slider1:0<0,100,0.1>Low Drive (%) +slider2:0<-12,12,0.1>Low Gain (dB) +slider3:0<0,100,0.1>Mid Drive (%) +slider4:0<-12,12,0.1>Mid Gain (dB) +slider5:0<0,100,0.1>High Drive (%) +slider6:0<-12,12,0.1>High Gain (dB) +slider7:240<60,500,1>Low-Mid Crossover (Hz) +slider8:2400<510,10000,10>Mid-High Crossover (Hz) + +in_pin:left input +in_pin:right input +out_pin:left output +out_pin:right output + +@init + log2db = 8.6858896380650365530225783783321; // 20 / ln(10) + db2log = 0.11512925464970228420089957273422; // ln(10) / 20 + pi = 3.1415926535; + halfpi = pi / 2; + halfpiscaled = halfpi * 1.41254; + +@slider + + mixl = slider1 / 100; + mixm = slider3 / 100; + mixh = slider5 / 100; + drivel = mixl; + drivem = mixm; + driveh = mixh; + drivel1 = 1 / (1 - (drivel / 2)); + drivem1 = 1 / (1 - (drivem / 2)); + driveh1 = 1 / (1 - (driveh / 2)); + drivel2 = drivel / 2; + drivem2 = drivem / 2; + driveh2 = driveh / 2; + al = min(slider7,srate) / srate; + ah = max( min(slider8,srate) / srate , al ); + mixl1 = 1 - mixl; + mixm1 = 1 - mixm; + mixh1 = 1 - mixh; + mixl2 = mixl / 2; + mixm2 = mixm / 2; + mixh2 = mixh / 2; + gainl = exp(slider2 * db2log); + gainm = exp(slider4 * db2log); + gainh = exp(slider6 * db2log); + mixlg = mixl * gainl; + mixmg = mixm * gainm; + mixhg = mixh * gainh; + mixlgd = mixl * gainl * drivel1; + mixmgd = mixm * gainm * drivem1; + mixhgd = mixh * gainh * driveh1; + mixlg1 = mixl1 * gainl; + mixmg1 = mixm1 * gainm; + mixhg1 = mixh1 * gainh; + + + +@sample + + dry0 = spl0; + dry1 = spl1; + + lf1h=lfh; + lfh=dry0 + lfh - ah*lf1h; + high_l=dry0-lfh*ah; + + lf1l=lfl; + lfl=dry0 + lfl - al*lf1l; + low_l=lfl*al; + + mid_l = dry0 - low_l - high_l; + + rf1h=rfh; + rfh=dry1 + rfh - ah*rf1h; + high_r=dry1-rfh*ah; + + rf1l=rfl; + rfl=dry1 + rfl - al*rf1l; + low_r=rfl*al; + + mid_r = dry1 - low_r - high_r; + + wet0_l = mixlgd * low_l * (1 - abs(low_l * drivel2)); + wet0_m = mixmgd * mid_l * (1 - abs(mid_l * drivem2)); + wet0_h = mixhgd * high_l * (1 - abs(high_l * driveh2)); + wet0 = (wet0_l + wet0_m + wet0_h); + + dry0_l = low_l * mixlg1; + dry0_m = mid_l * mixmg1; + dry0_h = high_l * mixhg1; + dry0 = (dry0_l + dry0_m + dry0_h); + + wet1_l = mixlgd * low_r * (1 - abs(low_r * drivel2)); + wet1_m = mixmgd * mid_r * (1 - abs(mid_r * drivem2)); + wet1_h = mixhgd * high_r * (1 - abs(high_r * driveh2)); + wet1 = (wet1_l + wet1_m + wet1_h); + + dry1_l = low_r * mixlg1; + dry1_m = mid_r * mixmg1; + dry1_h = high_r * mixhg1; + dry1 = (dry1_l + dry1_m + dry1_h); + + spl0 = dry0 + wet0; + spl1 = dry1 + wet1; + diff --git a/Effects/sstillwell/autoexpand b/Effects/sstillwell/autoexpand new file mode 100644 index 0000000..5efe57e --- /dev/null +++ b/Effects/sstillwell/autoexpand @@ -0,0 +1,130 @@ +// Copyright 2007, Thomas Scott Stillwell +// All rights reserved. +// +//Redistribution and use in source and binary forms, with or without modification, are permitted +//provided that the following conditions are met: +// +//Redistributions of source code must retain the above copyright notice, this list of conditions +//and the following disclaimer. +// +//Redistributions in binary form must reproduce the above copyright notice, this list of conditions +//and the following disclaimer in the documentation and/or other materials provided with the distribution. +// +//The name of Thomas Scott Stillwell may not be used to endorse or +//promote products derived from this software without specific prior written permission. +// +//THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR +//IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +//FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS +//BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +//(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +//PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, +//STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +//THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +desc:Auto Expander +desc:Auto Expander [Stillwell] +//tags: dynamics expander +//author: Stillwell + +slider1:-120<-120,0,0.1>Threshold (dB) +slider2:1<1,20,0.1>Ratio +slider3:0<-20,20,0.1>Gain (dB) +slider4:0<0,1,1{Hard,Soft}>Knee +slider5:0<0,1,1{Normal,Sidechain}>Detector Input +slider7:0<0,1,1{Peak,RMS}>Detection + +in_pin:left input +in_pin:right input +in_pin:sidechain left input +in_pin:sidechain right input +out_pin:left output +out_pin:right output + +@init + log2db = 8.6858896380650365530225783783321; // 20 / ln(10) + db2log = 0.11512925464970228420089957273422; // ln(10) / 20 + i=0; + loop( + 120, + attimes[i] = ((0.08924 / i) + (0.60755 / (i ^ 2)) - 0.00006); + i+=1; + ); + attime=0.010; + reltime=0.100; + maxover=0; + ratio=0; + cratio=0; + rundb=0; + overdb=0; + maxover=0; + atcoef=exp(-1/(attime * srate)); + relcoef=exp(-1/(reltime * srate)); + fbacoef=exp(-1000/(2 * srate)); // 2 msec. opto attack for feedback detection + fbrcoef=exp(-1000/(200 * srate)); // 200 msec. opto release for feedback detection + sidechain = 0; + automakeup = 0; + +@slider + thresh = slider1; + threshv = exp(thresh * db2log); + ratio = slider2; + softknee = slider4; + cthresh = (softknee ? (thresh + 3) : thresh); + cthreshv = exp(cthresh * db2log); + sidechain = slider5; + makeup = slider3; + makeupv = exp((makeup) * db2log); + RMSdet = slider7; + RMSdet ? ( + rmscoef=exp(-1000/(10 * srate)); // 10 ms RMS window + ) : ( + rmscoef=exp(-1000/(0.0025 * srate)); // 2.5 us Peak detector + ); + opto = 0; + +@sample + sidechain ? ( + aspl0 = abs(spl2); + aspl1 = abs(spl3); + ) : ( + aspl0 = abs(spl0); + aspl1 = abs(spl1); + ); + + RMSDet ? ( + ave = (aspl0 * aspl0) + (aspl1 * aspl1); + runave = ave + rmscoef * (runave - ave); + det = sqrt(max(0,runave)); + ) : ( + maxspl = max(aspl0, aspl1); + maxspl = maxspl * maxspl; + runave = maxspl + rmscoef * (runave - maxspl); + det = sqrt(max(0,runave)); + ); + overdb = 2.08136898 * log(det/cthreshv) * log2db; + overdb > maxover ? ( + maxover = overdb; + attime = attimes[max(0,floor(abs(overdb)))]; // attack time per formula + atcoef = exp(-1/(attime * srate)); + reltime = overdb / 125; // release at constant 125 dB/sec. + relcoef = exp(-1/(reltime * srate)); + ); + overdb = min(0,overdb); + + overdb > rundb ? ( + rundb = overdb + atcoef * (rundb - overdb); + ) : ( + rundb = overdb + relcoef * (rundb - overdb); + ); + overdb = rundb; + + cratio = (softknee ? (1 + (ratio-1) * min(overdb, 6) / 6) : ratio); + + gr = overdb * (cratio-1)/cratio; + grv = exp(gr * db2log); + + runmax = maxover + relcoef * (runmax - maxover); // highest peak for setting att/rel decays in reltime + maxover = runmax; + spl0 *= grv * makeupv; + spl1 *= grv * makeupv; diff --git a/Effects/sstillwell/badbussmojo b/Effects/sstillwell/badbussmojo new file mode 100644 index 0000000..49320f3 --- /dev/null +++ b/Effects/sstillwell/badbussmojo @@ -0,0 +1,108 @@ +// Copyright 2006, Thomas Scott Stillwell +// All rights reserved. +// +//Redistribution and use in source and binary forms, with or without modification, are permitted +//provided that the following conditions are met: +// +//Redistributions of source code must retain the above copyright notice, this list of conditions +//and the following disclaimer. +// +//Redistributions in binary form must reproduce the above copyright notice, this list of conditions +//and the following disclaimer in the documentation and/or other materials provided with the distribution. +// +//The name of Thomas Scott Stillwell may not be used to endorse or +//promote products derived from this software without specific prior written permission. +// +//THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR +//IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +//FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS +//BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +//(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +//PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, +//STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +//THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +desc:Bad Buss Mojo Waveshaper +desc:Bad Buss Mojo Waveshaper [Stillwell] +//tags: processing distortion waveshaper +//author: Stillwell + +slider1:0<-60,0,0.01>Pos Threshold (dB) +slider2:0<-60,0,0.01>Neg Threshold (dB) +slider3:1<1,2,0.001>Pos Nonlinearity +slider4:1<1,2,0.001>Neg Nonlinearity +slider5:0<0,6,0.01>Pos Knee (dB) +slider6:0<0,6,0.01>Neg Knee (dB) +slider7:0<0,100,0.1>Mod A +slider8:0<0,100,0.1>Mod B + +in_pin:left input +in_pin:right input +out_pin:left output +out_pin:right output + +@init + log2db = 8.6858896380650365530225783783321; // 20 / ln(10) + db2log = 0.11512925464970228420089957273422; // ln(10) / 20 + pi = 3.1415926535; + halfpi = pi / 2; + + +@slider + pt=slider1; + nt=slider2; + pl=slider3-1; + nl=slider4-1; + mixa=slider7/100; + mixb=slider8/100; + drivea=1; + mixa1 = 1 - mixa; + drivea1 = 1 / (1 - (drivea / 2)); + drivea2 = drive / 2; + mixb1 = 1 - mixb; + pts=slider5; + nts=slider6; + ptt=pt - pts; + ntt=nt - nts; + + ptsv=exp(ptt * db2log); + ntsv=-exp(ntt * db2log); + +@sample + mixa > 0 ? ( + wet0 = drivea1 * spl0 * (1 - abs(spl0 * drivea2)); + wet1 = drivea1 * spl1 * (1 - abs(spl1 * drivea2)); + spl0 = mixa1 * spl0 + (mixa) * wet0; + spl1 = mixa1 * spl1 + (mixa) * wet1; + ); + + mixb > 0 ? ( + wet0 = sin(spl0 * halfpi); + wet1 = sin(spl1 * halfpi); + spl0 = mixb1 * spl0 + (mixb) * wet0; + spl1 = mixb1 * spl1 + (mixb) * wet1; + ); + + db0 = log(abs(spl0)) * log2db; + db1 = log(abs(spl1)) * log2db; + + spl0>ptsv ? ( + diff=max(min((db0 - ptt),0),pts); + pts == 0 ? mult = 0 : mult=diff/pts; + spl0 = ptsv + ((spl0 - ptsv) / (1 + (pl * mult))); + ); + spl0ptsv ? ( + diff=max(min((db1 - ptt),0),pts); + pts == 0 ? mult = 0 : mult=diff/pts; + spl1 = ptsv + ((spl1 - ptsv) / (1 + (pl * mult))); + ); + spl1Pos Threshold (dB) +slider2:0<-60,0,0.01>Neg Threshold (dB) +slider3:1<1,2,0.001>Pos Nonlinearity +slider4:1<1,2,0.001>Neg Nonlinearity +slider5:0<0,6,0.01>Pos Knee (dB) +slider6:0<0,6,0.01>Neg Knee (dB) +slider7:0<0,100,0.1>Mod A +slider8:0<0,100,0.1>Mod B +slider9:2<1,32,1>Oversampling (times) +slider10:0<0,1,1{Disabled,Enabled}>Limit to 0 dBFS + +in_pin:L Input +in_pin:R Input +out_pin:L Output +out_pin:R Output + +@init + log2db = 8.6858896380650365530225783783321; // 20 / ln(10) + db2log = 0.11512925464970228420089957273422; // ln(10) / 20 + pi = 3.1415926535; + halfpi = pi / 2; + last_aa=0; + +@slider + pt=slider1; + nt=slider2; + pl=slider3-1; + nl=slider4-1; + mixa=slider7/100; + mixb=slider8/100; + drivea=1; + mixa1 = 1 - mixa; + drivea1 = 1 / (1 - (drivea / 2)); + drivea2 = drive / 2; + mixb1 = 1 - mixb; + pts=slider5; + nts=slider6; + ptt=pt - pts; + ntt=nt - nts; + + ptsv=exp(ptt * db2log); + ntsv=-exp(ntt * db2log); + + aasize=(slider9+0.5)|0; + aasize<1?aasize=1:aasize>256?aasize=256; + + aasize != last_aa ? ( + + aasize>1 ? ( + Q=0.707; + pos=0.9/aasize * $pi; + + cpos=cos(pos); + spos=sin(pos); + + alpha=spos/(2.0*Q); + + sc=1.0/( 1 + alpha); + b1 = (1-cpos) * sc; + b2 = b0 = b1*0.5; + a1 = -2 * cpos * sc; + a2 = (1-alpha)*sc; + ); + last_aa=aasize; + + hist4=hist5=hist6=hist7=0; + hist8=hist9=hist10=hist11=0; + hist12=hist13=hist14=hist15=0; + hist16=hist17=hist18=hist19=0; + ); + + +@sample + sspos=0; + src0=spl0; + src1=spl1; + loop(aasize, + + // run input filter + aasize > 1 ? ( + sspl0 = src0*b0 + hist4*b1 + hist5*b2 - hist6*a1 - hist7*a2; + hist5=hist4; hist4=src0; hist7=hist6; hist6=sspl0; + + sspl1 = src1*b0 + hist8*b1 + hist9*b2 - hist10*a1 - hist11*a2; + hist9=hist8; hist8=src1; hist11=hist10; hist10=sspl1; + ) : ( + sspl0=src0; + sspl1=src1; + ); + + + mixa > 0 ? ( + wet0 = drivea1 * sspl0 * (1 - abs(sspl0 * drivea2)); + wet1 = drivea1 * sspl1 * (1 - abs(sspl1 * drivea2)); + sspl0 = mixa1 * sspl0 + (mixa) * wet0; + sspl1 = mixa1 * sspl1 + (mixa) * wet1; + ); + + mixb > 0 ? ( + wet0 = sin(sspl0 * halfpi); + wet1 = sin(sspl1 * halfpi); + sspl0 = mixb1 * sspl0 + (mixb) * wet0; + sspl1 = mixb1 * sspl1 + (mixb) * wet1; + ); + + db0 = log(abs(sspl0)) * log2db; + db1 = log(abs(sspl1)) * log2db; + + sspl0>ptsv ? ( + diff=max(min((db0 - ptt),0),pts); + pts == 0 ? mult = 0 : mult=diff/pts; + sspl0 = ptsv + ((sspl0 - ptsv) / (1 + (pl * mult))); + ); + sspl0ptsv ? ( + diff=max(min((db1 - ptt),0),pts); + pts == 0 ? mult = 0 : mult=diff/pts; + sspl1 = ptsv + ((sspl1 - ptsv) / (1 + (pl * mult))); + ); + sspl10.5?( + sspl0>1.0?sspl0=1.0:sspl0<-1.0?sspl0=-1.0; + sspl1>1.0?sspl1=1.0:sspl1<-1.0?sspl1=-1.0; + ); + + // run output filters + + aasize > 1 ? ( + + (sspos+=1)==1 ? ( + spl0 = sspl0*b0 + hist12*b1 + hist13*b2 - hist14*a1 - hist15*a2; + spl1 = sspl1*b0 + hist16*b1 + hist17*b2 - hist18*a1 - hist19*a2; + + hist13=hist12; hist12=sspl0; hist15=hist14; hist14=spl0; + hist17=hist16; hist16=sspl1; hist19=hist18; hist18=spl1; + + ) : ( + tmp0 = sspl0*b0 + hist12*b1 + hist13*b2 - hist14*a1 - hist15*a2; + tmp1 = sspl1*b0 + hist16*b1 + hist17*b2 - hist18*a1 - hist19*a2; + + hist13=hist12; hist12=sspl0; hist15=hist14; hist14=tmp0; + hist17=hist16; hist16=sspl1; hist19=hist18; hist18=tmp1; + ); + ) : ( + spl0=sspl0; + spl1=sspl1; + ); + + ); + diff --git a/Effects/sstillwell/chorus b/Effects/sstillwell/chorus new file mode 100644 index 0000000..9e935bd --- /dev/null +++ b/Effects/sstillwell/chorus @@ -0,0 +1,73 @@ +// This effect Copyright (C) 2004 and later Cockos Incorporated +// License: GPL - http://www.gnu.org/licenses/gpl.html + +desc:Chorus (Improved Shaping) +desc:Chorus with Improved Shaping [Stillwell] +//tags: modulation chorus +//author: Stillwell + +slider1:15<1,250>Chorus Length (ms) +slider2:1<1,8,1>Number Of Voices +slider3:0.5<0.1,16>Rate (Hz) +slider4:0.7<0,1>Pitch Fudge Factor +slider5:-6<-100,12,1>Wet Mix (dB) +slider6:-6<-100,12,1>Dry Mix (dB) + +in_pin:left input +in_pin:right input +out_pin:left output +out_pin:right output + +@init + +bpos=0; + +@slider + +numvoices=min(16,max(slider2,1)); +choruslen=slider1*srate*0.001; + +i=0; +loop(numvoices, + i[0]=(i+1)/numvoices*$pi; + i+=1; +); + +bufofs=16384; + +csize=choruslen/numvoices * slider4; + +rateadj=slider3*2*$pi/srate; +wetmix = 2 ^ (slider5/6); +drymix = 2 ^ (slider6/6); + + +@sample + +bpos >= choruslen ? ( + bpos=0; +); +os0=spl0; + +// calculate new sample based on numvoices + +spl0=spl0*drymix; +vol=wetmix/numvoices; +i=0; + +loop(numvoices, + tpos = bpos - (0.5+0.49*(sin( $pi*(i[0] += rateadj))/($pi*i[0]))) * (i+1) * csize; + + tpos < 0 ? tpos += choruslen; + tpos > choruslen ? tpos -= choruslen; + frac=tpos-(0|tpos); + tpos2=tpos>=choruslen-1?0:tpos+1; + + spl0 += (bufofs[tpos]*(1-frac)+bufofs[tpos2]*frac) * vol; + i+=1; +); + +bufofs[bpos]=os0; +bpos+=1; + +spl1=spl0; diff --git a/Effects/sstillwell/chorus_stereo b/Effects/sstillwell/chorus_stereo new file mode 100644 index 0000000..93ec2c7 --- /dev/null +++ b/Effects/sstillwell/chorus_stereo @@ -0,0 +1,107 @@ +// This effect Copyright (C) 2004 and later Cockos Incorporated +// License: GPL - http://www.gnu.org/licenses/gpl.html + +desc:Chorus (Stereo) +desc:Chorus Stereo [Stillwell] +//tags: modulation chorus stereo +//author: Stillwell + +slider1:15<1,500>Chorus Length (ms) +slider2:1<1,8,1>Number Of Voices +slider3:0.5<0,16,0.01>Rate (Hz) (0=tempo sync) +slider4:0.7<0,1>Pitch Fudge Factor +slider5:-6<-100,12,1>Wet Mix (dB) +slider6:-6<-100,12,1>Dry Mix (dB) +slider7:0.0<-1,1,0.01>Channel Rate Offset (Hz) +slider8:0.25<0.0625,4,0.0625>Tempo Sync (fraction of whole note) + +in_pin:left input +in_pin:right input +out_pin:left output +out_pin:right output + +@init + +bpos=0; + +@slider + +numvoices=min(16,max(slider2,1)); +choruslen=slider1*srate*0.001; + +i0=0; +i1=0; +i=0; +loop(numvoices, + i0[0]=(i+1)/numvoices*$pi; + i1[0]=(i+1)/numvoices*$pi; + i+=1; +); +bufofs0=32768; +bufofs1=32768; + +csize=choruslen/numvoices * slider4; + +wetmix = 2 ^ (slider5/6); +drymix = 2 ^ (slider6/6); + + +@block + + +slider3==0 ? ( + rateadj=tempo/(240*slider8)*2*$pi/srate; + rateadj0=tempo/(240*slider8)*2*$pi/srate; + rateadj1=(tempo/(240*slider8)+slider7)*2*$pi/srate; +):( + rateadj=slider3*2*$pi/srate; + rateadj0=slider3*2*$pi/srate; + rateadj1=(slider3+slider7)*2*$pi/srate; +); + +@sample + +bpos0 >= choruslen ? ( + bpos0=0; +); +os0=spl0; +bpos1 >= choruslen ? ( + bpos1=0; +); +os1=spl1; + +// calculate new sample based on numvoices + +spl0=spl0*drymix; +spl1=spl1*drymix; +vol=wetmix/numvoices; +i0=0; +i1=0; + +loop(numvoices, + tpos0 = bpos0 - (0.5+0.49*(sin( $pi*(i0[0] += rateadj0))/($pi*i0[0]))) * (i0+1) * csize; + tpos1 = bpos1 - (0.5+0.49*(sin( $pi*(i1[0] += rateadj1))/($pi*i1[0]))) * (i1+1) * csize; + + tpos0 < 0 ? tpos0 += choruslen; + tpos1 < 0 ? tpos1 += choruslen; + tpos0 > choruslen ? tpos0 -= choruslen; + tpos1 > choruslen ? tpos1 -= choruslen; + + frac0=tpos0-(0|tpos0); + tpos02=tpos0>=choruslen-1?0:tpos0+1; + frac1=tpos1-(0|tpos1); + tpos12=tpos1>=choruslen-1?0:tpos1+1; + + spl0 += (bufofs0[tpos0]*(1-frac0)+bufofs0[tpos02]*frac0) * vol; + spl1 += (bufofs1[tpos1]*(1-frac1)+bufofs1[tpos12]*frac1) * vol; + + i0+=1; + i1+=1; +); + + +bufofs0[bpos0]=os0; +bufofs1[bpos1]=os1; + +bpos0+=1; +bpos1+=1; diff --git a/Effects/sstillwell/delay_pong b/Effects/sstillwell/delay_pong new file mode 100644 index 0000000..846342b --- /dev/null +++ b/Effects/sstillwell/delay_pong @@ -0,0 +1,66 @@ +// This effect Copyright (C) 2004 and later Cockos Incorporated +// License: GPL - http://www.gnu.org/licenses/gpl.html + +desc: Delay w/Tempo Ping-Pong +desc: Delay with Tempo Ping-Pong [Stillwell] +//tags: delay stereo +//author: Stillwell + +slider1:0<0,13000,1>Delay (ms) (0=tempo sync) +slider2:-5<-120,6,1>Feedback (dB) +slider3:0<-120,6,1>Mix In (dB) +slider4:-6<-120,6,1>Output Wet (dB) +slider5:0<-120,6,1>Output Dry (dB) +slider6:0<0,100,1>Ping-Pong Width (%) +slider7:0.25<0.0625,4,0.0625>Tempo Sync (fraction of whole note) + +in_pin:left input +in_pin:right input +out_pin:left output +out_pin:right output + +@init + delaypos=0; + pongloc=0; + +@slider + odelay=delaylen; + beat = 240 * slider7; + wetmix = 2 ^(slider2/6); + drymix = 2 ^(slider3/6); + wetmix2 = 2 ^(slider4/6); + drymix2 = 2 ^(slider5/6); + pongwidth = slider6/100; + pongpan=(1-pongwidth)/2; + +@block + slider1==0 ? ( + delaylen=min((beat / tempo)*srate,500000); + ):( + delaylen=min(slider1 * srate / 1000,500000); + ); + +@sample + dpint = delaypos*2; + os1=dpint[0]; + os2=dpint[1]; + + dpint[0]=min(max(spl0*drymix + os1*wetmix,-4),4); + dpint[1]=min(max(spl1*drymix + os2*wetmix,-4),4); + + switching=0; + + abs(delaypos)<400 ? ( + switch = pongloc ? abs(delaypos)/400 : ((400 - abs(delaypos))/400); + ); + + (delaypos+=1) >= delaylen ? ( + delaypos=0; + pongloc = (pongloc * -1) + 1; + ); + + os = (os1 + os2) / 2; + panloc = pongpan + pongwidth * switch; + + spl0=spl0*drymix2 + os*wetmix2*(panloc); + spl1=spl1*drymix2 + os*wetmix2*(1-panloc); diff --git a/Effects/sstillwell/delay_tempo b/Effects/sstillwell/delay_tempo new file mode 100644 index 0000000..9b626b4 --- /dev/null +++ b/Effects/sstillwell/delay_tempo @@ -0,0 +1,91 @@ +// This effect Copyright (C) 2004 and later Cockos Incorporated +// License: GPL - http://www.gnu.org/licenses/gpl.html + +desc: Delay w/Tempo Length +desc: Delay with Tempo Length [Stillwell] +//tags: delay +//author: Stillwell + +slider1:0<0,13000,1>Delay (ms) (0=tempo sync) +slider2:-120<-120,6,1>Feedback (dB) +slider3:0<-120,6,1>Mix In (dB) +slider4:-6<-120,6,1>Output Wet (dB) +slider5:0<-120,6,1>Output Dry (dB) +slider6:0<0,1,1{Off,On}>Resample On Length Change +slider7:0.25<0.0625,4,0.0625>Tempo Sync (fraction of whole note) + +in_pin:left input +in_pin:right input +out_pin:left output +out_pin:right output + +@init +delaypos=0; + +@slider +beat = 240 * slider7; +wetmix = 2 ^(slider2/6); +drymix = 2 ^(slider3/6); +wetmix2 = 2 ^(slider4/6); +drymix2 = 2 ^(slider5/6); + + +@block +odelay=delaylen; +slider1==0 ? ( + delaylen=min((beat / tempo)*srate,500000); +):( + delaylen=min(slider1 * srate / 1000,500000); +); +odelay != delaylen ? ( + slider6 && odelay > delaylen ? ( + // resample down delay buffer, heh + rspos=0; rspos2=0; + drspos=odelay/delaylen; + loop(delaylen, + + tpos = ((rspos)|0)*2; + rspos2[0]=tpos[0]; + rspos2[1]=tpos[1]; + + rspos2+=2; + rspos+=drspos; + ); + delaypos /= drspos; + delaypos|=0; + delaypos<0?delaypos=0; + ) : ( + slider6 && odelay < delaylen ? ( + // resample up delay buffer, heh + drspos=odelay/delaylen; + rspos=odelay; + rspos2=delaylen*2; + loop(delaylen, + rspos-=drspos; + rspos2-=2; + + tpos = ((rspos)|0)*2; + rspos2[0]=tpos[0]; + rspos2[1]=tpos[1]; + + ); + delaypos /= drspos; + delaypos|=0; + delaypos<0?delaypos=0; + ) : (!slider6 && delaypos >= delaylen ? delaypos = 0); + ); + freembuf(delaylen*2); +); + +@sample +dpint = delaypos*2; +os1=dpint[0]; +os2=dpint[1]; + +dpint[0]=min(max(spl0*drymix + os1*wetmix,-4),4); +dpint[1]=min(max(spl1*drymix + os2*wetmix,-4),4); + +(delaypos+=1) >= delaylen ? delaypos=0; + +spl0=spl0*drymix2 + os1*wetmix2; +spl1=spl1*drymix2 + os2*wetmix2; diff --git a/Effects/sstillwell/dirtsqueeze b/Effects/sstillwell/dirtsqueeze new file mode 100644 index 0000000..1241b5e --- /dev/null +++ b/Effects/sstillwell/dirtsqueeze @@ -0,0 +1,121 @@ +// Copyright 2006, Thomas Scott Stillwell +// All rights reserved. +// +//Redistribution and use in source and binary forms, with or without modification, are permitted +//provided that the following conditions are met: +// +//Redistributions of source code must retain the above copyright notice, this list of conditions +//and the following disclaimer. +// +//Redistributions in binary form must reproduce the above copyright notice, this list of conditions +//and the following disclaimer in the documentation and/or other materials provided with the distribution. +// +//The name of Thomas Scott Stillwell may not be used to endorse or +//promote products derived from this software without specific prior written permission. +// +//THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR +//IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +//FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS +//BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +//(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +//PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, +//STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +//THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +desc:Dirt Squeeze Compressor +desc:Dirt Squeeze Compressor [Stillwell] +//tags: dynamics compressor +//author: Stillwell + +slider1:0<-60,0,0.1>Threshold (dB) +slider2:1<1,20,0.1>Ratio +slider3:0<0,1,1{No,Yes}>Automatic Make-Up +slider4:0<-20,20,0.1>Manual Gain + +in_pin:left input +in_pin:right input +out_pin:left output +out_pin:right output + +@init + i=0; + loop( + 120, + attimes[i] = ((0.08924 / i) + (0.60755 / (i ^ 2)) - 0.00006)*srate; + i+=1; + ); + overthresh = 0; + compressing = 0; + relfactor = 2 ^ (-20.833333333 / srate); + attime=0; + atctr=0; + prevmax=0; + maxover=0; + relctr=0; + cratio=0; + ratio=0; + +@slider + thresh = slider1; + threshv = 2^(thresh/6); + ratio = slider2; + cratio = ratio; + autogain = slider3; + makeup = autogain ? (((abs(thresh) - (abs(thresh) / ratio))/2) + slider4) : slider4; + makeupv = 2^(makeup / 6); + +@sample + aspl0 = abs(spl0); + aspl1 = abs(spl1); + maxspl = max(aspl0,aspl1); + maxspl > threshv ? ( + overthresh = 1; + overdb = log(6 * maxspl / threshv) / log(2); + overdb > maxover ? ( + maxover = overdb; + prevattime = attime; + attime = attimes[floor(overdb+0.5)]; + prevattime > 0 ? (atctr += prevattime - attime); + atctr = min(atctr,attime); + reltime = srate * overdb / 125; + relctr = 0; + cratio = ratio; + ); + relctr = 0; + releasing = 0; + atctr == 0 ? atctr = attimes[floor(overdb)]; + ); + overthresh ? ( + atctr += 1; + atctr >= attime ? ( + compressing = 1; + relctr = 0; + ); + ); + compressing ? ( + overthresh = 0; + atctr = 0; + thresh0 = threshv * sign(spl0); + thresh1 = threshv * sign(spl1); + spl0 = (aspl0 <= threshv ? spl0 : (thresh0 + (spl0-thresh0) / cratio)); + spl1 = (aspl1 <= threshv ? spl1 : (thresh1 + (spl1-thresh1) / cratio)); + ); + maxspl <= threshv ? ( + relctr += 1; + releasing = 1; + relctr >= (reltime - 1000) ? ( + compressing = 0; + overthresh = 0; + relctr = 0; + reltime = 0; + atctr = 0; + attime = 0; + releasing = 0; + cratio = ratio; + ); + ); + releasing ? ( + cratio = max(1,cratio * relfactor); + ); + spl0 = spl0 * makeupv; + spl1 = spl1 * makeupv; diff --git a/Effects/sstillwell/drumtrigger b/Effects/sstillwell/drumtrigger new file mode 100644 index 0000000..8907adf --- /dev/null +++ b/Effects/sstillwell/drumtrigger @@ -0,0 +1,101 @@ +// drumtrigger: generates MIDI note information from audio impulses +// Copyright 2006, Thomas Scott Stillwell +// All rights reserved. +// +//Redistribution and use in source and binary forms, with or without modification, are permitted +//provided that the following conditions are met: +// +//Redistributions of source code must retain the above copyright notice, this list of conditions +//and the following disclaimer. +// +//Redistributions in binary form must reproduce the above copyright notice, this list of conditions +//and the following disclaimer in the documentation and/or other materials provided with the distribution. +// +//The name of Thomas Scott Stillwell may not be used to endorse or +//promote products derived from this software without specific prior written permission. +// +//THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR +//IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +//FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS +//BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +//(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +//PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, +//STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +//THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +desc:Turn audio signal into velocity-sensitive drum trigger + +slider1:-17<-60,6,1>Open Threshold (dB) +slider2:-18<-60,6,1>Close Threshold (dB) +slider3:30<0,200,0.1>Retrigger interval (ms) +slider4:0<0,100,0.1>Original Signal Mix%; +slider5:10<1,16,1>MIDI Channel +slider6:69<0,255,1>MIDI Note# +slider7:1<0.1,7.0,0.1>Peak Det. Interval +slider8:1<-5.0,5.0,0.01>Trigger align (ms) + +@init + sending=0; + sent=0; + noteon=9*16; + noteoff=8*16; + measuring=0; + meascnt=0; + maxvel=0; + triggerpos=0; + threshlat = 0.001 * srate; + +@block + pos=0; + triggerpos=0; + +@slider + othresh=2^(slider1/6); + cthresh=2^(slider2/6); + retrigger = (slider3 / 1000) * srate; + mix = slider4 / 100; + chan=slider5-1; + note=slider6; + velperiod=(slider7 / 1000) * srate; + threshlat=(slider8 / 1000) * srate; + oncmd=noteon+chan; + offcmd=noteoff+chan; + +@sample + pos += 1; + trigwait += 1; + + linvel=min(1,max(abs(spl0),abs(spl1))); + velocity=max(0,min(127,floor(maxvel*127))); + + linvel >= othresh && sent==0 && sending==0 && measuring==0 && trigwait >= retrigger ? ( + measuring=1; + maxvel=linvel; + meascnt=0; + triggerpos=pos; + ); + measuring==1 ? ( + meascnt += 1; + meascnt >= velperiod ? ( + measuring=0; + sending=1; + meascnt=0; + ) : ( + maxvel=max(maxvel,linvel); + ); + ); + sent==0 && sending==1 ? ( + sent=1; + sending=0; + trigwait=0; + midisend(max(0,triggerpos-threshlat), oncmd, note|velocity*256); + ); + linvel <= cthresh && sent==1 && trigwait >= retrigger ? ( + sent=0; + trigwait=0; + maxvel=0; + midisend(max(0,triggerpos-threshlat), offcmd, note); + ); + + spl0 = spl0 * mix; + spl1 = spl1 * mix; diff --git a/Effects/sstillwell/eventhorizon b/Effects/sstillwell/eventhorizon new file mode 100644 index 0000000..0b0ae25 --- /dev/null +++ b/Effects/sstillwell/eventhorizon @@ -0,0 +1,78 @@ +// Copyright 2006, Thomas Scott Stillwell +// All rights reserved. +// +//Redistribution and use in source and binary forms, with or without modification, are permitted +//provided that the following conditions are met: +// +//Redistributions of source code must retain the above copyright notice, this list of conditions +//and the following disclaimer. +// +//Redistributions in binary form must reproduce the above copyright notice, this list of conditions +//and the following disclaimer in the documentation and/or other materials provided with the distribution. +// +//The name of Thomas Scott Stillwell may not be used to endorse or +//promote products derived from this software without specific prior written permission. +// +//THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR +//IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +//FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS +//BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +//(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +//PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, +//STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +//THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +desc:Event Horizon Clipper +desc:Event Horizon Clipper [Stillwell] +//tags: dynamics limiter saturation +//author: Stillwell + +slider1:0.0<-30.0,0.0,0.1>Threshold (dB) +slider2:-0.1<-20.0,0.0,0.1>Ceiling (dB) +slider3:2.0<0,6.0,0.01>Soft Clip (dB) +//slider4:10<3,20,0.1>Soft Clip Ratio + +in_pin:left input +in_pin:right input +out_pin:left output +out_pin:right output + +@init + pi = 3.1415926535; + log2db = 8.6858896380650365530225783783321; // 20 / ln(10) + db2log = 0.11512925464970228420089957273422; // ln(10) / 20 + +@slider + thresh=exp(slider1 * db2log); + threshdb=slider1; + ceiling=exp(slider2 * db2log); + ceildb=slider2; + makeup=exp((ceildb-threshdb) * db2log); + makeupdb=ceildb-threshdb; + sc = -slider3; + scv = exp(sc * db2log); + sccomp = exp(-sc * db2log); + peakdb = ceildb+25; + peaklvl = exp(peakdb * db2log); + scratio = slider4; + scmult = abs((ceildb - sc) / (peakdb - sc)); + +@sample + peak=max(abs(spl0),abs(spl1)); + spl0=spl0*makeup; + spl1=spl1*makeup; + sign0 = sign(spl0); + sign1 = sign(spl1); + abs0=abs(spl0); + abs1=abs(spl1); + overdb0 = 2.08136898 * log(abs0) * log2db - ceildb; + overdb1 = 2.08136898 * log(abs1) * log2db - ceildb; + abs0 > scv ? ( + spl0=sign0*(scv + exp(overdb0*scmult)*db2log); + ); + abs1 > scv ? ( + spl1=sign1*(scv + exp(overdb1*scmult)*db2log); + ); + + spl0=min(ceiling,abs(spl0))*sign(spl0); + spl1=min(ceiling,abs(spl1))*sign(spl1); diff --git a/Effects/sstillwell/eventhorizon2 b/Effects/sstillwell/eventhorizon2 new file mode 100644 index 0000000..4bcd55d --- /dev/null +++ b/Effects/sstillwell/eventhorizon2 @@ -0,0 +1,94 @@ +// Copyright 2006, Thomas Scott Stillwell +// All rights reserved. +// +//Redistribution and use in source and binary forms, with or without modification, are permitted +//provided that the following conditions are met: +// +//Redistributions of source code must retain the above copyright notice, this list of conditions +//and the following disclaimer. +// +//Redistributions in binary form must reproduce the above copyright notice, this list of conditions +//and the following disclaimer in the documentation and/or other materials provided with the distribution. +// +//The name of Thomas Scott Stillwell may not be used to endorse or +//promote products derived from this software without specific prior written permission. +// +//THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR +//IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +//FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS +//BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +//(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +//PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, +//STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +//THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +desc:Event Horizon Limiter/Clipper +desc:Event Horizon Limiter/Clipper [Stillwell] +//tags: dynamics limiter +//author: Stillwell + +slider1:0.0<-30.0,0.0,0.1>Threshold +slider2:-0.1<-20.0,0.0,0.1>Ceiling +slider3:0<0,1200,1>Release (ms) (0=auto) + +in_pin:left input +in_pin:right input +out_pin:left output +out_pin:right output + +@init + pi = 3.1415926535; + log2db = 8.6858896380650365530225783783321; // 20 / ln(10) + db2log = 0.11512925464970228420089957273422; // ln(10) / 20 + attime=0.004; + reltime=0.200; + atcoef=exp(-1/(attime * srate)); + relcoef=exp(-1/(reltime * srate)); + +@slider + thresh=exp(slider1 * db2log); + threshdb=slider1; + ceiling=exp(slider2 * db2log); + ceildb=slider2; + makeup=exp((ceildb-threshdb) * db2log); + makeupdb=ceildb-threshdb; + peakdb = ceildb+25; + peaklvl = exp(peakdb * db2log); + release=slider3/1000; + release==0 ? (reltime = overdb / 125) : (reltime = release); + relcoef=exp(-1/(reltime * srate)); + + +@sample + spl0=spl0*makeup; + spl1=spl1*makeup; + + abs0=abs(spl0); + abs1=abs(spl1); + overdbv = max(abs0, abs1); + overdb = 2.08136898 * log(overdbv) * log2db - ceilingdb; + + overdb > rundb ? ( // calculate overshoot (and thus GR) + rundb = overdb + atcoef * (rundb - overdb); // use attack and release to + ) : ( // smoothly scale gain reduction + rundb = overdb + relcoef * (rundb - overdb); + ); + overdb = max(0,rundb); + + release == 0 ? ( // Auto-release? Compute release time + overdb > maxover ? ( + maxover = overdb; + reltime = overdb / 125; // release at constant 125 dB/sec. + relcoef = exp(-1/(reltime * srate)); + ); + runmax = maxover + relcoef * (runmax - maxover); // highest peak for setting att/rel decays in reltime + maxover = runmax; + ); + + gr = exp(overdb * db2log); + + spl0*=gr; + spl1*=gr; + + spl0=min(ceiling,abs(spl0))*sign(spl0); // If it gets past the limiter, whack it. + spl1=min(ceiling,abs(spl1))*sign(spl1); // since we don't lookahead, some stuff will diff --git a/Effects/sstillwell/exciter b/Effects/sstillwell/exciter new file mode 100644 index 0000000..1ef49b8 --- /dev/null +++ b/Effects/sstillwell/exciter @@ -0,0 +1,183 @@ +// Copyright 2007, Thomas Scott Stillwell +// All rights reserved. +// +//Redistribution and use in source and binary forms, with or without modification, are permitted +//provided that the following conditions are met: +// +//Redistributions of source code must retain the above copyright notice, this list of conditions +//and the following disclaimer. +// +//Redistributions in binary form must reproduce the above copyright notice, this list of conditions +//and the following disclaimer in the documentation and/or other materials provided with the distribution. +// +//The name of Thomas Scott Stillwell may not be used to endorse or +//promote products derived from this software without specific prior written permission. +// +//THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR +//IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +//FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS +//BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +//(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +//PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, +//STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +//THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +desc:Exciter (Treble Enhancer) +desc:Exciter (Treble Enhancer) [Stillwell] +//tags: processing exciter distortion +//author: Stillwell + +slider1:0<0,100,0.1>Mix (%) +slider2:0<0,100,0.1>Drive (%) +slider3:5000<2000,10000,100>Frequency (Hz) + + +in_pin:left input +in_pin:right input +out_pin:left output +out_pin:right output + +@init + + gain1 = 0; + freq1 = freq; + a1 = 1; + s1 = 1; + q1 = 1 / (sqrt((a1 + 1/a1)*(1/s1 - 1) + 2)); + w01 = 2 * $pi * freq1/srate; + cosw01 = cos(w01); + sinw01 = sin(w01); + alpha1 = sinw01 / (2 * q1); + + b01 = (1 + cosw01)/2; + b11 = -(1 + cosw01); + b21 = (1 + cosw01)/2; + a01 = 1 + alpha1; + a11 = -2 * cosw01; + a21 = 1 - alpha1; + b01 /= a01; + b11 /= a01; + b21 /= a01; + a11 /= a01; + a21 /= a01; + + gain3 = 0; + freq3 = freq * 2; + a3 = 10^(gain3/40); + s3 = 1; + q3 = 1 / (sqrt((a3 + 1/a3)*(1/s3 - 1) + 2)); + w03 = 2 * $pi * freq3/srate; + cosw03 = cos(w03); + sinw03 = sin(w03); + alpha3 = sinw03 / (2 * q3); + + b03 = (1 + cosw03)/2; + b13 = -(1 + cosw03); + b23 = (1 + cosw03)/2; + a03 = 1 + alpha3; + a13 = -2 * cosw03; + a23 = 1 - alpha3; + b03 /= a03; + b13 /= a03; + b23 /= a03; + a13 /= a03; + a23 /= a03; + +@slider + + mix=(10 * slider1) / 100; + drive=slider2 / 100; + mix1 = 1 - mix; + drive1 = 1 / (1 - (drive / 2)); + drive2 = drive / 2; + freq = slider3; + + gain1 = 0; + freq1 = freq; + a1 = 1; + s1 = 1; + q1 = 1 / (sqrt((a1 + 1/a1)*(1/s1 - 1) + 2)); + w01 = 2 * $pi * freq1/srate; + cosw01 = cos(w01); + sinw01 = sin(w01); + alpha1 = sinw01 / (2 * q1); + + b01 = (1 - cosw01)/2; + b11 = (1 - cosw01); + b21 = (1 - cosw01)/2; + a01 = 1 + alpha1; + a11 = -2 * cosw01; + a21 = 1 - alpha1; + b01 /= a01; + b11 /= a01; + b21 /= a01; + a11 /= a01; + a21 /= a01; + + gain3 = 0; + freq3 = freq * 2; + a3 = 10^(gain3/40); + s3 = 1; + q3 = 1 / (sqrt((a3 + 1/a3)*(1/s3 - 1) + 2)); + w03 = 2 * $pi * freq3/srate; + cosw03 = cos(w03); + sinw03 = sin(w03); + alpha3 = sinw03 / (2 * q3); + + b03 = (1 + cosw03)/2; + b13 = -(1 + cosw03); + b23 = (1 + cosw03)/2; + a03 = 1 + alpha3; + a13 = -2 * cosw03; + a23 = 1 - alpha3; + b03 /= a03; + b13 /= a03; + b23 /= a03; + a13 /= a03; + a23 /= a03; + + +@sample + + dry0 = spl0; + dry1 = spl1; + + //hpf to extract HF signal + ospl0 = dry0; + dry0 = b01 * dry0 + b11 * xl11 + b21 * xl21 - a11 * yl11 - a21 * yl21; + xl21 = xl11; + xl11 = ospl0; + yl21 = yl11; + yl11 = dry0; + + ospl1 = dry1; + dry1 = b01 * dry1 + b11 * xr11 + b21 * xr21 - a11 * yr11 - a21 * yr21; + xr21 = xr11; + xr11 = ospl1; + yr21 = yr11; + yr11 = dry1; + + //enhance HF signal + wet0 = drive1 * (1.5 * dry0) * (1 - abs((1.5 * dry0) * drive2)); + wet1 = drive1 * (1.5 * dry1) * (1 - abs((1.5 * dry1) * drive2)); + wet0 /= 1.5; + wet1 /= 1.5; + + //hpf to isolate enhance signal + ospl0 = wet0; + wet0 = b03 * wet0 + b13 * xl13 + b23 * xl23 - a13 * yl13 - a23 * yl23; + xl23 = xl13; + xl13 = ospl0; + yl23 = yl13; + yl13 = wet0; + + ospl1 = wet1; + wet1 = b03 * wet1 + b13 * xr13 + b23 * xr23 - a13 * yr13 - a23 * yr23; + xr23 = xr13; + xr13 = ospl1; + yr23 = yr13; + yr13 = wet1; + + + spl0 = spl0 + (mix) * wet0; + spl1 = spl1 + (mix) * wet1; diff --git a/Effects/sstillwell/expander b/Effects/sstillwell/expander new file mode 100644 index 0000000..660e4e7 --- /dev/null +++ b/Effects/sstillwell/expander @@ -0,0 +1,116 @@ +// Copyright 2007, Thomas Scott Stillwell +// All rights reserved. +// +//Redistribution and use in source and binary forms, with or without modification, are permitted +//provided that the following conditions are met: +// +//Redistributions of source code must retain the above copyright notice, this list of conditions +//and the following disclaimer. +// +//Redistributions in binary form must reproduce the above copyright notice, this list of conditions +//and the following disclaimer in the documentation and/or other materials provided with the distribution. +// +//The name of Thomas Scott Stillwell may not be used to endorse or +//promote products derived from this software without specific prior written permission. +// +//THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR +//IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +//FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS +//BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +//(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +//PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, +//STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +//THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +desc:Downward Expander +desc:Downward Expander [Stillwell] +//tags: dynamics expander +//author: Stillwell + +slider1:-120<-120,0,0.1>Threshold (dB) +slider2:1<1,20,0.1>Ratio +slider3:0<-20,20,0.1>Gain +slider4:0<0,1,1{Normal,Sidechain}>Detector Input +slider5:0<0,1,1{Peak,RMS}>Detection +slider6:30<0,200,1>Attack (ms) +slider7:2<0,100,1>Release (ms) + +in_pin:left input +in_pin:right input +in_pin:sidechain left input +in_pin:sidechain right input +out_pin:left output +out_pin:right output + +@init + log2db = 8.6858896380650365530225783783321; // 20 / ln(10) + db2log = 0.11512925464970228420089957273422; // ln(10) / 20 + attime=slider6 * 0.001; + reltime=slider7 * 0.001; + maxover=0; + ratio=0; + cratio=0; + rundb=0; + overdb=0; + maxover=0; + atcoef=exp(-1/(attime * srate)); + relcoef=exp(-1/(reltime * srate)); + fbacoef=exp(-1000/(2 * srate)); // 2 msec. opto attack for feedback detection + fbrcoef=exp(-1000/(200 * srate)); // 200 msec. opto release for feedback detection + sidechain = 0; + automakeup = 0; + +@slider + thresh = slider1; + threshv = exp(thresh * db2log); + ratio = slider2; + sidechain = slider4; + makeup = slider3; + makeupv = exp((makeup) * db2log); + RMSdet = slider5; + RMSdet ? ( + rmscoef=exp(-1000/(10 * srate)); // 10 ms RMS window + ) : ( + rmscoef=exp(-1000/(0.0025 * srate)); // 2.5 us Peak detector + ); + attime=slider6 * 0.001; + reltime=slider7 * 0.001; + atcoef=exp(-1/(attime * srate)); + relcoef=exp(-1/(reltime * srate)); + +@sample + sidechain ? ( + aspl0 = abs(spl2); + aspl1 = abs(spl3); + ) : ( + aspl0 = abs(spl0); + aspl1 = abs(spl1); + ); + + RMSDet ? ( + ave = (aspl0 * aspl0) + (aspl1 * aspl1); + runave = ave + rmscoef * (runave - ave); + det = sqrt(max(0,runave)); + ) : ( + maxspl = max(aspl0, aspl1); + maxspl = maxspl * maxspl; + runave = maxspl + rmscoef * (runave - maxspl); + det = sqrt(max(0,runave)); + ); + overdb = 2.08136898 * log(det/threshv) * log2db; + overdb = min(0,overdb); + + overdb > rundb ? ( + rundb = overdb + atcoef * (rundb - overdb); + ) : ( + rundb = overdb + relcoef * (rundb - overdb); + ); + overdb = rundb; + + cratio = (softknee ? (1 + (ratio-1) * min(overdb, 6) / 6) : ratio); + + gr = overdb * (cratio-1)/cratio; + grv = exp(gr * db2log); + + spl0 *= grv * makeupv; + spl1 *= grv * makeupv; diff --git a/Effects/sstillwell/expressbus b/Effects/sstillwell/expressbus new file mode 100644 index 0000000..a268e83 --- /dev/null +++ b/Effects/sstillwell/expressbus @@ -0,0 +1,157 @@ +// Copyright 2006, Thomas Scott Stillwell +// All rights reserved. +// +//Redistribution and use in source and binary forms, with or without modification, are permitted +//provided that the following conditions are met: +// +//Redistributions of source code must retain the above copyright notice, this list of conditions +//and the following disclaimer. +// +//Redistributions in binary form must reproduce the above copyright notice, this list of conditions +//and the following disclaimer in the documentation and/or other materials provided with the distribution. +// +//The name of Thomas Scott Stillwell may not be used to endorse or +//promote products derived from this software without specific prior written permission. +// + + +//THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR +//IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +//FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS +//BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +//(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +//PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, +//STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +//THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +desc:Express Bus Compressor +desc:Express Bus Compressor [Stillwell] +//tags: dynamics compressor +//author: Stillwell + +slider1:0<-60,0,0.1>Threshold (dB) +slider2:1<1,20,0.1>Ratio +slider3:0<-20,20,0.1>Gain +slider4:0<0,1,1{Hard,Soft}>Knee +slider5:0<0,1,1{Normal,Sidechain}>Detector Input +slider6:0<0,1,1{No,Yes}>Automatic Make-Up +slider7:0<0,1,1{Peak,RMS}>Detection +slider8:0<0,1,1{Feedforward,Feedback}>Detection Source + +in_pin:left input +in_pin:right input +in_pin:sidechain left input +in_pin:sidechain right input +out_pin:left output +out_pin:right output + +@init + log2db = 8.6858896380650365530225783783321; // 20 / ln(10) + db2log = 0.11512925464970228420089957273422; // ln(10) / 20 + i=0; + loop( + 120, + attimes[i] = ((0.08924 / i) + (0.60755 / (i ^ 2)) - 0.00006); + i+=1; + ); + attime=0.010; + reltime=0.100; + maxover=0; + ratio=0; + cratio=0; + rundb=0; + overdb=0; + maxover=0; + atcoef=exp(-1/(attime * srate)); + relcoef=exp(-1/(reltime * srate)); + fbacoef=exp(-1000/(2 * srate)); // 2 msec. opto attack for feedback detection + fbrcoef=exp(-1000/(200 * srate)); // 200 msec. opto release for feedback detection + sidechain = 0; + automakeup = 0; + +@slider + thresh = slider1; + threshv = exp(thresh * db2log); + ratio = slider2; + softknee = slider4; + cthresh = (softknee ? (thresh -3) : thresh); + cthreshv = exp(cthresh * db2log); + sidechain = slider5; + automakeup = slider6; + automakeup ? ( + autogain = (abs(thresh) - (abs(thresh)/max(1,ratio-1)))/2; + ) : ( + autogain = 0; + ); + makeup = slider3; + makeupv = exp((makeup+autogain) * db2log); + RMSdet = slider7; + RMSdet ? ( + rmscoef=exp(-1000/(10 * srate)); // 10 ms RMS window + ) : ( + rmscoef=exp(-1000/(0.0025 * srate)); // 2.5 us Peak detector + ); + opto = slider8; + +@sample + sidechain ? ( + aspl0 = abs(spl2); + aspl1 = abs(spl3); + ) : ( + opto ? ( + ospl = ospl0 * ospl0 + ospl1 * ospl1; + ospl > runospl ? ( + runospl = ospl + atcoef * (runospl - ospl); + ) : ( + runospl = ospl + relcoef * (runospl - ospl); + ); + ospl = sqrt(max(0,runospl)); + + ospl *= 0.5; + + aspl0 = abs(ospl); + aspl1 = abs(ospl); + ) : ( + aspl0 = abs(spl0); + aspl1 = abs(spl1); + ); + ); + + RMSDet ? ( + ave = (aspl0 * aspl0) + (aspl1 * aspl1); + runave = ave + rmscoef * (runave - ave); + det = sqrt(max(0,runave)); + ) : ( + maxspl = max(aspl0, aspl1); + maxspl = maxspl * maxspl; + runave = maxspl + rmscoef * (runave - maxspl); + det = sqrt(max(0,runave)); + ); + overdb = 2.08136898 * log(det/cthreshv) * log2db; + overdb > maxover ? ( + maxover = overdb; + reltime = overdb / 125; // release at constant 125 dB/sec. + relcoef = exp(-1/(reltime * srate)); + ); + overdb = max(0,overdb); + + overdb > rundb ? ( + rundb = overdb + atcoef * (rundb - overdb); + ) : ( + rundb = overdb + relcoef * (rundb - overdb); + ); + overdb = rundb; + + cratio = (softknee ? (1 + (ratio-1) * min(overdb, 6) / 6) : ratio); + + gr = -overdb * (cratio-1)/cratio; + grv = exp(gr * db2log); + + runmax = maxover + relcoef * (runmax - maxover); // highest peak for setting att/rel decays in reltime + maxover = runmax; + + spl0 *= grv * makeupv; + spl1 *= grv * makeupv; + + ospl0 = spl0; + ospl1 = spl1; diff --git a/Effects/sstillwell/fairlychildish b/Effects/sstillwell/fairlychildish new file mode 100644 index 0000000..450e657 --- /dev/null +++ b/Effects/sstillwell/fairlychildish @@ -0,0 +1,149 @@ +// Copyright 2006, Thomas Scott Stillwell +// All rights reserved. +// +//Redistribution and use in source and binary forms, with or without modification, are permitted +//provided that the following conditions are met: +// +//Redistributions of source code must retain the above copyright notice, this list of conditions +//and the following disclaimer. +// +//Redistributions in binary form must reproduce the above copyright notice, this list of conditions +//and the following disclaimer in the documentation and/or other materials provided with the distribution. +// +//The name of Thomas Scott Stillwell may not be used to endorse or +//promote products derived from this software without specific prior written permission. +// +//THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR +//IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +//FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS +//BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +//(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +//PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, +//STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +//THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +desc:Fairly Childish Compressor/Limiter +desc:Fairly Childish Compressor/Limiter similar to F670 [Stillwell] +//tags: dynamics compressor limiter +//author: Stillwell + +slider1:0<-60,0,0.1>Threshold (dB) +slider2:70<0.1,100,0.1>Bias +slider3:0<-30,30,0.1>Makeup Gain +slider4:0<0,1,1{Left/Right,Lat/Vert}>AGC +slider5:1<1,6,1>Time Constant +slider6:100<1,10000,1>Level Detector RMS Window +slider7:1<1,50,0.1>Current Compression Ratio +slider8:0<-90,0,0.1>Gain Reduction + +in_pin:left input +in_pin:right input +out_pin:left output +out_pin:right output + +@init + log2db = 8.6858896380650365530225783783321; // 20 / ln(10) + db2log = 0.11512925464970228420089957273422; // ln(10) / 20 + i=0; + attime=0.0002; //200us + reltime=0.300; //300ms + rmstime=0.000050; //50us + maxover=0; + ratio=0; + cratio=0; + rundb=0; + overdb=0; + maxover=0; + atcoef=exp(-1/(attime * srate)); + relcoef=exp(-1/(reltime * srate)); + rmscoef=exp(-1/(rmstime * srate)); + leftright = 0; + latvert = 1; + +@slider + thresh = slider1; + threshv = exp(thresh * db2log); + ratio = 20; + bias = 80 * slider2 / 100; + cthresh = thresh - bias; + cthreshv = exp(cthresh * db2log); + makeup = slider3; + makeupv = exp(makeup * db2log); + agc = slider4; + timeconstant = slider5; + timeconstant == 1 ? ( + attime = 0.0002; + reltime = 0.300; + ); + timeconstant == 2 ? ( + attime = 0.0002; + reltime = 0.800; + ); + timeconstant == 3 ? ( + attime = 0.0004; + reltime = 2.000; + ); + timeconstant == 4 ? ( + attime = 0.0008; + reltime = 5.000; + ); + timeconstant == 5 ? ( + attime = 0.0002; + reltime = 10.000; + ); + timeconstant == 6 ? ( + attime = 0.0004; + reltime = 25.000; + ); + atcoef = exp(-1 / (attime * srate)); + relcoef = exp(-1 / (reltime * srate)); + + rmstime = slider6 / 1000000; + rmscoef=exp(-1/(rmstime * srate)); + +@sample + agc == leftright ? ( + aspl0 = abs(spl0); + aspl1 = abs(spl1); + ) : ( + aspl0 = abs(spl0+spl1)/2; + aspl1 = abs(spl0-spl1)/2; + ); + + maxspl = max(aspl0, aspl1); + maxspl = maxspl * maxspl; + + runave = maxspl + rmscoef * (runave - maxspl); + det = sqrt(max(0,runave)); + + overdb = 2.08136898 * log(det/threshv) * log2db; + overdb = max(0,overdb); + + overdb > rundb ? ( + rundb = overdb + atcoef * (rundb - overdb); + ) : ( + rundb = overdb + relcoef * (rundb - overdb); + ); + overdb = max(rundb,0); + + bias == 0 ? ( + cratio = ratio; + ) : ( + cratio = 1 + (ratio-1) * sqrt((overdb + dcoffset) / (bias + dcoffset)); + ); + slider7 = cratio; + + gr = -overdb * (cratio-1)/cratio; + slider8 = -gr; + grv = exp(gr * db2log); + + agc == leftright ? ( + spl0 *= grv * makeupv; + spl1 *= grv * makeupv; + ) : ( + sav0 = (spl0 + spl1) * grv; + sav1 = (spl0 - spl1) * grv; + spl0 = makeupv * (sav0 + sav1) * 0.5; + spl1 = makeupv * (sav0 - sav1) * 0.5; + ); + diff --git a/Effects/sstillwell/fairlychildish2 b/Effects/sstillwell/fairlychildish2 new file mode 100644 index 0000000..b041e2c --- /dev/null +++ b/Effects/sstillwell/fairlychildish2 @@ -0,0 +1,312 @@ +// Copyright 2006, Thomas Scott Stillwell +// All rights reserved. +// +//Redistribution and use in source and binary forms, with or without modification, are permitted +//provided that the following conditions are met: +// +//Redistributions of source code must retain the above copyright notice, this list of conditions +//and the following disclaimer. +// +//Redistributions in binary form must reproduce the above copyright notice, this list of conditions +//and the following disclaimer in the documentation and/or other materials provided with the distribution. +// +//The name of Thomas Scott Stillwell may not be used to endorse or +//promote products derived from this software without specific prior written permission. +// +//THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR +//IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +//FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS +//BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +//(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +//PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, +//STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +//THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +desc:Fairly Childish Stereo Compressor/Limiter +desc:Fairly Childish Stereo Compressor/Limiter, similar to F670 [Stillwell] +//tags: dynamics compressor limiter stereo +//author: Stillwell + +slider1:0<-60,0,0.1>L/Lat Threshold (dB) +slider2:0<-60,0,0.1>R/Vert Threshold (dB) +slider3:70<0,100,0.1>L/Lat Bias +slider4:70<0,100,0.1>R/Vert Bias +slider5:0<-30,30,0.1>L/Lat Makeup Gain +slider6:0<-30,30,0.1>R/Vert Makeup Gain +slider7:0<0,1,1{Left/Right,Lat/Vert}>AGC +slider8:1<1,6,1>L/Lat Time Constant +slider9:1<1,6,1>R/Vert Time Constant +slider10:100<1,10000,1>L/Lat RMS Window +slider11:100<1,10000,1>R/Vert RMS Window +//slider13:1<1,50,0.1>L/Lat Current Compression Ratio +//slider14:1<1,50,0.1>R/Vert Current Compression Ratio +//slider15:0<-90,0,0.1>L/Lat Gain Reduction +//slider16:0<-90,0,0.1>R/Vert Gain Reduction + +in_pin:left input +in_pin:right input +out_pin:left output +out_pin:right output + +@init + log2db = 8.6858896380650365530225783783321; // 20 / ln(10) + db2log = 0.11512925464970228420089957273422; // ln(10) / 20 + i=0; + lattime=0.0002; //200us + lreltime=0.300; //300ms + lrmstime=0.000050; //50us + lmaxover=0; + lratio=0; + lcratio=0; + lrundb=0; + loverdb=0; + lmaxover=0; + latcoef=exp(-1/(attime * srate)); + lrelcoef=exp(-1/(reltime * srate)); + lrmscoef=exp(-1/(rmstime * srate)); + rattime=0.0002; //200us + rreltime=0.300; //300ms + rrmstime=0.000050; //50us + rmaxover=0; + rratio=0; + rcratio=0; + rrundb=0; + roverdb=0; + rmaxover=0; + ratcoef=exp(-1/(attime * srate)); + rrelcoef=exp(-1/(reltime * srate)); + rrmscoef=exp(-1/(rmstime * srate)); + leftright = 0; + latvert = 1; + +@slider + agc = slider7; + + agc == leftright ? ( + lthresh = slider1; + lthreshv = exp(lthresh * db2log); + lratio = 20; + lbias = 80 * slider3 / 100; + lcthresh = lthresh - lbias; + lcthreshv = exp(lcthresh * db2log); + lmakeup = slider5; + lmakeupv = exp(lmakeup * db2log); + ltimeconstant = slider8; + ltimeconstant == 1 ? ( + lattime = 0.0002; + lreltime = 0.300; + ); + ltimeconstant == 2 ? ( + lattime = 0.0002; + lreltime = 0.800; + ); + ltimeconstant == 3 ? ( + lattime = 0.0004; + lreltime = 2.000; + ); + ltimeconstant == 4 ? ( + lattime = 0.0008; + lreltime = 5.000; + ); + ltimeconstant == 5 ? ( + lattime = 0.0002; + lreltime = 10.000; + ); + ltimeconstant == 6 ? ( + lattime = 0.0004; + lreltime = 25.000; + ); + latcoef = exp(-1 / (lattime * srate)); + lrelcoef = exp(-1 / (lreltime * srate)); + + lrmstime = slider10 / 1000000; + lrmscoef=exp(-1/(lrmstime * srate)); + + slider2 = slider1; + slider4 = slider3; + slider6 = slider5; + slider9 = slider8; + slider11 = slider10; + ) : ( + lthresh = slider1; + lthreshv = exp(lthresh * db2log); + lratio = 20; + lbias = 80 * slider3 / 100; + lcthresh = lthresh - lbias; + lcthreshv = exp(lcthresh * db2log); + lmakeup = slider5; + lmakeupv = exp(lmakeup * db2log); + ltimeconstant = slider8; + ltimeconstant == 1 ? ( + lattime = 0.0002; + lreltime = 0.300; + ); + ltimeconstant == 2 ? ( + lattime = 0.0002; + lreltime = 0.800; + ); + ltimeconstant == 3 ? ( + lattime = 0.0004; + lreltime = 2.000; + ); + ltimeconstant == 4 ? ( + lattime = 0.0008; + lreltime = 5.000; + ); + ltimeconstant == 5 ? ( + lattime = 0.0002; + lreltime = 10.000; + ); + ltimeconstant == 6 ? ( + lattime = 0.0004; + lreltime = 25.000; + ); + latcoef = exp(-1 / (lattime * srate)); + lrelcoef = exp(-1 / (lreltime * srate)); + + lrmstime = slider10 / 1000000; + lrmscoef=exp(-1/(lrmstime * srate)); + rthresh = slider2; + rthreshv = exp(rthresh * db2log); + rratio = 20; + rbias = 80 * slider4 / 100; + rcthresh = rthresh - rbias; + rcthreshv = exp(rcthresh * db2log); + rmakeup = slider6; + rmakeupv = exp(rmakeup * db2log); + rtimeconstant = slider9; + rtimeconstant == 1 ? ( + rattime = 0.0002; + rreltime = 0.300; + ); + rtimeconstant == 2 ? ( + rattime = 0.0002; + rreltime = 0.800; + ); + rtimeconstant == 3 ? ( + rattime = 0.0004; + rreltime = 2.000; + ); + rtimeconstant == 4 ? ( + rattime = 0.0008; + rreltime = 5.000; + ); + rtimeconstant == 5 ? ( + rattime = 0.0002; + rreltime = 10.000; + ); + rtimeconstant == 6 ? ( + rattime = 0.0004; + rreltime = 25.000; + ); + ratcoef = exp(-1 / (rattime * srate)); + rrelcoef = exp(-1 / (rreltime * srate)); + + rrmstime = slider11 / 1000000; + rrmscoef=exp(-1/(rrmstime * srate)); + ); + +@sample + agc == leftright ? ( + aspl0 = abs(spl0); + aspl1 = abs(spl1); + lmaxspl = max(aspl0, aspl1); + lmaxspl = lmaxspl * lmaxspl; + + lrunave = lmaxspl + lrmscoef * (lrunave - lmaxspl); + ldet = sqrt(max(0,lrunave)); + + loverdb = 2.08136898 * log(ldet/lthreshv) * log2db; + loverdb = max(0,loverdb); + + loverdb > lrundb ? ( + lrundb = loverdb + latcoef * (lrundb - loverdb); + ) : ( + lrundb = loverdb + lrelcoef * (lrundb - loverdb); + ); + loverdb = max(lrundb,0); + + lbias == 0 ? ( + lcratio = lratio; + ) : ( + lcratio = 1 + (lratio-1) * sqrt((loverdb + dcoffset) / (lbias + dcoffset)); + ); + //slider13 = lcratio; + //slider14 = lcratio; + + lgr = -loverdb * (lcratio-1)/lcratio; + //slider15 = -lgr; + //slider16 = -lgr; + lgrv = exp(lgr * db2log); + + ) : ( + aspl0 = abs(spl0+spl1)/2; + aspl1 = abs(spl0-spl1)/2; + lmaxspl = aspl0; + lmaxspl = lmaxspl * lmaxspl; + + lrunave = lmaxspl + lrmscoef * (lrunave - lmaxspl); + ldet = sqrt(max(0,lrunave)); + + loverdb = 2.08136898 * log(ldet/lthreshv) * log2db; + loverdb = max(0,loverdb); + + loverdb > lrundb ? ( + lrundb = loverdb + latcoef * (lrundb - loverdb); + ) : ( + lrundb = loverdb + lrelcoef * (lrundb - loverdb); + ); + loverdb = max(lrundb,0); + + lbias == 0 ? ( + lcratio = lratio; + ) : ( + lcratio = 1 + (lratio-1) * sqrt((loverdb + dcoffset) / (lbias + dcoffset)); + ); + + rmaxspl = aspl1; + rmaxspl = rmaxspl * rmaxspl; + + rrunave = rmaxspl + rrmscoef * (rrunave - rmaxspl); + rdet = sqrt(max(0,rrunave)); + + roverdb = 2.08136898 * log(rdet/rthreshv) * log2db; + roverdb = max(0,roverdb); + + roverdb > rrundb ? ( + rrundb = roverdb + ratcoef * (rrundb - roverdb); + ) : ( + rrundb = roverdb + rrelcoef * (rrundb - roverdb); + ); + roverdb = max(rrundb,0); + + rbias == 0 ? ( + rcratio = rratio; + ) : ( + rcratio = 1 + (rratio-1) * sqrt((roverdb + dcoffset) / (rbias + dcoffset)); + ); + + //slider13 = lcratio; + //slider14 = rcratio; + + lgr = -loverdb * (lcratio-1)/lcratio; + rgr = -roverdb * (rcratio-1)/rcratio; + //slider15 = -lgr; + //slider16 = -rgr; + lgrv = exp(lgr * db2log); + rgrv = exp(rgr * db2log); + + ); + + agc == leftright ? ( + spl0 *= lgrv * lmakeupv; + spl1 *= lgrv * lmakeupv; + ) : ( + sav0 = (spl0 + spl1) * lgrv; + sav1 = (spl0 - spl1) * rgrv; + sav0 *= lmakeupv; + sav1 *= rmakeupv; + spl0 = (sav0 + sav1) * 0.5; + spl1 = (sav0 - sav1) * 0.5; + ); + diff --git a/Effects/sstillwell/flangebaby b/Effects/sstillwell/flangebaby new file mode 100644 index 0000000..cf7ab77 --- /dev/null +++ b/Effects/sstillwell/flangebaby @@ -0,0 +1,152 @@ +// Copyright 2007, Thomas Scott Stillwell +// All rights reserved. +// +//Redistribution and use in source and binary forms, with or without modification, are permitted +//provided that the following conditions are met: +// +//Redistributions of source code must retain the above copyright notice, this list of conditions +//and the following disclaimer. +// +//Redistributions in binary form must reproduce the above copyright notice, this list of conditions +//and the following disclaimer in the documentation and/or other materials provided with the distribution. +// +//The name of Thomas Scott Stillwell may not be used to endorse or +//promote products derived from this software without specific prior written permission. +// +//THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR +//IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +//FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS +//BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +//(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +//PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, +//STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +//THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +desc:Flange Baby +desc:Flange Baby [Stillwell] +//tags: modulation flanger +//author: Stillwell + +slider1:5<1,10,0.01>Flange (Delay) +slider2:0.5<0,1,0.01>Depth +slider3:0<-1,1,0.01>Feedback +slider4:0<0,10,0.01>Speed (Hz) (0=tempo sync) +slider5:0.5<0,1,0.01>Mix +slider6:0<0,5,0.01>Channel Offset +slider7:0.25<0.0625,4,0.0625>Tempo Sync (fraction of whole note) +slider8:0<0,1,1{Triangle,Sine}>LFO Waveform + +in_pin:left input +in_pin:right input +out_pin:left output +out_pin:right output + +@init + MAX_WG_DELAY = 16384; + i = 0; + counter = 0; + buffer0 = 2048; + buffer1 = buffer0 + MAX_WG_DELAY; + memset(buffer0,0,MAX_WG_DELAY); + memset(buffer1,0,MAX_WG_DELAY); + feedback = 0; + delay = 5 ; + tdelay0 = delay; + tdelay1 = delay; + rate = 0; + mix = 0; + beat = 0.25; + triangle=0; + sinusoid=1; + lfo=triangle; + twopi = 2 * $pi; + + +@slider + delay = slider1; + offset = slider6; + beat = 240 * slider7; + tdelay0 = delay; + tdelay1 = (delay + offset); + sdelay0 = tdelay0 / 1000 * srate; + sdelay1 = tdelay1 / 1000 * srate; + feedback = slider3; + depth = (delay - 0.1) * slider2; + mix = slider5; + lfo = (slider8 == triangle ? triangle : sinusoid); + tpos = 0; + +@block + slider4==0 ? ( + rate=tempo / beat; + ):( + rate=slider4; + ); + + (lfo==triangle) ? ( + trate = 4 * depth / (srate / rate); + ) : ( + trate = twopi / (srate / rate ); + ); + + +@sample + back0 = counter - sdelay0; + back1 = counter - sdelay1; + (back0 < 0) ? back0 = MAX_WG_DELAY + back0; + (back1 < 0) ? back1 = MAX_WG_DELAY + back1; + index00 = back0 | 0; + index01 = back1 | 0; + index_10 = index00 - 1; + index_11 = index01 - 1; + index10 = index00 + 1; + index11 = index01 + 1; + index20 = index00 + 2; + index21 = index01 + 2; + (index_10 < 0) ? index_10 = MAX_WG_DELAY + 1; + (index_11 < 0) ? index_11 = MAX_WG_DELAY + 1; + (index10 >= MAX_WG_DELAY) ? index10 = 0; + (index11 >= MAX_WG_DELAY) ? index11 = 0; + (index20 >= MAX_WG_DELAY) ? index20 = 0; + (index21 >= MAX_WG_DELAY) ? index21 = 0; + y_10 = buffer0[index_10]; + y_11 = buffer1[index_11]; + y00 = buffer0[index00]; + y01 = buffer1[index01]; + y10 = buffer0[index10]; + y11 = buffer1[index11]; + y20 = buffer0[index20]; + y21 = buffer1[index21]; + x0 = back0 - index00; + x1 = back1 - index01; + c00 = y00; + c01 = y01; + c10 = 0.5 * (y10 - y_10); + c11 = 0.5 * (y11 - y_11); + c20 = y_10 - 2.5 * y00 + 2.0 * y10 - 0.5 * y20; + c21 = y_11 - 2.5 * y01 + 2.0 * y11 - 0.5 * y21; + c30 = 0.5 * (y20 - y_10) + 1.5 * (y00 - y10); + c31 = 0.5 * (y21 - y_11) + 1.5 * (y01 - y11); + output0 = ((c30 * x0 + c20) * x0 + c10) * x0 + c00; + output1 = ((c31 * x1 + c21) * x1 + c11) * x1 + c01; + buffer0[counter] = spl0 + output0 * feedback; + buffer1[counter] = spl1 + output1 * feedback; + spl0 = spl0 * (1-mix) + output0 * mix; + spl1 = spl1 * (1-mix) + output1 * mix; + counter += 1; + (counter >= MAX_WG_DELAY) ? counter = 0; + (lfo == triangle) ? ( + dir0 ? tdelay0 += trate : tdelay0 -= trate; + dir1 ? tdelay1 += trate : tdelay1 -= trate; + (tdelay0 >= delay + depth) ? dir0 = 0; + (tdelay1 >= delay + depth) ? dir1 = 0; + (tdelay0 <= delay - depth) ? dir0 = 1; + (tdelay1 <= delay - depth) ? dir1 = 1; + ) : ( + tdelay0 = delay + (delay-0.1) * sin(tpos); + tdelay1 = delay + (delay-0.1) * sin(tpos+offset); + tpos += trate; + (tpos > twopi) ? tpos = 0; + ); + sdelay0 = tdelay0 / 1000 * srate; + sdelay1 = tdelay1 / 1000 * srate; diff --git a/Effects/sstillwell/hpflpf b/Effects/sstillwell/hpflpf new file mode 100644 index 0000000..33dbbd5 --- /dev/null +++ b/Effects/sstillwell/hpflpf @@ -0,0 +1,171 @@ +// Copyright 2006, Thomas Scott Stillwell +// All rights reserved. +// +//Redistribution and use in source and binary forms, with or without modification, are permitted +//provided that the following conditions are met: +// +//Redistributions of source code must retain the above copyright notice, this list of conditions +//and the following disclaimer. +// +//Redistributions in binary form must reproduce the above copyright notice, this list of conditions +//and the following disclaimer in the documentation and/or other materials provided with the distribution. +// +//The name of Thomas Scott Stillwell may not be used to endorse or +//promote products derived from this software without specific prior written permission. +// +//THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR +//IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +//FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS +//BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +//(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +//PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, +//STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +//THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +desc:RBJ Highpass/Lowpass Filters +desc:RBJ Highpass/Lowpass Filters [Stillwell] +//tags: filter +//author: Stillwell + +slider1:0<0,1000,10>HPF +slider2:22000<1000,22000,100>LPF +slider3:0<-20,20,0.1>Gain + +in_pin:left input +in_pin:right input +out_pin:left output +out_pin:right output + +@init + hpf = 0; + gain1 = 0; + freq1 = slider1; + a1 = 1; + s1 = 1; + q1 = 1 / (sqrt((a1 + 1/a1)*(1/s1 - 1) + 2)); + w01 = 2 * $pi * freq1/srate; + cosw01 = cos(w01); + sinw01 = sin(w01); + alpha1 = sinw01 / (2 * q1); + + b01 = (1 + cosw01)/2; + b11 = -(1 + cosw01); + b21 = (1 + cosw01)/2; + a01 = 1 + alpha1; + a11 = -2 * cosw01; + a21 = 1 - alpha1; + b01 /= a01; + b11 /= a01; + b21 /= a01; + a11 /= a01; + a21 /= a01; + + lpf = 0; + gain3 = 0; + freq3 = 22000; + a3 = 10^(gain3/40); + s3 = 2; + q3 = 1 / (sqrt((a3 + 1/a3)*(1/s3 - 1) + 2)); + w03 = 2 * $pi * freq3/srate; + cosw03 = cos(w03); + sinw03 = sin(w03); + alpha3 = sinw03 / (2 * q3); + + b03 = (1 - cosw03)/2; + b13 = (1 - cosw03); + b23 = (1 - cosw03)/2; + a03 = 1 + alpha3; + a13 = -2 * cosw03; + a23 = 1 - alpha3; + b03 /= a03; + b13 /= a03; + b23 /= a03; + a13 /= a03; + a23 /= a03; + + gain = 1; + +@slider + freq1 = slider1; + freq3 = slider2; + gain = 10^(slider3/20); + + slider1 == 0 ? hpf = 0 : hpf = 1; + slider2 == 22000 ? lpf = 0 : lpf = 1; + + a1 = 1; + s1 = 1; + q1 = 1 / (sqrt((a1 + 1/a1)*(1/s1 - 1) + 2)); + w01 = 2 * $pi * freq1/srate; + cosw01 = cos(w01); + sinw01 = sin(w01); + alpha1 = sinw01 / (2 * q1); + + b01 = (1 + cosw01)/2; + b11 = -(1 + cosw01); + b21 = (1 + cosw01)/2; + a01 = 1 + alpha1; + a11 = -2 * cosw01; + a21 = 1 - alpha1; + b01 /= a01; + b11 /= a01; + b21 /= a01; + a11 /= a01; + a21 /= a01; + + a3 = 1; + s3 = 1; + q3 = 1 / (sqrt((a3 + 1/a3)*(1/s3 - 1) + 2)); + w03 = 2 * $pi * freq3/srate; + cosw03 = cos(w03); + sinw03 = sin(w03); + alpha3 = sinw03 / (2 * q3); + + b03 = (1 - cosw03)/2; + b13 = (1 - cosw03); + b23 = (1 - cosw03)/2; + a03 = 1 + alpha3; + a13 = -2 * cosw03; + a23 = 1 - alpha3; + b03 /= a03; + b13 /= a03; + b23 /= a03; + a13 /= a03; + a23 /= a03; + + +@sample + hpf != 0 ? ( + ospl0 = spl0; + spl0 = b01 * spl0 + b11 * xl11 + b21 * xl21 - a11 * yl11 - a21 * yl21; + xl21 = xl11; + xl11 = ospl0; + yl21 = yl11; + yl11 = spl0; + + ospl1 = spl1; + spl1 = b01 * spl1 + b11 * xr11 + b21 * xr21 - a11 * yr11 - a21 * yr21; + xr21 = xr11; + xr11 = ospl1; + yr21 = yr11; + yr11 = spl1; + ); + + lpf != 0 ? ( + ospl0 = spl0; + spl0 = b03 * spl0 + b13 * xl13 + b23 * xl23 - a13 * yl13 - a23 * yl23; + xl23 = xl13; + xl13 = ospl0; + yl23 = yl13; + yl13 = spl0; + + ospl1 = spl1; + spl1 = b03 * spl1 + b13 * xr13 + b23 * xr23 - a13 * yr13 - a23 * yr23; + xr23 = xr13; + xr13 = ospl1; + yr23 = yr13; + yr13 = spl1; + ); + + spl0 *= gain; + spl1 *= gain; diff --git a/Effects/sstillwell/hugebooty b/Effects/sstillwell/hugebooty new file mode 100644 index 0000000..b55f988 --- /dev/null +++ b/Effects/sstillwell/hugebooty @@ -0,0 +1,180 @@ +// Copyright 2007, Thomas Scott Stillwell +// All rights reserved. +// +//Redistribution and use in source and binary forms, with or without modification, are permitted +//provided that the following conditions are met: +// +//Redistributions of source code must retain the above copyright notice, this list of conditions +//and the following disclaimer. +// +//Redistributions in binary form must reproduce the above copyright notice, this list of conditions +//and the following disclaimer in the documentation and/or other materials provided with the distribution. +// +//The name of Thomas Scott Stillwell may not be used to endorse or +//promote products derived from this software without specific prior written permission. +// +//THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR +//IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +//FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS +//BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +//(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +//PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, +//STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +//THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +desc: Huge Booty Bass Enhancer +desc: Huge Booty Bass Enhancer [Stillwell] +//tags: processing saturation +//author: Stillwell + +slider1:0<0,100,0.1>Mix (%) +slider2:0<0,100,0.1>Drive (%) +slider3:100<20,200,1>Frequency (Hz) + +in_pin:left input +in_pin:right input +out_pin:left output +out_pin:right output + +@init + + gain1 = 0; + freq1 = freq; + a1 = 1; + s1 = 1; + q1 = 1 / (sqrt((a1 + 1/a1)*(1/s1 - 1) + 2)); + w01 = 2 * $pi * freq1/srate; + cosw01 = cos(w01); + sinw01 = sin(w01); + alpha1 = sinw01 / (2 * q1); + + b01 = (1 - cosw01)/2; + b11 = (1 - cosw01); + b21 = (1 - cosw01)/2; + a01 = 1 + alpha1; + a11 = -2 * cosw01; + a21 = 1 - alpha1; + b01 /= a01; + b11 /= a01; + b21 /= a01; + a11 /= a01; + a21 /= a01; + + gain3 = 0; + freq3 = freq; + a3 = 10^(gain3/40); + s3 = 1; + q3 = 1 / (sqrt((a3 + 1/a3)*(1/s3 - 1) + 2)); + w03 = 2 * $pi * freq3/srate; + cosw03 = cos(w03); + sinw03 = sin(w03); + alpha3 = sinw03 / (2 * q3); + + b03 = (1 + cosw03)/2; + b13 = -(1 + cosw03); + b23 = (1 + cosw03)/2; + a03 = 1 + alpha3; + a13 = -2 * cosw03; + a23 = 1 - alpha3; + b03 /= a03; + b13 /= a03; + b23 /= a03; + a13 /= a03; + a23 /= a03; + +@slider + + mix=(slider1 * 1.5) / 100; + drive=slider2 / 100; + mix1 = 1 - mix; + drive1 = 1 / (1 - (drive / 2)); + drive2 = drive / 2; + freq = slider3; + + gain1 = 0; + freq1 = freq; + a1 = 1; + s1 = 1; + q1 = 1 / (sqrt((a1 + 1/a1)*(1/s1 - 1) + 2)); + w01 = 2 * $pi * freq1/srate; + cosw01 = cos(w01); + sinw01 = sin(w01); + alpha1 = sinw01 / (2 * q1); + + b01 = (1 - cosw01)/2; + b11 = (1 - cosw01); + b21 = (1 - cosw01)/2; + a01 = 1 + alpha1; + a11 = -2 * cosw01; + a21 = 1 - alpha1; + b01 /= a01; + b11 /= a01; + b21 /= a01; + a11 /= a01; + a21 /= a01; + + gain3 = 0; + freq3 = freq; + a3 = 10^(gain3/40); + s3 = 1; + q3 = 1 / (sqrt((a3 + 1/a3)*(1/s3 - 1) + 2)); + w03 = 2 * $pi * freq3/srate; + cosw03 = cos(w03); + sinw03 = sin(w03); + alpha3 = sinw03 / (2 * q3); + + b03 = (1 + cosw03)/2; + b13 = -(1 + cosw03); + b23 = (1 + cosw03)/2; + a03 = 1 + alpha3; + a13 = -2 * cosw03; + a23 = 1 - alpha3; + b03 /= a03; + b13 /= a03; + b23 /= a03; + a13 /= a03; + a23 /= a03; + + +@sample + + dry0 = spl0; + dry1 = spl1; + + //lpf to extract bass signal + ospl0 = dry0; + dry0 = b01 * dry0 + b11 * xl11 + b21 * xl21 - a11 * yl11 - a21 * yl21; + xl21 = xl11; + xl11 = ospl0; + yl21 = yl11; + yl11 = dry0; + + ospl1 = dry1; + dry1 = b01 * dry1 + b11 * xr11 + b21 * xr21 - a11 * yr11 - a21 * yr21; + xr21 = xr11; + xr11 = ospl1; + yr21 = yr11; + yr11 = dry1; + + //enhance bass signal + wet0 = drive1 * dry0 * (1 - abs(dry0 * drive2)); + wet1 = drive1 * dry1 * (1 - abs(dry1 * drive2)); + + //hpf to isolate enhance signal + ospl0 = wet0; + wet0 = b03 * wet0 + b13 * xl13 + b23 * xl23 - a13 * yl13 - a23 * yl23; + xl23 = xl13; + xl13 = ospl0; + yl23 = yl13; + yl13 = wet0; + + ospl1 = wet1; + wet1 = b03 * wet1 + b13 * xr13 + b23 * xr23 - a13 * yr13 - a23 * yr23; + xr23 = xr13; + xr13 = ospl1; + yr23 = yr13; + yr13 = wet1; + + + spl0 = spl0 + (mix) * wet0; + spl1 = spl1 + (mix) * wet1; diff --git a/Effects/sstillwell/louderizer b/Effects/sstillwell/louderizer new file mode 100644 index 0000000..21d9c41 --- /dev/null +++ b/Effects/sstillwell/louderizer @@ -0,0 +1,55 @@ +// Copyright 2006, Thomas Scott Stillwell +// All rights reserved. +// +//Redistribution and use in source and binary forms, with or without modification, are permitted +//provided that the following conditions are met: +// +//Redistributions of source code must retain the above copyright notice, this list of conditions +//and the following disclaimer. +// +//Redistributions in binary form must reproduce the above copyright notice, this list of conditions +//and the following disclaimer in the documentation and/or other materials provided with the distribution. +// +//The name of Thomas Scott Stillwell may not be used to endorse or +//promote products derived from this software without specific prior written permission. +// +//THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR +//IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +//FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS +//BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +//(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +//PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, +//STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +//THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +desc:Louderizer +desc:Louderizer [stillwell] +//tags: processing saturation +//author: Stillwell + +slider1:0<0,100,0.1>Mix (%) +slider2:0<0,100,0.1>Drive (%) + +in_pin:left input +in_pin:right input +out_pin:left output +out_pin:right output + +@slider + + mix=slider1 / 100; + drive=slider2 / 100; + mix1 = 1 - mix; + drive1 = 1 / (1 - (drive / 2)); + drive2 = drive / 2; + +@sample + + dry0 = spl0; + dry1 = spl1; + + wet0 = drive1 * dry0 * (1 - abs(dry0 * drive2)); + wet1 = drive1 * dry1 * (1 - abs(dry1 * drive2)); + + spl0 = mix1 * dry0 + (mix) * wet0; + spl1 = mix1 * dry1 + (mix) * wet1; diff --git a/Effects/sstillwell/louderizer_lpf b/Effects/sstillwell/louderizer_lpf new file mode 100644 index 0000000..8f2bd91 --- /dev/null +++ b/Effects/sstillwell/louderizer_lpf @@ -0,0 +1,93 @@ +// Copyright 2006, Thomas Scott Stillwell +// All rights reserved. +// +//Redistribution and use in source and binary forms, with or without modification, are permitted +//provided that the following conditions are met: +// +//Redistributions of source code must retain the above copyright notice, this list of conditions +//and the following disclaimer. +// +//Redistributions in binary form must reproduce the above copyright notice, this list of conditions +//and the following disclaimer in the documentation and/or other materials provided with the distribution. +// +//The name of Thomas Scott Stillwell may not be used to endorse or +//promote products derived from this software without specific prior written permission. +// +//THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR +//IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +//FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS +//BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +//(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +//PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, +//STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +//THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +desc:Louderizer LP +desc:Louderizer LP [Stillwell] +//tags: processing saturation filter +//author: Stillwell + +slider1:0<0,100,0.1>Mix (%) +slider2:0<0,100,0.1>Drive (%) +slider3:22000<1,22000>LP Frequency (Hz) +slider4:0.2<0,1>LP Size (1/Q) (0=resonant, 1=dull) +slider5:1<0,1,1{Pre-filter,Post-filter}>Drive Circuit + +in_pin:left input +in_pin:right input +out_pin:left output +out_pin:right output + +@slider + + mix=slider1 / 100; + drive=slider2 / 100; + freq=slider3; + size=slider4; + prepost=slider5; + + damp=0.01+size*20; + c = 1/tan($pi*freq/srate); + fk = 1 / (1 + c*(c+damp)); + fa1 = 2 * (1 - c*c) * fk; + fa0 = (1 + c*(c-damp)) * fk; + oldamp=damp; + + mix1 = 1 - mix; + drive1 = 1 / (1 - (drive / 2)); + drive2 = drive / 2; + + +@sample + + dry0 = spl0; + dry1 = spl1; + + prepost>0.5 ? ( + wet0 = drive1 * dry0 * (1 - abs(dry0 * drive2)); + wet1 = drive1 * dry1 * (1 - abs(dry1 * drive2)); + + fd0l = (fk*wet0) - (fa1*fd1l) - (fa0*fd2l); + fd0r = (fk*wet1) - (fa1*fd1r) - (fa0*fd2r); + + spl0 = mix1 * dry0 + (mix) * (fd0l + fd1l + fd1l + fd2l); + spl1 = mix1 * dry1 + (mix) * (fd0r + fd1r + fd1r + fd2r); + ) : ( + fd0l = (fk*dry0) - (fa1*fd1l) - (fa0*fd2l); + fd0r = (fk*dry1) - (fa1*fd1r) - (fa0*fd2r); + + wet0 = fd0l + fd1l + fd1l + fd2l; + wet1 = fd0r + fd1r + fd1r + fd2r; + + wet0 = drive1 * wet0 * (1 - abs(dry0 * drive2)); + wet1 = drive1 * wet1 * (1 - abs(dry1 * drive2)); + + spl0 = mix1 * dry0 + (mix) * wet0; + spl1 = mix1 * dry1 + (mix) * wet1; + ); + + fd2l = fd1l; + fd2r = fd1r; + + fd1l = fd0l; + fd1r = fd0r; diff --git a/Effects/sstillwell/majortom b/Effects/sstillwell/majortom new file mode 100644 index 0000000..f1c8455 --- /dev/null +++ b/Effects/sstillwell/majortom @@ -0,0 +1,162 @@ +// Copyright 2006, Thomas Scott Stillwell +// All rights reserved. +// +//Redistribution and use in source and binary forms, with or without modification, are permitted +//provided that the following conditions are met: +// +//Redistributions of source code must retain the above copyright notice, this list of conditions +//and the following disclaimer. +// +//Redistributions in binary form must reproduce the above copyright notice, this list of conditions +//and the following disclaimer in the documentation and/or other materials provided with the distribution. +// +//The name of Thomas Scott Stillwell may not be used to endorse or +//promote products derived from this software without specific prior written permission. +// + + +//THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR +//IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +//FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS +//BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +//(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +//PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, +//STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +//THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +desc:Major Tom Compressor +desc:Major Tom Compressor [Stillwell] +//tags: dynamics compressor +//author: Stillwell + +slider1:0<-60,0,0.1>Threshold (dB) +slider2:1<1,20,0.1>Ratio +slider3:0<-20,20,0.1>Gain +slider4:0<0,1,1{Hard,Soft}>Knee +slider5:0<0,1,1{Normal,Sidechain}>Detector Input +slider6:0<0,1,1{No,Yes}>Automatic Make-Up +slider7:0<0,1,1{Peak,RMS}>Detection +slider8:0<0,1,1{Feedforward,Feedback}>Detection Source + +in_pin:left input +in_pin:right input +in_pin:sidechain left input +in_pin:sidechain right input +out_pin:left output +out_pin:right output + +@init + log2db = 8.6858896380650365530225783783321; // 20 / ln(10) + db2log = 0.11512925464970228420089957273422; // ln(10) / 20 + i=0; + loop( + 120, + attimes[i] = ((0.08924 / i) + (0.60755 / (i ^ 2)) - 0.00006); + i+=1; + ); + attime=0.010; + reltime=0.100; + maxover=0; + ratio=0; + cratio=0; + rundb=0; + overdb=0; + maxover=0; + atcoef=exp(-1/(attime * srate)); + relcoef=exp(-1/(reltime * srate)); + fbacoef=exp(-1000/(2 * srate)); // 2 msec. opto attack for feedback detection + fbrcoef=exp(-1000/(200 * srate)); // 200 msec. opto release for feedback detection + sidechain = 0; + automakeup = 0; + +@slider + thresh = slider1; + threshv = exp(thresh * db2log); + ratio = slider2; + softknee = slider4; + cthresh = (softknee ? (thresh -3) : thresh); + cthreshv = exp(cthresh * db2log); + sidechain = slider5; + automakeup = slider6; + automakeup ? ( + autogain = (abs(thresh) - (abs(thresh)/max(1,ratio-1)))/2; + ) : ( + autogain = 0; + ); + makeup = slider3; + makeupv = exp((makeup+autogain) * db2log); + RMSdet = slider7; + RMSdet ? ( + rmscoef=exp(-1000/(10 * srate)); // 10 ms RMS window + ) : ( + rmscoef=exp(-1000/(0.0025 * srate)); // 2.5 us Peak detector + ); + opto = slider8; + +@sample + sidechain ? ( + aspl0 = abs(spl2); + aspl1 = abs(spl3); + ) : ( + opto ? ( + ospl = ospl0 * ospl0 + ospl1 * ospl1; + ospl > runospl ? ( + runospl = ospl + atcoef * (runospl - ospl); + ) : ( + runospl = ospl + relcoef * (runospl - ospl); + ); + ospl = sqrt(max(0,runospl)); + +// ospl = 2.08136898 * log(ospl)*log2db; +// ospl = ospl - 6; // reduce feedback to -6 dB +// ospl = exp(ospl * db2log); + ospl *= 0.5; + + aspl0 = abs(ospl); + aspl1 = abs(ospl); + ) : ( + aspl0 = abs(spl0); + aspl1 = abs(spl1); + ); + ); + + RMSDet ? ( + ave = (aspl0 * aspl0) + (aspl1 * aspl1); + runave = ave + rmscoef * (runave - ave); + det = sqrt(max(0,runave)); + ) : ( + maxspl = max(aspl0, aspl1); + maxspl = maxspl * maxspl; + runave = maxspl + rmscoef * (runave - maxspl); + det = sqrt(max(0,runave)); + ); + overdb = 2.08136898 * log(det/cthreshv) * log2db; + overdb > maxover ? ( + maxover = overdb; + attime = attimes[max(0,floor(abs(overdb)))]; // attack time per formula + atcoef = exp(-1/(attime * srate)); + reltime = overdb / 125; // release at constant 125 dB/sec. + relcoef = exp(-1/(reltime * srate)); + ); + overdb = max(0,overdb); + + overdb > rundb ? ( + rundb = overdb + atcoef * (rundb - overdb); + ) : ( + rundb = overdb + relcoef * (rundb - overdb); + ); + overdb = rundb; + + cratio = (softknee ? (1 + (ratio-1) * min(overdb, 6) / 6) : ratio); + + gr = -overdb * (cratio-1)/cratio; + grv = exp(gr * db2log); + + runmax = maxover + relcoef * (runmax - maxover); // highest peak for setting att/rel decays in reltime + maxover = runmax; + + spl0 *= grv * makeupv; + spl1 *= grv * makeupv; + + ospl0 = spl0; + ospl1 = spl1; diff --git a/Effects/sstillwell/mastertom b/Effects/sstillwell/mastertom new file mode 100644 index 0000000..d83b9fb --- /dev/null +++ b/Effects/sstillwell/mastertom @@ -0,0 +1,158 @@ +// Copyright 2006, Thomas Scott Stillwell +// All rights reserved. +// +//Redistribution and use in source and binary forms, with or without modification, are permitted +//provided that the following conditions are met: +// +//Redistributions of source code must retain the above copyright notice, this list of conditions +//and the following disclaimer. +// +//Redistributions in binary form must reproduce the above copyright notice, this list of conditions +//and the following disclaimer in the documentation and/or other materials provided with the distribution. +// +//The name of Thomas Scott Stillwell may not be used to endorse or +//promote products derived from this software without specific prior written permission. +// +//THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR +//IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +//FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS +//BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +//(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +//PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, +//STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +//THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +desc:Master Tom Compressor +desc:Master Tom Compressor [Stillwell] +//tags: dynamics compressor +//author: Stillwell + +slider1:0<-60,0,0.1>Threshold (dB) +slider2:1<1,20,0.1>Ratio +slider3:0<-20,20,0.1>Gain +slider4:0<0,1,1{Hard,Soft}>Knee +slider5:0<0,1,1{Normal,Sidechain}>Detector Input +slider6:0<0,1,1{No,Yes}>Automatic Make-Up +slider7:0<0,1,1{Peak,RMS}>Detection +slider8:0<0,1,1{Feedforward,Feedback}>Detection Source + +in_pin:left input +in_pin:right input +in_pin:sidechain left input +in_pin:sidechain right input +out_pin:left output +out_pin:right output + +@init + log2db = 8.6858896380650365530225783783321; // 20 / ln(10) + db2log = 0.11512925464970228420089957273422; // ln(10) / 20 + i=0; + loop( + 120, + attimes[i] = ((0.08924 / i) + (0.60755 / (i ^ 2)) - 0.00006); + i+=1; + ); + attime=0.010; + //reltime=0.100; + reltime=5; + maxover=0; + ratio=0; + cratio=0; + rundb=0; + overdb=0; + maxover=0; + atcoef=exp(-1/(attime * srate)); + relcoef=exp(-1/(reltime * srate)); + fbacoef=exp(-1000/(2 * srate)); // 2 msec. opto attack for feedback detection + fbrcoef=exp(-1000/(200 * srate)); // 200 msec. opto release for feedback detection + sidechain = 0; + automakeup = 0; + +@slider + thresh = slider1; + threshv = exp(thresh * db2log); + ratio = slider2; + softknee = slider4; + cthresh = (softknee ? (thresh -3) : thresh); + cthreshv = exp(cthresh * db2log); + sidechain = slider5; + automakeup = slider6; + automakeup ? ( + autogain = (abs(thresh) - (abs(thresh)/max(1,ratio-1)))/2; + ) : ( + autogain = 0; + ); + makeup = slider3; + makeupv = exp((makeup+autogain) * db2log); + RMSdet = slider7; + RMSdet ? ( + rmscoef=exp(-1000/(10 * srate)); // 10 ms RMS window + ) : ( + rmscoef=exp(-1000/(0.0025 * srate)); // 2.5 us Peak detector + ); + opto = slider8; + +@sample + sidechain ? ( + aspl0 = abs(spl2); + aspl1 = abs(spl3); + ) : ( + opto ? ( + ospl = ospl0 * ospl0 + ospl1 * ospl1; + ospl > runospl ? ( + runospl = ospl + atcoef * (runospl - ospl); + ) : ( + runospl = ospl + relcoef * (runospl - ospl); + ); + ospl = sqrt(max(0,runospl)); + + ospl *= 0.5; + + aspl0 = abs(ospl); + aspl1 = abs(ospl); + ) : ( + aspl0 = abs(spl0); + aspl1 = abs(spl1); + ); + ); + + RMSDet ? ( + ave = (aspl0 * aspl0) + (aspl1 * aspl1); + runave = ave + rmscoef * (runave - ave); + det = sqrt(max(0,runave)); + ) : ( + maxspl = max(aspl0, aspl1); + maxspl = maxspl * maxspl; + runave = maxspl + rmscoef * (runave - maxspl); + det = sqrt(max(0,runave)); + ); + overdb = 2.08136898 * log(det/cthreshv) * log2db; + overdb > maxover ? ( + maxover = overdb; + attime = attimes[max(0,floor(abs(overdb)))]; // attack time per formula + atcoef = exp(-1/(attime * srate)); + //reltime = overdb / 65; // release at constant 65 dB/sec. + //relcoef = exp(-1/(reltime * srate)); + ); + overdb = max(0,overdb); + + overdb > rundb ? ( + rundb = overdb + atcoef * (rundb - overdb); + ) : ( + rundb = overdb + relcoef * (rundb - overdb); + ); + overdb = rundb; + + cratio = (softknee ? (1 + (ratio-1) * min(overdb, 6) / 6) : ratio); + + gr = -overdb * (cratio-1)/cratio; + grv = exp(gr * db2log); + + runmax = maxover + relcoef * (runmax - maxover); // highest peak for setting att/rel decays in reltime + maxover = runmax; + + spl0 *= grv * makeupv; + spl1 *= grv * makeupv; + + ospl0 = spl0; + ospl1 = spl1; diff --git a/Effects/sstillwell/ozzifier b/Effects/sstillwell/ozzifier new file mode 100644 index 0000000..a9baf75 --- /dev/null +++ b/Effects/sstillwell/ozzifier @@ -0,0 +1,143 @@ +// Copyright 2006, Thomas Scott Stillwell +// Portions Copyright (C) 2006 Cockos Incorporated +// All rights reserved. +// +//Redistribution and use in source and binary forms, with or without modification, are permitted +//provided that the following conditions are met: +// +//Redistributions of source code must retain the above copyright notice, this list of conditions +//and the following disclaimer. +// +//Redistributions in binary form must reproduce the above copyright notice, this list of conditions +//and the following disclaimer in the documentation and/or other materials provided with the distribution. +// +//The name of Thomas Scott Stillwell may not be used to endorse or +//promote products derived from this software without specific prior written permission. +// +//THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR +//IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +//FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS +//BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +//(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +//PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, +//STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +//THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +desc: Ozzifier Chorus +desc: Ozzifier Chorus [Stillwell] +//tags: modulation pitch delay stereo +//author: Stillwell + +slider1:2<0,6,1>Number Of Voices +slider2:10<0,120,0.1>Time Spread (ms) +slider3:20<0,120,1>Pitch Spread (cents) +slider4:-6<-120,6,1>Wet Mix (dB) +slider5:-6<-120,6,1>Dry Mix (dB) +slider6:100<0,100>Pan Spread (%) + +in_pin:left input +in_pin:right input +out_pin:left output +out_pin:right output + +@init + bufsize = srate|0; + xfade=(srate*0.10)|0; // 100ms xfade + bufloc0 = 10000; + bufloc1 = bufloc0+bufsize+1000; + voiceptr0loc = bufloc1+bufsize+1000; + voicerateloc = voiceptr-loc+1000; + cospanloc = voicerateloc+1000; + sinpanloc = cospanloc+1000; + + buffer0 = bufloc0; + buffer1 = bufloc1; + voiceptr0 = voiceptr0loc; + voicerate = voicerateloc; + cospan = cospanloc; + sinpan = sinpanloc; + + bufdiff=bufloc1-bufloc0; +@slider + numvoices = slider1; + + delaytime = (slider2*0.001*srate)|0; + + pitchspread = slider3; + + totalpitch = pitchspread * numvoices; + + bufsize = (delaytime)|0; + xfade=(bufsize*0.05)|0; + + drymix = 2 ^ (slider5/6); + wetmix = 2 ^ (slider4/6); + + panwidth = slider6/100; + lpan = 0.5 - (panwidth/2); + panincr = panwidth/max(1,numvoices-1); + + i = 1; + + loop(numvoices, + voicerate[i] = 2 ^ (-((totalpitch / 2) - (pitchspread * i)) / 1200); + voiceptr0[i] = bufloc0 + bufsize - (i/numvoices) * delaytime; + (voiceptr0[i] < bufloc0) ? voiceptr0[i] += bufsize; + cospan[i] = cos((lpan + (i - 1) * panincr) * $pi / 2); + sinpan[i] = sin((lpan + (i - 1) * panincr) * $pi / 2); + i += 1; + ); +@sample + wet0 = wet1 = 0; + i = 1; + loop(numvoices, + v0=voiceptr0[i]; iv0=0|(v0); frac0=v0-iv0; + iv02 = iv0 >= (bufloc0+bufsize-1) ? iv0-bufsize+1 : iv0+1; + + ren0=(iv0[0]*(1-frac0)+iv02[0]*frac0); + ren1=(iv0[bufdiff]*(1-frac0)+iv02[bufdiff]*frac0); + vr=voicerate[i]; + + vr >= 1.0 ? + ( + tv=v0; + tv>buffer0?tv-=bufsize; + (tv >= buffer0-xfade && tv < buffer0) ? ( + // xfade + frac=(buffer0-tv)/xfade; + tmp=v0+xfade; + tmp>=bufloc0+bufsize?tmp-=bufsize; + tmp2=tmp>=bufloc0+bufsize-1?bufloc0:tmp+1; + ren0 = ren0*frac + (1-frac)*( tmp[0]*(1-frac0)+tmp2[0]*frac0 ); + ren1 = ren1*frac + (1-frac)*( tmp[bufdiff]*(1-frac0)+tmp2[bufdiff]*frac0 ); + tv+vr > buffer0+1 ? v0+=xfade; + ); + ) : ( // read pointer moving slower than write pointer + tv=v0; + tv= buffer0 && tv < buffer0+xfade) ? ( + // xfade + frac=(tv-buffer0)/xfade; + tmp=v0+xfade; + tmp>=bufloc0+bufsize?tmp-=bufsize; + tmp2=tmp>=bufloc0+bufsize-1?bufloc0:tmp+1; + ren0 = ren0*frac + (1-frac)*( tmp[0]*(1-frac0)+tmp2[0]*frac0 ); + ren1 = ren1*frac + (1-frac)*( tmp[bufdiff]*(1-frac0)+tmp2[bufdiff]*frac0 ); + tv+vr < buffer0+1 ? v0+=xfade; + ); + ); + wet0 += cospan[i] * ren0; + wet1 += sinpan[i] * ren1; + + ((v0+=vr) >= (bufloc0+bufsize)) ? v0 -= bufsize; + voiceptr0[i]=v0; + i += 1; + ); + + buffer0[0] = spl0; // write after reading it to avoid clicks + buffer0[bufdiff] = spl1; + + spl0 = wet0 * wetmix + spl0 * drymix; + spl1 = wet1 * wetmix + spl1 * drymix; + + ((buffer0+=1) >= (bufloc0 + bufsize)) ? buffer0 -= bufsize; diff --git a/Effects/sstillwell/randomizer b/Effects/sstillwell/randomizer new file mode 100644 index 0000000..40b7ea0 --- /dev/null +++ b/Effects/sstillwell/randomizer @@ -0,0 +1,83 @@ +// Copyright 2006, Thomas Scott Stillwell +// All rights reserved. +// +//Redistribution and use in source and binary forms, with or without modification, are permitted +//provided that the following conditions are met: +// +//Redistributions of source code must retain the above copyright notice, this list of conditions +//and the following disclaimer. +// +//Redistributions in binary form must reproduce the above copyright notice, this list of conditions +//and the following disclaimer in the documentation and/or other materials provided with the distribution. +// +//The name of Thomas Scott Stillwell may not be used to endorse or +//promote products derived from this software without specific prior written permission. +// +//THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR +//IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +//FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS +//BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +//(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +//PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, +//STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +//THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +desc:MIDI Note Randomize +desc:MIDI Note Randomize [Stillwell] +//tags: MIDI processing generator +//author: Stillwell + +slider1:60<0,127,1>Input MIDI Note # +slider2:0<0,16,1>Input Channel (0=omni) +slider3:48<0,127,1>Lowest Output Note +slider4:72<0,127,1>Highest Output Note +slider5:0<0,100,.1>Mix (%) + +in_pin:left input +in_pin:right input +out_pin:left output +out_pin:right output + +@init + note_on = 9*16; + note_off = 8*16; + +@slider + note=slider1; + chan=slider2-1; + start=slider3; + end=slider4; + mix=slider5/100; + +@block + while( + midirecv(mpos, msg1, msg2) ? ( + (msg1 & 240) == note_on ? ( + ((msg1 & 15) == chan) || chan==-1 ? ( + (msg2 & 255) == note ? ( + velocity = msg2 & 65280; + newnote = floor(rand(end-start)) + start; + newnote == prevnote ? newnote == end ? newnote = start : newnote += 1; + midisend(mpos, msg1, velocity | newnote); + prevnote = newnote; + ); + ) : ( + midisend(mpos, msg1, msg2); + ); + ); + (msg1 & 240) == note_off ? ( + ((msg1 & 15) == chan) || chan==-1 ? ( + (msg2 & 255) == note ? ( + midisend(mpos, msg1, newnote); + prevnote = newnote; + ); + ) : ( + midisend(mpos, msg1, msg2); + ); + ); + ); + ); + +@sample + spl0 = spl0 * mix; + spl1 = spl1 * mix; diff --git a/Effects/sstillwell/rbj1073 b/Effects/sstillwell/rbj1073 new file mode 100644 index 0000000..eabe075 --- /dev/null +++ b/Effects/sstillwell/rbj1073 @@ -0,0 +1,298 @@ +// Copyright 2006, Thomas Scott Stillwell +// All rights reserved. +// +//Redistribution and use in source and binary forms, with or without modification, are permitted +//provided that the following conditions are met: +// +//Redistributions of source code must retain the above copyright notice, this list of conditions +//and the following disclaimer. +// +//Redistributions in binary form must reproduce the above copyright notice, this list of conditions +//and the following disclaimer in the documentation and/or other materials provided with the distribution. +// +//The name of Thomas Scott Stillwell may not be used to endorse or +//promote products derived from this software without specific prior written permission. +// +//THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR +//IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +//FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS +//BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +//(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +//PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, +//STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +//THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +desc:RBJ 1073 EQ +desc:RBJ 1073 EQ [Stillwell] +//tags: equalizer filter +//author: Stillwell + +slider1:0<0,4,1{Off,50,80,160,300}>HPF +slider2:0<0,4,1{Off,35,60,110,220}>Low Shelf (Hz) +slider3:0<-20,20,0.1>Low Boost/Cut (dB) +slider4:0<0,5,1{360,700,1.6k,3.2k,4.8k,7.2k}>Mid Freq (Hz) +slider5:0<-20,20,0.1>Mid Boost/Cut (dB) +slider6:0<-20,20,0.1>High Shelf (12k) Boost/Cut (dB) +slider7:0<-20,10,0.1>Gain (dB) + +in_pin:left input +in_pin:right input +out_pin:left output +out_pin:right output + +@init + hpf = 0; + gain1 = 0; + freq1 = 50; + a1 = 1; + s1 = 1; + q1 = 1 / (sqrt((a1 + 1/a1)*(1/s1 - 1) + 2)); + w01 = 2 * $pi * freq1/srate; + cosw01 = cos(w01); + sinw01 = sin(w01); + alpha1 = sinw01 / (2 * q1); + + b01 = (1 + cosw01)/2; + b11 = -(1 + cosw01); + b21 = (1 + cosw01)/2; + a01 = 1 + alpha1; + a11 = -2 * cosw01; + a21 = 1 - alpha1; + b01 /= a01; + b11 /= a01; + b21 /= a01; + a11 /= a01; + a21 /= a01; + + lshelf = 0; + gain3 = 0; + freq3 = 35; + a3 = 10^(gain3/40); + s3 = 2; + q3 = 1 / (sqrt((a3 + 1/a3)*(1/s3 - 1) + 2)); + w03 = 2 * $pi * freq3/srate; + cosw03 = cos(w03); + sinw03 = sin(w03); + alpha3 = sinw03 / (2 * q3); + + b03 = a3 * ((a3+1) - (a3-1)*cosw03 + 2*sqrt(a3)*alpha3); + b13 = 2 * a3 * ((a3-1) - (a3+1)*cosw03); + b23 = a3 * ((a3+1) - (a3-1)*cosw03 - 2*sqrt(a3)*alpha3); + a03 = (a3+1) + (a3-1)*cosw03 + 2*sqrt(a3)*alpha3; + a13 = -2 * ((a3-1) + (a3+1)*cosw03); + a23 = (a3+1)+(a3-1)*cosw03-2*sqrt(a3)*alpha3; + b03 /= a03; + b13 /= a03; + b23 /= a03; + a13 /= a03; + a23 /= a03; + + gain5 = 0; + freq5 = 360; + a5 = 10^(gain5/20); + q5 = 1.4; + w05 = 2 * $pi * freq5/srate; + cosw05 = cos(w05); + sinw05 = sin(w05); + alpha5 = sinw05 / (2 * q5); + + b05 = 1 + alpha5 * a5; + b15 = -2 * cosw05; + b25 = 1 - alpha5 * a5; + a05 = 1 + alpha5 / a5; + a15 = -2 * cosw05; + a25 = 1 - alpha5 / a5; + b05 /= a05; + b15 /= a05; + b25 /= a05; + a15 /= a05; + a25 /= a05; + + gain7 = 0; + freq7 = 12000; + a7 = 10^(gain7/40); + s7 = 0.3; + q7 = 1 / (sqrt((a7 + 1/a7)*(1/s7 - 1) + 2)); + w07 = 2 * $pi * freq7/srate; + cosw07 = cos(w07); + sinw07 = sin(w07); + alpha7 = sinw07 / (2 * q7); + + b07 = a7 * ((a7+1) + (a7-1)*cosw07 + 2*sqrt(a7)*alpha7); + b17 = -2*a7*((a7-1) + (a7+1)*cosw07); + b27 = a7*((a7+1) + (a7-1)*cosw07 - 2*sqrt(a7)*alpha7); + a07 = (a7+1) - (a7-1)*cosw07 + 2*sqrt(a7)*alpha7; + a17 = 2*((a7-1) - (a7+1)*cosw07); + a27 = (a7+1)-(a7-1)*cosw07 - 2*sqrt(a7)*alpha7; + b07 /= a07; + b17 /= a07; + b27 /= a07; + a17 /= a07; + a27 /= a07; + + gain = 1; + + +@slider + freq1 = (slider1 == 0 ? 50 : (slider1 == 1 ? 50 : (slider1 == 2 ? 80 : (slider1 == 3 ? 160 : 300)))); + freq3 = (slider2 == 0 ? 35 : (slider2 == 1 ? 35 : (slider2 == 2 ? 60 : (slider2 == 3 ? 110 : 220)))); + gain3 = slider3; + freq5 = (slider4 == 0 ? 360 : (slider4 == 1 ? 700 : (slider4 == 2 ? 1600 : (slider4 == 3 ? 3200 : (slider4 == 4 ? 4800 : 7200))))); + gain5 = slider5; + gain7 = slider6; + + gain = 10^(slider7/20); + + slider1 == 0 ? hpf = 0 : hpf = 1; + slider2 == 0 ? lshelf = 0 : lshelf = 1; + + a1 = 1; + s1 = 1; + q1 = 1 / (sqrt((a1 + 1/a1)*(1/s1 - 1) + 2)); + w01 = 2 * $pi * freq1/srate; + cosw01 = cos(w01); + sinw01 = sin(w01); + alpha1 = sinw01 / (2 * q1); + + b01 = (1 + cosw01)/2; + b11 = -(1 + cosw01); + b21 = (1 + cosw01)/2; + a01 = 1 + alpha1; + a11 = -2 * cosw01; + a21 = 1 - alpha1; + b01 /= a01; + b11 /= a01; + b21 /= a01; + a11 /= a01; + a21 /= a01; + + a3 = 10^(gain3/40); + s3 = 2; + q3 = 1 / (sqrt((a3 + 1/a3)*(1/s3 - 1) + 2)); + w03 = 2 * $pi * freq3/srate; + cosw03 = cos(w03); + sinw03 = sin(w03); + alpha3 = sinw03 / (2 * q3); + + b03 = a3 * ((a3+1) - (a3-1)*cosw03 + 2*sqrt(a3)*alpha3); + b13 = 2 * a3 * ((a3-1) - (a3+1)*cosw03); + b23 = a3 * ((a3+1) - (a3-1)*cosw03 - 2*sqrt(a3)*alpha3); + a03 = (a3+1) + (a3-1)*cosw03 + 2*sqrt(a3)*alpha3; + a13 = -2 * ((a3-1) + (a3+1)*cosw03); + a23 = (a3+1)+(a3-1)*cosw03-2*sqrt(a3)*alpha3; + b03 /= a03; + b13 /= a03; + b23 /= a03; + a13 /= a03; + a23 /= a03; + + a5 = 10^(gain5/20); + q5 = 1.4; + w05 = 2 * $pi * freq5/srate; + cosw05 = cos(w05); + sinw05 = sin(w05); + alpha5 = sinw05 / (2 * q5); + + b05 = 1 + alpha5 * a5; + b15 = -2 * cosw05; + b25 = 1 - alpha5 * a5; + a05 = 1 + alpha5 / a5; + a15 = -2 * cosw05; + a25 = 1 - alpha5 / a5; + b05 /= a05; + b15 /= a05; + b25 /= a05; + a15 /= a05; + a25 /= a05; + + a7 = 10^(gain7/40); + freq7 = 12000; + s7 = 0.3; + q7 = 1 / (sqrt((a7 + 1/a7)*(1/s7 - 1) + 2)); + w07 = 2 * $pi * freq7/srate; + cosw07 = cos(w07); + sinw07 = sin(w07); + alpha7 = sinw07 / (2 * q7); + + b07 = a7 * ((a7+1) + (a7-1)*cosw07 + 2*sqrt(a7)*alpha7); + b17 = -2*a7*((a7-1) + (a7+1)*cosw07); + b27 = a7*((a7+1) + (a7-1)*cosw07 - 2*sqrt(a7)*alpha7); + a07 = (a7+1) - (a7-1)*cosw07 + 2*sqrt(a7)*alpha7; + a17 = 2*((a7-1) - (a7+1)*cosw07); + a27 = (a7+1)-(a7-1)*cosw07 - 2*sqrt(a7)*alpha7; + b07 /= a07; + b17 /= a07; + b27 /= a07; + a17 /= a07; + a27 /= a07; + +@sample + + hpf != 0 ? ( + ospl0 = spl0; + spl0 = b01 * spl0 + b11 * xl11 + b21 * xl21 - a11 * yl11 - a21 * yl21; + xl21 = xl11; + xl11 = ospl0; + yl21 = yl11; + yl11 = spl0 ; + + ospl1 = spl1; + spl1 = b01 * spl1 + b11 * xr11 + b21 * xr21 - a11 * yr11 - a21 * yr21; + xr21 = xr11; + xr11 = ospl1; + yr21 = yr11; + yr11 = spl1 ; + ); + + lshelf != 0 && gain3 != 0 ? ( + ospl0 = spl0; + spl0 = b03 * spl0 + b13 * xl13 + b23 * xl23 - a13 * yl13 - a23 * yl23; + xl23 = xl13; + xl13 = ospl0; + yl23 = yl13; + yl13 = spl0; + + ospl1 = spl1; + spl1 = b03 * spl1 + b13 * xr13 + b23 * xr23 - a13 * yr13 - a23 * yr23; + xr23 = xr13; + xr13 = ospl1; + yr23 = yr13; + yr13 = spl1; + ); + + gain5 != 0 ? ( + ospl0 = spl0; + spl0 = b05 * spl0 + b15 * xl15 + b25 * xl25 - a15 * yl15 - a25 * yl25; + xl25 = xl15; + xl15 = ospl0; + yl25 = yl15; + yl15 = spl0; + + ospl1 = spl1; + spl1 = b05 * spl1 + b15 * xr15 + b25 * xr25 - a15 * yr15 - a25 * yr25; + xr25 = xr15; + xr15 = ospl1; + yr25 = yr15; + yr15 = spl1; + ); + + gain7 != 0 ? ( + ospl0 = spl0; + spl0 = b07 * spl0 + b17 * xl17 + b27 * xl27 - a17 * yl17 - a27 * yl27; + xl27 = xl17; + xl17 = ospl0; + yl27 = yl17; + yl17 = spl0; + + ospl1 = spl1; + spl1 = b07 * spl1 + b17 * xr17 + b27 * xr27 - a17 * yr17 - a27 * yr27; + xr27 = xr17; + xr17 = ospl1; + yr27 = yr17; + yr17 = spl1; + ); + + spl0 *= gain; + spl1 *= gain; + + diff --git a/Effects/sstillwell/rbj4eq b/Effects/sstillwell/rbj4eq new file mode 100644 index 0000000..5385f23 --- /dev/null +++ b/Effects/sstillwell/rbj4eq @@ -0,0 +1,279 @@ +// Copyright 2006, Thomas Scott Stillwell +// All rights reserved. +// +//Redistribution and use in source and binary forms, with or without modification, are permitted +//provided that the following conditions are met: +// +//Redistributions of source code must retain the above copyright notice, this list of conditions +//and the following disclaimer. +// +//Redistributions in binary form must reproduce the above copyright notice, this list of conditions +//and the following disclaimer in the documentation and/or other materials provided with the distribution. +// +//The name of Thomas Scott Stillwell may not be used to endorse or +//promote products derived from this software without specific prior written permission. +// +//THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR +//IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +//FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS +//BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +//(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +//PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, +//STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +//THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +desc:RBJ 4-Band Semi-Parametric EQ +desc:RBJ 4-Band Semi-Parametric EQ [Stillwell] +//tags: equalizer +//author: Stillwell + + +slider1:3<1,5,1{40,80,160,315,500}>Frequency 1 (Hz) +slider2:0<-15,15,0.1>Boost/Cut (dB) +slider3:3<1,5,1{125,250,500,1k,2k}>Frequency 2 (Hz) +slider4:0<-15,15,0.1>Boost/Cut (dB) +slider5:3<1,5,1{315,630,1.2k,2.5k,5k}>Frequency 3 (Hz) +slider6:0<-15,15,0.1>Boost/Cut (dB) +slider7:3<1,5,1{1.6k,3.2k,6.4k,9k,12k}>Frequency 4 (Hz) +slider8:0<-15,15,0.1>Boost/Cut (dB) + +in_pin:left input +in_pin:right input +out_pin:left output +out_pin:right output + +@init + gain1 = 0; + freq1 = 160; + a1 = (10^(gain1/40)); + q1 = 0.8; + w01 = 2 * $pi * freq1/srate; + cosw01 = cos(w01); + sinw01 = sin(w01); + alpha1 = sinw01 / (2 * q1); + + b01 = 1 + alpha1 * a1; + b11 = -2 * cosw01; + b21 = 1 - alpha1 * a1; + a01 = 1 + alpha1 / a1; + a11 = -2 * cosw01; + a21 = 1 - alpha1 / a1; + b01 /= a01; + b11 /= a01; + b21 /= a01; + a11 /= a01; + a21 /= a01; + + gain3 = 0; + freq3 = 500; + a3 = (10^(gain3/40)); + q3 = 0.8; + w03 = 2 * $pi * freq3/srate; + cosw03 = cos(w03); + sinw03 = sin(w03); + alpha3 = sinw03 / (2 * q3); + + b03 = 1 + alpha3 * a3; + b13 = -2 * cosw03; + b23 = 1 - alpha3 * a3; + a03 = 1 + alpha3 / a3; + a13 = -2 * cosw03; + a23 = 1 - alpha3 / a3; + b03 /= a03; + b13 /= a03; + b23 /= a03; + a13 /= a03; + a23 /= a03; + + gain5 = 0; + freq5 = 1200; + a5 = (10^(gain5/40)); + q5 = 0.8; + w05 = 2 * $pi * freq5/srate; + cosw05 = cos(w05); + sinw05 = sin(w05); + alpha5 = sinw05 / (2 * q5); + + b05 = 1 + alpha5 * a5; + b15 = -2 * cosw05; + b25 = 1 - alpha5 * a5; + a05 = 1 + alpha5 / a5; + a15 = -2 * cosw05; + a25 = 1 - alpha5 / a5; + b05 /= a05; + b15 /= a05; + b25 /= a05; + a15 /= a05; + a25 /= a05; + + gain7 = 0; + freq7 = 6400; + a7 = (10^(gain7/40)); + q7 = 0.8; + w07 = 2 * $pi * freq7/srate; + cosw07 = cos(w07); + sinw07 = sin(w07); + alpha7 = sinw07 / (2 * q7); + + b07 = 1 + alpha7 * a7; + b17 = -2 * cosw07; + b27 = 1 - alpha7 * a7; + a07 = 1 + alpha7 / a7; + a17 = -2 * cosw07; + a27 = 1 - alpha7 / a7; + b07 /= a07; + b17 /= a07; + b27 /= a07; + a17 /= a07; + a27 /= a07; + +@slider + freq1 = (slider1 == 0 ? 40 : (slider1 == 1 ? 80 : (slider1 == 2 ? 160 : (slider1 == 3 ? 315 : 500)))); + gain1 = slider2; + freq3 = (slider3 == 0 ? 125 : (slider3 == 1 ? 250 : (slider3 == 2 ? 500 : (slider3 == 3 ? 1000 : 2000)))); + gain3 = slider4; + freq5 = (slider5 == 0 ? 315 : (slider5 == 1 ? 630 : (slider5 == 2 ? 1200 : (slider5 == 3 ? 2500 : 5000)))); + gain5 = slider6; + freq7 = (slider7 == 0 ? 1600 : (slider7 == 1 ? 3200 : (slider7 == 2 ? 6400 : (slider7 == 3 ? 9000 : 12000)))); + gain7 = slider8; + + a1 = (10^(gain1/40)); + q1 = 0.8; + w01 = 2 * $pi * freq1/srate; + cosw01 = cos(w01); + sinw01 = sin(w01); + alpha1 = sinw01 / (2 * q1); + + b01 = 1 + alpha1 * a1; + b11 = -2 * cosw01; + b21 = 1 - alpha1 * a1; + a01 = 1 + alpha1 / a1; + a11 = -2 * cosw01; + a21 = 1 - alpha1 / a1; + b01 /= a01; + b11 /= a01; + b21 /= a01; + a11 /= a01; + a21 /= a01; + + a3 = (10^(gain3/40)); + q3 = 0.8; + w03 = 2 * $pi * freq3/srate; + cosw03 = cos(w03); + sinw03 = sin(w03); + alpha3 = sinw03 / (2 * q3); + + b03 = 1 + alpha3 * a3; + b13 = -2 * cosw03; + b23 = 1 - alpha3 * a3; + a03 = 1 + alpha3 / a3; + a13 = -2 * cosw03; + a23 = 1 - alpha3 / a3; + b03 /= a03; + b13 /= a03; + b23 /= a03; + a13 /= a03; + a23 /= a03; + + a5 = (10^(gain5/40)); + q5 = 0.8; + w05 = 2 * $pi * freq5/srate; + cosw05 = cos(w05); + sinw05 = sin(w05); + alpha5 = sinw05 / (2 * q5); + + b05 = 1 + alpha5 * a5; + b15 = -2 * cosw05; + b25 = 1 - alpha5 * a5; + a05 = 1 + alpha5 / a5; + a15 = -2 * cosw05; + a25 = 1 - alpha5 / a5; + b05 /= a05; + b15 /= a05; + b25 /= a05; + a15 /= a05; + a25 /= a05; + + a7 = (10^(gain7/40)); + q7 = 0.8; + w07 = 2 * $pi * freq7/srate; + cosw07 = cos(w07); + sinw07 = sin(w07); + alpha7 = sinw07 / (2 * q7); + + b07 = 1 + alpha7 * a7; + b17 = -2 * cosw07; + b27 = 1 - alpha7 * a7; + a07 = 1 + alpha7 / a7; + a17 = -2 * cosw07; + a27 = 1 - alpha7 / a7; + b07 /= a07; + b17 /= a07; + b27 /= a07; + a17 /= a07; + a27 /= a07; + +@sample + gain1 != 0 ? ( + ospl0 = spl0; + spl0 = b01 * spl0 + b11 * xl11 + b21 * xl21 - a11 * yl11 - a21 * yl21; + xl21 = xl11; + xl11 = ospl0; + yl21 = yl11; + yl11 = spl0; + + ospl1 = spl1; + spl1 = b01 * spl1 + b11 * xr11 + b21 * xr21 - a11 * yr11 - a21 * yr21; + xr21 = xr11; + xr11 = ospl1; + yr21 = yr11; + yr11 = spl1; + ); + + gain3 != 0 ? ( + ospl0 = spl0; + spl0 = b03 * spl0 + b13 * xl13 + b23 * xl23 - a13 * yl13 - a23 * yl23; + xl23 = xl13; + xl13 = ospl0; + yl23 = yl13; + yl13 = spl0; + + ospl1 = spl1; + spl1 = b03 * spl1 + b13 * xr13 + b23 * xr23 - a13 * yr13 - a23 * yr23; + xr23 = xr13; + xr13 = ospl1; + yr23 = yr13; + yr13 = spl1; + ); + + gain5 != 0 ? ( + ospl0 = spl0; + spl0 = b05 * spl0 + b15 * xl15 + b25 * xl25 - a15 * yl15 - a25 * yl25; + xl25 = xl15; + xl15 = ospl0; + yl25 = yl15; + yl15 = spl0; + + ospl1 = spl1; + spl1 = b05 * spl1 + b15 * xr15 + b25 * xr25 - a15 * yr15 - a25 * yr25; + xr25 = xr15; + xr15 = ospl1; + yr25 = yr15; + yr15 = spl1; + ); + + gain7 != 0 ? ( + ospl0 = spl0; + spl0 = b07 * spl0 + b17 * xl17 + b27 * xl27 - a17 * yl17 - a27 * yl27; + xl27 = xl17; + xl17 = ospl0; + yl27 = yl17; + yl17 = spl0; + + ospl1 = spl1; + spl1 = b07 * spl1 + b17 * xr17 + b27 * xr27 - a17 * yr17 - a27 * yr27; + xr27 = xr17; + xr17 = ospl1; + yr27 = yr17; + yr17 = spl1; + ); diff --git a/Effects/sstillwell/rbj7eq b/Effects/sstillwell/rbj7eq new file mode 100644 index 0000000..2a18148 --- /dev/null +++ b/Effects/sstillwell/rbj7eq @@ -0,0 +1,511 @@ +// Copyright 2006, Thomas Scott Stillwell +// All rights reserved. +// +//Redistribution and use in source and binary forms, with or without modification, are permitted +//provided that the following conditions are met: +// +//Redistributions of source code must retain the above copyright notice, this list of conditions +//and the following disclaimer. +// +//Redistributions in binary form must reproduce the above copyright notice, this list of conditions +//and the following disclaimer in the documentation and/or other materials provided with the distribution. +// +//The name of Thomas Scott Stillwell may not be used to endorse or +//promote products derived from this software without specific prior written permission. +// +//THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR +//IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +//FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS +//BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +//(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +//PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, +//STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +//THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +desc:RBJ 7-Band Graphic EQ +desc:RBJ 7-Band Graphic EQ [Stillwell] +//tags: equalizer filter +//author: Stillwell + +slider1:10<10,120.0.1>HPF Freq +slider2:0<-15,15,0.1>100 Hz +slider3:0<-15,15,0.1>200 Hz +slider4:0<-15,15,0.1>400 Hz +slider5:0<-15,15,0.1>800 Hz +slider6:0<-15,15,0.1>2.5 kHz +slider7:0<-15,15,0.1>6 kHz +slider8:0<-15,15,0.1>12 kHz + +in_pin:left input +in_pin:right input +out_pin:left output +out_pin:right output + +@init + gain0 = 0; + freq0 = 20; + q0 = 1; + a0 = 1; + w00 = 2 * $pi * freq0/srate; + cosw00 = cos(w00); + sinw00 = sin(w00); + alpha0 = sinw00 / (2 * q0); + + b00 = (1 + cosw00) / 2; + b10 = -(1 + cosw00); + b20 = (1 + cosw00) / 2; + a00 = 1 + alpha0; + a10 = -2 * cosw00; + a20 = 1 - alpha0; + b00 /= a00; + b10 /= a00; + b20 /= a00; + a10 /= a00; + a20 /= a00; + + gain1 = 0; + freq1 = 100; + q1 = 0.8; + a1 = 10^(gain1/40); + w01 = 2 * $pi * freq1/srate; + cosw01 = cos(w01); + sinw01 = sin(w01); + alpha1 = sinw01 / (2 * q1); + + b01 = 1 + alpha1 * a1; + b11 = -2 * cosw01; + b21 = 1 - alpha1 * a1; + a01 = 1 + alpha1 / a1; + a11 = -2 * cosw01; + a21 = 1 - alpha1 / a1; + b01 /= a01; + b11 /= a01; + b21 /= a01; + a11 /= a01; + a21 /= a01; + + gain2 = 0; + freq2 = 200; + q2 = 0.8; + a2 = 10^(gain2/40); + w02 = 2 * $pi * freq2/srate; + cosw02 = cos(w02); + sinw02 = sin(w02); + alpha2 = sinw02 / (2 * q2); + + b02 = 1 + alpha2 * a2; + b12 = -2 * cosw02; + b22 = 1 - alpha2 * a2; + a02 = 1 + alpha2 / a2; + a12 = -2 * cosw02; + a22 = 1 - alpha2 / a2; + b02 /= a02; + b12 /= a02; + b22 /= a02; + a12 /= a02; + a22 /= a02; + + gain3 = 0; + freq3 = 400; + q3 = 0.8; + a3 = 10^(gain3/40); + w03 = 2 * $pi * freq3/srate; + cosw03 = cos(w03); + sinw03 = sin(w03); + alpha3 = sinw03 / (2 * q3); + + b03 = 1 + alpha3 * a3; + b13 = -2 * cosw03; + b23 = 1 - alpha3 * a3; + a03 = 1 + alpha3 / a3; + a13 = -2 * cosw03; + a23 = 1 - alpha3 / a3; + b03 /= a03; + b13 /= a03; + b23 /= a03; + a13 /= a03; + a23 /= a03; + + gain4 = 0; + freq4 = 800; + q4 = 0.8; + a4 = 10^(gain4/40); + w04 = 2 * $pi * freq4/srate; + cosw04 = cos(w04); + sinw04 = sin(w04); + alpha4 = sinw04 / (2 * q4); + + b04 = 1 + alpha4 * a4; + b14 = -2 * cosw04; + b24 = 1 - alpha4 * a4; + a04 = 1 + alpha4 / a4; + a14 = -2 * cosw04; + a24 = 1 - alpha4 / a4; + b04 /= a04; + b14 /= a04; + b24 /= a04; + a14 /= a04; + a24 /= a04; + + gain5 = 0; + freq5 = 2500; + q5 = 0.8; + a5 = 10^(gain5/40); + w05 = 2 * $pi * freq5/srate; + cosw05 = cos(w05); + sinw05 = sin(w05); + alpha5 = sinw05 / (2 * q5); + + b05 = 1 + alpha5 * a5; + b15 = -2 * cosw05; + b25 = 1 - alpha5 * a5; + a05 = 1 + alpha5 / a5; + a15 = -2 * cosw05; + a25 = 1 - alpha5 / a5; + b05 /= a05; + b15 /= a05; + b25 /= a05; + a15 /= a05; + a25 /= a05; + + gain6 = 0; + freq6 = 6000; + q6 = 0.8; + a6 = 10^(gain6/40); + w06 = 2 * $pi * freq6/srate; + cosw06 = cos(w06); + sinw06 = sin(w06); + alpha6 = sinw06 / (2 * q6); + + b06 = 1 + alpha6 * a6; + b16 = -2 * cosw06; + b26 = 1 - alpha6 * a6; + a06 = 1 + alpha6 / a6; + a16 = -2 * cosw06; + a26 = 1 - alpha6 / a6; + b06 /= a06; + b16 /= a06; + b26 /= a06; + a16 /= a06; + a26 /= a06; + + gain7 = 0; + freq7 = 12000; + q7 = 0.8; + a7 = 10^(gain7/40); + w07 = 2 * $pi * freq7/srate; + cosw07 = cos(w07); + sinw07 = sin(w07); + alpha7 = sinw07 / (2 * q7); + + b07 = 1 + alpha7 * a7; + b17 = -2 * cosw07; + b27 = 1 - alpha7 * a7; + a07 = 1 + alpha7 / a7; + a17 = -2 * cosw07; + a27 = 1 - alpha7 / a7; + b07 /= a07; + b17 /= a07; + b27 /= a07; + a17 /= a07; + a27 /= a07; + +@slider + freq0 = slider1; + gain1 = slider2; + gain2 = slider3; + gain3 = slider4; + gain4 = slider5; + gain5 = slider6; + gain6 = slider7; + gain7 = slider8; + + gain0 = 0; + q0 = 1; + a0 = 1; + w00 = 2 * $pi * freq0/srate; + cosw00 = cos(w00); + sinw00 = sin(w00); + alpha0 = sinw00 / (2 * q0); + + b00 = (1 + cosw00) / 2; + b10 = -(1 + cosw00); + b20 = (1 + cosw00) / 2; + a00 = 1 + alpha0; + a10 = -2 * cosw00; + a20 = 1 - alpha0; + b00 /= a00; + b10 /= a00; + b20 /= a00; + a10 /= a00; + a20 /= a00; + + freq1 = 100; + q1 = 0.8; + a1 = 10^(gain1/40); + w01 = 2 * $pi * freq1/srate; + cosw01 = cos(w01); + sinw01 = sin(w01); + alpha1 = sinw01 / (2 * q1); + + b01 = 1 + alpha1 * a1; + b11 = -2 * cosw01; + b21 = 1 - alpha1 * a1; + a01 = 1 + alpha1 / a1; + a11 = -2 * cosw01; + a21 = 1 - alpha1 / a1; + b01 /= a01; + b11 /= a01; + b21 /= a01; + a11 /= a01; + a21 /= a01; + + freq2 = 200; + q2 = 0.8; + a2 = 10^(gain2/40); + w02 = 2 * $pi * freq2/srate; + cosw02 = cos(w02); + sinw02 = sin(w02); + alpha2 = sinw02 / (2 * q2); + + b02 = 1 + alpha2 * a2; + b12 = -2 * cosw02; + b22 = 1 - alpha2 * a2; + a02 = 1 + alpha2 / a2; + a12 = -2 * cosw02; + a22 = 1 - alpha2 / a2; + b02 /= a02; + b12 /= a02; + b22 /= a02; + a12 /= a02; + a22 /= a02; + + freq3 = 400; + q3 = 0.8; + a3 = 10^(gain3/40); + w03 = 2 * $pi * freq3/srate; + cosw03 = cos(w03); + sinw03 = sin(w03); + alpha3 = sinw03 / (2 * q3); + + b03 = 1 + alpha3 * a3; + b13 = -2 * cosw03; + b23 = 1 - alpha3 * a3; + a03 = 1 + alpha3 / a3; + a13 = -2 * cosw03; + a23 = 1 - alpha3 / a3; + b03 /= a03; + b13 /= a03; + b23 /= a03; + a13 /= a03; + a23 /= a03; + + freq4 = 800; + q4 = 0.8; + a4 = 10^(gain4/40); + w04 = 2 * $pi * freq4/srate; + cosw04 = cos(w04); + sinw04 = sin(w04); + alpha4 = sinw04 / (2 * q4); + + b04 = 1 + alpha4 * a4; + b14 = -2 * cosw04; + b24 = 1 - alpha4 * a4; + a04 = 1 + alpha4 / a4; + a14 = -2 * cosw04; + a24 = 1 - alpha4 / a4; + b04 /= a04; + b14 /= a04; + b24 /= a04; + a14 /= a04; + a24 /= a04; + + freq5 = 2500; + q5 = 0.8; + a5 = 10^(gain5/40); + w05 = 2 * $pi * freq5/srate; + cosw05 = cos(w05); + sinw05 = sin(w05); + alpha5 = sinw05 / (2 * q5); + + b05 = 1 + alpha5 * a5; + b15 = -2 * cosw05; + b25 = 1 - alpha5 * a5; + a05 = 1 + alpha5 / a5; + a15 = -2 * cosw05; + a25 = 1 - alpha5 / a5; + b05 /= a05; + b15 /= a05; + b25 /= a05; + a15 /= a05; + a25 /= a05; + + freq6 = 6000; + q6 = 0.8; + a6 = 10^(gain6/40); + w06 = 2 * $pi * freq6/srate; + cosw06 = cos(w06); + sinw06 = sin(w06); + alpha6 = sinw06 / (2 * q6); + + b06 = 1 + alpha6 * a6; + b16 = -2 * cosw06; + b26 = 1 - alpha6 * a6; + a06 = 1 + alpha6 / a6; + a16 = -2 * cosw06; + a26 = 1 - alpha6 / a6; + b06 /= a06; + b16 /= a06; + b26 /= a06; + a16 /= a06; + a26 /= a06; + + freq7 = 12000; + q7 = 0.8; + a7 = 10^(gain7/40); + w07 = 2 * $pi * freq7/srate; + cosw07 = cos(w07); + sinw07 = sin(w07); + alpha7 = sinw07 / (2 * q7); + + b07 = 1 + alpha7 * a7; + b17 = -2 * cosw07; + b27 = 1 - alpha7 * a7; + a07 = 1 + alpha7 / a7; + a17 = -2 * cosw07; + a27 = 1 - alpha7 / a7; + b07 /= a07; + b17 /= a07; + b27 /= a07; + a17 /= a07; + a27 /= a07; + +@sample + + freq0 > 10 ? ( + ospl0 = spl0; + spl0 = b00 * spl0 + b10 * xl10 + b20 * xl20 - a10 * yl10 - a20 * yl20; + xl20 = xl10; + xl10 = ospl0; + yl20 = yl10; + yl10 = spl0 ; + + ospl1 = spl1; + spl1 = b00 * spl1 + b10 * xr10 + b20 * xr20 - a10 * yr10 - a20 * yr20; + xr20 = xr10; + xr10 = ospl1; + yr20 = yr10; + yr10 = spl1 ; + ); + + gain1 != 0 ? ( + ospl0 = spl0; + spl0 = b01 * spl0 + b11 * xl11 + b21 * xl21 - a11 * yl11 - a21 * yl21; + xl21 = xl11; + xl11 = ospl0; + yl21 = yl11; + yl11 = spl0; + + ospl1 = spl1; + spl1 = b01 * spl1 + b11 * xr11 + b21 * xr21 - a11 * yr11 - a21 * yr21; + xr21 = xr11; + xr11 = ospl1; + yr21 = yr11; + yr11 = spl1; + ); + + gain2 != 0 ? ( + ospl0 = spl0; + spl0 = b02 * spl0 + b12 * xl12 + b22 * xl22 - a12 * yl12 - a22 * yl22; + xl22 = xl12; + xl12 = ospl0; + yl22 = yl12; + yl12 = spl0; + + ospl1 = spl1; + spl1 = b02 * spl1 + b12 * xr12 + b22 * xr22 - a12 * yr12 - a22 * yr22; + xr22 = xr12; + xr12 = ospl1; + yr22 = yr12; + yr12 = spl1; + ); + + gain3 != 0 ? ( + ospl0 = spl0; + spl0 = b03 * spl0 + b13 * xl13 + b23 * xl23 - a13 * yl13 - a23 * yl23; + xl23 = xl13; + xl13 = ospl0; + yl23 = yl13; + yl13 = spl0; + + ospl1 = spl1; + spl1 = b03 * spl1 + b13 * xr13 + b23 * xr23 - a13 * yr13 - a23 * yr23; + xr23 = xr13; + xr13 = ospl1; + yr23 = yr13; + yr13 = spl1; + ); + + gain4 != 0 ? ( + ospl0 = spl0; + spl0 = b04 * spl0 + b14 * xl14 + b24 * xl24 - a14 * yl14 - a24 * yl24; + xl24 = xl14; + xl14 = ospl0; + yl24 = yl14; + yl14 = spl0; + + ospl1 = spl1; + spl1 = b04 * spl1 + b14 * xr14 + b24 * xr24 - a14 * yr14 - a24 * yr24; + xr24 = xr14; + xr14 = ospl1; + yr24 = yr14; + yr14 = spl1; + ); + + gain5 != 0 ? ( + ospl0 = spl0; + spl0 = b05 * spl0 + b15 * xl15 + b25 * xl25 - a15 * yl15 - a25 * yl25; + xl25 = xl15; + xl15 = ospl0; + yl25 = yl15; + yl15 = spl0; + + ospl1 = spl1; + spl1 = b05 * spl1 + b15 * xr15 + b25 * xr25 - a15 * yr15 - a25 * yr25; + xr25 = xr15; + xr15 = ospl1; + yr25 = yr15; + yr15 = spl1; + ); + + gain6 != 0 ? ( + ospl0 = spl0; + spl0 = b06 * spl0 + b16 * xl16 + b26 * xl26 - a16 * yl16 - a26 * yl26; + xl26 = xl16; + xl16 = ospl0; + yl26 = yl16; + yl16 = spl0; + + ospl1 = spl1; + spl1 = b06 * spl1 + b16 * xr16 + b26 * xr26 - a16 * yr16 - a26 * yr26; + xr26 = xr16; + xr16 = ospl1; + yr26 = yr16; + yr16 = spl1; + ); + + gain7 != 0 ? ( + ospl0 = spl0; + spl0 = b07 * spl0 + b17 * xl17 + b27 * xl27 - a17 * yl17 - a27 * yl27; + xl27 = xl17; + xl17 = ospl0; + yl27 = yl17; + yl17 = spl0; + + ospl1 = spl1; + spl1 = b07 * spl1 + b17 * xr17 + b27 * xr27 - a17 * yr17 - a27 * yr27; + xr27 = xr17; + xr17 = ospl1; + yr27 = yr17; + yr17 = spl1; + ); diff --git a/Effects/sstillwell/realoud b/Effects/sstillwell/realoud new file mode 100644 index 0000000..c776fa0 --- /dev/null +++ b/Effects/sstillwell/realoud @@ -0,0 +1,59 @@ +// Copyright 2006, Thomas Scott Stillwell +// All rights reserved. +// +//Redistribution and use in source and binary forms, with or without modification, are permitted +//provided that the following conditions are met: +// +//Redistributions of source code must retain the above copyright notice, this list of conditions +//and the following disclaimer. +// +//Redistributions in binary form must reproduce the above copyright notice, this list of conditions +//and the following disclaimer in the documentation and/or other materials provided with the distribution. +// +//The name of Thomas Scott Stillwell may not be used to endorse or +//promote products derived from this software without specific prior written permission. +// +//THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR +//IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +//FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS +//BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +//(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +//PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, +//STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +//THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +desc:ReaLoud +desc:ReaLoud [Stillwell] +//tags: dynamics saturation +//author: Stillwell + +slider1:0<0,100,0.1>Mix (%) + +in_pin:left input +in_pin:right input +out_pin:left output +out_pin:right output + +@init + + pi = 3.1415926535; + halfpi = pi / 2; + +@slider + + mix=slider1 / 100; + mix1 = 1 - mix; + +@sample + + spl0=min(max(spl0,-1),1); + spl1=min(max(spl1,-1),1); + + dry0 = spl0; + dry1 = spl1; + + wet0 = sin(dry0 * halfpi); + wet1 = sin(dry1 * halfpi); + + spl0 = mix1 * dry0 + mix * wet0; + spl1 = mix1 * dry1 + mix * wet1; diff --git a/Effects/sstillwell/realoud_lpf b/Effects/sstillwell/realoud_lpf new file mode 100644 index 0000000..27423c5 --- /dev/null +++ b/Effects/sstillwell/realoud_lpf @@ -0,0 +1,104 @@ +// Copyright 2006, Thomas Scott Stillwell +// All rights reserved. +// +//Redistribution and use in source and binary forms, with or without modification, are permitted +//provided that the following conditions are met: +// +//Redistributions of source code must retain the above copyright notice, this list of conditions +//and the following disclaimer. +// +//Redistributions in binary form must reproduce the above copyright notice, this list of conditions +//and the following disclaimer in the documentation and/or other materials provided with the distribution. +// +//The name of Thomas Scott Stillwell may not be used to endorse or +//promote products derived from this software without specific prior written permission. +// +//THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR +//IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +//FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS +//BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +//(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +//PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, +//STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +//THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +desc:ReaLoud LP +desc:ReaLoud LP [stillwell] +//tags: dynamics saturation filter +//author: Stillwell + +slider1:0<0,100,0.1>Mix (%) +slider3:22000<1,22000>LP Frequency (Hz) +slider4:0.2<0,1>LP Size (1/Q) (0=resonant, 1=dull) +slider5:1<0,1,1{Pre-filter,Post-filter}>Drive Circuit + +in_pin:left input +in_pin:right input +out_pin:left output +out_pin:right output + +@init + + pi = 3.1415926535; + halfpi = pi / 2; + +@slider + + mix=slider1 / 100; + drive=slider2 / 100; + freq=slider3; + size=slider4; + prepost=slider5; + + damp=0.01+size*20; + c = 1/tan($pi*freq/srate); + fk = 1 / (1 + c*(c+damp)); + fa1 = 2 * (1 - c*c) * fk; + fa0 = (1 + c*(c-damp)) * fk; + oldamp=damp; + + mix1 = 1 - mix; + +@sample + + + dry0 = spl0; + dry1 = spl1; + + prepost>0.5 ? ( + spl0=min(max(spl0,-1),1); + spl1=min(max(spl1,-1),1); + + wet0 = sin(dry0 * halfpi); + wet1 = sin(dry1 * halfpi); + + fd0l = (fk*wet0) - (fa1*fd1l) - (fa0*fd2l); + fd0r = (fk*wet1) - (fa1*fd1r) - (fa0*fd2r); + + spl0 = mix1 * dry0 + mix * (fd0l + fd1l + fd1l + fd2l); + spl1 = mix1 * dry1 + mix * (fd0r + fd1r + fd1r + fd2r); + ) : ( + fd0l = (fk*dry0) - (fa1*fd1l) - (fa0*fd2l); + fd0r = (fk*dry1) - (fa1*fd1r) - (fa0*fd2r); + + wet0 = fd0l + fd1l + fd1l + fd2l; + wet1 = fd0r + fd1r + fd1r + fd2r; + + spl0=min(max(spl0,-1),1); + spl1=min(max(spl1,-1),1); + + wet0 = sin(wet0 * halfpi); + wet1 = sin(wet1 * halfpi); + + spl0 = mix1 * dry0 + mix * wet0; + spl1 = mix1 * dry1 + mix * wet1; + ); + + fd2l = fd1l; + fd2r = fd1r; + + fd1l = fd0l; + fd1r = fd0r; + + spl0=min(max(spl0,-1),1); + spl1=min(max(spl1,-1),1); diff --git a/Effects/sstillwell/stereowidth b/Effects/sstillwell/stereowidth new file mode 100644 index 0000000..ab2d689 --- /dev/null +++ b/Effects/sstillwell/stereowidth @@ -0,0 +1,79 @@ +// Copyright 2007, Thomas Scott Stillwell +// All rights reserved. +// +//Redistribution and use in source and binary forms, with or without modification, are permitted +//provided that the following conditions are met: +// +//Redistributions of source code must retain the above copyright notice, this list of conditions +//and the following disclaimer. +// +//Redistributions in binary form must reproduce the above copyright notice, this list of conditions +//and the following disclaimer in the documentation and/or other materials provided with the distribution. +// +//The name of Thomas Scott Stillwell may not be used to endorse or +//promote products derived from this software without specific prior written permission. +// +//THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR +//IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +//FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS +//BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +//(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +//PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, +//STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +//THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +//Contains code from stereoField (c) 2007 by Michael Gruhn, used by permission +// + +desc:Stereo Width +desc:Stereo Width [Stillwell] +//tags: processing stereo +//author: Stillwell + +slider1:0<-20,20>Width Boost (dB) +slider2:0<-20,20>Center Boost (dB) +slider3:0<-20,20>Gain (dB) +slider4:0<-100,100>Width Balance (%) +slider5:0<-90,90>Width Rotation () + +in_pin:left input +in_pin:right input +out_pin:left output +out_pin:right output + +@init + log2db = 8.6858896380650365530225783783321; // 20 / ln(10) + db2log = 0.11512925464970228420089957273422; // ln(10) / 20 + pi = 3.1415926535; + halfpi = pi / 2; + +@slider + wideboost=exp(slider1 * db2log); + centerboost=exp(slider2 * db2log); + gain=exp(slider3 * db2log); + leftrot = cos(((slider4+100)*0.005)*halfpi) * 2; + rightrot = sin(((slider4+100)*0.005)*halfpi) * 2; + rot=slider5*0.017453292; + +@sample + center = (spl0 + spl1) * 0.5; + left = spl0 - center; + right = spl1 - center; + spl0 += left * wideboost * leftrot; + spl1 += right * wideboost * rightrot; + spl0 += center * centerboost; + spl1 += center * centerboost; + spl0 *= gain; + spl1 *= gain; + s0 = sign(spl0); + s1 = sign(spl1); + angle = atan( spl0 / spl1 ); + (s0 == 1 && s1 == -1) || (s0 == -1 && s1 == -1) ? angle += pi; + (s0 == -1 && s1 == 1) ? angle += 2 * pi; + (spl1 == 0) ? (spl0 > 0) ? angle = halfpi : angle = pi + halfpi; + (spl0 == 0) ? (spl1 > 0) ? angle = 0 : angle = pi; + angle -= rot; + radius = sqrt( sqr(spl0)+sqr(spl1) ) ; + spl0 = sin(angle)*radius; + spl1 = cos(angle)*radius; + diff --git a/Effects/sstillwell/thunderkick b/Effects/sstillwell/thunderkick new file mode 100644 index 0000000..74b4803 --- /dev/null +++ b/Effects/sstillwell/thunderkick @@ -0,0 +1,81 @@ +// This effect Copyright (C) 2007 and later Thomas Scott Stillwell +// Based on mdctfilter Copyright 2004 and later by Cockos Incorporated +// License: GPL - http://www.gnu.org/licenses/gpl.html +// + +desc: Thunderkick +desc: Thunderkick (MDCT subsynthesis filter) [Stillwell] +//tags: processing generator filter synthesis +//author: Stillwell + +slider1:-6<-40,40,0.1>Effect (dB) +slider2:4<1,30,1>Cutoff +slider3:0<-40,40,0.1>Gain (dB) +slider4:1<0,10,1>Shift + +in_pin:left input +in_pin:right input +out_pin:left output +out_pin:right output + +@init + fftsize=1024; + bucketsize = (srate * 0.5 ) / fftsize; + bufpos=bi1=0; + bi2=fftsize*2; + halfsize=fftsize*0.5; + bands = slider2; + gain = 2 ^ (slider3 / 6); + shift = slider4; + +@slider + adj=2 ^ (slider1/6); + bands = slider2; + gain = 2 ^ (slider3 / 6); + shift = (slider4 < slider2 ? slider4 : slider2); + slider4 = shift; + +@sample +// bi2 was the previously transformed buffer, and by the time it +// is bi2 we only touch the second half (the first was replaced when +// it was bi1) + +// bi1 is the most recently transformed buffer, we only touch the first +// half, because the second will be used for the next overlap + + +dry0=spl0; +dry1=spl1; +wet0=spl0+spl1; + +t=bi1+bufpos; +p0=t[0]; +t[0]=wet0; + +t=bi2+halfsize+bufpos; +p1=t[0]; +t[0]=wet0; + +wet0 = p0 + p1; // our mdct handles windowing, so we just add + +bufpos+=1; + +bufpos >= halfsize ? ( + // we hit our FFT size here + // swap bi1 and bi2 + t=bi1; bi1=bi2; bi2=t; + // Map time -> frequency domain + mdct(bi1,fftsize); + // frequency-shift energy to lower bands + // memcpy(bi1,bi1+shift,bands); + i=0; + loop(bands, bi1[i]=bi1[i*shift+i]; i+=1;); + // zero out HF bands; + memset(bi1+bands,0,fftsize-bands); + imdct(bi1,fftsize); + bufpos=0; +); + + +spl0 = (dry0 + wet0 * adj) * gain; +spl1 = (dry1 + wet0 * adj) * gain; diff --git a/Effects/sstillwell/volscale b/Effects/sstillwell/volscale new file mode 100644 index 0000000..f40c56d --- /dev/null +++ b/Effects/sstillwell/volscale @@ -0,0 +1,68 @@ +// Copyright 2006, Thomas Scott Stillwell +// All rights reserved. +// +//Redistribution and use in source and binary forms, with or without modification, are permitted +//provided that the following conditions are met: +// +//Redistributions of source code must retain the above copyright notice, this list of conditions +//and the following disclaimer. +// +//Redistributions in binary form must reproduce the above copyright notice, this list of conditions +//and the following disclaimer in the documentation and/or other materials provided with the distribution. +// +//The name of Thomas Scott Stillwell may not be used to endorse or +//promote products derived from this software without specific prior written permission. +// +//THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR +//IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +//FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS +//BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +//(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +//PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, +//STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +//THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +desc:MIDI Velocity Scaler/Compressor +desc:MIDI Velocity Scaler/Compressor [Stillwell] +//tags: MIDI processing +//author: Stillwell + +slider1:0<0,16,1>Input Channel (0=omni) +slider2:1<0,3,0.01>Scale Factor +slider3:0<-127,127,1>Volume Offset +slider4:0<0,100,0.1>Mix (%) + +in_pin:left input +in_pin:right input +out_pin:left output +out_pin:right output + +@init + note_on = 9*16; + note_off = 8*16; + +@slider + chan=slider1-1; + scale=slider2; + offset=slider3; + mix=slider4/100; + +@block + while( + midirecv(mpos, msg1, msg2) ? ( + (msg1 & 240) == note_on ? ( + ((msg1 & 15) == chan) || chan==-1 ? ( + velocity = (msg2 & 65280)/256; + note = msg2 & 255; + newvel = min(127,max(0,floor(velocity * scale) + offset)); + midisend(mpos, msg1, (newvel*256) | note); + ); + ) : ( + midisend(mpos, msg1, msg2); + ); + ); + ); + +@sample + spl0 = spl0 * mix; + spl1 = spl1 * mix; diff --git a/Effects/sstillwell/width b/Effects/sstillwell/width new file mode 100644 index 0000000..bdd9ce8 --- /dev/null +++ b/Effects/sstillwell/width @@ -0,0 +1,50 @@ +// Copyright 2007, Thomas Scott Stillwell +// All rights reserved. +// +//Redistribution and use in source and binary forms, with or without modification, are permitted +//provided that the following conditions are met: +// +//Redistributions of source code must retain the above copyright notice, this list of conditions +//and the following disclaimer. +// +//Redistributions in binary form must reproduce the above copyright notice, this list of conditions +//and the following disclaimer in the documentation and/or other materials provided with the distribution. +// +//The name of Thomas Scott Stillwell may not be used to endorse or +//promote products derived from this software without specific prior written permission. +// +//THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR +//IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +//FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS +//BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +//(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +//PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, +//STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +//THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +desc:Subtractive Stereo Enhancer +//tags: processing stereo +//author: Stillwell + +slider1:0<0,100,1>Effect (%) +slider2:0<0,20,0.1>Make-Up Gain (dB) + +in_pin:left input +in_pin:right input +out_pin:left output +out_pin:right output + +@init + log2db = 8.6858896380650365530225783783321; // 20 / ln(10) + db2log = 0.11512925464970228420089957273422; // ln(10) / 20 + +@slider + effect = slider1 * 0.01; + gain = exp(slider2 * db2log); + +@sample + center = (spl0 + spl1) * 0.5; + spl0 -= center * effect; + spl1 -= center * effect; + spl0 *= gain; + spl1 *= gain; diff --git a/Effects/synthesis/midi_drumseq b/Effects/synthesis/midi_drumseq new file mode 100644 index 0000000..15a6d4d --- /dev/null +++ b/Effects/synthesis/midi_drumseq @@ -0,0 +1,160 @@ +// This effect Copyright (C) 2004 and later Cockos Incorporated +// License: GPL - http://www.gnu.org/licenses/gpl.html +desc:MIDI drum sequencer + +slider1:-6<-120,6,1>volume (dB) +slider2:/drum_patchsets:patchset_pacific1_adpcm.wav:Patch set +slider3:1<0.1,4,0.05>pitch scaling +slider4:16<1,64,1>max voices +slider5:-24<-120,0,1>gain at 0 velocity (dB) +slider6:60<0,127,1>base note +slider7:0<0,16,1>channel (0=omni) +slider8:0,meter + +@init +max_voices=128; // allocate enough ram for 128 samples +ext_noinit=1; + +voxlist=0; +voxsize=0; +voxentsize=4; // cur position, start position, end position, volume + +sampleinfotab=voxentsize*max_voices; // list of samples with start/end pos + +lslider2=-1000; + +@slider +voxmaxsize=min(max_voices,slider4); + +midichan=slider7; +midibase=slider6; +zerogain=2^(slider5/6); +vol=2^(slider1/6); +slider3=max(0.1,slider3); +actsize=0|min(min(actsize,slider4),4096); + +tmp=slider2|0; +lslider2 != tmp ? +( + lslider2=tmp; + pcm_buffer=sampleinfotab+128*2; + num_samples=0; + filehandle=file_open(slider2); + filehandle > 0 ? + ( + file_riff(filehandle,spl_nch,spl_srate); + spl_srate/=srate; + spl_nch==2 ? + ( + numsilent=0; + pairs=min(file_avail(filehandle),(8*1024*1024 - 65536*2))*0.5; + inspl=0; + pos=0; + sampleinfotab[num_samples*2]=pcm_buffer; + loop(pairs, + file_var(filehandle,l); + file_var(filehandle,r); + quiet=max(abs(l),abs(r)) < 0.0001; + inspl || !quiet ? + ( + pcm_buffer[0]=l; + pcm_buffer[1]=r; + inspl=1; + pos+=2; + pcm_buffer+=2; + ); + + inspl && quiet ? + ( + (numsilent += 1) >= 2048 ? ( + // new sample time + pcm_buffer-=numsilent*2; + sampleinfotab[num_samples*2+1]=(pos-numsilent*2); + num_samples+=1; + sampleinfotab[num_samples*2]=pcm_buffer; + inspl=0; + pos=0; + ); + ) : numsilent=0; + ); + sampleinfotab[num_samples*2+1]=pos-numsilent*2; + num_samples+=1; + ); + file_close(filehandle); + ); + actsize=0; +); + slider8=num_samples; +sliderchange(slider8); + +@block +gpitchsc=2*slider3*spl_srate; + +spl_nch == 2 ? ( + +while( + midirecv(pos,msg1,msg23) ? ( + midisend(pos,msg1,msg23); // pass through MIDI + + + ws=((msg23&127)-midibase)|0; + + ((midichan > 0 && msg1 == 9*16 + midichan-1) || // if MIDI noteon + (midichan==0 && msg1>=9*16 && msg1 < 10*16)) && + ws >= 0 && ws < num_samples ? ( + voxsize>=voxmaxsize ? ( + voxsize=voxmaxsize-1; + memcpy(voxlist,voxlist+voxentsize,voxentsize*voxsize); + ); + p=voxlist+voxentsize*voxsize; + p[1] = sampleinfotab[ws*2]; + p[0] = p[1] -pos / gpitchsc; + p[2] = p[1]+sampleinfotab[ws*2+1]; + + vel = ((msg23 / 256.0)|0)/127.0; + p[3] = 1.0*vel + (zerogain*(1.0-vel)); + voxsize+=1; + + ); //was noteon + + 1; + ) // midi recv + : 0 +); // while + +); + +@sample + +spl_nch == 2 ? ( + +s0=s1=0; + + +a=voxlist; +loop(voxsize, + cpos = a[0]; + cpos >= a[1] ? ( + // samples, yeah! + gain=a[3]; + addr=cpos|0; + addr-=addr&1; + + s0+=addr[0]*gain; // todo: interpolation + s1+=addr[1]*gain; + + ); + + cpos += gpitchsc; + cpos >= a[2]-1 ? ( + voxsize-=1; + memcpy(a,a+voxentsize,voxsize*voxentsize - a); + ) : ( + a[0]=cpos; + a+=voxentsize; + ); +); + +spl0+=s0*vol; +spl1+=s1*vol; +); // spl_nch == 2 diff --git a/Effects/synthesis/sine_sweep b/Effects/synthesis/sine_sweep new file mode 100644 index 0000000..506ca4f --- /dev/null +++ b/Effects/synthesis/sine_sweep @@ -0,0 +1,32 @@ +desc:Sine Sweep Generator +//tags: analysis generator synthesis +//author: Cockos + +/* +Copyright (C) 2007 Cockos Incorporated +License: LGPL - http://www.gnu.org/licenses/lgpl.html +*/ + + +slider1:8<1,100,1>Approx Sweep Length (sec) +in_pin:none +out_pin:output (mono) +out_pin:output (mono) + +@init +@slider +cpos=0; +dcpos=0; +dir=0; +// after srate*slider1 samples, dcpos should be pi/2 +len=srate*slider1; +idcpos=dcpos=$pi*16.0/srate; +ddcpos=exp($pi*2/len); +iddcpos=1/ddcpos; + +@sample +spl0=spl1=sin(cpos); +cpos+=dcpos; +dir ? dcpos *= iddcpos : dcpos*=ddcpos; + +dcpos >= $pi && !dir ? dir=1 : dcposFFT Size +slider2:0.5<0.01,0.99,0.01>analysis overlap +slider3:0.75<0.1,0.9,0.01>output overlap +slider4:0<-150,32,1>hold volume (dB) +slider5:-150<-150,32,1>dry mix during hold (dB) +slider6:0<-150,32,1>dry mix when not holding (dB) +slider7:slider_phasemul=0<0,12,.5>phase increase +slider8:slider_hold=0<0,2,1{off,hold,hold (do not update on switch)}>hold +slider9:slider_update=1<0,1,1{-,update}>update state +slider10:0<0,1,1{clear hold,preserve hold}>transport start behavior +slider11:slider_mixin=1<0,1,.001>mix-in on update +slider12:slider_autoupdate=0<0,30,.05>auto-update every (s) + +in_pin:left input +in_pin:right input +out_pin:left output +out_pin:right output + +@init + + +/////// memory map +analysis_hist = 0; // interleaved history of input samples +analysis_hist_size = 32768 * 2 * 2; // 32768*2 sample pairs (max fft size *2 for various overlaps) + +fft_buf = analysis_hist + analysis_hist_size; +fft_buf_size = (32768*2) * 2; // two FFT buffers (both used in analysis, only first used in synthesis) + +outstate_buf = fft_buf + fft_buf_size; +outstate_buf_size = 16384 * 2; // mag, phase per channel + +outstate_diff_buf = outstate_buf + outstate_buf_size*2; +outstate_diff_buf_size = 16384; // phase diff per each channel + +outqueue = outstate_diff_buf + outstate_diff_buf_size*2; +outqueue_size = 32768 * 2; // interleaved stereo output + +window_in = outqueue + outqueue_size; // window for analysis +window_out = window_in + 32768; // window for synthesis + +in_fftsize=-1; +slider10==0 ? slider_hold=hold_state=0; + +function parmchg.db_begin(idx,sv) + instance(chg_splpos, val, tgtval, dval) + global(samplesblock) +( + chg_splpos=slider_next_chg(idx, tgtval); + chg_splpos > 0 ? ( + val=sv<=-150?0:exp(sv*(0.05*log(10))); + tgtval = tgtval<=-150?0:exp(tgtval*(0.05*log(10))); + ) : ( + tgtval = sv<=-150?0:exp(sv*(0.05*log(10))); + chg_splpos = samplesblock; + ); + dval=(tgtval-val)/chg_splpos; +); + +function parmchg.process(idx, sv) + instance(val, dval, chg_splpos, tgtval) + global(at.cnt) +( + dval=0.0; + chg_splpos=slider_next_chg(idx, tgtval); + chg_splpos > at.cnt ? + ( + tgtval = tgtval<=-150 ? 0 : exp(tgtval*(0.05*log(10))); + dval=(tgtval-val)/(chg_splpos-at.cnt); + ); +); + +last_slider_hold = slider_hold; +last_slider_update = slider_update; + +@serialize +file_avail(0); + +@block + at.cnt=0; + gain.parmchg.db_begin(4,slider4); + dry.parmchg.db_begin(5,slider5); + dry2.parmchg.db_begin(6,slider6); + + in_fftsize != (0|(2^(slider1+9))) ? ( + in_fftsize=(2^(slider1+9))|0; + i=0; + sc=2.0*$pi/in_fftsize; + loop(in_fftsize, + window_in[i] = 0.42 - 0.50 * cos(i*sc) + 0.08 * cos(2.0*i*sc); + i+=1; + ); + pdc_delay=in_fftsize*.5; + pdc_top_ch=2; + pdc_bot_ch=0; + ); + + last_slider_hold != slider_hold ? ( + hold_state = slider_hold; + last_slider_hold = slider_hold; + ); + last_slider_update != slider_update ? ( + last_slider_update=slider_update; + slider_update ? hold_state=1; + ); + + autoupdate_pos == 0 ? autoupdate_pos = slider_autoupdate; + + autoupdate_pos += samplesblock/srate; + (trigger&1) ? ( + last_slider_hold = slider_hold = hold_state=1; + last_slider_update = slider_update=0; + ) : (trigger&8) ? ( + last_slider_hold = slider_hold = hold_state=0; + ) : (trigger&4) || (slider_autoupdate>0 && autoupdate_pos>=slider_autoupdate) ? ( + last_slider_update=slider_update=hold_state=1; + autoupdate_pos=0.0001; + ) : (trigger&2) ? ( + last_slider_hold = slider_hold = hold_state= (slider_hold?0:2); + last_slider_update = slider_update=0; + hold_state == 2 ? outstate_procpos = outstate_fftsize; + ); + + hold_state == 1 ? ( + chan = 0; + overlap_sampleoffs = max(1,min(in_fftsize,(in_fftsize * (1-slider2))|0)); + mixin1 = outstate_fftsize == in_fftsize ? slider_mixin : 1.0; + mixin2 = 1.0-mixin1; + wr_st = outstate_buf; + wr_ph = outstate_diff_buf; + loop(2, // per channel + + // analyze two blocks in fft_buf + rd_offset=in_fftsize; + wr = fft_buf; + loop(2, + i = analysis_hist_pos - rd_offset*2; + i < 0 ? i += analysis_hist_size; + window=window_in; + loop(in_fftsize, + wr[0] = analysis_hist[i+chan]*window[0]; + wr[1] = 0; + wr+=2; + window+=1; + (i+=2)>=analysis_hist_size?i=0; + ); + fft(wr - in_fftsize*2,in_fftsize); + rd_offset += overlap_sampleoffs; + ); + + // save state + phase difference + rd = fft_buf; + rd_prev = fft_buf + in_fftsize*2; + sc = in_fftsize/overlap_sampleoffs; + loop(in_fftsize*.5, + real = rd[0]; + imag = rd[1]; + wr_st[0] = sqrt(sqr(real)+sqr(imag)) * mixin1 + mixin2*wr_st[0]; + ang1 = atan2(imag,real); + wr_st[1] = ang1 * mixin1 + mixin2*wr_st[1]; + wr_ph[0] = (ang1 - atan2(rd_prev[1],rd_prev[0])) * sc * mixin1 + mixin2*wr_ph[0]; + rd+=2; + rd_prev+=2; + wr_ph+=1; + wr_st+=2; + ); + chan += 1; + ); + memcpy(window_out,window_in,in_fftsize); + outstate_fftsize = in_fftsize; + slider_autoupdate == 0.0 ? ( + outstate_procpos = outstate_fftsize; + ); + hold_state=2; + ); + +fade_len = outstate_fftsize*.5; +fade_delta = hold_state && slider_hold ? ((1-fade_pos)*2)/fade_len : (-fade_pos*2)/fade_len; +outstate_overlap = max(1,min(outstate_fftsize,(outstate_fftsize * (1-slider3))|0)); + +@sample +at.cnt == gain.parmchg.chg_splpos ? gain.parmchg.process(4,slider4); +at.cnt == dry.parmchg.chg_splpos ? dry.parmchg.process(5,slider5); +at.cnt == dry2.parmchg.chg_splpos ? dry2.parmchg.process(6,slider6); + +analysis_hist[analysis_hist_pos]=spl0; +analysis_hist[analysis_hist_pos+1]=spl1; +(analysis_hist_pos += 2) >= analysis_hist_size ? analysis_hist_pos=0; + +fade_pos=min(1,max(0,fade_pos+fade_delta)); + +fade_pos > 0 && (outstate_procpos+=1) >= outstate_overlap ? ( + // synthesize and add to outqueue at outqueue_pos + adv = (2^slider_phasemul)*outstate_procpos/outstate_fftsize; + gain = 1/(outstate_fftsize*max(slider3,0.5)); + chan = 0; + rd_st = outstate_buf; + rd_diff = outstate_diff_buf; + loop(2, + wr = fft_buf; + loop(outstate_fftsize*.5, + mag = rd_st[0]*gain; + phase = (rd_st[1] += rd_diff[0]*adv); + wr[0] = mag*cos(phase); + wr[1] = mag*sin(phase); + wr+=2; + rd_st+=2; + rd_diff+=1; + ); + memset(wr,0,outstate_fftsize); // clear second half + ifft(fft_buf,outstate_fftsize); + rd = fft_buf; + window = window_out; + + i = outqueue_pos; + loop(outstate_fftsize, + outqueue[i+chan] += window[0]*rd[0]; + rd += 2; + window+=1; + (i += 2) >= outqueue_size ? i=0; + ); + chan += 1; + ); + + outstate_procpos=0; +); + +hist = analysis_hist + analysis_hist_pos - pdc_delay*2; +hist < analysis_hist ? hist += analysis_hist_size; + +at.dry = (dry2.parmchg.val+(dry.parmchg.val-dry2.parmchg.val)*fade_pos); +spl0 = outqueue[outqueue_pos] * gain.parmchg.val * fade_pos + hist[0] * at.dry; +spl1 = outqueue[outqueue_pos+1] * gain.parmchg.val * fade_pos + hist[1] * at.dry; + +outqueue[outqueue_pos]=0; +outqueue[outqueue_pos+1]=0; +(outqueue_pos+=2) >= outqueue_size ? outqueue_pos=0; + +at.cnt+=1; +gain.parmchg.val += gain.parmchg.dval; +dry.parmchg.val += dry.parmchg.dval; +dry2.parmchg.val += dry2.parmchg.dval; + diff --git a/Effects/synthesis/tonegenerator b/Effects/synthesis/tonegenerator new file mode 100644 index 0000000..9a1be24 --- /dev/null +++ b/Effects/synthesis/tonegenerator @@ -0,0 +1,43 @@ +// This effect Copyright (C) 2004 and later Cockos Incorporated +// License: LGPL - http://www.gnu.org/licenses/lgpl.html + +desc: Tone Generator +//tags: analysis generator synthesis +//author: Cockos + +slider1:-12<-120,6,1>Wet Mix (dB) +slider2:-6<-120,6,1>Dry Mix (dB) +slider3:440<20,24000,1>Base Frequency (Hz) +slider4:0<0,11,1{A,A#,B,C,C#,D,D#,E,F,F#,G,G#}>Note +slider5:0<-4,4,1>Octave +slider6:0<-100,100,1>Fine Tune (cents) +slider7:0<0,2,1{Sine,Triangle,Saw}>Shape + +in_pin:left input +in_pin:right input +out_pin:left output +out_pin:right output + +@slider + vol=2 ^ (slider1/6); + dry=2 ^ (slider2/6); + adj = 2.0*$pi*slider3*(2^(slider5+slider4/12+slider6/1200))/srate; + +@sample + +(slider7 < 0.67) ? ( + tone = cos(pos); +) : +(slider7 < 1.33) ? ( + tone = 2.0*pos/$pi-1.0; + (tone > 1.0) ? tone = 2.0-tone; +) : ( + tone = 1.0-pos/$pi; +); + +tone *= vol; +spl0 = tone+spl0*dry; +spl1 = tone+spl1*dry; + +pos=pos+adj; +(pos >= 2.0*$pi) ? pos -= 2.0*$pi; diff --git a/Effects/utility/KanakaMS5 b/Effects/utility/KanakaMS5 new file mode 100644 index 0000000..e890274 --- /dev/null +++ b/Effects/utility/KanakaMS5 @@ -0,0 +1,32 @@ +desc:Mid/Side Decoder +//tags: utility mid-side processing +//author: Cockos + +slider1:0<-120,24,1>Center Level (dB) +slider2:0<0,1,1>Output Swap +slider3:0<-1,1,0.01>Center Position + +in_pin:mid input +in_pin:side input +out_pin:left output +out_pin:right output + +@slider +// so we'll set our multiplier to be used later +// so realistically this happens once or when the user changes shit. +// we store our volume multiplier in 'vol', for use per-sample. +// in theory the sample code below could have this directly... +vol = 2^(slider1/6); // convert from dB to a multiplier + +@sample +// decoder section +tmp=spl0*vol; +spl0 = tmp + spl1; +spl1 = tmp - spl1; +slider2>0.5 ? (tmp=spl1; spl1=spl0; spl0=tmp; ); + +// pan section here +slider3 > 0 ? spl0 *= 1.0-slider3; +slider3 < 0 ? spl1 *= 1.0+slider3; +spl0 = spl0 * min(1.0-slider3,1); +spl1 = spl1 * min(1.0+slider3,1); diff --git a/Effects/utility/KanakaMSEncoder1 b/Effects/utility/KanakaMSEncoder1 new file mode 100644 index 0000000..45be62e --- /dev/null +++ b/Effects/utility/KanakaMSEncoder1 @@ -0,0 +1,14 @@ +desc:Mid/Side Encoder +//tags: utility mid-side processing +//author: Cockos + +in_pin:left input +in_pin:right input +out_pin:mid output +out_pin:side output + +@sample +spl0orig=spl0; +spl1orig=spl1; +spl0 = (spl0orig+spl1orig) * 0.5; +spl1 = (spl0orig-spl1orig) * 0.5; diff --git a/Effects/utility/bufsave b/Effects/utility/bufsave new file mode 100644 index 0000000..7492713 --- /dev/null +++ b/Effects/utility/bufsave @@ -0,0 +1,30 @@ +// This effect Copyright (C) 2004 and later Cockos Incorporated +// License: GPL - http://www.gnu.org/licenses/gpl.html +desc: buffer save/restore + +slider1:0<0,100,1>slot +slider2:0<-180,6,1>src->buf mix (dB) +slider3:-180<-180,6,1>buf->buf mix (dB) +slider4:-6<-180,6,1>buf->dst mix (dB) +slider5:-6<-180,6,1>src->dst mix (dB) + +@slider +srcbufmix=2^(slider2/6); +bufbufmix=2^(slider3/6); +bufdstmix=2^(slider4/6); +srcdstmix=2^(slider5/6); + +@block +bpos=slider1*samplesblock; + +@sample +os0=gmem[bpos*2]; +os1=gmem[bpos*2+1]; + +gmem[bpos*2]=spl0*srcbufmix+os0*bufbufmix; +gmem[bpos*2+1]=spl1*srcbufmix+os1*bufbufmix; + +spl0=spl0*srcdstmix+os0*bufdstmix; +spl1=spl1*srcdstmix+os1*bufdstmix; + +bpos+=2; diff --git a/Effects/utility/chanmix2 b/Effects/utility/chanmix2 new file mode 100644 index 0000000..c6bff0e --- /dev/null +++ b/Effects/utility/chanmix2 @@ -0,0 +1,29 @@ +desc:Stereo Channel Volume/Pan/Polarity Control +//tags: utility processing stereo phase polarity gain +//author: Cockos + +slider1:0<-120,12,1>Left Volume (dB) +slider2:-1<-1,1,0.01>Left Pan +slider3:0<0,1,1{Normal,Invert}>Left Phase +slider4:0<-120,12,1>Right Volume (dB) +slider5:1<-1,1,0.01>Right Pan +slider6:0<0,1,1{Normal,Invert}>Right Phase + +in_pin:left input +in_pin:right input +out_pin:left output +out_pin:right output + +@slider + +llv=(2^(slider1/6))*min(1-slider2,1); +lrv=(2^(slider4/6))*min(1-slider5,1); +rlv=(2^(slider1/6))*min(1+slider2,1); +rrv=(2^(slider4/6))*min(1+slider5,1); + +slider3?(llv=-llv; rlv=-rlv;); +slider6?(lrv=-lrv; rrv=-rrv;); + +@sample +s0=spl0; s1=spl1; +spl0=s0*llv+s1*lrv; spl1=s0*rlv+s1*rrv; diff --git a/Effects/utility/channelmixer b/Effects/utility/channelmixer new file mode 100644 index 0000000..e9ca365 --- /dev/null +++ b/Effects/utility/channelmixer @@ -0,0 +1,29 @@ +// This effect Copyright (C) 2004 and later Cockos Incorporated +// License: LGPL - http://www.gnu.org/licenses/lgpl.html + +desc:Channel Mixer +//tags: utility processing stereo +//author: Cockos + +slider1:-6<-120,6,1>L->L Mix (dB) +slider2:-6<-120,6,1>R->R Mix (dB) +slider3:-6<-120,6,1>L->R Mix (dB) +slider4:-6<-120,6,1>R->L Mix (dB) + +in_pin:left input +in_pin:right input +out_pin:left output +out_pin:right output + +@init +@slider +ll=2^(slider1/6); +rr=2^(slider2/6); +lr=2^(slider3/6); +rl=2^(slider4/6); + +@sample +l=spl0; +r=spl1; +spl0=l*ll+r*rl; +spl1=l*lr+r*rr; diff --git a/Effects/utility/dither_psycho b/Effects/utility/dither_psycho new file mode 100644 index 0000000..47b9766 --- /dev/null +++ b/Effects/utility/dither_psycho @@ -0,0 +1,157 @@ +desc:Bit Reduction/Dither w/Noise Shaping +desc:Bit Reduction and Dither with Psychoacoustic Noise Shaping +//tags: utility processing dither +//author: Cockos + +slider1:16<1,32,1>Output Bit Depth +slider2:1<0,3,1{Off,On,Disabled (Sample Rate Not Supported),Disabled (Overload)}>Psychoacoustic Noise Shaping +slider3:2<0,1,2{Off (Truncate),On (TPDF),On (Highpass TPDF)}>Dither +slider4:2<1,2,0.1>Dither Bit Width (LSB) + +in_pin:left input +in_pin:right input +out_pin:left output +out_pin:right output + +@init + +N = 0; +coeffs = 0; + +// All coefficients John Schwartz 2007. +// http://www.gnu.org/licenses/gpl.html + +(srate == 44100) ? ( + N = 9; + coeffs[0] = 2.372839; + coeffs[1] = -3.132662; + coeffs[2] = 3.203963; + coeffs[3] = -2.853749; + coeffs[4] = 1.971429; + coeffs[5] = -1.013035; + coeffs[6] = 0.369805; + coeffs[7] = -0.091063; + coeffs[8] = 0.013578; + + // Wannamaker 1992 coefficients for reference. + // + // coeffs[0] = 2.412; + // coeffs[1] = -3.370; + // coeffs[2] = 3.937; + // coeffs[3] = -4.174; + // coeffs[4] = 3.353; + // coeffs[5] = -2.205; + // coeffs[6] = 1.281; + // coeffs[7] = -0.569; + // coeffs[8] = 0.0847; +) : +(srate == 48000) ? ( + N = 9; + coeffs[0] = 2.077677; + coeffs[1] = -2.721001; + coeffs[2] = 2.602012; + coeffs[3] = -2.157415; + coeffs[4] = 1.398085; + coeffs[5] = -0.84755; + coeffs[6] = 0.373337; + coeffs[7] = -0.161701; + coeffs[8] = 0.003758; +) : +(srate == 88200) ? ( + N = 10; + coeffs[0] = -0.037508; + coeffs[1] = 2.14333; + coeffs[2] = -0.089328; + coeffs[3] = -2.38445; + coeffs[4] = 0.376261; + coeffs[5] = 1.940341; + coeffs[6] = -0.463485; + coeffs[7] = -1.241821; + coeffs[8] = 0.157735; + coeffs[9] = 0.412081; +) : +(srate == 96000) ? ( + N = 10; + coeffs[0] = -0.26496; + coeffs[1] = 1.847721; + coeffs[2] = 0.692557; + coeffs[3] = -1.949565; + coeffs[4] = -0.691542; + coeffs[5] = 1.415063; + coeffs[6] = 0.463352; + coeffs[7] = -0.792872; + coeffs[8] = -0.229575; + coeffs[9] = 0.156314; +); + +(N == 0) ? ( + psycho = 0; + slider2 = 2; + sliderchange(slider2); +); + +errBufL = coeffs + N; +errBufR = errBufL + N; + +@slider + +resolution = 2 ^ (slider1 - 1); +psycho = (slider2 == 1); +tpdf = (slider3 == 1); +hiTPDF = (slider3 == 2); +ditherX = slider4 / 2.0; + +memset(errBufL, 0, N); +memset(errBufR, 0, N); +p = 0; + +zL = zR = 0.5; +rndL = rndR = 0.0; + +@sample + +sL = spl0; +sR = spl1; + +(psycho) ? ( + i = 0; + q = p; + loop(N, + sL -= coeffs[i] * errBufL[q]; + sR -= coeffs[i] * errBufR[q]; + i += 1; + q += 1; + (q == N) ? (q = 0); // % is expensive. + ); +); + +(tpdf) ? ( + zL = 0.5 + (rand(1) + rand(1) - 1.0) * ditherX; + zR = 0.5 + (rand(1) + rand(1) - 1.0) * ditherX; +) : +(hiTPDF) ? ( + zL = 0.5 + rndL; + zR = 0.5 + rndR; + rndL = rand(1) * ditherX; + rndR = rand(1) * ditherX; + zL -= rndL; + zR -= rndR; +); + +spl0 = floor(sL * resolution + zL) / resolution; +spl1 = floor(sR * resolution + zR) / resolution; + +spl0 = max(-1.0, min(spl0, 1.0)); +spl1 = max(-1.0, min(spl1, 1.0)); + +(psycho) ? ( + (p == 0) ? (p = N - 1) : (p -= 1); // % is expensive. + errBufL[p] = spl0 - sL; + errBufR[p] = spl1 - sR; + + (abs(spl0) == 1 || abs(spl1) == 1) ? ( + psycho = 0; + slider2 = 3; + sliderchange(slider2); + ); +); diff --git a/Effects/utility/limiter b/Effects/utility/limiter new file mode 100644 index 0000000..2ea70fd --- /dev/null +++ b/Effects/utility/limiter @@ -0,0 +1,12 @@ +// This effect Copyright (C) 2004 and later Cockos Incorporated +// License: GPL - http://www.gnu.org/licenses/gpl.html +desc: hard limiter +slider1:0<-120,60,1>max vol (dB) + +@slider +mv=2 ^ (slider1/6); + +@sample + + spl0=min(max(spl0,-mv),mv); + spl1=min(max(spl1,-mv),mv); diff --git a/Effects/utility/phase_adjust b/Effects/utility/phase_adjust new file mode 100644 index 0000000..e471b8b --- /dev/null +++ b/Effects/utility/phase_adjust @@ -0,0 +1,97 @@ +desc:Phase Rotator +//tags: processing FFT phase + +slider1:0<-180,180,1.0>Phase Adjustment +slider2:2<0,4,1{1024,2048,4096,8192}>FFT Size + +in_pin:left input +in_pin:right input +out_pin:left output +out_pin:right output + +@init + + fftsize = -1; + pdc_bot_ch = 0; + pdc_top_ch = 2; + + // array pointers + window=0; + buf0 = 16384; + buf1 = 32768; + +@slider + + sliderfft = (2^(slider2+10))|0; + fftsize != sliderfft ? ( + pos = 0; + memset(buf0, 0, 2*fftsize); + memset(buf1, 0, 2*fftsize); + memset(window, 0, fftsize); + fftsize = sliderfft; + w = 2.0*$pi/fftsize; + i = 0; + loop(fftsize/2, + window[i] = 0.42-0.50*cos(i*w)+0.08*cos(2.0*i*w); + i += 1; + ); + pdc_delay = fftsize; + ); + + phaseadj = -$pi*slider1/180.0; + cadj = cos(phaseadj); + sadj = sin(phaseadj); + +@sample + + pos >= fftsize ? ( + tmp = buf0; + buf0 = buf1; + buf1 = tmp; + + fft(buf0, fftsize); + fft_permute(buf0, fftsize); + + i = 0; + loop(fftsize/2, + a = i; + b = a+1; + x = buf0[a]; + y = buf0[b]; + buf0[a] = x*cadj-y*sadj; + buf0[b] = x*sadj+y*cadj; + + a = 2*fftsize-i-2; + b = a+1; + x = buf0[a]; + y = buf0[b]; + buf0[a] = x*cadj+y*sadj; + buf0[b] = -x*sadj+y*cadj; + + i += 2); + + fft_ipermute(buf0, fftsize); + ifft(buf0, fftsize); + + pos=0; + ); + + w1 = window[pos/2]; + w2 = window[(fftsize-pos)/2-1]; + sw = (w1+w2)*fftsize; + + out0 = (buf0[pos]+buf1[fftsize+pos])/sw; + out1 = (buf0[pos+1]+buf1[fftsize+pos+1])/sw; + + buf0[pos] = w1*spl0; + buf0[pos+1] = w1*spl1; + buf1[fftsize+pos] = w2*spl0; + buf1[fftsize+pos+1] = w2*spl1; + + spl0 = out0; + spl1 = out1; + + pos += 2; + + + diff --git a/Effects/utility/smpte_ltc_reader b/Effects/utility/smpte_ltc_reader new file mode 100644 index 0000000..ea3b7cd --- /dev/null +++ b/Effects/utility/smpte_ltc_reader @@ -0,0 +1,190 @@ +desc:SMPTE LTC Reader/Meter +//tags: utility visualization + +in_pin:input +out_pin:none + +slider1:0<0,3,1.0{30,24,25,29.97}>Frame Rate + +@init +minthresh=10^(-80/20); +threshenv=exp(-1/(0.1*srate)); // 100ms +gfx_clear=-1; +syncstate=0; +itm1=otm1=0; +thresh = 1; // ~-10dB +lastsign=1; +sillen=0; +buf=0; +bufpos=0; +gotbit=-1; +syncpos=-1; +blitparmbuf=1000; +frates=2000; +frates[0]=30; +frates[1]=24; +frates[2]=25; +frates[3]=30*1000/1001; + +@slider +pulsesize = (srate / frates[slider1] / (80.0 * 2.0)); + +@sample + +// remove DC offset +otm1=0.999*otm1 + spl0 - itm1; itm1=spl0; s=otm1; +// s has DC offset removed sample + +sillen+=1; + +sillen > pulsesize * 2.2 ? +( + syncpos=-1; + sillen=0; + gotbit=-1; + syncstate=1; + ); + +thresh = thresh*threshenv + abs(s)*(1-threshenv); +thresh < minthresh?thresh=minthresh; + +(s < -thresh*0.8 && lastsign > 0) || (s > thresh*0.8 && lastsign < 0) ? ( + lastsign=-lastsign; + gotbit+=1; + sillen > pulsesize*1.8 ? // done with bit + ( + gotbit=min(gotbit,1); + sillen=0; + + buf[bufpos]=gotbit; + (bufpos += 1) >= 80 ? bufpos=0; + + syncpos >= 0 ? syncpos += 1; + (syncpos < 0 || syncpos >= 80) ? + ( + syncpos=-1; + // try to get sync + ( + buf[(bufpos+64)%80]==0 && + buf[(bufpos+65)%80]==0 && + buf[(bufpos+66)%80]==1 && + buf[(bufpos+67)%80]==1 && + buf[(bufpos+68)%80]==1 && + buf[(bufpos+69)%80]==1 && + buf[(bufpos+70)%80]==1 && + buf[(bufpos+71)%80]==1 && + buf[(bufpos+72)%80]==1 && + buf[(bufpos+73)%80]==1 && + buf[(bufpos+74)%80]==1 && + buf[(bufpos+75)%80]==1 && + buf[(bufpos+76)%80]==1 && + buf[(bufpos+77)%80]==1 && + buf[(bufpos+78)%80]==0 && + buf[(bufpos+79)%80]==1) ? + ( + + new_f=buf[(bufpos+0)%80]+ + buf[(bufpos+1)%80]*2 + + buf[(bufpos+2)%80]*4 + + buf[(bufpos+3)%80]*8 + + 10*( + buf[(bufpos+8)%80] + + buf[(bufpos+9)%80]*2;// + +// buf[(bufpos+10)%80]*4 + ); + + new_s=buf[(bufpos+16)%80]+ + buf[(bufpos+17)%80]*2 + + buf[(bufpos+18)%80]*4 + + buf[(bufpos+19)%80]*8 + + 10*( + buf[(bufpos+24)%80] + + buf[(bufpos+25)%80]*2+ + buf[(bufpos+26)%80]*4 + ); + + new_m=buf[(bufpos+32)%80]+ + buf[(bufpos+33)%80]*2 + + buf[(bufpos+34)%80]*4 + + buf[(bufpos+35)%80]*8 + + 10*( + buf[(bufpos+40)%80] + + buf[(bufpos+41)%80]*2+ + buf[(bufpos+42)%80]*4 + ); + + new_h=(buf[(bufpos+48)%80]+ + buf[(bufpos+49)%80]*2 + + buf[(bufpos+50)%80]*4 + + buf[(bufpos+51)%80]*8 + + 10*( + buf[(bufpos+56)%80] + + buf[(bufpos+57)%80]*2 + )); + + hours=new_h; minutes=new_m; seconds=new_s; frames=new_f; + new_time = ((hours*80 + minutes)*80+seconds)*100+frames; + + syncpos=0; + syncstate=2; + ) : + ( + syncstate=0; + ); + ); + + gotbit=-1; + ); +); + + +@gfx +gfxsize=gfx_w*10000 + gfx_h; +new_time != old_time || gfxsize != old_size ? ( +old_time=new_time; +old_size=gfxsize; +gfx_r=gfx_g=gfx_b=0; gfx_a=1; +gfx_x=gfx_y=0; +gfx_rectto(gfx_w,gfx_h); +gfx_r=gfx_g=gfx_b=1; +gfx_x=gfx_y=2; +gfx_drawchar($'0' + ((hours/10)%10)); +gfx_drawchar($'0' + (hours%10)); +gfx_drawchar($':'); +gfx_drawchar($'0' + ((minutes/10)%10)); +gfx_drawchar($'0' + (minutes%10)); +gfx_drawchar($':'); +gfx_drawchar($'0' + ((seconds/10)%10)); +gfx_drawchar($'0' + (seconds%10)); +gfx_drawchar($':'); +gfx_drawchar($'0' + ((frames/10)%10)); +gfx_drawchar($'0' + (frames%10)); + +draw1wid=gfx_x; + +blitparmbuf[0]=0; +blitparmbuf[1]=0; +blitparmbuf[2]=gfx_x; +blitparmbuf[3]=(gfx_texth+4); + +ow=gfx_w; +oh=(gfx_texth+4) * gfx_w / gfx_x * 1.3; + +oh > gfx_h ? oh=gfx_h; + +blitparmbuf[4]=0; +blitparmbuf[5]=(gfx_h-oh)/2; +blitparmbuf[6]=ow; +blitparmbuf[7]=oh; + + +gfx_blitext(-1,blitparmbuf,0); + +gfx_x=0; +gfx_y=0; +gfx_r=gfx_g=gfx_b=0; +gfx_rectto(draw1wid,min(gfx_texth+2,blitparmbuf[5])); + +); + + diff --git a/Effects/utility/vca_master b/Effects/utility/vca_master new file mode 100644 index 0000000..874d2cd --- /dev/null +++ b/Effects/utility/vca_master @@ -0,0 +1,19 @@ +desc:VCA Master +//tags: utility gain + +slider1:0<-120,24,1>Volume (dB) + + +out_pin:Controller Out L +out_pin:Controller Out R + + +@init +s=1; + +@slider +cv = 10^((slider1-30)/20); + +@sample +spl0 = spl1 = cv*s; +s=-s; diff --git a/Effects/utility/vca_slave b/Effects/utility/vca_slave new file mode 100644 index 0000000..91a166b --- /dev/null +++ b/Effects/utility/vca_slave @@ -0,0 +1,28 @@ +desc:VCA Slave +//tags: utility gain +//author: Unknown + +in_pin:Audio In L +in_pin:Audio In R +in_pin:Controller In L +in_pin:Controller In R +out_pin:Audio Out L +out_pin:Audio Out R + + +slider1:50<0,300,1>Transition Time (ms) + +@init +curgain=0.0; +curgain2=0.0; +reflevel = 10^(30/20); + + +@slider +sc = exp(-1.0 / (slider1*0.001*srate)); +sc2 = (1-sc)*reflevel; + +@sample + +spl0 *= (curgain = curgain * sc + min(abs(spl2),8.0)*sc2); +spl1 *= (curgain2 = curgain2 * sc + min(abs(spl3),8.0)*sc2); \ No newline at end of file diff --git a/Effects/utility/volume b/Effects/utility/volume new file mode 100644 index 0000000..988f30f --- /dev/null +++ b/Effects/utility/volume @@ -0,0 +1,33 @@ +// This effect Copyright (C) 2004 and later Cockos Incorporated +// License: LGPL - http://www.gnu.org/licenses/lgpl.html + +desc: Volume Adjustment +//tags: utility gain +//author: Cockos + +slider1:6<-150,150,1>Adjustment (dB) +slider2:0<-150,150,1>Max Volume (dB) + +in_pin:left input +in_pin:right input +out_pin:left output +out_pin:right output + +@slider + adj1=2 ^ (slider1/6); + adj2=2 ^ (slider2/6); + doseek=1; + +@block +doseek ? ( + dadj=(adj1-adj1_s)/samplesblock; + doseek=0; +):( + dadj=0; + adj1_s=adj1; +); + +@sample +spl0=min(max(spl0*adj1_s,-adj2),adj2); +spl1=min(max(spl1*adj1_s,-adj2),adj2); +adj1_s+=dadj; diff --git a/Effects/utility/volume_pan b/Effects/utility/volume_pan new file mode 100644 index 0000000..0359799 --- /dev/null +++ b/Effects/utility/volume_pan @@ -0,0 +1,56 @@ +desc:Volume/Pan Smoother +//tags: utility gain stereo +//author: Cockos + +slider1:0<-60,12,0.1>Volume (dB) +slider2:0<-100,100,0.1>Pan +slider3:0<-6,6,0.5>Pan Law (dB) + +in_pin:left input +in_pin:right input +out_pin:left output +out_pin:right output + +@init + +AMP_dB = 8.68588963806504; +src_vol = tgt_vol = exp(slider1/AMP_DB); +src_pan = tgt_pan = 0.01*slider2; + +@slider + +tgt_vol = exp(slider1/AMP_DB); +tgt_pan = 0.01*slider2; +panlaw = exp(slider3/AMP_DB); +pancomp = (panlaw > 1.0 ? 1.0/panlaw : panlaw); + +@block + +d_vol = (tgt_vol-src_vol)/samplesblock; +d_pan = (tgt_pan-src_pan)/samplesblock; +tvol = src_vol; +tpan = src_pan; +src_vol = tgt_vol; +src_pan = tgt_pan; + +@sample + +tvol += d_vol; +tpan += d_pan; + +adj = tvol; + +panlaw != 1.0 ? ( + panlaw > 1.0 ? adj *= panlaw; + panatt = abs(tpan); + adj *= pancomp+(1.0-pancomp)*(2.0/(2.0-panatt)-1.0); +); + +adj0 = adj1 = adj; +tpan < 0.0 ? adj1 *= 1.0+tpan; +tpan > 0.0 ? adj0 *= 1.0-tpan; + +spl0 *= adj0; +spl1 *= adj1; + + diff --git a/Effects/utility/volume_pan_sample_accurate_auto b/Effects/utility/volume_pan_sample_accurate_auto new file mode 100644 index 0000000..57f1a8f --- /dev/null +++ b/Effects/utility/volume_pan_sample_accurate_auto @@ -0,0 +1,95 @@ +desc:Volume/Pan Smoother v5 +//tags: utility gain stereo +//author: Cockos + +slider1:0<-60,12,0.1>Volume (dB) +slider2:0<-100,100,0.1>Pan +slider3:0<-6,6,0.5>Pan Law (dB) + +in_pin:left input +in_pin:right input +out_pin:left output +out_pin:right output + +@init + +AMP_dB_i=1/8.68588963806504; + +db=slider1; // initialize here but not in @slider for playback start +pan=0.01*slider2; + +@slider + +panlaw=exp(slider3*AMP_DB_i); +pancomp=(panlaw > 1.0 ? 1.0/panlaw : panlaw); +ddb=0.0; +dpan=0.0; + +@block + +cnt=0; +ddb=0.0; +dpan=0.0; + +db_chg_splpos=slider_next_chg(1, tgtdb); +db_chg_splpos > 0 ? +( + db=slider1; +) : ( + tgtdb = slider1; + db_chg_splpos = samplesblock; +); + +ddb=(tgtdb-db)/db_chg_splpos; + +pan_chg_splpos=slider_next_chg(2, tgtpan); +pan_chg_splpos > 0 ? +( + pan=0.01*slider2; +) : ( + tgtpan = slider2; + pan_chg_splpos = samplesblock; +); +dpan=(tgtpan*0.01-pan)/pan_chg_splpos; + +@sample + +cnt == db_chg_splpos ? +( + ddb=0.0; + db_chg_splpos=slider_next_chg(1, tgtdb); + db_chg_splpos > cnt ? + ( + ddb=(tgtdb-db)/(db_chg_splpos-cnt); + ); +); + +cnt == pan_chg_splpos ? +( + dpan=0.0; + pan_chg_splpos=slider_next_chg(2, tgtpan); + pan_chg_splpos > cnt ? + ( + dpan=(tgtpan*0.01-pan)/(pan_chg_splpos-cnt); + ); +); + +adj=exp(db*AMP_DB_i); +panlaw != 1.0 ? +( + panlaw > 1.0 ? adj *= panlaw; + panatt = abs(pan); + adj *= pancomp+(1.0-pancomp)*(2.0/(2.0-panatt)-1.0); +); + +adj0=adj1=adj; +pan < 0.0 ? adj1 *= 1.0+pan; +pan > 0.0 ? adj0 *= 1.0-pan; + +spl0 *= adj0; +spl1 *= adj1; + +db += ddb; +pan += dpan; +cnt += 1; + diff --git a/Effects/waveshapers/graphdist b/Effects/waveshapers/graphdist new file mode 100644 index 0000000..2f7b925 --- /dev/null +++ b/Effects/waveshapers/graphdist @@ -0,0 +1,270 @@ +desc:Graphical Waveshaper +//tags: processing distortion waveshaper + +slider1:1<0,1,1{Off, On}>Mirror +slider2:0<-144,24,1>Wet Mix (dB) +slider3:-144<-144,24,1>Dry Mix (dB) +slider4:1<1,32,1>Oversampling (times) + +in_pin:left input +in_pin:right input +out_pin:left output +out_pin:right output + +@init +tabsize=40; // actually twice this, but x per side, and 0 is always 0 +tab=0; // first x are 0..1, next x are 0..-1 +i=0; +ext_noinit=1; +!hasinit ? loop(tabsize, + tab[i]=(i+1)/tabsize; + tab[tabsize+i]=-(i+1)/tabsize; + i+=1; +); +hasinit=1; +last_a=-1; +histbuf=1000000; +histpos=0; +histsize=1000; + +@slider +wet = 10^(slider2/20); +dry = 10^(slider3/20); + + aasize=(slider4+0.5)|0; + aasize<1?aasize=1:aasize>256?aasize=256; + + aasize != last_aa ? ( + + aasize>1 ? ( + Q=0.707; + pos=0.85/aasize * $pi; + + cpos=cos(pos); + spos=sin(pos); + + alpha=spos/(2.0*Q); + + sc=1.0/( 1 + alpha); + b1 = (1-cpos) * sc; + b2 = b0 = b1*0.5; + a1 = -2 * cpos * sc; + a2 = (1-alpha)*sc; + ); + last_aa=aasize; + + hist4=hist5=hist6=hist7=0; + hist8=hist9=hist10=hist11=0; + hist12=hist13=hist14=hist15=0; + hist16=hist17=hist18=hist19=0; + ); + + +@serialize +file_var(0,tabsize); +file_mem(0,tab,tabsize*2) ? hasinit=1; + +@block +itabsz=1/tabsize; + +@sample +histbuf[histpos]=spl0; +histbuf[histpos+histsize]=spl1; + +old_l=spl0; +old_r=spl1; + + sspos=0; + src0=spl0; + src1=spl1; + loop(aasize, + + // run input filter + aasize > 1 ? ( + sspl0 = src0*b0 + hist4*b1 + hist5*b2 - hist6*a1 - hist7*a2; + hist5=hist4; hist4=src0; hist7=hist6; hist6=sspl0; + + sspl1 = src1*b0 + hist8*b1 + hist9*b2 - hist10*a1 - hist11*a2; + hist9=hist8; hist8=src1; hist11=hist10; hist10=sspl1; + ) : ( + sspl0=src0; + sspl1=src1; + ); + + +v=sspl0; + +sn=1; +tp=tab; v<0? ( v=-v; slider1<=0.5 ? tp+=tabsize : sn=-1; ); +v<=itabsz ? (v=tp[0]*v*tabsize) : v>=1.0 ? v=tp[tabsize-1] : ( + sc=v*tabsize - 1; + wh=sc|0; + sc-=wh; + v=tp[wh]*(1.0-sc)+tp[wh+1]*sc; +); +sspl0=v*sn; + + + +v=sspl1; +sn=1; +tp=tab; v<0? ( v=-v; slider1<=0.5 ? tp+=tabsize : sn=-1; ); +v<=itabsz ? (v=tp[0]*v*tabsize) : v>=1.0 ? v=tp[tabsize-1] : ( + sc=v*tabsize - 1; + wh=sc|0; + sc-=wh; + v=tp[wh]*(1.0-sc)+tp[wh+1]*sc; +); +sspl1=v*sn; + + + // run output filters + + aasize > 1 ? ( + + (sspos+=1)==1 ? ( + spl0 = sspl0*b0 + hist12*b1 + hist13*b2 - hist14*a1 - hist15*a2; + spl1 = sspl1*b0 + hist16*b1 + hist17*b2 - hist18*a1 - hist19*a2; + + hist13=hist12; hist12=sspl0; hist15=hist14; hist14=spl0; + hist17=hist16; hist16=sspl1; hist19=hist18; hist18=spl1; + + ) : ( + tmp0 = sspl0*b0 + hist12*b1 + hist13*b2 - hist14*a1 - hist15*a2; + tmp1 = sspl1*b0 + hist16*b1 + hist17*b2 - hist18*a1 - hist19*a2; + + hist13=hist12; hist12=sspl0; hist15=hist14; hist14=tmp0; + hist17=hist16; hist16=sspl1; hist19=hist18; hist18=tmp1; + ); + ) : ( + spl0=sspl0; + spl1=sspl1; + ); + + ); + + + + + +histbuf[histpos+histsize*2]=spl0; +histbuf[histpos+histsize*3]=spl1; +spl0=old_l*dry + spl0*wet; +spl1=old_r*dry + spl1*wet; + +histpos+=1; +histpos >= histsize ? histpos=0; + +@gfx 400 400 + +sz=min(gfx_w,gfx_h); +top = (gfx_h-sz)*0.5; +left = (gfx_w-sz)*0.5; +right=gfx_w-left; +bottom=gfx_h-top; + +mouse_cap ? ( + gv=(gfx_h*0.5-mouse_y)*2.0/sz; + gv<-1?gv=-1:gv>1?gv=1; + mouse_x > gfx_w*0.5 ? ( + a=((mouse_x - gfx_w*0.5)*tabsize/(sz*0.5))|0; + a >= tabsize ? a=tabsize-1 : a<0?a=0; + ) : ( + a=((gfx_w*0.5-mouse_x)*tabsize/(sz*0.5))|0; + a >= tabsize ? a=tabsize-1 : a<0?a=0; + slider1>0.5 ? gv=-gv : a+=tabsize; + ); + last_a >= 0 && abs(last_a-a)>1 ? ( + (alast_a ? 1 : -1; + dv=(gv-last_v)/abs(a-last_a); + loop(abs(a-last_a)-1, + last_v+=dv; + last_a+=da; + tab[last_a]=(mouse_cap&2) ? ((last_a%tabsize)+1)/tabsize * (last_a>=tabsize?-1:1) : last_v; + ); + ) : ( // user crossed zero, so let's transition the mofo + l=abs(last_a>=tabsize?last_a-tabsize:last_a); + loop(l, + last_a-=1; + tab[last_a]=(mouse_cap&2) ? ((last_a%tabsize)+1)/tabsize * (last_a>=tabsize?-1:1) : last_v; + ); + l=abs(a>=tabsize?a-tabsize:a); + last_a = a>=tabsize ? tabsize-1 : -1; + loop(l, + last_a+=1; + tab[last_a]=(mouse_cap&2) ? ((last_a%tabsize)+1)/tabsize * (last_a>=tabsize?-1:1) : gv; + ); + ); + ); + tab[a]=(mouse_cap&2) ? ((a%tabsize)+1)/tabsize * (a>=tabsize?-1:1) : gv; + + last_a=a; + last_v=gv; +) : ( + last_a >= 0 ? ( + last_a = -1; + sliderchange(-1); + ); +); + + +offs=histpos; +gscale=sz/histsize; +gbuf=histbuf; +gscale2=sz*0.5; +gp=0; +loop(4, + gp > 1 ? ( + gfx_r=0.5; gfx_g=0.8; gfx_b=0.5; + gfx_a=0.8; + ) : ( + gfx_r=0.8; gfx_g=0.4; gfx_b=0.5; + gfx_a=0.2; + ); + ga=0; + loop(histsize, + gv=gbuf[offs]; + offs+=1; + offs>=histsize?offs=0; + gx=left + ga*gscale; + gy=gfx_h*0.5 - gv*gscale2; + ga ? gfx_lineto(gx,gy,false) : ( gfx_x=gx; gfx_y=gy; ); + ga+=1; + ); + gp+=1; + gbuf+=histsize; +); + +gfx_a=0.3; +gfx_r=gfx_g=gfx_b=1; + +gfx_x=left; gfx_y=gfx_h*0.5; +gfx_lineto(right,gfx_y,0); +gfx_x=gfx_w*0.5; gfx_y=top; +gfx_lineto(gfx_x, bottom,0); + +gfx_x=left; gfx_y=bottom; +gfx_lineto(right,top,0); + +gfx_a=0.8; +gfx_g=0; +gfx_x=gfx_w*0.5; gfx_y=gfx_h*0.5; +ga=0; +loop(tabsize, + + gfx_lineto(gfx_w*0.5 + (ga+1)*sz/tabsize*0.5, + gfx_h*0.5 - tab[ga]*sz*0.5, 1); + + ga+=1; +); +ga=0; +gfx_x=gfx_w*0.5; gfx_y=gfx_h*0.5; +loop(tabsize, + slider1>0.5 ? gv=-tab[ga] : gv=tab[tabsize+ga]; + + gfx_lineto(gfx_w*0.5 - (ga+1)*sz/tabsize*0.5, + gfx_h*0.5 - gv*sz*0.5, 1); + + ga+=1; +); diff --git a/Effects/waveshapers/graphdist-dyn b/Effects/waveshapers/graphdist-dyn new file mode 100644 index 0000000..213de78 --- /dev/null +++ b/Effects/waveshapers/graphdist-dyn @@ -0,0 +1,297 @@ +desc:Graphical Dynamic Waveshaper +//tags: processing distortion waveshaper +//author: Unknown + +slider1:1<0,1,1{Off, On}>Mirror +slider2:0<-144,24,1>Wet Mix (dB) +slider3:-144<-144,24,1>Dry Mix (dB) +slider4:1<1,32,1>Oversampling (times) +slider5:5<0.1,100,0.1>Integration Time (ms) +slider6:-50<-100,6,1>Dynamic Floor +slider7:-6<-60,60,1>Dynamic Positioning + +in_pin:left input +in_pin:right input +out_pin:left output +out_pin:right output + +@init +tabsize=40; // actually twice this, but x per side, and 0 is always 0 +tab=0; // first x are 0..1, next x are 0..-1 +i=0; +ext_noinit=1; +!hasinit ? loop(tabsize, + tab[i]=(i+1)/tabsize; + tab[tabsize+i]=-(i+1)/tabsize; + i+=1; +); +hasinit=1; +last_a=-1; +histbuf=1000000; +histpos=0; +histsize=1000; + +@slider + + aasize=(slider4+0.5)|0; + aasize<1?aasize=1:aasize>256?aasize=256; + +denv = exp(-1/slider5*0.001*srate*aasize); +dfloor=10^(slider6/20); +dpos=10^(slider7/20); + + +wet = 10^(slider2/20); +dry = 10^(slider3/20); + + + aasize != last_aa ? ( + + aasize>1 ? ( + Q=0.707; + pos=0.85/aasize * $pi; + + cpos=cos(pos); + spos=sin(pos); + + alpha=spos/(2.0*Q); + + sc=1.0/( 1 + alpha); + b1 = (1-cpos) * sc; + b2 = b0 = b1*0.5; + a1 = -2 * cpos * sc; + a2 = (1-alpha)*sc; + ); + last_aa=aasize; + + hist4=hist5=hist6=hist7=0; + hist8=hist9=hist10=hist11=0; + hist12=hist13=hist14=hist15=0; + hist16=hist17=hist18=hist19=0; + ); + + +@serialize +file_var(0,tabsize); +file_mem(0,tab,tabsize*2) ? hasinit=1; + +@block +itabsz=1/tabsize; + +@sample +histbuf[histpos]=spl0; +histbuf[histpos+histsize]=spl1; + +old_l=spl0; +old_r=spl1; + + sspos=0; + src0=spl0; + src1=spl1; + loop(aasize, + + // run input filter + aasize > 1 ? ( + sspl0 = src0*b0 + hist4*b1 + hist5*b2 - hist6*a1 - hist7*a2; + hist5=hist4; hist4=src0; hist7=hist6; hist6=sspl0; + + sspl1 = src1*b0 + hist8*b1 + hist9*b2 - hist10*a1 - hist11*a2; + hist9=hist8; hist8=src1; hist11=hist10; hist10=sspl1; + ) : ( + sspl0=src0; + sspl1=src1; + ); + + + + +env=env*(denv)+max(abs(sspl0),abs(sspl1))*(1-denv); +env < dfloor ? env=dfloor; + +gainsc = env*dpos; +igainsc=1/gainsc; + +v=sspl0*gainsc; + +sn=1; +tp=tab; v<0? ( v=-v; slider1<=0.5 ? tp+=tabsize : sn=-1; ); +v<=itabsz ? (v=tp[0]*v*tabsize) : v>=1.0 ? +( + v=tp[tabsize-1]+(vp[tabsize-1]-vp[tabsize-2])*(v-1.0)*tabsize; +) +: ( + sc=v*tabsize - 1; + wh=sc|0; + sc-=wh; + v=tp[wh]*(1.0-sc)+tp[wh+1]*sc; +); +sspl0=v*sn*igainsc; + + + +v=sspl1*gainsc; +sn=1; +tp=tab; v<0? ( v=-v; slider1<=0.5 ? tp+=tabsize : sn=-1; ); +v<=itabsz ? (v=tp[0]*v*tabsize) : v>=1.0 ? ( + v=tp[tabsize-1]+(vp[tabsize-1]-vp[tabsize-2])*(v-1.0)*tabsize; +) : ( + sc=v*tabsize - 1; + wh=sc|0; + sc-=wh; + v=tp[wh]*(1.0-sc)+tp[wh+1]*sc; +); +sspl1=v*sn*igainsc; + + + // run output filters + + aasize > 1 ? ( + + (sspos+=1)==1 ? ( + spl0 = sspl0*b0 + hist12*b1 + hist13*b2 - hist14*a1 - hist15*a2; + spl1 = sspl1*b0 + hist16*b1 + hist17*b2 - hist18*a1 - hist19*a2; + + hist13=hist12; hist12=sspl0; hist15=hist14; hist14=spl0; + hist17=hist16; hist16=sspl1; hist19=hist18; hist18=spl1; + + ) : ( + tmp0 = sspl0*b0 + hist12*b1 + hist13*b2 - hist14*a1 - hist15*a2; + tmp1 = sspl1*b0 + hist16*b1 + hist17*b2 - hist18*a1 - hist19*a2; + + hist13=hist12; hist12=sspl0; hist15=hist14; hist14=tmp0; + hist17=hist16; hist16=sspl1; hist19=hist18; hist18=tmp1; + ); + ) : ( + spl0=sspl0; + spl1=sspl1; + ); + + ); + + + + + +histbuf[histpos+histsize*2]=spl0; +histbuf[histpos+histsize*3]=spl1; +spl0=old_l*dry + spl0*wet; +spl1=old_r*dry + spl1*wet; + +histpos+=1; +histpos >= histsize ? histpos=0; + +@gfx 400 400 + +sz=min(gfx_w,gfx_h); +top = (gfx_h-sz)*0.5; +left = (gfx_w-sz)*0.5; +right=gfx_w-left; +bottom=gfx_h-top; + +mouse_cap ? ( + gv=(gfx_h*0.5-mouse_y)*2.0/sz; + gv<-1?gv=-1:gv>1?gv=1; + mouse_x > gfx_w*0.5 ? ( + a=((mouse_x - gfx_w*0.5)*tabsize/(sz*0.5))|0; + a >= tabsize ? a=tabsize-1 : a<0?a=0; + ) : ( + a=((gfx_w*0.5-mouse_x)*tabsize/(sz*0.5))|0; + a >= tabsize ? a=tabsize-1 : a<0?a=0; + slider1>0.5 ? gv=-gv : a+=tabsize; + ); + last_a >= 0 && abs(last_a-a)>1 ? ( + (alast_a ? 1 : -1; + dv=(gv-last_v)/abs(a-last_a); + loop(abs(a-last_a)-1, + last_v+=dv; + last_a+=da; + tab[last_a]=(mouse_cap&2) ? ((last_a%tabsize)+1)/tabsize * (last_a>=tabsize?-1:1) : last_v; + ); + ) : ( // user crossed zero, so let's transition the mofo + l=abs(last_a>=tabsize?last_a-tabsize:last_a); + loop(l, + last_a-=1; + tab[last_a]=(mouse_cap&2) ? ((last_a%tabsize)+1)/tabsize * (last_a>=tabsize?-1:1) : last_v; + ); + l=abs(a>=tabsize?a-tabsize:a); + last_a = a>=tabsize ? tabsize-1 : -1; + loop(l, + last_a+=1; + tab[last_a]=(mouse_cap&2) ? ((last_a%tabsize)+1)/tabsize * (last_a>=tabsize?-1:1) : gv; + ); + ); + ); + tab[a]=(mouse_cap&2) ? ((a%tabsize)+1)/tabsize * (a>=tabsize?-1:1) : gv; + + last_a=a; + last_v=gv; +) : ( + last_a >= 0 ? ( + last_a = -1; + sliderchange(-1); + ); +); + +offs=histpos; +gscale=sz/histsize; +gbuf=histbuf; +gscale2=sz*0.5; +gp=0; +loop(4, + gp > 1 ? ( + gfx_r=0.5; gfx_g=0.8; gfx_b=0.5; + gfx_a=0.8; + ) : ( + gfx_r=0.8; gfx_g=0.4; gfx_b=0.5; + gfx_a=0.2; + ); + ga=0; + loop(histsize, + gv=gbuf[offs]; + offs+=1; + offs>=histsize?offs=0; + gx=left + ga*gscale; + gy=gfx_h*0.5 - gv*gscale2; + ga ? gfx_lineto(gx,gy,false) : ( gfx_x=gx; gfx_y=gy; ); + ga+=1; + ); + gp+=1; + gbuf+=histsize; +); + +gfx_a=0.3; +gfx_r=gfx_g=gfx_b=1; + +gfx_x=left; gfx_y=gfx_h*0.5; +gfx_lineto(right,gfx_y,0); +gfx_x=gfx_w*0.5; gfx_y=top; +gfx_lineto(gfx_x, bottom,0); + +gfx_x=left; gfx_y=bottom; +gfx_lineto(right,top,0); + +gfx_a=0.8; +gfx_g=0; +gfx_x=gfx_w*0.5; gfx_y=gfx_h*0.5; +ga=0; +loop(tabsize, + + gfx_lineto(gfx_w*0.5 + (ga+1)*sz/tabsize*0.5, + gfx_h*0.5 - tab[ga]*sz*0.5, 1); + + ga+=1; +); +ga=0; +gfx_x=gfx_w*0.5; gfx_y=gfx_h*0.5; +loop(tabsize, + slider1>0.5 ? gv=-tab[ga] : gv=tab[tabsize+ga]; + + gfx_lineto(gfx_w*0.5 - (ga+1)*sz/tabsize*0.5, + gfx_h*0.5 - gv*sz*0.5, 1); + + ga+=1; +); +gfx_x=gfX_y=0; +gfx_r=gfx_g=gfx_b=gfx_a=1; +gfx_drawnumber(env*dpos,20); diff --git a/FXChains/Default_Track_Chain.RfxChain b/FXChains/Default_Track_Chain.RfxChain new file mode 100644 index 0000000..48c9b1a --- /dev/null +++ b/FXChains/Default_Track_Chain.RfxChain @@ -0,0 +1,28 @@ +BYPASS 1 0 + +PRESETNAME Ultraschall3 +WAK 0 +BYPASS 1 0 + + +WAK 0 diff --git a/FXChains/Untitled.RfxChain b/FXChains/Untitled.RfxChain new file mode 100644 index 0000000..3c9c934 --- /dev/null +++ b/FXChains/Untitled.RfxChain @@ -0,0 +1,12 @@ +BYPASS 1 0 + +WAK 0 diff --git a/FXChains/Wikigeeks.RfxChain b/FXChains/Wikigeeks.RfxChain new file mode 100644 index 0000000..656d362 --- /dev/null +++ b/FXChains/Wikigeeks.RfxChain @@ -0,0 +1,6 @@ +BYPASS 0 0 + +WAK 0 diff --git a/KeyMaps/DK keymap.ReaperKeyMap b/KeyMaps/DK keymap.ReaperKeyMap new file mode 100644 index 0000000..b82c789 --- /dev/null +++ b/KeyMaps/DK keymap.ReaperKeyMap @@ -0,0 +1,21 @@ +KEY 0 34 0 0 +KEY 1 187 0 0 +KEY 0 45 0 0 +KEY 0 91 0 0 +KEY 0 93 0 0 +KEY 0 96 0 0 +KEY 0 123 0 0 +KEY 0 125 0 0 +KEY 0 126 0 0 +KEY 0 60 0 0 +KEY 0 61 0 0 +KEY 0 62 0 0 +KEY 5 186 40223 0 +KEY 5 221 40222 0 +KEY 5 188 40037 0 +KEY 5 190 40038 0 +KEY 1 186 40173 0 +KEY 1 221 40172 0 +KEY 5 191 40151 0 +KEY 5 220 40113 0 +KEY 1 220 40110 0 diff --git a/KeyMaps/German Keymap.ReaperKeyMap b/KeyMaps/German Keymap.ReaperKeyMap new file mode 100644 index 0000000..ae9e9f5 --- /dev/null +++ b/KeyMaps/German Keymap.ReaperKeyMap @@ -0,0 +1,23 @@ +KEY 0 34 0 0 +KEY 5 191 40151 0 +KEY 1 187 40173 0 +KEY 0 45 0 0 +KEY 0 91 0 0 +KEY 0 93 0 0 +KEY 0 96 0 0 +KEY 0 123 0 0 +KEY 0 125 0 0 +KEY 0 126 0 0 +KEY 0 60 0 0 +KEY 0 61 0 0 +KEY 0 62 0 0 +KEY 5 187 40223 0 +KEY 5 186 40222 0 +KEY 5 188 40037 0 +KEY 5 190 40038 0 +KEY 1 186 40172 0 +KEY 1 191 40150 0 +KEY 5 220 40113 0 +KEY 1 220 40110 0 +KEY 1 221 1012 0 +KEY 1 219 1011 0 diff --git a/KeyMaps/backup.ReaperKeyMap b/KeyMaps/backup.ReaperKeyMap new file mode 100644 index 0000000..0ce3257 --- /dev/null +++ b/KeyMaps/backup.ReaperKeyMap @@ -0,0 +1,68 @@ +ACT 2 0 "9859d0c7f8dd418bb56a41f242ea92c1" "ULTRASCHALL: Stille entfernen" 40421 40760 +ACT 2 0 "364a8978a92c4082844e1f8b7fbb74f4" "ULTRASCHALL: Am Anfang aller Objekte einer Spur Kapitelmarken setzen" 40421 _XENAKIOS_CRTMARKERSFROMITEMS1 +ACT 2 0 "9ff1f94ce19f4edb852786e7561ba84a" "ULTRASCHALL: Kapitelmarke setzen" 40157 +SCR 4 0 "1967ee51b8514a7d9d462cd6e95a1ce3" "ULTRASCHALL: ultraschall_import_shownotes.py" "/Library/Application Support/REAPER/Scripts/ultraschall_import_shownotes.py" +ACT 2 0 "e924301cb00345ef91783b00acbd255a" "ULTRASCHALL: Kapitelmarke mit Namen setzen..." 40171 +ACT 0 0 "a851ab5eae6a455b94b4bbdc9dce0efc" "ULTRASCHALL: View 1" _S&M_CYCLACTION_1 _S&M_EXCL_TGL1 +ACT 0 0 "07cd9978fd3a4dbd9efcb2cb8795731e" "ULTRASCHALL: View 2" _S&M_EXCL_TGL2 _S&M_CYCLACTION_1 +ACT 2 0 "9cc26fdd540440f5b86003f97a656a91" "ULTRASCHALL: Spur für Räuspertaste aktivieren" 40866 40867 40403 40888 +ACT 0 0 "08ee0a4c90444668b1c8e802a7561623" "ULTRASCHALL: Alle Spuren für Schnitt vorbereiten" 40088 40491 _S&M_DISARMALLENVS +ACT 2 0 "2f20e444eaf84be5828f8d68ee24a9f5" "ULTRASCHALL: Zoome auf die Auswahl" 40031 +ACT 2 0 "2da24d4eec4e49cd9ebe9332f5e10969" "ULTRASCHALL: Abspielgeschwindigkeit zurücksetzen und Audiodatei schreiben..." 40296 40521 40015 +ACT 2 0 "b519a4a85e3c48108234ed0a420eb43e" "ULTRASCHALL: Räuspertaste für ausgewählte Spuren aktivieren" 41871 40851 +SCR 4 0 "69c31e419c0b40b78575b7894fc6bd8d" "ULTRASCHALL: Editiermarke setzen" "/Library/Application Support/REAPER/Scripts/ultraschall_set_edit.py" +SCR 4 0 "ec330c2322b5424aa825ffd454dedc12" "ULTRASCHALL: Kapitelmarke 2 Minuten zurücksetzen" "/Library/Application Support/REAPER/Scripts/ultraschall_set_edit_past.py" +SCR 4 0 "2d05bf5d95a5459a9a022a12a611ed9a" "ULTRASCHALL: Lösche letzte Marke (links vom Cursor)" "/Library/Application Support/REAPER/Scripts/ultraschall_delete_last_marker.py" +ACT 0 0 "84b94b3ddac64801a3beb94db74151e4" "Custom: test1-actions" _2da24d4eec4e49cd9ebe9332f5e10969 _ULTRASCHALL_SAVE_CHAPTERS +ACT 0 0 "e78004c909c9460bb393c41452f8c848" "Custom: Focus Position" _BR_FOCUS_TRACKS 40150 +KEY 25 83 0 0 +KEY 1 50 0 0 +KEY 1 49 0 0 +KEY 255 220 0 0 +KEY 1 51 0 0 +KEY 1 52 0 0 +KEY 255 252 0 0 +KEY 255 251 0 0 +KEY 255 218 0 0 +KEY 0 91 0 0 +KEY 0 93 0 0 +KEY 8 91 0 0 +KEY 8 93 0 0 +KEY 5 69 0 0 +KEY 5 86 0 0 +KEY 25 32808 0 0 +KEY 25 32806 0 0 +KEY 176 1 26 0 +KEY 176 2 34 0 +KEY 176 3 42 0 +KEY 176 4 50 0 +KEY 255 216 988 0 +KEY 255 248 989 0 +KEY 255 250 998 0 +KEY 255 200 998 0 +KEY 13 83 40022 0 +KEY 1 32805 40104 0 +KEY 1 32807 40105 0 +KEY 5 84 40142 0 +KEY 144 16256 40157 0 +KEY 17 32805 40172 0 +KEY 17 32807 40173 0 +KEY 17 8 40201 0 +KEY 17 32806 40318 0 +KEY 17 32808 40319 0 +KEY 1 1048 40434 0 +KEY 9 49 41357 0 +KEY 9 32807 41821 0 +KEY 1 1034 _BR_ENV_POINT_MOUSE_CURSOR 0 +KEY 1 112 _S&M_TGL_PLAYMEDIA_SELTRACK1 0 +KEY 1 113 _S&M_TGL_PLAYMEDIA_SELTRACK2 0 +KEY 1 114 _S&M_TGL_PLAYMEDIA_SELTRACK3 0 +KEY 0 228 _2f20e444eaf84be5828f8d68ee24a9f5 0 +KEY 25 82 _2da24d4eec4e49cd9ebe9332f5e10969 0 +KEY 1 69 _69c31e419c0b40b78575b7894fc6bd8d 0 +KEY 144 16257 _69c31e419c0b40b78575b7894fc6bd8d 0 +KEY 17 77 _ec330c2322b5424aa825ffd454dedc12 0 +KEY 5 8 _2d05bf5d95a5459a9a022a12a611ed9a 0 +KEY 17 78 _76c8cb5728f5403f96a473bc7eda6da7 0 +KEY 0 39 0 0 +KEY 0 35 _e78004c909c9460bb393c41452f8c848 0 diff --git a/MIDINoteNames/note_name_sample.txt b/MIDINoteNames/note_name_sample.txt new file mode 100644 index 0000000..432b18b --- /dev/null +++ b/MIDINoteNames/note_name_sample.txt @@ -0,0 +1,9 @@ +# MIDI note name map. +# +# Format: +# MIDI_note_number new name +# CC_number new name +# +# examples: +# 60 Middle C +# CC7 Loudness diff --git a/MenuSets/View Setup Toolbar.ReaperMenu b/MenuSets/View Setup Toolbar.ReaperMenu new file mode 100644 index 0000000..8d8f794 --- /dev/null +++ b/MenuSets/View Setup Toolbar.ReaperMenu @@ -0,0 +1,18 @@ +[Floating toolbar 1] +icon_0=toolbar_misc_mixer_control_active.png +icon_1=toolbar_misc_tape.png +icon_2=toolbar_glue.png +icon_5=toolbar_misc_house_home.png +icon_8=toolbar_eighth_quaver_note.png +icon_9=toolbar_misc_mic.png +item_0=40454 Screenset: Load window set #01 +item_1=40455 Screenset: Load window set #02 +item_2=40456 Screenset: Load window set #03 +item_3=-1 +item_4=-1 +item_5=40295 View: Zoom out project +item_6=-1 +item_7=-1 +item_8=_SWSSNAPSHOT_GET1 SWS: Recall snapshot 1 +item_9=_SWSSNAPSHOT_GET2 SWS: Recall snapshot 2 + diff --git a/OSC/Default.ReaperOSC b/OSC/Default.ReaperOSC new file mode 100644 index 0000000..5b18a94 --- /dev/null +++ b/OSC/Default.ReaperOSC @@ -0,0 +1,498 @@ +# OSC pattern config file. + +# Make a copy of this file, rename it, and edit the file to create a +# custom pattern configuration. + +# For basic information about OSC and REAPER, see +# http://www.cockos.com/reaper/sdk/osc/osc.php . + +# ---------------------------------------------------------------- + +# Default settings for how this device displays information. + +# DEVICE_TRACK_COUNT is how many tracks this device can display at once +# (the track bank size). +# DEVICE_SEND_COUNT/DEVICE_RECEIVE_COUNT is how many sends and receives this +# device can display at once. +# DEVICE_FX_COUNT is how many track insert FX this device can display at once. +# DEVICE_FX_PARAM_COUNT is how many FX parameters this device can display at once +# (the FX parameter bank size). +# DEVICE_FX_INST_PARAM_COUNT is how many FX instrument parameters this device can +# display at once (the FX instrument parameter bank size). + +DEVICE_TRACK_COUNT 8 +DEVICE_SEND_COUNT 4 +DEVICE_RECEIVE_COUNT 4 +DEVICE_FX_COUNT 8 +DEVICE_FX_PARAM_COUNT 16 +DEVICE_FX_INST_PARAM_COUNT 16 +DEVICE_MARKER_COUNT 0 +DEVICE_REGION_COUNT 0 + +# ---------------------------------------------------------------- + +# Default values for how this device behaves. The device has a selected track, bank +# of tracks, and FX, which are not necessarily the same as the selected track or FX +# in the REAPER window. + +# REAPER_TRACK_FOLLOWS determines whether the selected track in REAPER changes +# only when the user changes it in the REAPER window, or if it follows the track +# currently selected in the OSC device. +# Allowed values: REAPER, DEVICE + +# DEVICE_TRACK_FOLLOWS determines whether the selected track in the device changes +# only when the device changes it, or if it follows the last touched track in the +# REAPER window. +# Allowed values: DEVICE, LAST_TOUCHED + +# DEVICE_TRACK_BANK_FOLLOWS determines whether the selected track bank in the device +# changes only when the device changes it, or if it follows the REAPER mixer view. +# Allowed values: DEVICE, MIXER + +# DEVICE_FX_FOLLOWS determines whether the selected FX in the device changes only +# when the device changes it, or if it follows the last touched or currently focused +# FX in the REAPER window. +# Allowed values: DEVICE, LAST_TOUCHED, FOCUSED + +# DEVICE_EQ determines whether sending any FX_EQ message will automatically insert +# ReaEQ on the target track if it does not exist, or the message will only affect +# an existing instance of ReaEQ. +# Allowed values: INSERT, EXISTING + +# DEVICE_ROTARY_CENTER defines the argument that represents no change, for rotary +# controls. +# Allowed values: 0, 0.5 + +REAPER_TRACK_FOLLOWS REAPER +DEVICE_TRACK_FOLLOWS DEVICE +DEVICE_TRACK_BANK_FOLLOWS DEVICE +DEVICE_FX_FOLLOWS DEVICE + +DEVICE_EQ INSERT + +DEVICE_ROTARY_CENTER 0 + +# ---------------------------------------------------------------- + +# Each line below is an action description in all caps, followed by a number of OSC +# message patterns. You can add, remove, or change patterns, delete lines, or comment +# out lines by adding '#', but do not change the action descriptions. + +# The patterns following the action are the messages that REAPER will send and receive +# to and from the OSC device. An action can have no patterns (and will be ignored), +# one pattern, or many patterns. + +# The patterns may contain the wildcard character '@'. (This is REAPER-only, not part +# of the OSC specification.) The '@' wildcard is used to specify the action target. + +# ---------------------------------------------------------------- + +# The OSC device sends patterns to trigger actions, and REAPER sends patterns to the +# device as feedback. OSC patterns can include arguments, which are be interpreted +# in various ways, defined by a flag immediately before the pattern. + +# n: normalized floating-point argument. 0 means the minimum value, and 1 means the +# maximum value. This can be used for continous controls like sliders and knobs. + +# Example: TRACK_VOLUME n/track/volume n/track/@/volume +# The device sends /track/3/volume 0.5 to set the volume to 0.5 for track 3, or +# /track/volume 0.5 to set the volume for the track that is currently selected in +# the device. REAPER sends /track/3/volume 0.5 when track 3 volume changes to 0.5. +# If track 3 is currently selected in the device, REAPER will also send +# /track/volume 0.5. The floating-point argument represents as the track fader +# position in the REAPER window. 0 sets the fader all the way down, 1 sets the fader +# all the way up, 0.5 sets the fader exactly in the middle. Therefore, the actual +# volume that is set depends on the REAPER track fader preference settings. + +# f: raw floating-point argument. The argument is interpreted directly, to set or +# report a value. + +# Example: TEMPO f/tempo/raw +# The device sends /tempo/raw 100.351 to change the REAPER tempo to 100.351 bpm. +# REAPER sends /tempo/raw 120 when the tempo changes to 120 bpm. + +# Normalized and raw floating-point arguments also support multiple parameters +# sent from the device. +# Example: FX_PARAM_VALUE n/track/@/fx/@/fxparam/@/value +# The device can send /track/3/fx/1,2,5/fxparam/6,7,7/value 0.25 0.5 0.75 +# to set three FX parameter values at once, to 0.25, 0.5, 0.75 respectively. + +# b: binary argument, either 0 or 1. The device sets or clears the state when +# sending the message. Can be used to emulate switches or momentary controls. + +# Example: TRACK_MUTE b/track/mute b/track/@/mute +# The device sends /track/3/mute 1 to mute track 3, or /track/mute 1 to mute the +# track that is currently selected in the device. /track/3/mute 0 will unmute +# track 3. REAPER sends /track/3/mute 1 when track 3 is muted, and /track/3/mute 0 +# when track 3 is unmuted. If track 3 is currently selected in the device, REAPER +# will also send /track/mute 1 and /track/mute 0. + +# Example: REWIND b/rewind +# The device sends /rewind 1 to begin rewinding, and sends /rewind 0 to stop +# rewinding. REAPER sends /rewind 1 when the rewind button in the REAPER window is +# pressed, and /rewind 0 when the button is released. + +# t: trigger or toggle message. The device triggers the action, or toggles the +# state, when the pattern is sent with no arguments, or with an argument of 1. +# The feedback values REAPER sends are identical to those sent for binary +# arguments. + +# Example: METRONOME t/click +# The device sends /click or /click 1 to toggle the metronome on or off. REAPER +# sends /click 1 when the metronome is enabled, and /click 0 when the metronome +# is disabled. + +# r: rotary. The device triggers the action in the forward direction when sent +# with an argument greater than ROTARY_CENTER, and in the reverse direction when +# sent with an argument less than ROTARY_CENTER. For some messages, the magnitude +# of the argument affects the rate of change. REAPER does not send feedback for +# these messages. + +# Example: SCRUB r/scrub +# The device sends /scrub 1 to scrub forward, and /scrub -1 to scrub in reverse +# (if ROTARY_CENTER is 0). + +# s: string. These messages include a string argument. Many of these messages +# are sent from REAPER to the device for feedback/display, but some can be sent +# from the device to REAPER. + +# Example: TRACK_NAME s/track/name s/track/@/name +# The device sends /track/3/name "vox" to rename track 3 in REAPER, or /track/name +# "vox" to rename the track that is currently selected in the device. REAPER sends +# /track/3/name "vox" to report that name of track 3 is "vox". If track 3 is +# currently selected in the device, REAPER will also send /track/name "vox". + +# Example: DEVICE_FX_FOLLOWS s/fxfollows +# The device sends /fxfollows "FOCUSED" to inform REAPER that the selected FX in the +# device will now follow the FX that is focused in the REAPER window. + +# i: integer. These messages include an integer argument, and are sent from the +# device to REAPER. + +# Example: ACTION i/action t/action/@ +# The device sends /action 40757 or /action/40757 to trigger the REAPER action +# "split items at edit cursor". See the REAPER actions window for a complete list +# of action command ID numbers. + +# Example: DEVICE_TRACK_BANK_SELECT i/bankedit t/bankedit/@ +# The device sends /bankedit 2 or /bankedit/2 to inform REAPER that the active +# track bank is bank 2. If NUM_TRACKS is 8, that means REAPER will now interpret +# a message like /track/1/volume as targeting the volume for track 9, and REAPER +# will only send the device feedback messages for tracks 9-16. + +# ---------------------------------------------------------------- + +# Note: the default configuration includes a lot of feedback messages, which can +# flood the device. Avoid flooding by removing messages (by deleting the patterns, +# or commenting out the lines) that the device does not want, especially the +# TIME, BEAT, SAMPLES, FRAMES, VU, FX_PARAM, LAST_MARKER, LAST_REGION messages. + +# Note: FX parameter feedback will only be sent for the track that is currently +# selected in the device. If messages exist that can target FX on other tracks, +# feedback will be sent whenever the parameter values change. This can be a lot of +# data, so only include those messages if you want the feedback. +# Example: FX_PARAM_VALUE /fxparam/@/value /fx/@/fxparam/@/value +# This action can only target FX on the currently selected track, so feedback will +# only be sent for that track. +# Example: FX_PARAM_VALUE /fxparam/@/value /fx/@/fxparam/@/value /track/@/fx/@/fxparam/@/value +# This action can target FX on any track, so feedback will be sent for all tracks. + +# Note: multiple patterns for a given action can all be listed on the same line, +# or split onto separate lines. + +# ---------------------------------------------------------------- + +# The default REAPER OSC pattern configuration follows. To create a custom +# configuration, copy this file and edit the copy. + + +SCROLL_X- b/scroll/x/- r/scroll/x +SCROLL_X+ b/scroll/x/+ r/scroll/x +SCROLL_Y- b/scroll/y/- r/scroll/y +SCROLL_Y+ b/scroll/y/+ r/scroll/y +ZOOM_X- b/zoom/x/- r/zoom/x +ZOOM_X+ b/zoom/x/+ r/zoom/x +ZOOM_Y- b/zoom/y/- r/zoom/y +ZOOM_Y+ b/zoom/y/+ r/zoom/y + +TIME f/time s/time/str +BEAT s/beat/str +SAMPLES f/samples s/samples/str +FRAMES s/frames/str + +METRONOME t/click +REPLACE t/replace +REPEAT t/repeat + +RECORD t/record +STOP t/stop +PLAY t/play +PAUSE t/pause + +AUTO_REC_ARM t/autorecarm +SOLO_RESET t/soloreset +ANY_SOLO b/anysolo + +REWIND b/rewind +FORWARD b/forward + +REWIND_FORWARD_BYMARKER t/bymarker +REWIND_FORWARD_SETLOOP t/editloop +GOTO_MARKER i/marker t/marker/@ +GOTO_REGION i/region t/region/@ + +SCRUB r/scrub + +PLAY_RATE n/playrate f/playrate/raw r/playrate/rotary s/playrate/str +TEMPO n/tempo f/tempo/raw r/tempo/rotary s/tempo/str + +MARKER_NAME s/marker/@/name +MARKER_NUMBER s/marker/@/number/str +REGION_NAME s/region/@/name +REGION_NUMBER s/region/@/number/str +LAST_MARKER_NAME s/lastmarker/name +LAST_MARKER_NUMBER s/lastmarker/number/str +LAST_REGION_NAME s/lastregion/name +LAST_REGION_NUMBER s/lastregion/number/str + +MASTER_VOLUME n/master/volume s/master/volume/str +MASTER_PAN n/master/pan s/master/pan/str +MASTER_VU n/master/vu +MASTER_VU_L n/master/vu/L +MASTER_VU_R n/master/vu/R + +MASTER_SEND_NAME s/master/send/@/name +MASTER_SEND_VOLUME n/master/send/@/volume s/master/send/@/volume/str +MASTER_SEND_PAN n/master/send/@/pan s/master/send/@/pan/str + +TRACK_NAME s/track/name s/track/@/name +TRACK_NUMBER s/track/number/str s/track/@/number/str + +TRACK_MUTE b/track/mute b/track/@/mute t/track/mute/toggle t/track/@/mute/toggle +TRACK_SOLO b/track/solo b/track/@/solo t/track/solo/toggle t/track/@/solo/toggle +TRACK_REC_ARM b/track/recarm b/track/@/recarm t/track/recarm/toggle t/track/@/recarm/toggle + +TRACK_MONITOR b/track/monitor b/track/@/monitor +TRACK_SELECT b/track/select b/track/@/select + +TRACK_VU n/track/vu n/track/@/vu +TRACK_VU_L n/track/vu/L n/track/@/vu/L +TRACK_VU_R n/track/vu/R n/track/@/vu/R +TRACK_VOLUME n/track/volume n/track/@/volume +TRACK_VOLUME s/track/volume/str s/track/@/volume/str +TRACK_VOLUME f/track/volume/db f/track/@/volume/db +TRACK_PAN n/track/pan n/track/@/pan s/track/pan/str s/track/@/pan/str +TRACK_PAN2 n/track/pan2 n/track/@/pan2 s/track/pan2/str s/track/@/pan2/str +TRACK_PAN_MODE s/track/panmode s/track/@/panmode + +TRACK_SEND_NAME s/track/send/@/name s/track/@/send/@/name +TRACK_SEND_VOLUME n/track/send/@/volume n/track/@/send/@/volume +TRACK_SEND_VOLUME s/track/send/@/volume/str s/track/@/send/@/volume/str +TRACK_SEND_PAN n/track/send/@/pan n/track/@/send/@/pan +TRACK_SEND_PAN s/track/send/@/pan/str s/track/@/send/@/pan/str + +TRACK_RECV_NAME s/track/recv/@/name s/track/@/recv/@/name +TRACK_RECV_VOLUME n/track/recv/@/volume n/track/@/recv/@/volume +TRACK_RECV_VOLUME s/track/recv/@/volume/str s/track/@/recv/@/volume/str +TRACK_RECV_PAN n/track/recv/@/pan n/track/@/recv/@/pan +TRACK_RECV_PAN s/track/recv/@/pan/str s/track/@/recv/@/pan/str + +TRACK_AUTO s/track/auto +TRACK_AUTO_TRIM t/track/autotrim t/track/@/autotrim +TRACK_AUTO_READ t/track/autoread t/track/@/autoread +TRACK_AUTO_LATCH t/track/autolatch t/track/@/autolatch +TRACK_AUTO_TOUCH t/track/autotouch t/track/@/autotouch +TRACK_AUTO_WRITE t/track/autowrite t/track/@/autowrite + +TRACK_VOLUME_TOUCH b/track/volume/touch b/track/@/volume/touch +TRACK_PAN_TOUCH b/track/pan/touch b/track/@/pan/touch + +FX_NAME s/fx/name s/fx/@/name s/track/@/fx/@/name +FX_NUMBER s/fx/number/str s/fx/@/number/str s/track/@/fx/@/number/str +FX_BYPASS b/fx/bypass b/fx/@/bypass b/track/@/fx/@/bypass +FX_OPEN_UI b/fx/openui b/fx/@/openui b/track/@/fx/@/openui + +FX_PRESET s/fx/preset s/fx/@/preset s/track/@/fx/@/preset +FX_PREV_PRESET t/fx/preset- t/fx/@/preset- t/track/@/fx/@/preset- +FX_NEXT_PRESET t/fx/preset+ t/fx/@/preset+ t/track/@/fx/@/preset+ + +FX_PARAM_NAME s/fxparam/@/name s/fx/@/fxparam/@/name +FX_WETDRY n/fx/wetdry n/fx/@/wetdry n/track/@/fx/@/wetdry +FX_WETDRY s/fx/wetdry/str s/fx/@/wetdry/str s/track/@/fx/@/wetdry/str +FX_PARAM_VALUE n/fxparam/@/value n/fx/@/fxparam/@/value n/track/@/fx/@/fxparam/@/value +FX_PARAM_VALUE s/fxparam/@/value/str s/fx/@/fxparam/@/value/str + +FX_EQ_BYPASS b/fxeq/bypass b/track/@/fxeq/bypass +FX_EQ_OPEN_UI b/fxeq/openui b/track/@/fxeq/openui + +FX_EQ_PRESET s/fxeq/preset s/track/@/fxeq/preset +FX_EQ_PREV_PRESET s/fxeq/preset- s/track/@/fxeq/preset- +FX_EQ_NEXT_PRESET s/fxeq/preset+ s/track/@/fxeq/preset+ + +FX_EQ_MASTER_GAIN n/fxeq/gain n/track/@/fxeq/gain +FX_EQ_MASTER_GAIN f/fxeq/gain/db f/track/@/fxeq/gain/db s/fxeq/gain/str +FX_EQ_WETDRY n/fxeq/wetdry n/track/@/fxeq/wetdry +FX_EQ_WETDRY s/fxeq/wetdry/str s/track/@/fxeq/wetdry/str + +FX_EQ_HIPASS_NAME s/fxeq/hipass/str +FX_EQ_HIPASS_FREQ n/fxeq/hipass/freq n/track/@/fxeq/hipass/freq +FX_EQ_HIPASS_FREQ f/fxeq/hipass/freq/hz f/track/@/fxeq/hipass/freq/hz +FX_EQ_HIPASS_FREQ s/fxeq/hipass/freq/str s/track/@/fxeq/hipass/freq/str +FX_EQ_HIPASS_Q n/fxeq/hipass/q n/track/@/fxeq/hipass/q +FX_EQ_HIPASS_Q f/fxeq/hipass/q/oct f/track/@/fxeq/hipass/q/oct +FX_EQ_HIPASS_Q s/fxeq/hipass/q/str s/track/@/fxeq/hipass/q/str + +FX_EQ_LOSHELF_NAME s/fxeq/lopass/str +FX_EQ_LOSHELF_FREQ n/fxeq/loshelf/freq n/track/@/fxeq/loshelf/freq +FX_EQ_LOSHELF_FREQ f/fxeq/loshelf/freq/hz f/track/@/fxeq/loshelf/freq/hz +FX_EQ_LOSHELF_FREQ s/fxeq/loshelf/freq/str s/track/@/fxeq/loshelf/freq/str +FX_EQ_LOSHELF_GAIN n/fxeq/loshelf/gain n/track/@/fxeq/loshelf/gain +FX_EQ_LOSHELF_GAIN f/fxeq/loshelf/gain/db f/track/@/fxeq/loshelf/gain/db +FX_EQ_LOSHELF_GAIN s/fxeq/loshelf/gain/str s/track/@/fxeq/loshelf/gain/str +FX_EQ_LOSHELF_Q n/fxeq/loshelf/q n/track/@/fxeq/loshelf/q +FX_EQ_LOSHELF_Q f/fxeq/loshelf/q/oct f/track/@/fxeq/loshelf/q/oct +FX_EQ_LOSHELF_Q s/fxeq/loshelf/q/str s/track/@/fxeq/loshelf/q/str + +FX_EQ_BAND_NAME s/fxeq/band/str +FX_EQ_BAND_FREQ n/fxeq/band/@/freq n/track/@/fxeq/band/@/freq +FX_EQ_BAND_FREQ f/fxeq/band/@/freq/hz f/track/@/fxeq/band/@/freq/hz +FX_EQ_BAND_FREQ s/fxeq/band/@/freq/str s/track/@/fxeq/band/@/freq/str +FX_EQ_BAND_GAIN n/fxeq/band/@/gain n/track/@/fxeq/band/@/gain +FX_EQ_BAND_GAIN f/fxeq/band/@/gain/db f/track/@/fxeq/band/@/gain/db +FX_EQ_BAND_GAIN s/fxeq/band/@/gain/str s/track/@/fxeq/band/@/gain/str +FX_EQ_BAND_Q n/fxeq/band/@/q n/track/@/fxeq/band/@/q +FX_EQ_BAND_Q f/fxeq/band/@/q/oct f/track/@/fxeq/band/@/q/oct +FX_EQ_BAND_Q s/fxeq/band/@/q/str s/track/@/fxeq/band/@/q/str + +FX_EQ_NOTCH_NAME s/fxeq/notch/str +FX_EQ_NOTCH_FREQ n/fxeq/notch/freq n/track/@/fxeq/notch/freq +FX_EQ_NOTCH_FREQ f/fxeq/notch/freq/hz f/track/@/fxeq/notch/freq/hz +FX_EQ_NOTCH_FREQ s/fxeq/notch/freq/str s/track/@/fxeq/notch/freq/str +FX_EQ_NOTCH_GAIN n/fxeq/notch/gain n/track/@/fxeq/notch/gain +FX_EQ_NOTCH_GAIN f/fxeq/notch/gain/db f/track/@/fxeq/notch/gain/db +FX_EQ_NOTCH_GAIN s/fxeq/notch/gain/str s/track/@/fxeq/notch/gain/str +FX_EQ_NOTCH_Q n/fxeq/notch/q n/track/@/fxeq/notch/q +FX_EQ_NOTCH_Q f/fxeq/notch/q/oct f/track/@/fxeq/notch/q/oct +FX_EQ_NOTCH_Q s/fxeq/notch/q/str s/track/@/fxeq/notch/q/str + +FX_EQ_HISHELF_NAME s/fxeq/hishelf/str +FX_EQ_HISHELF_FREQ n/fxeq/hishelf/freq n/track/@/fxeq/hishelf/freq +FX_EQ_HISHELF_FREQ f/fxeq/hishelf/freq/hz f/track/@/fxeq/hishelf/freq/hz +FX_EQ_HISHELF_FREQ s/fxeq/hishelf/freq/str s/track/@/fxeq/hishelf/freq/str +FX_EQ_HISHELF_GAIN n/fxeq/hishelf/gain n/track/@/fxeq/hishelf/gain +FX_EQ_HISHELF_GAIN f/fxeq/hishelf/gain/sb f/track/@/fxeq/hishelf/gain/db +FX_EQ_HISHELF_GAIN s/fxeq/hishelf/gain/str s/track/@/fxeq/hishelf/gain/str +FX_EQ_HISHELF_Q n/fxeq/hishelf/q n/track/@/fxeq/hishelf/q +FX_EQ_HISHELF_Q f/fxeq/hishelf/q/oct f/track/@/fxeq/hishelf/q/oct +FX_EQ_HISHELF_Q s/fxeq/hishelf/q/str s/track/@/fxeq/hishelf/q/str + +FX_EQ_LOPASS_NAME s/fxeq/loshelf/str +FX_EQ_LOPASS_FREQ n/fxeq/lopass/freq n/track/@/fxeq/lopass/freq +FX_EQ_LOPASS_FREQ f/fxeq/lopass/freq/hz f/track/@/fxeq/lopass/freq/hz +FX_EQ_LOPASS_FREQ s/fxeq/lopass/freq/str s/track/@/fxeq/lopass/freq/str +FX_EQ_LOPASS_Q n/fxeq/lopass/q n/track/@/fxeq/lopass/q +FX_EQ_LOPASS_Q f/fxeq/lopass/q/oct f/track/@/fxeq/lopass/q/oct +FX_EQ_LOPASS_Q s/fxeq/lopass/q/str s/track/@/fxeq/lopass/q/str + +FX_INST_NAME s/fxinst/name s/track/@/fxinst/name +FX_INST_BYPASS b/fxinst/bypass b/track/@/fxinst/bypass +FX_INST_OPEN_UI b/fxinst/openui b/track/@/fxinst/openui + +FX_INST_PRESET s/fxinst/preset s/track/@/fxinst/preset +FX_INST_PREV_PRESET t/fxinst/preset- t/track/@/fxinst/preset- +FX_INST_NEXT_PRESET t/fxinst/preset+ t/track/@/fxinst/preset+ + +FX_INST_PARAM_NAME s/fxinstparam/@/name +FX_INST_PARAM_VALUE n/fxinstparam/@/value n/track/@/fxinstparam/@/value +FX_INST_PARAM_VALUE s/fxinstparam/@/value/str + +LAST_TOUCHED_FX_TRACK_NAME s/fx/last_touched/track/name +LAST_TOUCHED_FX_TRACK_NUMBER s/fx/last_touched/track/number/str +LAST_TOUCHED_FX_NAME s/fx/last_touched/name +LAST_TOUCHED_FX_NUMBER s/fx/last_touched/number/str +LAST_TOUCHED_FX_PARAM_NAME s/fxparam/last_touched/name +LAST_TOUCHED_FX_PARAM_VALUE n/fxparam/last_touched/value s/fxparam/last_touched/value/str + +# these send MIDI to the vkb MIDI input. parameters are raw MIDI. + +# for notes, if two, first wildcard is channel (0-15). MIDI note number is required (as decimal integer only!) +# if parameter value is 0, note-off, otherwise note-on +VKB_MIDI_NOTE i/vkb_midi/@/note/@ f/vkb_midi/@/note/@ i/vkb_midi/note/@ f/vkb_midi/note/@ +# similar, but for 0xA0 (poly aftertouch) +VKB_MIDI_POLYAFTERTOUCH i/vkb_midi/@/polyaftertouch/@ f/vkb_midi/@/polyaftertouch/@ i/vkb_midi/polyaftertouch/@ f/vkb_midi/polyaftertouch/@ +# for CCs, if two, first wildcard is channel (0-15). MIDI CC number is required (as decimal integer only!) +VKB_MIDI_CC i/vkb_midi/@/cc/@ f/vkb_midi/@/cc/@ i/vkb_midi/cc/@ f/vkb_midi/cc/@ +# program change (0xC0) can take channel as wildcard, or value only +VKB_MIDI_PROGRAM i/vkb_midi/@/program f/vkb_midi/@/program i/vkb_midi/program f/vkb_midi/program +# channel pressure (aftertouch) (0xD0) can take channel as wildcard, or value only +VKB_MIDI_CHANNELPRESSURE i/vkb_midi/@/channelpressure f/vkb_midi/@/channelpressure i/vkb_midi/channelpressure f/vkb_midi/channelpressure +# pitch can take channel as wildcard, or value only +VKB_MIDI_PITCH i/vkb_midi/@/pitch f/vkb_midi/@/pitch i/vkb_midi/pitch f/vkb_midi/pitch + + +ACTION i/action s/action/str t/action/@ f/action/@/cc +ACTION_SOFT f/action/@/cc/soft +ACTION_RELATIVE f/action/@/cc/relative +MIDIACTION i/midiaction t/midiaction/@ +MIDILISTACTION i/midilistaction t/midilistaction/@ + +# ---------------------------------------------------------------- + +# The following messages are sent from the device, to inform REAPER +# of a change in the device state, behavior, or display capabilities. + +DEVICE_TRACK_COUNT i/device/track/count t/device/track/count/@ +DEVICE_SEND_COUNT i/device/send/count t/device/send/count/@ +DEVICE_RECEIVE_COUNT i/device/receive/count t/device/receive/count/@ +DEVICE_FX_COUNT i/device/fx/count t/device/fx/count/@ +DEVICE_FX_PARAM_COUNT i/device/fxparam/count t/device/fxparam/count/@ +DEVICE_FX_INST_PARAM_COUNT i/device/fxinstparam/count t/device/fxinstparam/count/@ +DEVICE_MARKER_COUNT i/device/marker/count t/device/marker/count/@ +DEVICE_REGION_COUNT i/device/region/count t/device/region/count/@ + +REAPER_TRACK_FOLLOWS s/reaper/track/follows +REAPER_TRACK_FOLLOWS_REAPER t/reaper/track/follows/reaper +REAPER_TRACK_FOLLOWS_DEVICE t/reaper/track/follows/device + +DEVICE_TRACK_FOLLOWS s/device/track/follows +DEVICE_TRACK_FOLLOWS_DEVICE t/device/track/follows/device +DEVICE_TRACK_FOLLOWS_LAST_TOUCHED t/device/track/follows/last_touched + +DEVICE_TRACK_BANK_FOLLOWS s/device/track/bank/follows +DEVICE_TRACK_BANK_FOLLOWS_DEVICE t/device/track/bank/follows/device +DEVICE_TRACK_BANK_FOLLOWS_MIXER t/device/track/bank/follows/mixer + +DEVICE_FX_FOLLOWS s/device/fx/follows +DEVICE_FX_FOLLOWS_DEVICE t/device/fx/follows/device +DEVICE_FX_FOLLOWS_LAST_TOUCHED t/device/fx/follows/last_touched +DEVICE_FX_FOLLOWS_FOCUSED t/device/fx/follows/focused + +DEVICE_TRACK_SELECT i/device/track/select t/device/track/select/@ +DEVICE_PREV_TRACK t/device/track/- +DEVICE_NEXT_TRACK t/device/track/+ + +DEVICE_TRACK_BANK_SELECT i/device/track/bank/select t/device/track/bank/select/@ +DEVICE_PREV_TRACK_BANK t/device/track/bank/- +DEVICE_NEXT_TRACK_BANK t/device/track/bank/+ + +DEVICE_FX_SELECT i/device/fx/select t/device/fx/select/@ +DEVICE_PREV_FX t/device/fx/- +DEVICE_NEXT_FX t/device/fx/+ + +DEVICE_FX_PARAM_BANK_SELECT i/device/fxparam/bank/select t/device/fxparam/bank/select/@ +DEVICE_FX_PARAM_BANK_SELECT s/device/fxparam/bank/str +DEVICE_PREV_FX_PARAM_BANK t/device/fxparam/bank/- +DEVICE_NEXT_FX_PARAM_BANK t/device/fxparam/bank/+ + +DEVICE_FX_INST_PARAM_BANK_SELECT i/device/fxinstparam/bank/select t/device/fxinstparam/bank/select/@ +DEVICE_FX_INST_PARAM_BANK_SELECT s/device/fxinstparam/bank/str +DEVICE_PREV_FX_INST_PARAM_BANK t/device/fxinstparam/bank/- +DEVICE_NEXT_FX_INST_PARAM_BANK t/device/fxinstparam/bank/+ + +DEVICE_MARKER_BANK_SELECT i/device/marker/bank/select t/device/marker/bank/select/@ +DEVICE_PREV_MARKER_BANK t/device/marker/bank/- +DEVICE_NEXT_MARKER_BANK t/device/marker/bank/+ + +DEVICE_REGION_BANK_SELECT i/device/region/bank/select t/device/region/bank/select/@ +DEVICE_PREV_REGION_BANK t/device/region/bank/- +DEVICE_NEXT_REGION_BANK t/device/region/bank/+ diff --git a/OSC/LogicPad.ReaperOSC b/OSC/LogicPad.ReaperOSC new file mode 100644 index 0000000..e494ee6 --- /dev/null +++ b/OSC/LogicPad.ReaperOSC @@ -0,0 +1,247 @@ +# OSC pattern config file for TouchOSC LogicPad layout. + +# See extensive comments in Default.ReaperOSC. + +DEVICE_TRACK_COUNT 8 +DEVICE_SEND_COUNT 5 +DEVICE_RECEIVE_COUNT +DEVICE_FX_COUNT 12 +DEVICE_FX_PARAM_COUNT 16 +DEVICE_FX_INST_PARAM_COUNT 24 +DEVICE_MARKER_COUNT +DEVICE_REGION_COUNT + +REAPER_TRACK_FOLLOWS REAPER +DEVICE_TRACK_FOLLOWS DEVICE +DEVICE_TRACK_BANK_FOLLOWS DEVICE +DEVICE_FX_FOLLOWS DEVICE + +DEVICE_ROTARY_CENTER 0.5 + +# ---------------------------------------------------------------- + +SCROLL_X- +SCROLL_X+ +SCROLL_Y- +SCROLL_Y+ +ZOOM_X- +ZOOM_X+ +ZOOM_Y- +ZOOM_Y+ + +TIME s/1/time s/2/time s/3/time s/4/time s/5/time +BEAT s/1/bar s/2/bar s/3/bar s/4/bar s/5/bar +SAMPLES +FRAMES + +METRONOME t/1/click t/2/click t/3/click t/4/click t/5/click +REPLACE t/1/replace t/2/replace t/3/replace t/4/replace t/5/replace +REPEAT t/1/cycle t/2/cycle t/3/cycle t/4/cycle t/5/cycle + +RECORD t/1/record t/2/record t/3/record t/4/record t/5/record +STOP t/1/stop t/2/stop t/3/stop t/4/stop t/5/stop +PLAY t/1/play t/2/play t/3/play t/4/play t/5/play +PAUSE + +AUTO_REC_ARM t/1/sel-rec t/2/sel-rec +SOLO_RESET t/1/soloreset t/2/soloreset +ANY_SOLO t/1/ledanysolo t/2/ledanysolo + +REWIND b/rewind +FORWARD b/forward + +REWIND_FORWARD_BYMARKER t/1/bymarker t/2/bymarker +REWIND_FORWARD_SETLOOP t/1/bycycle t/2/bycycle +GOTO_MARKER +GOTO_REGION + +SCRUB + +PLAY_RATE +TEMPO + +MARKER_NAME +MARKER_NUMBER +REGION_NAME +REGION_NUMBER +LAST_MARKER_NAME +LAST_MARKER_NUMBER +LAST_REGION_NAME +LAST_REGION_NUMBER + +MASTER_VOLUME n/1/mastervolume s/1/masterlevel +MASTER_PAN +MASTER_VU +MASTER_VU_L +MASTER_VU_R + +MASTER_SEND_NAME s/1/auxname@ s/2/auxname@ +MASTER_SEND_VOLUME n/1/auxvolume@ n/2/auxvolume@ s/1/auxlevel@ s/2/auxlevel@ +MASTER_SEND_PAN + +TRACK_NAME s/1/trackname@ s/2/trackname@ s/3/trackname s/4/trackname s/5/trackname +TRACK_NUMBER s/1/track#@ s/2/track#@ s/3/track# s/4/track# s/5/track# + +TRACK_MUTE b/1/mute/1/@ b/2/mute/1/@ t/3/mute +TRACK_SOLO b/1/solo/1/@ b/2/solo/1/@ t/3/solo +TRACK_REC_ARM t/1/recenable/1/@ t/2/recenable/1/@ t/3/recenable +TRACK_MONITOR t/3/input +TRACK_SELECT b/1/select/1/@ b/2/select/1/@ + +TRACK_VU +TRACK_VU_L +TRACK_VU_R +TRACK_VOLUME n/1/volume@ n/3/volume s/1/level@ s/3/trkvolval +TRACK_PAN n/2/pan@ n/3/pan s/2/panval@ s/3/trkpanval +TRACK_PAN2 +TRACK_PAN_MODE + +TRACK_SEND_NAME s/2/sendname@@ s/3/sendname@ +TRACK_SEND_VOLUME n/2/send@@ n/3/sendlevel@ s/2/sendval@@ s/3/sendval@ +TRACK_SEND_PAN + +TRACK_RECV_NAME +TRACK_RECV_VOLUME +TRACK_RECV_VOLUME +TRACK_RECV_PAN +TRACK_RECV_PAN + +TRACK_AUTO +TRACK_AUTO_TRIM t/3/atmoff +TRACK_AUTO_READ t/3/atmread +TRACK_AUTO_LATCH t/3/atmlatch +TRACK_AUTO_TOUCH t/3/atmtouch +TRACK_AUTO_WRITE t/3/atmwrite + +TRACK_VOLUME_TOUCH +TRACK_PAN_TOUCH + +FX_NAME s/3/pluginname s/3/insertname@ +FX_NUMBER +FX_BYPASS b/3/insertbypass/@/1 +FX_OPEN_UI + +FX_PRESET +FX_PREV_PRESET +FX_NEXT_PRESET + +FX_PARAM_NAME s/3/parname@ +FX_WETDRY +FX_PARAM_VALUE n/3/par@ s/3/value@ + +FX_EQ_BYPASS +FX_EQ_OPEN_UI + +FX_EQ_PRESET +FX_EQ_PREV_PRESET +FX_EQ_NEXT_PRESET + +FX_EQ_MASTER_GAIN n/4/eqmstgain +FX_EQ_WETDRY + +FX_EQ_HIPASS_NAME s/4/label165 +FX_EQ_HIPASS_FREQ n/4/hpffrq s/4/hpffrqval +FX_EQ_HIPASS_Q n/4/hpfq s/4/hpfqval + +FX_EQ_LOSHELF_NAME s/4/label159 +FX_EQ_LOSHELF_FREQ n/4/loslvfrq s/4/loslvfrqval +FX_EQ_LOSHELF_GAIN n/4/gain/1 s/4/loslvgainval +FX_EQ_LOSHELF_Q n/4/loslvq s/4/loslvqval + +FX_EQ_BAND_NAME s/4/label160 s/4/label161 s/4/label162 +FX_EQ_BAND_FREQ n/4/lomidfrq s/4/lomidfrqval +FX_EQ_BAND_GAIN n/4/gain/3 s/5/lomidgainval +FX_EQ_BAND_Q n/4/lomidq s/5/lomidqval + +FX_EQ_NOTCH_NAME s/4/label163 +FX_EQ_NOTCH_FREQ n/4/hifrq s/4/hifrqval +FX_EQ_NOTCH_GAIN n/4/gain/5 s/4/higainval +FX_EQ_NOTCH_Q n/4/hiq s/4/hiqval + +FX_EQ_HISHELF_NAME s/4/label164 +FX_EQ_HISHELF_FREQ n/4/hislvfrq s/4/hislvfrqval +FX_EQ_HISHELF_GAIN n/4/gain/6 s/4/hislvgainval +FX_EQ_HISHELF_Q n/4/hislvq s/4/hislvqval + +FX_EQ_LOPASS_NAME s/4/label166 +FX_EQ_LOPASS_FREQ n/4/lpffrq s/4/lpffrqval +FX_EQ_LOPASS_Q n/4/lpfq s/4/lpfqval + +FX_INST_NAME s/5/pluginname +FX_INST_BYPASS +FX_INST_OPEN_UI + +FX_INST_PRESET +FX_INST_PREV_PRESET +FX_INST_NEXT_PRESET + +FX_INST_PARAM_NAME s/5/parname@ +FX_INST_PARAM_VALUE n/5/par@ s/5/parval@ + +LAST_TOUCHED_FX_TRACK_NAME +LAST_TOUCHED_FX_TRACK_NUMBER +LAST_TOUCHED_FX_NAME +LAST_TOUCHED_FX_NUMBER +LAST_TOUCHED_FX_PARAM_NAME +LAST_TOUCHED_FX_PARAM_VALUE + +ACTION +MIDIACTION +MIDILISTACTION + +# ---------------------------------------------------------------- + +DEVICE_TRACK_COUNT +DEVICE_SEND_COUNT +DEVICE_RECEIVE_COUNT +DEVICE_FX_COUNT +DEVICE_FX_PARAM_COUNT +DEVICE_FX_INST_PARAM_COUNT +DEVICE_MARKER_COUNT +DEVICE_REGION_COUNT + +REAPER_TRACK_FOLLOWS +REAPER_TRACK_FOLLOWS_REAPER +REAPER_TRACK_FOLLOWS_DEVICE + +DEVICE_TRACK_FOLLOWS +DEVICE_TRACK_FOLLOWS_DEVICE +DEVICE_TRACK_FOLLOWS_LAST_TOUCHED + +DEVICE_TRACK_BANK_FOLLOWS +DEVICE_TRACK_BANK_FOLLOWS_DEVICE +DEVICE_TRACK_BANK_FOLLOWS_MIXER + +DEVICE_FX_FOLLOWS +DEVICE_FX_FOLLOWS_DEVICE +DEVICE_FX_FOLLOWS_LAST_TOUCHED +DEVICE_FX_FOLLOWS_FOCUSED + +DEVICE_TRACK_SELECT +DEVICE_PREV_TRACK t/3/track- t/4/track- t/5/track- +DEVICE_NEXT_TRACK t/3/track+ t/4/track+ t/5/track+ + +DEVICE_TRACK_BANK_SELECT +DEVICE_PREV_TRACK_BANK t/1/bank- t/2/bank- +DEVICE_NEXT_TRACK_BANK t/1/bank+ t/2/bank+ + +DEVICE_FX_SELECT b/3/mInsertEdit/@/1 +DEVICE_PREV_FX +DEVICE_NEXT_FX + +DEVICE_FX_PARAM_BANK_SELECT s/3/page# +DEVICE_PREV_FX_PARAM_BANK t/3/page- +DEVICE_NEXT_FX_PARAM_BANK t/3/page+ + +DEVICE_FX_INST_PARAM_BANK_SELECT s/5/page# +DEVICE_PREV_FX_INST_PARAM_BANK t/5/page- +DEVICE_NEXT_FX_INST_PARAM_BANK t/5/page+ + +DEVICE_MARKER_BANK_SELECT +DEVICE_PREV_MARKER_BANK +DEVICE_NEXT_MARKER_BANK + +DEVICE_REGION_BANK_SELECT +DEVICE_PREV_REGION_BANK +DEVICE_NEXT_REGION_BANK + diff --git a/OSC/LogicTouch.ReaperOSC b/OSC/LogicTouch.ReaperOSC new file mode 100644 index 0000000..3fd8de0 --- /dev/null +++ b/OSC/LogicTouch.ReaperOSC @@ -0,0 +1,242 @@ +# OSC pattern config file for TouchOSC LogicTouch layout. + +# See extensive comments in Default.ReaperOSC. + +DEVICE_TRACK_COUNT 1 +DEVICE_SEND_COUNT 4 +DEVICE_RECEIVE_COUNT +DEVICE_FX_COUNT 8 +DEVICE_FX_PARAM_COUNT 4 +DEVICE_FX_INST_PARAM_COUNT +DEVICE_MARKER_COUNT +DEVICE_REGION_COUNT + +REAPER_TRACK_FOLLOWS DEVICE +DEVICE_TRACK_FOLLOWS DEVICE +DEVICE_TRACK_BANK_FOLLOWS DEVICE +DEVICE_FX_FOLLOWS DEVICE + +DEVICE_ROTARY_CENTER 0.5 + +# ---------------------------------------------------------------- + +SCROLL_X- +SCROLL_X+ +SCROLL_Y- +SCROLL_Y+ +ZOOM_X- +ZOOM_X+ +ZOOM_Y- +ZOOM_Y+ + +TIME +BEAT +SAMPLES +FRAMES + +METRONOME t/1/click +REPLACE t/1/replace +REPEAT t/1/cycle + +RECORD t/1/record +STOP t/1/stop +PLAY t/1/play +PAUSE + +AUTO_REC_ARM +SOLO_RESET +ANY_SOLO + +REWIND b/1/rewind +FORWARD b/1/forward + +REWIND_FORWARD_BYMARKER t/1/bymarker +REWIND_FORWARD_SETLOOP t/1/bycycle +GOTO_MARKER +GOTO_REGION + +SCRUB + +PLAY_RATE +TEMPO + +MARKER_NAME +MARKER_NUMBER +REGION_NAME +REGION_NUMBER +LAST_MARKER_NAME +LAST_MARKER_NUMBER +LAST_REGION_NAME +LAST_REGION_NUMBER + +MASTER_VOLUME +MASTER_PAN +MASTER_VU +MASTER_VU_L +MASTER_VU_R + +MASTER_SEND_NAME +MASTER_SEND_VOLUME +MASTER_SEND_PAN + +TRACK_NAME s/1/trackname +TRACK_NUMBER + +TRACK_MUTE t/1/mute +TRACK_SOLO t/1/solo +TRACK_REC_ARM t/1/recenable +TRACK_MONITOR t/1/input +TRACK_SELECT + +TRACK_VU +TRACK_VU_L +TRACK_VU_R +TRACK_VOLUME n/1/volume s/1/trkvolval +TRACK_PAN n/1/pan s/1/trkpanval +TRACK_PAN2 +TRACK_PAN_MODE + +TRACK_SEND_NAME s/2/sendname@ +TRACK_SEND_VOLUME n/2/sendlevel/@ +TRACK_SEND_VOLUME +TRACK_SEND_PAN +TRACK_SEND_PAN + +TRACK_RECV_NAME +TRACK_RECV_VOLUME +TRACK_RECV_VOLUME +TRACK_RECV_PAN +TRACK_RECV_PAN + +TRACK_AUTO +TRACK_AUTO_TRIM t/1/atmoff +TRACK_AUTO_READ t/1/atmread +TRACK_AUTO_LATCH t/1/atmlatch +TRACK_AUTO_TOUCH t/1/atmtouch +TRACK_AUTO_WRITE + +TRACK_VOLUME_TOUCH +TRACK_PAN_TOUCH + +FX_NAME s/2/plugname s/2/insertname@ +FX_NUMBER s/2/slot# +FX_BYPASS b/2/insertbypass/1/@ +FX_OPEN_UI + +FX_PRESET +FX_PREV_PRESET +FX_NEXT_PRESET + +FX_PARAM_NAME s/2/parname@ +FX_WETDRY +FX_PARAM_VALUE n/2/fxpar@ s/2/parval@ + +FX_EQ_BYPASS +FX_EQ_OPEN_UI + +FX_EQ_PRESET +FX_EQ_PREV_PRESET +FX_EQ_NEXT_PRESET + +FX_EQ_MASTER_GAIN +FX_EQ_WETDRY + +FX_EQ_HIPASS_FREQ +FX_EQ_HIPASS_GAIN +FX_EQ_HIPASS_Q +FX_EQ_LOSHELF_FREQ +FX_EQ_LOSHELF_GAIN +FX_EQ_LOSHELF_Q +FX_EQ_BAND_FREQ +FX_EQ_BAND_GAIN +FX_EQ_BAND_Q +FX_EQ_NOTCH_FREQ +FX_EQ_NOTCH_GAIN +FX_EQ_NOTCH_Q +FX_EQ_HISHELF_FREQ +FX_EQ_HISHELF_GAIN +FX_EQ_HISHELF_Q +FX_EQ_LOPASS_FREQ +FX_EQ_LOPASS_GAIN +FX_EQ_LOPASS_Q + +FX_INST_NAME +FX_INST_BYPASS +FX_INST_OPEN_UI + +FX_INST_PRESET +FX_INST_PREV_PRESET +FX_INST_NEXT_PRESET + +FX_INST_PARAM_NAME +FX_INST_PARAM_VALUE +FX_INST_PARAM_VALUE + +LAST_TOUCHED_FX_TRACK_NAME +LAST_TOUCHED_FX_TRACK_NUMBER +LAST_TOUCHED_FX_NAME +LAST_TOUCHED_FX_NUMBER +LAST_TOUCHED_FX_PARAM_NAME +LAST_TOUCHED_FX_PARAM_VALUE + +ACTION +MIDIACTION +MIDILISTACTION + +# ---------------------------------------------------------------- + +DEVICE_TRACK_COUNT +DEVICE_SEND_COUNT +DEVICE_RECEIVE_COUNT +DEVICE_FX_COUNT +DEVICE_FX_PARAM_COUNT +DEVICE_FX_INST_PARAM_COUNT +DEVICE_MARKER_COUNT +DEVICE_REGION_COUNT + +REAPER_TRACK_FOLLOWS +REAPER_TRACK_FOLLOWS_REAPER +REAPER_TRACK_FOLLOWS_DEVICE + +DEVICE_TRACK_FOLLOWS +DEVICE_TRACK_FOLLOWS_DEVICE +DEVICE_TRACK_FOLLOWS_LAST_TOUCHED + +DEVICE_TRACK_BANK_FOLLOWS +DEVICE_TRACK_BANK_FOLLOWS_DEVICE +DEVICE_TRACK_BANK_FOLLOWS_MIXER + +DEVICE_FX_FOLLOWS +DEVICE_FX_FOLLOWS_DEVICE +DEVICE_FX_FOLLOWS_LAST_TOUCHED +DEVICE_FX_FOLLOWS_FOCUSED + +DEVICE_TRACK_SELECT +DEVICE_PREV_TRACK t/1/track- +DEVICE_NEXT_TRACK t/1/track+ + +DEVICE_TRACK_BANK_SELECT +DEVICE_PREV_TRACK_BANK +DEVICE_NEXT_TRACK_BANK + +DEVICE_FX_SELECT +DEVICE_PREV_FX t/2/slot- +DEVICE_NEXT_FX t/2/slot+ + +DEVICE_FX_PARAM_BANK_SELECT s/2/page# +DEVICE_PREV_FX_PARAM_BANK t/2/page- +DEVICE_NEXT_FX_PARAM_BANK t/2/page+ + +DEVICE_FX_INST_PARAM_BANK_SELECT +DEVICE_FX_INST_PARAM_BANK_SELECT +DEVICE_PREV_FX_INST_PARAM_BANK +DEVICE_NEXT_FX_INST_PARAM_BANK + +DEVICE_MARKER_BANK_SELECT +DEVICE_PREV_MARKER_BANK +DEVICE_NEXT_MARKER_BANK + +DEVICE_REGION_BANK_SELECT +DEVICE_PREV_REGION_BANK +DEVICE_NEXT_REGION_BANK + diff --git a/PreviousConfigFiles/reaper-fxtags.ini b/PreviousConfigFiles/reaper-fxtags.ini new file mode 100644 index 0000000..8de700f --- /dev/null +++ b/PreviousConfigFiles/reaper-fxtags.ini @@ -0,0 +1,46 @@ +[category] +reacast.vst.dylib=External +reacomp.vst.dylib=Dynamics +reacontrolMIDI.vst.dylib=MIDI +readelay.vst.dylib=Delay +reaeq.vst.dylib=EQ +reafir.vst.dylib=Tools +reagate.vst.dylib=Gate +reainsert.vst.dylib=External +reaninjam.vst.dylib=External +reapitch.vst.dylib=Pitch Correction +reasamplomatic.vst.dylib=Sampler +reastream.vst.dylib=External +reasurround.vst.dylib=Surround +reasyndr.vst.dylib=Synth +reasynth.vst.dylib=Synth +reatune.vst.dylib=Tuner +reaverb.vst.dylib=Reverb +reaverbate.vst.dylib=Reverb +reavocode.vst.dylib=Tools +reavoice.vst.dylib=Tools +reaxcomp.vst.dylib=Dynamics + +[developer] +reacast.vst.dylib=Cockos +reacomp.vst.dylib=Cockos +reacontrolMIDI.vst.dylib=Cockos +readelay.vst.dylib=Cockos +reaeq.vst.dylib=Cockos +reafir.vst.dylib=Cockos +reagate.vst.dylib=Cockos +reainsert.vst.dylib=Cockos +reaninjam.vst.dylib=Cockos +reapitch.vst.dylib=Cockos +reasamplomatic.vst.dylib=Cockos +reastream.vst.dylib=Cockos +reasurround.vst.dylib=Cockos +reasyndr.vst.dylib=Cockos +reasynth.vst.dylib=Cockos +reatune.vst.dylib=Cockos +reaverb.vst.dylib=Cockos +reaverbate.vst.dylib=Cockos +reavocode.vst.dylib=Cockos +reavoice.vst.dylib=Cockos +reaxcomp.vst.dylib=Cockos + diff --git a/PreviousConfigFiles/reaper-kb.ini b/PreviousConfigFiles/reaper-kb.ini new file mode 100644 index 0000000..533e121 --- /dev/null +++ b/PreviousConfigFiles/reaper-kb.ini @@ -0,0 +1,3 @@ +SCR 4 0 RS1ee9bb229dabffe151848d7efa3c10f748e1a1cf "Custom: lyrics.lua" Cockos/lyrics.lua +SCR 4 32060 RS7d3c_1ee9bb229dabffe151848d7efa3c10f748e1a1cf "Custom: lyrics.lua" Cockos/lyrics.lua +KEY 5 71 2010 0 diff --git a/PreviousConfigFiles/reaper-mouse.ini b/PreviousConfigFiles/reaper-mouse.ini new file mode 100644 index 0000000..e64b45a --- /dev/null +++ b/PreviousConfigFiles/reaper-mouse.ini @@ -0,0 +1,28 @@ +[hasimported] +MM_CTX_ARRANGE_MMOUSE=1 +MM_CTX_ARRANGE_MMOUSE_CLK=1 +MM_CTX_ARRANGE_RMOUSE=1 +MM_CTX_CURSORHANDLE=1 +MM_CTX_ENVLANE=1 +MM_CTX_ENVPT=1 +MM_CTX_ENVSEG=1 +MM_CTX_ENVSEG_DBLCLK=1 +MM_CTX_ITEM=1 +MM_CTX_ITEM_CLK=1 +MM_CTX_ITEM_DBLCLK=1 +MM_CTX_ITEMEDGE=1 +MM_CTX_MIDI_CCLANE=1 +MM_CTX_MIDI_NOTE=1 +MM_CTX_MIDI_NOTE_CLK=1 +MM_CTX_MIDI_NOTE_DBLCLK=1 +MM_CTX_MIDI_PIANOROLL_CLK=1 +MM_CTX_MIDI_PIANOROLL_DBLCLK=1 +MM_CTX_MIDI_RMOUSE=1 +MM_CTX_MIDI_RULER=1 +MM_CTX_RULER=1 +MM_CTX_TRACK=1 + +[MM_CTX_MIDI_NOTE_CLK] +mm_0=1 +mm_4=2 + diff --git a/PreviousConfigFiles/reaper-vstplugins64.ini b/PreviousConfigFiles/reaper-vstplugins64.ini new file mode 100644 index 0000000..5a1f90a --- /dev/null +++ b/PreviousConfigFiles/reaper-vstplugins64.ini @@ -0,0 +1,23 @@ +[vstcache] +reacast.vst.dylib=806489ACB073D301,1919246691,ReaCast (Cockos) +reacomp.vst.dylib=806489ACB073D301,1919247213,ReaComp (Cockos) +reacontrolMIDI.vst.dylib=806489ACB073D301,1919118692,ReaControlMIDI (Cockos) +readelay.vst.dylib=806489ACB073D301,1919247468,ReaDelay (Cockos) +reaeq.vst.dylib=806489ACB073D301,1919247729,ReaEQ (Cockos) +reafir.vst.dylib=806489ACB073D301,1919247986,ReaFir (FFT EQ+Dynamics Processor) (Cockos) +reagate.vst.dylib=806489ACB073D301,1919248244,ReaGate (Cockos) +reainsert.vst.dylib=806489ACB073D301,1919250281,ReaInsert (Cockos) +reaninjam.vst.dylib=806489ACB073D301,1919250026,ReaNINJAM (Cockos) +reapitch.vst.dylib=806489ACB073D301,1919250531,ReaPitch (Cockos) +reasamplomatic.vst.dylib=806489ACB073D301,1920167789,ReaSamplOmatic5000 (Cockos)!!!VSTi +reastream.vst.dylib=806489ACB073D301,1920169074,ReaStream (Cockos) (8ch) +reasurround.vst.dylib=806489ACB073D301,1920168548,ReaSurround (Cockos) +reasyndr.vst.dylib=806489ACB073D301,1919251300,ReaSynDr (Cockos) (4 out)!!!VSTi +reasynth.vst.dylib=806489ACB073D301,1919251321,ReaSynth (Cockos)!!!VSTi +reatune.vst.dylib=806489ACB073D301,1919251566,ReaTune (Cockos) +reaverb.vst.dylib=806489ACB073D301,1919252066,ReaVerb (Cockos) +reaverbate.vst.dylib=806489ACB073D301,1920361016,ReaVerbate (Cockos) +reavocode.vst.dylib=806489ACB073D301,1919252068,ReaVocode (Cockos) +reavoice.vst.dylib=806489ACB073D301,1919252067,ReaVoice (Cockos) +reaxcomp.vst.dylib=806489ACB073D301,1919252579,ReaXcomp (Cockos) + diff --git a/PreviousConfigFiles/reaper.ini b/PreviousConfigFiles/reaper.ini new file mode 100644 index 0000000..8bb545d --- /dev/null +++ b/PreviousConfigFiles/reaper.ini @@ -0,0 +1,54 @@ +[actions] +wnd_height=447 +wnd_left=130 +wnd_top=323 +wnd_vis=0 +wnd_width=627 + +[nag] +nag=F4317A5A4018DB6D637B9C6B6B8F9218782F9B3AD4A72DB6FC + +[REAPER] +actioncolwid_0=121 +actioncolwid_1=423 +actioncolwid_2=50 +configimport_rem=0 +coreaudiobs=512 +coreaudiobsuse=0 +coreaudioignorereset=0 +coreaudioignprojsr=0 +coreaudioindevnew= +coreaudiooutdevnew= +coreaudiosrate=48000 +coreaudiosrateuse=0 +hasrecentsec=1 +lastproject= +midieditor=64 +mixwnd_dock=1 +mixwnd_h=340 +mixwnd_max=0 +mixwnd_vis=1 +mixwnd_w=0 +mixwnd_x=0 +mixwnd_y=0 +prefs_x=130 +prefs_y=296 +prefspage=473 +projecttab1= +projecttabs=1 +transport_h=122 +transport_w=1000 +transport_x=100 +transport_y=642 +wnd_h=809 +wnd_state=0 +wnd_w=1174 +wnd_x=80 +wnd_y=39 + +[reaper_video] +fx_mode=default (0=monitor fx are cached, 1=monitor fx are realtime, 2=monitor fx and master track fx are realtime) + +[verchk] +lastt=1517955443 + diff --git a/ProjectTemplates/StudioLink.RPP b/ProjectTemplates/StudioLink.RPP new file mode 100644 index 0000000..887bde7 --- /dev/null +++ b/ProjectTemplates/StudioLink.RPP @@ -0,0 +1,224 @@ + + + RENDER_FILE "" + RENDER_PATTERN "" + RENDER_FMT 0 2 0 + RENDER_1X 0 + RENDER_RANGE 1 0 0 18 0 + RENDER_RESAMPLE 7 0 1 + RENDER_ADDTOPROJ 0 + RENDER_STEMS 0 + RENDER_DITHER 0 + TIMELOCKMODE 0 + TEMPOENVLOCKMODE 0 + ITEMMIX 0 + DEFPITCHMODE 393216 + TAKELANE 1 + SAMPLERATE 48000 1 0 + + LOCK 1 + + GLOBAL_AUTO -1 + TEMPO 120 4 4 + PLAYRATE 1 1 0.75 1.5 + SELECTION 0 0 + SELECTION2 0 0 + MASTERAUTOMODE 0 + MASTERTRACKHEIGHT 0 + MASTERPEAKCOL 16576 + MASTERMUTESOLO 0 + MASTERTRACKVIEW 0 0.6667 0.5 0.5 0 0 0 + MASTERHWOUT + MASTER_NCH 2 2 + MASTER_VOLUME 1 0 -1 -1 1 + MASTER_FX 1 + MASTER_SEL 0 + + FLOATPOS 0 0 0 0 + FXID {D2D7C93E-52D9-C44D-BC6D-CDF362073AC0} + WAK 0 + > + + + + + FLOATPOS 0 0 0 0 + FXID {F2F38A02-FEDE-C440-A8F6-00B2CDFEE6BC} + WAK 0 + > + > + + PRESETNAME Ultraschall3 + FLOATPOS 0 0 0 0 + FXID {7467B940-741E-DD49-B2D4-16E38B7EF01D} + WAK 0 + BYPASS 1 0 0 + + + PRESETNAME "Ultraschall (soft noisegate)" + FLOATPOS 0 0 0 0 + FXID {3F91E1D8-C8F6-544F-8E67-982DE95027D7} + WAK 0 + BYPASS 1 0 0 + + FLOATPOS 0 0 0 0 + FXID {DBBC7EE8-4AEC-ED4D-8615-6D3EE30D5BC2} + WAK 0 + > + > + + > +> diff --git a/ProjectTemplates/Ultraschall Soundboard Ducking.RPP b/ProjectTemplates/Ultraschall Soundboard Ducking.RPP new file mode 100644 index 0000000..06cdab8 --- /dev/null +++ b/ProjectTemplates/Ultraschall Soundboard Ducking.RPP @@ -0,0 +1,643 @@ + + + RENDER_FILE "" + RENDER_PATTERN "" + RENDER_FMT 0 2 0 + RENDER_1X 0 + RENDER_RANGE 1 0 0 18 0 + RENDER_RESAMPLE 7 0 1 + RENDER_ADDTOPROJ 0 + RENDER_STEMS 0 + RENDER_DITHER 0 + TIMELOCKMODE 0 + TEMPOENVLOCKMODE 0 + ITEMMIX 0 + DEFPITCHMODE 393216 + TAKELANE 1 + SAMPLERATE 48000 1 0 + + LOCK 1 + + GLOBAL_AUTO -1 + TEMPO 120 4 4 + PLAYRATE 1 1 0.75 1.5 + SELECTION 0 0 + SELECTION2 0 0 + MASTERAUTOMODE 0 + MASTERTRACKHEIGHT 0 + MASTERPEAKCOL 16576 + MASTERMUTESOLO 0 + MASTERTRACKVIEW 0 0.6667 0.5 0.5 0 0 0 + MASTERHWOUT + MASTER_NCH 2 2 + MASTER_VOLUME 1 0 -1 -1 1 + MASTER_FX 1 + MASTER_SEL 0 + + FLOATPOS 0 0 0 0 + FXID {2BA2463A-6BDD-C343-A62E-E7B1A850600E} + WAK 0 + > + + + + + + PRESETNAME Ultraschall3 + FLOATPOS 0 0 0 0 + FXID {28CBD85F-C9D2-5F49-8700-B1917CA77B9F} + WAK 0 + BYPASS 1 0 0 + + + FLOATPOS 0 0 0 0 + FXID {39F0C815-A596-9D42-9C28-30A39BE74AA5} + WAK 0 + BYPASS 1 0 0 + + FLOATPOS 0 0 0 0 + FXID {49A23B14-5512-DA42-8717-A6D6C400FF9C} + WAK 0 + > + > + + + PRESETNAME Ultraschall3 + FLOATPOS 0 0 0 0 + FXID {4D54389E-77A4-514D-BA57-973E4C97AC55} + WAK 0 + BYPASS 1 0 0 + + JS_DIMS 529 367 + + FLOATPOS 0 0 0 0 + FXID {FBC5882D-5EF3-0149-ADF5-FCD333F2F945} + WAK 0 + BYPASS 1 0 0 + + FLOATPOS 0 0 0 0 + FXID {1BED4FB3-B241-5247-A207-0A9F358E058B} + WAK 0 + > + > + + FLOATPOS 0 0 0 0 + FXID {275D8C4D-E0C1-CC43-8AFC-4AB83776915A} + WAK 0 + BYPASS 0 0 0 + + PRESETNAME "Ultraschall - Ducking" + FLOATPOS 0 0 0 0 + FXID {5D2B2D0C-AA27-CB47-8C7E-7F4AFCAE8AF8} + WAK 0 + BYPASS 1 0 0 + + FLOATPOS 0 0 0 0 + FXID {DDFB3399-BDC1-7243-8EAE-8015941DEFC4} + WAK 0 + > + > + + + > + + + > + + + > + + > + + FLOATPOS 0 0 0 0 + FXID {757BE9C4-A71B-B943-940E-2B252219324C} + WAK 0 + BYPASS 0 0 0 + + FLOATPOS 0 0 0 0 + FXID {5D2B2D0C-AA27-CB47-8C7E-7F4AFCAE8AF8} + WAK 0 + > + > + > + + > + + + > + + + > + + > + + FLOATPOS 0 0 0 0 + FXID {757BE9C4-A71B-B943-940E-2B252219324C} + WAK 0 + BYPASS 0 0 0 + + FLOATPOS 0 0 0 0 + FXID {5D2B2D0C-AA27-CB47-8C7E-7F4AFCAE8AF8} + WAK 0 + > + > + > + + > + + + > + + + > + + > + + FLOATPOS 0 0 0 0 + FXID {757BE9C4-A71B-B943-940E-2B252219324C} + WAK 0 + BYPASS 0 0 0 + + FLOATPOS 0 0 0 0 + FXID {5D2B2D0C-AA27-CB47-8C7E-7F4AFCAE8AF8} + WAK 0 + > + > + > + + > + + + > + + + > + + > + + FLOATPOS 0 0 0 0 + FXID {757BE9C4-A71B-B943-940E-2B252219324C} + WAK 0 + BYPASS 0 0 0 + + FLOATPOS 0 0 0 0 + FXID {5D2B2D0C-AA27-CB47-8C7E-7F4AFCAE8AF8} + WAK 0 + > + > + > + > +> diff --git a/ProjectTemplates/Ultraschall Soundboard.RPP b/ProjectTemplates/Ultraschall Soundboard.RPP new file mode 100644 index 0000000..11e01bc --- /dev/null +++ b/ProjectTemplates/Ultraschall Soundboard.RPP @@ -0,0 +1,623 @@ + + + RENDER_FILE "" + RENDER_PATTERN "" + RENDER_FMT 0 2 0 + RENDER_1X 0 + RENDER_RANGE 1 0 0 18 0 + RENDER_RESAMPLE 7 0 1 + RENDER_ADDTOPROJ 0 + RENDER_STEMS 0 + RENDER_DITHER 0 + TIMELOCKMODE 0 + TEMPOENVLOCKMODE 0 + ITEMMIX 0 + DEFPITCHMODE 393216 + TAKELANE 1 + SAMPLERATE 48000 1 0 + + LOCK 1 + + GLOBAL_AUTO -1 + TEMPO 120 4 4 + PLAYRATE 1 1 0.75 1.5 + SELECTION 0 0 + SELECTION2 0 0 + MASTERAUTOMODE 0 + MASTERTRACKHEIGHT 0 + MASTERPEAKCOL 16576 + MASTERMUTESOLO 0 + MASTERTRACKVIEW 0 0.6667 0.5 0.5 0 0 0 + MASTERHWOUT + MASTER_NCH 2 2 + MASTER_VOLUME 1 0 -1 -1 1 + MASTER_FX 1 + MASTER_SEL 0 + + FLOATPOS 0 0 0 0 + FXID {01C1472E-A90A-4D41-96A2-4AA03B32C908} + WAK 0 + > + + + + + PRESETNAME Ultraschall3 + FLOATPOS 0 0 0 0 + FXID {C8E89378-E1FB-6842-B38E-2BC1D046A2EB} + WAK 0 + BYPASS 1 0 0 + + + PRESETNAME Ultraschall + FLOATPOS 0 0 0 0 + FXID {0BF9E7CD-F268-D745-99BA-83CAD1ECF6E7} + WAK 0 + BYPASS 1 0 0 + + FLOATPOS 0 0 0 0 + FXID {096C0B65-A43C-2648-BDAA-E5F698FFB2D7} + WAK 0 + > + > + + PRESETNAME Ultraschall3 + FLOATPOS 0 0 0 0 + FXID {F3152419-8D83-6947-BAB2-D3E17983275D} + WAK 0 + BYPASS 1 0 0 + + + PRESETNAME Ultraschall + FLOATPOS 0 0 0 0 + FXID {0F1DD181-1C07-EE4B-8004-DCFB4B85B98E} + WAK 0 + BYPASS 1 0 0 + + FLOATPOS 0 0 0 0 + FXID {39B7C52C-342D-A846-8221-D333C4FEE56D} + WAK 0 + > + > + + FLOATPOS 0 0 0 0 + FXID {DC848473-9789-0E47-AE72-0DD21D7E2557} + WAK 0 + BYPASS 1 0 0 + + PRESETNAME "Ultraschall - Ducking" + FLOATPOS 0 0 0 0 + FXID {5D2B2D0C-AA27-CB47-8C7E-7F4AFCAE8AF8} + WAK 0 + > + > + + + > + + + > + + + > + + > + + FLOATPOS 0 0 0 0 + FXID {757BE9C4-A71B-B943-940E-2B252219324C} + WAK 0 + BYPASS 1 0 0 + + FLOATPOS 0 0 0 0 + FXID {5D2B2D0C-AA27-CB47-8C7E-7F4AFCAE8AF8} + WAK 0 + > + > + > + + > + + + > + + + > + + > + + FLOATPOS 0 0 0 0 + FXID {757BE9C4-A71B-B943-940E-2B252219324C} + WAK 0 + BYPASS 1 0 0 + + FLOATPOS 0 0 0 0 + FXID {5D2B2D0C-AA27-CB47-8C7E-7F4AFCAE8AF8} + WAK 0 + > + > + > + + > + + + > + + + > + + > + + FLOATPOS 0 0 0 0 + FXID {757BE9C4-A71B-B943-940E-2B252219324C} + WAK 0 + BYPASS 1 0 0 + + FLOATPOS 0 0 0 0 + FXID {5D2B2D0C-AA27-CB47-8C7E-7F4AFCAE8AF8} + WAK 0 + > + > + > + + > + + + > + + + > + + > + + FLOATPOS 0 0 0 0 + FXID {757BE9C4-A71B-B943-940E-2B252219324C} + WAK 0 + BYPASS 1 0 0 + + FLOATPOS 0 0 0 0 + FXID {5D2B2D0C-AA27-CB47-8C7E-7F4AFCAE8AF8} + WAK 0 + > + > + > + > +> diff --git a/S&M.ini b/S&M.ini new file mode 100644 index 0000000..c541eaf --- /dev/null +++ b/S&M.ini @@ -0,0 +1,232 @@ +[ColorThemes] +Max_slot=0 + +[CueBuss1] +name="Test" +reatype=3 +send_to_masterparent=0 +show_routing=1 +solo_defeat=1 +track_template_enabled=0 +track_template_path="" + +[Cyclactions] +Undos=1 + +[Find] +Type=4 +ZoomScrollToFoundItems=0 + +[FXChains] +Max_slot=0 + +[General] +; /Users/rstockm/Documents/ULTRASCHALL/Ultraschall 3.1 Vanilla/S&M.ini === +; REAPER v5.70/OSX64 === +; SWS/S&M Extension v2.9.7 Build 0 === +Beta=0 +BuggyPlugsSupport=0 +IniFileUpgrade=9 +LearnPitchAndNormOSC=0 +MediaFileLockAudio=0 +ToolbarsAutoRefresh=1 +ToolbarsAutoRefreshFreq=300 ; in ms (min: 100, max: 5000) + +[ImageView] +Stretch=0 + +[LiveConfigs] +BigFontName=Arial + +[MediaFiles] +Max_slot=21 +Slot1="/Volumes/Macintosh HD/Podcasts/Wikigeeks/WG050/Trailer/0_teiler_kurz.aiff" +Slot10="/Volumes/Macintosh HD/Podcasts/Wikigeeks/WG050/Trailer/Die Familienaufstellung.mp3" +Slot11="/Volumes/Macintosh HD/Podcasts/Wikigeeks/WG050/Trailer/Die Resterampe.mp3" +Slot12="/Volumes/Macintosh HD/Podcasts/Wikigeeks/WG050/Trailer/Ende 1.mp3" +Slot13="/Volumes/Macintosh HD/Podcasts/Wikigeeks/WG050/Trailer/Ende 2.mp3" +Slot14="/Volumes/Macintosh HD/Podcasts/Wikigeeks/WG050/Trailer/Ende 3.mp3" +Slot15="/Volumes/Macintosh HD/Podcasts/Wikigeeks/WG050/Trailer/How it should have ended.mp3" +Slot16="/Volumes/Macintosh HD/Podcasts/Wikigeeks/WG050/Intro 50/Intro50/Intro50.wav" +Slot17="/Volumes/Macintosh HD/Podcasts/Wikigeeks/WG050/Trailer/Rohrkrepierer.mp3" +Slot18="/Volumes/Macintosh HD/Podcasts/Wikigeeks/WG050/Trailer/Selbstgefaelschte Statistiken.mp3" +Slot19="/Volumes/Macintosh HD/Podcasts/Wikigeeks/WG050/Trailer/Trailer.flac" +Slot2="/Volumes/Macintosh HD/Podcasts/Wikigeeks/WG050/Trailer/0_teiler_normal.aif" +Slot20="/Volumes/Macintosh HD/Podcasts/Wikigeeks/WG050/Trailer/wgnachhalle-arrangementphase-4-ende-1pre.mp3" +Slot21="/Volumes/Macintosh HD/Podcasts/Wikigeeks/WG050/Trailer/wgnachhalle-arrangementphase-5-anfangmitte-1pre.mp3" +Slot3="/Volumes/Macintosh HD/Podcasts/Wikigeeks/WG050/Trailer/1_WMR_klarkommen.mp3" +Slot4="/Volumes/Macintosh HD/Podcasts/Wikigeeks/WG050/Trailer/Aufgewaermtes.mp3" +Slot5="/Volumes/Macintosh HD/Podcasts/Wikigeeks/WG050/Trailer/Briefe an die Industrie.mp3" +Slot6="/Volumes/Macintosh HD/Podcasts/Wikigeeks/WG050/Trailer/Bullshit Bingo.mp3" +Slot7="/Volumes/Macintosh HD/Podcasts/Wikigeeks/WG050/Trailer/Danke fuer Fisch.mp3" +Slot8="/Volumes/Macintosh HD/Podcasts/Wikigeeks/WG050/Trailer/Der angesagte Trailer.mp3" +Slot9="/Volumes/Macintosh HD/Podcasts/Wikigeeks/WG050/Trailer/Die Couchwette.mp3" + +[NbOfActions] +; Set the number of actions you want below. Quit REAPER first! === +; Unless specified, the maximum number of actions is 255 (0 will hide actions). === +S&M_ADD_TRTEMPLATE=4 ; [Main] Resources - Import tracks from track template, slot n +S&M_ADDMEDIA_CURTRACK=4 ; [Main] Resources - Add media file to current track, slot n +S&M_ADDMEDIA_NEWTRACK=4 ; [Main] Resources - Add media file to new track, slot n +S&M_ADDMEDIA_SELITEM=4 ; [Main] Resources - Add media file to selected items as takes, slot n +S&M_APPLY_PRJTEMPLATE=4 ; [Main] Resources - Open project, slot n +S&M_APPLY_TRTEMPLATE=4 ; [Main] Resources - Apply track template to selected tracks, slot n +S&M_APPLY_TRTEMPLATE_ITEMSENVS=4 ; [Main] Resources - Apply track template (+envelopes/items) to selected tracks, slot n +S&M_CLR_IMAGE_SLOT=0 ; [Main] Resources - Clear image slot n +S&M_CLR_MEDIA_SLOT=0 ; [Main] Resources - Clear media file slot n +S&M_CLR_PRJTEMPLATE_SLOT=0 ; [Main] Resources - Clear project slot n +S&M_CLR_THEME_SLOT=0 ; [Main] Resources - Clear theme slot n +S&M_CLR_TRTEMPLATE_SLOT=0 ; [Main] Resources - Clear track template slot n +S&M_CLRFXCHAINSLOT=0 ; [Main] Resources - Clear FX chain slot n +S&M_CUEBUS=8 ; [Main] Create cue buss from track selection, settings n -- Max. = 8! +S&M_DUMMY_TGL=8 ; [Main] Dummy toggle n +S&M_EXCL_TGL=4 ; [Main] Exclusive toggle An +S&M_EXCL_TGL_B=4 ; [Main] Exclusive toggle Bn +S&M_EXCL_TGL_C=4 ; [Main] Exclusive toggle Cn +S&M_EXCL_TGL_D=4 ; [Main] Exclusive toggle Dn +S&M_EXCL_TGL_E=0 ; [Main] Exclusive toggle En +S&M_EXCL_TGL_F=0 ; [Main] Exclusive toggle Fn +S&M_EXCL_TGL_G=0 ; [Main] Exclusive toggle Gn +S&M_EXCL_TGL_H=0 ; [Main] Exclusive toggle Hn +S&M_FLOATFX=8 ; [Main] Float FX n for selected tracks +S&M_FXBYP=8 ; [Main] Toggle FX n bypass for selected tracks +S&M_FXBYP_ALL_OFF_EXCPT=0 ; [Main] Unbypass all FX (except n) for selected tracks +S&M_FXBYP_ALL_ON_EXCPT=8 ; [Main] Bypass all FX (except n) for selected tracks +S&M_FXBYP_SETOFF=8 ; [Main] Unbypass FX n for selected tracks +S&M_FXBYP_SETON=8 ; [Main] Bypass FX n for selected tracks +S&M_FXBYPEXCPT=0 ; [Main] Toggle all FX (except n) bypass for selected tracks +S&M_FXCHAIN_ALLTAKES=0 ; [Main] Resources - Paste (replace) FX chain to selected items, all takes, slot n +S&M_FXOFF=8 ; [Main] Toggle FX n online/offline for selected tracks +S&M_FXOFF_ALL_OFF_EXCPT=8 ; [Main] Set all FX (except n) offline for selected tracks +S&M_FXOFF_ALL_ON_EXCPT=0 ; [Main] Set all FX (except n) online for selected tracks +S&M_FXOFF_SETOFF=8 ; [Main] Set FX n offline for selected tracks +S&M_FXOFF_SETON=8 ; [Main] Set FX n online for selected tracks +S&M_FXOFFEXCPT=0 ; [Main] Toggle all FX (except n) online/offline for selected tracks +S&M_GOTO_MARKER=0 ; [Main] Go to marker n (obeys smooth seek) +S&M_GOTO_REGION=0 ; [Main] Go to region n (obeys smooth seek) +S&M_GOTO_SEL_REGION=4 ; [Main] Go to/select region n (obeys smooth seek) +S&M_INFXCHAIN=0 ; [Main] Resources - Paste (replace) input FX chain to selected tracks, slot n +S&M_LIVECFG_APPLY=8 ; [Main] Live Config #n - Apply config (MIDI/OSC only) -- Max. = 8! +S&M_LIVECFG_CC123_OFF=0 ; [Main] Live Config #n - Disable option 'Send all notes off when switching configs' -- Max. = 8! +S&M_LIVECFG_CC123_ON=0 ; [Main] Live Config #n - Enable option 'Send all notes off when switching configs' -- Max. = 8! +S&M_LIVECFG_CC123_TGL=8 ; [Main] Live Config #n - Toggle option 'Send all notes off when switching configs' -- Max. = 8! +S&M_LIVECFG_DISARMBUT_OFF=0 ; [Main] Live Config #n - Disable option 'Disarm all but active track' -- Max. = 8! +S&M_LIVECFG_DISARMBUT_ON=0 ; [Main] Live Config #n - Enable option 'Disarm all but active track' -- Max. = 8! +S&M_LIVECFG_DISARMBUT_TGL=8 ; [Main] Live Config #n - Toggle option 'Disarm all but active track' -- Max. = 8! +S&M_LIVECFG_FADES_OFF=0 ; [Main] Live Config #n - Disable tiny fades -- Max. = 8! +S&M_LIVECFG_FADES_ON=0 ; [Main] Live Config #n - Enable tiny fades -- Max. = 8! +S&M_LIVECFG_FADES_TGL=8 ; [Main] Live Config #n - Toggle enable tiny fades -- Max. = 8! +S&M_LIVECFG_MUTEBUT_OFF=0 ; [Main] Live Config #n - Disable option 'Mute all but active track' -- Max. = 8! +S&M_LIVECFG_MUTEBUT_ON=0 ; [Main] Live Config #n - Enable option 'Mute all but active track' -- Max. = 8! +S&M_LIVECFG_MUTEBUT_TGL=8 ; [Main] Live Config #n - Toggle option 'Mute all but active track' -- Max. = 8! +S&M_LIVECFG_OFF=0 ; [Main] Live Config #n - Disable -- Max. = 8! +S&M_LIVECFG_OFFLINEBUT_OFF=0 ; [Main] Live Config #n - Disable option 'Offline all but active/preloaded tracks' -- Max. = 8! +S&M_LIVECFG_OFFLINEBUT_ON=0 ; [Main] Live Config #n - Enable option 'Offline all but active/preloaded tracks' -- Max. = 8! +S&M_LIVECFG_OFFLINEBUT_TGL=8 ; [Main] Live Config #n - Toggle option 'Offline all but active/preloaded tracks' -- Max. = 8! +S&M_LIVECFG_ON=0 ; [Main] Live Config #n - Enable -- Max. = 8! +S&M_LIVECFG_PRELOAD=8 ; [Main] Live Config #n - Preload config (MIDI/OSC only) -- Max. = 8! +S&M_LIVECFG_TGL=8 ; [Main] Live Config #n - Toggle enable -- Max. = 8! +S&M_LOAD_THEME=4 ; [Main] Resources - Load theme, slot n +S&M_LOOPMEDIA_SELTRACK=4 ; [Main] Resources - Loop media file in selected tracks, slot n +S&M_LOOPMEDIA_SELTRACK_SYNC=4 ; [Main] Resources - Loop media file in selected tracks (sync with next measure), slot n +S&M_MAP_MIDI_INPUT_CH=16 ; [Main] Map selected tracks MIDI input to channel n -- Max. = 16! +S&M_MESAVECCLANES=8 ; [Main] Active MIDI Editor - Save displayed CC lanes, slot n +S&M_MESETCCLANES=8 ; [Main] Active MIDI Editor - Restore displayed CC lanes, slot n +S&M_MIDI_INPUT_CH=16 ; [Main] Set selected tracks MIDI input to channel n -- Max. = 16! +S&M_NEWTAB_PRJTEMPLATE=4 ; [Main] Resources - Open project, slot n (new tab) +S&M_NEXT_LIVE_CFG=8 ; [Main] Live Config #n - Apply next config -- Max. = 8! +S&M_NEXT_PRESET_FX=4 ; [Main] Trigger next preset for FX n of selected tracks +S&M_OPEN_LIVECFG_MONITOR=8 ; [Main] Live Config #n - Open/close monitoring window -- Max. = 8! +S&M_PASTE_FXCHAIN_ALLTAKES=0 ; [Main] Resources - Paste FX chain to selected items, all takes, slot n +S&M_PASTE_INFXCHAIN=0 ; [Main] Resources - Paste input FX chain to selected tracks, slot n +S&M_PASTE_TAKEFXCHAIN=4 ; [Main] Resources - Paste FX chain to selected items, slot n +S&M_PASTE_TEMPLATE_ITEMS=4 ; [Main] Resources - Paste template items to selected tracks, slot n +S&M_PASTE_TRACKFXCHAIN=4 ; [Main] Resources - Paste FX chain to selected tracks, slot n +S&M_PLAY_RGN_PLAYLIST=4 ; [Main] Region Playlist #n - Play +S&M_PLAYMEDIA_SELTRACK=4 ; [Main] Resources - Play media file in selected tracks, slot n +S&M_PLAYMEDIA_SELTRACK_SYNC=4 ; [Main] Resources - Play media file in selected tracks (sync with next measure), slot n +S&M_PRELOAD_LIVE_CFG=8 ; [Main] Live Config #n - Apply preloaded config (swap preload/current) -- Max. = 8! +S&M_PRELOAD_NEXT_LIVE_CFG=8 ; [Main] Live Config #n - Preload next config -- Max. = 8! +S&M_PRELOAD_PREVIOUS_LIVE_CFG=8 ; [Main] Live Config #n - Preload previous config -- Max. = 8! +S&M_PRESET_FX=8 ; [Main] Trigger preset for FX n of selected track (MIDI/OSC only) -- Max. = 8! +S&M_PREVIOUS_LIVE_CFG=8 ; [Main] Live Config #n - Apply previous config -- Max. = 8! +S&M_PREVIOUS_PRESET_FX=4 ; [Main] Trigger previous preset for FX n of selected tracks +S&M_REPLACE_TEMPLATE_ITEMS=4 ; [Main] Resources - Paste (replace) template items to selected tracks, slot n +S&M_SAVECCLANES_ME=8 ; [MIDI Editor] Save displayed CC lanes, slot n +S&M_SELFX=8 ; [Main] Select FX n for selected tracks +S&M_SET_TRACK_GROUP=8 ; [Main] Set selected tracks to group n (default flags) -- Max. = 32! +S&M_SET_TRACK_ICON=4 ; [Main] Resources - Set track icon for selected tracks, slot n +S&M_SETCCLANES_ME=8 ; [MIDI Editor] Restore displayed CC lanes, slot n +S&M_SHOW_IMG=4 ; [Main] Resources - Show image, slot n +S&M_SHOWFXCHAIN=8 ; [Main] Show FX chain for selected tracks, FX n +S&M_TAKEFXCHAIN=4 ; [Main] Resources - Paste (replace) FX chain to selected items, slot n +S&M_TGL_LOOPMEDIA_SELTRACK=4 ; [Main] Resources - Loop media file in selected tracks (toggle), slot n +S&M_TGL_PLAYMEDIA_SELTRACK=4 ; [Main] Resources - Play media file in selected tracks (toggle), slot n +S&M_TGLPAUSE_LOOPMEDIA_SELTR=0 ; [Main] Resources - Loop media file in selected tracks (toggle pause), slot n +S&M_TGLPAUSE_PLAYMEDIA_SELTR=4 ; [Main] Resources - Play media file in selected tracks (toggle pause), slot n +S&M_TOGLFLOATFX=8 ; [Main] Toggle float FX n for selected tracks +S&M_TRACKFXCHAIN=4 ; [Main] Resources - Paste (replace) FX chain to selected tracks, slot n +S&M_UNFLOATFX=8 ; [Main] Unfloat FX n for selected tracks + +[Notes] +Action_help_file="/Users/reapertest/Library/Application Support/REAPER/S&M_Action_help_en.ini" +BigFontName=Arial +Lock=0 +Type=2 +WrapText=0 + +[ProjectTemplates] +Max_slot=0 + +[RegionPlaylist] +BigFontName=Arial +MonitorMode=0 +Repeat=0 +SeekImmediate=0 +SeekPlay=1 + +[Resources] +AddMediaFileOptions=0 +AutoFillDirColorThemes="/Users/reapertest/Library/Application Support/REAPER/ColorThemes" +AutoFillDirFXChains="/Users/reapertest/Library/Application Support/REAPER/FXChains" +AutoFillDirMediaFiles="/Volumes/Macintosh HD/Podcasts/Wikigeeks/WG050/Trailer" +AutoFillDirProjectTemplates="/Users/ralfstockmann/Documents/Dropbox/Sync Ordner/privat/wikigeeks/Trailerneu" +AutoFillDirTrack_icons="/Users/reapertest/Library/Application Support/REAPER/Data/track_icons" +AutoFillDirTrackTemplates="/Users/reapertest/Library/Application Support/REAPER/TrackTemplates" +AutoSaveDirFXChains="/Users/reapertest/Library/Application Support/REAPER/FXChains" +AutoSaveDirMediaFiles="/Volumes/Macintosh HD/Podcasts/Wikigeeks/WG050/Trailer" +AutoSaveDirProjectTemplates="/Users/ralfstockmann/Documents/Dropbox/Sync Ordner/privat/wikigeeks/Trailerneu" +AutoSaveDirTrackTemplates="/Users/reapertest/Library/Application Support/REAPER/TrackTemplates" +AutoSaveFXChain=0 +AutoSaveFXChainName=0 +AutoSaveTrTemplate=3 +DblClickColorThemes=0 +DblClickFXChains=0 +DblClickMediaFiles=0 +DblClickProjectTemplates=0 +DblClickTrack_icons=0 +DblClickTrackTemplates=0 +Filter=1 +SyncAutoDirsColorThemes=0 +SyncAutoDirsFXChains=1 +SyncAutoDirsMediaFiles=1 +SyncAutoDirsProjectTemplates=1 +SyncAutoDirsTrack_icons=0 +SyncAutoDirsTrackTemplates=1 +TiedActionsColorThemes=5 +TiedActionsFXChains=0 +TiedActionsMediaFiles=3 +TiedActionsProjectTemplates=2 +TiedActionsTrack_icons=4 +TiedActionsTrackTemplates=1 +Type=3 + +[Track_icons] +Max_slot=3 +Slot1="/Volumes/Macintosh HD/Users/rstockm/Pictures/port48b.png" +Slot2="/Volumes/Macintosh HD/Users/rstockm/Pictures/avatar.jpg" +Slot3="/Volumes/Macintosh HD/Users/rstockm/Pictures/braun uhr.jpg" + +[TrackTemplates] +Max_slot=1 + diff --git a/S&M_Cyclactions.ini b/S&M_Cyclactions.ini new file mode 100644 index 0000000..ba5b39d --- /dev/null +++ b/S&M_Cyclactions.ini @@ -0,0 +1,36 @@ +[Main_Cyclactions] +Action1="$ULT View Setup|_S&M_EXCL_TGL1|40454|" +Action10="ULT Mute|_Ultraschall_Mute_Envelope|" +Action11="$ULT View Storyboard|_S&M_EXCL_TGL4|40457|" +Action12="#ULT Mouse Selection|39019|!|39013|" +Action2="$ULT View Record|_S&M_EXCL_TGL2|40455|" +Action3="$ULT Ripple ALL|_XENAK__TOGGLERIPPLEALL|" +Action4="$ULT Ripple ONE|_XENAK_TOGGLERIPPLE1TRACK|" +Action5="$ULT View Edit|_S&M_EXCL_TGL3|40456|" +Action6="$ULT Routing 1|_S&M_EXCL_TGL_B1|_SWSSNAPSHOT_GET1|" +Action7="$ULT Routing 2|_S&M_EXCL_TGL_B2|_SWSSNAPSHOT_GET2|" +Action8="$ULT Routing 3|_S&M_EXCL_TGL_B3|_SWSSNAPSHOT_GET3|" +Action9="$ULT Routing 4|_S&M_EXCL_TGL_B4|_SWSSNAPSHOT_GET4|" +Nb_Actions=12 +Version=3 + +[MainAlt_Cyclactions] +Nb_Actions=0 +Version=3 + +[ME_Inline_Cyclactions] +Nb_Actions=0 +Version=3 + +[ME_List_Cyclactions] +Nb_Actions=0 +Version=3 + +[ME_Piano_Cyclactions] +Nb_Actions=0 +Version=3 + +[MediaEx_Cyclactions] +Nb_Actions=0 +Version=3 + diff --git a/Scripts/Cockos/lyrics.lua b/Scripts/Cockos/lyrics.lua new file mode 100644 index 0000000..bf6ab2d --- /dev/null +++ b/Scripts/Cockos/lyrics.lua @@ -0,0 +1,795 @@ +_gfxw,_gfxh,_th=800,600,0 +_bg,_mg,_fg={1,1,1},{0.875,0.875,0.875},{0,0,0} +_font,_selfont,_toolfont={"verdana",18},{"verdana",20},{"verdana",14} +DEF,SEL,TOOL=1,2,3 +_track=nil +_trackrect,_editrect={0,0,0,0},{0,0,0,0} +_cureditrect,_scrollrect={0,0,0,0},{0,0,0,0} +_exportrect,_importrect={0,0,0,0},{0,0,0,0} +_beatrect={0,0,0,0} +_lyrics,_tsnum={},{} +_origlyric="" +_scrollm,_pagem,_maxm=1,8,8 +_playstate,_curm,_curb=0,1,1 +_beatdiv=1.0 +_editing,_mousedown=false,false +_mousex,_mousey=0,0 +_scrollcapm,_scrollcapy=0,0 +_mousedowntime=0.0 +_capm,_capb=1,1 +_caret={1,0} +_clock=0 +_bullet=utf8.char(0x2219) -- 0x2022 or 0x2219 +_downarrow=utf8.char(0x23F7) -- 0x2BC6 or 0x23F7 +ENSURE_MIDI_ITEMS,IMPORT_LYRICS,EXPORT_LYRICS=42069,42070,42071 + +gfx.init("MIDI Lyrics", + tonumber(reaper.GetExtState("lyrics","wndw")) or _gfxw, + tonumber(reaper.GetExtState("lyrics","wndh")) or _gfxh, + tonumber(reaper.GetExtState("lyrics","dock")) or 0, + tonumber(reaper.GetExtState("lyrics","wndx")) or 100, + tonumber(reaper.GetExtState("lyrics","wndy")) or 100) + +function SetFonts(dsz) + if dsz ~= nil and dsz ~= "" then + _font[2]=_font[2]+dsz + _selfont[2]=_selfont[2]+dsz + _toolfont[2]=_toolfont[2]+dsz + end + gfx.setfont(DEF,_font[1],_font[2]) + _th=gfx.texth + gfx.setfont(SEL,_selfont[1],_selfont[2],string.byte("b")) + gfx.setfont(TOOL,_toolfont[1],_toolfont[2]) +end + +function Quit() + d,x,y,w,h=gfx.dock(-1,0,0,0,0) + reaper.SetExtState("lyrics","wndw",w,true) + reaper.SetExtState("lyrics","wndh",h,true) + reaper.SetExtState("lyrics","dock",d,true) + reaper.SetExtState("lyrics","wndx",x,true) + reaper.SetExtState("lyrics","wndy",y,true) + reaper.SetExtState("lyrics","fontsz",_font[2]-18,true) + gfx.quit() +end +reaper.atexit(Quit) + +function GetLyric(m,b) + str=_lyrics[m][b] + return (str == bullet and "" or str) +end + +function DrawString(str,rect,iscentered) + gfx.x,gfx.y=rect[1],rect[2] + flag=(iscentered == true and 4|1 or 4) + gfx.drawstr(str,flag,rect[3],rect[4]) +end + +function DrawEditingText(str,rect) + w,h=gfx.measurestr(str) + if rect[3] < rect[1]+w+_th then rect[3]=rect[1]+w+_th end + _cureditrect={rect[1]-_th/2,rect[2],rect[3]-_th/2,rect[4]} + DrawBox(_cureditrect,"",false) + gfx.x,gfx.y=rect[1],rect[2]+(rect[4]-rect[2]-_th)/2 + + sc,ec=_caret[1],_caret[1]+_caret[2] + if sc > ec then sc,ec=ec,sc end + if sc < 1 then sc=1 end + if ec > str:len()+1 then ec=str:len()+1 end + gfx.set(_fg[1],_fg[2],_fg[3]) + if sc > 1 then gfx.drawstr(str:sub(1,sc-1)) end + + if ec > sc then -- selected text + selw=gfx.measurestr(str:sub(sc,ec-1)) + gfx.rectto(gfx.x+selw,gfx.y+_th) + gfx.x,gfx.y=gfx.x-selw,gfx.y-_th + gfx.set(_bg[1],_bg[2],_bg[3]) + gfx.drawstr(str:sub(sc,ec-1)) + else -- I-beam + if _clock&1 == 1 then gfx.set(_fg[1],_fg[2],_fg[3]) + else gfx.set(_bg[1],_bg[2],_bg[3]) + end + gfx.lineto(gfx.x,gfx.y+_th) + gfx.y=gfx.y-_th + end + + gfx.set(_fg[1],_fg[2],_fg[3]) + gfx.drawstr(str:sub(ec)) +end + +function GetEditCaret(x,y) + str=GetLyric(_capm,_capb) + sx=_cureditrect[1]+_th/4 + for i=1,str:len() do + w=gfx.measurestr(str:sub(1,i)) + if x < sx+w then return i end + end + return str:len()+1 +end + +function DrawBox(rect,str,iscombo) + gfx.set(_mg[1],_mg[2],_mg[3]) + gfx.rect(rect[1],rect[2],rect[3]-rect[1],rect[4]-rect[2]) + gfx.set(_fg[1],_fg[2],_fg[3]) + gfx.rect(rect[1],rect[2],rect[3]-rect[1],rect[4]-rect[2],false) + if str ~= "" then DrawString(str,rect,not iscombo) end + if iscombo == true then + gfx.x,gfx.y=rect[3]-_th*3/4,rect[2]+_th/8 + gfx.drawstr(_downarrow) + end +end + +function DrawHeader() + gfx.setfont(TOOL) + gfx.set((_mg[1]+_bg[1])/2,(_mg[2]+_bg[2])/2,(_mg[3]+_bg[3])/2) + gfx.rect(0,0,gfx.w,_th*2) + gfx.set(_fg[1],_fg[2],_fg[3]) + gfx.x,gfx.y=_th/2,_th*5/8 + gfx.drawstr("Track:") + name="" + if _track ~= nil then ok,name=reaper.GetTrackName(_track,"") end + + boxsy,boxey,boxw=_th*3/8,_th*7/4,_th*10 + _trackrect={gfx.x+_th/4,boxsy,gfx.x+_th/2+boxw,boxey} + DrawBox(_trackrect," "..name,true) + + gfx.x,gfx.y=_trackrect[3]+_th/2,_th*5/8 + gfx.drawstr("Beat:") + boxw=_th*5/2 + _beatrect={gfx.x+_th/4,boxsy,gfx.x+_th/2+boxw,boxey} + DrawBox(_beatrect," ".._beatdiv,true) + + gfx.setfont(DEF) + if _editing then m,b=_capm,_capb else m,b=_curm,_curb end + str=string.format("%d.%.2f",m,(b-1)*_beatdiv+1) + w,h=gfx.measurestr(str) + x=_th*3/2+(gfx.w-w)/2 + if x > gfx.x+_th/2 then + gfx.x,gfx.y=x,_th/2 + gfx.drawstr(str) + end + gfx.setfont(TOOL) + + if _track ~= nil then + boxw=_th*7/2 + _editrect={gfx.w-_th-boxw,boxsy,gfx.w-_th,_trackrect[4]} + _importrect={_editrect[1]-_th/2-boxw,boxsy,_editrect[3]-_th/2-boxw,boxey} + _exportrect={_importrect[1]-_th/2-boxw,boxsy,_importrect[3]-_th/2-boxw,boxey} + gfx.set(_fg[1],_fg[2],_fg[3]) + if _editing == true then + DrawBox(_editrect,"",false) + gfx.set(1.0,0.0,0.0) + DrawString("Editing",_editrect,true) + gfx.set(_fg[1],_fg[2],_fg[3]) + DrawBox(_importrect,"Cancel",false) + DrawBox(_exportrect,"Commit",false) + else + DrawBox(_editrect,"Edit",false) + DrawBox(_importrect,"Import",false) + DrawBox(_exportrect,"Export",false) + end + end + gfx.setfont(DEF) +end + +function GetLyricRect(m,b) + y,dy=_th*5/2,_th*3/2 + sy=y+(m-_scrollm)*dy + ey=sy+dy + if b < 0 then + sx,ex=_th/2,_th*4 -- measure number + else + sx,ex=_th*4,gfx.w-_th -- entire line + if b > 0 and _editing == true then + bw=(ex-sx)/_tsnum[m] + sx,ex=sx+(b-1)*bw,sx+b*bw + sy,ey=sy+_th/8,ey-_th/8 + end + end + return {sx,sy,ex,ey} +end + +function DrawMeasureNumbers() + gfx.setfont(DEF) + for m=_scrollm,_maxm do + if m >= _scrollm+_pagem then break end + rect=GetLyricRect(m,-1) + if m == _curm then gfx.setfont(SEL) end + DrawString(tostring(m),rect,false) + if m == _curm then gfx.setfont(DEF) end + end +end + +function HitTestLyrics(x,y) + for m=_scrollm,_maxm do + if m >= _scrollm+_pagem then break end + rect=GetLyricRect(m,0) + if HitTest(x,y,rect) then + for b=1,_tsnum[m] do + rect=GetLyricRect(m,b) + if HitTest(x,y,rect) then return m,b end + end + end + end + return 0,0 +end + +function DrawEditingLyrics() + gfx.setfont(DEF) + for m=_scrollm,_maxm do + if m >= _scrollm+_pagem then break end + for b=1,_tsnum[m] do + rect=GetLyricRect(m,b) + str=GetLyric(m,b) + if m == _capm and b == _capb then + DrawEditingText(str,rect) + else + DrawString(str,rect,false) + end + end + end +end + +function DrawPlaybackLyrics() + gfx.setfont(DEF) + for m=_scrollm,_maxm do + if m >= _scrollm+_pagem then break end + rect=GetLyricRect(m,0) + + line="" + for b=1,_tsnum[m] do + if b > 1 then line=line.." " end + line=line.._lyrics[m][b] + end + if m ~= _curm then + DrawString(line,rect,true) + else + w,h=gfx.measurestr(line) + gfx.x=rect[1]+(rect[3]-rect[1]-w)/2 + gfx.y=rect[2]+(rect[4]-rect[2]-_th)/2 + for b=1,_tsnum[m] do + if b == _curb then gfx.setfont(SEL) end + gfx.drawstr(_lyrics[m][b].." ",4|256,gfx.x+w,gfx.y+_th) + if b == _curb then gfx.setfont(DEF) end + end + end + end +end + +function DrawScrollbar() + if _maxm > _pagem then + h=gfx.h-2*_th + sy=_th*2+h*(_scrollm-1)/_maxm + ey=_th*2+h*(_scrollm+_pagem-1)/_maxm + _scrollrect={gfx.w-_th,sy,gfx.w,ey} + gfx.set(_mg[1],_mg[2],_mg[3]) + gfx.rect(gfx.w-_th,sy,_th,ey-sy) + else + _scrollrect={0,0,0,0} + end +end + +function DrawLyrics() + gfx.set(_bg[1],_bg[2],_bg[3]) + gfx.rect(0,_th*2,gfx.w,gfx.h) + gfx.set(_fg[1],_fg[2],_fg[3]) + if _track == nil then + rect={0,0,gfx.w,gfx.h-_th/2} + gfx.setfont(DEF) + DrawString("(no track selected)",rect,true) + return + end + + _pagem=math.floor((gfx.h-2*_th)/(_th*3/2)) + if _playstate&1 == 1 then _scrollm=math.floor(_curm-_pagem/4) end + if _scrollm > _maxm-_pagem+1 then _scrollm=_maxm-_pagem+1 end + if _scrollm < 1 then _scrollm=1 end + + DrawMeasureNumbers() + if _editing == true then DrawEditingLyrics() + else DrawPlaybackLyrics() + end + DrawScrollbar() +end + +function TrackHasAudio(track) + icnt=reaper.CountTrackMediaItems(track) + for i=1,icnt do + item=reaper.GetTrackMediaItem(track,i-1) + k=reaper.GetMediaItemInfo_Value(item, "I_CURTAKE") + tk=reaper.GetMediaItemTake(item,k) + if tk ~= nil and reaper.TakeIsMIDI(tk) == false then + return true + end + end + return false +end + +function ChooseTrack() + menu="" + tracks={} + cnt=reaper.CountTracks() + for t=1,cnt do + track=reaper.GetTrack(0,t-1) + if TrackHasAudio(track) == false then + if #tracks > 0 then menu=menu.."|" end + if track == _track then menu=menu.."!" end + ok,name=reaper.GetTrackName(track,"") + menu=menu..name + tracks[#tracks+1]=track + end + end + if #tracks == 0 then + menu="#(no empty or MIDI tracks found)" + end + + gfx.x,gfx.y=_trackrect[1],_trackrect[4] + t=gfx.showmenu(menu) + if #tracks > 0 and t > 0 then _track=tracks[t] end +end + +function OnBeatDivChange(beatdiv) + _capb=math.floor((_capb-1)/(beatdiv/_beatdiv))+1 + _beatdiv=beatdiv + RefreshLyrics() + StartEdit(_capm,_capb) +end + +function ChooseBeatDiv() + menu="" + divs={4,2,1,0.5,0.25} + for i=1,#divs do + if i > 1 then menu=menu.."|" end + if divs[i] == _beatdiv then menu=menu.."!" end + menu=menu..divs[i] + end + + gfx.x,gfx.y=_beatrect[1],_beatrect[4] + t=gfx.showmenu(menu) + if t > 0 then OnBeatDivChange(divs[t]) end +end + +function RefreshLyrics() + _lyrics={} + if _track ~= nil then + ok,lyricstr=reaper.GetTrackMIDILyrics(_track,2,"") + if lyricstr:len() then + for m,b,text in lyricstr:gmatch("(%d+).(%d+.%d+)\t([^\t]*)\t?") do + m,b=tonumber(m),tonumber(b) + b=math.floor((b-1)/_beatdiv)+1 + if _lyrics[m] == nil then _lyrics[m]={} end + if _lyrics[m][b] == nil then _lyrics[m][b]=text + else _lyrics[m][b]=_lyrics[m][b].." "..text + end + end + end + end + ValidateLyrics() +end + +function ValidateLyrics() + maxt=reaper.GetProjectLength(0) + b,_maxm=reaper.TimeMap2_timeToBeats(0,maxt) + for m in pairs(_lyrics) do + if m > _maxm then + if _lyrics[m] ~= nil then + for b in pairs(_lyrics[m]) do + if _lyrics[m][b] ~= "" and _lyrics[m][b] ~= _bullet then + _maxm=m + break + end + end + end + end + end + if _maxm == 0 then _maxm=8 + else _maxm=math.floor((_maxm-1)/4)*4+8 + end + + for m=1,_maxm do + t=reaper.TimeMap2_beatsToTime(0,0,m-1) + _tsnum[m],tsdenom=reaper.TimeMap_GetTimeSigAtTime(0,t) + _tsnum[m]=math.floor(_tsnum[m]/_beatdiv) + if _lyrics[m] == nil then _lyrics[m]={} end + for b=1,_tsnum[m] do + if _lyrics[m][b] == nil or _lyrics[m][b] == "" then + _lyrics[m][b]=_bullet + end + end + end +end + +function CommitLyrics() + minm,maxm=_maxm,0 + str="" + for m=1,_maxm do + for b=1,_tsnum[m] do + if _lyrics[m][b] ~= "" and _lyrics[m][b] ~= _bullet then + if m < minm then minm=m end + if m > maxm then maxm=m end + str=str..string.format("%d.%.2f\t%s\t", + m,(b-1)*_beatdiv+1,_lyrics[m][b]) + end + end + end + if minm <= maxm then + st=reaper.TimeMap2_beatsToTime(0,0.0,minm-1) + et=reaper.TimeMap2_beatsToTime(0,0.0,maxm) + ost,oet=reaper.GetSet_LoopTimeRange2(0,false,false,0.0,0.0,false) + reaper.GetSet_LoopTimeRange2(0,true,false,st,et,false) + reaper.SetMediaTrackInfo_Value(_track,"I_SELECTED",1) + reaper.Main_OnCommandEx(ENSURE_MIDI_ITEMS,0,0) + reaper.GetSet_LoopTimeRange2(0,true,false,ost,oet,false) -- restore + end + + reaper.SetTrackMIDILyrics(_track,0,str) +end + +function HitTest(x,y,rect) + return x >= rect[1] and x < rect[3] and y >= rect[2] and y < rect[4] +end + +function GetPlayPos() + _playstate=reaper.GetPlayState()&1 + if _playstate == 1 then _playpos=reaper.GetPlayPosition() + else _playpos=reaper.GetCursorPosition() + end + + b,m=reaper.TimeMap2_timeToBeats(0,_playpos) + m,b=m+1,math.floor(b/_beatdiv)+1 + if m > _maxm then m,b=_maxm,1 end + return m,b +end + +function StartEdit(m,b) + EndEdit() + if m < 1 then m=1 end + if m > _maxm then m=_maxm end + if m < _scrollm then _scrollm=m end + if m > _scrollm+_pagem-1 then _scrollm=m-_pagem+1 end + if b < 1 then b=1 end + if b > _tsnum[m] then b=_tsnum[m] end + + _origlyric=_lyrics[m][b] + if _lyrics[m][b] == _bullet then _lyrics[m][b]="" end + _capm,_capb=m,b + _caret={1,_lyrics[m][b]:len()+1} +end + +function EndEdit() + if _lyrics[_capm] ~= nil and _lyrics[_capm][_capb] ~= nil then + if _lyrics[_capm][_capb] == "" then + _lyrics[_capm][_capb]=_bullet + end + end + ValidateLyrics() +end + +function OnMouseDown(x,y,doubleclick) + if HitTest(x,y,_trackrect) then + ChooseTrack() + RefreshLyrics() + if _track ~= nil and _editing == true then + StartEdit(_capm,_capb) + end + elseif HitTest(x,y,_beatrect) then + ChooseBeatDiv() + elseif _track ~= nil then + if HitTest(x,y,_editrect) then + if _editing == false and _track ~= nil then + _editing=true + StartEdit(m,b) + else + _editing=false + end + elseif HitTest(x,y,_scrollrect) then + _scrollcapm,_scrollcapy=_scrollm,y + elseif HitTest(x,y,_importrect) then + if _editing == true then + RefreshLyrics() + _editing=false + elseif _track ~= nil then + reaper.SetMediaTrackInfo_Value(_track,"I_SELECTED",1) + reaper.Main_OnCommandEx(IMPORT_LYRICS,0,0) + end + elseif HitTest(x,y,_exportrect) then + if _editing == true then + CommitLyrics() + reaper.Undo_OnStateChange("Edited MIDI lyrics") + RefreshLyrics() + _editing=false + elseif _track ~= nil then + reaper.SetMediaTrackInfo_Value(_track,"I_SELECTED",1) + reaper.Main_OnCommandEx(EXPORT_LYRICS,0,0) + end + elseif _editing then + m,b=HitTestLyrics(x,y) + if m == _capm and b == _capb then + if doubleclick == true then + str=GetLyric(_capm,_capb) + _caret={1,str:len()} + else + i=GetEditCaret(x,y) + _caret={i,0} + end + elseif m > 0 and b > 0 then + StartEdit(m,b) + end + end + end + _mousedown=true + _mousex,_mousey=x,y +end + +function OnMouseUp(x,y) + _mousedown=false + _mousex,_mousey,_scrollcapy=0,0,0 +end + +function OnMouseMove(x,y) + if _scrollcapy > 0 then + dy=y-_scrollcapy + h=gfx.h-2*_th + _scrollm=math.floor(_scrollcapm+dy*_maxm/h) + elseif _editing == true and HitTest(x,y,_cureditrect) then + i=GetEditCaret(x,y) + _caret[2]=i-_caret[1] + end + _mousex,_mousey=x,y +end + +function OnMouseWheel(x, y, dv) + if HitTest(x,y,_beatrect) then + if dv > 0 then + if _beatdiv < 4.0 then OnBeatDivChange(_beatdiv*2.0) end + else + if _beatdiv > 0.25 then OnBeatDivChange(_beatdiv*0.5) end + end + elseif gfx.mouse_cap&4 == 4 then --ctrl + SetFonts(dv > 0 and 1 or -1) + elseif gfx.y > _th*2 then + if dv > 0 then _scrollm=_scrollm-1 + else _scrollm=_scrollm+1 end + DrawLyrics() + end +end + +function OnCtxMenu(x,y) + if _editing == true then + rect=GetLyricRect(_capm,_capb) + if HitTest(x,y,rect) then + menu="Forward\tShift+Right|Back\tShift+Left|Up\tUp|Down\tDown||" + menu=menu.."Insert\tShift+Ins|Delete\tShift+Del|Delete previous\tShift+Bksp" + gfx.x,gfx.y=rect[1]-_th/2,rect[4] + t=gfx.showmenu(menu) + if t == 1 then OnNavigateChar(RIGHT,false,true) + elseif t == 2 then OnNavigateChar(LEFT,false,true) + elseif t == 3 then OnNavigateChar(UP,false,false) + elseif t == 4 then OnNavigateChar(DOWN,false,false) + elseif t == 5 then OnNavigateChar(INS,false,true) + elseif t == 6 then OnNavigateChar(DEL,false,true) + elseif t == 7 then OnNavigateChar(BKSP,false,true) + end + end + end +end + +LEFT,RIGHT,UP,DOWN=0x6C656674,0x72676874,0x7570,0x646F776E +INS,DEL,BKSP=0x696E73,0x64656C,0x8 +TAB,RET,ESC=0x9,0xD,0x1B +HOME,END=0x686F6D65,0x656E64 +PGUP,PGDOWN=0x70677570,0x7067646E + +function OnNavigateChar(c,ctrl,shift) + if ((c == LEFT or c == TAB or c == RET) and shift == true) or + (c == BKSP and GetLyric(_capm,_capb) == "") or + (c == LEFT and _caret[1] == 1 and _caret[2] == 0) then + if _capb > 1 or _capm > 1 then + m,b=_capm,_capb-1 + if b < 1 then m,b=m-1,_tsnum[m-1] end + StartEdit(m,b) + end + return true + end + if (c == RIGHT and shift == true) or c == TAB or c == RET or + (c == RIGHT and _caret[1] == GetLyric(_capm,_capb):len()+1 and _caret[2] == 0) then + if _capb < _tsnum[_capm] or _capm < _maxm then + m,b=_capm,_capb+1 + if b > _tsnum[m] then m,b=m+1,1 end + StartEdit(m,b) + end + return true + end + if c == UP then + if _capm > 1 then StartEdit(_capm-1,_capb) end + return true + end + if c == DOWN then + if _capm < _maxm then StartEdit(_capm+1,_capb) end + return true + end + if (c == DEL or c == BKSP) and shift == true then + if c == BKSP then + if _capb > 1 then _capb=_capb-1 + elseif _capm > 1 then _capm,_capb=_capm-1,_tsnum[_capm-1] + end + end + for m=_capm,_maxm do + for b=1,_tsnum[m]-1 do + if m > _capm or b >= _capb then + _lyrics[m][b]=_lyrics[m][b+1] + end + end + if m < _maxm then _lyrics[m][_tsnum[m]]=_lyrics[m+1][1] end + end + ValidateLyrics() + StartEdit(_capm,_capb) + return true + end + if c == INS and shift == true then + for m=_maxm,_capm,-1 do + if m < _maxm then _lyrics[m+1][1]=_lyrics[m][_tsnum[m]] end + for b=_tsnum[m],2,-1 do + if m == _capm and b == _capb then break end + _lyrics[m][b]=_lyrics[m][b-1] + end + end + ValidateLyrics() + _lyrics[_capm][_capb]="" + StartEdit(_capm,_capb) + return true + end + return false +end + +function OnEditChar(c,ctrl,shift) + if c == LEFT then + if _caret[1] > 1 then _caret[1]=_caret[1]-1 end + _caret[2]=0 + return true + end + if c == RIGHT then + str=GetLyric(_capm,_capb) + if _caret[1] < str:len()+1 then _caret[1]=_caret[1]+1 end + _caret[2]=0 + return true + end + if c == BKSP or c == DEL then + sc,ec=_caret[1],_caret[1]+_caret[2] + if sc > ec then sc,ec=ec,sc end + str=GetLyric(_capm,_capb) + if _caret[2] ~= 0 then + _lyrics[_capm][_capb]=str:sub(1,sc-1)..str:sub(ec) + elseif c == BKSP and _caret[1] > 1 then + _lyrics[_capm][_capb]=str:sub(1,sc-2)..str:sub(ec) + _caret[1]=_caret[1]-1 + elseif c == DEL and _caret[1] <= str:len() then + _lyrics[_capm][_capb]=str:sub(1,sc-1)..str:sub(ec+1) + end + _caret[2]=0 + return true + end + if c == HOME then + _caret={1,0} + return true + end + if c == END then + _caret={GetLyric(_capm,_capb):len()+1,0} + end + return false +end + +function OnInputChar(c) + if c >= 0x20 and c <= 0x7E then + sc,ec=_caret[1],_caret[1]+_caret[2] + if sc > ec then sc,ec=ec,sc end + str=GetLyric(_capm,_capb) + _lyrics[_capm][_capb]=str:sub(1,sc-1)..string.char(c)..str:sub(ec) + _caret={_caret[1]+1,0} + return true + end + return false +end + +function OnMetaChar(c,ctrl,shift) + if c == ESC then + if _lyrics[_capm][_capb] == _origlyric and _caret[1] == _origlyric:len()+1 and _caret[2] == 0 then + _editing=false + else + _lyrics[_capm][_capb]=_origlyric + _caret={_origlyric:len()+1,0} + end + return true + end + if c == 0x13 and ctrl == true then -- ctrl+S + CommitLyrics() + reaper.Undo_OnStateChange("Edited MIDI lyrics") + end + return false +end + +function OnChar(c) + --reaper.ShowConsoleMsg(string.format("0x%X\n",c)) + ctrl=(gfx.mouse_cap&4 == 4) + shift=(gfx.mouse_cap&8 == 8) + if OnMetaChar(c,ctrl,shift) then return end + if OnNavigateChar(c,ctrl,shift) then return end + if OnEditChar(c,ctrl,shift) then return end + if OnInputChar(c) then return end +end + +function runloop() + upd=false + + if _track ~= nil and reaper.ValidatePtr2(0,_track,"MediaTrack*") == false then + _track=nil + RefreshLyrics() + upd=true + end + + m,b=GetPlayPos() + if m ~= _curm or b ~= _curb then + if m ~= _curm or _editing == false then upd=true end + _curm,_curb=m,b + end + + c=gfx.getchar() + if c > 0 and _editing == true then + OnChar(c) + upd=true + end + + if _mousedown == false then + if gfx.mouse_cap&1 == 1 then + t=os.clock() + doubleclick=(t-_mousedowntime < 0.25) + OnMouseDown(gfx.mouse_x,gfx.mouse_y,doubleclick) + _mousedowntime=t + upd=true + elseif gfx.mouse_cap&2 == 2 then + OnCtxMenu(gfx.mouse_x,gfx.mouse_y) + upd=true + elseif gfx.mouse_wheel ~= 0 and _mousedown == false then + OnMouseWheel(gfx.mouse_x, gfx.mouse_y, gfx.mouse_wheel) + gfx.mouse_wheel=0 + upd=true + end + else + if gfx.mouse_cap&(1|2) == 0 then + OnMouseUp(gfx.mouse_x,gfx.mouse_y) + upd=true + elseif gfx.mouse_cap&1 == 1 then + if gfx.mouse_x ~= _mousex or gfx.mouse_y ~= _mousey then + OnMouseMove(gfx.mouse_x,gfx.mouse_y) + upd=true + end + end + end + + if _editing == true and _caret[2] == 0 then + c=math.floor(os.clock()*2) + if (c~_clock)&1 == 1 then + _clock=c + upd=true + end + end + + if gfx.w ~= _gfxw or gfx.h ~= _gfxh then + _gfxw,_gfxh=gfx.w,gfx.h + upd=true + end + + if upd == true then + DrawHeader() + DrawLyrics() + end + + gfx.update() + if c >= 0 then reaper.runloop(runloop) end +end + +SetFonts(reaper.GetExtState("lyrics","fontsz")) +RefreshLyrics() +DrawHeader() +DrawLyrics() +runloop() diff --git a/Scripts/Ultraschall_Force_Playcursor_To_Center_In_Follow.lua b/Scripts/Ultraschall_Force_Playcursor_To_Center_In_Follow.lua new file mode 100644 index 0000000..eb70105 --- /dev/null +++ b/Scripts/Ultraschall_Force_Playcursor_To_Center_In_Follow.lua @@ -0,0 +1,44 @@ +--[[ +################################################################################ +# +# Copyright (c) 2014-2017 Ultraschall (http://ultraschall.fm) +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +# THE SOFTWARE. +# +################################################################################ +]] + +-- sets Arrangeview to that the cursor-position is centered if the cursor is not visible +-- when stopped, it will take the edit-cursor, when playing/recording, it will take the play-cursor instead + + +local info = debug.getinfo(1,'S'); +script_path = info.source:match[[^@?(.*[\/])[^\/]-$]] +dofile(script_path .. "ultraschall_helper_functions.lua") + +a,A=ultraschall.GetUSExternalState("ultraschall_follow", "state") + +start_time, end_time = reaper.GetSet_ArrangeView2(0, false, 0, 0) +length=(end_time-start_time)/2 + +if A~="0" and reaper.GetPlayState() ~= 0 and reaper.GetPlayPosition()>end_time-length then + reaper.BR_SetArrangeView(0, (reaper.GetPlayPosition()-length), (reaper.GetPlayPosition()+length)) +end + + diff --git a/Scripts/Ultraschall_Set_TimeSelection_Full_Project.lua b/Scripts/Ultraschall_Set_TimeSelection_Full_Project.lua new file mode 100644 index 0000000..0734c7a --- /dev/null +++ b/Scripts/Ultraschall_Set_TimeSelection_Full_Project.lua @@ -0,0 +1,30 @@ +--[[ +################################################################################ +# +# Copyright (c) 2014-2017 Ultraschall (http://ultraschall.fm) +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +# THE SOFTWARE. +# +################################################################################ +]] + + +-- set time-selection from start to end of project + +starttime, endtime = reaper.GetSet_LoopTimeRange(true, false, 0, reaper.GetProjectLength(), false) diff --git a/Scripts/__startup.lua b/Scripts/__startup.lua new file mode 100644 index 0000000..311c27c --- /dev/null +++ b/Scripts/__startup.lua @@ -0,0 +1,175 @@ +--[[ +################################################################################ +# +# Copyright (c) 2014-2017 Ultraschall (http://ultraschall.fm) +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +# THE SOFTWARE. +# +################################################################################ +]] + +local info = debug.getinfo(1,'S'); +script_path = info.source:match[[^@?(.*[\/])[^\/]-$]] +dofile(script_path .. "ultraschall_helper_functions.lua") + + +theme_version_now = 20180114 -- version of this theme + +-- reaper.SetExtState("ultraschall_versions", "theme", theme_version_now, true) +-- not a good idea: something went wrong during the installation of the theme, so don't fix but reinstall + +error_msg = false + +--------------------------------------- +-- get data from system key/value store +--------------------------------------- + +theme_version = reaper.GetExtState("ultraschall_versions", "theme") +plugin_version = reaper.GetExtState("ultraschall_versions", "plugin") +A,views = ultraschall.GetUSExternalState("ultraschall_gui", "views") +A,view = ultraschall.GetUSExternalState("ultraschall_gui", "view") +A,sec = ultraschall.GetUSExternalState("ultraschall_gui", "sec") +A,mouse = ultraschall.GetUSExternalState("ultraschall_mouse", "state") +A,first_start = ultraschall.GetUSExternalState("ultraschall_start", "firststart") +A,startscreen = ultraschall.GetUSExternalState("ultraschall_start", "startscreen") +A,follow = ultraschall.GetUSExternalState("ultraschall_follow", "state") + + follow_id = reaper.NamedCommandLookup("_Ultraschall_Toggle_Follow") + +if theme_version ~= tostring(theme_version_now) then + error_msg = "Your ULTRASCHALL THEME is out of date. \n\nULTRASCHALL wil NOT work properly until you fix this. \n\nPlease get the latest release on http://ultraschall.fm/install/" +end + +if plugin_version ~= theme_version then -- different versions of theme and plugin isntalled + error_msg = "There is a configuration mismatch between the ULTRASCHALL THEME ("..theme_version..") and PLUGIN ("..plugin_version..").\n\nULTRASCHALL will NOT work properly until you fix this. \n\nPlease get the latest release on http://ultraschall.fm/install/" +end + +if plugin_version == "" then + error_msg = "The ULTRASCHALL PLUGIN was not properly installed.\n\nULTRASCHALL wil NOT work properly until you fix this.\n\nPlease check the installation guide on http://ultraschall.fm/install/" +end + +if theme_version == "" then + error_msg = "There are parts of the ULTRASCHALL THEME missing.\n\nULTRASCHALL wil NOT work properly until you fix this.\n\nPlease check the installation guide on http://ultraschall.fm/install/" +end + + + +if error_msg then + type = 0 + title = "Ultraschall Configuration Problem" + result = reaper.ShowMessageBox( error_msg, title, type ) + +elseif first_start == "true" or startscreen == "1" or startscreen == "-1" then + start_id = reaper.NamedCommandLookup("_Ultraschall_StartScreen") + reaper.Main_OnCommand(start_id,0) --Show Startscreen +end + +if sec=="-1" then sec=0 end +if view=="-1" then view="setup" end +if views=="-1" then views=55796 end + +-------------------------- +-- Restore GUI and Buttons +-------------------------- + + +if views then + reaper.SetToggleCommandState(sec, views, 1) + reaper.RefreshToolbar2(sec, views) + if view == "setup" then + reaper.Main_OnCommand(40454,0) --(re)load Setup Screenset + elseif view == "record" then + reaper.Main_OnCommand(40455,0) --(re)load Setup Screenset + elseif view == "edit" then + reaper.Main_OnCommand(40456,0) --(re)load Setup Screenset + elseif view == "story" then + reaper.Main_OnCommand(40457,0) --(re)load Setup Screenset + end +end + +if tonumber(mouse) <= 0 then -- selection is activated + mouse_id = reaper.NamedCommandLookup("_Ultraschall_Toggle_Mouse_Selection") + reaper.SetToggleCommandState(sec, mouse_id, 1) + reaper.RefreshToolbar2(sec, mouse_id) +end + + +if follow == "1" and reaper.GetToggleCommandState(follow_id)~=1 then -- follow is activated + reaper.SetToggleCommandState(sec, follow_id, 1) + reaper.RefreshToolbar2(sec, follow_id) +end + + +-- set OnAir button off + +on_air_button_id = reaper.NamedCommandLookup("_Ultraschall_OnAir") +reaper.SetToggleCommandState(sec, on_air_button_id, 0) + +-------------------------- +-- Restore opened/closed Windows +-------------------------- + +-- Reset the counter for already opened windows +reaper.SetExtState("Ultraschall_Windows","Ultraschall Routing Snapshots",0.0, true) +reaper.SetExtState("Ultraschall_Windows","Ultraschall Export Assistant",0.0, true) +reaper.SetExtState("Ultraschall_Windows","Ultraschall Color Picker",0.0, true) +reaper.SetExtState("Ultraschall_Windows","Ultraschall 3",0.0, true) + + +-------------------------- +-- Run on every start ---- +-------------------------- + +-- remove StudioLink OnAir FX from Master + +m = reaper.GetMasterTrack(0) --streaming is always on the master track +os = reaper.GetOS() + +if string.match(os, "OSX") then + fx_slot = reaper.TrackFX_GetByName(m, "ITSR: StudioLinkOnAir", 0) --get the slot of the StudioLink effect. If there is none: initiate one. +else -- Windows + fx_slot = reaper.TrackFX_GetByName(m, "StudioLinkOnAir (IT-Service Sebastian Reimers)", 0) --get the slot of the StudioLink effect. If there is none: initiate one. +end +reaper.SNM_MoveOrRemoveTrackFX(m, fx_slot, 0) + +-- is the ReaperThemeZip loaded? Only then (probably on first start) reload the ReaperTheme to get the colors working + +-- curtheme = reaper.GetLastColorThemeFile() +-- if string.find(curtheme, "ReaperThemeZip", 1) then + themeadress = reaper.GetResourcePath() .. "/ColorThemes/Ultraschall_3.1.ReaperTheme" + reaper.OpenColorThemeFile(themeadress) +-- end + +-- start Followmode-reset-backgroundscript + follow_reset_cmdid=reaper.NamedCommandLookup("_Ultraschall_Toggle_Reset") + reaper.SetExtState("ultraschall_follow", "state2", follow, false) + reaper.Main_OnCommand(follow_reset_cmdid,0) + + +-------------------------- +-- First start actions +-------------------------- + +-- not really needed right now, but maybe in coming releases + +if first_start == "true" or first_start == "-1" then + ultraschall.SetUSExternalState("ultraschall_start", "firststart", "false", true) -- there will be only one first start +end + + diff --git a/Scripts/sws_python.py b/Scripts/sws_python.py new file mode 100644 index 0000000..7b08dcd --- /dev/null +++ b/Scripts/sws_python.py @@ -0,0 +1,7 @@ +#JFB: OSX "umbrella" import file for SWS/S&M functions +# See the "note" at http://docs.python.org/library/platform.html +import sys +if sys.maxsize > 2**32: + from sws_python64 import * +else: + from sws_python32 import * diff --git a/Scripts/sws_python32.py b/Scripts/sws_python32.py new file mode 100644 index 0000000..5ea9b33 --- /dev/null +++ b/Scripts/sws_python32.py @@ -0,0 +1,748 @@ +from reaper_python import * + +def BR_EnvAlloc(p0,p1): + a=rpr_getfp('BR_EnvAlloc') + f=CFUNCTYPE(c_uint,c_uint,c_byte)(a) + t=(rpr_packp('TrackEnvelope*',p0),c_byte(p1)) + r=f(t[0],t[1]) + return rpr_unpackp('BR_Envelope*',r) + +def BR_EnvCountPoints(p0): + a=rpr_getfp('BR_EnvCountPoints') + f=CFUNCTYPE(c_int,c_uint)(a) + t=(rpr_packp('BR_Envelope*',p0),) + r=f(t[0]) + return r + +def BR_EnvDeletePoint(p0,p1): + a=rpr_getfp('BR_EnvDeletePoint') + f=CFUNCTYPE(c_byte,c_uint,c_int)(a) + t=(rpr_packp('BR_Envelope*',p0),c_int(p1)) + r=f(t[0],t[1]) + return r + +def BR_EnvFind(p0,p1,p2): + a=rpr_getfp('BR_EnvFind') + f=CFUNCTYPE(c_int,c_uint,c_double,c_double)(a) + t=(rpr_packp('BR_Envelope*',p0),c_double(p1),c_double(p2)) + r=f(t[0],t[1],t[2]) + return r + +def BR_EnvFindNext(p0,p1): + a=rpr_getfp('BR_EnvFindNext') + f=CFUNCTYPE(c_int,c_uint,c_double)(a) + t=(rpr_packp('BR_Envelope*',p0),c_double(p1)) + r=f(t[0],t[1]) + return r + +def BR_EnvFindPrevious(p0,p1): + a=rpr_getfp('BR_EnvFindPrevious') + f=CFUNCTYPE(c_int,c_uint,c_double)(a) + t=(rpr_packp('BR_Envelope*',p0),c_double(p1)) + r=f(t[0],t[1]) + return r + +def BR_EnvFree(p0,p1): + a=rpr_getfp('BR_EnvFree') + f=CFUNCTYPE(c_byte,c_uint,c_byte)(a) + t=(rpr_packp('BR_Envelope*',p0),c_byte(p1)) + r=f(t[0],t[1]) + return r + +def BR_EnvGetParentTake(p0): + a=rpr_getfp('BR_EnvGetParentTake') + f=CFUNCTYPE(c_uint,c_uint)(a) + t=(rpr_packp('BR_Envelope*',p0),) + r=f(t[0]) + return rpr_unpackp('MediaItem_Take*',r) + +def BR_EnvGetParentTrack(p0): + a=rpr_getfp('BR_EnvGetParentTrack') + f=CFUNCTYPE(c_uint,c_uint)(a) + t=(rpr_packp('BR_Envelope*',p0),) + r=f(t[0]) + return rpr_unpackp('MediaItem*',r) + +def BR_EnvGetPoint(p0,p1,p2,p3,p4,p5,p6): + a=rpr_getfp('BR_EnvGetPoint') + f=CFUNCTYPE(c_byte,c_uint,c_int,c_void_p,c_void_p,c_void_p,c_void_p,c_void_p)(a) + t=(rpr_packp('BR_Envelope*',p0),c_int(p1),c_double(p2),c_double(p3),c_int(p4),c_byte(p5),c_double(p6)) + r=f(t[0],t[1],byref(t[2]),byref(t[3]),byref(t[4]),byref(t[5]),byref(t[6])) + return (r,p0,p1,float(t[2].value),float(t[3].value),int(t[4].value),int(t[5].value),float(t[6].value)) + +def BR_EnvGetProperties(p0,p1,p2,p3,p4,p5,p6,p7,p8,p9,p10,p11): + a=rpr_getfp('BR_EnvGetProperties') + f=CFUNCTYPE(None,c_uint,c_void_p,c_void_p,c_void_p,c_void_p,c_void_p,c_void_p,c_void_p,c_void_p,c_void_p,c_void_p,c_void_p)(a) + t=(rpr_packp('BR_Envelope*',p0),c_byte(p1),c_byte(p2),c_byte(p3),c_byte(p4),c_int(p5),c_int(p6),c_double(p7),c_double(p8),c_double(p9),c_int(p10),c_byte(p11)) + f(t[0],byref(t[1]),byref(t[2]),byref(t[3]),byref(t[4]),byref(t[5]),byref(t[6]),byref(t[7]),byref(t[8]),byref(t[9]),byref(t[10]),byref(t[11])) + return (p0,int(t[1].value),int(t[2].value),int(t[3].value),int(t[4].value),int(t[5].value),int(t[6].value),float(t[7].value),float(t[8].value),float(t[9].value),int(t[10].value),int(t[11].value)) + +def BR_EnvSetPoint(p0,p1,p2,p3,p4,p5,p6): + a=rpr_getfp('BR_EnvSetPoint') + f=CFUNCTYPE(c_byte,c_uint,c_int,c_double,c_double,c_int,c_byte,c_double)(a) + t=(rpr_packp('BR_Envelope*',p0),c_int(p1),c_double(p2),c_double(p3),c_int(p4),c_byte(p5),c_double(p6)) + r=f(t[0],t[1],t[2],t[3],t[4],t[5],t[6]) + return r + +def BR_EnvSetProperties(p0,p1,p2,p3,p4,p5,p6,p7): + a=rpr_getfp('BR_EnvSetProperties') + f=CFUNCTYPE(None,c_uint,c_byte,c_byte,c_byte,c_byte,c_int,c_int,c_byte)(a) + t=(rpr_packp('BR_Envelope*',p0),c_byte(p1),c_byte(p2),c_byte(p3),c_byte(p4),c_int(p5),c_int(p6),c_byte(p7)) + f(t[0],t[1],t[2],t[3],t[4],t[5],t[6],t[7]) + +def BR_EnvSortPoints(p0): + a=rpr_getfp('BR_EnvSortPoints') + f=CFUNCTYPE(None,c_uint)(a) + t=(rpr_packp('BR_Envelope*',p0),) + f(t[0]) + +def BR_EnvValueAtPos(p0,p1): + a=rpr_getfp('BR_EnvValueAtPos') + f=CFUNCTYPE(c_double,c_uint,c_double)(a) + t=(rpr_packp('BR_Envelope*',p0),c_double(p1)) + r=f(t[0],t[1]) + return r + +def BR_GetArrangeView(p0,p1,p2): + a=rpr_getfp('BR_GetArrangeView') + f=CFUNCTYPE(None,c_uint,c_void_p,c_void_p)(a) + t=(rpr_packp('ReaProject*',p0),c_double(p1),c_double(p2)) + f(t[0],byref(t[1]),byref(t[2])) + return (p0,float(t[1].value),float(t[2].value)) + +def BR_GetClosestGridDivision(p0): + a=rpr_getfp('BR_GetClosestGridDivision') + f=CFUNCTYPE(c_double,c_double)(a) + t=(c_double(p0),) + r=f(t[0]) + return r + +def BR_GetCurrentTheme(p0,p1,p2,p3): + a=rpr_getfp('BR_GetCurrentTheme') + f=CFUNCTYPE(None,c_char_p,c_int,c_char_p,c_int)(a) + t=(rpr_packs(p0),c_int(p1),rpr_packs(p2),c_int(p3)) + f(t[0],t[1],t[2],t[3]) + return (rpr_unpacks(t[0]),p1,rpr_unpacks(t[2]),p3) + +def BR_GetMediaItemByGUID(p0,p1): + a=rpr_getfp('BR_GetMediaItemByGUID') + f=CFUNCTYPE(c_uint,c_uint,c_char_p)(a) + t=(rpr_packp('ReaProject*',p0),rpr_packsc(p1)) + r=f(t[0],t[1]) + return rpr_unpackp('MediaItem*',r) + +def BR_GetMediaItemGUID(p0,p1,p2): + a=rpr_getfp('BR_GetMediaItemGUID') + f=CFUNCTYPE(None,c_uint,c_char_p,c_int)(a) + t=(rpr_packp('MediaItem*',p0),rpr_packs(p1),c_int(p2)) + f(t[0],t[1],t[2]) + return (p0,rpr_unpacks(t[1]),p2) + +def BR_GetMediaItemImageResource(p0,p1,p2,p3): + a=rpr_getfp('BR_GetMediaItemImageResource') + f=CFUNCTYPE(c_byte,c_uint,c_char_p,c_int,c_void_p)(a) + t=(rpr_packp('MediaItem*',p0),rpr_packs(p1),c_int(p2),c_int(p3)) + r=f(t[0],t[1],t[2],byref(t[3])) + return (r,p0,rpr_unpacks(t[1]),p2,int(t[3].value)) + +def BR_GetMediaItemTakeGUID(p0,p1,p2): + a=rpr_getfp('BR_GetMediaItemTakeGUID') + f=CFUNCTYPE(None,c_uint,c_char_p,c_int)(a) + t=(rpr_packp('MediaItem_Take*',p0),rpr_packs(p1),c_int(p2)) + f(t[0],t[1],t[2]) + return (p0,rpr_unpacks(t[1]),p2) + +def BR_GetMediaSourceProperties(p0,p1,p2,p3,p4,p5): + a=rpr_getfp('BR_GetMediaSourceProperties') + f=CFUNCTYPE(c_byte,c_uint,c_void_p,c_void_p,c_void_p,c_void_p,c_void_p)(a) + t=(rpr_packp('MediaItem_Take*',p0),c_byte(p1),c_double(p2),c_double(p3),c_double(p4),c_byte(p5)) + r=f(t[0],byref(t[1]),byref(t[2]),byref(t[3]),byref(t[4]),byref(t[5])) + return (r,p0,int(t[1].value),float(t[2].value),float(t[3].value),float(t[4].value),int(t[5].value)) + +def BR_GetMediaTrackByGUID(p0,p1): + a=rpr_getfp('BR_GetMediaTrackByGUID') + f=CFUNCTYPE(c_uint,c_uint,c_char_p)(a) + t=(rpr_packp('ReaProject*',p0),rpr_packsc(p1)) + r=f(t[0],t[1]) + return rpr_unpackp('MediaTrack*',r) + +def BR_GetMediaTrackFreezeCount(p0): + a=rpr_getfp('BR_GetMediaTrackFreezeCount') + f=CFUNCTYPE(c_int,c_uint)(a) + t=(rpr_packp('MediaTrack*',p0),) + r=f(t[0]) + return r + +def BR_GetMediaTrackGUID(p0,p1,p2): + a=rpr_getfp('BR_GetMediaTrackGUID') + f=CFUNCTYPE(None,c_uint,c_char_p,c_int)(a) + t=(rpr_packp('MediaTrack*',p0),rpr_packs(p1),c_int(p2)) + f(t[0],t[1],t[2]) + return (p0,rpr_unpacks(t[1]),p2) + +def BR_GetMediaTrackLayouts(p0,p1,p2,p3,p4): + a=rpr_getfp('BR_GetMediaTrackLayouts') + f=CFUNCTYPE(None,c_uint,c_char_p,c_int,c_char_p,c_int)(a) + t=(rpr_packp('MediaTrack*',p0),rpr_packs(p1),c_int(p2),rpr_packs(p3),c_int(p4)) + f(t[0],t[1],t[2],t[3],t[4]) + return (p0,rpr_unpacks(t[1]),p2,rpr_unpacks(t[3]),p4) + +def BR_GetMediaTrackSendInfo_Envelope(p0,p1,p2,p3): + a=rpr_getfp('BR_GetMediaTrackSendInfo_Envelope') + f=CFUNCTYPE(c_uint,c_uint,c_int,c_int,c_int)(a) + t=(rpr_packp('MediaTrack*',p0),c_int(p1),c_int(p2),c_int(p3)) + r=f(t[0],t[1],t[2],t[3]) + return rpr_unpackp('TrackEnvelope*',r) + +def BR_GetMediaTrackSendInfo_Track(p0,p1,p2,p3): + a=rpr_getfp('BR_GetMediaTrackSendInfo_Track') + f=CFUNCTYPE(c_uint,c_uint,c_int,c_int,c_int)(a) + t=(rpr_packp('MediaTrack*',p0),c_int(p1),c_int(p2),c_int(p3)) + r=f(t[0],t[1],t[2],t[3]) + return rpr_unpackp('MediaTrack*',r) + +def BR_GetMidiSourceLenPPQ(p0): + a=rpr_getfp('BR_GetMidiSourceLenPPQ') + f=CFUNCTYPE(c_double,c_uint)(a) + t=(rpr_packp('MediaItem_Take*',p0),) + r=f(t[0]) + return r + +def BR_GetMidiTakePoolGUID(p0,p1,p2): + a=rpr_getfp('BR_GetMidiTakePoolGUID') + f=CFUNCTYPE(c_byte,c_uint,c_char_p,c_int)(a) + t=(rpr_packp('MediaItem_Take*',p0),rpr_packs(p1),c_int(p2)) + r=f(t[0],t[1],t[2]) + return (r,p0,rpr_unpacks(t[1]),p2) + +def BR_GetMidiTakeTempoInfo(p0,p1,p2,p3,p4): + a=rpr_getfp('BR_GetMidiTakeTempoInfo') + f=CFUNCTYPE(c_byte,c_uint,c_void_p,c_void_p,c_void_p,c_void_p)(a) + t=(rpr_packp('MediaItem_Take*',p0),c_byte(p1),c_double(p2),c_int(p3),c_int(p4)) + r=f(t[0],byref(t[1]),byref(t[2]),byref(t[3]),byref(t[4])) + return (r,p0,int(t[1].value),float(t[2].value),int(t[3].value),int(t[4].value)) + +def BR_GetMouseCursorContext(p0,p1,p2,p3,p4,p5): + a=rpr_getfp('BR_GetMouseCursorContext') + f=CFUNCTYPE(None,c_char_p,c_int,c_char_p,c_int,c_char_p,c_int)(a) + t=(rpr_packs(p0),c_int(p1),rpr_packs(p2),c_int(p3),rpr_packs(p4),c_int(p5)) + f(t[0],t[1],t[2],t[3],t[4],t[5]) + return (rpr_unpacks(t[0]),p1,rpr_unpacks(t[2]),p3,rpr_unpacks(t[4]),p5) + +def BR_GetMouseCursorContext_Envelope(p0): + a=rpr_getfp('BR_GetMouseCursorContext_Envelope') + f=CFUNCTYPE(c_uint,c_void_p)(a) + t=(c_byte(p0),) + r=f(byref(t[0])) + return (rpr_unpackp('TrackEnvelope*',r),int(t[0].value)) + +def BR_GetMouseCursorContext_Item(): + a=rpr_getfp('BR_GetMouseCursorContext_Item') + f=CFUNCTYPE(c_uint)(a) + r=f() + return rpr_unpackp('MediaItem*',r) + +def BR_GetMouseCursorContext_MIDI(p0,p1,p2,p3,p4): + a=rpr_getfp('BR_GetMouseCursorContext_MIDI') + f=CFUNCTYPE(c_uint,c_void_p,c_void_p,c_void_p,c_void_p,c_void_p)(a) + t=(c_byte(p0),c_int(p1),c_int(p2),c_int(p3),c_int(p4)) + r=f(byref(t[0]),byref(t[1]),byref(t[2]),byref(t[3]),byref(t[4])) + return (rpr_unpackp('void*',r),int(t[0].value),int(t[1].value),int(t[2].value),int(t[3].value),int(t[4].value)) + +def BR_GetMouseCursorContext_Position(): + a=rpr_getfp('BR_GetMouseCursorContext_Position') + f=CFUNCTYPE(c_double)(a) + r=f() + return r + +def BR_GetMouseCursorContext_StretchMarker(): + a=rpr_getfp('BR_GetMouseCursorContext_StretchMarker') + f=CFUNCTYPE(c_int)(a) + r=f() + return r + +def BR_GetMouseCursorContext_Take(): + a=rpr_getfp('BR_GetMouseCursorContext_Take') + f=CFUNCTYPE(c_uint)(a) + r=f() + return rpr_unpackp('MediaItem_Take*',r) + +def BR_GetMouseCursorContext_Track(): + a=rpr_getfp('BR_GetMouseCursorContext_Track') + f=CFUNCTYPE(c_uint)(a) + r=f() + return rpr_unpackp('MediaTrack*',r) + +def BR_GetNextGridDivision(p0): + a=rpr_getfp('BR_GetNextGridDivision') + f=CFUNCTYPE(c_double,c_double)(a) + t=(c_double(p0),) + r=f(t[0]) + return r + +def BR_GetPrevGridDivision(p0): + a=rpr_getfp('BR_GetPrevGridDivision') + f=CFUNCTYPE(c_double,c_double)(a) + t=(c_double(p0),) + r=f(t[0]) + return r + +def BR_GetSetTrackSendInfo(p0,p1,p2,p3,p4,p5): + a=rpr_getfp('BR_GetSetTrackSendInfo') + f=CFUNCTYPE(c_double,c_uint,c_int,c_int,c_char_p,c_byte,c_double)(a) + t=(rpr_packp('MediaTrack*',p0),c_int(p1),c_int(p2),rpr_packsc(p3),c_byte(p4),c_double(p5)) + r=f(t[0],t[1],t[2],t[3],t[4],t[5]) + return r + +def BR_GetTakeFXCount(p0): + a=rpr_getfp('BR_GetTakeFXCount') + f=CFUNCTYPE(c_int,c_uint)(a) + t=(rpr_packp('MediaItem_Take*',p0),) + r=f(t[0]) + return r + +def BR_IsMidiOpenInInlineEditor(p0): + a=rpr_getfp('BR_IsMidiOpenInInlineEditor') + f=CFUNCTYPE(c_byte,c_uint)(a) + t=(rpr_packp('MediaItem_Take*',p0),) + r=f(t[0]) + return r + +def BR_IsTakeMidi(p0,p1): + a=rpr_getfp('BR_IsTakeMidi') + f=CFUNCTYPE(c_byte,c_uint,c_void_p)(a) + t=(rpr_packp('MediaItem_Take*',p0),c_byte(p1)) + r=f(t[0],byref(t[1])) + return (r,p0,int(t[1].value)) + +def BR_ItemAtMouseCursor(p0): + a=rpr_getfp('BR_ItemAtMouseCursor') + f=CFUNCTYPE(c_uint,c_void_p)(a) + t=(c_double(p0),) + r=f(byref(t[0])) + return (rpr_unpackp('MediaItem*',r),float(t[0].value)) + +def BR_MIDI_CCLaneRemove(p0,p1): + a=rpr_getfp('BR_MIDI_CCLaneRemove') + f=CFUNCTYPE(c_byte,c_uint,c_int)(a) + t=(rpr_packp('HWND',p0),c_int(p1)) + r=f(t[0],t[1]) + return r + +def BR_MIDI_CCLaneReplace(p0,p1,p2): + a=rpr_getfp('BR_MIDI_CCLaneReplace') + f=CFUNCTYPE(c_byte,c_uint,c_int,c_int)(a) + t=(rpr_packp('HWND',p0),c_int(p1),c_int(p2)) + r=f(t[0],t[1],t[2]) + return r + +def BR_PositionAtMouseCursor(p0): + a=rpr_getfp('BR_PositionAtMouseCursor') + f=CFUNCTYPE(c_double,c_byte)(a) + t=(c_byte(p0),) + r=f(t[0]) + return r + +def BR_SetArrangeView(p0,p1,p2): + a=rpr_getfp('BR_SetArrangeView') + f=CFUNCTYPE(None,c_uint,c_double,c_double)(a) + t=(rpr_packp('ReaProject*',p0),c_double(p1),c_double(p2)) + f(t[0],t[1],t[2]) + +def BR_SetItemEdges(p0,p1,p2): + a=rpr_getfp('BR_SetItemEdges') + f=CFUNCTYPE(c_byte,c_uint,c_double,c_double)(a) + t=(rpr_packp('MediaItem*',p0),c_double(p1),c_double(p2)) + r=f(t[0],t[1],t[2]) + return r + +def BR_SetMediaItemImageResource(p0,p1,p2): + a=rpr_getfp('BR_SetMediaItemImageResource') + f=CFUNCTYPE(None,c_uint,c_char_p,c_int)(a) + t=(rpr_packp('MediaItem*',p0),rpr_packsc(p1),c_int(p2)) + f(t[0],t[1],t[2]) + +def BR_SetMediaSourceProperties(p0,p1,p2,p3,p4,p5): + a=rpr_getfp('BR_SetMediaSourceProperties') + f=CFUNCTYPE(c_byte,c_uint,c_byte,c_double,c_double,c_double,c_byte)(a) + t=(rpr_packp('MediaItem_Take*',p0),c_byte(p1),c_double(p2),c_double(p3),c_double(p4),c_byte(p5)) + r=f(t[0],t[1],t[2],t[3],t[4],t[5]) + return r + +def BR_SetMediaTrackLayouts(p0,p1,p2): + a=rpr_getfp('BR_SetMediaTrackLayouts') + f=CFUNCTYPE(c_byte,c_uint,c_char_p,c_char_p)(a) + t=(rpr_packp('MediaTrack*',p0),rpr_packsc(p1),rpr_packsc(p2)) + r=f(t[0],t[1],t[2]) + return r + +def BR_SetMidiTakeTempoInfo(p0,p1,p2,p3,p4): + a=rpr_getfp('BR_SetMidiTakeTempoInfo') + f=CFUNCTYPE(c_byte,c_uint,c_byte,c_double,c_int,c_int)(a) + t=(rpr_packp('MediaItem_Take*',p0),c_byte(p1),c_double(p2),c_int(p3),c_int(p4)) + r=f(t[0],t[1],t[2],t[3],t[4]) + return r + +def BR_SetTakeSourceFromFile(p0,p1,p2): + a=rpr_getfp('BR_SetTakeSourceFromFile') + f=CFUNCTYPE(c_byte,c_uint,c_char_p,c_byte)(a) + t=(rpr_packp('MediaItem_Take*',p0),rpr_packsc(p1),c_byte(p2)) + r=f(t[0],t[1],t[2]) + return r + +def BR_SetTakeSourceFromFile2(p0,p1,p2,p3): + a=rpr_getfp('BR_SetTakeSourceFromFile2') + f=CFUNCTYPE(c_byte,c_uint,c_char_p,c_byte,c_byte)(a) + t=(rpr_packp('MediaItem_Take*',p0),rpr_packsc(p1),c_byte(p2),c_byte(p3)) + r=f(t[0],t[1],t[2],t[3]) + return r + +def BR_TakeAtMouseCursor(p0): + a=rpr_getfp('BR_TakeAtMouseCursor') + f=CFUNCTYPE(c_uint,c_void_p)(a) + t=(c_double(p0),) + r=f(byref(t[0])) + return (rpr_unpackp('MediaItem_Take*',r),float(t[0].value)) + +def BR_TrackAtMouseCursor(p0,p1): + a=rpr_getfp('BR_TrackAtMouseCursor') + f=CFUNCTYPE(c_uint,c_void_p,c_void_p)(a) + t=(c_int(p0),c_double(p1)) + r=f(byref(t[0]),byref(t[1])) + return (rpr_unpackp('MediaTrack*',r),int(t[0].value),float(t[1].value)) + +def BR_TrackFX_GetFXModuleName(p0,p1,p2,p3): + a=rpr_getfp('BR_TrackFX_GetFXModuleName') + f=CFUNCTYPE(c_byte,c_uint,c_int,c_char_p,c_int)(a) + t=(rpr_packp('MediaTrack*',p0),c_int(p1),rpr_packs(p2),c_int(p3)) + r=f(t[0],t[1],t[2],t[3]) + return (r,p0,p1,rpr_unpacks(t[2]),p3) + +def BR_Win32_GetPrivateProfileString(p0,p1,p2,p3,p4,p5): + a=rpr_getfp('BR_Win32_GetPrivateProfileString') + f=CFUNCTYPE(c_int,c_char_p,c_char_p,c_char_p,c_char_p,c_char_p,c_int)(a) + t=(rpr_packsc(p0),rpr_packsc(p1),rpr_packsc(p2),rpr_packsc(p3),rpr_packs(p4),c_int(p5)) + r=f(t[0],t[1],t[2],t[3],t[4],t[5]) + return (r,p0,p1,p2,p3,rpr_unpacks(t[4]),p5) + +def BR_Win32_ShellExecute(p0,p1,p2,p3,p4): + a=rpr_getfp('BR_Win32_ShellExecute') + f=CFUNCTYPE(c_int,c_char_p,c_char_p,c_char_p,c_char_p,c_int)(a) + t=(rpr_packsc(p0),rpr_packsc(p1),rpr_packsc(p2),rpr_packsc(p3),c_int(p4)) + r=f(t[0],t[1],t[2],t[3],t[4]) + return r + +def BR_Win32_WritePrivateProfileString(p0,p1,p2,p3): + a=rpr_getfp('BR_Win32_WritePrivateProfileString') + f=CFUNCTYPE(c_byte,c_char_p,c_char_p,c_char_p,c_char_p)(a) + t=(rpr_packsc(p0),rpr_packsc(p1),rpr_packsc(p2),rpr_packsc(p3)) + r=f(t[0],t[1],t[2],t[3]) + return r + +def CF_GetClipboard(p0,p1): + a=rpr_getfp('CF_GetClipboard') + f=CFUNCTYPE(None,c_char_p,c_int)(a) + t=(rpr_packs(p0),c_int(p1)) + f(t[0],t[1]) + return (rpr_unpacks(t[0]),p1) + +def CF_GetClipboardBig(p0): + a=rpr_getfp('CF_GetClipboardBig') + f=CFUNCTYPE(c_char_p,c_uint)(a) + t=(rpr_packp('WDL_FastString*',p0),) + r=f(t[0]) + return str(r.decode()) + +def CF_SetClipboard(p0): + a=rpr_getfp('CF_SetClipboard') + f=CFUNCTYPE(None,c_char_p)(a) + t=(rpr_packsc(p0),) + f(t[0]) + +def FNG_AddMidiNote(p0): + a=rpr_getfp('FNG_AddMidiNote') + f=CFUNCTYPE(c_uint,c_uint)(a) + t=(rpr_packp('RprMidiTake*',p0),) + r=f(t[0]) + return rpr_unpackp('RprMidiNote*',r) + +def FNG_AllocMidiTake(p0): + a=rpr_getfp('FNG_AllocMidiTake') + f=CFUNCTYPE(c_uint,c_uint)(a) + t=(rpr_packp('MediaItem_Take*',p0),) + r=f(t[0]) + return rpr_unpackp('RprMidiTake*',r) + +def FNG_CountMidiNotes(p0): + a=rpr_getfp('FNG_CountMidiNotes') + f=CFUNCTYPE(c_int,c_uint)(a) + t=(rpr_packp('RprMidiTake*',p0),) + r=f(t[0]) + return r + +def FNG_FreeMidiTake(p0): + a=rpr_getfp('FNG_FreeMidiTake') + f=CFUNCTYPE(None,c_uint)(a) + t=(rpr_packp('RprMidiTake*',p0),) + f(t[0]) + +def FNG_GetMidiNote(p0,p1): + a=rpr_getfp('FNG_GetMidiNote') + f=CFUNCTYPE(c_uint,c_uint,c_int)(a) + t=(rpr_packp('RprMidiTake*',p0),c_int(p1)) + r=f(t[0],t[1]) + return rpr_unpackp('RprMidiNote*',r) + +def FNG_GetMidiNoteIntProperty(p0,p1): + a=rpr_getfp('FNG_GetMidiNoteIntProperty') + f=CFUNCTYPE(c_int,c_uint,c_char_p)(a) + t=(rpr_packp('RprMidiNote*',p0),rpr_packsc(p1)) + r=f(t[0],t[1]) + return r + +def FNG_SetMidiNoteIntProperty(p0,p1,p2): + a=rpr_getfp('FNG_SetMidiNoteIntProperty') + f=CFUNCTYPE(None,c_uint,c_char_p,c_int)(a) + t=(rpr_packp('RprMidiNote*',p0),rpr_packsc(p1),c_int(p2)) + f(t[0],t[1],t[2]) + +def NF_AnalyzeTakeLoudness(p0,p1,p2,p3,p4,p5,p6,p7): + a=rpr_getfp('NF_AnalyzeTakeLoudness') + f=CFUNCTYPE(c_byte,c_uint,c_byte,c_void_p,c_void_p,c_void_p,c_void_p,c_void_p,c_void_p)(a) + t=(rpr_packp('MediaItem_Take*',p0),c_byte(p1),c_double(p2),c_double(p3),c_double(p4),c_double(p5),c_double(p6),c_double(p7)) + r=f(t[0],t[1],byref(t[2]),byref(t[3]),byref(t[4]),byref(t[5]),byref(t[6]),byref(t[7])) + return (r,p0,p1,float(t[2].value),float(t[3].value),float(t[4].value),float(t[5].value),float(t[6].value),float(t[7].value)) + +def NF_AnalyzeTakeLoudness2(p0,p1,p2,p3,p4,p5,p6,p7,p8,p9): + a=rpr_getfp('NF_AnalyzeTakeLoudness2') + f=CFUNCTYPE(c_byte,c_uint,c_byte,c_void_p,c_void_p,c_void_p,c_void_p,c_void_p,c_void_p,c_void_p,c_void_p)(a) + t=(rpr_packp('MediaItem_Take*',p0),c_byte(p1),c_double(p2),c_double(p3),c_double(p4),c_double(p5),c_double(p6),c_double(p7),c_double(p8),c_double(p9)) + r=f(t[0],t[1],byref(t[2]),byref(t[3]),byref(t[4]),byref(t[5]),byref(t[6]),byref(t[7]),byref(t[8]),byref(t[9])) + return (r,p0,p1,float(t[2].value),float(t[3].value),float(t[4].value),float(t[5].value),float(t[6].value),float(t[7].value),float(t[8].value),float(t[9].value)) + +def NF_AnalyzeTakeLoudness_IntegratedOnly(p0,p1): + a=rpr_getfp('NF_AnalyzeTakeLoudness_IntegratedOnly') + f=CFUNCTYPE(c_byte,c_uint,c_void_p)(a) + t=(rpr_packp('MediaItem_Take*',p0),c_double(p1)) + r=f(t[0],byref(t[1])) + return (r,p0,float(t[1].value)) + +def NF_GetMediaItemAverageRMS(p0): + a=rpr_getfp('NF_GetMediaItemAverageRMS') + f=CFUNCTYPE(c_double,c_uint)(a) + t=(rpr_packp('MediaItem*',p0),) + r=f(t[0]) + return r + +def NF_GetMediaItemMaxPeak(p0): + a=rpr_getfp('NF_GetMediaItemMaxPeak') + f=CFUNCTYPE(c_double,c_uint)(a) + t=(rpr_packp('MediaItem*',p0),) + r=f(t[0]) + return r + +def NF_GetMediaItemPeakRMS_NonWindowed(p0): + a=rpr_getfp('NF_GetMediaItemPeakRMS_NonWindowed') + f=CFUNCTYPE(c_double,c_uint)(a) + t=(rpr_packp('MediaItem*',p0),) + r=f(t[0]) + return r + +def NF_GetMediaItemPeakRMS_Windowed(p0): + a=rpr_getfp('NF_GetMediaItemPeakRMS_Windowed') + f=CFUNCTYPE(c_double,c_uint)(a) + t=(rpr_packp('MediaItem*',p0),) + r=f(t[0]) + return r + +def SN_FocusMIDIEditor(): + a=rpr_getfp('SN_FocusMIDIEditor') + f=CFUNCTYPE(None)(a) + f() + +def SNM_AddReceive(p0,p1,p2): + a=rpr_getfp('SNM_AddReceive') + f=CFUNCTYPE(c_byte,c_uint,c_uint,c_int)(a) + t=(rpr_packp('MediaTrack*',p0),rpr_packp('MediaTrack*',p1),c_int(p2)) + r=f(t[0],t[1],t[2]) + return r + +def SNM_AddTCPFXParm(p0,p1,p2): + a=rpr_getfp('SNM_AddTCPFXParm') + f=CFUNCTYPE(c_byte,c_uint,c_int,c_int)(a) + t=(rpr_packp('MediaTrack*',p0),c_int(p1),c_int(p2)) + r=f(t[0],t[1],t[2]) + return r + +def SNM_CreateFastString(p0): + a=rpr_getfp('SNM_CreateFastString') + f=CFUNCTYPE(c_uint,c_char_p)(a) + t=(rpr_packsc(p0),) + r=f(t[0]) + return rpr_unpackp('WDL_FastString*',r) + +def SNM_DeleteFastString(p0): + a=rpr_getfp('SNM_DeleteFastString') + f=CFUNCTYPE(None,c_uint)(a) + t=(rpr_packp('WDL_FastString*',p0),) + f(t[0]) + +def SNM_GetDoubleConfigVar(p0,p1): + a=rpr_getfp('SNM_GetDoubleConfigVar') + f=CFUNCTYPE(c_double,c_char_p,c_double)(a) + t=(rpr_packsc(p0),c_double(p1)) + r=f(t[0],t[1]) + return r + +def SNM_GetFastString(p0): + a=rpr_getfp('SNM_GetFastString') + f=CFUNCTYPE(c_char_p,c_uint)(a) + t=(rpr_packp('WDL_FastString*',p0),) + r=f(t[0]) + return str(r.decode()) + +def SNM_GetFastStringLength(p0): + a=rpr_getfp('SNM_GetFastStringLength') + f=CFUNCTYPE(c_int,c_uint)(a) + t=(rpr_packp('WDL_FastString*',p0),) + r=f(t[0]) + return r + +def SNM_GetIntConfigVar(p0,p1): + a=rpr_getfp('SNM_GetIntConfigVar') + f=CFUNCTYPE(c_int,c_char_p,c_int)(a) + t=(rpr_packsc(p0),c_int(p1)) + r=f(t[0],t[1]) + return r + +def SNM_GetMediaItemTakeByGUID(p0,p1): + a=rpr_getfp('SNM_GetMediaItemTakeByGUID') + f=CFUNCTYPE(c_uint,c_uint,c_char_p)(a) + t=(rpr_packp('ReaProject*',p0),rpr_packsc(p1)) + r=f(t[0],t[1]) + return rpr_unpackp('MediaItem_Take*',r) + +def SNM_GetProjectMarkerName(p0,p1,p2,p3): + a=rpr_getfp('SNM_GetProjectMarkerName') + f=CFUNCTYPE(c_byte,c_uint,c_int,c_byte,c_uint)(a) + t=(rpr_packp('ReaProject*',p0),c_int(p1),c_byte(p2),rpr_packp('WDL_FastString*',p3)) + r=f(t[0],t[1],t[2],t[3]) + return r + +def SNM_GetSetObjectState(p0,p1,p2,p3): + a=rpr_getfp('SNM_GetSetObjectState') + f=CFUNCTYPE(c_byte,c_uint,c_uint,c_byte,c_byte)(a) + t=(rpr_packp('void*',p0),rpr_packp('WDL_FastString*',p1),c_byte(p2),c_byte(p3)) + r=f(t[0],t[1],t[2],t[3]) + return r + +def SNM_GetSetSourceState(p0,p1,p2,p3): + a=rpr_getfp('SNM_GetSetSourceState') + f=CFUNCTYPE(c_byte,c_uint,c_int,c_uint,c_byte)(a) + t=(rpr_packp('MediaItem*',p0),c_int(p1),rpr_packp('WDL_FastString*',p2),c_byte(p3)) + r=f(t[0],t[1],t[2],t[3]) + return r + +def SNM_GetSetSourceState2(p0,p1,p2): + a=rpr_getfp('SNM_GetSetSourceState2') + f=CFUNCTYPE(c_byte,c_uint,c_uint,c_byte)(a) + t=(rpr_packp('MediaItem_Take*',p0),rpr_packp('WDL_FastString*',p1),c_byte(p2)) + r=f(t[0],t[1],t[2]) + return r + +def SNM_GetSourceType(p0,p1): + a=rpr_getfp('SNM_GetSourceType') + f=CFUNCTYPE(c_byte,c_uint,c_uint)(a) + t=(rpr_packp('MediaItem_Take*',p0),rpr_packp('WDL_FastString*',p1)) + r=f(t[0],t[1]) + return r + +def SNM_MoveOrRemoveTrackFX(p0,p1,p2): + a=rpr_getfp('SNM_MoveOrRemoveTrackFX') + f=CFUNCTYPE(c_byte,c_uint,c_int,c_int)(a) + t=(rpr_packp('MediaTrack*',p0),c_int(p1),c_int(p2)) + r=f(t[0],t[1],t[2]) + return r + +def SNM_ReadMediaFileTag(p0,p1,p2,p3): + a=rpr_getfp('SNM_ReadMediaFileTag') + f=CFUNCTYPE(c_byte,c_char_p,c_char_p,c_char_p,c_int)(a) + t=(rpr_packsc(p0),rpr_packsc(p1),rpr_packs(p2),c_int(p3)) + r=f(t[0],t[1],t[2],t[3]) + return (r,p0,p1,rpr_unpacks(t[2]),p3) + +def SNM_RemoveReceive(p0,p1): + a=rpr_getfp('SNM_RemoveReceive') + f=CFUNCTYPE(c_byte,c_uint,c_int)(a) + t=(rpr_packp('MediaTrack*',p0),c_int(p1)) + r=f(t[0],t[1]) + return r + +def SNM_RemoveReceivesFrom(p0,p1): + a=rpr_getfp('SNM_RemoveReceivesFrom') + f=CFUNCTYPE(c_byte,c_uint,c_uint)(a) + t=(rpr_packp('MediaTrack*',p0),rpr_packp('MediaTrack*',p1)) + r=f(t[0],t[1]) + return r + +def SNM_SelectResourceBookmark(p0): + a=rpr_getfp('SNM_SelectResourceBookmark') + f=CFUNCTYPE(c_int,c_char_p)(a) + t=(rpr_packsc(p0),) + r=f(t[0]) + return r + +def SNM_SetDoubleConfigVar(p0,p1): + a=rpr_getfp('SNM_SetDoubleConfigVar') + f=CFUNCTYPE(c_byte,c_char_p,c_double)(a) + t=(rpr_packsc(p0),c_double(p1)) + r=f(t[0],t[1]) + return r + +def SNM_SetFastString(p0,p1): + a=rpr_getfp('SNM_SetFastString') + f=CFUNCTYPE(c_uint,c_uint,c_char_p)(a) + t=(rpr_packp('WDL_FastString*',p0),rpr_packsc(p1)) + r=f(t[0],t[1]) + return rpr_unpackp('WDL_FastString*',r) + +def SNM_SetIntConfigVar(p0,p1): + a=rpr_getfp('SNM_SetIntConfigVar') + f=CFUNCTYPE(c_byte,c_char_p,c_int)(a) + t=(rpr_packsc(p0),c_int(p1)) + r=f(t[0],t[1]) + return r + +def SNM_SetProjectMarker(p0,p1,p2,p3,p4,p5,p6): + a=rpr_getfp('SNM_SetProjectMarker') + f=CFUNCTYPE(c_byte,c_uint,c_int,c_byte,c_double,c_double,c_char_p,c_int)(a) + t=(rpr_packp('ReaProject*',p0),c_int(p1),c_byte(p2),c_double(p3),c_double(p4),rpr_packsc(p5),c_int(p6)) + r=f(t[0],t[1],t[2],t[3],t[4],t[5],t[6]) + return r + +def SNM_TagMediaFile(p0,p1,p2): + a=rpr_getfp('SNM_TagMediaFile') + f=CFUNCTYPE(c_byte,c_char_p,c_char_p,c_char_p)(a) + t=(rpr_packsc(p0),rpr_packsc(p1),rpr_packsc(p2)) + r=f(t[0],t[1],t[2]) + return r + +def SNM_TieResourceSlotActions(p0): + a=rpr_getfp('SNM_TieResourceSlotActions') + f=CFUNCTYPE(None,c_int)(a) + t=(c_int(p0),) + f(t[0]) + +def ULT_GetMediaItemNote(p0): + a=rpr_getfp('ULT_GetMediaItemNote') + f=CFUNCTYPE(c_char_p,c_uint)(a) + t=(rpr_packp('MediaItem*',p0),) + r=f(t[0]) + return str(r.decode()) + +def ULT_SetMediaItemNote(p0,p1): + a=rpr_getfp('ULT_SetMediaItemNote') + f=CFUNCTYPE(None,c_uint,c_char_p)(a) + t=(rpr_packp('MediaItem*',p0),rpr_packsc(p1)) + f(t[0],t[1]) + diff --git a/Scripts/sws_python64.py b/Scripts/sws_python64.py new file mode 100644 index 0000000..4519113 --- /dev/null +++ b/Scripts/sws_python64.py @@ -0,0 +1,748 @@ +from reaper_python import * + +def BR_EnvAlloc(p0,p1): + a=rpr_getfp('BR_EnvAlloc') + f=CFUNCTYPE(c_uint64,c_uint64,c_byte)(a) + t=(rpr_packp('TrackEnvelope*',p0),c_byte(p1)) + r=f(t[0],t[1]) + return rpr_unpackp('BR_Envelope*',r) + +def BR_EnvCountPoints(p0): + a=rpr_getfp('BR_EnvCountPoints') + f=CFUNCTYPE(c_int,c_uint64)(a) + t=(rpr_packp('BR_Envelope*',p0),) + r=f(t[0]) + return r + +def BR_EnvDeletePoint(p0,p1): + a=rpr_getfp('BR_EnvDeletePoint') + f=CFUNCTYPE(c_byte,c_uint64,c_int)(a) + t=(rpr_packp('BR_Envelope*',p0),c_int(p1)) + r=f(t[0],t[1]) + return r + +def BR_EnvFind(p0,p1,p2): + a=rpr_getfp('BR_EnvFind') + f=CFUNCTYPE(c_int,c_uint64,c_double,c_double)(a) + t=(rpr_packp('BR_Envelope*',p0),c_double(p1),c_double(p2)) + r=f(t[0],t[1],t[2]) + return r + +def BR_EnvFindNext(p0,p1): + a=rpr_getfp('BR_EnvFindNext') + f=CFUNCTYPE(c_int,c_uint64,c_double)(a) + t=(rpr_packp('BR_Envelope*',p0),c_double(p1)) + r=f(t[0],t[1]) + return r + +def BR_EnvFindPrevious(p0,p1): + a=rpr_getfp('BR_EnvFindPrevious') + f=CFUNCTYPE(c_int,c_uint64,c_double)(a) + t=(rpr_packp('BR_Envelope*',p0),c_double(p1)) + r=f(t[0],t[1]) + return r + +def BR_EnvFree(p0,p1): + a=rpr_getfp('BR_EnvFree') + f=CFUNCTYPE(c_byte,c_uint64,c_byte)(a) + t=(rpr_packp('BR_Envelope*',p0),c_byte(p1)) + r=f(t[0],t[1]) + return r + +def BR_EnvGetParentTake(p0): + a=rpr_getfp('BR_EnvGetParentTake') + f=CFUNCTYPE(c_uint64,c_uint64)(a) + t=(rpr_packp('BR_Envelope*',p0),) + r=f(t[0]) + return rpr_unpackp('MediaItem_Take*',r) + +def BR_EnvGetParentTrack(p0): + a=rpr_getfp('BR_EnvGetParentTrack') + f=CFUNCTYPE(c_uint64,c_uint64)(a) + t=(rpr_packp('BR_Envelope*',p0),) + r=f(t[0]) + return rpr_unpackp('MediaItem*',r) + +def BR_EnvGetPoint(p0,p1,p2,p3,p4,p5,p6): + a=rpr_getfp('BR_EnvGetPoint') + f=CFUNCTYPE(c_byte,c_uint64,c_int,c_void_p,c_void_p,c_void_p,c_void_p,c_void_p)(a) + t=(rpr_packp('BR_Envelope*',p0),c_int(p1),c_double(p2),c_double(p3),c_int(p4),c_byte(p5),c_double(p6)) + r=f(t[0],t[1],byref(t[2]),byref(t[3]),byref(t[4]),byref(t[5]),byref(t[6])) + return (r,p0,p1,float(t[2].value),float(t[3].value),int(t[4].value),int(t[5].value),float(t[6].value)) + +def BR_EnvGetProperties(p0,p1,p2,p3,p4,p5,p6,p7,p8,p9,p10,p11): + a=rpr_getfp('BR_EnvGetProperties') + f=CFUNCTYPE(None,c_uint64,c_void_p,c_void_p,c_void_p,c_void_p,c_void_p,c_void_p,c_void_p,c_void_p,c_void_p,c_void_p,c_void_p)(a) + t=(rpr_packp('BR_Envelope*',p0),c_byte(p1),c_byte(p2),c_byte(p3),c_byte(p4),c_int(p5),c_int(p6),c_double(p7),c_double(p8),c_double(p9),c_int(p10),c_byte(p11)) + f(t[0],byref(t[1]),byref(t[2]),byref(t[3]),byref(t[4]),byref(t[5]),byref(t[6]),byref(t[7]),byref(t[8]),byref(t[9]),byref(t[10]),byref(t[11])) + return (p0,int(t[1].value),int(t[2].value),int(t[3].value),int(t[4].value),int(t[5].value),int(t[6].value),float(t[7].value),float(t[8].value),float(t[9].value),int(t[10].value),int(t[11].value)) + +def BR_EnvSetPoint(p0,p1,p2,p3,p4,p5,p6): + a=rpr_getfp('BR_EnvSetPoint') + f=CFUNCTYPE(c_byte,c_uint64,c_int,c_double,c_double,c_int,c_byte,c_double)(a) + t=(rpr_packp('BR_Envelope*',p0),c_int(p1),c_double(p2),c_double(p3),c_int(p4),c_byte(p5),c_double(p6)) + r=f(t[0],t[1],t[2],t[3],t[4],t[5],t[6]) + return r + +def BR_EnvSetProperties(p0,p1,p2,p3,p4,p5,p6,p7): + a=rpr_getfp('BR_EnvSetProperties') + f=CFUNCTYPE(None,c_uint64,c_byte,c_byte,c_byte,c_byte,c_int,c_int,c_byte)(a) + t=(rpr_packp('BR_Envelope*',p0),c_byte(p1),c_byte(p2),c_byte(p3),c_byte(p4),c_int(p5),c_int(p6),c_byte(p7)) + f(t[0],t[1],t[2],t[3],t[4],t[5],t[6],t[7]) + +def BR_EnvSortPoints(p0): + a=rpr_getfp('BR_EnvSortPoints') + f=CFUNCTYPE(None,c_uint64)(a) + t=(rpr_packp('BR_Envelope*',p0),) + f(t[0]) + +def BR_EnvValueAtPos(p0,p1): + a=rpr_getfp('BR_EnvValueAtPos') + f=CFUNCTYPE(c_double,c_uint64,c_double)(a) + t=(rpr_packp('BR_Envelope*',p0),c_double(p1)) + r=f(t[0],t[1]) + return r + +def BR_GetArrangeView(p0,p1,p2): + a=rpr_getfp('BR_GetArrangeView') + f=CFUNCTYPE(None,c_uint64,c_void_p,c_void_p)(a) + t=(rpr_packp('ReaProject*',p0),c_double(p1),c_double(p2)) + f(t[0],byref(t[1]),byref(t[2])) + return (p0,float(t[1].value),float(t[2].value)) + +def BR_GetClosestGridDivision(p0): + a=rpr_getfp('BR_GetClosestGridDivision') + f=CFUNCTYPE(c_double,c_double)(a) + t=(c_double(p0),) + r=f(t[0]) + return r + +def BR_GetCurrentTheme(p0,p1,p2,p3): + a=rpr_getfp('BR_GetCurrentTheme') + f=CFUNCTYPE(None,c_char_p,c_int,c_char_p,c_int)(a) + t=(rpr_packs(p0),c_int(p1),rpr_packs(p2),c_int(p3)) + f(t[0],t[1],t[2],t[3]) + return (rpr_unpacks(t[0]),p1,rpr_unpacks(t[2]),p3) + +def BR_GetMediaItemByGUID(p0,p1): + a=rpr_getfp('BR_GetMediaItemByGUID') + f=CFUNCTYPE(c_uint64,c_uint64,c_char_p)(a) + t=(rpr_packp('ReaProject*',p0),rpr_packsc(p1)) + r=f(t[0],t[1]) + return rpr_unpackp('MediaItem*',r) + +def BR_GetMediaItemGUID(p0,p1,p2): + a=rpr_getfp('BR_GetMediaItemGUID') + f=CFUNCTYPE(None,c_uint64,c_char_p,c_int)(a) + t=(rpr_packp('MediaItem*',p0),rpr_packs(p1),c_int(p2)) + f(t[0],t[1],t[2]) + return (p0,rpr_unpacks(t[1]),p2) + +def BR_GetMediaItemImageResource(p0,p1,p2,p3): + a=rpr_getfp('BR_GetMediaItemImageResource') + f=CFUNCTYPE(c_byte,c_uint64,c_char_p,c_int,c_void_p)(a) + t=(rpr_packp('MediaItem*',p0),rpr_packs(p1),c_int(p2),c_int(p3)) + r=f(t[0],t[1],t[2],byref(t[3])) + return (r,p0,rpr_unpacks(t[1]),p2,int(t[3].value)) + +def BR_GetMediaItemTakeGUID(p0,p1,p2): + a=rpr_getfp('BR_GetMediaItemTakeGUID') + f=CFUNCTYPE(None,c_uint64,c_char_p,c_int)(a) + t=(rpr_packp('MediaItem_Take*',p0),rpr_packs(p1),c_int(p2)) + f(t[0],t[1],t[2]) + return (p0,rpr_unpacks(t[1]),p2) + +def BR_GetMediaSourceProperties(p0,p1,p2,p3,p4,p5): + a=rpr_getfp('BR_GetMediaSourceProperties') + f=CFUNCTYPE(c_byte,c_uint64,c_void_p,c_void_p,c_void_p,c_void_p,c_void_p)(a) + t=(rpr_packp('MediaItem_Take*',p0),c_byte(p1),c_double(p2),c_double(p3),c_double(p4),c_byte(p5)) + r=f(t[0],byref(t[1]),byref(t[2]),byref(t[3]),byref(t[4]),byref(t[5])) + return (r,p0,int(t[1].value),float(t[2].value),float(t[3].value),float(t[4].value),int(t[5].value)) + +def BR_GetMediaTrackByGUID(p0,p1): + a=rpr_getfp('BR_GetMediaTrackByGUID') + f=CFUNCTYPE(c_uint64,c_uint64,c_char_p)(a) + t=(rpr_packp('ReaProject*',p0),rpr_packsc(p1)) + r=f(t[0],t[1]) + return rpr_unpackp('MediaTrack*',r) + +def BR_GetMediaTrackFreezeCount(p0): + a=rpr_getfp('BR_GetMediaTrackFreezeCount') + f=CFUNCTYPE(c_int,c_uint64)(a) + t=(rpr_packp('MediaTrack*',p0),) + r=f(t[0]) + return r + +def BR_GetMediaTrackGUID(p0,p1,p2): + a=rpr_getfp('BR_GetMediaTrackGUID') + f=CFUNCTYPE(None,c_uint64,c_char_p,c_int)(a) + t=(rpr_packp('MediaTrack*',p0),rpr_packs(p1),c_int(p2)) + f(t[0],t[1],t[2]) + return (p0,rpr_unpacks(t[1]),p2) + +def BR_GetMediaTrackLayouts(p0,p1,p2,p3,p4): + a=rpr_getfp('BR_GetMediaTrackLayouts') + f=CFUNCTYPE(None,c_uint64,c_char_p,c_int,c_char_p,c_int)(a) + t=(rpr_packp('MediaTrack*',p0),rpr_packs(p1),c_int(p2),rpr_packs(p3),c_int(p4)) + f(t[0],t[1],t[2],t[3],t[4]) + return (p0,rpr_unpacks(t[1]),p2,rpr_unpacks(t[3]),p4) + +def BR_GetMediaTrackSendInfo_Envelope(p0,p1,p2,p3): + a=rpr_getfp('BR_GetMediaTrackSendInfo_Envelope') + f=CFUNCTYPE(c_uint64,c_uint64,c_int,c_int,c_int)(a) + t=(rpr_packp('MediaTrack*',p0),c_int(p1),c_int(p2),c_int(p3)) + r=f(t[0],t[1],t[2],t[3]) + return rpr_unpackp('TrackEnvelope*',r) + +def BR_GetMediaTrackSendInfo_Track(p0,p1,p2,p3): + a=rpr_getfp('BR_GetMediaTrackSendInfo_Track') + f=CFUNCTYPE(c_uint64,c_uint64,c_int,c_int,c_int)(a) + t=(rpr_packp('MediaTrack*',p0),c_int(p1),c_int(p2),c_int(p3)) + r=f(t[0],t[1],t[2],t[3]) + return rpr_unpackp('MediaTrack*',r) + +def BR_GetMidiSourceLenPPQ(p0): + a=rpr_getfp('BR_GetMidiSourceLenPPQ') + f=CFUNCTYPE(c_double,c_uint64)(a) + t=(rpr_packp('MediaItem_Take*',p0),) + r=f(t[0]) + return r + +def BR_GetMidiTakePoolGUID(p0,p1,p2): + a=rpr_getfp('BR_GetMidiTakePoolGUID') + f=CFUNCTYPE(c_byte,c_uint64,c_char_p,c_int)(a) + t=(rpr_packp('MediaItem_Take*',p0),rpr_packs(p1),c_int(p2)) + r=f(t[0],t[1],t[2]) + return (r,p0,rpr_unpacks(t[1]),p2) + +def BR_GetMidiTakeTempoInfo(p0,p1,p2,p3,p4): + a=rpr_getfp('BR_GetMidiTakeTempoInfo') + f=CFUNCTYPE(c_byte,c_uint64,c_void_p,c_void_p,c_void_p,c_void_p)(a) + t=(rpr_packp('MediaItem_Take*',p0),c_byte(p1),c_double(p2),c_int(p3),c_int(p4)) + r=f(t[0],byref(t[1]),byref(t[2]),byref(t[3]),byref(t[4])) + return (r,p0,int(t[1].value),float(t[2].value),int(t[3].value),int(t[4].value)) + +def BR_GetMouseCursorContext(p0,p1,p2,p3,p4,p5): + a=rpr_getfp('BR_GetMouseCursorContext') + f=CFUNCTYPE(None,c_char_p,c_int,c_char_p,c_int,c_char_p,c_int)(a) + t=(rpr_packs(p0),c_int(p1),rpr_packs(p2),c_int(p3),rpr_packs(p4),c_int(p5)) + f(t[0],t[1],t[2],t[3],t[4],t[5]) + return (rpr_unpacks(t[0]),p1,rpr_unpacks(t[2]),p3,rpr_unpacks(t[4]),p5) + +def BR_GetMouseCursorContext_Envelope(p0): + a=rpr_getfp('BR_GetMouseCursorContext_Envelope') + f=CFUNCTYPE(c_uint64,c_void_p)(a) + t=(c_byte(p0),) + r=f(byref(t[0])) + return (rpr_unpackp('TrackEnvelope*',r),int(t[0].value)) + +def BR_GetMouseCursorContext_Item(): + a=rpr_getfp('BR_GetMouseCursorContext_Item') + f=CFUNCTYPE(c_uint64)(a) + r=f() + return rpr_unpackp('MediaItem*',r) + +def BR_GetMouseCursorContext_MIDI(p0,p1,p2,p3,p4): + a=rpr_getfp('BR_GetMouseCursorContext_MIDI') + f=CFUNCTYPE(c_uint64,c_void_p,c_void_p,c_void_p,c_void_p,c_void_p)(a) + t=(c_byte(p0),c_int(p1),c_int(p2),c_int(p3),c_int(p4)) + r=f(byref(t[0]),byref(t[1]),byref(t[2]),byref(t[3]),byref(t[4])) + return (rpr_unpackp('void*',r),int(t[0].value),int(t[1].value),int(t[2].value),int(t[3].value),int(t[4].value)) + +def BR_GetMouseCursorContext_Position(): + a=rpr_getfp('BR_GetMouseCursorContext_Position') + f=CFUNCTYPE(c_double)(a) + r=f() + return r + +def BR_GetMouseCursorContext_StretchMarker(): + a=rpr_getfp('BR_GetMouseCursorContext_StretchMarker') + f=CFUNCTYPE(c_int)(a) + r=f() + return r + +def BR_GetMouseCursorContext_Take(): + a=rpr_getfp('BR_GetMouseCursorContext_Take') + f=CFUNCTYPE(c_uint64)(a) + r=f() + return rpr_unpackp('MediaItem_Take*',r) + +def BR_GetMouseCursorContext_Track(): + a=rpr_getfp('BR_GetMouseCursorContext_Track') + f=CFUNCTYPE(c_uint64)(a) + r=f() + return rpr_unpackp('MediaTrack*',r) + +def BR_GetNextGridDivision(p0): + a=rpr_getfp('BR_GetNextGridDivision') + f=CFUNCTYPE(c_double,c_double)(a) + t=(c_double(p0),) + r=f(t[0]) + return r + +def BR_GetPrevGridDivision(p0): + a=rpr_getfp('BR_GetPrevGridDivision') + f=CFUNCTYPE(c_double,c_double)(a) + t=(c_double(p0),) + r=f(t[0]) + return r + +def BR_GetSetTrackSendInfo(p0,p1,p2,p3,p4,p5): + a=rpr_getfp('BR_GetSetTrackSendInfo') + f=CFUNCTYPE(c_double,c_uint64,c_int,c_int,c_char_p,c_byte,c_double)(a) + t=(rpr_packp('MediaTrack*',p0),c_int(p1),c_int(p2),rpr_packsc(p3),c_byte(p4),c_double(p5)) + r=f(t[0],t[1],t[2],t[3],t[4],t[5]) + return r + +def BR_GetTakeFXCount(p0): + a=rpr_getfp('BR_GetTakeFXCount') + f=CFUNCTYPE(c_int,c_uint64)(a) + t=(rpr_packp('MediaItem_Take*',p0),) + r=f(t[0]) + return r + +def BR_IsMidiOpenInInlineEditor(p0): + a=rpr_getfp('BR_IsMidiOpenInInlineEditor') + f=CFUNCTYPE(c_byte,c_uint64)(a) + t=(rpr_packp('MediaItem_Take*',p0),) + r=f(t[0]) + return r + +def BR_IsTakeMidi(p0,p1): + a=rpr_getfp('BR_IsTakeMidi') + f=CFUNCTYPE(c_byte,c_uint64,c_void_p)(a) + t=(rpr_packp('MediaItem_Take*',p0),c_byte(p1)) + r=f(t[0],byref(t[1])) + return (r,p0,int(t[1].value)) + +def BR_ItemAtMouseCursor(p0): + a=rpr_getfp('BR_ItemAtMouseCursor') + f=CFUNCTYPE(c_uint64,c_void_p)(a) + t=(c_double(p0),) + r=f(byref(t[0])) + return (rpr_unpackp('MediaItem*',r),float(t[0].value)) + +def BR_MIDI_CCLaneRemove(p0,p1): + a=rpr_getfp('BR_MIDI_CCLaneRemove') + f=CFUNCTYPE(c_byte,c_uint64,c_int)(a) + t=(rpr_packp('HWND',p0),c_int(p1)) + r=f(t[0],t[1]) + return r + +def BR_MIDI_CCLaneReplace(p0,p1,p2): + a=rpr_getfp('BR_MIDI_CCLaneReplace') + f=CFUNCTYPE(c_byte,c_uint64,c_int,c_int)(a) + t=(rpr_packp('HWND',p0),c_int(p1),c_int(p2)) + r=f(t[0],t[1],t[2]) + return r + +def BR_PositionAtMouseCursor(p0): + a=rpr_getfp('BR_PositionAtMouseCursor') + f=CFUNCTYPE(c_double,c_byte)(a) + t=(c_byte(p0),) + r=f(t[0]) + return r + +def BR_SetArrangeView(p0,p1,p2): + a=rpr_getfp('BR_SetArrangeView') + f=CFUNCTYPE(None,c_uint64,c_double,c_double)(a) + t=(rpr_packp('ReaProject*',p0),c_double(p1),c_double(p2)) + f(t[0],t[1],t[2]) + +def BR_SetItemEdges(p0,p1,p2): + a=rpr_getfp('BR_SetItemEdges') + f=CFUNCTYPE(c_byte,c_uint64,c_double,c_double)(a) + t=(rpr_packp('MediaItem*',p0),c_double(p1),c_double(p2)) + r=f(t[0],t[1],t[2]) + return r + +def BR_SetMediaItemImageResource(p0,p1,p2): + a=rpr_getfp('BR_SetMediaItemImageResource') + f=CFUNCTYPE(None,c_uint64,c_char_p,c_int)(a) + t=(rpr_packp('MediaItem*',p0),rpr_packsc(p1),c_int(p2)) + f(t[0],t[1],t[2]) + +def BR_SetMediaSourceProperties(p0,p1,p2,p3,p4,p5): + a=rpr_getfp('BR_SetMediaSourceProperties') + f=CFUNCTYPE(c_byte,c_uint64,c_byte,c_double,c_double,c_double,c_byte)(a) + t=(rpr_packp('MediaItem_Take*',p0),c_byte(p1),c_double(p2),c_double(p3),c_double(p4),c_byte(p5)) + r=f(t[0],t[1],t[2],t[3],t[4],t[5]) + return r + +def BR_SetMediaTrackLayouts(p0,p1,p2): + a=rpr_getfp('BR_SetMediaTrackLayouts') + f=CFUNCTYPE(c_byte,c_uint64,c_char_p,c_char_p)(a) + t=(rpr_packp('MediaTrack*',p0),rpr_packsc(p1),rpr_packsc(p2)) + r=f(t[0],t[1],t[2]) + return r + +def BR_SetMidiTakeTempoInfo(p0,p1,p2,p3,p4): + a=rpr_getfp('BR_SetMidiTakeTempoInfo') + f=CFUNCTYPE(c_byte,c_uint64,c_byte,c_double,c_int,c_int)(a) + t=(rpr_packp('MediaItem_Take*',p0),c_byte(p1),c_double(p2),c_int(p3),c_int(p4)) + r=f(t[0],t[1],t[2],t[3],t[4]) + return r + +def BR_SetTakeSourceFromFile(p0,p1,p2): + a=rpr_getfp('BR_SetTakeSourceFromFile') + f=CFUNCTYPE(c_byte,c_uint64,c_char_p,c_byte)(a) + t=(rpr_packp('MediaItem_Take*',p0),rpr_packsc(p1),c_byte(p2)) + r=f(t[0],t[1],t[2]) + return r + +def BR_SetTakeSourceFromFile2(p0,p1,p2,p3): + a=rpr_getfp('BR_SetTakeSourceFromFile2') + f=CFUNCTYPE(c_byte,c_uint64,c_char_p,c_byte,c_byte)(a) + t=(rpr_packp('MediaItem_Take*',p0),rpr_packsc(p1),c_byte(p2),c_byte(p3)) + r=f(t[0],t[1],t[2],t[3]) + return r + +def BR_TakeAtMouseCursor(p0): + a=rpr_getfp('BR_TakeAtMouseCursor') + f=CFUNCTYPE(c_uint64,c_void_p)(a) + t=(c_double(p0),) + r=f(byref(t[0])) + return (rpr_unpackp('MediaItem_Take*',r),float(t[0].value)) + +def BR_TrackAtMouseCursor(p0,p1): + a=rpr_getfp('BR_TrackAtMouseCursor') + f=CFUNCTYPE(c_uint64,c_void_p,c_void_p)(a) + t=(c_int(p0),c_double(p1)) + r=f(byref(t[0]),byref(t[1])) + return (rpr_unpackp('MediaTrack*',r),int(t[0].value),float(t[1].value)) + +def BR_TrackFX_GetFXModuleName(p0,p1,p2,p3): + a=rpr_getfp('BR_TrackFX_GetFXModuleName') + f=CFUNCTYPE(c_byte,c_uint64,c_int,c_char_p,c_int)(a) + t=(rpr_packp('MediaTrack*',p0),c_int(p1),rpr_packs(p2),c_int(p3)) + r=f(t[0],t[1],t[2],t[3]) + return (r,p0,p1,rpr_unpacks(t[2]),p3) + +def BR_Win32_GetPrivateProfileString(p0,p1,p2,p3,p4,p5): + a=rpr_getfp('BR_Win32_GetPrivateProfileString') + f=CFUNCTYPE(c_int,c_char_p,c_char_p,c_char_p,c_char_p,c_char_p,c_int)(a) + t=(rpr_packsc(p0),rpr_packsc(p1),rpr_packsc(p2),rpr_packsc(p3),rpr_packs(p4),c_int(p5)) + r=f(t[0],t[1],t[2],t[3],t[4],t[5]) + return (r,p0,p1,p2,p3,rpr_unpacks(t[4]),p5) + +def BR_Win32_ShellExecute(p0,p1,p2,p3,p4): + a=rpr_getfp('BR_Win32_ShellExecute') + f=CFUNCTYPE(c_int,c_char_p,c_char_p,c_char_p,c_char_p,c_int)(a) + t=(rpr_packsc(p0),rpr_packsc(p1),rpr_packsc(p2),rpr_packsc(p3),c_int(p4)) + r=f(t[0],t[1],t[2],t[3],t[4]) + return r + +def BR_Win32_WritePrivateProfileString(p0,p1,p2,p3): + a=rpr_getfp('BR_Win32_WritePrivateProfileString') + f=CFUNCTYPE(c_byte,c_char_p,c_char_p,c_char_p,c_char_p)(a) + t=(rpr_packsc(p0),rpr_packsc(p1),rpr_packsc(p2),rpr_packsc(p3)) + r=f(t[0],t[1],t[2],t[3]) + return r + +def CF_GetClipboard(p0,p1): + a=rpr_getfp('CF_GetClipboard') + f=CFUNCTYPE(None,c_char_p,c_int)(a) + t=(rpr_packs(p0),c_int(p1)) + f(t[0],t[1]) + return (rpr_unpacks(t[0]),p1) + +def CF_GetClipboardBig(p0): + a=rpr_getfp('CF_GetClipboardBig') + f=CFUNCTYPE(c_char_p,c_uint64)(a) + t=(rpr_packp('WDL_FastString*',p0),) + r=f(t[0]) + return str(r.decode()) + +def CF_SetClipboard(p0): + a=rpr_getfp('CF_SetClipboard') + f=CFUNCTYPE(None,c_char_p)(a) + t=(rpr_packsc(p0),) + f(t[0]) + +def FNG_AddMidiNote(p0): + a=rpr_getfp('FNG_AddMidiNote') + f=CFUNCTYPE(c_uint64,c_uint64)(a) + t=(rpr_packp('RprMidiTake*',p0),) + r=f(t[0]) + return rpr_unpackp('RprMidiNote*',r) + +def FNG_AllocMidiTake(p0): + a=rpr_getfp('FNG_AllocMidiTake') + f=CFUNCTYPE(c_uint64,c_uint64)(a) + t=(rpr_packp('MediaItem_Take*',p0),) + r=f(t[0]) + return rpr_unpackp('RprMidiTake*',r) + +def FNG_CountMidiNotes(p0): + a=rpr_getfp('FNG_CountMidiNotes') + f=CFUNCTYPE(c_int,c_uint64)(a) + t=(rpr_packp('RprMidiTake*',p0),) + r=f(t[0]) + return r + +def FNG_FreeMidiTake(p0): + a=rpr_getfp('FNG_FreeMidiTake') + f=CFUNCTYPE(None,c_uint64)(a) + t=(rpr_packp('RprMidiTake*',p0),) + f(t[0]) + +def FNG_GetMidiNote(p0,p1): + a=rpr_getfp('FNG_GetMidiNote') + f=CFUNCTYPE(c_uint64,c_uint64,c_int)(a) + t=(rpr_packp('RprMidiTake*',p0),c_int(p1)) + r=f(t[0],t[1]) + return rpr_unpackp('RprMidiNote*',r) + +def FNG_GetMidiNoteIntProperty(p0,p1): + a=rpr_getfp('FNG_GetMidiNoteIntProperty') + f=CFUNCTYPE(c_int,c_uint64,c_char_p)(a) + t=(rpr_packp('RprMidiNote*',p0),rpr_packsc(p1)) + r=f(t[0],t[1]) + return r + +def FNG_SetMidiNoteIntProperty(p0,p1,p2): + a=rpr_getfp('FNG_SetMidiNoteIntProperty') + f=CFUNCTYPE(None,c_uint64,c_char_p,c_int)(a) + t=(rpr_packp('RprMidiNote*',p0),rpr_packsc(p1),c_int(p2)) + f(t[0],t[1],t[2]) + +def NF_AnalyzeTakeLoudness(p0,p1,p2,p3,p4,p5,p6,p7): + a=rpr_getfp('NF_AnalyzeTakeLoudness') + f=CFUNCTYPE(c_byte,c_uint64,c_byte,c_void_p,c_void_p,c_void_p,c_void_p,c_void_p,c_void_p)(a) + t=(rpr_packp('MediaItem_Take*',p0),c_byte(p1),c_double(p2),c_double(p3),c_double(p4),c_double(p5),c_double(p6),c_double(p7)) + r=f(t[0],t[1],byref(t[2]),byref(t[3]),byref(t[4]),byref(t[5]),byref(t[6]),byref(t[7])) + return (r,p0,p1,float(t[2].value),float(t[3].value),float(t[4].value),float(t[5].value),float(t[6].value),float(t[7].value)) + +def NF_AnalyzeTakeLoudness2(p0,p1,p2,p3,p4,p5,p6,p7,p8,p9): + a=rpr_getfp('NF_AnalyzeTakeLoudness2') + f=CFUNCTYPE(c_byte,c_uint64,c_byte,c_void_p,c_void_p,c_void_p,c_void_p,c_void_p,c_void_p,c_void_p,c_void_p)(a) + t=(rpr_packp('MediaItem_Take*',p0),c_byte(p1),c_double(p2),c_double(p3),c_double(p4),c_double(p5),c_double(p6),c_double(p7),c_double(p8),c_double(p9)) + r=f(t[0],t[1],byref(t[2]),byref(t[3]),byref(t[4]),byref(t[5]),byref(t[6]),byref(t[7]),byref(t[8]),byref(t[9])) + return (r,p0,p1,float(t[2].value),float(t[3].value),float(t[4].value),float(t[5].value),float(t[6].value),float(t[7].value),float(t[8].value),float(t[9].value)) + +def NF_AnalyzeTakeLoudness_IntegratedOnly(p0,p1): + a=rpr_getfp('NF_AnalyzeTakeLoudness_IntegratedOnly') + f=CFUNCTYPE(c_byte,c_uint64,c_void_p)(a) + t=(rpr_packp('MediaItem_Take*',p0),c_double(p1)) + r=f(t[0],byref(t[1])) + return (r,p0,float(t[1].value)) + +def NF_GetMediaItemAverageRMS(p0): + a=rpr_getfp('NF_GetMediaItemAverageRMS') + f=CFUNCTYPE(c_double,c_uint64)(a) + t=(rpr_packp('MediaItem*',p0),) + r=f(t[0]) + return r + +def NF_GetMediaItemMaxPeak(p0): + a=rpr_getfp('NF_GetMediaItemMaxPeak') + f=CFUNCTYPE(c_double,c_uint64)(a) + t=(rpr_packp('MediaItem*',p0),) + r=f(t[0]) + return r + +def NF_GetMediaItemPeakRMS_NonWindowed(p0): + a=rpr_getfp('NF_GetMediaItemPeakRMS_NonWindowed') + f=CFUNCTYPE(c_double,c_uint64)(a) + t=(rpr_packp('MediaItem*',p0),) + r=f(t[0]) + return r + +def NF_GetMediaItemPeakRMS_Windowed(p0): + a=rpr_getfp('NF_GetMediaItemPeakRMS_Windowed') + f=CFUNCTYPE(c_double,c_uint64)(a) + t=(rpr_packp('MediaItem*',p0),) + r=f(t[0]) + return r + +def SN_FocusMIDIEditor(): + a=rpr_getfp('SN_FocusMIDIEditor') + f=CFUNCTYPE(None)(a) + f() + +def SNM_AddReceive(p0,p1,p2): + a=rpr_getfp('SNM_AddReceive') + f=CFUNCTYPE(c_byte,c_uint64,c_uint64,c_int)(a) + t=(rpr_packp('MediaTrack*',p0),rpr_packp('MediaTrack*',p1),c_int(p2)) + r=f(t[0],t[1],t[2]) + return r + +def SNM_AddTCPFXParm(p0,p1,p2): + a=rpr_getfp('SNM_AddTCPFXParm') + f=CFUNCTYPE(c_byte,c_uint64,c_int,c_int)(a) + t=(rpr_packp('MediaTrack*',p0),c_int(p1),c_int(p2)) + r=f(t[0],t[1],t[2]) + return r + +def SNM_CreateFastString(p0): + a=rpr_getfp('SNM_CreateFastString') + f=CFUNCTYPE(c_uint64,c_char_p)(a) + t=(rpr_packsc(p0),) + r=f(t[0]) + return rpr_unpackp('WDL_FastString*',r) + +def SNM_DeleteFastString(p0): + a=rpr_getfp('SNM_DeleteFastString') + f=CFUNCTYPE(None,c_uint64)(a) + t=(rpr_packp('WDL_FastString*',p0),) + f(t[0]) + +def SNM_GetDoubleConfigVar(p0,p1): + a=rpr_getfp('SNM_GetDoubleConfigVar') + f=CFUNCTYPE(c_double,c_char_p,c_double)(a) + t=(rpr_packsc(p0),c_double(p1)) + r=f(t[0],t[1]) + return r + +def SNM_GetFastString(p0): + a=rpr_getfp('SNM_GetFastString') + f=CFUNCTYPE(c_char_p,c_uint64)(a) + t=(rpr_packp('WDL_FastString*',p0),) + r=f(t[0]) + return str(r.decode()) + +def SNM_GetFastStringLength(p0): + a=rpr_getfp('SNM_GetFastStringLength') + f=CFUNCTYPE(c_int,c_uint64)(a) + t=(rpr_packp('WDL_FastString*',p0),) + r=f(t[0]) + return r + +def SNM_GetIntConfigVar(p0,p1): + a=rpr_getfp('SNM_GetIntConfigVar') + f=CFUNCTYPE(c_int,c_char_p,c_int)(a) + t=(rpr_packsc(p0),c_int(p1)) + r=f(t[0],t[1]) + return r + +def SNM_GetMediaItemTakeByGUID(p0,p1): + a=rpr_getfp('SNM_GetMediaItemTakeByGUID') + f=CFUNCTYPE(c_uint64,c_uint64,c_char_p)(a) + t=(rpr_packp('ReaProject*',p0),rpr_packsc(p1)) + r=f(t[0],t[1]) + return rpr_unpackp('MediaItem_Take*',r) + +def SNM_GetProjectMarkerName(p0,p1,p2,p3): + a=rpr_getfp('SNM_GetProjectMarkerName') + f=CFUNCTYPE(c_byte,c_uint64,c_int,c_byte,c_uint64)(a) + t=(rpr_packp('ReaProject*',p0),c_int(p1),c_byte(p2),rpr_packp('WDL_FastString*',p3)) + r=f(t[0],t[1],t[2],t[3]) + return r + +def SNM_GetSetObjectState(p0,p1,p2,p3): + a=rpr_getfp('SNM_GetSetObjectState') + f=CFUNCTYPE(c_byte,c_uint64,c_uint64,c_byte,c_byte)(a) + t=(rpr_packp('void*',p0),rpr_packp('WDL_FastString*',p1),c_byte(p2),c_byte(p3)) + r=f(t[0],t[1],t[2],t[3]) + return r + +def SNM_GetSetSourceState(p0,p1,p2,p3): + a=rpr_getfp('SNM_GetSetSourceState') + f=CFUNCTYPE(c_byte,c_uint64,c_int,c_uint64,c_byte)(a) + t=(rpr_packp('MediaItem*',p0),c_int(p1),rpr_packp('WDL_FastString*',p2),c_byte(p3)) + r=f(t[0],t[1],t[2],t[3]) + return r + +def SNM_GetSetSourceState2(p0,p1,p2): + a=rpr_getfp('SNM_GetSetSourceState2') + f=CFUNCTYPE(c_byte,c_uint64,c_uint64,c_byte)(a) + t=(rpr_packp('MediaItem_Take*',p0),rpr_packp('WDL_FastString*',p1),c_byte(p2)) + r=f(t[0],t[1],t[2]) + return r + +def SNM_GetSourceType(p0,p1): + a=rpr_getfp('SNM_GetSourceType') + f=CFUNCTYPE(c_byte,c_uint64,c_uint64)(a) + t=(rpr_packp('MediaItem_Take*',p0),rpr_packp('WDL_FastString*',p1)) + r=f(t[0],t[1]) + return r + +def SNM_MoveOrRemoveTrackFX(p0,p1,p2): + a=rpr_getfp('SNM_MoveOrRemoveTrackFX') + f=CFUNCTYPE(c_byte,c_uint64,c_int,c_int)(a) + t=(rpr_packp('MediaTrack*',p0),c_int(p1),c_int(p2)) + r=f(t[0],t[1],t[2]) + return r + +def SNM_ReadMediaFileTag(p0,p1,p2,p3): + a=rpr_getfp('SNM_ReadMediaFileTag') + f=CFUNCTYPE(c_byte,c_char_p,c_char_p,c_char_p,c_int)(a) + t=(rpr_packsc(p0),rpr_packsc(p1),rpr_packs(p2),c_int(p3)) + r=f(t[0],t[1],t[2],t[3]) + return (r,p0,p1,rpr_unpacks(t[2]),p3) + +def SNM_RemoveReceive(p0,p1): + a=rpr_getfp('SNM_RemoveReceive') + f=CFUNCTYPE(c_byte,c_uint64,c_int)(a) + t=(rpr_packp('MediaTrack*',p0),c_int(p1)) + r=f(t[0],t[1]) + return r + +def SNM_RemoveReceivesFrom(p0,p1): + a=rpr_getfp('SNM_RemoveReceivesFrom') + f=CFUNCTYPE(c_byte,c_uint64,c_uint64)(a) + t=(rpr_packp('MediaTrack*',p0),rpr_packp('MediaTrack*',p1)) + r=f(t[0],t[1]) + return r + +def SNM_SelectResourceBookmark(p0): + a=rpr_getfp('SNM_SelectResourceBookmark') + f=CFUNCTYPE(c_int,c_char_p)(a) + t=(rpr_packsc(p0),) + r=f(t[0]) + return r + +def SNM_SetDoubleConfigVar(p0,p1): + a=rpr_getfp('SNM_SetDoubleConfigVar') + f=CFUNCTYPE(c_byte,c_char_p,c_double)(a) + t=(rpr_packsc(p0),c_double(p1)) + r=f(t[0],t[1]) + return r + +def SNM_SetFastString(p0,p1): + a=rpr_getfp('SNM_SetFastString') + f=CFUNCTYPE(c_uint64,c_uint64,c_char_p)(a) + t=(rpr_packp('WDL_FastString*',p0),rpr_packsc(p1)) + r=f(t[0],t[1]) + return rpr_unpackp('WDL_FastString*',r) + +def SNM_SetIntConfigVar(p0,p1): + a=rpr_getfp('SNM_SetIntConfigVar') + f=CFUNCTYPE(c_byte,c_char_p,c_int)(a) + t=(rpr_packsc(p0),c_int(p1)) + r=f(t[0],t[1]) + return r + +def SNM_SetProjectMarker(p0,p1,p2,p3,p4,p5,p6): + a=rpr_getfp('SNM_SetProjectMarker') + f=CFUNCTYPE(c_byte,c_uint64,c_int,c_byte,c_double,c_double,c_char_p,c_int)(a) + t=(rpr_packp('ReaProject*',p0),c_int(p1),c_byte(p2),c_double(p3),c_double(p4),rpr_packsc(p5),c_int(p6)) + r=f(t[0],t[1],t[2],t[3],t[4],t[5],t[6]) + return r + +def SNM_TagMediaFile(p0,p1,p2): + a=rpr_getfp('SNM_TagMediaFile') + f=CFUNCTYPE(c_byte,c_char_p,c_char_p,c_char_p)(a) + t=(rpr_packsc(p0),rpr_packsc(p1),rpr_packsc(p2)) + r=f(t[0],t[1],t[2]) + return r + +def SNM_TieResourceSlotActions(p0): + a=rpr_getfp('SNM_TieResourceSlotActions') + f=CFUNCTYPE(None,c_int)(a) + t=(c_int(p0),) + f(t[0]) + +def ULT_GetMediaItemNote(p0): + a=rpr_getfp('ULT_GetMediaItemNote') + f=CFUNCTYPE(c_char_p,c_uint64)(a) + t=(rpr_packp('MediaItem*',p0),) + r=f(t[0]) + return str(r.decode()) + +def ULT_SetMediaItemNote(p0,p1): + a=rpr_getfp('ULT_SetMediaItemNote') + f=CFUNCTYPE(None,c_uint64,c_char_p)(a) + t=(rpr_packp('MediaItem*',p0),rpr_packsc(p1)) + f(t[0],t[1]) + diff --git a/Scripts/ultraclock.lua b/Scripts/ultraclock.lua new file mode 100644 index 0000000..21cc903 --- /dev/null +++ b/Scripts/ultraclock.lua @@ -0,0 +1,254 @@ +--[[ +################################################################################ +# +# Copyright (c) 2014-2017 Ultraschall (http://ultraschall.fm) +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +# THE SOFTWARE. +# +################################################################################ +]] + +local info = debug.getinfo(1,'S'); +script_path = info.source:match[[^@?(.*[\/])[^\/]-$]] +dofile(script_path .. "ultraschall_helper_functions.lua") + +--Ultraschall ultraclock alpha 0.9 + +function copy(obj, seen) --copy an array + if type(obj) ~= 'table' then return obj end + if seen and seen[obj] then return seen[obj] end + local s = seen or {} + local res = setmetatable({}, getmetatable(obj)) + s[obj] = res + for k, v in pairs(obj) do res[copy(k, s)] = copy(v, s) end + return res +end + +function Init() + width,height=400,300 + refresh= 0.5 --in seconds + + --STD Settings + txt_line={} for i=1,4 do txt_line[i]={} end -- create 2d array for 4 lines of text + txt_line[1]={y=0.1 , size=1.0} + txt_line[2]={y=0.0, size=0.3} + txt_line[3]={y=0.51, size=0.3} + txt_line[4]={y=0.62, size=1.0} + + txt_line_preset={} for i=1,7 do txt_line_preset[i]=copy(txt_line) end --copy STD Setting to all presets + + --edit needed settings in presets + txt_line_preset[1][1].y=-100000 --only RTC, center + + txt_line_preset[2][3].y=0.3 --Status and TC only + txt_line_preset[2][4].y=0.41 + + txt_line_preset[4][2].y=-100000 --date only + txt_line_preset[4][2].size=0.8 + + txt_line_preset[5][1].y=-100000 --date + RTC + txt_line_preset[5][2].y=0.26 --date only + + txt_line_preset[6][2].y=0.2 --date and TC + txt_line_preset[6][3].y=0.45 + txt_line_preset[6][4].y=0.56 + txt_line_preset[6][2].size=0.8 + + --set font depending on os + if reaper.GetOS()=="OSX64" or reaper.GetOS()=="OSX32" then + clockfont="Helvetica" clockfont_bold="Helvetica Bold" + font_divisor=3.2 --window height / font_divisor = fontsize + elseif reaper.GetOS()=="Win64" or reaper.GetOS()=="Win32" then + clockfont="Arial" clockfont_bold="Arial" + font_divisor=2.8 --window height / font_divisor = fontsize + else clockfont="Arial" clockfont_bold="Arial" + end + + len, preset = ultraschall.GetUSExternalState("ultraschall_clock", "preset") + len, docked = ultraschall.GetUSExternalState("ultraschall_clock", "docked") + + if type(preset)~="string" or preset==NIL then preset=3 else preset=tonumber(preset) end + if docked=="false" then docked=false else docked=true end + + + --INIT Menu Items + uc_menu={} for i=1,6 do uc_menu[i]={} end --create 2d array for 6 menu entries +--reaper.ShowMessageBox("lalala",tostring(preset),0) + + uc_menu[1]={text="Show Realtime", checked= (preset&1==1)} + uc_menu[2]={text="Show Timecode", checked= (preset&2==2)} + uc_menu[3]={text="Show Date" , checked= (preset&4==4)} + uc_menu[4]={text="", checked=false} -- separator + uc_menu[5]={text="Dock Ultraclock window to Docker", checked=docked} + uc_menu[6]={text="Close Window",checked=false} +end + +function InitGFX() + gfx.clear=0x333333 --background color + gfx.init("Ultraclock",width,height,false) --create window + if docked then d=1 else d=0 end + gfx.dock( d + 256*4) -- dock it do docker 4 (&1=docked) + gfx.update() + reaper.SetCursorContext(1) -- Set Cursor context to the arrange window, so keystrokes work +end + +function showmenu() + local menu_string="" + local i=1 + for i=1,#uc_menu do + if uc_menu[i].checked==true then menu_string=menu_string.."!" end + menu_string=menu_string..uc_menu[i].text.."|" + end + + gfx.x, gfx.y= gfx.mouse_x, gfx.mouse_y + local ret=gfx.showmenu(menu_string) + local ret2=ret + + if ret>0 then -- a line was clicked + if ret>3 then ret2=ret+1 end -- seperator does not have an id ... + if uc_menu[ret2].checked~=NIL then + uc_menu[ret2].checked=not uc_menu[ret2].checked + preset=0 + for i=1,3 do + if uc_menu[i].checked then preset=preset+2^(i-1) -- build preset from menu + end + end + end + end + + return ret +end + +function WriteCenteredText(text, color, font, size, y) -- if y<0 then center horizontaly + gfx.r=(color & 0xff0000) / 0xffffff + gfx.g=(color & 0x00ff00) / 0xffff + gfx.b=(color & 0x0000ff) / 0xff + gfx.setfont(1, font, size) + local w, h=gfx.measurestr(text) + if y<0 then y=(gfx.h-h)/2 end -- center if y<0 + gfx.x=(gfx.w-w)/2 + gfx.y=y + gfx.drawstr(text) +end + +function get_position() + playstate=reaper.GetPlayState() --0 stop, 1 play, 2 pause, 4 rec possible to combine bits + if playstate & 1==1 then return reaper.GetPlayPosition() + else return reaper.GetCursorPosition() end +end + +function drawClock() + if uc_menu[2].checked then -- get Timecode/Status + playstate=reaper.GetPlayState() + if reaper.GetSetRepeat(-1)==1 then repeat_txt=" (REPEAT)" else repeat_txt="" end + if playstate == 1 then + if repeat_txt~="" then txt_color=0x15729d else txt_color=0x2092c7 end + status="PLAY"..repeat_txt --play + elseif playstate == 5 then txt_color=0xf24949 status="REC" --record + elseif playstate == 2 then + if repeat_txt~="" then txt_color=0xa86010 else txt_color=0xd17814 end + status="PAUSE"..repeat_txt --play/pause + elseif playstate == 6 then txt_color=0xff6b4d status="REC/PAUSE" --record/pause + elseif playstate == 0 then txt_color=0xb3b3b3 status="STOP" --record/pause + else txt_color=0xb3b3b3 status="" + end + pos=get_position()//1 + pos=string.format("%02d:%02d:%02d",pos//3600,(pos %3600) // 60,pos % 60) + end + + + -- calculate fontsize and textpositions depending on aspect ratio of window + if gfx.w/gfx.h < 4/3 then -- if narrower than 4:3 add empty space on top and bottom + fsize=gfx.w/4*3/font_divisor + border=(gfx.h-gfx.w/4*3)/2 + height=gfx.w/4*3 + else + fsize=gfx.h/font_divisor + border=0 + height=gfx.h + end + + preset=0 + for i=1,3 do if uc_menu[i].checked then preset=preset+2^(i-1) end end + + if preset==0 then + WriteCenteredText("all displays are turned off :-(",0xbbbbbb, clockfont_bold, fsize/4,-1) + end + + txt_line=copy(txt_line_preset[preset]) + + --write text + if uc_menu[1].checked then + WriteCenteredText(os.date("%H:%M:%S"),0xb3b3b3, clockfont_bold, txt_line[1].size * fsize,txt_line[1].y*height+border) -- print realtime hh:mm:ss + end + + if uc_menu[3].checked then + WriteCenteredText(os.date("%d.%m.%Y"),0xb3b3b3, clockfont_bold, txt_line[2].size * fsize ,txt_line[2].y*height+border) -- print date + end + + if uc_menu[2].checked then + WriteCenteredText(status,txt_color, clockfont_bold, txt_line[3].size * fsize ,txt_line[3].y*height+border) -- print Status (Pause/Play...) + WriteCenteredText(pos, txt_color, clockfont_bold, txt_line[4].size * fsize,txt_line[4].y*height+border) --print timecode in h:mm:ss format + end + + gfx.update() + lasttime=reaper.time_precise() +end + + +function MainLoop() + if reaper.time_precise() > lasttime+refresh or gfx.w~=lastw or gfx.h~=lasth then drawClock() end + + if gfx.mouse_cap & 2 ==2 then --right mousecklick + local ret=showmenu() + if ret==4 then -- dock/undock + dock_state=gfx.dock(-1) + if dock_state & 1 == 1 then gfx.dock(dock_state -1) else gfx.dock(dock_state+1) end + elseif ret==5 then exit_clock() + end + + if gfx.dock(-1)&1==1 then is_docked="true" else is_docked="false" end + ultraschall.SetUSExternalState("ultraschall_clock", "preset", preset) --save state preset + ultraschall.SetUSExternalState("ultraschall_clock", "docked", is_docked) --save state docked + + reaper.SetCursorContext(1) -- Set Cursor context to the arrange window, so keystrokes work + end + + count, view = ultraschall.GetUSExternalState("ultraschall_gui", "view") -- get the actual view + + --loop if GUI is NOT closed and VIEW is Recording + if gfx.getchar() ~= -1 and (view=="record" or gfx.dock(-1)&1==0) then + lastw, lasth=gfx.w, gfx.h + gfx.update() + reaper.defer(MainLoop) + end +end + +function exit_clock() + -- if gfx.dock(-1)&1==1 then is_docked="true" else is_docked="false" end + -- ultraschall.SetUSExternalState("ultraschall_clock", "preset", preset) --save state preset + -- ultraschall.SetUSExternalState("ultraschall_clock", "docked", is_docked) --save state docked + gfx.quit() +end + +reaper.atexit(exit_clock) +Init() +InitGFX() +lasttime=reaper.time_precise()-1 +reaper.defer(MainLoop) diff --git a/Scripts/ultraschall_StateInspector.lua b/Scripts/ultraschall_StateInspector.lua new file mode 100644 index 0000000..bf6d569 --- /dev/null +++ b/Scripts/ultraschall_StateInspector.lua @@ -0,0 +1,1314 @@ +--[[ +################################################################################ +# +# Copyright (c) 2014-2018 Ultraschall (http://ultraschall.fm) +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +# THE SOFTWARE. +# +################################################################################ +]] + +-- Ultraschall State-Inspector 1.3 [Ultraschall-Developer Tools] 12.1.2018 +-- +-- This Inspector monitors toggle-command-states or external-states of your choice. +-- It's good for checking, if some toggling of states or changing of external-states +-- is working as expected. +-- +-- H for further help +-- +-- yes, it could be visually more appealing, so: accept the challenge and make it so ;) +-- +-- Meo Mespotine + +version="1.3" + +gfx.init("Ultraschall State Inspector "..version, 900, 520) + +local info = debug.getinfo(1,'S'); +script_path = info.source:match[[^@?(.*[\/])[^\/]-$]] +dofile(script_path .. "ultraschall_helper_functions.lua") + +font_height=gfx.measurechar(65)+3 + +counter=0 +states={} +row1=30 +row2=40 +row3=0 +stop=false + +start_state=1 + +slotnumber="-" +slotname="" +altered="" +last_entry=0 +gfx.setfont(1,"Arial", 12, 0) + +function ShowStates() + gfx.set(1,1,1) + gfx.y=5 gfx.x=10 + gfx.drawstr("Monitors Toggle-Command-States and external-states. ") + + gfx.y=30 gfx.x=460 + gfx.drawstr(" H - Help\n\n Up/Down/PgUp/PgDn/Pos1/End - scroll through list\n\n Esc - closes inspector\n\n") + gfx.y=30 gfx.x=10 gfx.set(1,0,0) + gfx.drawstr(" T - add Toggle Command \n")gfx.x=10 gfx.y=gfx.y+gfx.texth gfx.set(1,1,0) + gfx.drawstr(" E - add External State \n")gfx.x=10 gfx.y=gfx.y+gfx.texth gfx.set(0.5,0.8,0.8) + gfx.drawstr(" U - add US-External State \n")gfx.x=10 gfx.y=gfx.y+gfx.texth gfx.set(0.0,0.5,1) + gfx.drawstr(" A - add Any External State\n") gfx.x=10 gfx.y=gfx.y+gfx.texth gfx.set(1,0.6,0) + gfx.drawstr(" P - add Project External-State\n\n") gfx.x=10 gfx.set(0,1,0) + gfx.drawstr(" R - add Reaper-State\n\n") + gfx.y=30 gfx.x=150 gfx.set(1,1,1) + gfx.drawstr(" B - Highlight Entry\n V - Remove All Highlighting \n M - Move entry\n D - Delete entry\n O - Order collection\n C - Clear Collection \n\n") +-- D - Delete entry\n C - Clear List + gfx.y=30 gfx.x=280 + gfx.drawstr(" S - Save State-Collection\n L - List of State-Collection Slots\n\n 1 to 9 - Load from State-Collection-Slot\n 0 - Show All Ultraschall-States\n\n") + + gfx.y=gfx.y+font_height*2 + + gfx.x=10 + + if slotname:match("\".-\"")==nil and slotname~="" then slotname="\""..slotname.."\"" end + gfx.drawstr("Monitored States of collection-slot: "..slotnumber.." - "..slotname.." "..altered.." - contains "..counter.." states\n") + gfx.y=gfx.y+font_height+5 + gfx.x=35 + if start_state>1 then gfx.set(0.7,0.7,0.7) gfx.drawstr(" /\\ more states\n\n") else gfx.drawstr(" \n\n") end + liststart_y=gfx.y + listheight=gfx.h-liststart_y-(font_height) + list_num_lines=listheight/(font_height)-1 + list_num_lines=tostring(list_num_lines) + if list_num_lines:match("%.")~=nil then list_num_lines=tonumber(list_num_lines:match("(.-)%.")) else list_num_lines=tonumber(list_num_lines) end + + temp_height=gfx.y-5 + gfx.x=row1 +-- gfx.y=temp_height+font_height + for i=start_state, counter do + gfx.x=row1 + temp_height=temp_height+font_height + gfx.y=temp_height + if temp_height+(font_height*3)>gfx.h and i") gfx.x=row1 gfx.setfont(1,"Arial", 12, 86) end + if states[i][1]=="toggle" then + gfx.drawstr(i) + gfx.set(0.3,0.3,0.3) + gfx.line(gfx.x,gfx.y+font_height,row3,gfx.y+font_height) + gfx.x=row2 + gfx.set(1,0,0) + gfx.drawstr(" | Toggle Command: ") + gfx.drawstr(states[i][2].." ") + if gfx.x>row3 then row3=gfx.x+50 end + gfx.x=row3 + gfx.set(1,1,1) + gfx.drawstr(reaper.GetToggleCommandState(reaper.NamedCommandLookup(states[i][2])).."\n") + elseif states[i][1]=="extstate" then + gfx.drawstr(i) + gfx.set(0.3,0.3,0.3) + gfx.line(gfx.x,gfx.y+font_height,row3,gfx.y+font_height) + gfx.set(1,1,0) + gfx.x=row2 + gfx.drawstr(" | ExtState ["..states[i][2].."] -> "..states[i][3]..": ") + gfx.set(1,1,1) + if gfx.x>row3 then row3=gfx.x+50 end + gfx.x=row3 + gfx.drawstr(reaper.GetProjExtState(0,states[i][2],states[i][3]).."\n") + elseif states[i][1]=="projextstate" then +-- B=reaper.SetProjExtState(0, "tudel", "loo", "test") + gfx.drawstr(i) + gfx.set(0.3,0.3,0.3) + gfx.line(gfx.x,gfx.y+font_height,row3,gfx.y+font_height) + gfx.set(1,0.6,0) + gfx.x=row2 + gfx.drawstr(" | Project-ExtState ["..states[i][2].."] -> "..states[i][3]..": ") + gfx.set(1,1,1) + if gfx.x>row3 then row3=gfx.x+50 end + gfx.x=row3 + t, value=reaper.GetProjExtState(0, states[i][2], states[i][3]) + gfx.drawstr(value.."\n") + elseif states[i][1]=="usextstate" then + t, value=ultraschall.GetUSExternalState(states[i][2], states[i][3]) + gfx.drawstr(i) + gfx.set(0.3,0.3,0.3) + gfx.line(gfx.x,gfx.y+font_height,row3,gfx.y+font_height) + gfx.set(0.5,0.8,0.8) + gfx.x=row2 + gfx.drawstr(" | USExtState ["..states[i][2].."] -> "..states[i][3]..": ") + gfx.set(1,1,1) + if gfx.x>row3 then row3=gfx.x+50 end + gfx.x=row3 + gfx.drawstr(value.."\n") + elseif states[i][1]=="anyextstate" then + t, value=reaper.BR_Win32_GetPrivateProfileString(states[i][2], states[i][3], -1, states[i][4]) + gfx.drawstr(i) + gfx.set(0.3,0.3,0.3) + gfx.line(gfx.x,gfx.y+font_height,row3,gfx.y+font_height) + gfx.set(0,0.5,1) + gfx.x=row2 + filename=states[i][4]:match(".*"..ultraschall.Separator.."(.*)$") + if filename==nil then filename=states[i][4] end + gfx.drawstr(" | AnyExtState "..filename.." ["..states[i][2].."] -> "..states[i][3]..": ") + gfx.set(1,1,1) + if gfx.x>row3 then row3=gfx.x+50 end + gfx.x=row3 + gfx.drawstr(value.."\n") + + elseif states[i][1]=="hzoom" then + gfx.drawstr(i) + gfx.set(0.3,0.3,0.3) + gfx.line(gfx.x,gfx.y+font_height,row3,gfx.y+font_height) + gfx.set(0,1,0) + gfx.x=row2 + gfx.drawstr(" | Horizontal Zoom Factor: ") + gfx.set(1,1,1) + if gfx.x>row3 then row3=gfx.x+50 end + gfx.x=row3 + gfx.drawstr(reaper.GetHZoomLevel().."\n") + elseif states[i][1]=="playrate" then + gfx.drawstr(i) + gfx.set(0.3,0.3,0.3) + gfx.line(gfx.x,gfx.y+font_height,row3,gfx.y+font_height) + gfx.set(0,1,0) + gfx.x=row2 + gfx.drawstr(" | Playrate: ") + gfx.set(1,1,1) + if gfx.x>row3 then row3=gfx.x+50 end + gfx.x=row3 + gfx.drawstr(reaper.Master_GetPlayRate(0).."\n") + elseif states[i][1]=="playpos" then + gfx.drawstr(i) + gfx.set(0.3,0.3,0.3) + gfx.line(gfx.x,gfx.y+font_height,row3,gfx.y+font_height) + gfx.set(0,1,0) + gfx.x=row2 + gfx.drawstr(" | Playposition: ") + gfx.set(1,1,1) + if gfx.x>row3 then row3=gfx.x+50 end + gfx.x=row3 + gfx.drawstr(reaper.GetPlayPosition().."\n") + elseif states[i][1]=="editpos" then + gfx.drawstr(i) + gfx.set(0.3,0.3,0.3) + gfx.line(gfx.x,gfx.y+font_height,row3,gfx.y+font_height) + gfx.set(0,1,0) + gfx.x=row2 + gfx.drawstr(" | Editposition: ") + gfx.set(1,1,1) + if gfx.x>row3 then row3=gfx.x+50 end + gfx.x=row3 + gfx.drawstr(reaper.GetCursorPosition().."\n") + elseif states[i][1]=="lastfocfx" then + gfx.drawstr(i) + gfx.set(0.3,0.3,0.3) + gfx.line(gfx.x,gfx.y+font_height,row3,gfx.y+font_height) + gfx.set(0,1,0) + gfx.x=row2 + gfx.drawstr(" | Last Focused FX: ") + gfx.set(1,1,1) + if gfx.x>row3 then row3=gfx.x+50 end + gfx.x=row3 + retval, tracknumber, itemnumber, fxnumber = reaper.GetFocusedFX() + if retval==1 then retval="track fx window: focused" end + if retval==2 then retval="item fx window: focused" end + if retval==0 then retval="no fx window focused" end + if tracknumber=="0" then tracknumber="Master" end + gfx.drawstr(retval.." | track: "..tracknumber.." | item: "..itemnumber.." | fx#: "..fxnumber.."\n") + elseif states[i][1]=="freediscprim" then + gfx.drawstr(i) + gfx.set(0.3,0.3,0.3) + gfx.line(gfx.x,gfx.y+font_height,row3,gfx.y+font_height) + gfx.set(0,1,0) + gfx.x=row2 + gfx.drawstr(" | Free Disk Space(primary recording path): ") + gfx.set(1,1,1) + if gfx.x>row3 then row3=gfx.x+50 end + gfx.x=row3 + gfx.drawstr(reaper.GetFreeDiskSpaceForRecordPath(0,0).."\n") + elseif states[i][1]=="freediscalt" then + gfx.drawstr(i) + gfx.set(0.3,0.3,0.3) + gfx.line(gfx.x,gfx.y+font_height,row3,gfx.y+font_height) + gfx.set(0,1,0) + gfx.x=row2 + gfx.drawstr(" | Free Disk Space(alternative recording path): ") + gfx.set(1,1,1) + if gfx.x>row3 then row3=gfx.x+50 end + gfx.x=row3 + gfx.drawstr(reaper.GetFreeDiskSpaceForRecordPath(0,1).."\n") + elseif states[i][1]=="globautmoverride" then + gfx.drawstr(i) + gfx.set(0.3,0.3,0.3) + gfx.line(gfx.x,gfx.y+font_height,row3,gfx.y+font_height) + gfx.set(0,1,0) + gfx.x=row2 + gfx.drawstr(" | Global Automation Override: ") + gfx.set(1,1,1) + if gfx.x>row3 then row3=gfx.x+50 end + gfx.x=row3 + integer=reaper.GetGlobalAutomationOverride() + if integer=="-1" then integer="no override" end + if integer=="0" then integer="trim/read" end + if integer=="1" then integer="read" end + if integer=="2" then integer="touch" end + if integer=="3" then integer="write" end + if integer=="4" then integer="latch" end + if integer=="5" then integer="bypass" end + gfx.drawstr(integer.."\n") + elseif states[i][1]=="inoutlatency" then + gfx.drawstr(i) + gfx.set(0.3,0.3,0.3) + gfx.line(gfx.x,gfx.y+font_height,row3,gfx.y+font_height) + gfx.set(0,1,0) + gfx.x=row2 + gfx.drawstr(" | Input/Output Latency: ") + gfx.set(1,1,1) + if gfx.x>row3 then row3=gfx.x+50 end + gfx.x=row3 + inputlatency, outputLatency = reaper.GetInputOutputLatency() + gfx.drawstr("Input-Latency: "..inputlatency.." | Output-Latency: "..outputLatency.."\n") + elseif states[i][1]=="lastcolortheme" then + gfx.drawstr(i) + gfx.set(0.3,0.3,0.3) + gfx.line(gfx.x,gfx.y+font_height,row3,gfx.y+font_height) + gfx.set(0,1,0) + gfx.x=row2 + gfx.drawstr(" | Last Color Theme-File: ") + gfx.set(1,1,1) + if gfx.x>row3 then row3=gfx.x+50 end + gfx.x=row3 + name=reaper.GetLastColorThemeFile() + if name==nil then name="" end + gfx.drawstr(name.."\n") + elseif states[i][1]=="lasttouchedtrack" then + gfx.drawstr(i) + gfx.set(0.3,0.3,0.3) + gfx.line(gfx.x,gfx.y+font_height,row3,gfx.y+font_height) + gfx.set(0,1,0) + gfx.x=row2 + gfx.drawstr(" | Last Touched-Track: ") + gfx.set(1,1,1) + if gfx.x>row3 then row3=gfx.x+50 end + gfx.x=row3 + track=reaper.GetLastTouchedTrack() + gfx.drawstr(reaper.GetMediaTrackInfo_Value(track, "IP_TRACKNUMBER").."\n") + elseif states[i][1]=="seltrackenv" then + gfx.drawstr(i) + gfx.set(0.3,0.3,0.3) + gfx.line(gfx.x,gfx.y+font_height,row3,gfx.y+font_height) + gfx.set(0,1,0) + gfx.x=row2 + gfx.drawstr(" | Selected Track Envelope: ") + gfx.set(1,1,1) + if gfx.x>row3 then row3=gfx.x+50 end + gfx.x=row3 + TrackEnvelope=reaper.GetSelectedEnvelope(0) + tracknumber=-1 + name="" + if TrackEnvelope~=nil then + track=reaper.Envelope_GetParentTrack(TrackEnvelope) + retval, name= reaper.GetEnvelopeName(TrackEnvelope,"") + tracknumber=reaper.GetMediaTrackInfo_Value(track, "IP_TRACKNUMBER") + end + gfx.drawstr("Track: "..tracknumber.." | Envelope Name: "..name.."\n") + elseif states[i][1]=="projname" then + gfx.drawstr(i) + gfx.set(0.3,0.3,0.3) + gfx.line(gfx.x,gfx.y+font_height,row3,gfx.y+font_height) + gfx.set(0,1,0) + gfx.x=row2 + gfx.drawstr(" | Projectname: ") + gfx.set(1,1,1) + if gfx.x>row3 then row3=gfx.x+50 end + gfx.x=row3 + name=reaper.GetProjectName(0,"") + if name==nil then name="" end + gfx.drawstr(name.."\n") + elseif states[i][1]=="projname" then + gfx.drawstr(i) + gfx.set(0.3,0.3,0.3) + gfx.line(gfx.x,gfx.y+font_height,row3,gfx.y+font_height) + gfx.set(0,1,0) + gfx.x=row2 + gfx.drawstr(" | Projectname: ") + gfx.set(1,1,1) + if gfx.x>row3 then row3=gfx.x+50 end + gfx.x=row3 + name=reaper.GetProjectName(0,"") + if name==nil then name="" end + gfx.drawstr(name.."\n") + elseif states[i][1]=="projpath" then + gfx.drawstr(i) + gfx.set(0.3,0.3,0.3) + gfx.line(gfx.x,gfx.y+font_height,row3,gfx.y+font_height) + gfx.set(0,1,0) + gfx.x=row2 + gfx.drawstr(" | Projectpath: ") + gfx.set(1,1,1) + if gfx.x>row3 then row3=gfx.x+50 end + gfx.x=row3 + name=reaper.GetProjectPath("") + if name==nil then name="" end + gfx.drawstr(name.."\n") + elseif states[i][1]=="respath" then + gfx.drawstr(i) + gfx.set(0.3,0.3,0.3) + gfx.line(gfx.x,gfx.y+font_height,row3,gfx.y+font_height) + gfx.set(0,1,0) + gfx.x=row2 + gfx.drawstr(" | Reaper's Resource Path: ") + gfx.set(1,1,1) + if gfx.x>row3 then row3=gfx.x+50 end + gfx.x=row3 + name=reaper.GetResourcePath() + if name==nil then name="" end + gfx.drawstr(name.."\n") + elseif states[i][1]=="apppath" then + gfx.drawstr(i) + gfx.set(0.3,0.3,0.3) + gfx.line(gfx.x,gfx.y+font_height,row3,gfx.y+font_height) + gfx.set(0,1,0) + gfx.x=row2 + gfx.drawstr(" | Reaper's Application Path: ") + gfx.set(1,1,1) + if gfx.x>row3 then row3=gfx.x+50 end + gfx.x=row3 + name=reaper.GetExePath() + if name==nil then name="" end + gfx.drawstr(name.."\n") + elseif states[i][1]=="projlength" then + gfx.drawstr(i) + gfx.set(0.3,0.3,0.3) + gfx.line(gfx.x,gfx.y+font_height,row3,gfx.y+font_height) + gfx.set(0,1,0) + gfx.x=row2 + gfx.drawstr(" | Project Length in seconds: ") + gfx.set(1,1,1) + if gfx.x>row3 then row3=gfx.x+50 end + gfx.x=row3 + name=reaper.GetProjectLength(0) + if name==nil then name="" end + gfx.drawstr(name.."\n") + elseif states[i][1]=="projstatechange" then + gfx.drawstr(i) + gfx.set(0.3,0.3,0.3) + gfx.line(gfx.x,gfx.y+font_height,row3,gfx.y+font_height) + gfx.set(0,1,0) + gfx.x=row2 + gfx.drawstr(" | ProjectStateChangeCount: ") + gfx.set(1,1,1) + if gfx.x>row3 then row3=gfx.x+50 end + gfx.x=row3 + name=reaper.GetProjectStateChangeCount(0) + if name==nil then name="" end + gfx.drawstr(name.."\n") + elseif states[i][1]=="audioisprebuffer" then + gfx.drawstr(i) + gfx.set(0.3,0.3,0.3) + gfx.line(gfx.x,gfx.y+font_height,row3,gfx.y+font_height) + gfx.set(0,1,0) + gfx.x=row2 + gfx.drawstr(" | Audio is in Prebuffer: ") + gfx.set(1,1,1) + if gfx.x>row3 then row3=gfx.x+50 end + gfx.x=row3 + name=reaper.Audio_IsPreBuffer() + if name==nil then name="" end + gfx.drawstr(name.."\n") + elseif states[i][1]=="audioisrunning" then + gfx.drawstr(i) + gfx.set(0.3,0.3,0.3) + gfx.line(gfx.x,gfx.y+font_height,row3,gfx.y+font_height) + gfx.set(0,1,0) + gfx.x=row2 + gfx.drawstr(" | Audio is running: ") + gfx.set(1,1,1) + if gfx.x>row3 then row3=gfx.x+50 end + gfx.x=row3 + name=reaper.Audio_IsRunning() + if name==nil then name="" end + gfx.drawstr(name.."\n") + elseif states[i][1]=="reapergetinifile" then + gfx.drawstr(i) + gfx.set(0.3,0.3,0.3) + gfx.line(gfx.x,gfx.y+font_height,row3,gfx.y+font_height) + gfx.set(0,1,0) + gfx.x=row2 + gfx.drawstr(" | Reaper-Ini-file with path: ") + gfx.set(1,1,1) + if gfx.x>row3 then row3=gfx.x+50 end + gfx.x=row3 + name=reaper.get_ini_file() + if name==nil then name="" end + gfx.drawstr(name.."\n") + elseif states[i][1]=="appversion" then + gfx.drawstr(i) + gfx.set(0.3,0.3,0.3) + gfx.line(gfx.x,gfx.y+font_height,row3,gfx.y+font_height) + gfx.set(0,1,0) + gfx.x=row2 + gfx.drawstr(" | Reaper App Version: ") + gfx.set(1,1,1) + if gfx.x>row3 then row3=gfx.x+50 end + gfx.x=row3 + name=reaper.GetAppVersion() + if name==nil then name="" end + gfx.drawstr(name.."\n") + elseif states[i][1]=="cursorcontext" then + gfx.drawstr(i) + gfx.set(0.3,0.3,0.3) + gfx.line(gfx.x,gfx.y+font_height,row3,gfx.y+font_height) + gfx.set(0,1,0) + gfx.x=row2 + gfx.drawstr(" | Mousecursor-Context: ") + gfx.set(1,1,1) + if gfx.x>row3 then row3=gfx.x+50 end + gfx.x=row3 + name=reaper.GetCursorContext() + if name==nil then name="" + elseif name==0 then name="track panels" + elseif name==1 then name="items" + elseif name==2 then name="envelopes" + else name="unknown" + end + gfx.drawstr(name.."\n") + elseif states[i][1]=="mastertrackvis" then + gfx.drawstr(i) + gfx.set(0.3,0.3,0.3) + gfx.line(gfx.x,gfx.y+font_height,row3,gfx.y+font_height) + gfx.set(0,1,0) + gfx.x=row2 + gfx.drawstr(" | Mastertrack visibility: ") + gfx.set(1,1,1) + if gfx.x>row3 then row3=gfx.x+50 end + gfx.x=row3 + name=reaper.GetMasterTrackVisibility() + tcpshow="" + mcpshow="" + if name&1==1 then tcpshow="visible" else tcpshow="invisible" end + if name&2==0 then mcpshow="visible" else mcpshow="invisible" end + if name==nil then name="" end + gfx.drawstr("MCP: "..mcpshow.." - TCP:"..tcpshow.."\n") + elseif states[i][1]=="maxmidiinputs" then + gfx.drawstr(i) + gfx.set(0.3,0.3,0.3) + gfx.line(gfx.x,gfx.y+font_height,row3,gfx.y+font_height) + gfx.set(0,1,0) + gfx.x=row2 + gfx.drawstr(" | Max Midi Inputs: ") + gfx.set(1,1,1) + if gfx.x>row3 then row3=gfx.x+50 end + gfx.x=row3 + name=reaper.GetMaxMidiInputs() + if name==nil then name="" end + gfx.drawstr(name.."\n") + elseif states[i][1]=="maxmidioutputs" then + gfx.drawstr(i) + gfx.set(0.3,0.3,0.3) + gfx.line(gfx.x,gfx.y+font_height,row3,gfx.y+font_height) + gfx.set(0,1,0) + gfx.x=row2 + gfx.drawstr(" | Max Midi Outputs: ") + gfx.set(1,1,1) + if gfx.x>row3 then row3=gfx.x+50 end + gfx.x=row3 + name=reaper.GetMaxMidiOutputs() + if name==nil then name="" end + gfx.drawstr(name.."\n") + elseif states[i][1]=="getmixerscroll" then + gfx.drawstr(i) + gfx.set(0.3,0.3,0.3) + gfx.line(gfx.x,gfx.y+font_height,row3,gfx.y+font_height) + gfx.set(0,1,0) + gfx.x=row2 + gfx.drawstr(" | Leftmost Track in Mixer: ") + gfx.set(1,1,1) + if gfx.x>row3 then row3=gfx.x+50 end + gfx.x=row3 + name=reaper.GetMixerScroll() + name=reaper.GetMediaTrackInfo_Value(name, "IP_TRACKNUMBER") + if name==nil then name="" end + gfx.drawstr(name.."\n") + elseif states[i][1]=="mouseposition" then + gfx.drawstr(i) + gfx.set(0.3,0.3,0.3) + gfx.line(gfx.x,gfx.y+font_height,row3,gfx.y+font_height) + gfx.set(0,1,0) + gfx.x=row2 + gfx.drawstr(" | Mouseposition: ") + gfx.set(1,1,1) + if gfx.x>row3 then row3=gfx.x+50 end + gfx.x=row3 + x,y=reaper.GetMousePosition() + if name==nil then name="" end + gfx.drawstr("X-Position: "..x.." - Y-Position: "..y.."\n") + elseif states[i][1]=="numaudioinputs" then + gfx.drawstr(i) + gfx.set(0.3,0.3,0.3) + gfx.line(gfx.x,gfx.y+font_height,row3,gfx.y+font_height) + gfx.set(0,1,0) + gfx.x=row2 + gfx.drawstr(" | Num Audio Inputs: ") + gfx.set(1,1,1) + if gfx.x>row3 then row3=gfx.x+50 end + gfx.x=row3 + name=reaper.GetNumAudioInputs() + if name==nil then name="" end + gfx.drawstr(name.."\n") + elseif states[i][1]=="numaudiooutputs" then + gfx.drawstr(i) + gfx.set(0.3,0.3,0.3) + gfx.line(gfx.x,gfx.y+font_height,row3,gfx.y+font_height) + gfx.set(0,1,0) + gfx.x=row2 + gfx.drawstr(" | Num Audio Outputs: ") + gfx.set(1,1,1) + if gfx.x>row3 then row3=gfx.x+50 end + gfx.x=row3 + name=reaper.GetNumAudioOutputs() + if name==nil then name="" end + gfx.drawstr(name.."\n") + elseif states[i][1]=="nummidiinputs" then + gfx.drawstr(i) + gfx.set(0.3,0.3,0.3) + gfx.line(gfx.x,gfx.y+font_height,row3,gfx.y+font_height) + gfx.set(0,1,0) + gfx.x=row2 + gfx.drawstr(" | Num Midi Inputs: ") + gfx.set(1,1,1) + if gfx.x>row3 then row3=gfx.x+50 end + gfx.x=row3 + name=reaper.GetNumMIDIInputs() + if name==nil then name="" end + gfx.drawstr(name.."\n") + elseif states[i][1]=="nummidioutputs" then + gfx.drawstr(i) + gfx.set(0.3,0.3,0.3) + gfx.line(gfx.x,gfx.y+font_height,row3,gfx.y+font_height) + gfx.set(0,1,0) + gfx.x=row2 + gfx.drawstr(" | Num Midi Outputs: ") + gfx.set(1,1,1) + if gfx.x>row3 then row3=gfx.x+50 end + gfx.x=row3 + name=reaper.GetNumMIDIOutputs() + if name==nil then name="" end + gfx.drawstr(name.."\n") + elseif states[i][1]=="numtracks" then + gfx.drawstr(i) + gfx.set(0.3,0.3,0.3) + gfx.line(gfx.x,gfx.y+font_height,row3,gfx.y+font_height) + gfx.set(0,1,0) + gfx.x=row2 + gfx.drawstr(" | Number of Tracks: ") + gfx.set(1,1,1) + if gfx.x>row3 then row3=gfx.x+50 end + gfx.x=row3 + name=reaper.GetNumTracks() + if name==nil then name="" end + gfx.drawstr(name.."\n") + elseif states[i][1]=="getos" then + gfx.drawstr(i) + gfx.set(0.3,0.3,0.3) + gfx.line(gfx.x,gfx.y+font_height,row3,gfx.y+font_height) + gfx.set(0,1,0) + gfx.x=row2 + gfx.drawstr(" | Operating System: ") + gfx.set(1,1,1) + if gfx.x>row3 then row3=gfx.x+50 end + gfx.x=row3 + name=reaper.GetOS() + if name==nil then name="" end + gfx.drawstr(name.."\n") + elseif states[i][1]=="playstate" then + gfx.drawstr(i) + gfx.set(0.3,0.3,0.3) + gfx.line(gfx.x,gfx.y+font_height,row3,gfx.y+font_height) + gfx.set(0,1,0) + gfx.x=row2 + gfx.drawstr(" | Playstate: ") + gfx.set(1,1,1) + if gfx.x>row3 then row3=gfx.x+50 end + gfx.x=row3 + name=reaper.GetPlayState() + state="" + if name==0 then state="Stopped" end + if name&1==1 then state="Play" end + if name&4==4 then state="Rec" end + if name&2==2 then state=state.." (Paused)" end + if name==nil then name="" end + gfx.drawstr(state.."\n") + elseif states[i][1]=="mastertempo" then + gfx.drawstr(i) + gfx.set(0.3,0.3,0.3) + gfx.line(gfx.x,gfx.y+font_height,row3,gfx.y+font_height) + gfx.set(0,1,0) + gfx.x=row2 + gfx.drawstr(" | Mastertempo: ") + gfx.set(1,1,1) + if gfx.x>row3 then row3=gfx.x+50 end + gfx.x=row3 + name=reaper.Master_GetTempo() + if name==nil then name="" end + gfx.drawstr(name.."\n") + elseif states[i][1]=="timeprecise" then + gfx.drawstr(i) + gfx.set(0.3,0.3,0.3) + gfx.line(gfx.x,gfx.y+font_height,row3,gfx.y+font_height) + gfx.set(0,1,0) + gfx.x=row2 + gfx.drawstr(" | Reaper's Time Precise: ") + gfx.set(1,1,1) + if gfx.x>row3 then row3=gfx.x+50 end + gfx.x=row3 + name=reaper.time_precise() + if name==nil then name="" end + gfx.drawstr(name.."\n") + elseif states[i][1]=="mousecursorcontx" then + gfx.drawstr(i) + gfx.set(0.3,0.3,0.3) + gfx.line(gfx.x,gfx.y+font_height,row3,gfx.y+font_height) + gfx.set(0,1,0) + gfx.x=row2 + gfx.drawstr(" | Mouse Cursor Context: ") + gfx.set(1,1,1) + if gfx.x>row3 then row3=gfx.x+50 end + gfx.x=row3 + window, segment, details = reaper.BR_GetMouseCursorContext() + if name==nil then name="" end + gfx.drawstr("Window: "..window.." - Segment: "..segment.." - Details: "..details.."\n") + elseif states[i][1]=="mousecursorenv" then + gfx.drawstr(i) + gfx.set(0.3,0.3,0.3) + gfx.line(gfx.x,gfx.y+font_height,row3,gfx.y+font_height) + gfx.set(0,1,0) + gfx.x=row2 + gfx.drawstr(" | Envelope at Mousecursor: ") + gfx.set(1,1,1) + if gfx.x>row3 then row3=gfx.x+50 end + gfx.x=row3 + window, segment, details = reaper.BR_GetMouseCursorContext() + name="" + tracknum="" + fx_num="" + param_num="" + name=reaper.BR_GetMouseCursorContext_Envelope() + if name~=nil then + MediaTrack, fx_num, param_num = reaper.Envelope_GetParentTrack(name) + tracknum=reaper.GetMediaTrackInfo_Value(MediaTrack, "IP_TRACKNUMBER") + retval, name = reaper.GetEnvelopeName(name, "") + end + if name==nil then name="" end + gfx.drawstr("EnvName: "..name.." - Tracknumber: "..tracknum.." - FX-idx: "..fx_num.." - Param-idx:"..param_num.."\n") + elseif states[i][1]=="mousecursoritem" then + gfx.drawstr(i) + gfx.set(0.3,0.3,0.3) + gfx.line(gfx.x,gfx.y+font_height,row3,gfx.y+font_height) + gfx.set(0,1,0) + gfx.x=row2 + gfx.drawstr(" | Item at Mousecursor: ") + gfx.set(1,1,1) + if gfx.x>row3 then row3=gfx.x+50 end + gfx.x=row3 + window, segment, details = reaper.BR_GetMouseCursorContext() + tracknum="" + itemnr="" + position="" + MediaItem, position = reaper.BR_ItemAtMouseCursor() + if MediaItem~=nil then + MediaTrack=reaper.GetMediaItem_Track(MediaItem) + tracknum=reaper.GetMediaTrackInfo_Value(MediaTrack, "IP_TRACKNUMBER") + itemnr=reaper.GetMediaItemInfo_Value(MediaItem, "IP_ITEMNUMBER") + end + if name==nil then name="" end + gfx.drawstr("Track: "..tracknum.." - Item in Track: "..itemnr.." - Position: "..position.."\n") + elseif states[i][1]=="mousecursortake" then + gfx.drawstr(i) + gfx.set(0.3,0.3,0.3) + gfx.line(gfx.x,gfx.y+font_height,row3,gfx.y+font_height) + gfx.set(0,1,0) + gfx.x=row2 + gfx.drawstr(" | Take at Mousecursor: ") + gfx.set(1,1,1) + if gfx.x>row3 then row3=gfx.x+50 end + gfx.x=row3 + tracknum="" + itemnr="" + takenr="" + position="" + MediaItem_Take, position = reaper.BR_TakeAtMouseCursor() + if MediaItem_Take~=nil then + MediaTrack=reaper.GetMediaItemTake_Track(MediaItem_Take) + MediaItem=reaper.GetMediaItemTake_Item(MediaItem_Take) + tracknum=reaper.GetMediaTrackInfo_Value(MediaTrack, "IP_TRACKNUMBER") + takenr=reaper.GetMediaItemTakeInfo_Value(MediaItem_Take, "IP_TAKENUMBER") + itemnr=reaper.GetMediaItemInfo_Value(MediaItem, "IP_ITEMNUMBER") + end + if name==nil then name="" end + gfx.drawstr("Track: "..tracknum.." - Item in Track: "..itemnr.." - TakeNr: "..takenr.." - pos: "..position.."\n") + elseif states[i][1]=="mousecursortrack" then + gfx.drawstr(i) + gfx.set(0.3,0.3,0.3) + gfx.line(gfx.x,gfx.y+font_height,row3,gfx.y+font_height) + gfx.set(0,1,0) + gfx.x=row2 + gfx.drawstr(" | Track at Mousecursor: ") + gfx.set(1,1,1) + if gfx.x>row3 then row3=gfx.x+50 end + gfx.x=row3 + window, segment, details = reaper.BR_GetMouseCursorContext() + tracknum="" + MediaTrack, context, position = reaper.BR_TrackAtMouseCursor() + if MediaTrack~=nil then + tracknum=reaper.GetMediaTrackInfo_Value(MediaTrack, "IP_TRACKNUMBER") + end + if name==nil then name="" end + gfx.drawstr("Track: "..tracknum.."\n") + elseif states[i][1]=="mousecursorpos" then + gfx.drawstr(i) + gfx.set(0.3,0.3,0.3) + gfx.line(gfx.x,gfx.y+font_height,row3,gfx.y+font_height) + gfx.set(0,1,0) + gfx.x=row2 + gfx.drawstr(" | Position at Mousecursor: ") + gfx.set(1,1,1) + if gfx.x>row3 then row3=gfx.x+50 end + gfx.x=row3 + window, segment, details = reaper.BR_GetMouseCursorContext() + name = reaper.BR_GetMouseCursorContext_Position() + + if name==nil then name="" end + gfx.drawstr(name.."\n") + elseif states[i][1]=="mousecursor_strmarker" then + gfx.drawstr(i) + gfx.set(0.3,0.3,0.3) + gfx.line(gfx.x,gfx.y+font_height,row3,gfx.y+font_height) + gfx.set(0,1,0) + gfx.x=row2 + gfx.drawstr(" | Timestretch-marker at Mousecursor: ") + gfx.set(1,1,1) + if gfx.x>row3 then row3=gfx.x+50 end + gfx.x=row3 + window, segment, details = reaper.BR_GetMouseCursorContext() + name = reaper.BR_GetMouseCursorContext_StretchMarker() + if name==nil then name="" end + gfx.drawstr(name.."\n") + elseif states[i][1]=="clipboard" then + gfx.drawstr(i) + gfx.set(0.3,0.3,0.3) + gfx.line(gfx.x,gfx.y+font_height,row3,gfx.y+font_height) + gfx.set(0,1,0) + gfx.x=row2 + gfx.drawstr(" | Clipboard: ") + gfx.set(1,1,1) + if gfx.x>row3 then row3=gfx.x+50 end + gfx.x=row3 + name = reaper.CF_GetClipboard("") + if name==nil then name="" end + name=string.gsub (name, "\n", "\\n") + gfx.drawstr(name.."\n") + end + gfx.x=10 + gfx.set(1,1,1) + gfx.setfont(1,"Arial", 12, 0) + end + if stop~=false then last_entry=counter end +end + +function AddToggleCommand() + retval, retvals_csv = reaper.GetUserInputs("Give Me New Toggle Command", 1, "ActionCommandID:", "") + if retval==false then return end + counter=counter+1 + states[counter]={} + states[counter][1]="toggle" + states[counter][2]=retvals_csv + altered="(altered)" +end + +function AddExternalState() + retval, retvals_csv = reaper.GetUserInputs("Give Me New ExternalState", 2, "Section:,Key:", "", "") + if retval==false then return end + counter=counter+1 + states[counter]={} + states[counter][1]="extstate" + states[counter][2]=retvals_csv:match("(.-),") + states[counter][3]=retvals_csv:match(",(.*)") + altered="(altered)" +end + +function AddProjExternalState() + retval, retvals_csv = reaper.GetUserInputs("Give Me New Project ExternalState", 2, "Section:,Key:", "", "") + if retval==false then return end + counter=counter+1 + states[counter]={} + states[counter][1]="projextstate" + states[counter][2]=retvals_csv:match("(.-),") + states[counter][3]=retvals_csv:match(",(.*)") + altered="(altered)" +end + +function AddUSExternalState() + retval, retvals_csv = reaper.GetUserInputs("Give Me New Ultraschall ExternalState", 2, "Section:,Key:", "", "") + if retval==false then return end + counter=counter+1 + states[counter]={} + states[counter][1]="usextstate" + states[counter][2]=retvals_csv:match("(.-),") + states[counter][3]=retvals_csv:match(",(.*)") + altered="(altered)" +end + +function AddAnyExternalState() + retval, retvals_csv = reaper.GetUserInputs("Any ExtState; $res$ for resourcefolder", 3, "Section:,Key:,Ini-Filename(empty for filedialog)", "", "") + if retval==false then return end + counter=counter+1 + states[counter]={} + states[counter][1]="anyextstate" + states[counter][2]=retvals_csv:match("(.-),") + states[counter][3]=retvals_csv:match(",(.-),") + temp=retvals_csv:match(".-,.-,(.*)") + if temp=="" then retval, temp = reaper.GetUserFileNameForRead("", "Open Ini-File", "") end + states[counter][4]=string.gsub (temp, "%$res%$", reaper.GetResourcePath()) + altered="(altered)" +end + +function RemoveEntry() + retval, retvals_csv = reaper.GetUserInputs("Which entry to remove?", 1, "Entrynumber", "") + if retval==false then return end + if tonumber(retvals_csv)~=nil and counter>0 and tonumber(retvals_csv)<=counter then + table.remove(states, tonumber(retvals_csv)) + counter=counter-1 + end + altered="(altered)" +end + +function ShowHelp() + helpmessage=[[ +This Inspector shows the current states of Toggle-Commands as well as External States. You can follow as many states as you want. + +Use one of the command-letters to open a dialog, where you can enter the state, that you want to follow. + +"T" - adds a Toggle Command, that you want to follow. Give the + Action Command ID and it will show in the list. + The state of -1 shows, that this Action has no + ToggleCommand-State or doesn't exist. +"E","U" - show you external states/ultraschall-external states. + They will be loaded from reaper.extstate.ini or + ultraschall.ini respectively. +"A" - will show an external state from any ini-file you desire. + You must enter the full path and filename to the ini-file + in the add-dialog. Use $res$ for the resource-folder of + Reaper or leave empty to open a open-file-dialog after + hitting OK. +"P" - will show Project-external-states. +"R" - will add Reaper's own states. Type "y" in the dialogboxes + of the states you want. + +CursorUp, CursorDn, PgUp, PgDn, Pos1, End to scroll the list. + +"D" - deletes an entry of your choice. +"B" - toggles highlighting on/off of an entry of your choice +"V" - removes all highlighting +"O" - orders your collection +"S" - saves a collection into one of the slots. After that, you can + use "1" to "9" to quick-reload the state-collection. +"L" - shows you a list of your state-collections, you've saved. + Saved slots will be stored in Ultraschall-Inspector.ini in + the resources-folder of Reaper. +"M" - Move entry to other position + +"0" (zero) - for a list of all Ultraschall-States + +"H" - shows this Help-dialog + +To end the inspector, hit Esc or just close the window.]] + reaper.MB(helpmessage, "Ultraschall Inspector "..version.." - Help",0) +end + +function SaveStateCollection() + retval, retvals_csv = reaper.GetUserInputs("Save Your Collection", 2, "Collection-Slot-Nr(1-9),Title of Collection", "") + if retval==false then return false end + if tonumber(retvals_csv:match("(.-),"))==nil or tonumber(retvals_csv:match("(.-),"))<0 or tonumber(retvals_csv:match("(.-),"))>9 then reaper.MB("No valid slotnumber. Only 1 to 9 allowed!","Oops",0) return end + slotnumber=tonumber(retvals_csv:match("(.-),")) + slotname=retvals_csv:match(",(.*)") + boolean=reaper.BR_Win32_WritePrivateProfileString("collection"..tonumber(retvals_csv:match("(.-),")), "Name", retvals_csv:match(",(.*)"), reaper.GetResourcePath().."\\Ultraschall-Inspector.ini") + boolean=reaper.BR_Win32_WritePrivateProfileString("collection"..tonumber(retvals_csv:match("(.-),")), "numentries", counter, reaper.GetResourcePath().."\\Ultraschall-Inspector.ini") + for i=1, counter do + if states[i][1]=="toggle" then + temp= states[i][0] + if temp==true then reaper.BR_Win32_WritePrivateProfileString("collection"..slotnumber, "entry"..i.."_"..0, "true", reaper.GetResourcePath().."\\Ultraschall-Inspector.ini") + else reaper.BR_Win32_WritePrivateProfileString("collection"..slotnumber, "entry"..i.."_"..0, "false", reaper.GetResourcePath().."\\Ultraschall-Inspector.ini") + end + reaper.BR_Win32_WritePrivateProfileString("collection"..slotnumber, "entry"..i.."_"..1, states[i][1], reaper.GetResourcePath().."\\Ultraschall-Inspector.ini") + reaper.BR_Win32_WritePrivateProfileString("collection"..slotnumber, "entry"..i.."_"..2, states[i][2], reaper.GetResourcePath().."\\Ultraschall-Inspector.ini") + elseif states[i][1]=="extstate" then + temp= states[i][0] + if temp==true then reaper.BR_Win32_WritePrivateProfileString("collection"..slotnumber, "entry"..i.."_"..0, "true", reaper.GetResourcePath().."\\Ultraschall-Inspector.ini") end + reaper.BR_Win32_WritePrivateProfileString("collection"..slotnumber, "entry"..i.."_"..1, states[i][1], reaper.GetResourcePath().."\\Ultraschall-Inspector.ini") + reaper.BR_Win32_WritePrivateProfileString("collection"..slotnumber, "entry"..i.."_"..2, states[i][2], reaper.GetResourcePath().."\\Ultraschall-Inspector.ini") + reaper.BR_Win32_WritePrivateProfileString("collection"..slotnumber, "entry"..i.."_"..3, states[i][3], reaper.GetResourcePath().."\\Ultraschall-Inspector.ini") + elseif states[i][1]=="projextstate" then + temp= states[i][0] + if temp==true then reaper.BR_Win32_WritePrivateProfileString("collection"..slotnumber, "entry"..i.."_"..0, "true", reaper.GetResourcePath().."\\Ultraschall-Inspector.ini") end + reaper.BR_Win32_WritePrivateProfileString("collection"..slotnumber, "entry"..i.."_"..1, states[i][1], reaper.GetResourcePath().."\\Ultraschall-Inspector.ini") + reaper.BR_Win32_WritePrivateProfileString("collection"..slotnumber, "entry"..i.."_"..2, states[i][2], reaper.GetResourcePath().."\\Ultraschall-Inspector.ini") + reaper.BR_Win32_WritePrivateProfileString("collection"..slotnumber, "entry"..i.."_"..3, states[i][3], reaper.GetResourcePath().."\\Ultraschall-Inspector.ini") + elseif states[i][1]=="usextstate" then + temp= states[i][0] + if temp==true then reaper.BR_Win32_WritePrivateProfileString("collection"..slotnumber, "entry"..i.."_"..0, "true", reaper.GetResourcePath().."\\Ultraschall-Inspector.ini") end + reaper.BR_Win32_WritePrivateProfileString("collection"..slotnumber, "entry"..i.."_"..1, states[i][1], reaper.GetResourcePath().."\\Ultraschall-Inspector.ini") + reaper.BR_Win32_WritePrivateProfileString("collection"..slotnumber, "entry"..i.."_"..2, states[i][2], reaper.GetResourcePath().."\\Ultraschall-Inspector.ini") + reaper.BR_Win32_WritePrivateProfileString("collection"..slotnumber, "entry"..i.."_"..3, states[i][3], reaper.GetResourcePath().."\\Ultraschall-Inspector.ini") + elseif states[i][1]=="anyextstate" then + temp= states[i][0] + if temp==true then reaper.BR_Win32_WritePrivateProfileString("collection"..slotnumber, "entry"..i.."_"..0, "true", reaper.GetResourcePath().."\\Ultraschall-Inspector.ini") end + reaper.BR_Win32_WritePrivateProfileString("collection"..slotnumber, "entry"..i.."_"..1, states[i][1], reaper.GetResourcePath().."\\Ultraschall-Inspector.ini") + reaper.BR_Win32_WritePrivateProfileString("collection"..slotnumber, "entry"..i.."_"..2, states[i][2], reaper.GetResourcePath().."\\Ultraschall-Inspector.ini") + reaper.BR_Win32_WritePrivateProfileString("collection"..slotnumber, "entry"..i.."_"..3, states[i][3], reaper.GetResourcePath().."\\Ultraschall-Inspector.ini") + reaper.BR_Win32_WritePrivateProfileString("collection"..slotnumber, "entry"..i.."_"..4, states[i][4], reaper.GetResourcePath().."\\Ultraschall-Inspector.ini") + else + temp= states[i][0] + if temp==true then reaper.BR_Win32_WritePrivateProfileString("collection"..slotnumber, "entry"..i.."_"..0, "true", reaper.GetResourcePath().."\\Ultraschall-Inspector.ini") end + reaper.BR_Win32_WritePrivateProfileString("collection"..slotnumber, "entry"..i.."_"..1, states[i][1], reaper.GetResourcePath().."\\Ultraschall-Inspector.ini") + end + end + altered="" +end + +function ShowSlots() + retval, slot1 = reaper.BR_Win32_GetPrivateProfileString("collection1", "Name", "", reaper.GetResourcePath().."\\Ultraschall-Inspector.ini") + retval, slot2 = reaper.BR_Win32_GetPrivateProfileString("collection2", "Name", "", reaper.GetResourcePath().."\\Ultraschall-Inspector.ini") + retval, slot3 = reaper.BR_Win32_GetPrivateProfileString("collection3", "Name", "", reaper.GetResourcePath().."\\Ultraschall-Inspector.ini") + retval, slot4 = reaper.BR_Win32_GetPrivateProfileString("collection4", "Name", "", reaper.GetResourcePath().."\\Ultraschall-Inspector.ini") + retval, slot5 = reaper.BR_Win32_GetPrivateProfileString("collection5", "Name", "", reaper.GetResourcePath().."\\Ultraschall-Inspector.ini") + retval, slot6 = reaper.BR_Win32_GetPrivateProfileString("collection6", "Name", "", reaper.GetResourcePath().."\\Ultraschall-Inspector.ini") + retval, slot7 = reaper.BR_Win32_GetPrivateProfileString("collection7", "Name", "", reaper.GetResourcePath().."\\Ultraschall-Inspector.ini") + retval, slot8 = reaper.BR_Win32_GetPrivateProfileString("collection8", "Name", "", reaper.GetResourcePath().."\\Ultraschall-Inspector.ini") + retval, slot9 = reaper.BR_Win32_GetPrivateProfileString("collection9", "Name", "", reaper.GetResourcePath().."\\Ultraschall-Inspector.ini") + reaper.MB("Your state-collection slots:\n\n 1 - "..slot1.."\n 2 - "..slot2.."\n 3 - "..slot3.."\n 4 - "..slot4.."\n 5 - "..slot5.."\n 6 - "..slot6.."\n 7 - "..slot7.."\n 8 - "..slot8.."\n 9 - "..slot9,"State-Collection Slots",0) +end + +function LoadSlot(slot, quest) + local B + if altered=="(altered)" then + B=reaper.MB("Do you want to save the current collection?","Save Collection?", 3) + --reaper.MB(B,"",0) + end + if B==6 then SaveStateCollection() end + if B==2 then return end + retval, count = reaper.BR_Win32_GetPrivateProfileString("collection"..slot, "numentries", "", reaper.GetResourcePath().."\\Ultraschall-Inspector.ini") + if count=="" then reaper.MB("This slot contains no collection yet.", "Oops", 0) return end + slotnumber=slot + retval, slotname = reaper.BR_Win32_GetPrivateProfileString("collection"..slot, "Name", "", reaper.GetResourcePath().."\\Ultraschall-Inspector.ini") + counter=tonumber(count) + states={} + for i=1, counter do + states[i]={} + retval, temp=reaper.BR_Win32_GetPrivateProfileString("collection"..slot, "entry"..i.."_0", "", reaper.GetResourcePath().."\\Ultraschall-Inspector.ini") + if temp=="true" then states[i][0]=true else states[i][0]=false end + retval, states[i][1]=reaper.BR_Win32_GetPrivateProfileString("collection"..slot, "entry"..i.."_1", "", reaper.GetResourcePath().."\\Ultraschall-Inspector.ini") + retval, states[i][2]=reaper.BR_Win32_GetPrivateProfileString("collection"..slot, "entry"..i.."_2", "", reaper.GetResourcePath().."\\Ultraschall-Inspector.ini") + if states[i][1]=="extstate" or states[i][1]=="usextstate" or states[i][1]=="projextstate" then + retval, states[i][3]=reaper.BR_Win32_GetPrivateProfileString("collection"..slot, "entry"..i.."_3", "", reaper.GetResourcePath().."\\Ultraschall-Inspector.ini") + end + if states[i][1]=="anyextstate" then + retval, states[i][3]=reaper.BR_Win32_GetPrivateProfileString("collection"..slot, "entry"..i.."_3", "", reaper.GetResourcePath().."\\Ultraschall-Inspector.ini") + retval, states[i][4]=reaper.BR_Win32_GetPrivateProfileString("collection"..slot, "entry"..i.."_4", "", reaper.GetResourcePath().."\\Ultraschall-Inspector.ini") + end + + end + altered="" + last_entry=0 + start_state=1 +end + +function ClearList(state) + local B, C + if state==true and altered=="(altered)" then + B=reaper.MB("Do you want to save the current collection before clearing it?","Save Collection?", 3) + end + if B==6 then C=SaveStateCollection() end + if C==false then return end + if B==2 then return end + states={} + counter=0 + slotnumber="-" + slotname="" + altered="" + row3=0 + last_entry=0 + start_state=1 +end + +function OrderEntries() + temptable={} + count=1 + for i=1, counter do + if states[i][1]=="toggle" then temptable[count]=states[i] count=count+1 end + end + for i=1, counter do + if states[i][1]=="extstate" then temptable[count]=states[i] count=count+1 end + end + for i=1, counter do + if states[i][1]=="usextstate" then temptable[count]=states[i] count=count+1 end + end + for i=1, counter do + if states[i][1]=="anyextstate" then temptable[count]=states[i] count=count+1 end + end + for i=1, counter do + if states[i][1]=="projextstate" then temptable[count]=states[i] count=count+1 end + end + for i=1, counter do + if states[i][1]~="anyextstate" and states[i][1]~="projextstate" and states[i][1]~="usextstate" and states[i][1]~="extstate" and states[i][1]~="toggle" then temptable[count]=states[i] count=count+1 end + end + states=temptable + altered="(altered)" +end + +function ToggleBigger() + D, D2 =reaper.GetUserInputs("Toggle Which State-Entry Bold/Unbold?", 1, "StateEntry #:", "") + if tonumber(D2)==nil or tonumber(D2)<1 or tonumber(D2)>counter then reaper.MB("No such state-entry...", "Ooopps...", 0) return end + if states[tonumber(D2)][0]~=true then states[tonumber(D2)][0]=true else states[tonumber(D2)][0]=false end +end + +function AddReaperStates() + D1, D2 =reaper.GetUserInputs("Which Reaper-States? \"Y\" to show.", 16, "HZoom:,LastFocusedFX::,Playposition:,Editposition:,Playrate:,FreeDiskSpace prim:,FreeDiskSpace alt:,GlobalAutomationOverride:,InputOutputLatency:,Last Color-Theme:,Last Touched Track:,Selected Tack Envelope:,ProjectName:,Projectpath:,Reaper Resourcepath:,Reaper's App Path:", "") + D3, D4 =reaper.GetUserInputs("Which Reaper-States? \"Y\" to show.", 16, "ProjectLength:,ProjectStateChangeCount:,AudioPreBuffer:,Audio is runnning:,Reaper.ini-filename:,Appversion:,CursorContext:,MasterTrackVisibility:,MaxMidiInput:,MaxMidiOutput:,Left-visible track in Mixer:,MousePosition:,NumAudioInputs:,NumAudioOutputs:,NumMidiInput:,NumMidiOutput:", "") + D5, D6 =reaper.GetUserInputs("Which Reaper-States? \"Y\" to show.", 13, "NumTracks:,GetOS:,PlayState:,Master_Tempo:,Time_Precise:,Mouse_Cursor_Context:,Envelope at Mousecursor:,Item at Mousecursor:,ItemTake at Mousecursor:,Track at Mousecursor:,Position at Mousecursor:,Stretchmarker at Mouse:,Clipboard:", "") + + if D1==false and D3==false then return end + hzoom =D2:match("(.-),") + lastfocfx =D2:match(",(.-),") + playpos =D2:match(",.-,(.-),") + editpos =D2:match(",.-,.-,(.-),") + playrate =D2:match(",.-,.-,.-,(.-),") + freediscprim =D2:match(",.-,.-,.-,.-,(.-),") + freediscalt =D2:match(",.-,.-,.-,.-,.-,(.-),") + globautmoverride=D2:match(",.-,.-,.-,.-,.-,.-,(.-),") + inoutlatency =D2:match(",.-,.-,.-,.-,.-,.-,.-,(.-),") + lastcolortheme =D2:match(",.-,.-,.-,.-,.-,.-,.-,.-,(.-),") + lasttouchedtrack=D2:match(",.-,.-,.-,.-,.-,.-,.-,.-,.-,(.-),") + seltrackenv =D2:match(",.-,.-,.-,.-,.-,.-,.-,.-,.-,.-,(.-),") + projname =D2:match(",.-,.-,.-,.-,.-,.-,.-,.-,.-,.-,.-,(.-),") + projpath =D2:match(",.-,.-,.-,.-,.-,.-,.-,.-,.-,.-,.-,.-,(.-),") + respath =D2:match(",.-,.-,.-,.-,.-,.-,.-,.-,.-,.-,.-,.-,.-,(.-),") + apppath =D2:match(",.-,.-,.-,.-,.-,.-,.-,.-,.-,.-,.-,.-,.-,.-,(.*)") + + projlength =D4:match("(.-),") + projstatechange =D4:match(".-,(.-),") + audioisprebuffer=D4:match(".-,.-,(.-),") + audioisrunning =D4:match(".-,.-,.-,(.-),") + reapergetinifile=D4:match(".-,.-,.-,.-,(.-),") + appversion =D4:match(".-,.-,.-,.-,.-,(.-),") + cursorcontext =D4:match(".-,.-,.-,.-,.-,.-,(.-),") + mastertrackvis =D4:match(".-,.-,.-,.-,.-,.-,.-,(.-),") + maxmidiinputs =D4:match(".-,.-,.-,.-,.-,.-,.-,.-,(.-),") + maxmidioutputs =D4:match(".-,.-,.-,.-,.-,.-,.-,.-,.-,(.-),") + getmixerscroll =D4:match(".-,.-,.-,.-,.-,.-,.-,.-,.-,.-,(.-),") + mouseposition =D4:match(".-,.-,.-,.-,.-,.-,.-,.-,.-,.-,.-,(.-),") + numaudioinputs =D4:match(".-,.-,.-,.-,.-,.-,.-,.-,.-,.-,.-,.-,(.-),") + numaudiooutputs =D4:match(".-,.-,.-,.-,.-,.-,.-,.-,.-,.-,.-,.-,.-,(.-),") + nummidiinputs =D4:match(".-,.-,.-,.-,.-,.-,.-,.-,.-,.-,.-,.-,.-,.-,(.-),") + nummidioutputs =D4:match(".-,.-,.-,.-,.-,.-,.-,.-,.-,.-,.-,.-,.-,.-,.-,(.*)") + + numtracks =D6:match("(.-),") + getos =D6:match(".-,(.-),") + playstate =D6:match(".-,.-,(.-),") + mastertempo =D6:match(".-,.-,.-,(.-),") + timeprecise =D6:match(".-,.-,.-,.-,(.-),") + mousecursorcontx=D6:match(".-,.-,.-,.-,.-,(.-),") + mousecursorenv =D6:match(".-,.-,.-,.-,.-,.-,(.-),") + mousecursoritem =D6:match(".-,.-,.-,.-,.-,.-,.-,(.-),") + mousecursortake =D6:match(".-,.-,.-,.-,.-,.-,.-,.-,(.-),") + mousecursortrack=D6:match(".-,.-,.-,.-,.-,.-,.-,.-,.-,(.-),") + mousecursorpos =D6:match(".-,.-,.-,.-,.-,.-,.-,.-,.-,.-,(.-),") + mousecursor_strmarker =D6:match(".-,.-,.-,.-,.-,.-,.-,.-,.-,.-,.-,(.-),") + clipboard =D6:match(".-,.-,.-,.-,.-,.-,.-,.-,.-,.-,.-,.-,(.*)") + + + if hzoom:lower()=="y" then counter=counter+1 states[counter]={} states[counter][1]="hzoom" altered="(altered)" end + if lastfocfx:lower()=="y" then counter=counter+1 states[counter]={} states[counter][1]="lastfocfx" altered="(altered)" end + if playpos:lower()=="y" then counter=counter+1 states[counter]={} states[counter][1]="playpos" altered="(altered)" end + if editpos:lower()=="y" then counter=counter+1 states[counter]={} states[counter][1]="editpos" altered="(altered)" end + if playrate:lower()=="y" then counter=counter+1 states[counter]={} states[counter][1]="playrate" altered="(altered)" end + if freediscprim:lower()=="y" then counter=counter+1 states[counter]={} states[counter][1]="freediscprim" altered="(altered)" end + if freediscalt:lower()=="y" then counter=counter+1 states[counter]={} states[counter][1]="freediscalt" altered="(altered)" end + if globautmoverride:lower()=="y" then counter=counter+1 states[counter]={} states[counter][1]="globautmoverride" altered="(altered)" end + if inoutlatency:lower()=="y" then counter=counter+1 states[counter]={} states[counter][1]="inoutlatency" altered="(altered)" end + if lastcolortheme:lower()=="y" then counter=counter+1 states[counter]={} states[counter][1]="lastcolortheme" altered="(altered)" end + if lasttouchedtrack:lower()=="y" then counter=counter+1 states[counter]={} states[counter][1]="lasttouchedtrack" altered="(altered)" end + if seltrackenv:lower()=="y" then counter=counter+1 states[counter]={} states[counter][1]="seltrackenv" altered="(altered)" end + if projname:lower()=="y" then counter=counter+1 states[counter]={} states[counter][1]="projname" altered="(altered)" end + if projpath:lower()=="y" then counter=counter+1 states[counter]={} states[counter][1]="projpath" altered="(altered)" end + if respath:lower()=="y" then counter=counter+1 states[counter]={} states[counter][1]="respath" altered="(altered)" end + if apppath:lower()=="y" then counter=counter+1 states[counter]={} states[counter][1]="apppath" altered="(altered)" end + + if projlength:lower()=="y" then counter=counter+1 states[counter]={} states[counter][1]="projlength" altered="(altered)" end + if projstatechange:lower()=="y" then counter=counter+1 states[counter]={} states[counter][1]="projstatechange" altered="(altered)" end + if audioisprebuffer:lower()=="y" then counter=counter+1 states[counter]={} states[counter][1]="audioisprebuffer" altered="(altered)" end + if audioisrunning:lower()=="y" then counter=counter+1 states[counter]={} states[counter][1]="audioisrunning" altered="(altered)" end + if reapergetinifile:lower()=="y" then counter=counter+1 states[counter]={} states[counter][1]="reapergetinifile" altered="(altered)" end + if appversion:lower()=="y" then counter=counter+1 states[counter]={} states[counter][1]="appversion" altered="(altered)" end + if cursorcontext:lower()=="y" then counter=counter+1 states[counter]={} states[counter][1]="cursorcontext" altered="(altered)" end + if mastertrackvis:lower()=="y" then counter=counter+1 states[counter]={} states[counter][1]="mastertrackvis" altered="(altered)" end + if maxmidiinputs:lower()=="y" then counter=counter+1 states[counter]={} states[counter][1]="maxmidiinputs" altered="(altered)" end + if maxmidioutputs:lower()=="y" then counter=counter+1 states[counter]={} states[counter][1]="maxmidioutputs" altered="(altered)" end + if getmixerscroll:lower()=="y" then counter=counter+1 states[counter]={} states[counter][1]="getmixerscroll" altered="(altered)" end + if mouseposition:lower()=="y" then counter=counter+1 states[counter]={} states[counter][1]="mouseposition" altered="(altered)" end + if numaudioinputs:lower()=="y" then counter=counter+1 states[counter]={} states[counter][1]="numaudioinputs" altered="(altered)" end + if numaudiooutputs:lower()=="y" then counter=counter+1 states[counter]={} states[counter][1]="numaudiooutputs" altered="(altered)" end + if nummidiinputs:lower()=="y" then counter=counter+1 states[counter]={} states[counter][1]="nummidiinputs" altered="(altered)" end + if nummidioutputs:lower()=="y" then counter=counter+1 states[counter]={} states[counter][1]="nummidioutputs" altered="(altered)" end + + + if numtracks:lower()=="y" then counter=counter+1 states[counter]={} states[counter][1]="numtracks" altered="(altered)" end + if getos:lower()=="y" then counter=counter+1 states[counter]={} states[counter][1]="getos" altered="(altered)" end + if playstate:lower()=="y" then counter=counter+1 states[counter]={} states[counter][1]="playstate" altered="(altered)" end + if mastertempo:lower()=="y" then counter=counter+1 states[counter]={} states[counter][1]="mastertempo" altered="(altered)" end + if timeprecise:lower()=="y" then counter=counter+1 states[counter]={} states[counter][1]="timeprecise" altered="(altered)" end + if mousecursorcontx:lower()=="y" then counter=counter+1 states[counter]={} states[counter][1]="mousecursorcontx" altered="(altered)" end + if mousecursorenv:lower()=="y" then counter=counter+1 states[counter]={} states[counter][1]="mousecursorenv" altered="(altered)" end + if mousecursoritem:lower()=="y" then counter=counter+1 states[counter]={} states[counter][1]="mousecursoritem" altered="(altered)" end + if mousecursortake:lower()=="y" then counter=counter+1 states[counter]={} states[counter][1]="mousecursortake" altered="(altered)" end + if mousecursortrack:lower()=="y" then counter=counter+1 states[counter]={} states[counter][1]="mousecursortrack" altered="(altered)" end + if mousecursorpos:lower()=="y" then counter=counter+1 states[counter]={} states[counter][1]="mousecursorpos" altered="(altered)" end + if mousecursor_strmarker:lower()=="y" then counter=counter+1 states[counter]={} states[counter][1]="mousecursor_strmarker" altered="(altered)" end + if clipboard:lower()=="y" then counter=counter+1 states[counter]={} states[counter][1]="clipboard" altered="(altered)" end + +--[[ +reaper.Audio_IsPreBuffer() +reaper.Audio_IsRunning() +string reaper.get_ini_file() +reaper.GetAppVersion() +reaper.GetCursorContext() +reaper.GetMasterTrackVisibility() +reaper.GetMaxMidiInputs() +reaper.GetMaxMidiOutputs() +reaper.GetMixerScroll() +reaper.GetMousePosition() +reaper.GetNumAudioInputs() +reaper.GetNumAudioOutputs() +integer reaper.GetNumMIDIInputs() +integer reaper.GetNumMIDIOutputs() + + + +integer reaper.GetNumTracks() +string reaper.GetOS() +integer reaper.GetPlayState() +number reaper.Master_GetTempo() +number reaper.time_precise() +reaper.BR_GetMouseCursorContext() +reaper.BR_GetMouseCursorContext_Envelope() +MediaItem retval, number position = reaper.BR_ItemAtMouseCursor() +MediaItem_Take retval, number position = reaper.BR_TakeAtMouseCursor() +MediaTrack retval, number context, number position = reaper.BR_TrackAtMouseCursor() +number reaper.BR_GetMouseCursorContext_Position() +integer reaper.BR_GetMouseCursorContext_StretchMarker() + +--]] + +end + +function ClearHighlighting(number) + if tonumber(number)==nil then + for i=1, counter do + states[i][0]=false + end + else + if states[tonumber(states)][0]~=nil then states[tonumber(number)][0]=false end + end +end + +function MoveEntry() + temp,E=reaper.GetUserInputs("Move Entry", 2, "Which Entry (number):,Move To Entry (number):,","") + if temp==false then return end + a=E:match("(.-),") + b=E:match(",(.*)") + if tonumber(a)==nil or tonumber(b)==nil then reaper.MB("Only numbers allowed.","Ooops",0) return end + if tonumber(a)<1 or tonumber(a)>counter then reaper.MB("No such entry to move.","Ooops",0) return end + if tonumber(b)<1 or tonumber(b)>counter then reaper.MB("No such entry to move to.","Ooops",0) return end + c=states[tonumber(a)] + table.remove(states, tonumber(a)) + table.insert(states, tonumber(b), c) +end + +function main() + gfx.update() + A=gfx.getchar() + if gfx.getchar()~=-1 then + if A==116.0 then AddToggleCommand() end + if A==101.0 then AddExternalState() end + if A==117.0 then AddUSExternalState() end + if A==97.0 then AddAnyExternalState() end + if A==112 then AddProjExternalState() end + if A==109 then MoveEntry() end + if A==100.0 then RemoveEntry() end + if A==115.0 then SaveStateCollection() end + if A==108.0 then ShowSlots() end + if A==104.0 then ShowHelp() end + if A==99.0 then ClearList(true) end + if A==67.0 then ClearList(false) end + if A==49 then LoadSlot(1) end + if A==33 then LoadSlot(1, false) end + if A==50 then LoadSlot(2) end + if A==34 then LoadSlot(2, false) end + if A==51 then LoadSlot(3) end + if A==167 then LoadSlot(3, false) end + if A==52 then LoadSlot(4) end + if A==36 then LoadSlot(4, false) end + if A==53 then LoadSlot(5) end + if A==37 then LoadSlot(5, false) end + if A==54 then LoadSlot(6) end + if A==38 then LoadSlot(6, false) end + if A==55 then LoadSlot(7) end + if A==47 then LoadSlot(7, false) end + if A==56 then LoadSlot(8) end + if A==40 then LoadSlot(8, false) end + if A==48 then LoadSlot(0) end + if A==61 then LoadSlot(0, false) end + if A==57 then LoadSlot(9) end + if A==41 then LoadSlot(9, false) end + if A==111 then OrderEntries() end + if A==114 then AddReaperStates() end + if A==118 then ClearHighlighting() end + if A==30064 and counter>0 then start_state=start_state-1 if start_state<1 then start_state=1 end end + if A==1685026670 and counter>0 and stop==false then start_state=start_state+1 if start_state>counter then start_state=counter end end + if A==98 then ToggleBigger() end + if A==27 then gfx.quit() end + if A==1885824110 and last_entry~=counter then start_state=start_state+list_num_lines if start_state+list_num_lines-1>counter then start_state=counter-list_num_lines end end + + if A==1885828464 then start_state=start_state-(last_entry-start_state) if start_state<1 then start_state=1 end end-- start_state=(last_entry-start_state)-start_state if start_state<1 then start_state=1 end end + if A==6647396 and last_entry~=counter then start_state=counter-(last_entry-start_state) if start_state<1 then start_state=1 end end + if A==1752132965 then start_state=1 end + ShowStates() + gfx.update() + reaper.defer(main) + elseif altered=="(altered)" then + local B + if quest~=false then + B=reaper.MB("Do you want to save the current collection?","Inspector: Save Collection?", 3) + Lt=gfx.getchar() + if B==2 and Lt==-1 then gfx.init("Ultraschall State Inspector", 900, 520) reaper.defer(main) end + end + if B==6 then SaveStateCollection() end + end +end + +LoadSlot(0, false) +main() diff --git a/Scripts/ultraschall_center_arrangeview_to_cursor.lua b/Scripts/ultraschall_center_arrangeview_to_cursor.lua new file mode 100644 index 0000000..0387c17 --- /dev/null +++ b/Scripts/ultraschall_center_arrangeview_to_cursor.lua @@ -0,0 +1,56 @@ +--[[ +################################################################################ +# +# Copyright (c) 2014-2017 Ultraschall (http://ultraschall.fm) +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +# THE SOFTWARE. +# +################################################################################ +]] + +-- sets Arrangeview to that the cursor-position is centered if the cursor is not visible +-- when stopped, it will take the edit-cursor, when playing/recording, it will take the play-cursor instead + + +local info = debug.getinfo(1,'S'); +script_path = info.source:match[[^@?(.*[\/])[^\/]-$]] +dofile(script_path .. "ultraschall_helper_functions.lua") + +a,A=ultraschall.GetUSExternalState("ultraschall_follow", "state") + +start_time, end_time = reaper.GetSet_ArrangeView2(0, false, 0, 0) +length=(end_time-start_time)/3 + +if reaper.GetPlayState() == 0 or reaper.GetPlayState() == 2 then -- 0 = Stop, 2 = Pause + if reaper.GetCursorPosition() < start_time or reaper.GetCursorPosition() > end_time then -- Cursor is not visible + reaper.BR_SetArrangeView(0, (reaper.GetCursorPosition()-length), (reaper.GetCursorPosition()+length)) + end +else + if A~="0" then -- follow mode is active + if reaper.GetPlayPosition() < start_time or reaper.GetPlayPosition() > end_time then -- Cursor is not visible + reaper.BR_SetArrangeView(0, (reaper.GetPlayPosition()-length), (reaper.GetPlayPosition()+length)) + end + else + if reaper.GetCursorPosition() < start_time or reaper.GetCursorPosition() > end_time then -- Cursor is not visible + reaper.BR_SetArrangeView(0, (reaper.GetCursorPosition()-length), (reaper.GetCursorPosition()+length)) + end + end +end + + diff --git a/Scripts/ultraschall_colorpicker.lua b/Scripts/ultraschall_colorpicker.lua new file mode 100644 index 0000000..06a155f --- /dev/null +++ b/Scripts/ultraschall_colorpicker.lua @@ -0,0 +1,142 @@ +-- Grab all of the functions and classes from our GUI library +local info = debug.getinfo(1,'S'); +script_path = info.source:match[[^@?(.*[\/])[^\/]-$]] +GUI = dofile(script_path .. "ultraschall_gui_lib.lua") + +-- All functions in the GUI library are now contained in the GUI table, +-- so they can be accessed via: GUI.function(params) + + ---- Window settings and user functions ---- + + +GUI.name = "Ultraschall Color Picker" +GUI.x, GUI.y, GUI.w, GUI.h = 100, 200, 235, 175 + + +----------------------- +-- Step 1 : get started +----------------------- + +max_color = 20 -- Number of colors to cycle +curtheme = reaper.GetLastColorThemeFile() +os = reaper.GetOS() + +--------------------------------------------------------- +-- Step 2 : build table with color values from theme file +--------------------------------------------------------- + +t = {} -- initiate table +file = io.open(curtheme, "r"); + +for line in file:lines() do + index = string.match(line, "group_(%d+)") -- use "Group" section + index = tonumber(index) + if index then + if index < max_color then + color_int = string.match(line, "=(%d+)") -- get the color value + if string.match(os, "OSX") then + r, g, b = reaper.ColorFromNative(color_int) + color_int = reaper.ColorToNative(b, g, r) -- swap r and b for OSX + end + t[index] = tonumber(color_int) -- put color into table + end + end +end +-- for key,value in pairs(t) do Msg(value) end + +function gentle_rainboom(url) + + local id = reaper.NamedCommandLookup("_Ultraschall_Set_Colors_To_Sonic_Rainboom") + reaper.Main_OnCommand(id,0) + +end + +function spread_rainboom(url) + + local id = reaper.NamedCommandLookup("_Ultraschall_Set_Colors_To_Sonic_Rainboom_Spread") + reaper.Main_OnCommand(id,0) + +end + + + +function debug() + gfx.set(1, 0.5, 0.5, 1) + gfx.circle(10, 10, 20, 1) +end + + -- body + ---- GUI Elements ---- + +GUI.elms = { + +-- name = element type x y w h caption ...other params... + colors = GUI.ColorPic:new( 4, 4, 170, 170, t), + col1 = GUI.Pic:new( 190,4, 42, 83, 1, script_path.."us_col1.png", gentle_rainboom, ""), + col2 = GUI.Pic:new( 190,88, 42, 83, 1, script_path.."us_col2.png", spread_rainboom, ""), +-- label = GUI.Lbl:new( 0, 160, "Ultraschall was sucsessfully installed.", 0), +-- label2 = GUI.Lbl:new( 135, 200, "Visit the Podcast menu to explore the user interface and features.", 0), +-- label3 = GUI.Lbl:new( 210, 220, "Use Project templates for a quick setup.", 0), + +-- label4 = GUI.Lbl:new( 265, 290, "If you need assistance:", 0), +-- label3 = GUI.Lbl:new( 455, 290, "Visit our support forum:", 0), + + -- pan_sldr = GUI.Sldr:new( 360, 280, 128, "Pan:", -100, 100, 200, 4), +-- pan_knb = GUI.Knob:new( 530, 100, 48, "Awesomeness", 0, 9, 11, 5, 1), +-- label2 = GUI.Lbl:new( 508, 42, "Awesomeness", 0), + -- options = GUI.OptLst:new( 50, 100, 150, 150, "Color notes by:", "Channel,Pitch,Velocity,Penis Size", 4), + -- blah = GUI.OptLst:new( 50, 260, 250, 200, "I have a crush on:", "Justin F,schwa,X-Raym,Jason Brian Merrill,pipelineaudio,Xenakios", 2, 0), + -- newlist = GUI.ChkLst:new( 210, 100, 120, 150, "I like to eat:", "Fruit,Veggies,Meat,Dairy", 4), +-- checkers = GUI.Checklist:new( 20, 380, 240, 30, "", "Show this Screen on Start", 4), +-- tutorials = GUI.Btn:new( 30, 320, 190, 40, "Tutorials", open_url, "http://ultraschall.fm/tutorials/"), +-- twitter = GUI.Btn:new( 242, 320, 190, 40, "Twitter", open_url, "https://twitter.com/ultraschall_fm"), +-- forum = GUI.Btn:new( 455, 320, 190, 40, "Userforum", open_url, "https://sendegate.de/c/ultraschall"), + -- label4 = GUI.Lbl:new( 300, 400, "Have fun!", 0), + + --testbtn2 = GUI.Btn:new( 450, 100, 100, 50, "CLICK", userfunc, "This|#Is|A|!Menu"), + -- newtext = GUI.TxtBox:new( 340, 210, 200, 30, "Favorite music player:", 4), + +} + + + ---- Put all of your own functions and whatever here ---- + +--Msg("hallo") + + +--GUI.func = drawcolors(t) +-- GUI.func = debug() +-- GUI.freq = 0 + + + + ---- Main loop ---- + +--[[ + + If you want to run a function during the update loop, use the variable GUI.func prior to + starting GUI.Main() loop: + + GUI.func = my_function + GUI.freq = 5 <-- How often in seconds to run the function, so we can avoid clogging up the CPU. + - Will run once a second if no value is given. + - Integers only, 0 will run every time. + + GUI.Init() + GUI.Main() + +]]-- + +-- local startscreen = GUI.val("checkers") +-- local startscreen = GUI.elms.checkers[GUI.Val()] + +-- Open Colorpicker, when it hasn't been opened yet + if reaper.GetExtState("Ultraschall_Windows", GUI.name) == "" then windowcounter=0 -- Check if window was ever opened yet(and external state for it exists already). + -- If yes, use temporarily 0 as opened windows-counter;will be changed by ultraschall_gui_lib.lua later + else windowcounter=tonumber(reaper.GetExtState("Ultraschall_Windows", GUI.name)) end -- get number of opened windows + + if windowcounter<1 then -- you can choose how many GUI.name-windows are allowed to be opened at the same time. + -- 1 means 1 window, 2 means 2 windows, 3 means 3 etc + GUI.Init() + GUI.Main() + end diff --git a/Scripts/ultraschall_delete_last_marker.lua b/Scripts/ultraschall_delete_last_marker.lua new file mode 100644 index 0000000..752ef9e --- /dev/null +++ b/Scripts/ultraschall_delete_last_marker.lua @@ -0,0 +1,38 @@ +--[[ +################################################################################ +# +# Copyright (c) 2014-2015 Ultraschall (http://ultraschall.fm) +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +# THE SOFTWARE. +# +################################################################################ +]] + +if reaper.GetPlayState() == 0 or reaper.GetPlayState() == 2 then -- 0 = Stop, 2 = Pause + current_position = reaper.GetCursorPosition() -- Position of edit-cursor +else + current_position = reaper.GetPlayPosition() -- Position of play-cursor +end + +markeridxOut = 0 +regionidxOut = 0 + +markerid = reaper.GetLastMarkerAndCurRegion(0, current_position, markeridxOut, regionidxOut) -- get the last marker to the left of cursor + +reaper.DeleteProjectMarkerByIndex(0, markerid) -- delete marker by id diff --git a/Scripts/ultraschall_edit_id3_tags.lua b/Scripts/ultraschall_edit_id3_tags.lua new file mode 100644 index 0000000..89b97a8 --- /dev/null +++ b/Scripts/ultraschall_edit_id3_tags.lua @@ -0,0 +1,181 @@ +--[[ +################################################################################ +# +# Copyright (c) 2014-2017 Ultraschall (http://ultraschall.fm) +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +# THE SOFTWARE. +# +################################################################################ +]] + + +-- Print Message to console (debugging) +function Msg(val) + reaper.ShowConsoleMsg(tostring(val).."\n") +end + +-- Used to escape "'s by toCSV +--function escapeCSV (s) +-- _, count = string.gsub(s, "\"", "\"") +-- if count==nil then count=0 end +-- if math.fmod(count,2)==1 then --if we have a odd number of " replace them with "" +-- if string.find(s, '["]') then +-- s = '"' .. string.gsub(s, '"', '""') .. '"' +-- end +-- elseif string.find(s,",")~=nil then +-- s="\""..s.."\"" +-- end +-- return s +--end + +function notes2csv () + local csv = "" + local array = {} + local count=0 + notes = reaper.GetSetProjectNotes(0, false, "") + for line in notes:gmatch"[^\n]*" do + count=count+1 + csv = csv .. "," .. line --escapeCSV(line) + array[count]=line + end + + retval= string.sub(csv, 2) -- remove first "," + + return retval, count, array +end + + + +function csv2lines (line) + title = line:match("(.-),") + artist= line:match(".-,(.-),") + album = line:match(".-,.-,(.-),") + year = line:match(".-,.-,.-,(.-),") + genre = line:match(".-,.-,.-,.-,(.-),") + comment = line:match(".-,.-,.-,.-,.-,(.*)") +--[[ pos=0 + pos_old=1 + clean="" + for i=1, 5,1 do + pos=string.find(result,",",pos_old) + substring=string.sub(line,pos_old,pos-1) + clean=clean..substring.."\n" + pos_old=pos+1 + end + --check field 6 + substring=string.sub(line,pos_old) + clean=clean..substring + ]] + return title.."\n"..artist.."\n"..album.."\n"..year.."\n"..genre.."\n"..comment +end + +function checkevencharacters(string,character) + local count=0 + local even=true + for i=1, string.len(string) do + if string:sub(i,i)==character then + if even==true then even=false + else even=true + end + end + end + return even +end + +--reaper.ShowConsoleMsg("") --clear console +dialog_ret_vals, count, dialog_retvals_array = notes2csv() --default values + +retval, result = reaper.GetUserInputs("Edit ID3 Podcast Metadata", 6, "Title (no comma allowed):,Artist (no comma allowed):,Podcast (no comma allowed):,Year (no comma allowed):,Genre (no comma allowed):,Comment:", dialog_ret_vals) + +count=0 +temp=-1 +old_pos=0 +pos=0 +if retval == true then + pos=result:match(".-,.-,.-,.-,.-,()") + firstvals=result:sub(1,pos-1) + restvals=result:sub(pos,-1) + pos=restvals:match(".-,()") + if pos~=nil then restvals="\""..restvals.."\"" end + if restvals:match("\"\".*\"\"")~=nil then restvals=restvals:sub(2,-2) end + + + even=checkevencharacters(firstvals:match(".-,"),"\"") + if even==false then firstvals=firstvals:match("(.-),").."\""..firstvals:match(".-(,.*)") end + + even=checkevencharacters(firstvals:match(".-,(.-,)"),"\"") + if even==false then firstvals=firstvals:match("(.-,.-),").."\""..firstvals:match(".-,.-(,.*)") end + + even=checkevencharacters(firstvals:match(".-,.-,(.-,)"),"\"") + if even==false then firstvals=firstvals:match("(.-,.-,.-),").."\""..firstvals:match(".-,.-,.-(,.*)") end + + even=checkevencharacters(firstvals:match(".-,.-,.-,(.-,)"),"\"") + if even==false then firstvals=firstvals:match("(.-,.-,.-,.-),").."\""..firstvals:match(".-,.-,.-,.-(,.*)") end + + even=checkevencharacters(firstvals:match(".-,.-,.-,.-,(.-,)"),"\"") + if even==false then firstvals=firstvals:match("(.-,.-,.-,.-,.-),").."\""..firstvals:match(".-,.-,.-,.-,.-(,.*)") end + + even=checkevencharacters(restvals,"\"") + if even==false then restvals=restvals.."\"" end + + notes = reaper.GetSetProjectNotes(0, true, csv2lines(firstvals..restvals)) -- write new notes +end + +--[[ +if retval == true then + --step through field 1-5 and check if the numer of " is even. Add a " to the end if needed. + pos=0 + pos_old=1 + clean="" + for i=1, 5,1 do + pos=string.find(result,",",pos_old) + substring=string.sub(result,pos_old,pos-1) + _, count = string.gsub(substring, "\"", "\"") + if math.fmod(count,2)==1 then substring=substring.."\"" end + clean=clean..substring.."," + pos_old=pos+1 + end + --check field 6 + substring=string.sub(result,pos_old) + _, count = string.gsub(substring, "\"", "\"") + if math.fmod(count,2)==1 then substring=substring.."\"" end + clean=clean..substring + result=clean + + -- if more than "," 5 then escape the comment field (surround with ") + _, count = string.gsub(result, ",", ",") + if count>5 then + pos=0 + for i=1, 5,1 do + pos=string.find(result,",",pos+1) + end + temp=string.sub(result,pos+1,-1) + if temp:match("\"\".*\"\"")~=nil then newresult=string.sub(result,1,pos)..temp:sub(2,-2) + else newresult=string.sub(result,1,pos)..string.sub(result,pos+1) + end + reaper.MB(newresult,result,0) + result=newresult + --reaper.MB(string.sub(result,pos+1,-1),"",0) + end + + + + notes = reaper.GetSetProjectNotes(0, true, csv2lines(result)) -- write new notes +end +--]] diff --git a/Scripts/ultraschall_export_assistant.lua b/Scripts/ultraschall_export_assistant.lua new file mode 100644 index 0000000..1638a47 --- /dev/null +++ b/Scripts/ultraschall_export_assistant.lua @@ -0,0 +1,224 @@ +--[[ +################################################################################ +# +# Copyright (c) 2014-2017 Ultraschall (http://ultraschall.fm) +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +# THE SOFTWARE. +# +################################################################################ +]] + + +function Msg(val) + reaper.ShowConsoleMsg(tostring(val).."\n") +end + +function runcommand(cmd) -- run a command by its name + + start_id = reaper.NamedCommandLookup(cmd) + reaper.Main_OnCommand(start_id,0) + +end + +function GetPath(str,sep) + + return str:match("(.*"..sep..")") + +end + +-- initiate values + +local info = debug.getinfo(1,'S'); +script_path = info.source:match[[^@?(.*[\/])[^\/]-$]] +GUI = dofile(script_path .. "ultraschall_gui_lib.lua") + +GUI.name = "Ultraschall Export Assistant" +GUI.w, GUI.h = 660, 440 + +-- position always in the centre of the screen + +l, t, r, b = 0, 0, GUI.w, GUI.h +__, __, screen_w, screen_h = reaper.my_getViewport(l, t, r, b, l, t, r, b, 1) +GUI.x, GUI.y = (screen_w - GUI.w) / 2, (screen_h - GUI.h) / 2 + +y_offset = -30 -- move all content up/down + +-- OS BASED SEPARATOR + +if reaper.GetOS() == "Win32" or reaper.GetOS() == "Win64" then separator = "\\" else separator = "/" end + +-- Check if project has been saved + +retval, project_path_name = reaper.EnumProjects(-1, "") +if project_path_name ~= "" then + dir = GetPath(project_path_name, separator) + name = string.sub(project_path_name, string.len(dir) + 1) + name = string.sub(name, 1, -5) + name = name:gsub(dir, "") +end + +-- lookup existing episode image + +img_index = false + +if dir then + endings = {".jpg", ".jpeg", ".png"} -- prefer .png + for key,value in pairs(endings) do + img_adress = dir .. "cover" .. value -- does cover.xyz exist? + img_test = gfx.loadimg(0, img_adress) + if img_test ~= -1 then + img_index = img_test + end + end +end + +endings = {".jpg", ".jpeg", ".png"} -- prefer .png +for key,value in pairs(endings) do + img_adress = string.gsub(project_path_name, ".RPP", value) + img_test = gfx.loadimg(0, img_adress) + if img_test ~= -1 then + img_index = img_test + end +end + +if img_index then -- there is an image + preview_size = 80 -- preview size in Pixel, always square + w, h = gfx.getimgdim(img_index) + if w > h then -- adjust size to the longer border + img_ratio = preview_size / w + else + img_ratio = preview_size / h + end +end + +-- Msg(w .. "-" .. h) + + -- body + ---- GUI Elements ---- + + +if reaper.GetOS() == "Win32" or reaper.GetOS() == "Win64" then + + if img_index then -- there is an episode-image + + GUI.elms = { + + -- name = element type x y w h caption ...other params... + logo = GUI.Pic:new( 484,280, 80, 80, img_ratio, img_adress, runcommand, "_Ultraschall_Open_Project_Folder"), + label = GUI.Lbl:new( 50, 120+y_offset, "Export MP3\nRender your Podcast to a MP3 File.\n\n\nChapter Markers\nYou may take a final look at your chapter markers.\n\n\nID3 Metadata\nUse the ID3 Editor to add metadata to your podcast.\n\n\nPodcast Episode Image:\nFound.\n\n\n\n\nFinalize MP3\nHit the button and select your MP3 to finalize it\nwith metadata, chapters and episode image!", 0), + label2 = GUI.Lbl:new( 30, 120+y_offset, "1.\n\n\n\n2.\n\n\n\n3.\n\n\n\n4.\n\n\n\n\n\n5.", 0), + label3 = GUI.Lbl:new( 30, 70+y_offset, "Follow these simple steps:", 0), + export = GUI.Btn:new( 430, 120+y_offset, 190, 40, "Export MP3", runcommand, "_Ultraschall_MP3_Render"), + chapters = GUI.Btn:new( 430, 185+y_offset, 190, 40, "View Chapters", runcommand, "_SWSMARKERLIST1"), + metadata = GUI.Btn:new( 430, 250+y_offset, 190, 40, "Edit ID3V2 Metadata", runcommand, "_Ultraschall_Edit_ID3_Tags"), + -- image = GUI.Btn:new( 430, 315+y_offset, 190, 40, "Open Project Folder", runcommand, "_Ultraschall_Open_Project_Folder"), + finalize = GUI.Btn:new( 430, 412+y_offset, 190, 40, "Finalize MP3!", runcommand, "_ULTRASCHALL_INSERT_MEDIA_PROPERTIES"), + } + + else + + GUI.elms = { + + -- name = element type x y w h caption ...other params... + -- logo = GUI.Pic:new( 374,178, 0, 0, img_ratio, img_adress), + label = GUI.Lbl:new( 50, 120+y_offset, "Export MP3\nRender your Podcast to a MP3 File.\n\n\nChapter Markers\nYou may take a final look at your chapter markers.\n\n\nID3 Metadata\nUse the ID3 Editor to add metadata to your podcast.\n\n\nPodcast Episode Image\nJust put a square .jpg, .jpeg or .png image with the\nname 'cover.xyz' OR with the same name as your\nproject file (.RPP) in the project folder.\n\n\nFinalize MP3\nHit the button and select your MP3 to finalize it\nwith metadata, chapters and episode image!", 0), + label2 = GUI.Lbl:new( 30, 120+y_offset, "1.\n\n\n\n2.\n\n\n\n3.\n\n\n\n4.\n\n\n\n\n\n5.", 0), + label3 = GUI.Lbl:new( 30, 70+y_offset, "Follow these simple steps:", 0), + export = GUI.Btn:new( 430, 120+y_offset, 190, 40, "Export MP3", runcommand, "_Ultraschall_MP3_Render"), + chapters = GUI.Btn:new( 430, 185+y_offset, 190, 40, "View Chapters", runcommand, "_SWSMARKERLIST1"), + metadata = GUI.Btn:new( 430, 250+y_offset, 190, 40, "Edit ID3V2 Metadata", runcommand, "_Ultraschall_Edit_ID3_Tags"), + image = GUI.Btn:new( 430, 315+y_offset, 190, 40, "Open Project Folder", runcommand, "_Ultraschall_Open_Project_Folder"), + finalize = GUI.Btn:new( 430, 412+y_offset, 190, 40, "Finalize MP3!", runcommand, "_ULTRASCHALL_INSERT_MEDIA_PROPERTIES"), + } + + end + +else -- macOS + + if img_index then -- there is an episode-image + + GUI.elms = { + + -- name = element type x y w h caption ...other params... + logo = GUI.Pic:new( 484,280, 80, 80, img_ratio, img_adress, runcommand, "_Ultraschall_Open_Project_Folder"), + label = GUI.Lbl:new( 50, 120+y_offset, "Export MP3/ m4a\nRender your Podcast to a MP3/ m4a File.\n\n\nChapter Markers\nYou may take a final look at your chapter markers.\n\n\nID3 Metadata\nUse the ID3 Editor to add metadata to your podcast.\n\n\nPodcast Episode Image:\nFound.\n\n\n\n\nFinalize MP3/ m4a\nHit the button and select your MP3/ m4a to finalize it\nwith metadata, chapters and episode image!", 0), + label2 = GUI.Lbl:new( 30, 120+y_offset, "1.\n\n\n\n2.\n\n\n\n3.\n\n\n\n4.\n\n\n\n\n\n5.", 0), + label3 = GUI.Lbl:new( 30, 70+y_offset, "Follow these simple steps:", 0), + export = GUI.Btn:new( 430, 120+y_offset, 190, 40, "Export MP3/ m4a", runcommand, "_Ultraschall_MP3_Render"), + chapters = GUI.Btn:new( 430, 185+y_offset, 190, 40, "View Chapters", runcommand, "_SWSMARKERLIST1"), + metadata = GUI.Btn:new( 430, 250+y_offset, 190, 40, "Edit ID3V2 Metadata", runcommand, "_Ultraschall_Edit_ID3_Tags"), + -- image = GUI.Btn:new( 430, 315+y_offset, 190, 40, "Open Project Folder", runcommand, "_Ultraschall_Open_Project_Folder"), + finalize = GUI.Btn:new( 430, 412+y_offset, 190, 40, "Finalize MP3/ m4a!", runcommand, "_ULTRASCHALL_INSERT_MEDIA_PROPERTIES"), + } + + else + + GUI.elms = { + + -- name = element type x y w h caption ...other params... + -- logo = GUI.Pic:new( 374,178, 0, 0, img_ratio, img_adress), + label = GUI.Lbl:new( 50, 120+y_offset, "Export MP3/ m4a\nRender your Podcast to a MP3/ m4a File.\n\n\nChapter Markers\nYou may take a final look at your chapter markers.\n\n\nID3 Metadata\nUse the ID3 Editor to add metadata to your podcast.\n\n\nPodcast Episode Image\nJust put a square .jpg, .jpeg or .png image with the\nname 'cover.xyz' OR with the same name as your\nproject file (.RPP) in the project folder.\n\n\nFinalize MP3/ m4a\nHit the button and select your MP3/ m4a to finalize it\nwith metadata, chapters and episode image!", 0), + label2 = GUI.Lbl:new( 30, 120+y_offset, "1.\n\n\n\n2.\n\n\n\n3.\n\n\n\n4.\n\n\n\n\n\n5.", 0), + label3 = GUI.Lbl:new( 30, 70+y_offset, "Follow these simple steps:", 0), + export = GUI.Btn:new( 430, 120+y_offset, 190, 40, "Export MP3/ m4a", runcommand, "_Ultraschall_MP3_Render"), + chapters = GUI.Btn:new( 430, 185+y_offset, 190, 40, "View Chapters", runcommand, "_SWSMARKERLIST1"), + metadata = GUI.Btn:new( 430, 250+y_offset, 190, 40, "Edit ID3V2 Metadata", runcommand, "_Ultraschall_Edit_ID3_Tags"), + image = GUI.Btn:new( 430, 315+y_offset, 190, 40, "Open Project Folder", runcommand, "_Ultraschall_Open_Project_Folder"), + finalize = GUI.Btn:new( 430, 412+y_offset, 190, 40, "Finalize MP3/ m4a!", runcommand, "_ULTRASCHALL_INSERT_MEDIA_PROPERTIES"), + } + + end +end + + ---- Put all of your own functions and whatever here ---- + +--Msg("hallo") + + + + ---- Main loop ---- + +--[[ + + If you want to run a function during the update loop, use the variable GUI.func prior to + starting GUI.Main() loop: + + GUI.func = my_function + GUI.freq = 5 <-- How often in seconds to run the function, so we can avoid clogging up the CPU. + - Will run once a second if no value is given. + - Integers only, 0 will run every time. + + GUI.Init() + GUI.Main() + +]]-- + +-- local startscreen = GUI.val("checkers") +-- local startscreen = GUI.elms.checkers[GUI.Val()] + +-- Open Export Assistant, when it hasn't been opened yet + if reaper.GetExtState("Ultraschall_Windows", GUI.name) == "" then windowcounter=0 -- Check if window was ever opened yet(and external state for it exists already). + -- If yes, use temporarily 0 as opened windows-counter;will be changed by ultraschall_gui_lib.lua later + else windowcounter=tonumber(reaper.GetExtState("Ultraschall_Windows", GUI.name)) end -- get number of opened windows + + if windowcounter<1 then -- you can choose how many GUI.name-windows are allowed to be opened at the same time. + -- 1 means 1 window, 2 means 2 windows, 3 means 3 etc + GUI.Init() + GUI.Main() + end diff --git a/Scripts/ultraschall_followmode_reset.lua b/Scripts/ultraschall_followmode_reset.lua new file mode 100644 index 0000000..8c20bb1 --- /dev/null +++ b/Scripts/ultraschall_followmode_reset.lua @@ -0,0 +1,147 @@ +--[[ +################################################################################ +# +# Copyright (c) 2014-2018 Ultraschall (http://ultraschall.fm) +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +# THE SOFTWARE. +# +################################################################################ +]] + + +-- Resets the Followmode, when someone moves the editcursor or when the playcursor leaves +-- the arrange-view +-- If you want to signal this script to skip one check-cycle, set external state +-- "follow" -> "skip" to "true" +-- in cases, where auto-follow-off reacts without your consent. +-- You must set this external state before(!) taking the action, that triggers the +-- auto-follow-off, or this script might keep on causing you the trouble... + + +factor=0.5 -- how long to wait inbetween checks, in seconds. + +--Initialize variables +internal_skip=false +recognized=false +waittime=reaper.time_precise()+factor +timeframe=0.5 +editcursor=reaper.GetCursorPosition() +start_time, end_time = reaper.GetSet_ArrangeView2(0, false, 0, 0) +integer = reaper.NamedCommandLookup("_Ultraschall_Toggle_Follow") +follow_on_id = reaper.NamedCommandLookup("_Ultraschall_Turn_On_Followmode") +follow_off_id = reaper.NamedCommandLookup("_Ultraschall_Turn_Off_Followmode") +start_time, end_time = reaper.GetSet_ArrangeView2(0, false, 0, 0) +old_starttime, old_endtime= reaper.GetSet_ArrangeView2(0, false, 0, 0) +rec_timeframe=0 +env=reaper.GetSelectedEnvelope() +oldpoints=-1 +if env==nil then oldpoints="-1" +else + tempo, oldpoints=reaper.GetEnvelopeStateChunk(env,"",false) +end +if oldpoints==nil then oldpoints=-1 end + +function main() +-- if reaper.GetExtState("follow", "recognized")=="false" then recognized=false reaper.SetExtState("follow", "recognized", "true", false) end + start_time, end_time = reaper.GetSet_ArrangeView2(0, false, 0, 0) + timeframe2=(end_time-start_time)/8 + if timeframe2>0.5 then timeframe2=0.5 end + if reaper.GetPlayState()&4==4 then rec_timeframe=1 else rec_timeframe=0 end + if waittime1500 then + -- with high zoom-levels, we need more recheck-cycles + -- or changing the editcursor might not be recognized + factor2=0.0000000001 + timeframe=0.5--20/reaper.GetHZoomLevel() + else + factor2=factor + timeframe=0.5 + end + + --if followmode is on, play and rec + if reaper.GetPlayState()~=0 and + reaper.GetPlayState()&2~=2 and -- comment, if you want to trigger AutoFollowOff during pause + reaper.GetExtState("follow", "skip")~="true" then + + -- check, if editcursor has been moved + window, segment, details = reaper.BR_GetMouseCursorContext() + if reaper.GetCursorPosition()~=editcursor and window~="ruler" then + reaper.Main_OnCommand(integer,0) + editcursor=reaper.GetCursorPosition() + end + + -- check, if playcursor is outside of view + start_time, end_time = reaper.GetSet_ArrangeView2(0, false, 0, 0) + if reaper.GetPlayPosition()end_time+rec_timeframe then + reaper.Main_OnCommand(integer,0) + end + + if end_time<=old_starttime then + -- reaper.ShowConsoleMsg("flip links\n") + -- reaper.Main_OnCommand(integer,0) + end + + -- hacky workaround for envelopes. if anything is changed in envelopes, follow will be turned off + window, segment, details = reaper.BR_GetMouseCursorContext() + if env~=nil then + tempo, temppoints=reaper.GetEnvelopeStateChunk(env,"",false) + else + temppoints="-1" + end + if env~=reaper.GetSelectedEnvelope() and window=="arrange" and segment=="envelope" then + -- if selected envelope has changed and mouse is inside the envelope-lane of arrange-view, + -- turn off followmode + reaper.Main_OnCommand(integer,0) + env=reaper.GetSelectedEnvelope() + if env~=nil then + tempo, oldpoints=reaper.GetEnvelopeStateChunk(env,"",false) --reaper.CountEnvelopePoints(env) + else + oldpoints="-1" + end + elseif env==reaper.GetSelectedEnvelope() and oldpoints~=temppoints then --reaper.CountEnvelopePoints(env) then + -- if anything within the envelope-lane (points, values, number of points) has changed, + -- turn off followmode + reaper.Main_OnCommand(integer,0) + oldpoints=temppoints--reaper.CountEnvelopePoints(env) + if oldpoints==nil then oldpoints=-1 end + end + + + else + editcursor=reaper.GetCursorPosition() + end + + + reaper.SetExtState("follow", "skip", "false", false) --reset skip-state + waittime=reaper.time_precise()+factor2 + editcursor=reaper.GetCursorPosition() + if env~=nil then + tempo, temppoints=reaper.GetEnvelopeStateChunk(env,"",false) + tempo, oldpoints=reaper.GetEnvelopeStateChunk(env,"",false) + else + temppoints="-1" + oldpoints="-1" + end + end + reaper.defer(main) +end + +main() diff --git a/Scripts/ultraschall_get_id3_tags.lua b/Scripts/ultraschall_get_id3_tags.lua new file mode 100644 index 0000000..03472ba --- /dev/null +++ b/Scripts/ultraschall_get_id3_tags.lua @@ -0,0 +1,36 @@ +--[[ +################################################################################ +# +# Copyright (c) 2014-2017 Ultraschall (http://ultraschall.fm) +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +# THE SOFTWARE. +# +################################################################################ +]] + + +-- Print Message to console (debugging) +function Msg(val) + reaper.ShowConsoleMsg(tostring(val).."\n") +end + +notes = reaper.GetSetProjectNotes(0, false, "") +-- Msg(notes) +return notes + diff --git a/Scripts/ultraschall_go_to_cursor.lua b/Scripts/ultraschall_go_to_cursor.lua new file mode 100644 index 0000000..51b3045 --- /dev/null +++ b/Scripts/ultraschall_go_to_cursor.lua @@ -0,0 +1,42 @@ +--[[ +################################################################################ +# +# Copyright (c) 2014-2018 Ultraschall (http://ultraschall.fm) +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +# THE SOFTWARE. +# +################################################################################ +]] + +-- Go to playcursor when playing and recording or go to editcursor when stopped +-- Compatible to follow-mode... + + if reaper.GetPlayState()~=0 then + -- when playing and recording + reaper.Main_OnCommand(40150,0) -- Go to play position + start_time, end_time = reaper.GetSet_ArrangeView2(0, false, 0, 0) + length=(end_time-start_time)*0.5 + reaper.BR_SetArrangeView(0, (reaper.GetPlayPosition()-length), (reaper.GetPlayPosition()+length)) + else + -- when stopped + reaper.Main_OnCommand(40151,0) -- Go to editcursor position + start_time, end_time = reaper.GetSet_ArrangeView2(0, false, 0, 0) + length=(end_time-start_time)*0.5 + reaper.BR_SetArrangeView(0, (reaper.GetCursorPosition()-length), (reaper.GetCursorPosition()+length)) + end diff --git a/Scripts/ultraschall_gui_lib.lua b/Scripts/ultraschall_gui_lib.lua new file mode 100644 index 0000000..f0c23ad --- /dev/null +++ b/Scripts/ultraschall_gui_lib.lua @@ -0,0 +1,1900 @@ +--[=[ + GUI Tutorial - LS GUI library demonstration + by Lokasenna + + Provides functions and classes for adding a GUI to another LUA script. + + NOTE: This file is just a proof-of-concept demo, meant to accompany the + tutorial thread here: http://forum.cockos.com/showthread.php?t=176662 + + It's a little sloppy, probably has a few bugs, and definitely could do things + much more efficiently. I would not suggest using it for a script intended + for use by other people. A proper "release" version is forthcoming. + + + + + Scripts using this should include the following block at the top of the file: + + +-- Grab everything from our GUI library +local info = debug.getinfo(1,'S'); +script_path = info.source:match[[^@?(.*[\/])[^\/]-$]] +GUI = dofile(script_path .. "LS GUI.lua") + + + All of the functions in this file can then be called like so: + + local newcolor = GUI.rgb2num(255, 192, 128) + ^^^^ + + + + To create the GUI elements, create a table in your script called GUI.elms + and populate it like so + +GUI.elms = { + + item1 = type:New(parameters), + item2 = type:New(parameters), + item3 = type:New(parameters), + ...etc... + +} + + See the :New method for each element below for a listing of its parameters + + + For a working example, see the file "GUI Tutorial - LS GUI usage demo.lua" + that should be included alongside this script. + +]=]-- + + + +-- Create a master table to store all of our functions +-- After each function we'll read it into the table with: +-- GUI.xxx = xxx +local GUI = {} + + + + +--[[ Font and color presets + + Can be set using the accompanying functions GUI.font + and GUI.color. i.e. + + GUI.font(2) applies the Header preset + GUI.color("elm_fill") applies the Element Fill color preset + + Colors are converted from 0-255 to 0-1 when GUI.Init() runs, + so if you need to access the values directly at any point be + aware of which format you're getting in return. + +]]-- + +if reaper.GetOS()=="OSX32" or reaper.GetOS()=="OSX64" then + font_size = 14 + font_face = "Helvetica" +else + font_size = 16 + font_face = "Arial" +end + +GUI.fonts = { + + {font_face, font_size}, -- 1. Title + {font_face, font_size}, -- 2. Header + {font_face, font_size}, -- 3. Label + {font_face, font_size} -- 4. Value + +} + +GUI.colors = { + + wnd_bg = {44, 44, 44, 1}, -- Window BG + elm_bg = {48, 48, 48, 1}, -- Element BG + elm_frame = {70, 70, 70, 1}, -- Element Frame + elm_highlight = {100, 100, 100, 1}, -- Element Highlight + elm_fill = {200, 130, 64, 1}, -- Element Fill + elm_outline = {32, 32, 32, 1}, + txt = {200, 200, 200, 1}, -- Text + + shadow = {0, 0, 0, 0.6} -- Shadow. Don't call this with GUI.color + +} + +GUI.font = function (fnt) + gfx.setfont(1, table.unpack(GUI.fonts[fnt])) +end + +GUI.color = function (col) + gfx.set(table.unpack(GUI.colors[col])) +end + +-- A size setting for any elements using shadows +GUI.shadow_dist = 1 + +-- Draw the given string with a shadow +GUI.shadow = function (str) + + local x, y = gfx.x, gfx.y + + GUI.color("shadow") + for i = 1, GUI.shadow_dist do + gfx.x, gfx.y = x + i, y + i + gfx.drawstr(str) + end + + GUI.color("txt") + gfx.x, gfx.y = x, y + gfx.drawstr(str) + +end + + +-- Initialize some mouse values +GUI.mouse = { + + x = 0, + y = 0, + cap = 0, + down = false, + wheel = 0 + +} + +-- For use with external user functions. Returns the given element's current value or, if specified, sets a new one. +GUI.Val = function (elm, newval) + + if newval then + GUI.elms[elm]:val(newval) + else + return GUI.elms[elm]:val() + end + +end + + + ---- General functions ---- + + +-- Print stuff to the Reaper console. For debugging purposes. +local function Msg(message) + reaper.ShowConsoleMsg(tostring(message).."\n") +end +GUI.Msg = Msg + + +-- Take discrete RGB values and return the combined integer +-- (equal to hex colors of the form 0xRRGGBB) +local function rgb2num(red, green, blue) + + green = green * 256 + blue = blue * 256 * 256 + + return red + green + blue + +end +GUI.rgb2num = rgb2num + + +-- Convert a number to hexadecimal +local function num2hex(num) + + local hexstr = '0123456789abcdef' + local s = '' + + while num > 0 do + local mod = math.fmod(num, 16) + s = string.sub(hexstr, mod+1, mod+1) .. s + num = math.floor(num / 16) + end + + if s == '' then s = '0' end + return s + +end +GUI.num2hex = num2hex + + +-- Convert a hex color to integers r,g,b +local function hex2rgb(num) + + if string.sub(num, 1, 2) == "0x" then + num = string.sub(num, 3) + end + + local red = string.sub(num, 1, 2) + local blue = string.sub(num, 3, 4) + local green = string.sub(num, 5, 6) + + red = tonumber(red, 16) + blue = tonumber(blue, 16) + green = tonumber(green, 16) + + return red, green, blue + +end +GUI.hex2rgb = hex2rgb + + +-- Round a number to the nearest integer +local function round(num) + return num % 1 >= 0.5 and math.ceil(num) or math.floor(num) +end +GUI.round = round + + +-- Improved roundrect() function with fill, adapted from mwe's EEL example. +local function roundrect(x, y, w, h, r, antialias, fill) + + local aa = antialias or 1 + fill = fill or 0 + + if fill == 0 or false then + gfx.roundrect(x, y, w, h, r, aa) + elseif h >= 2 * r then + + -- Corners + gfx.circle(x + r, y + r, r, 1, aa) -- top-left + gfx.circle(x + w - r, y + r, r, 1, aa) -- top-right + gfx.circle(x + w - r, y + h - r, r , 1, aa) -- bottom-right + gfx.circle(x + r, y + h - r, r, 1, aa) -- bottom-left + + -- Ends + gfx.rect(x, y + r, r, h - r * 2) + gfx.rect(x + w - r, y + r, r + 1, h - r * 2) + + -- Body + sides + gfx.rect(x + r, y, w - r * 2, h + 1) + + else + + r = h / 2 - 1 + + -- Ends + gfx.circle(x + r, y + r, r, 1, aa) + gfx.circle(x + w - r, y + r, r, 1, aa) + + -- Body + gfx.rect(x + r, y, w - r * 2, h) + + end + +end +GUI.roundrect = roundrect + + +-- Improved triangle() function with optional non-fill +local function triangle(fill, ...) + + -- Pass any calls for a filled triangle on to the original function + if fill == 1 then + + gfx.triangle(...) + + else + + -- Store all of the provided coordinates into an array + local coords = {...} + + -- Duplicate the first pair at the end, so the last line will + -- be drawn back to the starting point. + coords[#coords + 1] = coords[1] + coords[#coords + 1] = coords[2] + + -- Draw a line from each pair of coords to the next pair. + for i = 1, #coords - 2, 2 do + + gfx.line(coords[i], coords[i+1], coords[i+2], coords[i+3]) + + end + + end + +end +GUI.triangle = triangle + +--[[ + Takes an angle in radians (leave out pi) and a radius, returns x, y + Will return coordinates relative to an origin of 0, or absolute + coordinates if an origin point is specified +]]-- +local function polar2cart(angle, radius, ox, oy) + + local angle = angle * math.pi + local x = radius * math.cos(angle) + local y = radius * math.sin(angle) + + + if ox and oy then x, y = x + ox, y + oy end + + return x, y + +end + + +-- Are these coordinates inside the given element? +local function IsInside(elm, x, y) + + local inside = + x >= elm.x and x < (elm.x + elm.w) and + y >= elm.y and y < (elm.y + elm.h) + + return inside + +end +GUI.IsInside = IsInside + + + + + ---- Our main functions ---- + + +function Init() + + -- Create the window + gfx.clear = GUI.rgb2num(table.unpack(GUI.colors.wnd_bg)) + gfx.init(GUI.name, GUI.w, GUI.h, 0, GUI.x, GUI.y) -- 0 means "undocked", 1 would dock it in the first dock position (Mixer) + +-- mespotine hack +-- If a window is opened, there is a new external state written: +-- [Ultraschall_Windows] +-- GUI.name = number of windows +-- +-- example - if one colorpicker window is open +-- [Ultraschall_Windows] +-- Ultraschall Color Picker = 1.0 +-- +-- example - if no(!) colorpicker window is open +-- [Ultraschall_Windows] +-- Ultraschall Color Picker = 0.0 +-- +-- example - if ten colorpicker windows are open +-- [Ultraschall_Windows] +-- Ultraschall Color Picker = 10.0 +-- +-- if colorpicker window wasn't opened yet or there is a nil value, or the number of open windows is "negative" in the external states, it will revert to 0 first, before counting up and opening a new window + +windownumber=reaper.GetExtState("Ultraschall_Windows",GUI.name) +if windownumber=="" then windownumberint=0 +else windownumberint=tonumber(windownumber) end + +if windownumberint<=0 then windownumberint=0 end + +-- reaper.MB(tostring(windownumberint),"GUI"..GUI.name,0) +windownumberint=windownumberint+1 +-- reaper.MB(tostring(windownumberint),"GUI"..GUI.name,0) +reaper.SetExtState("Ultraschall_Windows",GUI.name,windownumberint,true) + + + -- Initialize any variables that are necessary + GUI.last_time = 0 + + -- Convert color presets from 0..255 to 0..1 + for i, col in pairs(GUI.colors) do + col[1], col[2], col[3] = col[1] / 255, col[2] / 255, col[3] / 255 + end + +end + +GUI.Init = Init + + +function Main() + + + -- Update mouse and keyboard state + GUI.mouse.x, GUI.mouse.y = gfx.mouse_x, gfx.mouse_y + GUI.mouse.cap = gfx.mouse_cap + GUI.char = gfx.getchar() + + -- (Escape key) (Window closed) + if GUI.char == 27 or GUI.char == -1 then + windownumber=reaper.GetExtState("Ultraschall_Windows",GUI.name) +-- reaper.MB(windownumber,"pre",0) + reaper.SetExtState("Ultraschall_Windows",GUI.name,windownumber-1,true) +-- reaper.MB(reaper.GetExtState("Ultraschall_Windows",GUI.name),"post",0) + return 0 + else + reaper.defer(GUI.Main) + end + + -- Update each element + for key, elm in pairs(GUI.elms) do + GUI.Update(elm) + end + + -- If the user gave us a function to run, check + -- to see if it needs to be run again, and do so. + if GUI.func then + + GUI.freq = GUI.freq or 1 + + local new_time = reaper.time_precise() + if new_time - GUI.last_time >= GUI.freq then + GUI.func() + GUI.last_time = new_time + + end + end + + + gfx.update() + +end + +GUI.Main = Main + + + + + +function Update(elm) + + local x, y = GUI.mouse.x, GUI.mouse.y + local char = GUI.char + + -- Left button down + if GUI.mouse.cap&1==1 then + + -- If it wasn't down already... + if not GUI.mouse.down then + + -- Was a different element clicked? + if not IsInside(elm, x, y) then + + elm.focus = false + + else + + + GUI.mouse.down = true + GUI.mouse.ox, GUI.mouse.oy = x, y + GUI.mouse.lx, GUI.mouse.ly = x, y + elm.focus = true + elm:onmousedown() + + + end + + -- Double clicked? + if GUI.mouse.uptime and reaper.time_precise() - GUI.mouse.uptime < 0.15 then + elm:ondoubleclick() + end + + -- Dragging? Did the mouse start out in this element? + elseif (x ~= GUI.mouse.lx or y ~= GUI.mouse.ly) and IsInside(elm, GUI.mouse.ox, GUI.mouse.oy) then + + if elm.focus ~= nil then elm:ondrag() end + + GUI.mouse.lx, GUI.mouse.ly = x, y + + end + + -- If it was originally clicked in this element and has now been released + elseif GUI.mouse.down and IsInside(elm, GUI.mouse.ox, GUI.mouse.oy) then + + elm:onmouseup() + GUI.mouse.down = false + GUI.mouse.ox, GUI.mouse.oy = -1, -1 + GUI.mouse.lx, GUI.mouse.ly = -1, -1 + GUI.mouse.uptime = reaper.time_precise() + + end + + -- If the element is in focus and the user typed something + if elm.focus and char ~= 0 then elm:ontype(char) end + + -- Draw the element + elm:draw() + +end + +GUI.Update = Update + + + + + + ---- Element classes ---- + + +--[[ ColorPic class. + + ---- User parameters ---- +x, y Coordinates of top-left corner +w, h width and height +t table with color values + +]]-- + + + +----------------- + +-- ColorPic - New +local ColorPic = {} +function ColorPic:new(x, y, w, h, t) + + local colorpicker = {} + colorpicker.type = "ColorPic" + colorpicker.table = t + colorpicker.x, colorpicker.y, colorpicker.w, colorpicker.h = x, y, w, h + colorpicker.num = 20 + colorpicker.state = 0 + + setmetatable(colorpicker, self) + self.__index = self + return colorpicker + +end + + +-- ColorPic - Mouseclick +function ColorPic:draw() + local key, value, r , g ,b = "" + local offset = 0 + local x, y, table = self.x, self.y, self.table + for i=0, self.num-1, 1 do + r, g, b = reaper.ColorFromNative(table[i]) + gfx.set(r/255, g/255, b/255, 1) + GUI.roundrect(x + offset*44, y, 40, 30, 2, 1, 1) + if offset == 3 then + offset = 0 + y = y + 34 + else + offset = offset + 1 + end + end +end + +-- ColorPic - Mouseclick + +function ColorPic:onmousedown() + -- If the button was released on the button, run func + if IsInside(self, GUI.mouse.x, GUI.mouse.y) then + col = (GUI.mouse.x+20) / 44 - 1 + col = GUI.round(col) + row = GUI.round((GUI.mouse.y+16) / 34 -1) + + colnumber = col + 4 * row + if colnumber < 0 then colnumber = 0 end + if colnumber > 19 then colnumber = 19 end + -- GUI.Msg(colnumber) + col = self.table[colnumber] + -- GUI.Msg(col) + + ---------------------------------- + -- step 3: assign colors to tracks + ---------------------------------- + + nothingselected = false + countTracks = reaper.CountSelectedTracks(0) + countItems = reaper.CountSelectedMediaItems(0) + + if countTracks == 0 and countItems == 0 then -- no track or items selected + nothingselected = true + reaper.Main_OnCommand(40296,0) -- select all tracks + countTracks = reaper.CountSelectedTracks(0) + end + + if countTracks > 0 then -- SELECTED TRACKS LOOP + for j = 0, countTracks-1 do + track = reaper.GetSelectedTrack(0, j) + reaper.SetTrackColor (track, col) --set Color to track + end + end + + if countItems > 0 then -- SELECTED ITEMS LOOP + for j = 0, countItems-1 do + item = reaper.GetSelectedMediaItem(0, j) + reaper.SetMediaItemInfo_Value(item, "I_CUSTOMCOLOR", col|16777216) + reaper.UpdateArrange() + end + end + + if nothingselected == true then -- restore selection state + reaper.Main_OnCommand(40297,0) -- unselect all tracks + end + + end +end + +-- ColorPic - Unused methods. + +function ColorPic:onmouseup() end +function ColorPic:ondoubleclick() end +function ColorPic:ondrag() end +function ColorPic:ontype() end + +GUI.ColorPic = ColorPic + + + + ---- Element classes ---- + + +--[[ Pic class. + + ---- User parameters ---- +x, y Coordinates of top-left corner +source Image Source +action onclick action + +]]-- + + + +----------------- + +-- picture - New +local Pic = {} +function Pic:new(x, y, w, h, zoom, source, func, ... ) + + local picture = {} + picture.type = "Pic" + + picture.x, picture.y = x, y + picture.w, picture.h = w, h + picture.zoom = zoom + picture.source = source + picture.func = func + picture.params = {...} + + setmetatable(picture, self) + self.__index = self + return picture + +end + + +-- picture - Draw +function Pic:draw() + + local x, y, zoom = self.x, self.y, self.zoom + + buffer_id = 0 -- top layer + loadimg = gfx.loadimg(buffer_id, self.source) + gfx.x, gfx.y = x, y + gfx.blit(buffer_id,zoom,0) + +end + + +function Pic:onmousedown() + + if IsInside(self, GUI.mouse.x, GUI.mouse.y) then + self.func(table.unpack(self.params)) + end +end + + +-- picture - Unused methods. + +function Pic:onmouseup() end +function Pic:ondoubleclick() end +function Pic:ondrag() end +function Pic:ontype() end + + +GUI.Pic = Pic + + + + + ---- Element classes ---- + + +--[[ SubPic class. + + ---- User parameters ---- +x, y Coordinates of top-left corner +source Image Source +action onclick action + +]]-- + + +----------------- + +-- picture - New +local Subpic = {} +function Subpic:new(x, y, w, h, zoom, source, offset_x, offset_y, ... ) + + local picture = {} + picture.type = "Subpic" + + picture.x, picture.y = x, y + picture.w, picture.h = w, h + picture.offset_x, picture.offset_y = offset_x, offset_y + picture.zoom = zoom + picture.source = source + picture.params = {...} + + setmetatable(picture, self) + self.__index = self + return picture + +end + + +-- picture - Draw +function Subpic:draw() + + local x, y, zoom, w, h, offset_x, offset_y = self.x, self.y, self.zoom, self.w, self.h, self.offset_x, self.offset_y + + buffer_id = 0 -- top layer + loadimg = gfx.loadimg(buffer_id, self.source) + gfx.x, gfx.y = x, y + gfx.blit(buffer_id,zoom,0, offset_x, offset_y, w, h) + +end + + +-- picture - Unused methods. + +function Subpic:onmousedown() end +function Subpic:onmouseup() end +function Subpic:ondoubleclick() end +function Subpic:ondrag() end +function Subpic:ontype() end + + +GUI.Subpic = Subpic + + +--[[ Line class. + + ---- User parameters ---- +x, y Coordinates of top-left corner +x2, y2 Coordinates for the end + +]]-- + + +----------------- + +-- picture - New +local Line = {} +function Line:new(x, y, x2, y2) + + local drawline = {} + drawline.type = "Line" + drawline.x, drawline.y = x, y + drawline.x2, drawline.y2 = x2, y2 + drawline.w, drawline.h = 1, 1 + + setmetatable(drawline, self) + self.__index = self + return drawline + +end + + +-- picture - Draw +function Line:draw() + + local x, y, x2, y2 = self.x, self.y, self.x2, self.y2 + + buffer_id = 0 -- top layer + gfx.x, gfx.y = x, y + GUI.color("elm_outline") + gfx.line(x,y,x2,y2) + +end + +-- Line - Unused methods. + +function Line:onmousedown() end +function Line:onmouseup() end +function Line:ondoubleclick() end +function Line:ondrag() end +function Line:ontype() end + +GUI.Line = Line + + +----------------- + +-- Lbl - New +local Lbl = {} +function Lbl:new(x, y, caption, shadow) + + local label = {} + label.type = "Lbl" + + label.x, label.y = x, y + + -- Placeholders for these values, since we don't need them + -- but some functions will throw a fit if they aren't there + label.w, label.h = 0, 0 + + label.caption = caption + + label.shadow = shadow or 0 + + setmetatable(label, self) + self.__index = self + return label + +end + + +-- Lbl - Draw +function Lbl:draw() + + local x, y = self.x, self.y + + GUI.font(1) + + -- Shadow + if self.shadow ~= 0 then + + GUI.color("shadow") + local dist = GUI.shadow_dist + for i = 1, GUI.shadow_dist do + + gfx.x, gfx.y = x + i, y + i + gfx.drawstr(self.caption) + + end + + end + + -- Text + GUI.color("txt") + gfx.x, gfx.y = x, y + gfx.drawstr(self.caption) + + +end + + +-- Lbl - Unused methods. +function Lbl:onmousedown() end +function Lbl:onmouseup() end +function Lbl:ondoubleclick() end +function Lbl:ondrag() end +function Lbl:ontype() end + + +GUI.Lbl = Lbl + + +--[[ Sldr class. + + ---- User parameters ---- +x, y, w Coordinates of top-left corner, width. Height is fixed. +caption Label / question +min, max Minimum and maximum slider values +steps How many steps between min and max +default Where the slider should start + + ---- Additional values ---- +retval Current value of the slider + +]]-- + +-- Sldr - New +local Sldr = {} +function Sldr:new(x, y, w, caption, min, max, steps, default) + + local sldr = {} + sldr.type = "Sldr" + + sldr.x, sldr.y, sldr.w, sldr.h = x, y, w, 8 + + sldr.caption = caption + + sldr.min, sldr.max = min, max + sldr.steps = steps + sldr.default, sldr.curstep = default, default + + sldr.curval = sldr.curstep / steps + sldr.retval = ((max - min) / steps) * sldr.curstep + min + + + setmetatable(sldr, self) + self.__index = self + return sldr + +end + + +-- Sldr - Draw +function Sldr:draw() + + + local x, y, w, h = self.x, self.y, self.w, self.h + + local steps = self.steps + local curstep = self.curstep + + -- Size of the handle + local radius = 8 + + + -- Draw track + GUI.color("elm_bg") + GUI.roundrect(x, y, w, h, 4, 1, 1) + GUI.color("elm_outline") + GUI.roundrect(x, y, w, h, 4, 1, 0) + + + -- limit everything to be drawn within the square part of the track + x, w = x + 4, w - 8 + + local inc = w / steps + + -- Draw ticks +--[[ + if self.ticks == 1 or true then + + GUI.color("elm_frame") + + for i = 0, steps do + gfx.line(x + i * inc, y - 4, x + i * inc, y - h, 1) + gfx.line(x + i * inc, y + h + 4, x + i * inc, y + h + h, 1) + end + + end +]]-- + + -- Draw handle + outline + local ox, oy = x + inc * curstep, y + (h / 2) + + GUI.color("shadow") + for i = 1, GUI.shadow_dist do + + gfx.circle(ox + i, oy + i, radius - 1, 1, 1) + + end + + GUI.color("elm_frame") + gfx.circle(ox, oy, radius - 1, 1, 1) + + GUI.color("elm_outline") + gfx.circle(ox, oy, radius, 0, 1) + + + -- Draw caption + GUI.font(3) + GUI.color("txt") + + local str_w, str_h = gfx.measurestr(self.caption) + + gfx.x = x + (w - str_w) / 2 + gfx.y = y - h - str_h + + gfx.drawstr(self.caption) + + + -- Draw value + self.retval = ((self.max - self.min) / steps) * curstep + self.min + + GUI.font(4) + + local str_w, str_h = gfx.measurestr(self.retval) + gfx.x = x + (w - str_w) / 2 + gfx.y = y + h + h + + gfx.drawstr(self.retval) + +end + + +-- Sldr - Mouse down +function Sldr:onmousedown() + + -- Snap to the nearest value + self.curval = (GUI.mouse.x - self.x) / self.w + if self.curval > 1 then self.curval = 1 end + if self.curval < 0 then self.curval = 0 end + + self.curstep = round(self.curval * self.steps) + +end + + +-- Sldr - Dragging +function Sldr:ondrag() + + local x = GUI.mouse.x + local lx = GUI.mouse.lx + + -- Ctrl? + local ctrl = GUI.mouse.cap&4==4 + + -- A multiplier for how fast the slider should move + -- Higher values = slower + -- Ctrl Normal + local adj = ctrl and 1200 or 150 + + self.curval = self.curval + ((x - lx) / adj) + if self.curval > 1 then self.curval = 1 end + if self.curval < 0 then self.curval = 0 end + + self.curstep = round(self.curval * self.steps) + + + +end + + +-- Sldr - Unused methods +function Sldr:onmouseup() end +function Sldr:ondoubleclick() end +function Sldr:ontype() end + + +GUI.Sldr = Sldr + + + +--[[ Knob class. + + ---- User parameters ---- +x, y, w Coordinates of top-left corner, width. Height is fixed. +caption Label / question +min, max Minimum and maximum slider values +steps How many steps between min and max +default Where the slider should start +ticks (1) display tick marks, (0) no tick marks + + ---- Additional values ---- +retval Current value of the knob + +]]-- + +-- Knob - New. +local Knob = {} +function Knob:new(x, y, w, caption, min, max, steps, default, ticks) + + local knb = {} + knb.type = "Knob" + + knb.x, knb.y, knb.w, knb.h = x, y, w, w + + knb.caption = caption + + knb.min, knb.max = min, max + + knb.steps, knb.ticks = steps, ticks or 0 + + -- Determine the step angle + knb.stepangle = (3 / 2) / knb.steps + + knb.default, knb.curstep = default, default + + knb.retval = ((max - min) / steps) + min + knb.curval = knb.curstep / knb.steps + + setmetatable(knb, self) + self.__index = self + return knb + +end + + + + +-- Knob - Draw +function Knob:draw() + + + local x, y, w = self.x, self.y, self.w + + local caption = self.caption + + local min, max = self.min, self.max + + local default = self.default + + local ticks = self.ticks + local stepangle = self.stepangle + + local curstep = self.curstep + + local steps = self.steps + + local r = w / 2 + local o = {x = x + r, y = y + r} + + + -- Figure out where the knob is pointing + local curangle = (-5 / 4) + (curstep * stepangle) + + + -- Ticks and labels + if ticks > 0 then + + GUI.font(4) + + for i = 0, steps do + + local angle = (-5 / 4 ) + (i * stepangle) + + GUI.color("elm_frame") + + -- Tick marks + local x1, y1 = polar2cart(angle, r * 1.2, o.x, o.y) + local x2, y2 = polar2cart(angle, r * 1.6, o.x, o.y) + + gfx.line(x1, y1, x2, y2) + + -- Highlight the current value + if i == curstep then + GUI.color("elm_fill") + else + GUI.color("txt") + end + + -- Values + local str = tostring(i + min) + local cx, cy = polar2cart(angle, r * 2, o.x, o.y) + local str_w, str_h = gfx.measurestr(str) + gfx.x, gfx.y = cx - str_w / 2, cy - str_h / 2 + + gfx.drawstr(str) + + + end + end + + + -- Knob: + + -- Figure out the points of the triangle + local curangle = (-5 / 4) + (curstep * stepangle) + + local Ax, Ay = polar2cart(curangle, 1.4 * r, o.x, o.y) + local Bx, By = polar2cart(curangle + 1/2, r - 1, o.x, o.y) + local Cx, Cy = polar2cart(curangle - 1/2, r - 1, o.x, o.y) + + -- Shadow + GUI.color("shadow") + local dist = GUI.shadow_dist + for i = 1, dist do + gfx.triangle(Ax + i, Ay + i, Bx + i, By + i, Cx + i, Cy + i) + gfx.circle(o.x + i, o.y + i, r, 1) + end + + + -- Head + GUI.color("elm_fill") + GUI.triangle(1, Ax, Ay, Bx, By, Cx, Cy) + GUI.color("elm_outline") + GUI.triangle(0, Ax, Ay, Bx, By, Cx, Cy) + + -- Body + GUI.color("elm_frame") + gfx.circle(o.x, o.y, r, 1) + GUI.color("elm_outline") + gfx.circle(o.x, o.y, r, 0) + + self.retval = self.curval + + +end + + +-- Knob - Dragging. +function Knob:ondrag() + + local y = GUI.mouse.y + local ly = GUI.mouse.ly + + -- Ctrl? + local ctrl = GUI.mouse.cap&4==4 + + -- Multiplier for how fast the knob turns + -- Higher = slower + -- Ctrl Normal + local adj = ctrl and 1200 or 150 + + self.curval = self.curval + ((ly - y) / adj) + if self.curval > 1 then self.curval = 1 end + if self.curval < 0 then self.curval = 0 end + + self.curstep = round(self.curval * self.steps) + + +end + + +-- Unused methods. +function Knob:onmousedown() end +function Knob:onmouseup() end +function Knob:ondoubleclick() end +function Knob:ontype() end + + +GUI.Knob = Knob + + +--[[ OptLst class. Adapted from eugen2777's simple GUI template. + + ---- User parameters ---- +x, y, w, h Coordinates of top-left corner, width, overall height *including caption* +caption Title / question +opts String separated by commas, just like for GetUserInputs(). + ex: "Alice,Bob,Charlie,Denise,Edward" +pad Padding between the caption and each option + + + ---- Additional values ---- +curopt Currently-selected option number, starting from 1. +numopts How many options there are +optarray[] The opts string that was given, split into a table. + ex: optarray[1] = "Alice" +retval The current option name +]]-- + +-- OptLst - New. +local OptLst = {} +function OptLst:new(x, y, w, h, caption, opts, pad) + + local opt_lst = {} + opt_lst.type = "OptLst" + + opt_lst.x, opt_lst.y, opt_lst.w, opt_lst.h = x, y, w, h + + opt_lst.caption = caption + + opt_lst.pad = pad + + -- Parse the string of options into a table + opt_lst.optarray = {} + local tempidx = 1 + for word in string.gmatch(opts, '([^,]+)') do + opt_lst.optarray[tempidx] = word + tempidx = tempidx + 1 + end + + opt_lst.numopts = tempidx - 1 + + -- Currently-selected option + opt_lst.curopt, opt_lst.state = 1, 1 + + opt_lst.retval = opt_lst.optarray[opt_lst.curopt] + + + setmetatable(opt_lst, self) + self.__index = self + return opt_lst + +end + + +-- OptLst - Draw. +function OptLst:draw() + + + local x, y, w, h = self.x, self.y, self.w, self.h + + local pad = self.pad + + -- Draw the list frame + GUI.color("elm_frame") + gfx.rect(x, y, w, h, 0) + + + -- Draw the caption + GUI.color("txt") + GUI.font(2) + + local str_w, str_h = gfx.measurestr(self.caption) + self.capheight = str_h + + gfx.x = x + (w - str_w) / 2 + gfx.y = y + pad + + gfx.drawstr(self.caption) + + GUI.font(3) + + -- Draw the options + local optheight = (h - self.capheight - 2 * pad) / self.numopts + local cur_y = y + self.capheight + pad + local radius = 10 + + for i = 1, self.numopts do + + + gfx.set(r, g, b, 1) + + -- Option bubble + GUI.color("elm_frame") + gfx.circle(x + 2 * radius, cur_y + optheight / 2, radius, 0) + + -- Fill in the selected option and set its label to the window's bg color + if i == self.state then + GUI.color("elm_fill") + gfx.circle(x + 2 * radius, cur_y + optheight / 2, radius * 0.5, 1) + end + + -- Labels + GUI.color("txt") + local str_w, str_h = gfx.measurestr(self.optarray[i]) + + gfx.x = x + 4 * radius + gfx.y = cur_y + (optheight - str_h) / 2 + gfx.drawstr(self.optarray[i]) + + cur_y = cur_y + optheight + + + end + + self.retval = self.optarray[self.curopt] + + +end + + +-- OptLst - Mouse down. +function OptLst:onmousedown() + + --See which option it's on + local adj_y = self.y + self.capheight + self.pad + local adj_h = self.h - self.capheight - self.pad + local mouseopt = (GUI.mouse.y - adj_y) / adj_h + + mouseopt = math.floor(mouseopt * self.numopts) + 1 + + self.state = mouseopt + +end + + +function OptLst:onmouseup() + + -- Set the new option, or revert make to the original + -- if the cursor isn't on the list anymore + if IsInside(self, GUI.mouse.x, GUI.mouse.y) then + self.curopt = self.state + else + self.state = self.curopt + end + +end + + +function OptLst:ondrag() + + self:onmousedown() + +end + + +-- OptLst - Unused methods. + +function OptLst:ondoubleclick() end +function OptLst:ontype() end + + +GUI.OptLst = OptLst + + + +--[[ Checklist class. Adapted from eugen2777's simple GUI template. + ---- User parameters ---- +x, y, w, h Coordinates of top-left corner, width, overall height *including caption* +caption Title / question +opts String separated by commas, just like for GetUserInputs(). + ex: "Alice,Bob,Charlie,Denise,Edward" +pad Padding between the caption and each option +]]-- + +-- Checklist - New +local Checklist = {} +function Checklist:new(x, y, w, h, caption, opts, pad) + + local chk = {} + chk.type = "Checklist" + + chk.x, chk.y, chk.w, chk.h = x, y, w, h + + chk.caption = caption + + chk.pad = pad + + + -- Parse the string of options into a table + chk.optarray, chk.optsel = {}, {} + local tempidx = 1 + for word in string.gmatch(opts, '([^,]+)') do + chk.optarray[tempidx] = word + chk.optsel[tempidx] = false + tempidx = tempidx + 1 + end + + chk.retval = chk.optsel + + chk.numopts = tempidx - 1 + + setmetatable(chk, self) + self.__index = self + return chk + +end + + +-- Checklist - Draw +function Checklist:draw() + + + local x, y, w, h = self.x, self.y, self.w, self.h + + local pad = self.pad + + -- Draw the element frame + + if self.numopts > 1 then + + GUI.color("elm_frame") + gfx.rect(x, y, w, h, 0) + + end + + + GUI.font(2) + + -- Draw the caption + local str_w, str_h = gfx.measurestr(self.caption) + self.capheight = str_h + gfx.x = x + (w - str_w) / 2 + gfx.y = y + GUI.shadow(self.caption) + + + -- Draw the options + GUI.color("txt") + local optheight = (h - str_h - 2 * pad) / self.numopts + local cur_y = y + str_h + pad + local size = 20 + GUI.font(3) + + for i = 1, self.numopts do + + + -- Draw the option frame + GUI.color("elm_frame") + gfx.rect(x + size / 2, cur_y + (optheight - size) / 2, size, size, 0) + + -- Fill in if selected + if self.optsel[i] == true then + + GUI.color("elm_fill") + gfx.rect(x + size * 0.75, cur_y + (optheight - size) / 2 + size / 4, size / 2, size / 2, 1) + + end + + local str_w, str_h = gfx.measurestr(self.optarray[i]) + gfx.x = x + 2 * size + gfx.y = cur_y + (optheight - str_h) / 2 + + if self.numopts == 1 then + GUI.shadow(self.optarray[i]) + else + GUI.color("txt") + gfx.drawstr(self.optarray[i]) + end + + cur_y = cur_y + optheight + + end + +end + + +-- Checklist - Get/set value. Returns a table of boolean values for each option. +function Checklist:val(...) + + if ... then + local newvals = {...} + for i = 1, self.numopts do + self.optsel[i] = newvals[i] + end + else + return self.optsel + end + +end + + +-- Checklist - Mouse down +function Checklist:onmousedown() + + -- See which option it's on + local adj_y = self.y + self.capheight + local adj_h = self.h - self.capheight + local mouseopt = (GUI.mouse.y - adj_y) / adj_h + mouseopt = math.floor(mouseopt * self.numopts) + 1 + + -- Make that the current option + self.optsel[mouseopt] = not self.optsel[mouseopt] + + self:val() + +end + +-- Checklist - Unused methods. +function Checklist:onwheel() end +function Checklist:onmouseup() end +function Checklist:ondoubleclick() end +function Checklist:ondrag() end +function Checklist:ontype() end + + +GUI.Checklist = Checklist + + + +--[[ Btn class. Adapted from eugen2777's simple GUI template. + + ---- User parameters ---- +x, y, w, h Coordinates of top-left corner, width, height +caption Label / question +func Function to perform when clicked +... If provided, any parameters to pass to that function. + +]]-- + +-- Btn - New +local Btn = {} +function Btn:new(x, y, w, h, caption, func, ...) + + local btn = {} + btn.type = "Btn" + + btn.x, btn.y, btn.w, btn.h = x, y, w, h + + btn.caption = caption + + btn.func = func + btn.params = {...} + + btn.state = 0 + + setmetatable(btn, self) + self.__index = self + return btn + +end + + +-- Btn - Draw. +function Btn:draw() + + + local x, y, w, h = self.x, self.y, self.w, self.h + local r, g, b = self.r, self.g, self.b + local state = self.state + + -- Draw the shadow + if state == 0 then + local dist = GUI.shadow_dist + GUI.color("shadow") + for i = 1, dist do + GUI.roundrect(x - i, y - i, w, h, 8, 1, 1) + GUI.roundrect(x + i, y + i, w, h, 8, 1, 1) + end + GUI.color("shadow") + GUI.roundrect(x , y - 2 , w, h, 8, 1, 1) + GUI.color("elm_highlight") + GUI.roundrect(x , y - 1 , w, h, 8, 1, 1) + end + + -- Draw the button + GUI.color("elm_frame") + GUI.roundrect(x + 2 * state, y + 2 * state, w, h, 8, 1, 1) + + + -- Draw the caption + GUI.color("txt") + GUI.font(4) + + + local str_w, str_h = gfx.measurestr(self.caption) + gfx.x = x + 2 * state + ((w - str_w) / 2) - 2 + gfx.y = y + 2 * state + ((h - str_h) / 2) - 2 + gfx.y = gfx.y + 3 + gfx.drawstr(self.caption) + +end + + +-- Btn - Mouse down. +function Btn:onmousedown() + + self.state = 1 + +end + + +-- Bton - Mouse up. +function Btn:onmouseup() + + self.state = 0 + + -- If the button was released on the button, run func + if IsInside(self, GUI.mouse.x, GUI.mouse.y) then + + self.func(table.unpack(self.params)) + + end + +end + + +-- Btn - Unused methods. +function Btn:ondoubleclick() end +function Btn:ondrag() end +function Btn:ontype() end + + +GUI.Btn = Btn + + + + +--[[ TxtBox class. Adapted from schwa's example code. + + ---- User parameters ---- +x, y, w, h Coordinates of tep-left corner, width, height +pad Padding between the left side and first character. + + + ---- Additional values ---- +retval Text in the box +caret Current caret position +sel Length of selection +focus Whether or not the box is active + +]]-- + +-- TxtBox - New +local TxtBox = {} +function TxtBox:new(x, y, w, h, caption, pad) + + local txt = {} + txt.type = "TxtBox" + + txt.x, txt.y, txt.w, txt.h = x, y, w, h + + txt.caption = caption + txt.pad = pad + + txt.caret = 0 + txt.sel = 0 + txt.blink = 0 + txt.retval = "" + txt.focus = false + + setmetatable(txt, self) + self.__index = self + return txt + +end + + +-- TxtBox - Draw. +function TxtBox:draw() + + + local x, y, w, h = self.x, self.y, self.w, self.h + + local caption = self.caption + local caret = self.caret + local sel = self.sel + local text = self.retval + local focus = self.focus + local pad = self.pad + + + -- Draw the caption + GUI.font(3) + GUI.color("txt") + local str_w, str_h = gfx.measurestr(caption) + gfx.x = x + gfx.y = y - str_h - pad + gfx.drawstr(caption) + + -- Draw the textbox frame, and make it brighter if focused. + if focus then + + GUI.color("elm_fill") + gfx.rect(x + 2, y + 2, w - 4, h - 4, 0) + + else + + GUI.color("elm_frame") + end + + gfx.rect(x, y, w, h, 0) + + -- Draw the text + GUI.color("txt") + GUI.font(3) + str_w, str_h = gfx.measurestr(text) + gfx.x = x + pad + gfx.y = y + (h - str_h) / 2 + gfx.drawstr(text) + + -- Is any text selected? + if sel ~= 0 then + + -- Use the caret and selection positions to figure out the dimensions + local sel_start, sel_end = caret, caret + sel + if sel_start > sel_end then sel_start, sel_end = sel_end, sel_start end + local x_start = gfx.measurestr(string.sub(text, 0, sel_start)) + + + local w_sel = gfx.measurestr(string.sub(text, sel_start + 1, sel_end)) + + + -- Draw the selection highlight + GUI.color("txt") + gfx.rect(x + x_start + pad, y + 4, w_sel, h - 8, 1) + + -- Draw the selected text + GUI.color("wnd_bg") + gfx.x, gfx.y = x + x_start + pad, y + (h - str_h) / 2 + gfx.drawstr(string.sub(text, sel_start + 1, sel_end)) + + end + + -- If the box is focused, draw the caret... + if focus then + + -- ...but only for half of the blink cycle + if self.blink < 8 then + + local caret_x = x + pad + gfx.measurestr(string.sub(text, 0, caret)) + + gfx.set(r, g, b, 1) + gfx.line(caret_x, y + 4, caret_x, y + h - 8) + + end + + -- Increment the blink cycle + self.blink = (self.blink + 1) % 16 + + end + + self.retval = text + +end + + +-- TxtBox - Get the closest character position to the mouse. +function TxtBox:getcaret() + + local len = string.len(self.retval) + GUI.font(3) + + for i = 1, len do + + w = gfx.measurestr(string.sub(self.retval, 1, i)) + if GUI.mouse.x < (self.x + self.pad + w) then return i - 1 end + + end + + return len + +end + + +-- TxtBox - Mouse down. +function TxtBox:onmousedown() + + local x, y = GUI.mouse.x, GUI.mouse.y + + -- Was the mouse clicked inside this element? + self.focus = IsInside(self, x, y) + if self.focus then + + -- Place the caret on the nearest character and reset the blink cycle + self.caret = self:getcaret() + self.cursstate = 0 + self.sel = 0 + self.caret = self:getcaret() + + end + +end + + +-- TxtBox - Double-click. +function TxtBox:ondoubleclick() + + local len = string.len(self.retval) + self.caret, self.sel = len, -len + +end + + +-- TxtBox - Mouse drag. +function TxtBox:ondrag() + + self.sel = self:getcaret() - self.caret + +end + + +-- TxtBox - Typing. +function TxtBox:ontype(char) + + + GUI.font(3) + + local caret = self.caret + local text = self.retval + local maxlen = gfx.measurestr(text) >= (self.w - (self.pad * 3)) + + + -- Is there text selected? + if self.sel ~= 0 then + + -- Delete the selected text + local sel_start, sel_end = caret, caret + self.sel + if sel_start > sel_end then sel_start, sel_end = sel_end, sel_start end + + text = string.sub(text, 0, sel_start)..string.sub(text, sel_end + 1) + --self.sel = 0 + + end + + -- Left arrow + if char == 0x6C656674 then + if caret > 0 then self.caret = caret - 1 end + + -- Right arrow + elseif char == 0x72676874 then + if caret < string.len(text) then self.caret = caret + 1 end + + -- Backspace + elseif char == 8 then + if string.len(text) > 0 and self.sel == 0 then + text = string.sub(text, 1, caret - 1)..(string.sub(text, caret + 1)) + self.caret = caret - 1 + end + + -- Delete + elseif char == 6579564 then + + if string.len(text) > 0 and self.sel == 0 then + text = string.sub(text, 1, caret)..(string.sub(text, caret + 2)) + end + + -- Any other valid character, as long as we aren't at max length + elseif char >= 32 and char <= 125 and maxlen == false then + + -- Insert the typed character at the caret position + text = string.format("%s%c%s", string.sub(text, 1, caret), char, string.sub(text, caret + 1)) + self.caret = self.caret + 1 + + end + + self.retval = text + self.sel = 0 + +end + + +-- TxtBox - Unused methods. +function TxtBox:onmouseup() end + + +GUI.TxtBox = TxtBox + + + + +-- Make our table full of functions available to the original script that called this one +return GUI diff --git a/Scripts/ultraschall_helper_functions.lua b/Scripts/ultraschall_helper_functions.lua new file mode 100644 index 0000000..1721379 --- /dev/null +++ b/Scripts/ultraschall_helper_functions.lua @@ -0,0 +1,354 @@ +ultraschall={} + +function ultraschall.pause_follow_one_cycle() + follow_actionnumber = reaper.NamedCommandLookup("_Ultraschall_Toggle_Follow") + if reaper.GetToggleCommandState(follow_actionnumber)==1 then + reaper.SetExtState("follow", "skip", "true", false) + end +end + +function ultraschall.ToggleScrollingDuringPlayback(scrolling_switch, move_editcursor, goto_playcursor) + -- integer scrolling_switch - 1-on, 0-off + -- boolean move_editcursor - when scrolling stops, shall the editcursor be moved to current position of the playcursor(true) or not(false) + -- boolean goto_playcursor - shall the view be moved to the playcursor(true) or not(false)? + -- changes, if necessary, the state of the actions 41817, 40036 and 40262 + local scroll_continuous=reaper.GetToggleCommandState(41817) + local scroll_auto_play=reaper.GetToggleCommandState(40036) + local scroll_auto_rec=reaper.GetToggleCommandState(40262) + local editcursor=reaper.GetCursorPosition() + local playcursor=reaper.GetPlayPosition() + + if move_editcursor==true then + reaper.SetEditCurPos(playcursor, true, false) + else + reaper.SetEditCurPos(editcursor, false, false) + end + + if scrolling_switch~=scroll_continuous then + reaper.Main_OnCommand(41817,0) -- continuous scroll + end + + if scrolling_switch~=scroll_auto_play then + reaper.Main_OnCommand(40036,0) -- autoscroll during play + end + + if scrolling_switch~=scroll_auto_rec then + reaper.Main_OnCommand(40262,0) -- autoscroll during rec + end + + if goto_playcursor~=false then + reaper.Main_OnCommand(40150,0) -- go to playcursor + end + end + + + + +function ultraschall.GetAllTrackEnvelopes() +-- returns all TrackEnvelopes of the current project as a table, number of tracks, the first track that has an envelope, if the master track has an envelope(0) or not (-1) +-- the table works as follows: +-- TrackEnvelopeArray[Tracknumber][0] - number of envelopes for track Tracknumber +-- TrackEnvelopeArray[Tracknumber][1][Envelopenumber] - the envelope Envelopenumber of track Tracknumber +-- +-- tracknumber of 0 is for the master track + + local TrackEnvelopeArray={} + local FirstEnvelopeTrackNumber=-1 + local FirstEnvelopeMaster=-1 + local trackcount=1 + + for i=0, reaper.CountTracks(0)-1 do + local MediaTrack=reaper.GetTrack(0,i) + TrackEnvelopeArray[i+1]={} + TrackEnvelopeArray[i+1][1]={} + + for a=0, reaper.CountTrackEnvelopes(MediaTrack)-1 do + TrackEnvelopeArray[i+1][1][a]=reaper.GetTrackEnvelope(MediaTrack, a) + if FirstEnvelopeTrackNumber==-1 then FirstEnvelopeTrackNumber=i+1 end + end + TrackEnvelopeArray[i+1][0]=reaper.CountTrackEnvelopes(MediaTrack)-1 + end + + local MediaTrack=reaper.GetMasterTrack(0) + TrackEnvelopeArray[0]={} + TrackEnvelopeArray[0][1]={} + for a=0, reaper.CountTrackEnvelopes(MediaTrack)-1 do + TrackEnvelopeArray[0][1][a]=reaper.GetTrackEnvelope(MediaTrack, a) + FirstEnvelopeMaster=0 + end + TrackEnvelopeArray[0][0]=reaper.CountTrackEnvelopes(MediaTrack)-1 + + + return TrackEnvelopeArray, reaper.CountTracks(0), FirstEnvelopeTrackNumber, FirstEnvelopeMaster +end + +function ultraschall.RenumerateMarkers(colorvalue, startingnumber) +-- renumerates the shown number of markers(no regions!) that have +-- color "colorvalue", beginning with "startingnumber" +-- +-- returns -1 in case of error +-- Parameters: +-- colorvalue - the colorvalue the marker must have +-- startingnumber - the first number that shall be given to the first marker with "colorvalue" + + + if type(colorvalue)~="number" then return -1 end + if type(startingnumber)~="number" then return -1 end + local counter=startingnumber + local allmarkers, num_markers, num_regions = reaper.CountProjectMarkers(0) + local retval, isrgn, pos, rgnend, name, markrgnindexnumber, color + for i=0, allmarkers-1 do + retval, isrgn, pos, rgnend, name, markrgnindexnumber, color = reaper.EnumProjectMarkers3(0, i) + -- reaper.MB(color,"",0) + if isrgn==false and color==colorvalue then --0 then + reaper.SetProjectMarkerByIndex2(0, i, isrgn, pos, rgnend, counter, name, color, 0) + counter=counter+1 + end + end +end + +function ultraschall.TimeToSeconds(timestring) +-- converts a timestring days:hours:minutes:seconds.milliseconds to timeposition in seconds +-- it is ok, to have only some of them given, so excluding hours or days is ok. +-- +-- a single integer will be seen as seconds. +-- to specifiy milliseconds in particular, start the number with a . +-- all other values are seperated by : +-- +-- returns -1 in case of error, timestring is a nil or if you try to add an +-- additional value, added before days +-- +-- does not check for valid timeranges, so 61 minutes is possible to give, even if +-- hours are present in the string + local hour=0 + local milliseconds=0 + local minute=0 + local seconds=0 + local time=0 + local day=0 + + if timestring==nil then return -1 end + milliseconds=timestring:match("%..*") +-- reaper.MB(milliseconds,"",0) + if tonumber(milliseconds)==nil and milliseconds~=nil then return -1 end + if milliseconds==nil then milliseconds=0 end + if milliseconds=="" then milliseconds=".0 " end + if milliseconds=="0" then milliseconds=".0 " end + if milliseconds==0 then milliseconds=".0 " end + if milliseconds=="." then milliseconds=0 end + + if timestring:match("%.%d*")~=nil then timestring=timestring:match("(.*)%.") end + if tonumber(timestring)~=nil then seconds=tonumber(timestring) + elseif timestring==nil then seconds=0 + else + seconds=tonumber(timestring:match(".*:(.*)")) + end + if seconds==nil then return -1 end + + if timestring~=nil then timestring=timestring:match("(.*):") end + if tonumber(timestring)~=nil then minute=tonumber(timestring) + elseif timestring==nil then minute=0 + else + minute=tonumber(timestring:match(".*:(.*)")) + end + if minute==nil then return -1 end + + if timestring~=nil then timestring=timestring:match("(.*):") end + if tonumber(timestring)~=nil then hour=tonumber(timestring) + elseif timestring==nil then hour=0 + else + hour=tonumber(timestring:match(".*:(.*)")) + end + if hour==nil then return -1 end + + if timestring~=nil then timestring=timestring:match("(.*):") end + if tonumber(timestring)~=nil then day=tonumber(timestring) + elseif timestring==nil then day=0 + else + day=tonumber(timestring:match(".*:(.*)")) + end + if day==nil then return -1 end + + if timestring~=nil then timestring=timestring:match("(.*):") end + + if timestring~=nil then return -1 end + +--reaper.MB(seconds,"",0) + + if day~=nil and tonumber(day)==nil then return -1 end + if hour~=nil and tonumber(hour)==nil then return -1 end + if minute~=nil and tonumber(minute)==nil then return -1 end + if seconds~=nil and tonumber(seconds)==nil then return -1 end + if milliseconds~=nil and tonumber(milliseconds)==nil then return -1 end + + + if day==nil then day=0 end + if hour==nil then hour=0 end + if minute==nil then minute=0 end + if seconds==nil then seconds=0 end + if milliseconds==nil then milliseconds=0 end + + time=(day*86400)+(hour*3600)+(minute*60)+seconds+milliseconds + if time<0 then return -1 end + return time +end + +function ultraschall.TimeStringToSeconds_hh_mm_ss_mss(timestring) +-- converts timestring to seconds +-- expects hh:mm:ss.mss as time, i.e. 12:23:34.456 or it returns -1 as result + if type(timestring)~="string" then return -1 end + local Hour=timestring:match("(%d-):") + if Hour==nil or string.len(Hour)~=2 then return -1 end + local Minute=timestring:match("%d%d:(%d-):") + if Minute==nil or string.len(Minute)~=2 then return -1 end + local Second=timestring:match("%d%d:%d%d:(%d-)%.") + if Second==nil or string.len(Second)~=2 then return -1 end + local MilliSeconds=timestring:match("%d%d:%d%d:%d%d(%.%d*)") + if MilliSeconds==nil or string.len(MilliSeconds)~=4 then return -1 end + return (Hour*3600)+(Minute*60)+Second+tonumber(MilliSeconds) +end + +function ultraschall.GetStringFromClipboard_SWS() +-- gets a big string from clipboard, using the +-- CF_GetClipboardBig-function from SWS +-- and deals with all aspects necessary, that +-- surround using it. + local buf = reaper.CF_GetClipboard(buf) + local WDL_FastString=reaper.SNM_CreateFastString("HudelDudel") + local clipboardstring=reaper.CF_GetClipboardBig(WDL_FastString) + reaper.SNM_DeleteFastString(WDL_FastString) + return clipboardstring +end + +function ultraschall.ParseMarkerString(markerstring, strict) +-- splits the entries in markerstring into timeposition and name +-- returns the number of entries in markerstring, as well as a table with all entries in them +-- +-- markertable[1][i] - the timestring, -1 if no time is available +-- markertable[2][i] - the time, converted into position in seconds, -1 if no time is available +-- markertable[3][i] - the name of the marker +-- +-- the variable i above, is the number of the marker, beginning with 1 +-- splits the entries in markerstring into timeposition and name +-- returns the number of entries in markerstring, as well as a table with all entries in them +-- +-- markertable[1][i] - the timestring, -1 if no time is available +-- markertable[2][i] - the time, converted into position in seconds, -1 if no time is available +-- markertable[3][i] - the name of the marker +-- +-- the variable i above, is the number of the marker, beginning with 1 + if type(markerstring)~="string" then return -1 end + local counter=1 + local markertable={} + markertable[1]={} + markertable[2]={} + markertable[3]={} + + while markerstring~=nil do + markertable[1][counter]=markerstring:match("(.-)%s") + if strict~=true then + markertable[2][counter]=ultraschall.TimeToSeconds(markertable[1][counter])--reaper.parse_timestr(markertable[1][counter]) + else + markertable[2][counter]=ultraschall.TimeStringToSeconds_hh_mm_ss_mss(markertable[1][counter])--reaper.parse_timestr(markertable[1][counter]) + end + if markertable[2][counter]==-1 then markertable[1][counter]="" end + + if markertable[1][counter]=="" then + markertable[1][counter]=-1 + markertable[2][counter]=-1 + markertable[3][counter]=markerstring:match("(.-)\n") + if markertable[3][counter]==nil then markertable[3][counter]=markerstring:match(".*") end + else + markertable[3][counter]=markerstring:match("%s(.-)\n") + if markertable[3][counter]==nil then markertable[3][counter]=markerstring:match("%s(.*)") end + end + markerstring=markerstring:match(".-\n(.*)") + counter=counter+1 + end + return counter-1, markertable +end + +if reaper.GetOS() == "Win32" or reaper.GetOS() == "Win64" then + -- user_folder = buf --"C:\\Users\\[username]" -- need to be test + ultraschall.Separator = "\\" +else + -- user_folder = "/USERS/[username]" -- Mac OS. Not tested on Linux. + ultraschall.Separator = "/" +end + +function ultraschall.SetUSExternalState(section, key, value) +-- stores value into ultraschall.ini +-- returns true if sucessful, false if unsucessful + + if section:match(".*(%=).*")=="=" then return false end + return reaper.BR_Win32_WritePrivateProfileString(section, key, value, reaper.GetResourcePath()..ultraschall.Separator.."ultraschall.ini") +end + +function ultraschall.GetUSExternalState(section, key) +-- gets a value from ultraschall.ini +-- returns length of entry(integer) and the entry itself(string) + + return reaper.BR_Win32_GetPrivateProfileString(section, key, -1, reaper.GetResourcePath()..ultraschall.Separator.."ultraschall.ini") +end + +function ultraschall.CountNormalMarkers_NumGap() +-- returns number of normal markers in the project + local nix="" + a,nummarkers,b=reaper.CountProjectMarkers(0) + count=0 + for b=1, nummarkers do + for i=0, a do + retval, isrgn, pos, rgnend, name, markrgnindexnumber, color= reaper.EnumProjectMarkers3(0, i) + if markrgnindexnumber==b then count=b nix="hui" break + end + end + if nix=="" then break end + nix="" + end + + return count+1 +end + +function Msg(val) + reaper.ShowConsoleMsg(tostring(val).."\n") +end + +function runcommand(cmd) -- run a command by its name + + start_id = reaper.NamedCommandLookup(cmd) + reaper.Main_OnCommand(start_id,0) + +end + +function GetPath(str,sep) + + return str:match("(.*"..sep..")") + +end + +function ultraschall.ConvertColor(r,g,b) + + return reaper.ColorToNative(r,g,b)|0x1000000 + +end + +function ConsolidateFollowState() + + followstate = reaper.GetToggleCommandStateEx(0, 40036) + followstate2 = reaper.GetToggleCommandStateEx(0, 40262) + followstate3 = reaper.GetToggleCommandStateEx(0, 41817) + + if followstate ~= followstate2 then -- set both states to the same value + reaper.Main_OnCommand(40262, 0) -- Toggle auto-view-scroll while recording + end + + if followstate2 ~= followstate3 then -- set both states to the same value + reaper.Main_OnCommand(41817, 0) -- Toggle continuous scrolling + end + + ultraschall.SetUSExternalState("ultraschall_follow", "state", followstate, true) + reaper.SetExtState("ultraschall_follow", "state2", followstate, false) + + return followstate + +end diff --git a/Scripts/ultraschall_import_markers_as_planned_from_clipboard.lua b/Scripts/ultraschall_import_markers_as_planned_from_clipboard.lua new file mode 100644 index 0000000..6f85c44 --- /dev/null +++ b/Scripts/ultraschall_import_markers_as_planned_from_clipboard.lua @@ -0,0 +1,94 @@ +--[[ +################################################################################ +# +# Copyright (c) 2014-2017 Ultraschall (http://ultraschall.fm) +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +# THE SOFTWARE. +# +################################################################################ +]] + +------------------------------------- +-- Print Message to console (debugging) +------------------------------------- + +function Msg(val) + reaper.ShowConsoleMsg(tostring(val).."\n") +end + +-- 3. Eine Aktion “Import Markers from Clipboard” - schaut über die neue SWS Aktion +-- CF_GetClipboard() - Read the contents of the system clipboard +-- eventuell auch +-- CF_GetClipboardBig (Thanks cfillion!) +-- +-- Dort wird nachgesehen, ob a) Einträge entsprechend unserem eigenen Format vorliegen +-- (Zeitstempel, Titel, Zeilenumbruch), also genau das was “import markers from file…” +-- schon macht, nur aus dem ClipBoard. Die Einträge werden dann an die richtige Zeit +-- geschrieben. Oder b) wenn keine Zeitstempel vorhanden sind, sich die Einträge zeilenweise +-- nimmt und der Regel aus 1) nach an den Anfang schreibt mit dem Grünen Farbwert +-- (da es auf jeden Fall noch zu positionierende Marker sein müssen). + +local info = debug.getinfo(1,'S'); +script_path = info.source:match[[^@?(.*[\/])[^\/]-$]] +dofile(script_path .. "ultraschall_helper_functions.lua") + + + + +---------------------------- +---- AB HIER GEHTS LOS: ---- +---------------------------- +reaper.Undo_BeginBlock() + +--os = reaper.GetOS() +--if string.match(os, "OSX") then +-- color = 0x00FF88|0x1000000 +--else +-- color = 0x88FF00|0x1000000 +--end + +color=ultraschall.ConvertColor(100,255,0) + +clipboard_string=ultraschall.GetStringFromClipboard_SWS() +--clipboard_string="0:00:02.050 Test1\n Katze1\nKatze2 \n00:04:00 Test2" + +-- marker_table[1][markernummer] - die Zeit als Timestring. -1, wenn es keine Zeitangabe gibt +-- marker_table[2][markernummer] - die Zeit, konvertiert in Sekunden. -1, wenn es keine Zeitangabe gibt +-- marker_table[3][markernummer] - der Name des Markers + +number_of_markerentries,marker_table=ultraschall.ParseMarkerString(clipboard_string, true) +green_marker_num=-1 + +for i=1, number_of_markerentries do + if marker_table[3][i]~="" and marker_table[2][i]~=-1 then + -- normal entry with time and text -> put a grey marker at position + marker_table[3][i]=marker_table[3][i]:match("\t*%s*(.*)") + reaper.AddProjectMarker2(0, false, marker_table[2][i],0, marker_table[3][i]:match("(.-)%s-$"), 1 , 0x666666|0x1000000) + elseif marker_table[3][i]~="" and marker_table[2][i]==-1 then + -- normal entry without time but text -> green marker + green_marker_num=green_marker_num+1 + marker_table[3][i]=marker_table[3][i]:match("\t*%s*(.*)") + reaper.AddProjectMarker2(0, false, green_marker_num*0.001,0, marker_table[3][i]:match("(.-)%s-$"), 0, color) + end +end + +-- renumber grey markers +ultraschall.RenumerateMarkers(0x666666|0x1000000, 1) + +reaper.Undo_EndBlock("Ultraschall: Import markers from clipboard.",0) diff --git a/Scripts/ultraschall_import_markers_from_clipboard.lua b/Scripts/ultraschall_import_markers_from_clipboard.lua new file mode 100644 index 0000000..c8f6767 --- /dev/null +++ b/Scripts/ultraschall_import_markers_from_clipboard.lua @@ -0,0 +1,92 @@ +--[[ +################################################################################ +# +# Copyright (c) 2014-2017 Ultraschall (http://ultraschall.fm) +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +# THE SOFTWARE. +# +################################################################################ +]] + +------------------------------------- +-- Print Message to console (debugging) +------------------------------------- + +function Msg(val) + reaper.ShowConsoleMsg(tostring(val).."\n") +end + +-- 3. Eine Aktion “Import Markers from Clipboard” - schaut über die neue SWS Aktion +-- CF_GetClipboard() - Read the contents of the system clipboard +-- eventuell auch +-- CF_GetClipboardBig (Thanks cfillion!) +-- +-- Dort wird nachgesehen, ob a) Einträge entsprechend unserem eigenen Format vorliegen +-- (Zeitstempel, Titel, Zeilenumbruch), also genau das was “import markers from file…” +-- schon macht, nur aus dem ClipBoard. Die Einträge werden dann an die richtige Zeit +-- geschrieben. Oder b) wenn keine Zeitstempel vorhanden sind, sich die Einträge zeilenweise +-- nimmt und der Regel aus 1) nach an den Anfang schreibt mit dem Grünen Farbwert +-- (da es auf jeden Fall noch zu positionierende Marker sein müssen). + +local info = debug.getinfo(1,'S'); +script_path = info.source:match[[^@?(.*[\/])[^\/]-$]] +dofile(script_path .. "ultraschall_helper_functions.lua") + + + + +---------------------------- +---- AB HIER GEHTS LOS: ---- +---------------------------- +reaper.Undo_BeginBlock() + +os = reaper.GetOS() +if string.match(os, "OSX") then + color = 0x00FF88|0x1000000 +else + color = 0x88FF00|0x1000000 +end + +clipboard_string=ultraschall.GetStringFromClipboard_SWS() +--clipboard_string="0:00:02.050 Test1\n Katze1\nKatze2 \n00:04:00 Test2" + +-- marker_table[1][markernummer] - die Zeit als Timestring. -1, wenn es keine Zeitangabe gibt +-- marker_table[2][markernummer] - die Zeit, konvertiert in Sekunden. -1, wenn es keine Zeitangabe gibt +-- marker_table[3][markernummer] - der Name des Markers + +number_of_markerentries,marker_table=ultraschall.ParseMarkerString(clipboard_string, true) +green_marker_num=-1 + +for i=1, number_of_markerentries do + if marker_table[3][i]~="" and marker_table[2][i]~=-1 then + -- normal entry with time and text -> put a grey marker at position + marker_table[3][i]=marker_table[3][i]:match("\t*%s*(.*)") + reaper.AddProjectMarker2(0, false, marker_table[2][i],0, marker_table[3][i]:match("(.-)%s-$"), 1 , 0x666666|0x1000000) + elseif marker_table[3][i]~="" and marker_table[2][i]==-1 then + -- normal entry without time but text -> green marker + green_marker_num=green_marker_num+1 + marker_table[3][i]=marker_table[3][i]:match("\t*%s*(.*)") + reaper.AddProjectMarker2(0, false, green_marker_num*0.001,0, marker_table[3][i]:match("(.-)%s-$"), 0, color) + end +end + +-- renumber grey markers +ultraschall.RenumerateMarkers(0x666666|0x1000000, 1) + +reaper.Undo_EndBlock("Ultraschall: Import markers from clipboard.",0) diff --git a/Scripts/ultraschall_keymap.lua b/Scripts/ultraschall_keymap.lua new file mode 100644 index 0000000..04f3304 --- /dev/null +++ b/Scripts/ultraschall_keymap.lua @@ -0,0 +1,42 @@ +--[[ +################################################################################ +# +# Copyright (c) 2014-2017 Ultraschall (http://ultraschall.fm) +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +# THE SOFTWARE. +# +################################################################################ +]] + + +-- Print Message to console (debugging) +function Msg(val) + reaper.ShowConsoleMsg(tostring(val).."\n") +end + +local info = debug.getinfo(1,'S'); +script_path = info.source:match[[^@?(.*[\/])[^\/]-$]] +url = "http://url.ultraschall-podcast.de/keymap31" + + local OS=reaper.GetOS() + if OS=="OSX32" or OS=="OSX64" then + os.execute("open ".. url) + else + os.execute("start ".. url) + end \ No newline at end of file diff --git a/Scripts/ultraschall_mastermind.lua b/Scripts/ultraschall_mastermind.lua new file mode 100644 index 0000000..b48e84b --- /dev/null +++ b/Scripts/ultraschall_mastermind.lua @@ -0,0 +1,288 @@ +--[[ +################################################################################ +# +# Copyright (c) 2014-2017 Ultraschall (http://ultraschall.fm) +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +# THE SOFTWARE. +# +################################################################################ +]] + + +-- Print Message to console (debugging) +function Msg(val) + reaper.ShowConsoleMsg(tostring(val).."\n") +end + + +--Mastermind 1.2 for ultraschall +debug=false +function dbg(text) + if debug then reaper.ShowConsoleMsg(tostring(text).."\n") end +end + +function InitGFX() + gfx.init("Ultramind",256,512) + InitMatrix() + InitColors() + colorPicker=false + OkButton=false + GameWon=false + RedrawBoard() +end + +function drawColorPin(row, col, color) + radius=14 row=10-row col=col-1 + gfx.set(color_r[color], color_g[color], color_b[color]) + + if color>0 and color<7 then + gfx.circle(15+21+col*42, 48+21+row*42,radius,true) + end + if color==0 then + gfx.circle(15+21+col*42, 48+21+row*42,6,true) + gfx.circle(15+21+col*42, 48+21+row*42,12,false) + end +end + +function drawColorPicker(row, col) + ColorPicker_row=row ColorPicker_col=col + r=26 row=10-row + local arc=math.pi/3.0 + local cx,cy=15-21+col*42, 48+21+row*42 + for i=1,6 do + gfx.set(color_r[i], color_g[i], color_b[i]) + gfx.circle(cx+r*math.cos((i+3)*arc), cy+r*math.sin((i+3)*arc),r/2,true,true) + gfx.set(0) + gfx.circle(cx+r*math.cos((i+3)*arc), cy+r*math.sin((i+3)*arc),r/2,false,true) + gfx.circle(cx+r*math.cos((i+3)*arc), cy+r*math.sin((i+3)*arc),r/2-1,false,true) + end + ColorPicker=true +end + +function drawSmallPin(row, pos, color) + row=10-row + if color==1 then gfx.set(1) end --white + if color==2 then gfx.set(0) end --black + + if pos==1 then x=15+42*4+1+12+11 y=48+21+row*42-10 end + if pos==2 then x=15+42*4+1+12+31 y=48+21+row*42-10 end + if pos==3 then x=15+42*4+1+12+11 y=48+21+row*42+10 end + if pos==4 then x=15+42*4+1+12+31 y=48+21+row*42+10 end + + if color> 0 then gfx.circle(x,y,8,true) end + if color==0 then gfx.set(0) gfx.circle(x,y,2,true) gfx.circle(x,y,6,false) end +end + +function RedrawBoard() + gfx.set(0) gfx.rect(0,0,256,512,true) --clear screen + WriteCenteredText("Ultramind", 1,"Arial bold",22,10) + gfx.set(0.8,0.54,0.37) gfx.rect(10,42,241,460,true) -- brown background rect + + even_color=.5 odd_color=.6 + for row=1,10 do + gfx.set(even_color) + if row==Round then gfx.set(.9) end + gfx.rect(15,48+42*(10-row),231,42,true) + --gfx.rect(15,48+42*(10-row),231,42,false) + --gfx.rect(15+1,48+42*(10-row)+1,231-2,42-2,false) + + even_color,odd_color=odd_color,even_color + for col=1,4 do + drawColorPin(row, col, Board[row][col]) + end + + for pos=1,4 do drawSmallPin(row,pos,SmallPins[row][pos]) end --draw small pins + end + + if not GameWon and not lost then WriteCenteredText("Let's go!", 0,"Arial",18,474) end + if GameWon then WriteCenteredText("You won the game!!!", 0,"Arial",18,474) end + if lost then WriteCenteredText("You lost :-(", 0,"Arial",18,474) end +end + +function WriteCenteredText(text, color, font, size,y) + gfx.set(color) gfx.setfont(1,font, size) + w,h=gfx.measurestr(text) + gfx.x=(256-w)/2 gfx.y=y + gfx.drawstr(text) +end + +function InitMatrix() + SmallPins = {} + Board = {} -- create the ColorPin Matrix + for i=1,10 do + Board[i] = {} -- create a new row + SmallPins[i] = {} + for j=1,4 do + Board[i][j] = 0 + SmallPins[i][j]=0 + end + end +end + +function InitColors() + color_r={} color_g={} color_b={} + color_r[0], color_g[0], color_b[0] = 0.0, 0.0 , 0.0 -- schwarz + color_r[1], color_g[1], color_b[1] = 1.0, 0.6, 0.0 -- orange + color_r[2], color_g[2], color_b[2] = 0.0, 0.0 , 1.0 -- blau + color_r[3], color_g[3], color_b[3] = 0.8, 0.8 , 0.0 -- gelb + color_r[4], color_g[4], color_b[4] = 0.0, 0.8 , 0.0 -- grün + color_r[5], color_g[5], color_b[5] = 0.8, 0.0 , 0.8 -- magenta + color_r[6], color_g[6], color_b[6] = 0.0, 0.8 , 0.8 -- cyan +end + +function GenerateCode() + math.randomseed( os.time() ) + Code={math.random(1,6), math.random(1,6), math.random(1,6), math.random(1,6)} + --Code={5,2,2,3} +end + +function ShowOkButton(row) + row=10-row + gfx.set(0.8) gfx.rect(4*42+15+14,42*row+48,42,42,true) + gfx.set(0) gfx.rect(4*42+15+14,42*row+48,42,42,false) + gfx.x,gfx.y=4*42+15+14+6,42*row+48+10 + gfx.set(0.1) gfx.drawstr("OK") + OkButton=true +end + +-- ************************************************************************************* + +function MainLoop() + MouseButtonLeftDown=gfx.mouse_cap&1==1 + if MouseButtonLeftDown==false then + RedrawBoard() + end + mx,my=gfx.mouse_x,gfx.mouse_y + mxn=mx-15 myn=my-52 -- nomalized coords + local is_inside=(mxn <0 or myn<0 or mxn>4*42-1 or myn>10*42-1)==false + local is_inside_Ok_Button=(mxn <183 or myn<0 or mxn>222 or myn>10*42-1)==false + local changed=lastMouseButtonLeftDown~=MouseButtonLeftDown + local click_row=10-math.floor(myn/42) click_col=1+math.floor(mxn/42) + + if ((GameWon or lost) and MouseButtonLeftDown and changed) then + --restart game + MouseButtonLeftDown,changed=false,false + lastMouseButtonLeftDown=gfx.mouse_cap&1==1 + GameWon=false + lost=false + GenerateCode() + Round=1 + InitGFX() + RedrawBoard() + end + + if (is_inside and MouseButtonLeftDown and changed and click_row==Round) then -- click on allowed Pin + RedrawBoard() + drawColorPicker(click_row,click_col) + end + + if (not MouseButtonLeftDown and changed and ColorPicker) then + RedrawBoard() + drawColorPicker(ColorPicker_row,ColorPicker_col) + gfx.x=mx gfx.y=my + mr,mg,mb=gfx.getpixel() + + for i=1,6 do + if mr==color_r[i] and mg==color_g[i] and mb==color_b[i] then + Board[ColorPicker_row][ColorPicker_col]=i + end + end + + RedrawBoard() + ColorPicker=false + end + + -- check if Round - Row is complete and show OK Button + if Board[Round][1]>0 and Board[Round][2]>0 and Board[Round][3]>0 and Board[Round][4]>0 then + RedrawBoard() + if ColorPicker then drawColorPicker(ColorPicker_row,ColorPicker_col) end + ShowOkButton(Round) + else + OkButton=false + end + + if (OkButton and MouseButtonLeftDown and changed and is_inside_Ok_Button and click_row==Round ) then + + --check Tip and draw small Pins + black_pins=0 + white_pins=0 + TestBoard={Board[Round][1],Board[Round][2],Board[Round][3],Board[Round][4]} + TestCode= {Code[1],Code[2],Code[3],Code[4]} + + for i=1,4 do + if TestBoard[i]==TestCode[i] and ((TestBoard[i]+TestCode[i]) >0) then + black_pins=black_pins+1 + TestBoard[i],TestCode[i]=0,0 + end + end + + for i=1,4 do + for ii=1,4 do + if (TestBoard[i]==TestCode[ii]) and ((TestBoard[i]+TestCode[ii]) > 0) then + white_pins=white_pins+1 + TestBoard[i],TestCode[ii]=0,0 + end + end + end + + + if black_pins>0 then + for i=1,black_pins do SmallPins[Round][i]=2 end + end + + if white_pins>0 then + for i=1+black_pins, white_pins+black_pins do SmallPins[Round][i]=1 end + end + + if Round==10 and black_pins<4 then lost=true Round=0 end + + Round=Round+1 + OkButton=false + RedrawBoard() + end + + if black_pins==4 then + --WON!!!!! + black_pins=0 + GameWon=true + OkButton=false + RedrawBoard() + end + + if lost then + black_pins=0 + GameWon=false + OkButton=false + RedrawBoard() + end + + gfx.update() + if gfx.getchar() >= 0 then + lastMouseButtonLeftDown=MouseButtonLeftDown + reaper.defer(MainLoop) + end +end + +InitGFX() +lastMouseButtonLeftDown=gfx.mouse_cap&1==1 +GenerateCode() +Round=1 +RedrawBoard() +MainLoop() + diff --git a/Scripts/ultraschall_midi_move_end_of_time_slection.lua b/Scripts/ultraschall_midi_move_end_of_time_slection.lua new file mode 100644 index 0000000..d00cd4a --- /dev/null +++ b/Scripts/ultraschall_midi_move_end_of_time_slection.lua @@ -0,0 +1,76 @@ +--[[ +################################################################################ +# +# Copyright (c) 2014-2017 Ultraschall (http://ultraschall.fm) +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +# THE SOFTWARE. +# +################################################################################ +]] + +function dbg(text) + debug=true + if debug then reaper.ShowConsoleMsg(tostring(text).."\n") end +end + +function get_last_timecode() + -- get last timecode of whole project (is there an easier way???) + last_tc=0 + for t=1, reaper.GetNumTracks(),1 do + Track= reaper.GetTrack(0,t-1) --get track + if reaper.GetTrackNumMediaItems(Track)>0 then + mediaitem=reaper.GetTrackMediaItem(Track, reaper.GetTrackNumMediaItems(Track)-1) -- get last item + in_point=reaper.GetMediaItemInfo_Value(mediaitem, "D_POSITION") + out_point=in_point + reaper.GetMediaItemInfo_Value(mediaitem, "D_LENGTH") + if out_point>last_tc then last_tc=out_point end + end + end + return last_tc +end + +function runloop() + is_new_value,filename,sectionID,cmdID,mode,resolution,val = reaper.get_action_context() --get MIDI Value + + if val<0 then stop=true end -- script was not started with a midi command + if math.abs(val-64)<5 then stop=true end -- middle position + in_pos, out_pos = reaper.GetSet_LoopTimeRange(0,0,0,0,0) --get start and end point + if out_pos==0 or out_pos<= in_pos and val<64 then stop=true end -- start of timeline or out<=in + last_tc=get_last_timecode() + if val>68 then if out_pos>=last_tc then stop=true end end -- end of timeline + + -- calculate offset + exp=2.4 + if val<64 then absval=math.abs(val-64) else absval=val-63 end + in_offset=(absval^exp)/(64^exp) + if val<64 then in_offset=in_offset*-1 end + + --set new out point + out_pos=out_pos+in_offset + if out_pos<=0 then out_pos=0 end + if out_pos>=last_tc then out_pos=last_tc end + retval, retval2 = reaper.GetSet_LoopTimeRange(1,0,in_pos,out_pos,0) + if stop~=true then reaper.defer(runloop) end +end + +function onexit() + --cleanup +end + +reaper.atexit(onexit) +reaper.defer(runloop) diff --git a/Scripts/ultraschall_midi_move_start_of_time_slection.lua b/Scripts/ultraschall_midi_move_start_of_time_slection.lua new file mode 100644 index 0000000..a806bc6 --- /dev/null +++ b/Scripts/ultraschall_midi_move_start_of_time_slection.lua @@ -0,0 +1,76 @@ +--[[ +################################################################################ +# +# Copyright (c) 2014-2017 Ultraschall (http://ultraschall.fm) +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +# THE SOFTWARE. +# +################################################################################ +]] + +function dbg(text) + debug=true + if debug then reaper.ShowConsoleMsg(tostring(text).."\n") end +end + +function get_last_timecode() + -- get last timecode of whole project (is there an easier way???) + last_tc=0 + for t=1, reaper.GetNumTracks(),1 do + Track= reaper.GetTrack(0,t-1) --get track + if reaper.GetTrackNumMediaItems(Track)>0 then + mediaitem=reaper.GetTrackMediaItem(Track, reaper.GetTrackNumMediaItems(Track)-1) -- get last item + in_point=reaper.GetMediaItemInfo_Value(mediaitem, "D_POSITION") + out_point=in_point + reaper.GetMediaItemInfo_Value(mediaitem, "D_LENGTH") + if out_point>last_tc then last_tc=out_point end + end + end + return last_tc +end + +function runloop() + is_new_value,filename,sectionID,cmdID,mode,resolution,val = reaper.get_action_context() --get MIDI Value + + if val<0 then stop=true end -- script was not started with a midi command + if math.abs(val-64)<5 then stop=true end -- middle position + in_pos, out_pos = reaper.GetSet_LoopTimeRange(0,0,0,0,0) --get start and end point + if in_pos==0 and val<64 then stop=true end -- start of timeline + last_tc=get_last_timecode() + if val>68 then if in_pos>=last_tc then stop=true end end -- end of timeline + + -- calculate offset + exp=2.4 + if val<64 then absval=math.abs(val-64) else absval=val-63 end + in_offset=(absval^exp)/(64^exp) + if val<64 then in_offset=in_offset*-1 end + + --set new in point + in_pos=in_pos+in_offset + if in_pos<=0 then in_pos=0 end + if in_pos>=last_tc then in_pos=last_tc end + retval, retval2 = reaper.GetSet_LoopTimeRange(1,0,in_pos,out_pos,0) + if stop~=true then reaper.defer(runloop) end +end + +function onexit() + --cleanup +end + +reaper.atexit(onexit) +reaper.defer(runloop) diff --git a/Scripts/ultraschall_mute_envelope.lua b/Scripts/ultraschall_mute_envelope.lua new file mode 100644 index 0000000..a1db887 --- /dev/null +++ b/Scripts/ultraschall_mute_envelope.lua @@ -0,0 +1,235 @@ +--[[ +################################################################################ +# +# Copyright (c) 2014-2016 Ultraschall (http://ultraschall.fm) +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +# THE SOFTWARE. +# +################################################################################ +]] + +-- ------ USER CONFIG AREA =====> +-- here you can customize the script +-- Envelope Output Properties +-- <===== USER CONFIG AREA ------ + + +-- Print Message to console (debugging) +function Msg(val) + reaper.ShowConsoleMsg(tostring(val).."\n") +end + +-- Set ToolBar Button OFF +function SetButtonOFF() -- local (is_new_value, filename, sec, cmd, mode, resolution, val) + is_new_value, filename, sec, cmd, mode, resolution, val = reaper.get_action_context() + state = reaper.GetToggleCommandStateEx( sec, cmd ) + reaper.SetToggleCommandState( sec, cmd, 0 ) -- Set OFF + reaper.RefreshToolbar2( sec, cmd ) +end + + + -- Set ToolBar Button ON +function SetButtonON() -- local (is_new_value, filename, sec, cmd, mode, resolution, val) + is_new_value, filename, sec, cmd, mode, resolution, val = reaper.get_action_context() + state = reaper.GetToggleCommandStateEx( sec, cmd ) + reaper.SetToggleCommandState( sec, cmd, 1 ) -- Set ON + reaper.RefreshToolbar2( sec, cmd ) +end + + + -- Return armed state of an Envelope +function armedEnvelope(env) -- local br_env, active, visible, armed, inLane, laneHeight, defaultShape, minValue, maxValue, centerValue, type, faderScaling + + -- GET THE ENVELOPE + br_env = reaper.BR_EnvAlloc(env, false) + active, visible, armed, inLane, laneHeight, defaultShape, minValue, maxValue, centerValue, type, faderScaling = reaper.BR_EnvGetProperties(br_env, true, true, true, true, 0, 0, 0, 0, 0, 0, true) + reaper.BR_EnvFree(br_env, 1) + return armed +end + + + + -- Return armed state: Is there at least one armed envelope anywhere? +function checkArmedEnvelope() -- local (tracks_count, i, j, item, take, track) + + isArmed = false + -- LOOP TRHOUGH TRACKS + +-- selected_tracks_count = reaper.CountSelectedTracks(0) + tracks_count = reaper.CountTracks(0) + + -- if selected_tracks_count > 0 and UserInput() then + if tracks_count > 0 then + for i = 0, tracks_count-1 do + + -- GET THE TRACK +-- track = reaper.GetSelectedTrack(0, i) -- Get selected track i + track = reaper.GetTrack(0, i) -- Get selected track i + + -- LOOP THROUGH ENVELOPES + env_count = reaper.CountTrackEnvelopes(track) + for j = 0, env_count-1 do + + -- GET THE ENVELOPE + env = reaper.GetTrackEnvelope(track, j) + + if armedEnvelope(env) == true then + isArmed = true + end + + end -- ENDLOOP through envelopes + + end -- ENDLOOP through tracks + + end + return isArmed +end -- end checkVisibleEnvelope() + + + -- Return visible state of an envelope +function visibleEnvelope(env) -- local (br_env, active, visible, armed, inLane, laneHeight, defaultShape, minValue, maxValue, centerValue, type, faderScaling) + br_env = reaper.BR_EnvAlloc(env, false) -- GET THE ENVELOPE + active, visible, armed, inLane, laneHeight, defaultShape, minValue, maxValue, centerValue, type, faderScaling = reaper.BR_EnvGetProperties(br_env, true, true, true, true, 0, 0, 0, 0, 0, 0, true) + reaper.BR_EnvFree(br_env, 1) + return visible +end + + + -- Return visible state: is there at least one visible envelope anywhere? +function checkVisibleEnvelope() -- local (isVisible, tracks_count, i, j, item, take, track) + isVisible = false + + tracks_count = reaper.CountTracks(0) + if tracks_count > 0 then + for i = 0, tracks_count-1 do -- LOOP TRHOUGH TRACKS + track = reaper.GetTrack(0, i) -- Get selected track i + + -- LOOP THROUGH ENVELOPES + env_count = reaper.CountTrackEnvelopes(track) + for j = 0, env_count-1 do + + -- GET THE ENVELOPE + env = reaper.GetTrackEnvelope(track, j) + if visibleEnvelope(env) == true then + isVisible = true + end + + end -- ENDLOOP through envelopes + -- Msg(reaper.GetTrackAutomationMode(track)) + end -- ENDLOOP through tracks + + end + + return isVisible +end -- end checkVisibleEnvelope() + + + + -- Return state of automation: is there at least one track with active automation? +function checkAutomation() -- local (isAutomation, tracks_count, i, track) + isAutomation = false + + tracks_count = reaper.CountTracks(0) + if tracks_count > 0 then + for i = 0, tracks_count-1 do -- LOOP TRHOUGH TRACKS + track = reaper.GetTrack(0, i) -- Get selected track i + if reaper.GetTrackAutomationMode(track) == 3 then + isAutomation = true + end + end -- ENDLOOP through tracks + end + return isAutomation +end -- end checkAutomation() + + + +function main() + reaper.Undo_BeginBlock() -- Begining of the undo block. Leave it at the top of your main function. + + if checkVisibleEnvelope() == true then -- the Mute button is ON + reaper.Main_OnCommand(41150,0) -- Envelope: Hide all envelopes for all tracks + SetButtonOFF() + + else -- the Mute button is OFF + state = reaper.GetPlayState() + if state == 5 then -- A recording is active + reaper.Main_OnCommand(41152,0) -- Envelope: Toggle show all envelopes for all tracks + SetButtonON() + else + + if reaper.CountMediaItems(0) == 0 then -- there is no recording yet + if (reaper.CountSelectedTracks(0) == 0) then -- no track selected + if checkAutomation() == false then -- there is no track with active cough button + type = 0 + title = "Cough button and mute envelope" + msg = "Please select (Num 1-9) the tracks you would like to activate cough buttons for." + result = reaper.ShowMessageBox( msg, title, type ) + SetButtonOFF() + else + reaper.Main_OnCommand(41152,0) + SetButtonON() + end + else + reaper.Main_OnCommand(40866,0) -- Track: Toggle track mute envelope active + reaper.Main_OnCommand(40867,0) -- Track: Toggle track mute envelope visible + reaper.Main_OnCommand(40403,0) -- Automation: Set track automation mode to write + reaper.Main_OnCommand(40888,0) -- Evelope: Show all active envelopes for tracks + SetButtonON() + end + else -- there is an recording + if (reaper.CountSelectedTracks(0) == 0) then -- no track selected + if checkArmedEnvelope() == true then -- mute envelopes already in place + reaper.Main_OnCommand(41152,0) -- Envelope: Toggle show all envelopes for all tracks + SetButtonON() + else -- no mute envelope in place + type = 0 + title = "Cough button and mute envelope" + msg = "Please select (Num 1-9) the tracks you would like to activate the mute envelope for." + result = reaper.ShowMessageBox( msg, title, type ) -- just give a reminder to select some tracks + SetButtonOFF() + end + else -- there is at least one track selected + reaper.Main_OnCommand(40866,0) -- Track: Toggle track mute envelope active + reaper.Main_OnCommand(40867,0) -- Track: Toggle track mute envelope visible + reaper.Main_OnCommand(40400,0) -- Automation: Set track automation mode to write + reaper.Main_OnCommand(41149,0) -- Evelope: Show all active envelopes for tracks + SetButtonON() + end + end + end + + + end + + reaper.Undo_EndBlock("Hide envelope and set it as inactive", -1) -- End of the undo block. Leave it at the bottom of your main function. +end -- end main() + + + +--msg_start() -- Display characters in the console to show you the begining of the script execution. + +-- reaper.PreventUIRefresh(1)-- Prevent UI refreshing. Uncomment it only if the script works. + +main() -- Execute your main function + +-- reaper.PreventUIRefresh(-1) -- Restore UI Refresh. Uncomment it only if the script works. + +reaper.UpdateArrange() -- Update the arrangement (often needed) + +--msg_end() -- Display characters in the console to show you the end of the script execution. \ No newline at end of file diff --git a/Scripts/ultraschall_mute_selected_items_in_time_range.lua b/Scripts/ultraschall_mute_selected_items_in_time_range.lua new file mode 100644 index 0000000..e8f272d --- /dev/null +++ b/Scripts/ultraschall_mute_selected_items_in_time_range.lua @@ -0,0 +1,193 @@ +--[[ +################################################################################ +# +# Copyright (c) 2014-2017 Ultraschall (http://ultraschall.fm) +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +# THE SOFTWARE. +# +################################################################################ +]] + + +local info = debug.getinfo(1,'S'); +script_path = info.source:match[[^@?(.*[\/])[^\/]-$]] +dofile(script_path .. "ultraschall_helper_functions.lua") + +-- Ultraschall mute time selection +-- +-- add envelope points to mute envelope in time range +-- if items are selected only mute them +-- if no items are selected mute items on selected tracks +-- if no items nor tracks are selected mute all items in time range + +function muteselectedItems() + --create table of selected tracks + num_of_tracks=reaper.CountSelectedTracks(0) + track_list={} + + for i=0, num_of_tracks-1 do + track_list[i]=reaper.GetSelectedTrack(0, i) + end + + reaper.Main_OnCommand(40297,0) --deselect all tracks + + if number_of_selected_items>0 then + number_of_items=number_of_selected_items + end + + --for item_id=0, number_of_items-1 do + for item_id=number_of_items-1,0,-1 do + if number_of_selected_items>0 then + item=reaper.GetSelectedMediaItem(0, item_id) + else + item=reaper.GetMediaItem(0, item_id) + end + + track_of_item=reaper.GetMediaItemTrack(item) + item_start=reaper.GetMediaItemInfo_Value(item, "D_POSITION") + item_end=item_start + reaper.GetMediaItemInfo_Value(item, "D_LENGTH") + + + -- if item is (partial) in range set envelope points + make envelope visible + if (item_starttime_selection_start) then + -- show mute envelope + MuteTrackEnvelope=reaper.GetTrackEnvelopeByName(track_of_item, "Mute") + + --activate if needed + if MuteTrackEnvelope==NIL then + reaper.SetTrackSelected(track_of_item, true) + reaper.Main_OnCommand(40866,0) + reaper.SetTrackSelected(track_of_item, false) + MuteTrackEnvelope=reaper.GetTrackEnvelopeByName(track_of_item, "Mute") + end + + retval, Env_XML= reaper.GetEnvelopeStateChunk(MuteTrackEnvelope, "", false) + Env_XML = Env_XML:gsub("VIS 0 1 1", "VIS 1 1 1") + reaper.SetEnvelopeStateChunk(MuteTrackEnvelope, Env_XML, false) + + -- get start, end and old values at the start and end + mute_start=math.max(time_selection_start, item_start) + mute_end=math.min(time_selection_end, item_end) + ret,value_at_in_point =reaper.Envelope_Evaluate(MuteTrackEnvelope, mute_start, 0, 0) + ret,value_at_out_point=reaper.Envelope_Evaluate(MuteTrackEnvelope, mute_end, 0, 0) + + -- delete points between in/out and set new ones + reaper.DeleteEnvelopePointRange(MuteTrackEnvelope, mute_start, mute_end) + + -- check if there’s a point at the beginning, if not set one to unmute + point_at_zero=reaper.GetEnvelopePointByTime(MuteTrackEnvelope, 0.0) + if point_at_zero<0 then + reaper.InsertEnvelopePoint(MuteTrackEnvelope, 0.0, 1 , 1, 0, false) + end + + --set START Point + --reaper.InsertEnvelopePoint(MuteTrackEnvelope, mute_start, 1, 1, 0, false, false) + reaper.InsertEnvelopePoint(MuteTrackEnvelope, mute_start, 0, 1, 0, false, false) + + --set END Point if needed + if value_at_out_point>0.5 then + reaper.InsertEnvelopePoint(MuteTrackEnvelope, mute_end , 1, 1, 0, false, false) + end + + --sort points (do we need it?) + reaper.Envelope_SortPoints(MuteTrackEnvelope) + end + end + + --reselct tracks + for i=0, num_of_tracks-1 do + reaper.SetTrackSelected(track_list[i], true) + end +end + +function muteselectedTracks() + --create table of selected tracks + num_of_tracks=reaper.CountSelectedTracks(0) + track_list={} + + for i=0, num_of_tracks-1 do + track_list[i]=reaper.GetSelectedTrack(0, i) + end + + reaper.Main_OnCommand(40297,0) --deselect all tracks + + for i=0,num_of_tracks-1 do + MuteTrackEnvelope=reaper.GetTrackEnvelopeByName(track_list[i], "Mute") + + --activate if needed + if MuteTrackEnvelope==NIL then + reaper.SetTrackSelected(track_list[i], true) + reaper.Main_OnCommand(40866,0) + reaper.SetTrackSelected(track_list[i], false) + MuteTrackEnvelope=reaper.GetTrackEnvelopeByName(track_list[i], "Mute") + end + + retval, Env_XML= reaper.GetEnvelopeStateChunk(MuteTrackEnvelope, "", false) + Env_XML = Env_XML:gsub("VIS 0 1 1", "VIS 1 1 1") + reaper.SetEnvelopeStateChunk(MuteTrackEnvelope, Env_XML, false) + ret,value_at_out_point=reaper.Envelope_Evaluate(MuteTrackEnvelope, time_selection_end, 0, 0) + + -- delete points between in/out + reaper.DeleteEnvelopePointRange(MuteTrackEnvelope, time_selection_start, time_selection_end) + + -- check if there’s a point at the beginning, if not set one to unmute + point_at_zero=reaper.GetEnvelopePointByTime(MuteTrackEnvelope, 0.0) + if point_at_zero<0 then + reaper.InsertEnvelopePoint(MuteTrackEnvelope, 0.0, 1 , 1, 0, false) + end + + --set START Point + reaper.InsertEnvelopePoint(MuteTrackEnvelope, time_selection_start, 0, 1, 0, false, false) + + --set END Point if needed + if value_at_out_point>0.5 then + reaper.InsertEnvelopePoint(MuteTrackEnvelope, time_selection_end , 1, 1, 0, false, false) + end + end + + --reselct tracks + for i=0, num_of_tracks-1 do + reaper.SetTrackSelected(track_list[i], true) + end +end + + +reaper.Undo_BeginBlock() + +-- get info about the number of selected things +number_of_selected_items=reaper.CountSelectedMediaItems(0) +number_of_items=reaper.CountMediaItems(0) +number_of_selected_tracks=reaper.CountSelectedTracks(0) + +--get range start and end +time_selection_start, time_selection_end = reaper.GetSet_LoopTimeRange2(0, false, false, 0, 0, false) + +--if there is a selection mute stuff +if time_selection_end-time_selection_start>0 then + if number_of_selected_items>0 then + muteselectedItems() + else + if number_of_selected_tracks==0 then reaper.Main_OnCommand(40296,0) end --select all tracks + muteselectedTracks() + if number_of_selected_tracks==0 then reaper.Main_OnCommand(40297,0) end --deselect all tracks + end + runcommand("_Ultraschall_Unselect_All") +end + +reaper.Undo_EndBlock("Ultraschall: mute (selected) Items in all (selected) tracks in time selection", 0) diff --git a/Scripts/ultraschall_onair.lua b/Scripts/ultraschall_onair.lua new file mode 100644 index 0000000..74d2c51 --- /dev/null +++ b/Scripts/ultraschall_onair.lua @@ -0,0 +1,98 @@ +--[[ +################################################################################ +# +# Copyright (c) 2014-2017 Ultraschall (http://ultraschall.fm) +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +# THE SOFTWARE. +# +################################################################################ +]] + + -- Print Message to console (debugging) +function Msg(val) + reaper.ShowConsoleMsg(tostring(val).."\n") +end + +is_new,name,sec,cmd,rel,res,val = reaper.get_action_context() +state = reaper.GetToggleCommandStateEx(sec, cmd) --get state of the OnAir Button: on (1) /off (0) + +playstate = reaper.GetPlayState() +-- reaper.ShowConsoleMsg(state) +if playstate == 5 and state == 1 then -- is recording and stream active + + --[[type: + 0=OK, + 1=OKCANCEL, + 2=ABORTRETRYIGNORE, + 3=YESNOCANCEL, + 4=YESNO, + 5=RETRYCANCEL]] + + type = 0 + title = "Active Recording" + msg = "You have to stop the recording before you can stop broadcasting." + result = reaper.ShowMessageBox( msg, title, type ) + + --[[result: + 1=OK, + 2=CANCEL, + 3=ABORT, + 4=RETRY, + 5=IGNORE, + 6=YES, + 7=NO + ]] + + if result == 1 then -- abort + return + end +else + reaper.Undo_BeginBlock() + + m = reaper.GetMasterTrack(0) --streaming is always on the master track + -- fx_name_retval, fx_name = reaper.TrackFX_GetFXName(m, 0, "") --get the name of the first effect, debug only + + os = reaper.GetOS() + if string.match(os, "OSX") then + -- fx_slot = reaper.TrackFX_GetByName(m, "ITSR: StudioLinkOnAir", 1) --get the slot of the StudioLink effect. If there is none: initiate one. + -- fx_slot = reaper.TrackFX_GetByName(m, "2StudioLinkOnAir (ITSR)", 1) --get the slot of the StudioLink effect. If there is none: initiate one. + -- fx_slot = reaper.TrackFX_AddByName(m, "ITSR: StudioLinkOnAir", false, 1) + fx_slot = reaper.TrackFX_AddByName(m, "StudioLinkOnAir", false, 1) + + else -- Windows + fx_slot = reaper.TrackFX_GetByName(m, "StudioLinkOnAir (IT-Service Sebastian Reimers)", 1) --get the slot of the StudioLink effect. If there is none: initiate one. + end + + + if state ~= 1 then --streaming is off: start streaming + reaper.SetToggleCommandState(sec, cmd, 1) + test2 = reaper.TrackFX_SetEnabled(m, fx_slot, true) + else --streaming is on: stop streaming + reaper.SetToggleCommandState(sec, cmd, 0) + reaper.SNM_MoveOrRemoveTrackFX(m, fx_slot, 0) -- remove FX + end + + reaper.RefreshToolbar2(sec, cmd) + + reaper.Undo_EndBlock("Ultraschall toggle StudioLink OnAir", -1) + +-- nix,name = reaper.TrackFX_GetFXName(m,0,"") +-- Msg(name) + +end \ No newline at end of file diff --git a/Scripts/ultraschall_open_project_folder.lua b/Scripts/ultraschall_open_project_folder.lua new file mode 100644 index 0000000..eb017bc --- /dev/null +++ b/Scripts/ultraschall_open_project_folder.lua @@ -0,0 +1,116 @@ +--[[ + * ReaScript Name: Open project folder in explorer or finder + * Description: See title. + * Instructions: Run. + * Author: X-Raym + * Author URI: http://extremraym.com + * Repository: GitHub > X-Raym > EEL Scripts for Cockos REAPER + * Repository URI: https://github.com/X-Raym/REAPER-EEL-Scripts + * File URl: + * Licence: GPL v3 + * Forum Thread: Scripts: Various + * Forum Thread URI: http://forum.cockos.com/showthread.php?p=1622146 + * REAPER: 5.0 + * Extensions: None + * Version: 1.0 +--]] + +--[[ + * Changelog: + * v1.0 (2016-01-14) + + Initial Release +--]] + + +-------------------------------------------------------- +-- DEBUG +-- ----- + +-- Console Message +function Msg(g) + reaper.ShowConsoleMsg(tostring(g).."\n") +end + + +-------------------------------------------------------- +-- URL +-- --- + +function OpenURL(url) + local OS = reaper.GetOS() + if OS == "OSX32" or OS == "OSX64" then + os.execute('open "" "' .. url .. '"') + else + os.execute('start "" "' .. url .. '"') + end +end + + +-------------------------------------------------------- +-- PATHS +-- ----- + +-- Get Path from file name +function GetPath(str,sep) + return str:match("(.*"..sep..")") +end + + +-- Check if project has been saved +function IsProjectSaved() + -- OS BASED SEPARATOR + if reaper.GetOS() == "Win32" or reaper.GetOS() == "Win64" then + -- user_folder = buf --"C:\\Users\\[username]" -- need to be test + separator = "\\" + else + -- user_folder = "/USERS/[username]" -- Mac OS. Not tested on Linux. + separator = "/" + end + + retval, project_path_name = reaper.EnumProjects(-1, "") + if project_path_name ~= "" then + + dir = GetPath(project_path_name, separator) + --msg(name) + name = string.sub(project_path_name, string.len(dir) + 1) + name = string.sub(name, 1, -5) + + name = name:gsub(dir, "") + + --msg(name) + project_saved = true + return project_saved + else + display = reaper.ShowMessageBox("You need to save the project to execute this script.", "File Export", 1) + + if display == 1 then + + reaper.Main_OnCommand(40022, 0) -- SAVE AS PROJECT + + return IsProjectSaved() + + end + end +end + +---------------------------------------------------------------- +-- MAIN FUNCTION +-- ------------- + +function main() -- local (i, j, item, take, track) + + OpenURL(dir) + +end -- ENDFUNCTION MAIN + + +---------------------------------------------------------------------- +-- RUN +-- --- + +-- Check if there is selected Items + +project_saved = IsProjectSaved() -- See if Project has been save and determine file paths +if project_saved then + main() -- Execute your main function +end \ No newline at end of file diff --git a/Scripts/ultraschall_pause_follow.lua b/Scripts/ultraschall_pause_follow.lua new file mode 100644 index 0000000..d456f2e --- /dev/null +++ b/Scripts/ultraschall_pause_follow.lua @@ -0,0 +1,45 @@ +--[[ +################################################################################ +# +# Copyright (c) 2014-2018 Ultraschall (http://ultraschall.fm) +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +# THE SOFTWARE. +# +################################################################################ +]] +-- signals the Auto-Followmode-Off-script to not check for follow-off edgecases +-- for one cycle (ultraschall_toggle_follow.lua) +-- will only have an effect, if follow-mode is turned on + + follow_actionnumber = reaper.NamedCommandLookup("_Ultraschall_Toggle_Follow") + follow_on = reaper.NamedCommandLookup("_Ultraschall_Turn_On_Followmode") + if reaper.GetToggleCommandState(follow_actionnumber)==1 then + reaper.SetExtState("follow", "skip", "true", false) + end + +-- if tonumber(reaper.GetExtState("follow", "temp"))==nil then reaper.SetExtState("follow", "temp", reaper.time_precise()+100, false) end + time=reaper.time_precise() + time2=tonumber(reaper.GetExtState("follow", "temp")) + if time2==nil then time2=reaper.time_precise() end + if time 0 then + for i = 0, tracks_count-1 do -- LOOP TRHOUGH TRACKS + track = reaper.GetTrack(0, i) -- Get selected track i + count_fx = reaper.TrackFX_GetCount(track) + for j = 0, count_fx - 1 do + fx_name_retval, fx_name = reaper.TrackFX_GetFXName(track, j, "") + if ((fx_name) == "AUi: Ultraschall: Soundboard") or ((fx_name) == "VSTi: Soundboard (Ultraschall)") then -- this is a track with StudioLink Plugin + --Msg(fx_name) + reaper.SNM_MoveOrRemoveTrackFX(track, j, 0) --remove Soundboard Effect + end + + end + end -- ENDLOOP through tracks +end + +----------------------------- +-- remove StudioLink OnAir FX from Master +----------------------------- + +m = reaper.GetMasterTrack(0) --streaming is always on the master track +os = reaper.GetOS() +A,sec = ultraschall.GetUSExternalState("ultraschall_gui", "sec") +if sec=="-1" then sec="0" end +sec=tonumber(sec) + +if string.match(os, "OSX") then + fx_slot = reaper.TrackFX_GetByName(m, "ITSR: StudioLinkOnAir", 1) --get the slot of the StudioLink effect. If there is none: initiate one. +else -- Windows + fx_slot = reaper.TrackFX_GetByName(m, "StudioLinkOnAir (IT-Service Sebastian Reimers)", 1) --get the slot of the StudioLink effect. If there is none: initiate one. +end + +reaper.SNM_MoveOrRemoveTrackFX(m, fx_slot, 0) + +on_air_button_id = reaper.NamedCommandLookup("_Ultraschall_OnAir") + +reaper.SetToggleCommandState(sec, on_air_button_id, 0) +reaper.RefreshToolbar2(sec, on_air_button_id) + +----------------------------- +-- Enable all sends to master for rendering +----------------------------- + +reaper.Main_OnCommand(40296,0) -- select all tracks +reaper.Main_OnCommand(reaper.NamedCommandLookup("_SWS_ENMPSEND"), 0) -- Enable all sends to Master +reaper.Main_OnCommand(40297,0) -- unselect all tracks + + +----------------------------- +-- Display Info +----------------------------- + +txt = "- Automation mode of all tracks is set to trim/read\n- All tracks and envelopes are disarmed for recording\n- All sends to StudioLink tracks (if existent) have been removed\n- All StudioLink FX (if existent) have been removed\n- All Soundboard FX (if existent) have been removed\n- Studio Link OnAir Streaming (if active) has been stopped\n- All sends to Master have been enabled\n\nYou may proceed editing your project!" +title = "OK! Your project is now ready for editing:" +result = reaper.ShowMessageBox( txt, title, 0 ) + +----------------------------- + +reaper.Undo_EndBlock("Prepare all tracks for editing", -1) -- End of the undo block. Leave it at the bottom of your main function. + + + +-- local info = debug.getinfo(1,'S'); +-- script_path = info.source:match[[^@?(.*[\/])[^\/]-$]] +-- keymap = dofile(script_path .. "/assets/keymap.pdf") diff --git a/Scripts/ultraschall_remove_studiolink_fx.lua b/Scripts/ultraschall_remove_studiolink_fx.lua new file mode 100644 index 0000000..f329274 --- /dev/null +++ b/Scripts/ultraschall_remove_studiolink_fx.lua @@ -0,0 +1,75 @@ +--[[ +################################################################################ +# +# Copyright (c) 2014-2016 Ultraschall (http://ultraschall.fm) +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +# THE SOFTWARE. +# +################################################################################ +]] + + +-- Print Message to console (debugging) +function Msg(val) + reaper.ShowConsoleMsg(tostring(val).."\n") +end + + + -- Select all StudioLink tracks +function selectStudiolinkTracks() -- local (tracks_count, i, j, track, fx_name, count_fx) + + tracks_count = reaper.CountTracks(0) + + if tracks_count > 0 then + for i = 0, tracks_count-1 do -- LOOP TRHOUGH TRACKS + track = reaper.GetTrack(0, i) -- Get selected track i + count_fx = reaper.TrackFX_GetCount(track) + for j = 0, count_fx - 1 do + fx_name_retval, fx_name = reaper.TrackFX_GetFXName(track, j, "") + if ((fx_name) == "AU: ITSR: StudioLink") or ((fx_name) == "VST: StudioLink (IT-Service Sebastian Reimers)") then -- this is a track with StudioLink Plugin + -- reaper.SetTrackSelected(track, true) --select track + reaper.SNM_MoveOrRemoveTrackFX(track, j, 0) --remove StudioLink Effect + end + end + end -- ENDLOOP through tracks + end +end -- end selectStudiolinkTracks() + + +function main() + reaper.Undo_BeginBlock() -- Begining of the undo block. Leave it at the top of your main function. + + selectStudiolinkTracks() + + reaper.Undo_EndBlock("Select all StudioLink tracks", -1) -- End of the undo block. Leave it at the bottom of your main function. +end -- end main() + + + +--msg_start() -- Display characters in the console to show you the begining of the script execution. + +-- reaper.PreventUIRefresh(1)-- Prevent UI refreshing. Uncomment it only if the script works. + +main() -- Execute your main function + +-- reaper.PreventUIRefresh(-1) -- Restore UI Refresh. Uncomment it only if the script works. + +reaper.UpdateArrange() -- Update the arrangement (often needed) + +--msg_end() -- Display characters in the console to show you the end of the script execution. \ No newline at end of file diff --git a/Scripts/ultraschall_reset_firststart.lua b/Scripts/ultraschall_reset_firststart.lua new file mode 100644 index 0000000..b39124b --- /dev/null +++ b/Scripts/ultraschall_reset_firststart.lua @@ -0,0 +1,32 @@ +--[[ +################################################################################ +# +# Copyright (c) 2014-2017 Ultraschall (http://ultraschall.fm) +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +# THE SOFTWARE. +# +################################################################################ +]] + + +local info = debug.getinfo(1,'S'); +script_path = info.source:match[[^@?(.*[\/])[^\/]-$]] +dofile(script_path .. "ultraschall_helper_functions.lua") + +ultraschall.SetUSExternalState("ultraschall_start", "firststart", "true", true) diff --git a/Scripts/ultraschall_ripple_cut.lua b/Scripts/ultraschall_ripple_cut.lua new file mode 100644 index 0000000..d62d305 --- /dev/null +++ b/Scripts/ultraschall_ripple_cut.lua @@ -0,0 +1,64 @@ +--[[ +################################################################################ +# +# Copyright (c) 2014-2017 Ultraschall (http://ultraschall.fm) +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +# THE SOFTWARE. +# +################################################################################ +]] + +------------------------------------- +-- Print Message to console (debugging) +------------------------------------- + +function Msg(val) + reaper.ShowConsoleMsg(tostring(val).."\n") +end + +------------------------------------- +-- run a command by its name +------------------------------------- + +function runcommand(cmd) + start_id = reaper.NamedCommandLookup(cmd) + reaper.Main_OnCommand(start_id,0) +end + + +------------------------------------- +reaper.Undo_BeginBlock() -- Begining of the undo block. Leave it at the top of your main function. +------------------------------------- + +init_start_timesel, init_end_timesel = reaper.GetSet_LoopTimeRange(0, 0, 0, 0, 0) + +if init_end_timesel ~= init_start_timesel then -- there is a time selection + reaper.Main_OnCommand(40201, 0) -- Ripple cut Selection + +elseif reaper.CountSelectedMediaItems(0) == 1 then -- exacty one item selected + runcommand("_SWS_SAFETIMESEL") -- set time selection to item borders + reaper.Main_OnCommand(40201, 0) -- Ripple cut Selection + +else -- no time selection or items selected + result = reaper.ShowMessageBox( "No time selection active", "Ultraschall Ripple Cut", 0 ) -- Info window +end + +------------------------------------- +reaper.Undo_EndBlock("Ultraschall Ripple Cut", -1) -- End of the undo block. Leave it at the bottom of your main function. +------------------------------------- diff --git a/Scripts/ultraschall_routing_snapshots.lua b/Scripts/ultraschall_routing_snapshots.lua new file mode 100644 index 0000000..65e8038 --- /dev/null +++ b/Scripts/ultraschall_routing_snapshots.lua @@ -0,0 +1,170 @@ +--[[ +################################################################################ +# +# Copyright (c) 2014-2017 Ultraschall (http://ultraschall.fm) +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +# THE SOFTWARE. +# +################################################################################ +]] + + +function Msg(val) + reaper.ShowConsoleMsg(tostring(val).."\n") +end + +function runcommand(cmd) -- run a command by its name + + start_id = reaper.NamedCommandLookup(cmd) + reaper.Main_OnCommand(start_id,0) + +end + +function GetPath(str,sep) + + return str:match("(.*"..sep..")") + +end + +function saveSnapshot(slot) + + Msg("save") + retval = reaper.SetProjExtState(0, "snapshots", slot, "testing") + buildTable() + +end + +function clearSnapshot(slot) + + Msg("del") + retval = reaper.SetProjExtState(0, "snapshots", slot, "") + buildTable() + +end + +function recallSnapshot(slot) + + Msg("recall") + +end + + +function buildTable() + -- body + + GUI.elms = { + + +-- name = element type x y w h caption ...other params... + --logo = GUI.Pic:new( 484,280, 80, 80, img_ratio, img_adress, runcommand, "_Ultraschall_Open_Project_Folder"), + label = GUI.Lbl:new( 120, 50+y_offset, "Use routing snapshots to manage different recording situations.", 0), + label2 = GUI.Lbl:new( 110, 70+y_offset, "These snapshots save and recall all information of the routing matrix:", 0), + label3 = GUI.Lbl:new( 60, 130+y_offset, "Preshow\n\n\n\nRecording\n\n\n\nAftershow\n\n\n\nEditing", 0), + --label4 = GUI.Lbl:new( 30, 70+y_offset, "Follow these simple steps:", 0), + + --chapters = GUI.Btn:new( 430, 185+y_offset, 190, 40, "View Chapters", runcommand, "_SWSMARKERLIST1"), + --metadata = GUI.Btn:new( 430, 250+y_offset, 190, 40, "Edit ID3V2 Metadata", runcommand, "_Ultraschall_Edit_ID3_Tags"), + -- image = GUI.Btn:new( 430, 315+y_offset, 190, 40, "Open Project Folder", runcommand, "_Ultraschall_Open_Project_Folder"), + --finalize = GUI.Btn:new( 430, 412+y_offset, 190, 40, "Finalize MP3!", runcommand, "_ULTRASCHALL_INSERT_MP3_CHAPTER_MARKERS"), +} + + + + for i = 1,4 do + + if reaper.GetProjExtState(0, "snapshots", i) == 0 then + GUI.elms[i+5] = GUI.Lbl:new( 200, 36+(i*64), " free", 0) + GUI.elms[i+10] = GUI.Btn:new( 310, 29+(i*64), 130, 30, " Save (Shift+F"..i..")", saveSnapshot, i) + else + GUI.elms[i+5] = GUI.Btn:new( 160, 29+(i*64), 130, 30, " Recall (F"..i..")", recallSnapshot, i) + GUI.elms[i+10] = GUI.Btn:new( 310, 29+(i*64), 130, 30, " Update (Shift+F"..i..")", saveSnapshot, i) + GUI.elms[i+15] = GUI.Btn:new( 460, 29+(i*64), 130, 30, " Clear", clearSnapshot, i) + end + + end + + + + + +-- table.insert (GUI.elms, label) + + +end + + +-- initiate values + +local info = debug.getinfo(1,'S'); +script_path = info.source:match[[^@?(.*[\/])[^\/]-$]] +GUI = dofile(script_path .. "ultraschall_gui_lib.lua") + +GUI.name = "Ultraschall Routing Snapshots" +GUI.w, GUI.h = 660, 440 + +-- position always in the centre of the screen + +l, t, r, b = 0, 0, GUI.w, GUI.h +__, __, screen_w, screen_h = reaper.my_getViewport(l, t, r, b, l, t, r, b, 1) +GUI.x, GUI.y = (screen_w - GUI.w) / 2, (screen_h - GUI.h) / 2 + +y_offset = -30 -- move all content up/down + + + + + +-- Msg(w .. "-" .. h) + + -- body + ---- GUI Elements ---- + + +buildTable() + + + + ---- Put all of your own functions and whatever here ---- + +--Msg("hallo") + + + + ---- Main loop ---- + +--[[ + + If you want to run a function during the update loop, use the variable GUI.func prior to + starting GUI.Main() loop: + + GUI.func = my_function + GUI.freq = 5 <-- How often in seconds to run the function, so we can avoid clogging up the CPU. + - Will run once a second if no value is given. + - Integers only, 0 will run every time. + + GUI.Init() + GUI.Main() + +]]-- + +-- local startscreen = GUI.val("checkers") +-- local startscreen = GUI.elms.checkers[GUI.Val()] + +GUI.Init() +GUI.Main() diff --git a/Scripts/ultraschall_routing_snapshots_functions.lua b/Scripts/ultraschall_routing_snapshots_functions.lua new file mode 100644 index 0000000..7f39ec2 --- /dev/null +++ b/Scripts/ultraschall_routing_snapshots_functions.lua @@ -0,0 +1,610 @@ +--[[ +################################################################################ +# +# Copyright (c) 2014-2017 Ultraschall (http://ultraschall.fm) +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +# THE SOFTWARE. +# +################################################################################ +]] + + +function Msg(val) + reaper.ShowConsoleMsg(tostring(val).."\n") +end + +function runcommand(cmd) -- run a command by its name + + start_id = reaper.NamedCommandLookup(cmd) + reaper.Main_OnCommand(start_id,0) + +end + +function GetPath(str,sep) + + return str:match("(.*"..sep..")") + +end + +function saveSnapshot(slot) + + RoutingInfo=getRoutingInfo() + retval = reaper.SetProjExtState(0, "snapshots", slot, RoutingInfo) + buildTable() + +end + +function saveSnapshotPure(slot) + + RoutingInfo=getRoutingInfo() + retval = reaper.SetProjExtState(0, "snapshots", slot, RoutingInfo) + +end + +function clearSnapshot(slot) + + retval = reaper.SetProjExtState(0, "snapshots", slot, "") + ButtonID = {} + ButtonID[1] = reaper.NamedCommandLookup("_Ultraschall_Snapshot_1") -- Preshow + ButtonID[2] = reaper.NamedCommandLookup("_Ultraschall_Snapshot_2") -- Recording + ButtonID[3] = reaper.NamedCommandLookup("_Ultraschall_Snapshot_3") -- Aftershow + ButtonID[4] = reaper.NamedCommandLookup("_Ultraschall_Snapshot_4") -- Editing + +reaper.SetToggleCommandState(0, ButtonID[slot], 0) + reaper.RefreshToolbar2(0, ButtonID[slot]) + + buildTable() + +end + +function switchButtons(slot) + + ButtonID = {} + ButtonID[1] = reaper.NamedCommandLookup("_Ultraschall_Snapshot_1") -- Preshow + ButtonID[2] = reaper.NamedCommandLookup("_Ultraschall_Snapshot_2") -- Recording + ButtonID[3] = reaper.NamedCommandLookup("_Ultraschall_Snapshot_3") -- Aftershow + ButtonID[4] = reaper.NamedCommandLookup("_Ultraschall_Snapshot_4") -- Editing + + reaper.SetToggleCommandState(0, ButtonID[1], 0) -- erase all buttons states + reaper.SetToggleCommandState(0, ButtonID[2], 0) + reaper.SetToggleCommandState(0, ButtonID[3], 0) + reaper.SetToggleCommandState(0, ButtonID[4], 0) + reaper.SetToggleCommandState(0, ButtonID[slot], 1) -- yes, this feels clumsy. Any beter ideas? + +end + + +function recallSnapshot(slot) + + retval, valOutNeedBig=reaper.GetProjExtState(0, "snapshots", slot) + setRoutingInfo(valOutNeedBig) + buildTable() + switchButtons(slot) + +end + + +function buildTable() + -- body + + img_adress = reaper.GetResourcePath().."/ColorThemes/Ultraschall_2/routing_snapshots.png" + + GUI.elms = { + +-- name = element type x y w h caption ...other params... + label = GUI.Lbl:new( 23, 50+y_offset, "Use routing snapshots to manage different recording situations.", 0), + label2 = GUI.Lbl:new( 23, 75+y_offset, "These snapshots save and recall all information of the", 0), + label3 = GUI.Lbl:new( 55, 130+y_offset, "Preshow\n\n\n\nRecording\n\n\n\nAftershow\n\n\n\nEditing", 0), + routingbutton = GUI.Btn:new( 375, 41, 130, 22, " Routing Matrix", runcommand, 40251), + +} + + for i = 1,4 do + + if reaper.GetProjExtState(0, "snapshots", i) == 0 then + GUI.elms[i+5] = GUI.Subpic:new( 20, 30+(i*64), 25, 25, 1, img_adress, 2, 3+((i-1)*30)) + GUI.elms[i+10] = GUI.Lbl:new( 200, 36+(i*64), " free", 0) + GUI.elms[i+15] = GUI.Btn:new( 305, 29+(i*64), 130, 30, " Save (Shift+F"..i..")", saveSnapshot, i) + else + retval, valOutNeedBig=reaper.GetProjExtState(0, "snapshots", i) + if getRoutingInfo() == valOutNeedBig then + GUI.elms[i+5] = GUI.Subpic:new( 20, 30+(i*64), 25, 25, 1, img_adress, 62, 3+((i-1)*30)) + else + GUI.elms[i+5] = GUI.Subpic:new( 20, 30+(i*64), 25, 25, 1, img_adress, 2, 3+((i-1)*30)) + end + + GUI.elms[i+10] = GUI.Btn:new( 155, 29+(i*64), 130, 30, " Recall (F"..i..")", recallSnapshot, i) + GUI.elms[i+15] = GUI.Btn:new( 305, 29+(i*64), 130, 30, " Update (Shift+F"..i..")", saveSnapshot, i) + GUI.elms[i+20] = GUI.Btn:new( 455, 29+(i*64), 50, 30, " Clear", clearSnapshot, i) + end + + GUI.elms[i+25] = GUI.Line:new( 0,11+(i*64),620,11+(i*64)) + + end + + +-- table.insert (GUI.elms, label) + +end + + +-- initiate values + +function Main(slot) + + retval, valOutNeedBig=reaper.GetProjExtState(0, "snapshots", slot) + if retval == 1 then -- there is already a routing snapshot, so just recall + + setRoutingInfo(valOutNeedBig) + switchButtons(slot) + + else -- there is no snapshot, so open the interface + + local info = debug.getinfo(1,'S'); + script_path = info.source:match[[^@?(.*[\/])[^\/]-$]] + GUI = dofile(script_path .. "ultraschall_gui_lib.lua") + + GUI.name = "Ultraschall Routing Snapshots" + GUI.w, GUI.h = 525, 332 + + -- position always in the centre of the screen + + l, t, r, b = 0, 0, GUI.w, GUI.h + __, __, screen_w, screen_h = reaper.my_getViewport(l, t, r, b, l, t, r, b, 1) + GUI.x, GUI.y = 83, (screen_h - GUI.h) / 2 + + y_offset = -30 -- move all content up/down + + buildTable() + + ---- Put all of your own functions and whatever here ---- + + --Msg("hallo") + + ---- Main loop ---- + + --[[ + + If you want to run a function during the update loop, use the variable GUI.func prior to + starting GUI.Main() loop: + + GUI.func = my_function + GUI.freq = 5 <-- How often in seconds to run the function, so we can avoid clogging up the CPU. + - Will run once a second if no value is given. + - Integers only, 0 will run every time. + + GUI.Init() + GUI.Main() + + ]]-- + + + -- Open Snapshot-Editor-window only, when it hasn't been opened yet + if reaper.GetExtState("Ultraschall_Windows", GUI.name) == "" then windowcounter=0 -- Check if window was ever opened yet(and external state for it exists already). + -- If yes, use temporarily 0 as opened windows-counter;will be changed by ultraschall_gui_lib.lua later + else windowcounter=tonumber(reaper.GetExtState("Ultraschall_Windows", GUI.name)) end -- get number of opened windows + + if windowcounter<1 then -- you can choose how many GUI.name-windows are allowed to be opened at the same time. + -- 1 means 1 window, 2 means 2 windows, 3 means 3 etc + GUI.Init() + GUI.Main() + end + + end + +end + + +function dbg(text) + if debug then reaper.ShowConsoleMsg(tostring(text).."\n") end +end +function dbg2(text,text2) + if debug then reaper.ShowConsoleMsg(tostring(text)..tostring(text2).."\n") end +end + +function GetTrackReceives(track) -- returns all lines starting with AUXRECV of TrackStateChunk in + local TrackStateChunk="" + local TrackReceives="" + local child="" + retval, TrackStateChunk= reaper.GetTrackStateChunk(track, "") + for line in TrackStateChunk:gmatch("[^\r\n]+") do + if string.sub(line,1,1)=="<" then + child ="" + if string.sub(line,1,6)==" + local retval=0 + local TrackStateChunk="" + local newTrackStateChunk="" + local line="" + local child="" + + retval, TrackStateChunk= reaper.GetTrackStateChunk(track, "") + for line in TrackStateChunk:gmatch("[^\r\n]+") do + if string.sub(line,1,1)=="<" then + child ="" + if string.sub(line,1,6)==" + local retval=0 + local TrackStateChunk="" + local HardwareSends="" + local line="" + local child="" + + retval, TrackStateChunk= reaper.GetTrackStateChunk(track, "") + for line in TrackStateChunk:gmatch("[^\r\n]+") do + if string.sub(line,1,1)=="<" then + child ="" + if string.sub(line,1,6)==" of given track + local retval=0 + local new_TrackStateChunk="" + local TrackStateChunk="" + local insert="" + local child="" + local line="" + + retval, TrackStateChunk= reaper.GetTrackStateChunk(track, "") + for line in TrackStateChunk:gmatch("[^\r\n]+") do + insert="" + if string.sub(line,1,1)=="<" then + child ="" + if string.sub(line,1,6)==" of given track + local TrackStateChunk="" + local new_TrackStateChunk="" + local insert="" + local child="" + + retval, TrackStateChunk= reaper.GetTrackStateChunk(track, "") + for line in TrackStateChunk:gmatch("[^\r\n]+") do + insert="" + if string.sub(line,1,1)=="<" then + child ="" + if string.sub(line,1,6)==" 0 then + for i = 0, tracks_count-1 do -- LOOP TRHOUGH TRACKS + track = reaper.GetTrack(0, i) -- Get selected track i + count_fx = reaper.TrackFX_GetCount(track) + for j = 0, count_fx - 1 do + fx_name_retval, fx_name = reaper.TrackFX_GetFXName(track, j, "") + if ((fx_name) == "AU: ITSR: StudioLink") or ((fx_name) == "VST: StudioLink (IT-Service Sebastian Reimers)") then -- this is a track with StudioLink Plugin + reaper.SetTrackSelected(track, true) --select track + end + end + end -- ENDLOOP through tracks + end +end -- end selectStudiolinkTracks() + + +function main() + reaper.Undo_BeginBlock() -- Begining of the undo block. Leave it at the top of your main function. + + selectStudiolinkTracks() + + reaper.Undo_EndBlock("Select all StudioLink tracks", -1) -- End of the undo block. Leave it at the bottom of your main function. +end -- end main() + + + +--msg_start() -- Display characters in the console to show you the begining of the script execution. + +-- reaper.PreventUIRefresh(1)-- Prevent UI refreshing. Uncomment it only if the script works. + +main() -- Execute your main function + +-- reaper.PreventUIRefresh(-1) -- Restore UI Refresh. Uncomment it only if the script works. + +reaper.UpdateArrange() -- Update the arrangement (often needed) + +--msg_end() -- Display characters in the console to show you the end of the script execution. diff --git a/Scripts/ultraschall_select_track1.lua b/Scripts/ultraschall_select_track1.lua new file mode 100644 index 0000000..ce506fd --- /dev/null +++ b/Scripts/ultraschall_select_track1.lua @@ -0,0 +1,35 @@ +--[[ +################################################################################ +# +# Copyright (c) 2014-2016 Ultraschall (http://ultraschall.fm) +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +# THE SOFTWARE. +# +################################################################################ +]] + +tr = reaper.GetTrack(0, 0) --get track + +if tr then --does the track even exist? + if reaper.IsTrackSelected(tr) == true then --track is already selected + reaper.SetTrackSelected(tr, false) --deselect track + else --track is not selected + reaper.SetTrackSelected(tr, true) --select track + end +end diff --git a/Scripts/ultraschall_select_track2.lua b/Scripts/ultraschall_select_track2.lua new file mode 100644 index 0000000..b2ab59f --- /dev/null +++ b/Scripts/ultraschall_select_track2.lua @@ -0,0 +1,35 @@ +--[[ +################################################################################ +# +# Copyright (c) 2014-2016 Ultraschall (http://ultraschall.fm) +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +# THE SOFTWARE. +# +################################################################################ +]] + +tr = reaper.GetTrack(0, 1) --get track + +if tr then --does the track even exist? + if reaper.IsTrackSelected(tr) == true then --track is already selected + reaper.SetTrackSelected(tr, false) --deselect track + else --track is not selected + reaper.SetTrackSelected(tr, true) --select track + end +end diff --git a/Scripts/ultraschall_select_track3.lua b/Scripts/ultraschall_select_track3.lua new file mode 100644 index 0000000..ae70ce8 --- /dev/null +++ b/Scripts/ultraschall_select_track3.lua @@ -0,0 +1,35 @@ +--[[ +################################################################################ +# +# Copyright (c) 2014-2016 Ultraschall (http://ultraschall.fm) +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +# THE SOFTWARE. +# +################################################################################ +]] + +tr = reaper.GetTrack(0, 2) --get track + +if tr then --does the track even exist? + if reaper.IsTrackSelected(tr) == true then --track is already selected + reaper.SetTrackSelected(tr, false) --deselect track + else --track is not selected + reaper.SetTrackSelected(tr, true) --select track + end +end diff --git a/Scripts/ultraschall_select_track4.lua b/Scripts/ultraschall_select_track4.lua new file mode 100644 index 0000000..59cbd3d --- /dev/null +++ b/Scripts/ultraschall_select_track4.lua @@ -0,0 +1,35 @@ +--[[ +################################################################################ +# +# Copyright (c) 2014-2016 Ultraschall (http://ultraschall.fm) +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +# THE SOFTWARE. +# +################################################################################ +]] + +tr = reaper.GetTrack(0, 3) --get track + +if tr then --does the track even exist? + if reaper.IsTrackSelected(tr) == true then --track is already selected + reaper.SetTrackSelected(tr, false) --deselect track + else --track is not selected + reaper.SetTrackSelected(tr, true) --select track + end +end diff --git a/Scripts/ultraschall_select_track5.lua b/Scripts/ultraschall_select_track5.lua new file mode 100644 index 0000000..3804cd1 --- /dev/null +++ b/Scripts/ultraschall_select_track5.lua @@ -0,0 +1,35 @@ +--[[ +################################################################################ +# +# Copyright (c) 2014-2016 Ultraschall (http://ultraschall.fm) +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +# THE SOFTWARE. +# +################################################################################ +]] + +tr = reaper.GetTrack(0, 4) --get track + +if tr then --does the track even exist? + if reaper.IsTrackSelected(tr) == true then --track is already selected + reaper.SetTrackSelected(tr, false) --deselect track + else --track is not selected + reaper.SetTrackSelected(tr, true) --select track + end +end diff --git a/Scripts/ultraschall_select_track6.lua b/Scripts/ultraschall_select_track6.lua new file mode 100644 index 0000000..7c98ec9 --- /dev/null +++ b/Scripts/ultraschall_select_track6.lua @@ -0,0 +1,35 @@ +--[[ +################################################################################ +# +# Copyright (c) 2014-2016 Ultraschall (http://ultraschall.fm) +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +# THE SOFTWARE. +# +################################################################################ +]] + +tr = reaper.GetTrack(0, 5) --get track + +if tr then --does the track even exist? + if reaper.IsTrackSelected(tr) == true then --track is already selected + reaper.SetTrackSelected(tr, false) --deselect track + else --track is not selected + reaper.SetTrackSelected(tr, true) --select track + end +end diff --git a/Scripts/ultraschall_select_track7.lua b/Scripts/ultraschall_select_track7.lua new file mode 100644 index 0000000..53281cb --- /dev/null +++ b/Scripts/ultraschall_select_track7.lua @@ -0,0 +1,35 @@ +--[[ +################################################################################ +# +# Copyright (c) 2014-2016 Ultraschall (http://ultraschall.fm) +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +# THE SOFTWARE. +# +################################################################################ +]] + +tr = reaper.GetTrack(0, 6) --get track + +if tr then --does the track even exist? + if reaper.IsTrackSelected(tr) == true then --track is already selected + reaper.SetTrackSelected(tr, false) --deselect track + else --track is not selected + reaper.SetTrackSelected(tr, true) --select track + end +end diff --git a/Scripts/ultraschall_select_track8.lua b/Scripts/ultraschall_select_track8.lua new file mode 100644 index 0000000..11fdedb --- /dev/null +++ b/Scripts/ultraschall_select_track8.lua @@ -0,0 +1,35 @@ +--[[ +################################################################################ +# +# Copyright (c) 2014-2016 Ultraschall (http://ultraschall.fm) +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +# THE SOFTWARE. +# +################################################################################ +]] + +tr = reaper.GetTrack(0, 7) --get track + +if tr then --does the track even exist? + if reaper.IsTrackSelected(tr) == true then --track is already selected + reaper.SetTrackSelected(tr, false) --deselect track + else --track is not selected + reaper.SetTrackSelected(tr, true) --select track + end +end diff --git a/Scripts/ultraschall_set_all_markers_to_planning_stage.lua b/Scripts/ultraschall_set_all_markers_to_planning_stage.lua new file mode 100644 index 0000000..84d89b0 --- /dev/null +++ b/Scripts/ultraschall_set_all_markers_to_planning_stage.lua @@ -0,0 +1,82 @@ +--[[ +################################################################################ +# +# Copyright (c) 2014-2017 Ultraschall (http://ultraschall.fm) +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +# THE SOFTWARE. +# +################################################################################ +]] + +-- 1. eine Aktion “set all markers to planning stage” +-- Macht folgendes: geht alle bestehenden Marker der Zeit nach durch, und setzt sie zum einen auf +-- einen definierten Farbwert (Grün), zum anderen wird der Zeitstempel ganz auf den Anfang verschoben. +-- Die erste Marke bekommt 0:00.000, die nächste 0:00.001 und so weiter - so dass sie zwar alle “aus dem Spiel” +-- sind, aber noch editiert werden können bei Bedarf und auch noch eine Reihenfolg haben. + +local info = debug.getinfo(1,'S'); +script_path = info.source:match[[^@?(.*[\/])[^\/]-$]] +dofile(script_path .. "ultraschall_helper_functions.lua") + +answer=reaper.ShowMessageBox("All markers will be moved to the start. And all unnamed markers will be erased. (you can UNDO this step). Proceed?", "ULTRASCHALL\nSet all markers to planning stage", 4) +if answer==6 then --yes + reaper.Undo_BeginBlock() + + color = ultraschall.ConvertColor(100,255,0) + + markers_array={} + marker_num=0 + + -- get the texts of good markers and store them to an array + for i=1, reaper.CountProjectMarkers(0) + do + retval, isrgnOut, posOut, rgnendOut, nameOut, markrgnindexnumberOut, colorOut = reaper.EnumProjectMarkers3(0, i-1) + if isrgnOut==false then --ignore regions + if nameOut=="" then nameOut="_Chapter" end + if nameOut~="" and nameOut~="_Edit" and nameOut~="_Past" then -- ignore markers without text, "_Past" or "_Edit"-markers + marker_num=marker_num+1 + markers_array[marker_num]=nameOut -- store Name + end + end + end + + -- delete all markers that are not empty of "_Edit" + for i=reaper.CountProjectMarkers(0), 0, -1 + do + retval, isrgnOut, posOut, rgnendOut, nameOut, markrgnindexnumberOut, colorOut = reaper.EnumProjectMarkers3(0, i-1) + if isrgnOut==false then --ignore regions + if nameOut~="_Edit" and nameOut~="_Past" then -- ignore "_Past" or "_Edit"-markers + L=reaper.DeleteProjectMarkerByIndex(0, i-1) +-- reaper.ShowConsoleMsg(nameOut.." "..i.." "..tostring(L).."\n") + end + end + end + + + + -- create new markers + for i=1, marker_num do + reaper.AddProjectMarker2(0, false, (i-1)*0.001, 0, markers_array[i], 0, color) + end +--]] +end + +reaper.Undo_EndBlock("Ultraschall: Set all markers to planning stage.",0) + + diff --git a/Scripts/ultraschall_set_colors_to_sonic_rainboom.lua b/Scripts/ultraschall_set_colors_to_sonic_rainboom.lua new file mode 100644 index 0000000..63a2076 --- /dev/null +++ b/Scripts/ultraschall_set_colors_to_sonic_rainboom.lua @@ -0,0 +1,116 @@ +--[[ +################################################################################ +# +# Copyright (c) 2014-2017 Ultraschall (http://ultraschall.fm) +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +# THE SOFTWARE. +# +################################################################################ +]] + + + +-- Print Message to console (debugging) +function Msg(val) + reaper.ShowConsoleMsg(tostring(val).."\n") +end + +function rgb_swap (color) + os = reaper.GetOS() + if string.match(os, "OSX") then + r, g, b = reaper.ColorFromNative(color) + -- Msg(r .."-".. g .."-".. b.."-" ..color) + color = reaper.ColorToNative(b, g, r) -- swap r and b for OSX + -- Msg(" - "..color) + end + return color +end + +----------------------- +-- Step 1 : get started +----------------------- + +max_color = 20 -- Number of colors to cycle + +curtheme = reaper.GetLastColorThemeFile() +os = reaper.GetOS() +nothingselected = false + +if (reaper.CountSelectedTracks(0) == 0) then -- no track selected + nothingselected = true + reaper.Main_OnCommand(40296,0) -- select all tracks +end + +--------------------------------------------------------- +-- Step 2 : build table with color values from theme file +--------------------------------------------------------- + +t = {} -- initiate table +t_invers = {} +file = io.open(curtheme, "r"); + +for line in file:lines() do + index = string.match(line, "group_(%d+)") -- use "Group" section + index = tonumber(index) + if index then + if index < max_color then + color_int = string.match(line, "=(%d+)") -- get the color value + if string.match(os, "OSX") then + r, g, b = reaper.ColorFromNative(color_int) + color_int = reaper.ColorToNative(b, g, r) -- swap r and b for OSX + end + t[index] = color_int -- put color into table + t_invers[rgb_swap(color_int)] = index -- build the inverted table + end + end +end + + + +-- for key,value in pairs(t) do Msg(value) end + +---------------------------------- +-- step 3: assign colors to tracks +---------------------------------- + +countTracks = reaper.CountSelectedTracks(0) +-- step = math.floor(max_color / countTracks + 0.5) +-- if step == 0 then step = 1 end +step = 1 -- smooth gradient + +if countTracks > 0 then -- SELECTED TRACKS LOOP + track = reaper.GetSelectedTrack(0, 0) + color = reaper.GetTrackColor(track) + color = rgb_swap(color) + if t_invers[color] and t_invers[color] > 0 then + k = t_invers[color] --start with a different color + else + k = 0 + end + for j = 0, countTracks-1 do + track = reaper.GetSelectedTrack(0, j) + reaper.SetTrackColor (track, t[k]) --set Color to track + k = k + step + if k >= max_color then k = 0 end -- there are more tracks than colors, so start from the beginning + end +end + +if nothingselected == true then + reaper.Main_OnCommand(40297,0) -- unselect all tracks +end diff --git a/Scripts/ultraschall_set_colors_to_sonic_rainboom_spread.lua b/Scripts/ultraschall_set_colors_to_sonic_rainboom_spread.lua new file mode 100644 index 0000000..78278ec --- /dev/null +++ b/Scripts/ultraschall_set_colors_to_sonic_rainboom_spread.lua @@ -0,0 +1,98 @@ +--[[ +################################################################################ +# +# Copyright (c) 2014-2017 Ultraschall (http://ultraschall.fm) +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +# THE SOFTWARE. +# +################################################################################ +]] + + +-- Print Message to console (debugging) +function Msg(val) + reaper.ShowConsoleMsg(tostring(val).."\n") +end + + +-- Round a number to the nearest integer +local function round(num) + return num % 1 >= 0.5 and math.ceil(num) or math.floor(num) +end +----------------------- +-- Step 1 : get started +----------------------- + +max_color = 20 -- Number of colors to cycle + +curtheme = reaper.GetLastColorThemeFile() +os = reaper.GetOS() +nothingselected = false + +if (reaper.CountSelectedTracks(0) == 0) then -- no track selected + nothingselected = true + reaper.Main_OnCommand(40296,0) -- select all tracks +end + + +--------------------------------------------------------- +-- Step 2 : build table with color values from theme file +--------------------------------------------------------- + +t = {} -- initiate table +file = io.open(curtheme, "r"); + +for line in file:lines() do + index = string.match(line, "group_(%d+)") -- use the "Group" section + index = tonumber(index) + if index then + if index < max_color then + color_int = string.match(line, "=(%d+)") -- get the color value + if string.match(os, "OSX") then + r, g, b = reaper.ColorFromNative(color_int) + color_int = reaper.ColorToNative(b, g, r) -- swap r and b for OSX + end + t[index] = color_int -- put color into table + end + end +end +-- for key,value in pairs(t) do Msg(value) end + +---------------------------------------------------------- +-- step 3: assign colors to tracks - use the hole spectrum +---------------------------------------------------------- + +countTracks = reaper.CountSelectedTracks(0) +step = max_color / countTracks +if step < 1 then step = 1 end +-- step = 1 -- smooth gradient + +if countTracks > 0 then -- SELECTED TRACKS LOOP + k = 0 + for j = 0, countTracks-1 do + track = reaper.GetSelectedTrack(0, j) + reaper.SetTrackColor (track, t[round(k)]) --set Color to track + k = k + step + if k >= max_color then k = 0 end -- there are more tracks than colors, so start from the beginning + end +end + +if nothingselected == true then + reaper.Main_OnCommand(40297,0) -- unselect all tracks +end diff --git a/Scripts/ultraschall_set_edit.lua b/Scripts/ultraschall_set_edit.lua new file mode 100644 index 0000000..d128a65 --- /dev/null +++ b/Scripts/ultraschall_set_edit.lua @@ -0,0 +1,52 @@ +--[[ +################################################################################ +# +# Copyright (c) 2014-2017 Ultraschall (http://ultraschall.fm) +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +# THE SOFTWARE. +# +################################################################################ +]] + + +local info = debug.getinfo(1,'S'); +script_path = info.source:match[[^@?(.*[\/])[^\/]-$]] +dofile(script_path .. "ultraschall_helper_functions.lua") + +a,A=ultraschall.GetUSExternalState("ultraschall_follow", "state") + + + +if reaper.GetPlayState() == 0 or reaper.GetPlayState() == 2 then -- 0 = Stop, 2 = Pause + current_position = reaper.GetCursorPosition() -- Position of edit-cursor +else + if A=="1" or A=="-1" then -- follow mode is active + current_position = reaper.GetPlayPosition() -- Position of play-cursor +-- elseif reaper.GetPlayState()~=0 then +-- current_position = reaper.GetPlayPosition() -- Position of play-cursor + else + current_position = reaper.GetCursorPosition() -- Position of edit-cursor + end +end + +runcommand("_Ultraschall_Center_Arrangeview_To_Cursor") -- scroll to cursor if not visible + +color = ultraschall.ConvertColor(255,0,0) -- set color of edit markers to red +reaper.AddProjectMarker2(0, false, current_position, 0, "_Edit", 0, color) -- set red edit-marker + diff --git a/Scripts/ultraschall_set_edit_past.lua b/Scripts/ultraschall_set_edit_past.lua new file mode 100644 index 0000000..f6e77bd --- /dev/null +++ b/Scripts/ultraschall_set_edit_past.lua @@ -0,0 +1,47 @@ +--[[ +################################################################################ +# +# Copyright (c) 2014-2017 Ultraschall (http://ultraschall.fm) +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +# THE SOFTWARE. +# +################################################################################ +]] + +local info = debug.getinfo(1,'S'); +script_path = info.source:match[[^@?(.*[\/])[^\/]-$]] +dofile(script_path .. "ultraschall_helper_functions.lua") + + +if reaper.GetPlayState() == 0 or reaper.GetPlayState() == 2 then -- 0 = Stop, 2 = Pause + current_position = reaper.GetCursorPosition() -- Position of edit-cursor +else + current_position = reaper.GetPlayPosition() -- Position of play-cursor +end + +if current_position > 120 then + past_position = current_position - 120 -- set past-marker 2 minutes back in time +else + past_position = current_position -- ignore for the first 2 minutes +end + +runcommand("_Ultraschall_Center_Arrangeview_To_Cursor") -- scroll to cursor if not visible + +color = ultraschall.ConvertColor(110,110,220) +reaper.AddProjectMarker2(0, false, past_position, 0, "_Past", 0, color) -- set blue past-marker \ No newline at end of file diff --git a/Scripts/ultraschall_set_edit_play.lua b/Scripts/ultraschall_set_edit_play.lua new file mode 100644 index 0000000..c2885a0 --- /dev/null +++ b/Scripts/ultraschall_set_edit_play.lua @@ -0,0 +1,35 @@ +--[[ +################################################################################ +# +# Copyright (c) 2014-2017 Ultraschall (http://ultraschall.fm) +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +# THE SOFTWARE. +# +################################################################################ +]] + + +local info = debug.getinfo(1,'S'); +script_path = info.source:match[[^@?(.*[\/])[^\/]-$]] +dofile(script_path .. "ultraschall_helper_functions.lua") + +current_position = reaper.GetPlayPosition() -- Position of play-cursor + +color = ultraschall.ConvertColor(255,0,0) -- set color of edit markers to red +reaper.AddProjectMarker2(0, false, current_position, 0, "_Edit", 0, color) -- set red edit-marker \ No newline at end of file diff --git a/Scripts/ultraschall_set_marker.lua b/Scripts/ultraschall_set_marker.lua new file mode 100644 index 0000000..f12da90 --- /dev/null +++ b/Scripts/ultraschall_set_marker.lua @@ -0,0 +1,54 @@ +--[[ +################################################################################ +# +# Copyright (c) 2014-2017 Ultraschall (http://ultraschall.fm) +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +# THE SOFTWARE. +# +################################################################################ +]] + +local info = debug.getinfo(1,'S'); +script_path = info.source:match[[^@?(.*[\/])[^\/]-$]] +dofile(script_path .. "ultraschall_helper_functions.lua") + + +a,A=ultraschall.GetUSExternalState("ultraschall_follow", "state") + +if reaper.GetPlayState() == 0 or reaper.GetPlayState() == 2 then -- 0 = Stop, 2 = Pause + current_position = reaper.GetCursorPosition() -- Position of edit-cursor +else + if A~="0" then -- follow mode is active + current_position = reaper.GetPlayPosition() -- Position of play-cursor +-- elseif reaper.GetPlayState()~=0 then +-- current_position = reaper.GetPlayPosition() -- Position of play-cursor + else + current_position = reaper.GetCursorPosition() -- Position of edit-cursor + end +end + +markercount=ultraschall.CountNormalMarkers_NumGap() + +runcommand("_Ultraschall_Center_Arrangeview_To_Cursor") -- scroll to cursor if not visible + + +reaper.AddProjectMarker2(0, false, current_position, 0, "", markercount, 0) + + + diff --git a/Scripts/ultraschall_set_marker_old.lua b/Scripts/ultraschall_set_marker_old.lua new file mode 100644 index 0000000..ea953d3 --- /dev/null +++ b/Scripts/ultraschall_set_marker_old.lua @@ -0,0 +1,46 @@ +--[[ +################################################################################ +# +# Copyright (c) 2014-2017 Ultraschall (http://ultraschall.fm) +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +# THE SOFTWARE. +# +################################################################################ +]] + +local info = debug.getinfo(1,'S'); +script_path = info.source:match[[^@?(.*[\/])[^\/]-$]] +dofile(script_path .. "ultraschall_helper_functions.lua") + + +if reaper.GetPlayState() == 0 or reaper.GetPlayState() == 2 then -- 0 = Stop, 2 = Pause + current_position = reaper.GetCursorPosition() -- Position of edit-cursor +else + if ConsolidateFollowState() == 1 then -- follow mode is active + current_position = reaper.GetPlayPosition() -- Position of play-cursor + else + current_position = reaper.GetCursorPosition() -- Position of edit-cursor + end +end + +-- reaper.AddProjectMarker2(ReaProject proj, boolean isrgn, number pos, number rgnend, string name, integer wantidx, integer color) +reaper.AddProjectMarker2(0, false, current_position, 0, "", 1, 0) -- Set chapter marker +reaper.Main_OnCommand(40898,0) -- Renumber markers in timeline order + +-- reaper.AddProjectMarker(0, false, current_position, 0 , "", -1) \ No newline at end of file diff --git a/Scripts/ultraschall_set_marker_play.lua b/Scripts/ultraschall_set_marker_play.lua new file mode 100644 index 0000000..f7de68d --- /dev/null +++ b/Scripts/ultraschall_set_marker_play.lua @@ -0,0 +1,38 @@ +--[[ +################################################################################ +# +# Copyright (c) 2014-2017 Ultraschall (http://ultraschall.fm) +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +# THE SOFTWARE. +# +################################################################################ +]] + +local info = debug.getinfo(1,'S'); +script_path = info.source:match[[^@?(.*[\/])[^\/]-$]] +dofile(script_path .. "ultraschall_helper_functions.lua") + +current_position = reaper.GetPlayPosition() -- Position of play-cursor + +markercount=ultraschall.CountNormalMarkers_NumGap() + +reaper.AddProjectMarker2(0, false, current_position, 0, "", markercount, 0) + + + diff --git a/Scripts/ultraschall_set_mute_to_time_selection.lua b/Scripts/ultraschall_set_mute_to_time_selection.lua new file mode 100644 index 0000000..8a7df2b --- /dev/null +++ b/Scripts/ultraschall_set_mute_to_time_selection.lua @@ -0,0 +1,173 @@ +--[[ + * ReaScript Name: Set flat points value in time selection + * Description: A pop up to let you put offset values for selected item points. + * Instructions: Write values you want. Use "+" sign for relative value (the value is added to the original), no sign for absolute Exemple: -6 is absolute, or +-6 is relative. Don't use percentage. Example: writte "60" for 60%. + * Author: X-Raym + * Author URI: http://extremraym.com + * Repository: GitHub > X-Raym > EEL Scripts for Cockos REAPER + * Repository URI: https://github.com/X-Raym/REAPER-EEL-Scripts + * File URI: + * Licence: GPL v3 + * Forum Thread: ReaScript: Set/Offset selected envelope points values + * Forum Thread URI: http://forum.cockos.com/showthread.php?p=1487882#post1487882 + * REAPER: 5.0 pre 9 + * Extensions: SWS 2.6.3 #0 + * Version: 1.6 +]] + +--[[ + * Changelog: + * v1.6 (2015-09-09) + + Fader scaling support + * v1.5 (2015-07-11) + + Send support + * v1.4 (2015-06-25) + # Dual pan track support + * v1.3 (2015-05-26) + # bug fix when pop up is cancelled + * v1.0.1 (2015-05-07) + # Time selection bug fix + * v1.0 (2015-03-21) + + Initial Release +]] + +--[[ ----- DEBUGGING ===> +function get_script_path() + if reaper.GetOS() == "Win32" or reaper.GetOS() == "Win64" then + return debug.getinfo(1,'S').source:match("(.*".."\\"..")"):sub(2) -- remove "@" + end + return debug.getinfo(1,'S').source:match("(.*".."/"..")"):sub(2) +end + +package.path = package.path .. ";" .. get_script_path() .. "?.lua" +require("X-Raym_Functions - console debug messages") + +debug = 1 -- 0 => No console. 1 => Display console messages for debugging. +clean = 1 -- 0 => No console cleaning before every script execution. 1 => Console cleaning before every script execution. + +--msg_clean() +]]-- <=== DEBUGGING ----- + +-- ----- CONFIG ====> + +preserve_edges = true -- True will insert points à time selection edges before the action. + +-- <==== CONFIG ----- + +-- INIT +time = {} +valueSource = {} +shape = {} +tension = {} +selectedOut = {} + +function main() -- local (i, j, item, take, track) + + -- GET LOOP + start_time, end_time = reaper.GetSet_LoopTimeRange2(0, false, false, 0, 0, false) + + -- IF LOOP ? + if start_time ~= end_time then + time_selection = true + end + + if time_selection == true then + + -- retval, user_input_str = reaper.GetUserInputs("Set point value", 1, "Value ?", "") -- We suppose that the user know the scale he want + retval = true + user_input_str = "0" + + -- IF USER PASTE A VALUE + if retval ~= false then + + user_input_num = tonumber(user_input_str) + + -- GET SELECTED ENVELOPE + sel_env = reaper.GetSelectedEnvelope(0) + + if sel_env ~= nil then + env_point_count = reaper.CountEnvelopePoints(sel_env) + retval, env_name = reaper.GetEnvelopeName(sel_env, "") + + -- LOOP TRHOUGH SELECTED TRACKS + selected_tracks_count = reaper.CountSelectedTracks(0) + for j = 0, selected_tracks_count-1 do + + -- GET THE TRACK + track = reaper.GetSelectedTrack(0, j) -- Get selected track i + + env_count = reaper.CountTrackEnvelopes(track) + + for m = 0, env_count-1 do + + -- GET THE ENVELOPE + env_dest = reaper.GetTrackEnvelope(track, m) + retval, env_name_dest = reaper.GetEnvelopeName(env_dest, "") + + if env_name_dest == env_name then + + -- IF VISIBLE AND ARMED + br_env = reaper.BR_EnvAlloc(env_dest, false) + active, visible, armed, inLane, laneHeight, defaultShape, minValue, maxValue, centerValue, type, faderScaling = reaper.BR_EnvGetProperties(br_env, true, true, true, true, 0, 0, 0, 0, 0, 0, true) + if visible == true and armed == true then + + retval3, valueOut3, dVdSOutOptional3, ddVdSOutOptional3, dddVdSOutOptional3 = reaper.Envelope_Evaluate(env_dest, start_time, 0, 0) + retval4, valueOut4, dVdSOutOptional4, ddVdSOutOptional4, dddVdSOutOptional4 = reaper.Envelope_Evaluate(env_dest, end_time, 0, 0) + + start_time_temp = math.floor(start_time * 100000000+0.5)/100000000 + end_time_temp = math.floor(end_time * 100000000+0.5)/100000000 + + start_point = reaper.GetEnvelopePointByTime(env_dest, start_time+0.000000001) + retval, start_point_time, valueOut, shape, tension, selectedOut = reaper.GetEnvelopePoint(env_dest,start_point-1) + + start_point_time = math.floor(start_point_time * 100000000+0.5)/100000000 + + if start_point_time == start_time_temp then + valueOut3 = valueOut + end + + reaper.DeleteEnvelopePointRange(env_dest, start_time-0.000000001, end_time+0.000000001) + + valueIn = 0 -- mute is always 0 + + -- PRESERVE EDGES INSERTION + if preserve_edges == true then + + reaper.InsertEnvelopePoint(env_dest, start_time, valueOut3, 0, 0, true, true) -- INSERT startLoop point + reaper.InsertEnvelopePoint(env_dest, start_time, valueIn, 0, 0, true, true) -- INSERT startLoop point + reaper.InsertEnvelopePoint(env_dest, end_time, valueIn, 0, 0, true, true) -- INSERT startLoop point + reaper.InsertEnvelopePoint(env_dest, end_time, valueOut4, 0, 0, true, true) -- INSERT startLoop point + + else + + reaper.InsertEnvelopePoint(env_dest, start_time, valueIn, 0, 0, true, true) -- INSERT startLoop point + reaper.InsertEnvelopePoint(env_dest, end_time, valueIn, 0, 0, true, true) -- INSERT startLoop point + + end + + reaper.BR_EnvFree(br_env, 0) + reaper.Envelope_SortPoints(env_dest) + + end -- ENDIF envelope passed + + end -- ENDIF envelope with same name selected + + end -- ENDLOOP selected tracks envelope + + end -- ENDLOOP selected tracks + + + end + end + end +end -- end main() + + + +--msg_start() -- Display characters in the console to show you the begining of the script execution. +reaper.Undo_BeginBlock() -- Begining of the undo block. Leave it at the top of your main function. +main() -- Execute your main function +reaper.Undo_EndBlock("Set flat points value in time selection", 0) -- End of the undo block. Leave it at the bottom of your main function. +reaper.UpdateArrange() -- Update the arrangement (often needed) + +--msg_end() -- Display characters in the console to show you the end of the script execution. diff --git a/Scripts/ultraschall_set_named_shownote.lua b/Scripts/ultraschall_set_named_shownote.lua new file mode 100644 index 0000000..4778656 --- /dev/null +++ b/Scripts/ultraschall_set_named_shownote.lua @@ -0,0 +1,40 @@ +--[[ +################################################################################ +# +# Copyright (c) 2016 Ultraschall (http://ultraschall.fm) +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +# THE SOFTWARE. +# +################################################################################ +]] + + +if reaper.GetPlayState() == 0 or reaper.GetPlayState() == 2 then -- 0 = Stop, 2 = Pause + current_position = reaper.GetCursorPosition() -- Position of edit-cursor +else + current_position = reaper.GetPlayPosition() -- Position of play-cursor +end + +retval, shownote_comment = reaper.GetUserInputs("Insert shownote", 1, "Comment:", "") -- User input box + +if retval == true then -- User pressed ok +-- reaper.AddProjectMarker2(0, false, current_position, 0 , shownote_comment, -1) -- Place named marker + reaper.AddProjectMarker2(0, false, current_position, 0, shownote_comment, -1, 0x0000FF|0x1000000) -- set blue shownote marker + +end -- Else = user pressed cancel, so nothing to do here. \ No newline at end of file diff --git a/Scripts/ultraschall_set_namedmarker.lua b/Scripts/ultraschall_set_namedmarker.lua new file mode 100644 index 0000000..871ef27 --- /dev/null +++ b/Scripts/ultraschall_set_namedmarker.lua @@ -0,0 +1,53 @@ +--[[ +################################################################################ +# +# Copyright (c) 2014-2016 Ultraschall (http://ultraschall.fm) +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +# THE SOFTWARE. +# +################################################################################ +]] + +local info = debug.getinfo(1,'S'); +script_path = info.source:match[[^@?(.*[\/])[^\/]-$]] +dofile(script_path .. "ultraschall_helper_functions.lua") + +a,A=ultraschall.GetUSExternalState("ultraschall_follow", "state") + +if reaper.GetPlayState() == 0 or reaper.GetPlayState() == 2 then -- 0 = Stop, 2 = Pause + current_position = reaper.GetCursorPosition() -- Position of edit-cursor +else + if A~="0" then -- follow mode is active + current_position = reaper.GetPlayPosition() -- Position of play-cursor +-- elseif reaper.GetPlayState()~=0 then +-- current_position = reaper.GetPlayPosition() -- Position of play-cursor + else + current_position = reaper.GetCursorPosition() -- Position of edit-cursor + end +end + +retval, retvals_csv = reaper.GetUserInputs("Insert chapter marker", 1, "Name of this chapter marker:", "") -- User input box + +if retval == true then -- User pressed ok + markername = retvals_csv + -- reaper.AddProjectMarker(0, false, current_position, 0 , markername, -1) -- Place named marker + markercount=ultraschall.CountNormalMarkers_NumGap() + reaper.AddProjectMarker2(0, false, current_position, 0, markername, markercount, 0) + runcommand("_Ultraschall_Center_Arrangeview_To_Cursor") -- scroll to cursor if not visible +end -- Else = user pressed cancel, so nothing to do here. diff --git a/Scripts/ultraschall_set_namedmarker_play.lua b/Scripts/ultraschall_set_namedmarker_play.lua new file mode 100644 index 0000000..b56606d --- /dev/null +++ b/Scripts/ultraschall_set_namedmarker_play.lua @@ -0,0 +1,38 @@ +--[[ +################################################################################ +# +# Copyright (c) 2014-2016 Ultraschall (http://ultraschall.fm) +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +# THE SOFTWARE. +# +################################################################################ +]] + +if reaper.GetPlayState() == 0 or reaper.GetPlayState() == 2 then -- 0 = Stop, 2 = Pause - there is no Play or Rec Cursor + current_position = reaper.GetCursorPosition() -- Position of edit-cursor +else + current_position = reaper.GetPlayPosition() -- Position of play-cursor +end + +retval, retvals_csv = reaper.GetUserInputs("Insert chapter marker", 1, "Name of this chapter marker:", "") -- User input box + +if retval == true then -- User pressed ok + markername = retvals_csv + reaper.AddProjectMarker(0, false, current_position, 0 , markername, -1) -- Place named marker +end -- Else = user pressed cancel, so nothing to do here. diff --git a/Scripts/ultraschall_set_next_planned_marker.lua b/Scripts/ultraschall_set_next_planned_marker.lua new file mode 100644 index 0000000..f489059 --- /dev/null +++ b/Scripts/ultraschall_set_next_planned_marker.lua @@ -0,0 +1,78 @@ +--[[ +################################################################################ +# +# Copyright (c) 2014-2018 Ultraschall (http://ultraschall.fm) +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +# THE SOFTWARE. +# +################################################################################ +]] + +-- little helpers + + +-- 2. Eine Aktion “set next planned Marker” +-- Sucht sich den Marker mit grünem Farbwert und kleinstem Zeitstempel, +-- und setzt ihn auf die aktuelle Aufnahmezeit/Editposition und stellt den +-- Farbwert auf das normale Grau. + +-- little helpers + +local info = debug.getinfo(1,'S'); +script_path = info.source:match[[^@?(.*[\/])[^\/]-$]] +dofile(script_path .. "ultraschall_helper_functions.lua") + + +reaper.Undo_BeginBlock() + +a,A=ultraschall.GetUSExternalState("ultraschall_follow", "state") + +function get_position() + if reaper.GetPlayState() == 0 or reaper.GetPlayState() == 2 then -- 0 = Stop, 2 = Pause + current_position = reaper.GetCursorPosition() -- Position of edit-cursor + else + if A~="0" then -- follow mode is active + current_position = reaper.GetPlayPosition() -- Position of play-cursor +-- elseif reaper.GetPlayState()~=0 then +-- current_position = reaper.GetCursorPosition() -- Position of play-cursor + else + current_position = reaper.GetCursorPosition() -- Position of edit-cursor + end + end + return current_position +end + +play_pos=get_position() +num_markers=reaper.CountProjectMarkers(0) -- number of markers + regions! +PlannedColor = ultraschall.ConvertColor(100,255,0) -- color of all planned markers + +for i=0, num_markers-1 do + retval, isrgnOut, posOut, rgnendOut, nameOut, markrgnindexnumberOut, colorOut = reaper.EnumProjectMarkers3(0, i) + if isrgnOut==false and colorOut==PlannedColor then -- green and not a region + -- move to play_pos and change color to grey + runcommand("_Ultraschall_Center_Arrangeview_To_Cursor") -- scroll to cursor if not visible + + reaper.SetProjectMarker4(0, markrgnindexnumberOut, false, play_pos, 0, nameOut, 0x666666|0x1000000, 0) + break + end +end + +ultraschall.RenumerateMarkers(0x666666|0x1000000, 1) + +reaper.Undo_EndBlock("Ultraschall: Set next planned marker.",0) diff --git a/Scripts/ultraschall_set_next_planned_marker_play.lua b/Scripts/ultraschall_set_next_planned_marker_play.lua new file mode 100644 index 0000000..14fa5ec --- /dev/null +++ b/Scripts/ultraschall_set_next_planned_marker_play.lua @@ -0,0 +1,61 @@ +--[[ +################################################################################ +# +# Copyright (c) 2014-2018 Ultraschall (http://ultraschall.fm) +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +# THE SOFTWARE. +# +################################################################################ +]] + +-- little helpers + + +-- 2. Eine Aktion “set next planned Marker to Play/Rec” +-- Sucht sich den Marker mit grünem Farbwert und kleinstem Zeitstempel, +-- und setzt ihn auf die aktuelle Aufnahmezeit/Editposition und stellt den +-- Farbwert auf das normale Grau. + +-- little helpers + +local info = debug.getinfo(1,'S'); +script_path = info.source:match[[^@?(.*[\/])[^\/]-$]] +dofile(script_path .. "ultraschall_helper_functions.lua") + + +reaper.Undo_BeginBlock() + +play_pos = reaper.GetPlayPosition() +num_markers = reaper.CountProjectMarkers(0) -- number of markers + regions! +PlannedColor = ultraschall.ConvertColor(100,255,0) -- color of all planned markers + +for i=0, num_markers-1 do + retval, isrgnOut, posOut, rgnendOut, nameOut, markrgnindexnumberOut, colorOut = reaper.EnumProjectMarkers3(0, i) + if isrgnOut==false and colorOut==PlannedColor then -- green and not a region + -- move to play_pos and change color to grey + -- runcommand("_Ultraschall_Center_Arrangeview_To_Cursor") -- scroll to cursor if not visible + + reaper.SetProjectMarker4(0, markrgnindexnumberOut, false, play_pos, 0, nameOut, 0x666666|0x1000000, 0) + break + end +end + +ultraschall.RenumerateMarkers(0x666666|0x1000000, 1) + +reaper.Undo_EndBlock("Ultraschall: Set next planned marker to Play-/Rec-Cursor.",0) diff --git a/Scripts/ultraschall_set_view_edit.lua b/Scripts/ultraschall_set_view_edit.lua new file mode 100644 index 0000000..5a8481a --- /dev/null +++ b/Scripts/ultraschall_set_view_edit.lua @@ -0,0 +1,64 @@ +--[[ +################################################################################ +# +# Copyright (c) 2014-2017 Ultraschall (http://ultraschall.fm) +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +# THE SOFTWARE. +# +################################################################################ +]] + +local info = debug.getinfo(1,'S'); +script_path = info.source:match[[^@?(.*[\/])[^\/]-$]] +dofile(script_path .. "ultraschall_helper_functions.lua") + +is_new,name,sec,cmd,rel,res,val = reaper.get_action_context() +state = reaper.GetToggleCommandStateEx(sec, cmd) + +ID_1 = reaper.NamedCommandLookup("_Ultraschall_Set_View_Setup") -- Setup Button +ID_2 = reaper.NamedCommandLookup("_Ultraschall_Set_View_Record") -- Record Button +ID_3 = reaper.NamedCommandLookup("_Ultraschall_Set_View_Edit") -- Edit Button +ID_4 = reaper.NamedCommandLookup("_Ultraschall_Set_View_Story") -- Story Button + + +if state <= 0 then + reaper.SetToggleCommandState(sec, cmd, 1) +end + +ultraschall.SetUSExternalState("ultraschall_gui", "views", cmd, true) +ultraschall.SetUSExternalState("ultraschall_gui", "sec", sec, true) +ultraschall.SetUSExternalState("ultraschall_gui", "view", "edit", true) + +reaper.SetToggleCommandState(sec, ID_1, 0) +reaper.SetToggleCommandState(sec, ID_2, 0) +reaper.SetToggleCommandState(sec, ID_4, 0) + + +-- reaper.RefreshToolbar2(sec, ID_1) +-- reaper.RefreshToolbar2(sec, ID_2) +-- reaper.RefreshToolbar2(sec, ID_3) +-- reaper.RefreshToolbar2(sec, ID_4) +reaper.Main_OnCommand(40456,0) --(re)load Screenset + +-- Msg(cmd) +-- Msg(ID_2) + +-- state = reaper.GetToggleCommandStateEx(sec, cmd) +-- SetToggleCommandState(sec, cmd, state<=0?1:0); + diff --git a/Scripts/ultraschall_set_view_record.lua b/Scripts/ultraschall_set_view_record.lua new file mode 100644 index 0000000..8dcdbce --- /dev/null +++ b/Scripts/ultraschall_set_view_record.lua @@ -0,0 +1,66 @@ +--[[ +################################################################################ +# +# Copyright (c) 2014-2017 Ultraschall (http://ultraschall.fm) +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +# THE SOFTWARE. +# +################################################################################ +]] + +local info = debug.getinfo(1,'S'); +script_path = info.source:match[[^@?(.*[\/])[^\/]-$]] +dofile(script_path .. "ultraschall_helper_functions.lua") + + +is_new,name,sec,cmd,rel,res,val = reaper.get_action_context() +state = reaper.GetToggleCommandStateEx(sec, cmd) + +ID_1 = reaper.NamedCommandLookup("_Ultraschall_Set_View_Setup") -- Setup Button +ID_2 = reaper.NamedCommandLookup("_Ultraschall_Set_View_Record") -- Record Button +ID_3 = reaper.NamedCommandLookup("_Ultraschall_Set_View_Edit") -- Edit Button +ID_4 = reaper.NamedCommandLookup("_Ultraschall_Set_View_Story") -- Story Button + + +if state <= 0 then + reaper.SetToggleCommandState(sec, cmd, 1) +end + +ultraschall.SetUSExternalState("ultraschall_gui", "views", cmd, true) +ultraschall.SetUSExternalState("ultraschall_gui", "sec", sec, true) +ultraschall.SetUSExternalState("ultraschall_gui", "view", "record", true) + +reaper.SetToggleCommandState(sec, ID_1, 0) +reaper.SetToggleCommandState(sec, ID_3, 0) +reaper.SetToggleCommandState(sec, ID_4, 0) + +-- reaper.RefreshToolbar2(sec, ID_1) +-- reaper.RefreshToolbar2(sec, ID_2) +-- reaper.RefreshToolbar2(sec, ID_3) +-- reaper.RefreshToolbar2(sec, ID_4) +reaper.Main_OnCommand(40455,0) --(re)load Screenset) +runcommand("_Ultraschall_Clock") + + +-- Msg(cmd) +-- Msg(ID_2) + +-- state = reaper.GetToggleCommandStateEx(sec, cmd) +-- SetToggleCommandState(sec, cmd, state<=0?1:0); + diff --git a/Scripts/ultraschall_set_view_setup.lua b/Scripts/ultraschall_set_view_setup.lua new file mode 100644 index 0000000..85ff282 --- /dev/null +++ b/Scripts/ultraschall_set_view_setup.lua @@ -0,0 +1,65 @@ +--[[ +################################################################################ +# +# Copyright (c) 2014-2017 Ultraschall (http://ultraschall.fm) +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +# THE SOFTWARE. +# +################################################################################ +]] + +local info = debug.getinfo(1,'S'); +script_path = info.source:match[[^@?(.*[\/])[^\/]-$]] +dofile(script_path .. "ultraschall_helper_functions.lua") + + +is_new,name,sec,cmd,rel,res,val = reaper.get_action_context() +state = reaper.GetToggleCommandStateEx(sec, cmd) + +ID_1 = reaper.NamedCommandLookup("_Ultraschall_Set_View_Setup") -- Setup Button +ID_2 = reaper.NamedCommandLookup("_Ultraschall_Set_View_Record") -- Record Button +ID_3 = reaper.NamedCommandLookup("_Ultraschall_Set_View_Edit") -- Edit Button +ID_4 = reaper.NamedCommandLookup("_Ultraschall_Set_View_Story") -- Story Button + +if state <= 0 then + reaper.SetToggleCommandState(sec, cmd, 1) +end + + +ultraschall.SetUSExternalState("ultraschall_gui", "views", cmd, true) +ultraschall.SetUSExternalState("ultraschall_gui", "sec", sec, true) +ultraschall.SetUSExternalState("ultraschall_gui", "view", "setup", true) + +reaper.SetToggleCommandState(sec, ID_2, 0) +reaper.SetToggleCommandState(sec, ID_3, 0) +reaper.SetToggleCommandState(sec, ID_4, 0) + +--reaper.RefreshToolbar2(sec, ID_1) +-- reaper.RefreshToolbar2(sec, ID_2) +-- reaper.RefreshToolbar2(sec, ID_3) +--reaper.RefreshToolbar2(sec, ID_4) + +reaper.Main_OnCommand(40454,0) --(re)load Screenset + +-- Msg(cmd) +-- Msg(ID_2) + +-- state = reaper.GetToggleCommandStateEx(sec, cmd) +-- SetToggleCommandState(sec, cmd, state<=0?1:0); + diff --git a/Scripts/ultraschall_set_view_story.lua b/Scripts/ultraschall_set_view_story.lua new file mode 100644 index 0000000..fea3cb1 --- /dev/null +++ b/Scripts/ultraschall_set_view_story.lua @@ -0,0 +1,64 @@ +--[[ +################################################################################ +# +# Copyright (c) 2014-2017 Ultraschall (http://ultraschall.fm) +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +# THE SOFTWARE. +# +################################################################################ +]] + + +local info = debug.getinfo(1,'S'); +script_path = info.source:match[[^@?(.*[\/])[^\/]-$]] +dofile(script_path .. "ultraschall_helper_functions.lua") + +is_new,name,sec,cmd,rel,res,val = reaper.get_action_context() +state = reaper.GetToggleCommandStateEx(sec, cmd) + +ID_1 = reaper.NamedCommandLookup("_Ultraschall_Set_View_Setup") -- Setup Button +ID_2 = reaper.NamedCommandLookup("_Ultraschall_Set_View_Record") -- Record Button +ID_3 = reaper.NamedCommandLookup("_Ultraschall_Set_View_Edit") -- Edit Button +ID_4 = reaper.NamedCommandLookup("_Ultraschall_Set_View_Story") -- Story Button + +if state <= 0 then + reaper.SetToggleCommandState(sec, cmd, 1) +end + + +ultraschall.SetUSExternalState("ultraschall_gui", "views", cmd, true) +ultraschall.SetUSExternalState("ultraschall_gui", "sec", sec, true) +ultraschall.SetUSExternalState("ultraschall_gui", "view", "story", true) + +reaper.SetToggleCommandState(sec, ID_1, 0) +reaper.SetToggleCommandState(sec, ID_2, 0) +reaper.SetToggleCommandState(sec, ID_3, 0) + +-- reaper.RefreshToolbar2(sec, ID_1) +-- reaper.RefreshToolbar2(sec, ID_2) +-- reaper.RefreshToolbar2(sec, ID_3) +-- reaper.RefreshToolbar2(sec, ID_4) +reaper.Main_OnCommand(40457,0) --(re)load Screenset + +-- Msg(cmd) +-- Msg(ID_2) + +-- state = reaper.GetToggleCommandStateEx(sec, cmd) +-- SetToggleCommandState(sec, cmd, state<=0?1:0); + diff --git a/Scripts/ultraschall_single_click_workaround.lua b/Scripts/ultraschall_single_click_workaround.lua new file mode 100644 index 0000000..2786fef --- /dev/null +++ b/Scripts/ultraschall_single_click_workaround.lua @@ -0,0 +1,6 @@ +follow_id=reaper.NamedCommandLookup("_Ultraschall_Toggle_Follow") + if reaper.GetToggleCommandState(follow_id)==1 then + reaper.SetExtState("follow", "temp", reaper.time_precise(), false) + end + +--reaper.DeleteExtState("follow", "temp", false) diff --git a/Scripts/ultraschall_slice.lua b/Scripts/ultraschall_slice.lua new file mode 100644 index 0000000..9b9c58c --- /dev/null +++ b/Scripts/ultraschall_slice.lua @@ -0,0 +1,88 @@ +-- @version 1.0 +-- @author Udo Sauer +-- @changelog +-- Initial release + +-- Avid sytle "Add Edit" +-- Split all selected items at cursor position +-- if no item is selected split all items in selected tracks at cursor position +-- if no track is selected split all items in all tracks at position +-- and do not split locked items! + +allow_split_of_locked_items=false --set to true if you need it +mark_right_item_after_split=false --set to true if you prefer the reaper split behavior + +function get_position() + playstate=reaper.GetPlayState() --0 stop, 1 play, 2 pause, 4 rec possible to combine bits + if playstate==1 or playstate==4 then + return reaper.GetPlayPosition() + else + return reaper.GetCursorPosition() + end +end + +function main() + reaper.Undo_BeginBlock() + position=get_position() + number_of_selected_media_items=reaper.CountSelectedMediaItems(0) + number_of_tracks=reaper.CountTracks(0) + number_of_selected_tracks=reaper.CountSelectedTracks(0) + items_to_split={} + index=1 + + if number_of_selected_media_items>0 then + for i=0,number_of_selected_media_items-1 do + item=reaper.GetSelectedMediaItem(0, i) + items_to_split[index]={} + items_to_split[index].item=item + index=index+1 + end + elseif number_of_selected_tracks>0 then + for i=0, number_of_selected_tracks-1 do + track=reaper.GetSelectedTrack(0, i) + number_of_track_items=reaper.GetTrackNumMediaItems(track) + for m=0, number_of_track_items-1 do + item=reaper.GetTrackMediaItem(track,m) + media_start=reaper.GetMediaItemInfo_Value(item, "D_POSITION") + media_end =reaper.GetMediaItemInfo_Value(item, "D_LENGTH")+media_start + if media_startposition then + items_to_split[index]={} + items_to_split[index].item=item + index=index+1 + end + end + end + elseif number_of_tracks>0 then + for i=0,number_of_tracks-1 do + track=reaper.GetTrack(0,i) + number_of_track_items=reaper.GetTrackNumMediaItems(track) + for m=0, number_of_track_items-1 do + item=reaper.GetTrackMediaItem(track,m) + media_start=reaper.GetMediaItemInfo_Value(item, "D_POSITION") + media_end =reaper.GetMediaItemInfo_Value(item, "D_LENGTH")+media_start + if media_startposition then + items_to_split[index]={} + items_to_split[index].item=item + index=index+1 + end + end + end + end + + -- split the items + for i=index-1,1,- 1 do + item=items_to_split[i].item + + if reaper.GetMediaItemInfo_Value(item, "C_LOCK")&1==0 or allow_split_of_locked_items==true then + newitem=reaper.SplitMediaItem(item, position) + if newitem ~=null and mark_right_item_after_split==true then + reaper.SetMediaItemSelected(newitem, 1) + reaper.SetMediaItemSelected(item, 0) + end + end + reaper.UpdateArrange() --update screen! + end + reaper.Undo_EndBlock("Add Edit (fernsehmuell script)", -1) +end + +main() diff --git a/Scripts/ultraschall_snapshot_1.lua b/Scripts/ultraschall_snapshot_1.lua new file mode 100644 index 0000000..f2560a2 --- /dev/null +++ b/Scripts/ultraschall_snapshot_1.lua @@ -0,0 +1,41 @@ +--[[ +################################################################################ +# +# Copyright (c) 2014-2017 Ultraschall (http://ultraschall.fm) +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +# THE SOFTWARE. +# +################################################################################ +]] + + +-- Print Message to console (debugging) +function Msg(val) + reaper.ShowConsoleMsg(tostring(val).."\n") +end + + +local info = debug.getinfo(1,'S'); +script_path = info.source:match[[^@?(.*[\/])[^\/]-$]] +GUI = dofile(script_path .. "ultraschall_routing_snapshots_functions.lua") + +Main(1) + + + diff --git a/Scripts/ultraschall_snapshot_2.lua b/Scripts/ultraschall_snapshot_2.lua new file mode 100644 index 0000000..e273383 --- /dev/null +++ b/Scripts/ultraschall_snapshot_2.lua @@ -0,0 +1,38 @@ +--[[ +################################################################################ +# +# Copyright (c) 2014-2017 Ultraschall (http://ultraschall.fm) +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +# THE SOFTWARE. +# +################################################################################ +]] + + +-- Print Message to console (debugging) +function Msg(val) + reaper.ShowConsoleMsg(tostring(val).."\n") +end + + +local info = debug.getinfo(1,'S'); +script_path = info.source:match[[^@?(.*[\/])[^\/]-$]] +GUI = dofile(script_path .. "ultraschall_routing_snapshots_functions.lua") + +Main(2) diff --git a/Scripts/ultraschall_snapshot_3.lua b/Scripts/ultraschall_snapshot_3.lua new file mode 100644 index 0000000..e1f8d40 --- /dev/null +++ b/Scripts/ultraschall_snapshot_3.lua @@ -0,0 +1,38 @@ +--[[ +################################################################################ +# +# Copyright (c) 2014-2017 Ultraschall (http://ultraschall.fm) +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +# THE SOFTWARE. +# +################################################################################ +]] + + +-- Print Message to console (debugging) +function Msg(val) + reaper.ShowConsoleMsg(tostring(val).."\n") +end + + +local info = debug.getinfo(1,'S'); +script_path = info.source:match[[^@?(.*[\/])[^\/]-$]] +GUI = dofile(script_path .. "ultraschall_routing_snapshots_functions.lua") + +Main(3) \ No newline at end of file diff --git a/Scripts/ultraschall_snapshot_4.lua b/Scripts/ultraschall_snapshot_4.lua new file mode 100644 index 0000000..dcf7cde --- /dev/null +++ b/Scripts/ultraschall_snapshot_4.lua @@ -0,0 +1,38 @@ +--[[ +################################################################################ +# +# Copyright (c) 2014-2017 Ultraschall (http://ultraschall.fm) +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +# THE SOFTWARE. +# +################################################################################ +]] + + +-- Print Message to console (debugging) +function Msg(val) + reaper.ShowConsoleMsg(tostring(val).."\n") +end + + +local info = debug.getinfo(1,'S'); +script_path = info.source:match[[^@?(.*[\/])[^\/]-$]] +GUI = dofile(script_path .. "ultraschall_routing_snapshots_functions.lua") + +Main(4) diff --git a/Scripts/ultraschall_snapshot_editor.lua b/Scripts/ultraschall_snapshot_editor.lua new file mode 100644 index 0000000..26984a8 --- /dev/null +++ b/Scripts/ultraschall_snapshot_editor.lua @@ -0,0 +1,37 @@ +--[[ +################################################################################ +# +# Copyright (c) 2014-2017 Ultraschall (http://ultraschall.fm) +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +# THE SOFTWARE. +# +################################################################################ +]] + + +-- Print Message to console (debugging) +function Msg(val) + reaper.ShowConsoleMsg(tostring(val).."\n") +end + +local info = debug.getinfo(1,'S'); +script_path = info.source:match[[^@?(.*[\/])[^\/]-$]] +GUI = dofile(script_path .. "ultraschall_routing_snapshots_functions.lua") + +Main(0) diff --git a/Scripts/ultraschall_snapshot_write_1.lua b/Scripts/ultraschall_snapshot_write_1.lua new file mode 100644 index 0000000..81b6d2e --- /dev/null +++ b/Scripts/ultraschall_snapshot_write_1.lua @@ -0,0 +1,41 @@ +--[[ +################################################################################ +# +# Copyright (c) 2014-2017 Ultraschall (http://ultraschall.fm) +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +# THE SOFTWARE. +# +################################################################################ +]] + + +-- Print Message to console (debugging) +function Msg(val) + reaper.ShowConsoleMsg(tostring(val).."\n") +end + + +local info = debug.getinfo(1,'S'); +script_path = info.source:match[[^@?(.*[\/])[^\/]-$]] +GUI = dofile(script_path .. "ultraschall_routing_snapshots_functions.lua") + +saveSnapshotPure(1) + + + diff --git a/Scripts/ultraschall_snapshot_write_2.lua b/Scripts/ultraschall_snapshot_write_2.lua new file mode 100644 index 0000000..8af3fa4 --- /dev/null +++ b/Scripts/ultraschall_snapshot_write_2.lua @@ -0,0 +1,41 @@ +--[[ +################################################################################ +# +# Copyright (c) 2014-2017 Ultraschall (http://ultraschall.fm) +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +# THE SOFTWARE. +# +################################################################################ +]] + + +-- Print Message to console (debugging) +function Msg(val) + reaper.ShowConsoleMsg(tostring(val).."\n") +end + + +local info = debug.getinfo(1,'S'); +script_path = info.source:match[[^@?(.*[\/])[^\/]-$]] +GUI = dofile(script_path .. "ultraschall_routing_snapshots_functions.lua") + +saveSnapshotPure(2) + + + diff --git a/Scripts/ultraschall_snapshot_write_3.lua b/Scripts/ultraschall_snapshot_write_3.lua new file mode 100644 index 0000000..8b3b3ca --- /dev/null +++ b/Scripts/ultraschall_snapshot_write_3.lua @@ -0,0 +1,41 @@ +--[[ +################################################################################ +# +# Copyright (c) 2014-2017 Ultraschall (http://ultraschall.fm) +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +# THE SOFTWARE. +# +################################################################################ +]] + + +-- Print Message to console (debugging) +function Msg(val) + reaper.ShowConsoleMsg(tostring(val).."\n") +end + + +local info = debug.getinfo(1,'S'); +script_path = info.source:match[[^@?(.*[\/])[^\/]-$]] +GUI = dofile(script_path .. "ultraschall_routing_snapshots_functions.lua") + +saveSnapshotPure(3) + + + diff --git a/Scripts/ultraschall_snapshot_write_4.lua b/Scripts/ultraschall_snapshot_write_4.lua new file mode 100644 index 0000000..956d4f8 --- /dev/null +++ b/Scripts/ultraschall_snapshot_write_4.lua @@ -0,0 +1,41 @@ +--[[ +################################################################################ +# +# Copyright (c) 2014-2017 Ultraschall (http://ultraschall.fm) +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +# THE SOFTWARE. +# +################################################################################ +]] + + +-- Print Message to console (debugging) +function Msg(val) + reaper.ShowConsoleMsg(tostring(val).."\n") +end + + +local info = debug.getinfo(1,'S'); +script_path = info.source:match[[^@?(.*[\/])[^\/]-$]] +GUI = dofile(script_path .. "ultraschall_routing_snapshots_functions.lua") + +saveSnapshotPure(4) + + + diff --git a/Scripts/ultraschall_split_ripple_cut.lua b/Scripts/ultraschall_split_ripple_cut.lua new file mode 100644 index 0000000..69f0483 --- /dev/null +++ b/Scripts/ultraschall_split_ripple_cut.lua @@ -0,0 +1,62 @@ +--[[ +################################################################################ +# +# Copyright (c) 2014-2017 Ultraschall (http://ultraschall.fm) +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +# THE SOFTWARE. +# +################################################################################ +]] + +------------------------------------- +-- Print Message to console (debugging) +------------------------------------- + +function Msg(val) + reaper.ShowConsoleMsg(tostring(val).."\n") +end + +------------------------------------- +-- run a command by its name +------------------------------------- + +function runcommand(cmd) + start_id = reaper.NamedCommandLookup(cmd) + reaper.Main_OnCommand(start_id,0) +end + + +------------------------------------- +reaper.Undo_BeginBlock() -- Begining of the undo block. Leave it at the top of your main function. +------------------------------------- + +reaper.Main_OnCommand(40758, 0) -- Slice through all tracks and select left + +if reaper.CountSelectedMediaItems(0) > 0 then -- exacty one item selected + runcommand("_SWS_SAFETIMESEL") -- set time selection to item borders + reaper.Main_OnCommand(40201, 0) -- Ripple cut Selection + runcommand("_e78004c909c9460bb393c41452f8c848") -- move to last cut + +else -- no time selection or items selected + result = reaper.ShowMessageBox( "Nothing to cut", "Ultraschall Split Ripple Cut", 0 ) -- Info window +end + +------------------------------------- +reaper.Undo_EndBlock("Ultraschall Split Ripple Cut", -1) -- End of the undo block. Leave it at the bottom of your main function. +------------------------------------- diff --git a/Scripts/ultraschall_startscreen.lua b/Scripts/ultraschall_startscreen.lua new file mode 100644 index 0000000..5b4f1cd --- /dev/null +++ b/Scripts/ultraschall_startscreen.lua @@ -0,0 +1,204 @@ +--[[ +################################################################################ +# +# Copyright (c) 2014-2017 Ultraschall (http://ultraschall.fm) +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +# THE SOFTWARE. +# +################################################################################ +]] + + +local info = debug.getinfo(1,'S'); +script_path = info.source:match[[^@?(.*[\/])[^\/]-$]] +dofile(script_path .. "ultraschall_helper_functions.lua") + + +------------------------------------------------------ +-- Open a URL in a browser - OS agnostic +------------------------------------------------------ +function open_url(url) + + local OS=reaper.GetOS() + if OS=="OSX32" or OS=="OSX64" then + os.execute("open ".. url) + else + os.execute("start ".. url) + end +end + +------------------------------------------------------ +-- Open a info windows for cut & paste +------------------------------------------------------ +function open_info(msg, title) + + type = 0 + result = reaper.ShowMessageBox( msg, title, type ) +end + +------------------------------------------------------ +-- Get Versions and return them as a table +------------------------------------------------------ +function get_versions() + + local versionsTable = {} + local versionItemsCount = tonumber(reaper.GetExtState("ultraschall_bom", "found_items")) -- number of entrie + if versionItemsCount and versionItemsCount > 0 then -- there are any items + for i = 1, versionItemsCount, 1 do + versionsTable[i] = reaper.GetExtState("ultraschall_bom", "item_"..tostring(i)) + end + else + open_info("There are parts of the ULTRASCHALL install missing.\n\nULTRASCHALL wil NOT work properly until you fix this.\n\nPlease check the installation guide on http://ultraschall.fm/install/","Ultraschall Configuration Problem") -- Fehleranzeige hier + end + return versionsTable +end + +------------------------------------------------------ +-- Build menu string from table +------------------------------------------------------ +function build_menu(table) + + local menuString = "Version Check:||" + for i, item in ipairs(table) do + menuString = menuString.."!"..item.."|" + end + return menuString +end + +------------------------------------------------------ +-- Getting the values of startscreen and updatecheck +------------------------------------------------------ +function check_values() + + local startscreen + local updatecheck + + A,startscreen = ultraschall.GetUSExternalState("ultraschall_start", "startscreen") + if GUI.Val("checkers")[1] == true and (startscreen == "0" or startscreen=="-1") then -- ckeckbox is activated + ultraschall.SetUSExternalState("ultraschall_start", "startscreen", "1", true) + elseif GUI.Val("checkers")[1] == false and startscreen == "1" then -- ckeckbox is deactivated + ultraschall.SetUSExternalState("ultraschall_start", "startscreen", "0", true) + end + + updatecheck = reaper.GetExtState("ultraschall_update", "update_check") + + if GUI.Val("checkers2")[1] == true and (updatecheck == "0" or updatecheck=="") then -- ckeckbox is activated + reaper.SetExtState("ultraschall_update", "update_check", "1", true) + ultraschall.SetUSExternalState("ultraschall_update", "update_check", "1", true) + elseif GUI.Val("checkers2")[1] == false and updatecheck == "1" then -- ckeckbox is deactivated + reaper.SetExtState("ultraschall_update", "update_check", "0", true) + ultraschall.SetUSExternalState("ultraschall_update", "update_check", "0", true) + end + +end + +------------------------------------------------------ +-- Show the GUI menu item +------------------------------------------------------ +function show_menu(str) + + gfx.x, gfx.y = GUI.mouse.x, GUI.mouse.y + selectedMenu = gfx.showmenu(str) + return selectedMenu + +end + + +------------------------------------------------------ +-- End of functions +------------------------------------------------------ + + +-- Grab all of the functions and classes from our GUI library + +local info = debug.getinfo(1,'S'); +script_path = info.source:match[[^@?(.*[\/])[^\/]-$]] +GUI = dofile(script_path .. "ultraschall_gui_lib.lua") + +---- Window settings and user functions ---- + +GUI.name = "Ultraschall 3" +GUI.w, GUI.h = 680, 415 + +------------------------------------------------------ +-- position always in the center of the screen +------------------------------------------------------ + +l, t, r, b = 0, 0, GUI.w, GUI.h +__, __, screen_w, screen_h = reaper.my_getViewport(l, t, r, b, l, t, r, b, 1) +GUI.x, GUI.y = (screen_w - GUI.w) / 2, (screen_h - GUI.h) / 2 + + + + + -- body + ---- GUI Elements ---- + +GUI.elms = { + +-- name = element type x y w h zoom caption ...other params... + logo = GUI.Pic:new( 240, 10, 0, 0, 1, script_path.."us.png"), + label = GUI.Lbl:new( 165, 160, "Ultraschall 3.1 - Miedinger - was successfully installed.", 0), + label2 = GUI.Lbl:new( 135, 220, "Visit the Podcast menu to explore the user interface and features.", 0), + label3 = GUI.Lbl:new( 210, 240, "Use Project templates for a quick setup.", 0), + label4 = GUI.Lbl:new( 265, 290, "If you need assistance:", 0), + checkers = GUI.Checklist:new( 20, 380, 240, 30, "", "Show this Screen on Start", 4), + checkers2 = GUI.Checklist:new( 405, 380, 240, 30, "", "Automatically check for updates", 4), + tutorials = GUI.Btn:new( 30, 320, 190, 40, "Tutorials", open_url, "http://ultraschall.fm/tutorials/"), + twitter = GUI.Btn:new( 242, 320, 190, 40, "Twitter", open_url, "https://twitter.com/ultraschall_fm"), + forum = GUI.Btn:new( 455, 320, 190, 40, "Userforum", open_url, "https://sendegate.de/c/ultraschall"), +} + + +versionsTable = get_versions() +version_items = build_menu(versionsTable) +GUI.elms.versions = GUI.Btn:new( 276, 185, 120, 24, " Show Details", show_menu, version_items) + +-- open_info(build_info(versionsTable),"Version Info for cut & paste") + +-- Version check:||!Ultraschall REAPER Extension 3.0.3|!Ultraschall REAPER Theme 3.0.3|#UltraschallHub 1.0.1|!Ultraschall Soundboard 3.0.0|#StudioLink Plug-in 16.12.0|!StudioLink OnAir Plug-in 17.02.1|!LAME MP3 Encoder 3.98.3|!SWS REAPER Extension 2.8.8|>REAPER 5.35| 99 then minutes = 0 end + update=true +end + +function chgsec(offset) + seconds=seconds + offset + if seconds < 0 then seconds = 59 end + if seconds > 59 then seconds = 0 end + update=true +end + +function updateteatime() + refresh=false + if update then + secondstogo=minutes*60+seconds + refresh=true + setstartmarker = false + elseif running then + refresh=true + update=false + secondstogo=endtime-math.floor(reaper.time_precise()) + if secondstogo<10 then + blinking=true + end + if secondstogo<1 then + running=false + secondstogo=0 + end + end + + if refresh then + minutestogo=math.floor(secondstogo/60) + secondstogo=secondstogo-minutestogo*60 + + min2=math.floor(minutestogo % 10) + min1=math.floor((minutestogo-min2)/10) + sec2=math.floor(secondstogo % 10) + sec1=math.floor((secondstogo-sec2)/10) + + GUI.elms.sec_1.source=script_path..sec1..".png" + GUI.elms.sec_2.source=script_path..sec2..".png" + GUI.elms.min_1.source=script_path..min1..".png" + GUI.elms.min_2.source=script_path..min2..".png" + end + + if blinking then + if blink then zoom=1 else zoom=0.99 + end + blink=not blink + GUI.elms.sec_1.zoom=zoom + GUI.elms.sec_2.zoom=zoom + GUI.elms.min_1.zoom=zoom + GUI.elms.min_2.zoom=zoom + GUI.elms.seperator.zoom=zoom + end +end + +function donothing() +end + +---- GUI Elements ---- +GUI.elms = { + start_button = GUI.Btn:new(4+6*18, 4, 2*34, 52, "Start", press_start), + reset_button = GUI.Btn:new(4+6*18, 4+2*29, 2*34, 23, "15 Min.", press_reset,15), + reset2_button= GUI.Btn:new(4+6*18, 16+2*38, 2*34, 23, "01 Min." , press_reset,1), + minup_button = GUI.Btn:new(4, 4, 34, 16, " +", chgmin, 1), + mindo_button = GUI.Btn:new(4, 23+2*38, 34, 16, " -", chgmin, -1), + secup_button = GUI.Btn:new(4+3*18, 4, 34, 16, " +", chgsec, 1), + secdo_button = GUI.Btn:new(4+3*18, 23+2*38, 34, 16, " -", chgsec, -1), + min_1 = GUI.Pic:new(4,44, 18, 26, 1, script_path.."1.png", donothing , ""), + min_2 = GUI.Pic:new(4+18,44, 18, 26, 1, script_path.."5.png", donothing, ""), + seperator = GUI.Pic:new(4+2*18,42, 18, 26, 1, script_path.."_.png", donothing, ""), + sec_1 = GUI.Pic:new(4+3*18,44, 18, 26, 1, script_path.."0.png", donothing , ""), + sec_2 = GUI.Pic:new(4+4*18,44, 18, 26, 1, script_path.."0.png", donothing, ""), +} + + +---- Main loop ---- +--If you want to run a function during the update loop, use the variable GUI.func prior to +--starting GUI.Main() loop: + +GUI.func = updateteatime +GUI.freq = 0.5 -- <-- How often in seconds to run the function, so we can avoid clogging up the CPU. + -- Will run once a second if no value is given. + -- Integers only, 0 will run every time. + +GUI.Init() +GUI.Main() diff --git a/Scripts/ultraschall_toggle_all_track_recarm_states.lua b/Scripts/ultraschall_toggle_all_track_recarm_states.lua new file mode 100644 index 0000000..ceed5bd --- /dev/null +++ b/Scripts/ultraschall_toggle_all_track_recarm_states.lua @@ -0,0 +1,116 @@ +--[[ +################################################################################ +# +# Copyright (c) 2014-2017 Ultraschall (http://ultraschall.fm) +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +# THE SOFTWARE. +# +################################################################################ +]] + +ultraschall={} + +function ultraschall.SetTrackRecState(tracknumber, ArmState, InputChannel, MonitorInput, RecInput, MonitorWhileRec, presPDCdelay, RecordingPath, TrackStateChunk) + if tonumber(tracknumber)==nil then return false end + if tonumber(tracknumber)<-1 or tonumber(tracknumber)>reaper.CountTracks(0) then return false end + if type(ArmState)~="number" then return false end + if type(InputChannel)~="number" then return false end + if type(MonitorInput)~="number" then return false end + if type(RecInput)~="number" then return false end + if type(MonitorWhileRec)~="number" then return false end + if type(presPDCdelay)~="number" then return false end + if type(RecordingPath)~="number" then return false end + + tracknumber=tonumber(tracknumber) + local str="REC "..ArmState.." "..InputChannel.." "..MonitorInput.." "..RecInput.." "..MonitorWhileRec.." "..presPDCdelay.." "..RecordingPath + + local Mediatrack, A, AA, B + if tonumber(tracknumber)~=-1 then + if tracknumber==0 then Mediatrack=reaper.GetMasterTrack(0) + else + Mediatrack=reaper.GetTrack(0,tracknumber-1) + end + A,AA=reaper.GetTrackStateChunk(Mediatrack,str,false) + else + if type(TrackStateChunk)~="string" then return false end + AA=TrackStateChunk + end + + local B1=AA:match("(.-)REC") + local B3=AA:match("REC.-%c(.*)") + if B1==nil then B1=AA:match("(.-TRACK)") B3=AA:match(".-TRACK(.*)") end + if tonumber(tracknumber)~=-1 then + B=reaper.SetTrackStateChunk(Mediatrack,B1.."\n"..str.."\n"..B3,false) + else + B=true + end + return B, B1.."\n"..str.."\n"..B3 +end + + +function ultraschall.GetTrackRecState(tracknumber, str) + if tonumber(tracknumber)==nil then return nil end + if tonumber(tracknumber)~=-1 then + local retval, MediaTrack + if tonumber(tracknumber)<0 or tonumber(tracknumber)>reaper.CountTracks(0) then return nil end + tracknumber=tonumber(tracknumber) + if tracknumber==0 then MediaTrack=reaper.GetMasterTrack(0) + else MediaTrack=reaper.GetTrack(0, tracknumber-1) + end + retval, str = reaper.GetTrackStateChunk(MediaTrack, "test", false) + else + end + if str==nil or str:match("")==nil then return nil end + + local Track_Rec=str:match("REC.-%c") Track_Rec=Track_Rec:sub(4,-2) + local Track_Rec1=Track_Rec:match("(%b )") Track_Rec=Track_Rec:match(".(%s.*)") + local Track_Rec2=Track_Rec:match("(%b )") Track_Rec=Track_Rec:match(".(%s.*)") + local Track_Rec3=Track_Rec:match("(%b )") Track_Rec=Track_Rec:match(".(%s.*)") + local Track_Rec4=Track_Rec:match("(%b )") Track_Rec=Track_Rec:match(".(%s.*)") + local Track_Rec5=Track_Rec:match("(%b )") Track_Rec=Track_Rec:match(".(%s.*)") + local Track_Rec6=Track_Rec:match("(%b )") Track_Rec=Track_Rec:match(".(%s.*)") + local Track_Rec7=Track_Rec + return tonumber(Track_Rec1), tonumber(Track_Rec2), tonumber(Track_Rec3), tonumber(Track_Rec4), tonumber(Track_Rec5), tonumber(Track_Rec6), tonumber(Track_Rec7) +end + +----------------------------------- +---- toggle solo of all tracks ---- +----------------------------------- + + +if reaper.GetPlayState()&4~=4 then + RecArms=false + + for i=1, reaper.CountTracks() do + ArmState, InputChannel, MonitorInput, RecInput, MonitorWhileRec, presPDCdelay, RecordingPath = ultraschall.GetTrackRecState(i) + if ArmState~=0 then RecArms=true end + end + + + for i=1, reaper.CountTracks() do + if RecArms==true then + reaper.ClearAllRecArmed() + else + ArmState, InputChannel, MonitorInput, RecInput, MonitorWhileRec, presPDCdelay, RecordingPath = ultraschall.GetTrackRecState(i) + retval = ultraschall.SetTrackRecState(i, 1, InputChannel, MonitorInput, RecInput, MonitorWhileRec, presPDCdelay, RecordingPath) + end + end +else + reaper.MB("You must stop recording first, before toggling the arming state for all tracks!","Toggle recarm of all tracks",0) +end diff --git a/Scripts/ultraschall_toggle_arrange_zoom.lua b/Scripts/ultraschall_toggle_arrange_zoom.lua new file mode 100644 index 0000000..84a2402 --- /dev/null +++ b/Scripts/ultraschall_toggle_arrange_zoom.lua @@ -0,0 +1,50 @@ +--[[ +################################################################################ +# +# Copyright (c) 2014-2017 Ultraschall (http://ultraschall.fm) +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# s +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +# THE SOFTWARE. +# +################################################################################ +]] + +local info = debug.getinfo(1,'S'); +script_path = info.source:match[[^@?(.*[\/])[^\/]-$]] +dofile(script_path .. "ultraschall_helper_functions.lua") + +zoomfactor=reaper.GetHZoomLevel() -- get current zoom-level +ZoomedInLevelDef=400 -- set this to the "zoom in"-level, you want to have + -- 0.007(max zoom out) to 1000000(max zoom in) is valid, + -- 400 is recommended +A,Zoomstate=ultraschall.GetUSExternalState("view","zoom_toggle_state") +A,ZoomedInLevel=ultraschall.GetUSExternalState("view","zoomin_level") +ZoomedInLevel=tonumber(ZoomedInLevel) +if ZoomedInLevel==-1 or ZoomedInLevel==nil then + ZoomedInLevel=ZoomedInLevelDef +end + +if Zoomstate=="false" or zoomfactor~=ZoomedInLevel then + ultraschall.SetUSExternalState("view","zoom_toggle_state","true",false) + ultraschall.SetUSExternalState("view","old_zoomfactor",zoomfactor,false) + reaper.adjustZoom(ZoomedInLevel, 1, true, 0) +else + ultraschall.SetUSExternalState("view","zoom_toggle_state","false",false) + A,oldzoomfactor=ultraschall.GetUSExternalState("view","old_zoomfactor") + reaper.adjustZoom(tonumber(oldzoomfactor), 1, true, 0) +end diff --git a/Scripts/ultraschall_toggle_envelope_height.lua b/Scripts/ultraschall_toggle_envelope_height.lua new file mode 100644 index 0000000..02fc631 --- /dev/null +++ b/Scripts/ultraschall_toggle_envelope_height.lua @@ -0,0 +1,101 @@ +--[[ +################################################################################ +# +# Copyright (c) 2014-2017 Ultraschall (http://ultraschall.fm) +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +# THE SOFTWARE. +# +################################################################################ +]] + +-- Toggle height of all envelopes. +-- Toggles between minimum height and the default-compactible-height of Reaper. +-- Has no effect, if there's no envelope in the project + +local info = debug.getinfo(1,'S'); +script_path = info.source:match[[^@?(.*[\/])[^\/]-$]] +dofile(script_path .. "ultraschall_helper_functions.lua") + +-- now, we set the minimum height of all envelopes in the project +-- set to nil, to use the user settings instead + defheight=24 + defmaxheight=70 + +------------------------------------- +--reaper.Undo_BeginBlock() -- Begining of the undo block. Leave it at the top of your main function. +------------------------------------- + +ToggleHeight="" + +--get current toggle state, set to true, if not existing yet +A,ToggleState=ultraschall.GetUSExternalState("ultraschall_envelope", "EnvelopeToggleState") +if ToggleState=="-1" or ToggleState=="true" then + ToggleState="true" + ultraschall.SetUSExternalState("ultraschall_envelope", "EnvelopeToggleState", "false") +else + ultraschall.SetUSExternalState("ultraschall_envelope", "EnvelopeToggleState", "true") +end +if ToggleState=="true" then + A,ToggleHeight=ultraschall.GetUSExternalState("ultraschall_envelope", "EnvelopeMinHeight") + if ToggleHeight=="-1" then ToggleHeight=defheight end +else + A,ToggleHeight=ultraschall.GetUSExternalState("ultraschall_envelope", "EnvelopeMaxHeight") + if ToggleHeight=="-1" then ToggleHeight=defmaxheight end +end + + +--get all current envelopes + TEnvAr, CountTracks, FstTrack, MstTrack=ultraschall.GetAllTrackEnvelopes() + +-- now we check the first trackenvelope(either from a track or master-track), if it is compacted or not +-- this will be the basis for setting all other envelope's-compactible states + + if FstTrack>-1 then TrackEnvelope=TEnvAr[FstTrack][1][0] -- if there's a track with envelope, use that one + elseif MstTrack>-1 then TrackEnvelope=TEnvAr[MstTrack][1][0] -- if there's envelope in master track, use that one + else TrackEnvelope=nil -- if there's none, use none + end + if TrackEnvelope==nil then return end -- end script, when there's no envelope + + retval, str = reaper.GetEnvelopeStateChunk(TrackEnvelope, "", false) -- get statechunk of first envelope in the project + compacted=str:match("LANEHEIGHT .- (.-)%c") -- get compacted-state of first envelope in the project + + +-- now, we set the height, as well as the compactible state of all envelope-tracks + for i=0, CountTracks do + for a=0, TEnvAr[i][0] do + retval, str = reaper.GetEnvelopeStateChunk(TEnvAr[i][1][a], "", false) -- get envelopestatechunk + + -- get settings, we don't want to change + part1=str:match("(.-)LANE") + part2=str:match("LANEHEIGHT.-%c(.*)") + + -- set height + if defheight==nil then height=str:match("LANEHEIGHT (.-) .-%c") + else height=defheight + end + + newstr=part1.."LANEHEIGHT "..ToggleHeight.." 0\n"..part2 -- insert new height and compacted-state + retval, str2 = reaper.SetEnvelopeStateChunk(TEnvAr[i][1][a], newstr, false) -- set envelope to new settings + end + end + +------------------------------------- +--reaper.Undo_EndBlock("Ultraschall Toggle Envelope Height", -1) -- End of the undo block. Leave it at the bottom of your main function. +------------------------------------- + diff --git a/Scripts/ultraschall_toggle_follow.lua b/Scripts/ultraschall_toggle_follow.lua new file mode 100644 index 0000000..29a86e7 --- /dev/null +++ b/Scripts/ultraschall_toggle_follow.lua @@ -0,0 +1,76 @@ +--[[ +################################################################################ +# +# Copyright (c) 2014-2018 Ultraschall (http://ultraschall.fm) +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +# THE SOFTWARE. +# +################################################################################ +]] + +-- little helpers + +local info = debug.getinfo(1,'S'); +script_path = info.source:match[[^@?(.*[\/])[^\/]-$]] +dofile(script_path .. "ultraschall_helper_functions.lua") + +is_new,name,sec,cmd,rel,res,val = reaper.get_action_context() +state = reaper.GetToggleCommandStateEx(sec, cmd) + +starttime=reaper.time_precise()+0.5 + +-- with high zoom-in-levels, we need to take care a little bit more +play=false +if reaper.GetHZoomLevel()>1500 then play=true end +if reaper.GetHZoomLevel()>1500 then reaper.SetExtState("follow", "skip", "true", false) end + +if state ~= 1 then + -- Followmode on + reaper.SetToggleCommandState(sec, cmd, 1) + ultraschall.SetUSExternalState("ultraschall_follow", "state", 1) + reaper.SetExtState("follow", "recognized", "false", false) + if reaper.GetPlayState()~=0 and play==false then + -- Follow On with low zoom-in-levels + ultraschall.pause_follow_one_cycle() + ultraschall.ToggleScrollingDuringPlayback(1, false, play) + reaper.Main_OnCommand(40150,0) -- Go to play position + start_time, end_time = reaper.GetSet_ArrangeView2(0, false, 0, 0) + length=((end_time-start_time)/2)+(2/reaper.GetHZoomLevel()) + reaper.BR_SetArrangeView(0, (reaper.GetPlayPosition()-length), (reaper.GetPlayPosition()+length)) + elseif reaper.GetPlayState()~=0 and play==true then + -- Follow On with high zoom-in-levels + ultraschall.pause_follow_one_cycle() + reaper.Main_OnCommand(40150,0) -- Go to play position + ultraschall.ToggleScrollingDuringPlayback(1, false, play) + ultraschall.pause_follow_one_cycle() + runcommand("_Ultraschall_Center_Arrangeview_To_Cursor") + else + -- Follow On with seldom edge-cases + ultraschall.pause_follow_one_cycle() + ultraschall.ToggleScrollingDuringPlayback(1, false, false) + end +else + -- Followmode off + reaper.SetToggleCommandState(sec, cmd, 0) + ultraschall.ToggleScrollingDuringPlayback(0, false, false) + ultraschall.SetUSExternalState("ultraschall_follow", "state", 0) +end + +reaper.RefreshToolbar2(sec, cmd) + diff --git a/Scripts/ultraschall_toggle_mouse_selection.lua b/Scripts/ultraschall_toggle_mouse_selection.lua new file mode 100644 index 0000000..9825968 --- /dev/null +++ b/Scripts/ultraschall_toggle_mouse_selection.lua @@ -0,0 +1,49 @@ +--[[ +################################################################################ +# +# Copyright (c) 2014-2017 Ultraschall (http://ultraschall.fm) +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +# THE SOFTWARE. +# +################################################################################ +]] + +local info = debug.getinfo(1,'S'); +script_path = info.source:match[[^@?(.*[\/])[^\/]-$]] +dofile(script_path .. "ultraschall_helper_functions.lua") + +is_new,name,sec,cmd,rel,res,val = reaper.get_action_context() +state = reaper.GetToggleCommandStateEx(sec, cmd) + +if state <= 0 then + reaper.SetToggleCommandState(sec, cmd, 1) + reaper.Main_OnCommand(39029,0) --change mode to select +else + reaper.SetToggleCommandState(sec, cmd, 0) + reaper.Main_OnCommand(39013,0) --change mode to move +end + +ultraschall.SetUSExternalState("ultraschall_mouse", "state", state, true) + +reaper.RefreshToolbar2(sec, cmd) + +-- Msg(cmd) +-- Msg(ID_2) + + diff --git a/Scripts/ultraschall_toggle_peak_gain_normal_max.lua b/Scripts/ultraschall_toggle_peak_gain_normal_max.lua new file mode 100644 index 0000000..28f24ef --- /dev/null +++ b/Scripts/ultraschall_toggle_peak_gain_normal_max.lua @@ -0,0 +1,66 @@ +--[[ +################################################################################ +# +# Copyright (c) 2014-2017 Ultraschall (http://ultraschall.fm) +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +# THE SOFTWARE. +# +################################################################################ +]] + + +-- Print Message to console (debugging) +function Msg(val) + reaper.ShowConsoleMsg(tostring(val).."\n") +end + +reaper.Undo_BeginBlock() + use_three_steps=1 --if you just need 2 steps set to 0 + retval,value=reaper.GetProjExtState(0, "Ultraschall", "PeakGain") --check if peakgain is full or normal + + if use_three_steps==1 then + if value=="" then + newvalue="half" + for i=1,23,1 do reaper.Main_OnCommand(40155, 0) end + end + + if value=="half" then + newvalue="full" + for i=1,22,1 do reaper.Main_OnCommand(40155, 0) end + end + + if value=="full" then + newvalue="" + for i=1,45,1 do reaper.Main_OnCommand(40156, 0) end + end + + else + if value=="" then + newvalue="full" + for i=1,45,1 do reaper.Main_OnCommand(40155, 0) end + end + + if value=="full" or value=="half" then + newvalue="" + for i=1,45,1 do reaper.Main_OnCommand(40156, 0) end + end + end + reaper.SetProjExtState(0, "Ultraschall", "PeakGain", newvalue) +reaper.Undo_EndBlock("Toggle Peakgain", 0) + diff --git a/Scripts/ultraschall_toggle_playrate.lua b/Scripts/ultraschall_toggle_playrate.lua new file mode 100644 index 0000000..84d7e78 --- /dev/null +++ b/Scripts/ultraschall_toggle_playrate.lua @@ -0,0 +1,49 @@ +--[[ +################################################################################ +# +# Copyright (c) 2014-2018 Ultraschall (http://ultraschall.fm) +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +# THE SOFTWARE. +# +################################################################################ +]] + +-- toggle the playrate from 1.0 to a user defined value and back, preset is 1.5 + +reaper.Undo_BeginBlock() + +local info = debug.getinfo(1,'S'); +script_path = info.source:match[[^@?(.*[\/])[^\/]-$]] +dofile(script_path .. "ultraschall_helper_functions.lua") + +len, AlternativeRate = ultraschall.GetUSExternalState("ultraschall_playrate", "AlternativeRate") + +local old_val = reaper.Master_GetPlayRate(0) -- get the actual playrate + +if old_val == 1 then + val = tonumber(AlternativeRate) +elseif old_val ~= tonumber(AlternativeRate) then -- someone changed the playrate via slider + ultraschall.SetUSExternalState("ultraschall_playrate", "AlternativeRate", old_val) --save state docked + val = 1.0 +else + val = 1.0 +end + +reaper.CSurf_OnPlayRateChange( val ) -- set new playrate +reaper.Undo_EndBlock( "Toggle Playrate", -1 ) \ No newline at end of file diff --git a/Scripts/ultraschall_toggle_safemode_recording.lua b/Scripts/ultraschall_toggle_safemode_recording.lua new file mode 100644 index 0000000..701862d --- /dev/null +++ b/Scripts/ultraschall_toggle_safemode_recording.lua @@ -0,0 +1,41 @@ +--[[ +################################################################################ +# +# Copyright (c) 2014-2017 Ultraschall (http://ultraschall.fm) +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTH ER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +# THE SOFTWARE. +# +################################################################################ +]] + +-- Toggles external state, that signal the Start/Stop and Start/Pause-scripts, +-- that safemode shall be applied or not. + +local info = debug.getinfo(1,'S'); +script_path = info.source:match[[^@?(.*[\/])[^\/]-$]] +dofile(script_path .. "ultraschall_helper_functions.lua") + +A,state=ultraschall.GetUSExternalState("Ultraschall_Transport", "Safemode_Toggle") + +if state=="ON" or state=="" or state=="-1" then -- If SafeMode is ON or was never set, turn it OFF + ultraschall.SetUSExternalState("Ultraschall_Transport", "Safemode_Toggle", "OFF") + +elseif state=="OFF" then -- If SafeMode is OFF, turn it ON + ultraschall.SetUSExternalState("Ultraschall_Transport", "Safemode_Toggle", "ON") +end diff --git a/Scripts/ultraschall_toggle_safemode_recording_message.lua b/Scripts/ultraschall_toggle_safemode_recording_message.lua new file mode 100644 index 0000000..56e4428 --- /dev/null +++ b/Scripts/ultraschall_toggle_safemode_recording_message.lua @@ -0,0 +1,46 @@ +--[[ +################################################################################ +# +# Copyright (c) 2014-2017 Ultraschall (http://ultraschall.fm) +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +# THE SOFTWARE. +# +################################################################################ +]] + +-- Toggles external state, that signal the Start/Stop and Start/Pause-scripts, +-- that safemode shall be applied or not. +-- +-- After toggling, a messagewindow appears, showing current Safemode-Toggle-State. + +local info = debug.getinfo(1,'S'); +script_path = info.source:match[[^@?(.*[\/])[^\/]-$]] +dofile(script_path .. "ultraschall_helper_functions.lua") + +A,state=ultraschall.GetUSExternalState("Ultraschall_Transport", "Safemode_Toggle") + +if state=="ON" or state=="" or state=="-1" then -- If SafeMode is ON or was never set, turn it OFF + ultraschall.SetUSExternalState("Ultraschall_Transport", "Safemode_Toggle", "OFF") + +elseif state=="OFF" then -- If SafeMode is OFF, turn it ON + ultraschall.SetUSExternalState("Ultraschall_Transport", "Safemode_Toggle", "ON") +end + +A,state=ultraschall.GetUSExternalState("Ultraschall_Transport", "Safemode_Toggle") +reaper.MB("Safemode is turned "..state,"Safemode toggle", 0) diff --git a/Scripts/ultraschall_toggle_track_height.lua b/Scripts/ultraschall_toggle_track_height.lua new file mode 100644 index 0000000..4c4c12a --- /dev/null +++ b/Scripts/ultraschall_toggle_track_height.lua @@ -0,0 +1,59 @@ +--[[ +################################################################################ +# +# Copyright (c) 2014-2017 Ultraschall (http://ultraschall.fm) +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +# THE SOFTWARE. +# +################################################################################ +]] + +------------------------------------- +-- Print Message to console (debugging) +------------------------------------- + +function Msg(val) + reaper.ShowConsoleMsg(tostring(val).."\n") +end + +------------------------------------- +-- run a command by its name +------------------------------------- + +function runcommand(cmd) + start_id = reaper.NamedCommandLookup(cmd) + reaper.Main_OnCommand(start_id,0) +end + + +------------------------------------- +reaper.Undo_BeginBlock() -- Begining of the undo block. Leave it at the top of your main function. +------------------------------------- + +if (reaper.CountSelectedTracks(0) == 0) then -- no track selected + reaper.Main_OnCommand(40296,0) -- select all tracks + runcommand("_XENAK_TOGGLETRACKHEIAB") + reaper.Main_OnCommand(40297,0) -- unselect all tracks +else + runcommand("_XENAK_TOGGLETRACKHEIAB") +end + +------------------------------------- +reaper.Undo_EndBlock("Ultraschall Toggle Track Height", -1) -- End of the undo block. Leave it at the bottom of your main function. +------------------------------------- diff --git a/Scripts/ultraschall_trim_inpoint.lua b/Scripts/ultraschall_trim_inpoint.lua new file mode 100644 index 0000000..34d1c1d --- /dev/null +++ b/Scripts/ultraschall_trim_inpoint.lua @@ -0,0 +1,26 @@ +function run() + is_new,name,sec,cmd,rel,res,val = reaper.get_action_context() + if is_new then + -- reaper.ShowConsoleMsg(name .. "\nrel: " .. rel .. "\nres: " .. res .. "\nval = " .. val .. "\n") debug + if val == 1 then + startOut, endOut = reaper.GetSet_LoopTimeRange(false, true, 0, 0, false) + newstart = startOut + 0.05 + startOut, endOut = reaper.GetSet_LoopTimeRange(true, true, newstart, endOut, true) + else + startOut, endOut = reaper.GetSet_LoopTimeRange(false, true, 0, 0, false) + newstart = startOut - 0.05 + startOut, endOut = reaper.GetSet_LoopTimeRange(true, true, newstart, endOut, true) + end + end + -- reaper.defer(run) + +end + +-- debug + +function onexit() + reaper.ShowConsoleMsg("<-----\n") +end + +reaper.defer(run) +-- reaper.atexit(onexit) diff --git a/Scripts/ultraschall_trim_inpoint_absolut.lua b/Scripts/ultraschall_trim_inpoint_absolut.lua new file mode 100644 index 0000000..4e258c5 --- /dev/null +++ b/Scripts/ultraschall_trim_inpoint_absolut.lua @@ -0,0 +1,21 @@ +function run() + is_new,name,sec,cmd,rel,res,val = reaper.get_action_context() + if is_new then + -- reaper.ShowConsoleMsg(name .. "\nrel: " .. rel .. "\nres: " .. res .. "\nval = " .. val .. "\n") debug + offset = val - 64 + startOut, endOut = reaper.GetSet_LoopTimeRange(false, true, 0, 0, false) + newstart = startOut + offset + startOut, endOut = reaper.GetSet_LoopTimeRange(true, true, newstart, endOut, true) + end + reaper.defer(run) + +end + +-- debug + +function onexit() + reaper.ShowConsoleMsg("<-----\n") +end + +reaper.defer(run) +-- reaper.atexit(onexit) diff --git a/Scripts/ultraschall_trim_loop.lua b/Scripts/ultraschall_trim_loop.lua new file mode 100644 index 0000000..db9d17f --- /dev/null +++ b/Scripts/ultraschall_trim_loop.lua @@ -0,0 +1,24 @@ +function run() + is_new,name,sec,cmd,rel,res,val = reaper.get_action_context() + if is_new then + reaper.ShowConsoleMsg(name .. "\nrel: " .. rel .. "\nres: " .. res .. "\nval = " .. val .. "\n") + if val == 1 then + startOut, endOut = reaper.GetSet_LoopTimeRange(false, true, 0, 0, false) + newstart = startOut + 0.1 + startOut, endOut = reaper.GetSet_LoopTimeRange(true, true, newstart, endOut, true) + else + startOut, endOut = reaper.GetSet_LoopTimeRange(false, true, 0, 0, false) + newstart = startOut - 0.1 + startOut, endOut = reaper.GetSet_LoopTimeRange(true, true, newstart, endOut, true) + end + end + -- reaper.defer(run) + +end + +function onexit() + reaper.ShowConsoleMsg("<-----\n") +end + +reaper.defer(run) +-- reaper.atexit(onexit) diff --git a/Scripts/ultraschall_trim_outpoint.lua b/Scripts/ultraschall_trim_outpoint.lua new file mode 100644 index 0000000..f319a0c --- /dev/null +++ b/Scripts/ultraschall_trim_outpoint.lua @@ -0,0 +1,26 @@ +function run() + is_new,name,sec,cmd,rel,res,val = reaper.get_action_context() + if is_new then + -- reaper.ShowConsoleMsg(name .. "\nrel: " .. rel .. "\nres: " .. res .. "\nval = " .. val .. "\n") debug + if val == 1 then + startOut, endOut = reaper.GetSet_LoopTimeRange(false, true, 0, 0, false) + newend = endOut + 0.05 + startOut, endOut = reaper.GetSet_LoopTimeRange(true, true, startOut, newend, true) + else + startOut, endOut = reaper.GetSet_LoopTimeRange(false, true, 0, 0, false) + newend = endOut - 0.05 + startOut, endOut = reaper.GetSet_LoopTimeRange(true, true, startOut, newend, true) + end + end + -- reaper.defer(run) + +end + +-- debug + +function onexit() + reaper.ShowConsoleMsg("<-----\n") +end + +reaper.defer(run) +-- reaper.atexit(onexit) diff --git a/Scripts/ultraschall_turn_off_follow.lua b/Scripts/ultraschall_turn_off_follow.lua new file mode 100644 index 0000000..a7fecdd --- /dev/null +++ b/Scripts/ultraschall_turn_off_follow.lua @@ -0,0 +1,32 @@ +--[[ +################################################################################ +# +# Copyright (c) 2014-2018 Ultraschall (http://ultraschall.fm) +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +# THE SOFTWARE. +# +################################################################################ +]] + +-- if follow-mode is turned on, turn it off + +follow_id=reaper.NamedCommandLookup("_Ultraschall_Toggle_Follow") +state=reaper.GetToggleCommandState(follow_id) + +if state~=0 then reaper.Main_OnCommand(follow_id, 0) end diff --git a/Scripts/ultraschall_turn_on_follow.lua b/Scripts/ultraschall_turn_on_follow.lua new file mode 100644 index 0000000..d2944e9 --- /dev/null +++ b/Scripts/ultraschall_turn_on_follow.lua @@ -0,0 +1,32 @@ +--[[ +################################################################################ +# +# Copyright (c) 2014-2018 Ultraschall (http://ultraschall.fm) +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +# THE SOFTWARE. +# +################################################################################ +]] + +-- if follow-mode is turned on, turn it off + +follow_id=reaper.NamedCommandLookup("_Ultraschall_Toggle_Follow") +state=reaper.GetToggleCommandState(follow_id) + +if state==0 then reaper.Main_OnCommand(follow_id, 0) end diff --git a/Scripts/ultraschall_ultraclock.lua b/Scripts/ultraschall_ultraclock.lua new file mode 100644 index 0000000..21cc903 --- /dev/null +++ b/Scripts/ultraschall_ultraclock.lua @@ -0,0 +1,254 @@ +--[[ +################################################################################ +# +# Copyright (c) 2014-2017 Ultraschall (http://ultraschall.fm) +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +# THE SOFTWARE. +# +################################################################################ +]] + +local info = debug.getinfo(1,'S'); +script_path = info.source:match[[^@?(.*[\/])[^\/]-$]] +dofile(script_path .. "ultraschall_helper_functions.lua") + +--Ultraschall ultraclock alpha 0.9 + +function copy(obj, seen) --copy an array + if type(obj) ~= 'table' then return obj end + if seen and seen[obj] then return seen[obj] end + local s = seen or {} + local res = setmetatable({}, getmetatable(obj)) + s[obj] = res + for k, v in pairs(obj) do res[copy(k, s)] = copy(v, s) end + return res +end + +function Init() + width,height=400,300 + refresh= 0.5 --in seconds + + --STD Settings + txt_line={} for i=1,4 do txt_line[i]={} end -- create 2d array for 4 lines of text + txt_line[1]={y=0.1 , size=1.0} + txt_line[2]={y=0.0, size=0.3} + txt_line[3]={y=0.51, size=0.3} + txt_line[4]={y=0.62, size=1.0} + + txt_line_preset={} for i=1,7 do txt_line_preset[i]=copy(txt_line) end --copy STD Setting to all presets + + --edit needed settings in presets + txt_line_preset[1][1].y=-100000 --only RTC, center + + txt_line_preset[2][3].y=0.3 --Status and TC only + txt_line_preset[2][4].y=0.41 + + txt_line_preset[4][2].y=-100000 --date only + txt_line_preset[4][2].size=0.8 + + txt_line_preset[5][1].y=-100000 --date + RTC + txt_line_preset[5][2].y=0.26 --date only + + txt_line_preset[6][2].y=0.2 --date and TC + txt_line_preset[6][3].y=0.45 + txt_line_preset[6][4].y=0.56 + txt_line_preset[6][2].size=0.8 + + --set font depending on os + if reaper.GetOS()=="OSX64" or reaper.GetOS()=="OSX32" then + clockfont="Helvetica" clockfont_bold="Helvetica Bold" + font_divisor=3.2 --window height / font_divisor = fontsize + elseif reaper.GetOS()=="Win64" or reaper.GetOS()=="Win32" then + clockfont="Arial" clockfont_bold="Arial" + font_divisor=2.8 --window height / font_divisor = fontsize + else clockfont="Arial" clockfont_bold="Arial" + end + + len, preset = ultraschall.GetUSExternalState("ultraschall_clock", "preset") + len, docked = ultraschall.GetUSExternalState("ultraschall_clock", "docked") + + if type(preset)~="string" or preset==NIL then preset=3 else preset=tonumber(preset) end + if docked=="false" then docked=false else docked=true end + + + --INIT Menu Items + uc_menu={} for i=1,6 do uc_menu[i]={} end --create 2d array for 6 menu entries +--reaper.ShowMessageBox("lalala",tostring(preset),0) + + uc_menu[1]={text="Show Realtime", checked= (preset&1==1)} + uc_menu[2]={text="Show Timecode", checked= (preset&2==2)} + uc_menu[3]={text="Show Date" , checked= (preset&4==4)} + uc_menu[4]={text="", checked=false} -- separator + uc_menu[5]={text="Dock Ultraclock window to Docker", checked=docked} + uc_menu[6]={text="Close Window",checked=false} +end + +function InitGFX() + gfx.clear=0x333333 --background color + gfx.init("Ultraclock",width,height,false) --create window + if docked then d=1 else d=0 end + gfx.dock( d + 256*4) -- dock it do docker 4 (&1=docked) + gfx.update() + reaper.SetCursorContext(1) -- Set Cursor context to the arrange window, so keystrokes work +end + +function showmenu() + local menu_string="" + local i=1 + for i=1,#uc_menu do + if uc_menu[i].checked==true then menu_string=menu_string.."!" end + menu_string=menu_string..uc_menu[i].text.."|" + end + + gfx.x, gfx.y= gfx.mouse_x, gfx.mouse_y + local ret=gfx.showmenu(menu_string) + local ret2=ret + + if ret>0 then -- a line was clicked + if ret>3 then ret2=ret+1 end -- seperator does not have an id ... + if uc_menu[ret2].checked~=NIL then + uc_menu[ret2].checked=not uc_menu[ret2].checked + preset=0 + for i=1,3 do + if uc_menu[i].checked then preset=preset+2^(i-1) -- build preset from menu + end + end + end + end + + return ret +end + +function WriteCenteredText(text, color, font, size, y) -- if y<0 then center horizontaly + gfx.r=(color & 0xff0000) / 0xffffff + gfx.g=(color & 0x00ff00) / 0xffff + gfx.b=(color & 0x0000ff) / 0xff + gfx.setfont(1, font, size) + local w, h=gfx.measurestr(text) + if y<0 then y=(gfx.h-h)/2 end -- center if y<0 + gfx.x=(gfx.w-w)/2 + gfx.y=y + gfx.drawstr(text) +end + +function get_position() + playstate=reaper.GetPlayState() --0 stop, 1 play, 2 pause, 4 rec possible to combine bits + if playstate & 1==1 then return reaper.GetPlayPosition() + else return reaper.GetCursorPosition() end +end + +function drawClock() + if uc_menu[2].checked then -- get Timecode/Status + playstate=reaper.GetPlayState() + if reaper.GetSetRepeat(-1)==1 then repeat_txt=" (REPEAT)" else repeat_txt="" end + if playstate == 1 then + if repeat_txt~="" then txt_color=0x15729d else txt_color=0x2092c7 end + status="PLAY"..repeat_txt --play + elseif playstate == 5 then txt_color=0xf24949 status="REC" --record + elseif playstate == 2 then + if repeat_txt~="" then txt_color=0xa86010 else txt_color=0xd17814 end + status="PAUSE"..repeat_txt --play/pause + elseif playstate == 6 then txt_color=0xff6b4d status="REC/PAUSE" --record/pause + elseif playstate == 0 then txt_color=0xb3b3b3 status="STOP" --record/pause + else txt_color=0xb3b3b3 status="" + end + pos=get_position()//1 + pos=string.format("%02d:%02d:%02d",pos//3600,(pos %3600) // 60,pos % 60) + end + + + -- calculate fontsize and textpositions depending on aspect ratio of window + if gfx.w/gfx.h < 4/3 then -- if narrower than 4:3 add empty space on top and bottom + fsize=gfx.w/4*3/font_divisor + border=(gfx.h-gfx.w/4*3)/2 + height=gfx.w/4*3 + else + fsize=gfx.h/font_divisor + border=0 + height=gfx.h + end + + preset=0 + for i=1,3 do if uc_menu[i].checked then preset=preset+2^(i-1) end end + + if preset==0 then + WriteCenteredText("all displays are turned off :-(",0xbbbbbb, clockfont_bold, fsize/4,-1) + end + + txt_line=copy(txt_line_preset[preset]) + + --write text + if uc_menu[1].checked then + WriteCenteredText(os.date("%H:%M:%S"),0xb3b3b3, clockfont_bold, txt_line[1].size * fsize,txt_line[1].y*height+border) -- print realtime hh:mm:ss + end + + if uc_menu[3].checked then + WriteCenteredText(os.date("%d.%m.%Y"),0xb3b3b3, clockfont_bold, txt_line[2].size * fsize ,txt_line[2].y*height+border) -- print date + end + + if uc_menu[2].checked then + WriteCenteredText(status,txt_color, clockfont_bold, txt_line[3].size * fsize ,txt_line[3].y*height+border) -- print Status (Pause/Play...) + WriteCenteredText(pos, txt_color, clockfont_bold, txt_line[4].size * fsize,txt_line[4].y*height+border) --print timecode in h:mm:ss format + end + + gfx.update() + lasttime=reaper.time_precise() +end + + +function MainLoop() + if reaper.time_precise() > lasttime+refresh or gfx.w~=lastw or gfx.h~=lasth then drawClock() end + + if gfx.mouse_cap & 2 ==2 then --right mousecklick + local ret=showmenu() + if ret==4 then -- dock/undock + dock_state=gfx.dock(-1) + if dock_state & 1 == 1 then gfx.dock(dock_state -1) else gfx.dock(dock_state+1) end + elseif ret==5 then exit_clock() + end + + if gfx.dock(-1)&1==1 then is_docked="true" else is_docked="false" end + ultraschall.SetUSExternalState("ultraschall_clock", "preset", preset) --save state preset + ultraschall.SetUSExternalState("ultraschall_clock", "docked", is_docked) --save state docked + + reaper.SetCursorContext(1) -- Set Cursor context to the arrange window, so keystrokes work + end + + count, view = ultraschall.GetUSExternalState("ultraschall_gui", "view") -- get the actual view + + --loop if GUI is NOT closed and VIEW is Recording + if gfx.getchar() ~= -1 and (view=="record" or gfx.dock(-1)&1==0) then + lastw, lasth=gfx.w, gfx.h + gfx.update() + reaper.defer(MainLoop) + end +end + +function exit_clock() + -- if gfx.dock(-1)&1==1 then is_docked="true" else is_docked="false" end + -- ultraschall.SetUSExternalState("ultraschall_clock", "preset", preset) --save state preset + -- ultraschall.SetUSExternalState("ultraschall_clock", "docked", is_docked) --save state docked + gfx.quit() +end + +reaper.atexit(exit_clock) +Init() +InitGFX() +lasttime=reaper.time_precise()-1 +reaper.defer(MainLoop) diff --git a/Scripts/ultraschall_unmute_selected_items_in_time_range.lua b/Scripts/ultraschall_unmute_selected_items_in_time_range.lua new file mode 100644 index 0000000..6171bb6 --- /dev/null +++ b/Scripts/ultraschall_unmute_selected_items_in_time_range.lua @@ -0,0 +1,113 @@ +--[[ +################################################################################ +# +# Copyright (c) 2014-2017 Ultraschall (http://ultraschall.fm) +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +# THE SOFTWARE. +# +################################################################################ +]] + + +local info = debug.getinfo(1,'S'); +script_path = info.source:match[[^@?(.*[\/])[^\/]-$]] +dofile(script_path .. "ultraschall_helper_functions.lua") + +-- Ultraschall unmute time selection +-- +-- add envelope points to mute envelope in time range +-- if items are selected only unmute them +-- if no items are selected unmute items on selected tracks +-- if no items nor tracks are selected unmute all items in time range + +reaper.Undo_BeginBlock() + +-- get info about the number of selected things +number_of_selected_items=reaper.CountSelectedMediaItems(0) +number_of_items=reaper.CountMediaItems(0) +number_of_selected_tracks=reaper.CountSelectedTracks(0) + +--get range start and end +time_selection_start, time_selection_end = reaper.GetSet_LoopTimeRange2(0, false, false, 0, 0, false) + +--if there is a selection mute stuff +if time_selection_end-time_selection_start>0 then + if number_of_selected_items>0 then + number_of_items=number_of_selected_items + end + + for item_id=0, number_of_items-1 do + if number_of_selected_items>0 then + item=reaper.GetSelectedMediaItem(0, item_id) + else + item=reaper.GetMediaItem(0, item_id) + end + + track_of_item=reaper.GetMediaItemTrack(item) + item_start=reaper.GetMediaItemInfo_Value(item, "D_POSITION") + item_end=item_start + reaper.GetMediaItemInfo_Value(item, "D_LENGTH") + + if number_of_selected_tracks>0 then + retval, flagsOut= reaper.GetTrackState(track_of_item) + ignore_item=flagsOut&2~=2 + else + ignore_item=false + end + + -- if item is (partial) in range set envelope points + make envelope visible + if (item_starttime_selection_start) and (not ignore_item) then + -- show mute envelope + MuteTrackEnvelope=reaper.GetTrackEnvelopeByName(track_of_item, "Mute") + + --activate if needed + if MuteTrackEnvelope==NIL then + reaper.SetTrackSelected(track_of_item, true) + reaper.Main_OnCommand(40866,0) + reaper.SetTrackSelected(track_of_item, false) + MuteTrackEnvelope=reaper.GetTrackEnvelopeByName(track_of_item, "Mute") + end + + retval, Env_XML= reaper.GetEnvelopeStateChunk(MuteTrackEnvelope, "", false) + Env_XML = Env_XML:gsub("VIS 0 1 1", "VIS 1 1 1") + reaper.SetEnvelopeStateChunk(MuteTrackEnvelope, Env_XML, false) + + -- get start, end and old value at the end + mute_start=math.max(time_selection_start, item_start) + mute_end=math.min(time_selection_end, item_end) + ret,value_at_out_point=reaper.Envelope_Evaluate(MuteTrackEnvelope, mute_end, 0, 0) + if mute_end==item_end then value_at_out_point=1 end + + -- delete points between in/out and set new ones + reaper.DeleteEnvelopePointRange(MuteTrackEnvelope, mute_start, mute_end) + reaper.InsertEnvelopePoint(MuteTrackEnvelope, mute_start, 1, 1, 0, false, false) + + if value_at_out_point<1 then + reaper.InsertEnvelopePoint(MuteTrackEnvelope, mute_end-1e-09, 1, 1, 0, false, false) + end + + reaper.InsertEnvelopePoint(MuteTrackEnvelope, mute_end , value_at_out_point, 1, 0, false, false) + + --sort points (do we need it?) + reaper.Envelope_SortPoints(MuteTrackEnvelope) + end + end +end +runcommand("_Ultraschall_Unselect_All") + +reaper.Undo_EndBlock("Ultraschall: unmute (selected) Items in all (selected) tracks in time selection", 0) diff --git a/Scripts/ultraschall_zoom_out_limiter.lua b/Scripts/ultraschall_zoom_out_limiter.lua new file mode 100644 index 0000000..030c213 --- /dev/null +++ b/Scripts/ultraschall_zoom_out_limiter.lua @@ -0,0 +1,68 @@ +--[[ +################################################################################ +# +# Copyright (c) 2014-2018 Ultraschall (http://ultraschall.fm) +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# s +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +# THE SOFTWARE. +# +################################################################################ +]] + +-- Print Message to console (debugging) +function Msg(val) + reaper.ShowConsoleMsg(tostring(val).."\n") +end + +-- Adjusts zoom stepwise. +-- Will limit the zoom out from 0 to projectlengt+edit/play-cursor, depending on what is the last. + + steplength = 0.4 -- factor to adjust the steplength of the zoom + length=0 + + --get end of project or position of play/editcursor in the project, depending on what is the last + if reaper.GetPlayState()~=0 and reaper.GetPlayState()&4==4 and reaper.GetProjectLength()reaper.GetCursorPosition() then + length=reaper.GetPlayPosition() + elseif reaper.GetProjectLength()length then + -- reaper.Main_OnCommand(40295,0) + reaper.SetExtState("ultraschall_follow", "started", "started", false) + else + reaper.adjustZoom(val, 0, false, -1) + start_time, end_time = reaper.GetSet_ArrangeView2(0, false, 0, 0) + + if val < 0 and end_time-start_time>=length then + -- reaper.Main_OnCommand(40295,0) + reaper.SetExtState("ultraschall_follow", "started", "started", false) + end + end + + reaper.UpdateTimeline() + reaper.UpdateArrange() + diff --git a/Scripts/ultraschall_zoomlimiter.lua b/Scripts/ultraschall_zoomlimiter.lua new file mode 100644 index 0000000..0bc8e56 --- /dev/null +++ b/Scripts/ultraschall_zoomlimiter.lua @@ -0,0 +1,69 @@ +--[[ +################################################################################ +# +# Copyright (c) 2014-2018 Ultraschall (http://ultraschall.fm) +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# s +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +# THE SOFTWARE. +# +################################################################################ +]] + +-- Print Message to console (debugging) +function Msg(val) + reaper.ShowConsoleMsg(tostring(val).."\n") +end + +-- Adjusts zoom stepwise. +-- Will limit the zoom out from 0 to projectlengt+edit/play-cursor, depending on what is the last. + + steplength = 0.4 -- factor to adjust the steplength of the zoom + length=0 + + --get end of project or position of play/editcursor in the project, depending on what is the last + if reaper.GetPlayState()~=0 and reaper.GetPlayState()&4==4 and reaper.GetProjectLength()reaper.GetCursorPosition() then + length=reaper.GetPlayPosition() + elseif reaper.GetProjectLength()length then + -- reaper.Main_OnCommand(40295,0) + reaper.SetExtState("ultraschall_follow", "started", "started", false) + else + reaper.adjustZoom(val, 0, false, -1) + start_time, end_time = reaper.GetSet_ArrangeView2(0, false, 0, 0) + + if val < 0 and end_time-start_time>=length then + -- reaper.Main_OnCommand(40295,0) + reaper.SetExtState("ultraschall_follow", "started", "started", false) + end + end + + reaper.UpdateTimeline() + reaper.UpdateArrange() + diff --git a/Scripts/us.png b/Scripts/us.png new file mode 100644 index 0000000..c1c1d2e Binary files /dev/null and b/Scripts/us.png differ diff --git a/Scripts/us_col1.png b/Scripts/us_col1.png new file mode 100644 index 0000000..f52d64c Binary files /dev/null and b/Scripts/us_col1.png differ diff --git a/Scripts/us_col2.png b/Scripts/us_col2.png new file mode 100644 index 0000000..92de16e Binary files /dev/null and b/Scripts/us_col2.png differ diff --git a/TrackTemplates/Insert StudioLink track.RTrackTemplate b/TrackTemplates/Insert StudioLink track.RTrackTemplate new file mode 100644 index 0000000..8b738c2 --- /dev/null +++ b/TrackTemplates/Insert StudioLink track.RTrackTemplate @@ -0,0 +1,43 @@ + + FLOATPOS 0 0 0 0 + FXID {F2F38A02-FEDE-C440-A8F6-00B2CDFEE6BC} + WAK 0 + > +> diff --git a/TrackTemplates/Insert Ultraschall-Soundboard track.RTrackTemplate b/TrackTemplates/Insert Ultraschall-Soundboard track.RTrackTemplate new file mode 100644 index 0000000..f424132 --- /dev/null +++ b/TrackTemplates/Insert Ultraschall-Soundboard track.RTrackTemplate @@ -0,0 +1,53 @@ + + FLOATPOS 0 0 0 0 + FXID {1E89980F-825B-3C45-8C42-F2C2A30AD326} + WAK 0 + BYPASS 0 0 0 + + PRESETNAME "Ultraschall - Ducking" + FLOATPOS 0 0 0 0 + FXID {1D6A0E66-A156-9C44-86EA-B1E56158F264} + WAK 0 + > +> diff --git a/TrackTemplates/Ultraschall Colors.SWSColor b/TrackTemplates/Ultraschall Colors.SWSColor new file mode 100644 index 0000000..4b43f05 --- /dev/null +++ b/TrackTemplates/Ultraschall Colors.SWSColor @@ -0,0 +1,20 @@ +[SWS Color] +custcolor1=16512 +custcolor10=16777215 +custcolor11=16777215 +custcolor12=16777215 +custcolor13=16777215 +custcolor14=16777215 +custcolor15=16777215 +custcolor16=16777215 +custcolor2=32832 +custcolor3=9991227 +custcolor4=2171169 +custcolor5=16777215 +custcolor6=16777215 +custcolor7=16777215 +custcolor8=16777215 +custcolor9=16777215 +gradientEnd=6711039 +gradientStart=33023 + diff --git a/Ultraschall-Inspector.ini b/Ultraschall-Inspector.ini new file mode 100644 index 0000000..f10b31f --- /dev/null +++ b/Ultraschall-Inspector.ini @@ -0,0 +1,190 @@ +[collection0] +Name=All Ultraschall-States +numentries=52 +entry1_1=toggle +entry1_2=_Ultraschall_Toggle_Follow +entry2_1=toggle +entry2_2=40036 +entry3_1=toggle +entry3_2=40262 +entry4_1=toggle +entry4_2=41817 +entry5_1=toggle +entry5_2=_Ultraschall_OnAir +entry6_1=toggle +entry6_2=_Ultraschall_Toggle_Mouse_Selection +entry7_1=toggle +entry7_2=_Ultraschall__Startup +entry8_1=toggle +entry8_2=_Ultraschall_Set_View_Setup +entry9_1=toggle +entry9_2=_Ultraschall_Set_View_Record +entry10_1=toggle +entry10_2=_Ultraschall_Set_View_Edit +entry11_1=toggle +entry11_2=_Ultraschall_Set_View_Story +entry12_1=toggle +entry12_2=_Ultraschall_Snapshot_1 +entry13_1=toggle +entry13_2=_Ultraschall_Snapshot_2 +entry14_1=toggle +entry14_2=_Ultraschall_Snapshot_3 +entry15_1=toggle +entry15_2=_Ultraschall_Snapshot_4 +entry16_1=toggle +entry16_2=_Ultraschall_Mute_Envelope +entry17_1=extstate +entry17_2=ultraschall_bom +entry17_3=item_1 +entry18_1=extstate +entry18_2=ultraschall_bom +entry18_3=item_2 +entry19_1=extstate +entry19_2=ultraschall_bom +entry19_3=item_3 +entry20_1=extstate +entry20_2=ultraschall_bom +entry20_3=item_4 +entry21_1=extstate +entry21_2=ultraschall_bom +entry21_3=item_5 +entry22_1=extstate +entry22_2=ultraschall_bom +entry22_3=item_6 +entry23_1=extstate +entry23_2=ultraschall_bom +entry23_3=item_7 +entry24_1=extstate +entry24_2=ultraschall_bom +entry24_3=item_8 +entry25_1=extstate +entry25_2=ultraschall_bom +entry25_3=found_items +entry26_1=extstate +entry26_2=ultraschall_update +entry26_3=last_update_check +entry27_1=extstate +entry27_2=ultraschall_update +entry27_3=update_check +entry28_1=extstate +entry28_2=ultraschall_versions +entry28_3=plugin +entry29_1=extstate +entry29_2=ultraschall_versions +entry29_3=theme +entry30_1=extstate +entry30_2=follow +entry30_3=skip +entry31_1=extstate +entry31_2=ultraschall_follow +entry31_3=started +entry32_1=extstate +entry32_2=Ultraschall_Windows +entry32_3=Ultraschall 3 +entry33_1=extstate +entry33_2=Ultraschall_Windows +entry33_3=Ultraschall Color Picker +entry34_1=extstate +entry34_2=Ultraschall_Windows +entry34_3=Ultraschall Export Assistant +entry35_1=extstate +entry35_2=Ultraschall_Windows +entry35_3=Ultraschall Routing Snapshots +entry36_1=extstate +entry36_2=follow +entry36_3=recognized +entry37_1=usextstate +entry37_2=ultraschall_clock +entry37_3=docked +entry38_1=usextstate +entry38_2=ultraschall_clock +entry38_3=preset +entry39_1=usextstate +entry39_2=ultraschall_envelope +entry39_3=EnvelopeMaxHeight +entry40_1=usextstate +entry40_2=ultraschall_envelope +entry40_3=EnvelopeMinHeight +entry41_1=usextstate +entry41_2=ultraschall_envelope +entry41_3=EnvelopeToggleState +entry42_1=usextstate +entry42_2=ultraschall_follow +entry42_3=state +entry43_1=usextstate +entry43_2=ultraschall_gui +entry43_3=sec +entry44_1=usextstate +entry44_2=ultraschall_gui +entry44_3=view +entry45_1=usextstate +entry45_2=ultraschall_gui +entry45_3=views +entry46_1=usextstate +entry46_2=ultraschall_mouse +entry46_3=state +entry47_1=usextstate +entry47_2=ultraschall_start +entry47_3=firststart +entry48_1=usextstate +entry48_2=ultraschall_start +entry48_3=startscreen +entry49_1=usextstate +entry49_2=Ultraschall_Transport +entry49_3=Safemode_Toggle +entry50_1=usextstate +entry50_2=view +entry50_3=old_zoomfactor +entry1_0=false +entry2_0=false +entry3_0=false +entry4_0=false +entry5_0=false +entry6_0=false +entry7_0=false +entry8_0=false +entry9_0=false +entry10_0=false +entry11_0=false +entry12_0=false +entry13_0=false +entry14_0=false +entry15_0=false +entry16_0=false +entry51_1=usextstate +entry51_2=view +entry51_3=zoom_toggle_state +entry52_1=usextstate +entry52_2=view +entry52_3=zoomin_level +[collection1] +Name=Followmode +numentries=10 +entry1_0=false +entry1_1=toggle +entry1_2=_Ultraschall_Toggle_Follow +entry2_0=false +entry2_1=toggle +entry2_2=40036 +entry3_0=false +entry3_1=toggle +entry3_2=40262 +entry4_0=false +entry4_1=toggle +entry4_2=41817 +entry5_1=extstate +entry5_2=follow +entry5_3=skip +entry6_1=extstate +entry6_2=ultraschall_follow +entry6_3=started +entry7_1=extstate +entry7_2=follow +entry7_3=recognized +entry8_1=usextstate +entry8_2=ultraschall_follow +entry8_3=state +entry9_1=hzoom +entry10_1=extstate +entry10_2=follow +entry10_3=oneclick diff --git a/UserPlugins/Soundboard.component/Contents/Info.plist b/UserPlugins/Soundboard.component/Contents/Info.plist new file mode 100644 index 0000000..0244d50 --- /dev/null +++ b/UserPlugins/Soundboard.component/Contents/Info.plist @@ -0,0 +1,65 @@ + + + + + AudioComponents + + + description + Ultraschall Soundboard + factoryFunction + SoundboardAUFactory + manufacturer + Ultr + name + Ultraschall: Soundboard + subtype + Soub + type + aumu + version + 196864 + + + BuildMachineOSBuild + 17D34a + CFBundleDisplayName + Plugin + CFBundleExecutable + Soundboard + CFBundleIdentifier + fm.ultraschall.Soundboard + CFBundleName + Plugin + CFBundlePackageType + BNDL + CFBundleShortVersionString + 3.1.0 + CFBundleSignature + ???? + CFBundleSupportedPlatforms + + MacOSX + + CFBundleVersion + 3.1.0 + DTCompiler + com.apple.compilers.llvm.clang.1_0 + DTPlatformBuild + 9C40b + DTPlatformVersion + GM + DTSDKBuild + 17C76 + DTSDKName + macosx10.13 + DTXcode + 0920 + DTXcodeBuild + 9C40b + NSHighResolutionCapable + + NSHumanReadableCopyright + Ultraschall + + diff --git a/UserPlugins/Soundboard.component/Contents/MacOS/Soundboard b/UserPlugins/Soundboard.component/Contents/MacOS/Soundboard new file mode 100755 index 0000000..8b2935b Binary files /dev/null and b/UserPlugins/Soundboard.component/Contents/MacOS/Soundboard differ diff --git a/UserPlugins/Soundboard.component/Contents/PkgInfo b/UserPlugins/Soundboard.component/Contents/PkgInfo new file mode 100644 index 0000000..19a9cf6 --- /dev/null +++ b/UserPlugins/Soundboard.component/Contents/PkgInfo @@ -0,0 +1 @@ +BNDL???? \ No newline at end of file diff --git a/UserPlugins/Soundboard.component/Contents/Resources/RecentFilesMenuTemplate.nib b/UserPlugins/Soundboard.component/Contents/Resources/RecentFilesMenuTemplate.nib new file mode 100644 index 0000000..cec7f7c Binary files /dev/null and b/UserPlugins/Soundboard.component/Contents/Resources/RecentFilesMenuTemplate.nib differ diff --git a/UserPlugins/Soundboard.component/Contents/Resources/Soundboard.rsrc b/UserPlugins/Soundboard.component/Contents/Resources/Soundboard.rsrc new file mode 100644 index 0000000..3ac6ad6 Binary files /dev/null and b/UserPlugins/Soundboard.component/Contents/Resources/Soundboard.rsrc differ diff --git a/UserPlugins/StudioLink.component/Contents/Info.plist b/UserPlugins/StudioLink.component/Contents/Info.plist new file mode 100644 index 0000000..c5fddda --- /dev/null +++ b/UserPlugins/StudioLink.component/Contents/Info.plist @@ -0,0 +1,61 @@ + + + + + AudioComponents + + + description + StudioLink + factoryFunction + StudioLinkAUFactory + manufacturer + ITSR + name + ITSR: StudioLink + subtype + Ypss + type + aufx + version + 1114881 + + + BuildMachineOSBuild + 14F1808 + CFBundleDisplayName + StudioLink + CFBundleExecutable + StudioLink + CFBundleIdentifier + com.itsr.StudioLink + CFBundleName + StudioLink + CFBundlePackageType + BNDL + CFBundleShortVersionString + 17.03.1 + CFBundleSignature + ???? + CFBundleVersion + 17.03.1 + DTCompiler + com.apple.compilers.llvm.clang.1_0 + DTPlatformBuild + 6E35b + DTPlatformVersion + GM + DTSDKBuild + 14D125 + DTSDKName + macosx10.10 + DTXcode + 0640 + DTXcodeBuild + 6E35b + NSHighResolutionCapable + + NSHumanReadableCopyright + IT-Service Sebastian Reimers + + diff --git a/UserPlugins/StudioLink.component/Contents/MacOS/StudioLink b/UserPlugins/StudioLink.component/Contents/MacOS/StudioLink new file mode 100755 index 0000000..7dc687c Binary files /dev/null and b/UserPlugins/StudioLink.component/Contents/MacOS/StudioLink differ diff --git a/UserPlugins/StudioLink.component/Contents/PkgInfo b/UserPlugins/StudioLink.component/Contents/PkgInfo new file mode 100644 index 0000000..19a9cf6 --- /dev/null +++ b/UserPlugins/StudioLink.component/Contents/PkgInfo @@ -0,0 +1 @@ +BNDL???? \ No newline at end of file diff --git a/UserPlugins/StudioLink.component/Contents/Resources/RecentFilesMenuTemplate.nib b/UserPlugins/StudioLink.component/Contents/Resources/RecentFilesMenuTemplate.nib new file mode 100644 index 0000000..cec7f7c Binary files /dev/null and b/UserPlugins/StudioLink.component/Contents/Resources/RecentFilesMenuTemplate.nib differ diff --git a/UserPlugins/StudioLink.component/Contents/Resources/StudioLink.rsrc b/UserPlugins/StudioLink.component/Contents/Resources/StudioLink.rsrc new file mode 100644 index 0000000..5c9a23c Binary files /dev/null and b/UserPlugins/StudioLink.component/Contents/Resources/StudioLink.rsrc differ diff --git a/UserPlugins/StudioLinkOnAir.component/Contents/Info.plist b/UserPlugins/StudioLinkOnAir.component/Contents/Info.plist new file mode 100644 index 0000000..2799fb5 --- /dev/null +++ b/UserPlugins/StudioLinkOnAir.component/Contents/Info.plist @@ -0,0 +1,61 @@ + + + + + AudioComponents + + + description + StudioLinkOnAir + factoryFunction + StudioLinkOnAirAUFactory + manufacturer + ITSR + name + StudioLinkOnAir (ITSR) + subtype + Eq2z + type + aufx + version + 1114881 + + + BuildMachineOSBuild + 14F1808 + CFBundleDisplayName + StudioLinkOnAir + CFBundleExecutable + StudioLinkOnAir + CFBundleIdentifier + com.itsr.StudioLinkOnAir + CFBundleName + StudioLinkOnAir + CFBundlePackageType + BNDL + CFBundleShortVersionString + 17.03.1 + CFBundleSignature + ???? + CFBundleVersion + 17.03.1 + DTCompiler + com.apple.compilers.llvm.clang.1_0 + DTPlatformBuild + 6E35b + DTPlatformVersion + GM + DTSDKBuild + 14D125 + DTSDKName + macosx10.10 + DTXcode + 0640 + DTXcodeBuild + 6E35b + NSHighResolutionCapable + + NSHumanReadableCopyright + + + diff --git a/UserPlugins/StudioLinkOnAir.component/Contents/MacOS/StudioLinkOnAir b/UserPlugins/StudioLinkOnAir.component/Contents/MacOS/StudioLinkOnAir new file mode 100755 index 0000000..5298810 Binary files /dev/null and b/UserPlugins/StudioLinkOnAir.component/Contents/MacOS/StudioLinkOnAir differ diff --git a/UserPlugins/StudioLinkOnAir.component/Contents/PkgInfo b/UserPlugins/StudioLinkOnAir.component/Contents/PkgInfo new file mode 100644 index 0000000..19a9cf6 --- /dev/null +++ b/UserPlugins/StudioLinkOnAir.component/Contents/PkgInfo @@ -0,0 +1 @@ +BNDL???? \ No newline at end of file diff --git a/UserPlugins/StudioLinkOnAir.component/Contents/Resources/RecentFilesMenuTemplate.nib b/UserPlugins/StudioLinkOnAir.component/Contents/Resources/RecentFilesMenuTemplate.nib new file mode 100644 index 0000000..cec7f7c Binary files /dev/null and b/UserPlugins/StudioLinkOnAir.component/Contents/Resources/RecentFilesMenuTemplate.nib differ diff --git a/UserPlugins/StudioLinkOnAir.component/Contents/Resources/StudioLinkOnAir.rsrc b/UserPlugins/StudioLinkOnAir.component/Contents/Resources/StudioLinkOnAir.rsrc new file mode 100644 index 0000000..49d15fa Binary files /dev/null and b/UserPlugins/StudioLinkOnAir.component/Contents/Resources/StudioLinkOnAir.rsrc differ diff --git a/UserPlugins/reaper_sws_extension.dylib b/UserPlugins/reaper_sws_extension.dylib new file mode 100755 index 0000000..928385c Binary files /dev/null and b/UserPlugins/reaper_sws_extension.dylib differ diff --git a/UserPlugins/reaper_ultraschall.dylib b/UserPlugins/reaper_ultraschall.dylib new file mode 100755 index 0000000..d549b5c Binary files /dev/null and b/UserPlugins/reaper_ultraschall.dylib differ diff --git a/Xenakios_Commands.ini b/Xenakios_Commands.ini new file mode 100644 index 0000000..1f9bd4e --- /dev/null +++ b/Xenakios_Commands.ini @@ -0,0 +1,26 @@ +[XENAKIOSCOMMANDS] +CURPOSSECSAMOUNT=2.000000 +EDITCURRNDMEAN=1.000000 +FADEINSHAPEA=0 +FADEINSHAPEB=0 +FADEINTIMEA=0.001000 +FADEINTIMEB=0.001000 +FADEOUTSHAPEA=0 +FADEOUTSHAPEB=0 +FADEOUTTIMEA=0.001000 +FADEOUTTIMEB=0.001000 +ITEMPITCHNUDGE=1.000000 +ITEMPITCHNUDGEB=1.000000 +ITEMPOSNUDGEBEATS=1.000000 +ITEMPOSNUDGESECS=1.000000 +ITEMVOLUMENUDGE=1.000000 +PIXELAMOUNT=12 +RNDITEMSELPROB=50.000000 +SECTLOOPNUDGESECS=0.100000 +TRACKHEIGHTA=60 +TRACKHEIGHTB=20 +TRACKLABELDEFAULT=Audio +TRACKLABELPREFIX= +TRACKLABELSUFFIX= +TRACKVOLNUDGEDB=1.000000 + diff --git a/mouse.ini b/mouse.ini new file mode 100644 index 0000000..2dabfa3 --- /dev/null +++ b/mouse.ini @@ -0,0 +1,9 @@ +Die folgenden Einträge ersetzen... + + +[MM_CTX_ITEM_DBLCLK] +mm_0=_Ultraschall_Play_From_Mousecursor_Position + +[MM_CTX_RULER_DBLCLK] +mm_0=_Ultraschall_Play_From_Mousecursor_Position + diff --git a/presets/au-Apple: AUDynamicsProcessor.ini b/presets/au-Apple: AUDynamicsProcessor.ini new file mode 100644 index 0000000..bb3d603 --- /dev/null +++ b/presets/au-Apple: AUDynamicsProcessor.ini @@ -0,0 +1,13 @@ +[General] +NbPresets=2 + +[Preset0] +Data=E90300000000000002000000010000000000000002000000000000000200000001000000000000000200000000000000840200003C3F786D6C2076657273696F6E3D22312E302220656E636F64696E673D225554462D38223F3E0A3C21444F435459504520706C697374205055424C494320222D2F2F4170706C652F2F44544420504C49535420312E302F2F454E222022687474703A2F2F7777772E6170706C652E636F6D2F445444732F50726F70657274794C6973742D312E302E647464223E0A3C706C6973742076657273696F6E3D22312E30223E0A3C646963743E0A093C6B65793E5468726573686F6C644F4B3C2F6B65793E0A093C696E74656765723E313C2F696E74656765723E0A093C6B65793E646174613C2F6B65793E0A093C646174613E0A094141414141414141414141414141414B41414141414D45442B63414141414142516941414141414141414A41434D75484141414141384A417077594141414145505058430A096A7741414141553839634B504141414142674141414141414141506F414141414141414142394443384141414141414C754D4C774141413D0A093C2F646174613E0A093C6B65793E6D616E7566616374757265723C2F6B65793E0A093C696E74656765723E313633343735383736343C2F696E74656765723E0A093C6B65793E6E616D653C2F6B65793E0A093C737472696E673E4661737420616E6420536D6F6F74683C2F737472696E673E0A093C6B65793E737562747970653C2F6B65793E0A093C696E74656765723E313638343233373638303C2F696E74656765723E0A093C6B65793E747970653C2F6B65793E0A093C696E74656765723E313633353038333839363C2F696E74656765723E0A093C6B65793E76657273696F6E3C2F6B65793E0A093C696E74656765723E303C2F696E74656765723E0A3C2F646963743E0A3C2F706C6973743E0A0A00000057696B696765656B7300400000000012 +Len=715 +Name=Wikigeeks + +[Preset1] +Data=E90300000000000002000000010000000000000002000000000000000200000001000000000000000200000000000000840200003C3F786D6C2076657273696F6E3D22312E302220656E636F64696E673D225554462D38223F3E0A3C21444F435459504520706C697374205055424C494320222D2F2F4170706C652F2F44544420504C49535420312E302F2F454E222022687474703A2F2F7777772E6170706C652E636F6D2F445444732F50726F70657274794C6973742D312E302E647464223E0A3C706C6973742076657273696F6E3D22312E30223E0A3C646963743E0A093C6B65793E5468726573686F6C644F4B3C2F6B65793E0A093C696E74656765723E313C2F696E74656765723E0A093C6B65793E646174613C2F6B65793E0A093C646174613E0A094141414141414141414141414141414B41414141414D4836484E674141414142516941414141414141414A41434D75484141414141384A417077594141414145505058430A096A7741414141553839634B504141414142674141414141414141506F414141414141414142394443384141414141414C754D4C774141413D0A093C2F646174613E0A093C6B65793E6D616E7566616374757265723C2F6B65793E0A093C696E74656765723E313633343735383736343C2F696E74656765723E0A093C6B65793E6E616D653C2F6B65793E0A093C737472696E673E4661737420616E6420536D6F6F74683C2F737472696E673E0A093C6B65793E737562747970653C2F6B65793E0A093C696E74656765723E313638343233373638303C2F696E74656765723E0A093C6B65793E747970653C2F6B65793E0A093C696E74656765723E313633353038333839363C2F696E74656765723E0A093C6B65793E76657273696F6E3C2F6B65793E0A093C696E74656765723E303C2F696E74656765723E0A3C2F646963743E0A3C2F706C6973743E0A0C000000556C747261736368616C6C000000000000D3 +Len=717 +Name=Ultraschall + diff --git a/presets/au-Ultraschall: Soundboard.ini b/presets/au-Ultraschall: Soundboard.ini new file mode 100644 index 0000000..18f85e9 --- /dev/null +++ b/presets/au-Ultraschall: Soundboard.ini @@ -0,0 +1,3 @@ +[General] +NbPresets=0 + diff --git a/presets/js-dynamics_Ultraschall_Dynamics.ini b/presets/js-dynamics_Ultraschall_Dynamics.ini new file mode 100644 index 0000000..99996be --- /dev/null +++ b/presets/js-dynamics_Ultraschall_Dynamics.ini @@ -0,0 +1,18 @@ +[General] +NbPresets=3 + +[Preset0] +Data=302E30303030303020302E303030303030203138382E303030303030203130302E30303030303020352E303030303030203235302E303030303030202D202D202D20302E30303030303020302E30303030303020302E303030303030202D3135302E303030303030202D31362E303030303030202D36302E3030303030302033302E30303030303020302E323636303030202D3131322E3031343330362034382E30303030303020392E303030303030202D202D202D202D202D202D202D202D202D202D202D202D202D202D202D202D202D202D202D202D202D202D202D202D202D202D202D202D202D202D202D202D202D202D202D202D202D202D202D202D202D202D202D202D2042617369630000007A43000000008212DEBE82125EBFE18DA6BF8212DEBF91CB0AC0E18D26C0315042C082125EC0D2D479C091CB8AC0B9AC98C0E18DA6C0096FB4C03150C2C05931D0C08212DEC0AAF3EBC0D2D4F9C0FDDA03C191CB0AC125BC11C1B9AC18C14D9D1FC1E18D26C1757E2DC1096F34C19D5F3BC1315042C1C54049C1593150C1ED2157C182125EC1160365C1AAF36BC13EE472C1D2D479C1B36280C1FDDA83C1475387C191CB8AC18AE08CC10ED68BC1B4038AC162FF87C193EE85C1A4DA83C1EDC581C10A627FC120387BC12F0E77C13EE472C14BBA6EC159906AC1666666C1743C62C182125EC18FE859C19DBE55C1AA9451C1B86A4DC1C54049C1D31645C1E1EC40C1EEC23CC1FC9838C1096F34C1174530C1241B2CC132F127C140C723C14D9D1FC15B731BC1684917C1761F13C183F50EC191CB0AC19FA106C1AC7702C1739BFCC08E47F4C0AAF3EBC0C59FE3C0E04BDBC0FBF7D2C016A4CAC03150C2C04CFCB9C068A8B1C08354A9C09E00A1C0B9AC98C0D45890C0EF0488C015627FC04BBA6EC082125EC0B86A4DC0EEC23CC0241B2CC05B731BC091CB0AC08E47F4BFFBF7D2BF68A8B1BFD45890BF82125EBF5B731BBF68A8B1BE68A8B1BD4E3E853D6AF29C3C26D6DF3C1944A93D1C233E3E4971AD3E1C660B3F75374E3F95DF8F3FC339C03F7253F83F03201C40B5FC3F4056AE6740C989894016FDA0403F0FBA40C395D440D95DF0409796064180611541C66C2441DF93334188B14241BEA05141B33D6041B6666E41F4FC7B4191728441F7838A4125299041C25A95419C139A418E509E415710A2416A53A541B51BA841626CAA419C49AC415BB8AD4127BEAE41EB60AF41CFA6AF410D96AF41DB34AF414E89AE414999AD41716AAC412202AB416665A941F798A7413BA1A5414282A341CC3FA1414BDD9E41E55D9C4179C49941A7139741CB4D94410F759141628B8E4186928B41118C88416E798541E65B82413D697E4142097841B49971413C1C6B415692644158FD5D41715E5741B3B6504111074A416550434170933C41E2D0354154092F41523D2841576D2141D1991A4122C31341A2E90C419F0D0641C15EFE40459EF0403BDAE2400613D540FD48C740707CB940A5ADAB40DADC9D40470A90401D36824012C1684065134D40786331408AB11540A6FBF33F0B91BC3F9923853F43671B3F4A0B323E41CB84BEA65131BF6E2090BF7399C7BFBD13FFBF93471BC0C90537C071C452C07F836EC0742185C0510193C052E1A0C073C1AEC0B1A1BCC00882CAC07662D8C0F842E6C08D23F4C0190201C172F207C1D2E20EC137D315C1A2C31CC111B423C184A42AC1FB9431C1758538C1F1753FC1716646C1F2564DC1764754C1FB375BC1822862C10B1969C1940970C1F1A974C1F1A974C1000000000000D8C2C7 +Len=1283 +Name=Basic + +[Preset1] +Data=302E30303030303020302E303030303030203138382E303030303030203130302E30303030303020352E303030303030203235302E303030303030202D202D202D20302E30303030303020302E30303030303020302E303030303030202D3135302E303030303030202D31322E303030303030202D3130302E3030303030302038382E30303030303020302E323636303030202D3130382E3934363033392038382E3030303030302031372E303030303030202D202D202D202D202D202D202D202D202D202D202D202D202D202D202D202D202D202D202D202D202D202D202D202D202D202D202D202D202D202D202D202D202D202D202D202D202D202D202D202D202D202D202D202D20224D6178696D756D20426F6F7374220000007A430000000089DF013B89DF813B4DCFC23B89DF013C6B57223C4DCF423C3047633C89DF813C7A1B923C6B57A23C5C93B23C4DCFC23C3F0BD33C3047E33C2183F33C89DF013D82FD093D3B1AD73C691B96BD6E30ABBED40B20BFA45F69BF988597BF1805B8BFA4D7D5BFF5ABF0BF211604C0B3FD0DC0EAD915C080731BC0838E1EC036EA1EC009411CC0AE4816C04CB20CC0BF55FEBF95B7DABF46D7ADBF15FD6DBF9CD9D5BE30AB3B3E85E4603FE221D63F5D8A2440EFE16440972296409A67BD409A42E840D1540B416042244170D63E418FF55A41497C7841B19F8B412C869B4124D5AB418E6DBC417F2ECD41FFF5DD41E8A1EE41D110FF41719107424D5D0F42B9DE1642330A1E421BD62442D33A2B42B932314219BA36420DCF3B42527140421BA24442D2634842E9B94B42A1A84E42D5345142D0635342223B55427DC0564297F9574211EC58426A9D5942E6125A428F515A42255E5A421F3D5A42A6F259429682594281F05842AD3F58421D7357428F8D5642839155423F815442D15E5342182C5242C2EA5042549C4F422D424E4287DD4C427E6F4B420FF94942207B48427CF64642DB6B4542E0DB43421F4742421BAE404248113F4211713D42D2CD3B42E0273A42857F384204D5364298283542777A3342D0CA3142CD19304294672E4247B42C4203002B42E44A29420295274271DE2542442724428D6F22425AB72042BAFE1E42B7451D425D8C1B42B5D21942C81818429D5E16423BA41442A7E91242E82E114202740F42F9B80D42D1FD0B428E420A4232870842C0CB06423B100542A4540342FE98014293BAFF411343FC417CCBF841D253F54116DCF1414B64EE4172ECEA418C74E7419CFCE341A284E0419F0CDD419594D941831CD6416CA4D2414F2CCF412DB4CB41063CC841DCC3C441AE4BC1417DD3BD414A5BBA4114E3B641DC6AB341A2F2AF41667AAC412802A941EA89A541AA11A24169999E4126219B41E4A89741A03094415BB8904116408D41D1C789418B4F864144D78241FBBD7E416DCD7741DDDC70414EEC6941BEFB62412D0B5C419C1A55410B2A4E417A394741E848404156583941C467324131772B419E8624410C961D4179A51641E6B40F4153C40841BFD3014158C6F54031E5E7400A04DA40E322CC40BC41BE409460B0406D7FA240469E94401EBD8640EDB771409EF555404E333A40FF701E40AFAE0240BFD8CD3F2054963F019F3D3F832B9D3EF7CD01BEBD7C0FBFFD857EBF9EC7B6BF3E4CEEBF6FE812C0BFAA2EC00F6D4AC05F2F66C0D8F880C000DA8EC028BB9CC0509CAAC0787DB8C0A05EC6C0C83FD4C0F020E2C01802F0C040E3FDC034E205C1C8D20CC15CC313C1F0B31AC184A421C1189528C1AC852FC1407636C1D4663DC10BCB4FC1A6C36EC1000000000000D8C208 +Len=1295 +Name=Maximum Boost + +[Preset2] +Data=302E30303030303020302E303030303030203138382E303030303030203130302E30303030303020352E303030303030203235302E303030303030202D202D202D20302E30303030303020302E30303030303020302E303030303030202D3135302E303030303030202D31362E303030303030202D32302E3030303030302038382E30303030303020302E323636303030202D3131332E3230363637322031322E30303030303020312E303030303030202D202D202D202D202D202D202D202D202D202D202D202D202D202D202D202D202D202D202D202D202D202D202D202D202D202D202D202D202D202D202D202D202D202D202D202D202D202D202D202D202D202D202D202D20224A757374204C696D69746572220000007A4300000000518F37BB518FB7BB7CAB09BC518F37BC257365BC7CAB89BC679DA0BC518FB7BC3B81CEBC2573E5BC0F65FCBC7CAB09BD722415BD679D20BD5C162CBD518F37BD460843BD3B814EBD30FA59BD257365BD1AEC70BD0F657CBD02EF83BD7CAB89BDF7678FBD722495BDECE09ABD679DA0BDE159A6BD5C16ACBDD6D2B1BD518FB7BDCB4BBDBD4608C3BDC0C4C8BD3B81CEBDB53DD4BD30FAD9BDAAB6DFBD2573E5BD9F2FEBBD1AECF0BD94A8F6BD0F65FCBDC51001BE02EF03BE3FCD06BE7CAB09BEBA890CBEF7670FBE344612BE722415BEAF0218BEECE01ABE29BF1DBE679D20BEA47B23BEE15926BE1E3829BE5C162CBE99F42EBED6D231BE13B134BE518F37BE8E6D3ABECB4B3DBE082A40BE460843BE83E645BEC0C448BEFDA24BBE3B814EBE785F51BEB53D54BEF21B57BE30FA59BE6DD85CBEAAB65FBEE89462BE257365BE625168BE9F2F6BBEDD0D6EBE1AEC70BE57CA73BE94A876BED28679BE0F657CBE4C437FBEC51081BEE37F82BE02EF83BE215E85BE3FCD86BE5E3C88BE7CAB89BE9B1A8BBEBA898CBED8F88DBEF7678FBE16D790BE344692BE53B593BE722495BE909396BEAF0298BECD7199BEECE09ABE0B509CBE29BF9DBE482E9FBE679DA0BE850CA2BEA47BA3BEC2EAA4BEE159A6BE00C9A7BE1E38A9BE3DA7AABE5C16ACBE7A85ADBE99F4AEBEB763B0BED6D2B1BEF541B3BE13B1B4BE3220B6BE518FB7BE6FFEB8BE8E6DBABEADDCBBBECB4BBDBEEABABEBE082AC0BE2799C1BE4608C3BE6477C4BE83E6C5BEA255C7BEC0C4C8BEDF33CABEFDA2CBBE1C12CDBE3B81CEBE59F0CFBE785FD1BE97CED2BEB53DD4BED4ACD5BEF21BD7BE118BD8BE30FAD9BE4E69DBBE6DD8DCBE8C47DEBEAAB6DFBEC925E1BEE894E2BE0604E4BE2573E5BE43E2E6BE6251E8BE81C0E9BE9F2FEBBEBE9EECBEDD0DEEBEFB7CEFBE1AECF0BE385BF2BE57CAF3BE7639F5BE94A8F6BEB317F8BED286F9BEF0F5FABE0F65FCBE2DD4FDBE4C43FFBE355900BFC51001BF54C801BFE37F02BF733703BF02EF03BF91A604BF215E05BFB01506BF3FCD06BFCF8407BF5E3C08BFEDF308BF7CAB09BF0C630ABF9B1A0BBF2AD20BBFBA890CBF49410DBFD8F80DBF68B00EBFF7670FBF861F10BFD9E6D8BEA8DB03BE55A9FBBD0E1440BEB4388ABE8691B7BE7475E7BEAB450DBF7DDD28BFF1F346BF72EE67BF491186BF5FEA99BF029CAFBF4537C7BF46C5E0BFE647FCBF4FDD0CC0B3891CC0D6212DC09F9C3EC094EF50C03E0F64C089EF77C0074286C029E090C003CC9BC093FFA6C01075B2C0F526BEC00A10CAC0672BD6C07974E2C0FFE6EEC00E7FFBC0841C04C1CF880AC1E50211C1648917C10D1B1EC1BCB624C16A5B2BC12A0832C124BC38C198763FC1D83646C1A0C551C124A161C1000000000000D8C2B5 +Len=1292 +Name=Just Limiter + diff --git a/presets/js-dynamics_general_dynamics.ini b/presets/js-dynamics_general_dynamics.ini new file mode 100644 index 0000000..546d826 --- /dev/null +++ b/presets/js-dynamics_general_dynamics.ini @@ -0,0 +1,13 @@ +[General] +NbPresets=2 + +[Preset0] +Data=302E30303030303020302E303030303030203138382E303030303030203130302E30303030303020352E303030303030203235302E303030303030202D202D202D20302E30303030303020302E30303030303020302E303030303030202D3135302E303030303030202D202D202D202D202D202D202D202D202D202D202D202D202D202D202D202D202D202D202D202D202D202D202D202D202D202D202D202D202D202D202D202D202D202D202D202D202D202D202D202D202D202D202D202D202D202D202D202D202D202D202D20556C747261736368616C6C20503120286E6F2067617465290000007A432549B2C14303B1C161BDAFC17F77AEC19D31ADC1BBEBABC1D9A5AAC1F85FA9C14BDEA4C10230A1C17F829BC1E33195C19D828EC1A15586C12A0A7DC18D876BC181875AC1DC204BC135163DC18BCA30C1B0E524C13CC11CC17E8713C13CA30BC17E4003C13C3AF9C07AA6EBC0EB35DFC098B6D3C043CDC8C06551BEC0A81FB4C0B019AAC00C26A0C00E2D96C023298CC0643182C0983370C0FB295CC0C66B48C0AB9835C04FA723C0F9F212C0912D03C018AEE9BF0DF6D2BFBE2ABDBF2EEEABBF652FA0BFE9AD92BF7C338ABFEB7E84BFB9EE7DBF1E7B77BFB17270BFD5C368BFC4C067BFD23D67BF4A1F67BFDB0667BF0A1867BFB53C67BF7A5A67BF3D9D67BF01E067BFC42268BF876568BF4BA868BF0EEB68BFD12D69BF947069BF58B369BF1BF669BFDE386ABFA27B6ABF65BE6ABF28016BBFEB436BBFAF866BBF72C96BBF350C6CBFF84E6CBFBC916CBF7FD46CBF42176DBF065A6DBFC99C6DBF8CDF6DBF4F226EBF13656EBFD6A76EBF99EA6EBF14296FBF6C686FBFA2A56FBF75DB6FBF8E1170BF374370BFA06370BF3F6F70BF885470BF660F70BFDE8E6FBF96A86EBF05076BBFC86A67BFFBEA63BF41C760BF9F955ABFA66E4FBF483145BFC85538BFAEA02BBFBB6316BFFD9EEFBEC5A4BCBEE05F62BEE2ED25BD2748253E9077CE3EB2502F3FEB93833FAF5EAB3F4608DE3F01ED0940F2DB284018EF4A4062C16F4055DE8B40A44DA040E047B6408C62CD406EA2E54097E8FE40DD770C4103DB19410C2F2741B8B03441AD004241AE014F41249C5B419A9567416C7573413E1F8041315085412E668A419E278F419F5E9441322A9841D7DE9B41F331A041A3B1A24146B6A441D04EA641BE56A74157F8A741A505A8418141A84122B5A741ACC1A6413E72A5412DCDA341C7DAA1413AA39F4176479D41EBB19A41EBE6974125EB9441DF039241FFE28E41BFB28B41E06C8841921E85414ACB8141EBB77C41EEBB7541A4D16E418CD067413AC8604184BA59413AAB524107994B41F48544410E743D4168623641DE542F41EA4C2841744F214111711A412485134162C60C4118080641B496FE40964EF1407906E4405CBED6403E76C940212EBC4004E6AE40E69DA140C9559440AC0D87401D8B7340E2FA5840A76A3E406DDA2340324A0940EF73DD3F7953A83F0866663F3B4AF83E95218F3D70B9B0BEA39D42BF476F96BFBC8FCBBF195800C053E81AC08E7835C0C90850C003996AC09F9482C0BCDC8FC0DA249DC0F76CAAC014B5B7C032FDC4C04F45D2C06C8DDFC08AD5ECC0A71DFAC0E2B203C1F1560AC100FB10C10E9F17C11D431EC12CE724C13A8B2BC1492F32C158D338C166773FC1751B46C184BF4CC1926353C1A1075AC1B0AB60C1BE4F67C1CDF36DC1DC9774C1EA3B7BC1000000000000D8C241 +Len=1244 +Name=Ultraschall (no noisegate) + +[Preset1] +Data=302E30303030303020302E303030303030203138382E303030303030203130302E30303030303020352E303030303030203235302E303030303030202D202D202D20302E30303030303020302E30303030303020302E303030303030202D3135302E303030303030202D202D202D202D202D202D202D202D202D202D202D202D202D202D202D202D202D202D202D202D202D202D202D202D202D202D202D202D202D202D202D202D202D202D202D202D202D202D202D202D202D202D202D202D202D202D202D202D202D202D202D20556C747261736368616C6C2028736F66742067617465290000007A432549B2C14303B1C161BDAFC17F77AEC19D31ADC1BBEBABC1D9A5AAC1F85FA9C1161AA8C134D4A6C1528EA5C17048A4C18E02A3C1ACBCA1C1CB76A0C1E9309FC107EB9DC125A59CC1435F9BC161199AC17FD398C19D8D97C1BC4796C1DA0195C1F8BB93C1167692C1343091C152EA8FC170A48EC18F5E8DC1AD188CC1CBD28AC1E98C89C1074788C1250187C143BB85C1627584C1802F83C19EE981C1BCA380C1B614DDC1841BDBC15222D9C11F29D7C1ED2FD5C1BB36D3C1893DD1C15744CFC1254BCDC1F351CBC1C158C9C18F5FC7C15D66C5C12B6DC3C1F973C1C1C77ABFC19581BDC16388BBC1318FB9C1FF95B7C1CD9CB5C19BA3B3C169AAB1C137B1AFC105B8ADC1D3BEABC1A1C5A9C16FCCA7C13DD3A5C10BDAA3C1D9E0A1C1A7E79FC175EE9DC143F59BC111FC99C1DF0298C1AD0996C17B1094C1491792C1171E90C1E5248EC1B32B8CC181328AC14F3988C1863F86C1134184C1354382C1484780C1FD8F7CC1698678C17F8374C1957370C148576CC1D72168C19DFA63C1FFB15FC11D4E5BC1FECC56C1316052C158BC4DC19EF848C1860F44C13AFA3EC127BB39C1044634C1D8632EC150C028C1769922C123271CC1326415C152480EC120E006C18331FEC0E6A4EDC0B23EDCC05847CBC0DAD8B8C02098A5C01B8491C0AA1879C0B2FE4DC0F1C220C06E12E6BF393785BFF0E69ABEE12BF13ECCCFA43F6C3E0940C5B8404013BF79404A7C9A404A56B8402F40D6405059F44062710A41CD221A4126362941348C3841DB2C4741B1595541E32D6141B7CB6D41CE9B794106AC824122F78741D5FD8C4187869141C0919541C4C59941E1379D41F331A041A3B1A24146B6A441D04EA641BE56A74157F8A741A505A8418141A84122B5A741ACC1A6413E72A5412DCDA341C7DAA1413AA39F4176479D41EBB19A41EBE6974125EB9441DF039241FFE28E41BFB28B41E06C8841921E85414ACB8141EBB77C41EEBB7541A4D16E418CD067413AC8604184BA59413AAB524107994B41F48544410E743D4168623641DE542F41EA4C2841744F214111711A412485134162C60C4118080641B496FE40964EF1407906E4405CBED6403E76C940212EBC4004E6AE40E69DA140C9559440AC0D87401D8B7340E2FA5840A76A3E406DDA2340324A0940EF73DD3F7953A83F0866663F3B4AF83E95218F3D70B9B0BEA39D42BF476F96BFBC8FCBBF195800C053E81AC08E7835C0C90850C003996AC09F9482C0BCDC8FC0DA249DC0F76CAAC014B5B7C032FDC4C04F45D2C06C8DDFC08AD5ECC0A71DFAC0E2B203C1F1560AC100FB10C10E9F17C11D431EC12CE724C13A8B2BC1492F32C158D338C166773FC1751B46C184BF4CC1926353C1A1075AC1B0AB60C1BE4F67C1CDF36DC1DC9774C1EA3B7BC1000000000000D8C2A4 +Len=1243 +Name=Ultraschall (soft noisegate) + diff --git a/presets/vst-Soundboard.ini b/presets/vst-Soundboard.ini new file mode 100644 index 0000000..18f85e9 --- /dev/null +++ b/presets/vst-Soundboard.ini @@ -0,0 +1,3 @@ +[General] +NbPresets=0 + diff --git a/presets/vst-reacomp.ini b/presets/vst-reacomp.ini new file mode 100644 index 0000000..6902173 --- /dev/null +++ b/presets/vst-reacomp.ini @@ -0,0 +1,104 @@ +[General] +LastDefImpTime=1513128078 +NbPresets=20 + +[Preset0] +Data=6D636572EF5EEDFE0400000001000000000000000200000000000000040000000000000008000000000000000200000001000000000000000200000000000000540000000000000000000000EFBEADDE0DF0ADDE2FB2F13D65F1373C7B49A33DF98F543D00000000000000004D2BB73C5F96B83B0000000000000000BD3786350000803F000000005070813E2506813D00000000000000000000000000000000C9 +Len=160 +Name=stock - Rock Snare - aim for 4dB GR + +[Preset1] +Data=6D636572EF5EEDFE0400000001000000000000000200000000000000040000000000000008000000000000000200000001000000000000000200000000000000540000000000000000000000EFBEADDE0DF0ADDE9B24003E3485003D3485003D400FCE3C000000000000000027D8023E5F96B83B0000000000000000BD3786350000803F00000000000000000000000000000000000000000000000000000000E2 +Len=160 +Name=stock - Modern Rock Snare - aim for 6dB GR + +[Preset10] +Data=6D636572EF5EEDFE0400000001000000000000000200000000000000040000000000000008000000000000000200000001000000000000000200000000000000540000000000000000000000EFBEADDE0DF0ADDE21AF0F3E8DCD913DD2D3553D8EE05C3C000000000000000016C58B3CD6FD733B0000000000000000BD3786350000803F00000000C381903C00000000000000000000000000000000000000002E +Len=160 +Name=stock - distorted electrtic guitar + +[Preset11] +Data=6D636572EF5EEDFE0400000001000000000000000200000000000000040000000000000008000000000000000200000001000000000000000200000000000000540000000000000000000000EFBEADDE0DF0ADDE43EBA83D6D4C643DD7F9203C1542B33D0000000000000000D840303E271E0A3D0000000000000000BD3786350000803F00000000000000000E2DB23D0000000000000000000000000000000095 +Len=160 +Name=stock - Sustain Guitar Solo + +[Preset12] +Data=6D636572EF5EEDFE0400000001000000000000000200000000000000040000000000000008000000000000000200000001000000000000000200000000000000540000000000000000000000EFBEADDE0DF0ADDEE115B43DD7F9203CD7F9203CDCA9843C00000000000000000D04CD3EB546EE3B91296C3F00000000BD3786350000803F00000000CDCC4C3DDBF9BE3E000000000000803F000000000000000053 +Len=160 +Name=stock - Fader Ride Vocal - aim for 8dB GR + +[Preset13] +Data=6D636572EF5EEDFE0400000001000000000000000200000000000000040000000000000008000000000000000200000001000000000000000200000000000000540000000000000000000000EFBEADDE0DF0ADDE43EBA83D406C0B3DF97A3A3D8EE05C3C00000000000000008E02693EB546EE3B0000000000000000BD3786350000803F00000000CDCC4C3D2506813D00000000000000000000000000000000D6 +Len=160 +Name=stock - Agressive Vocal + +[Preset14] +Data=6D636572EF5EEDFE0400000001000000000000000200000000000000040000000000000008000000000000000200000001000000000000000200000000000000540000000000000000000000EFBEADDE0DF0ADDE43EBA83D50982D3D2EC3A23C9F91203C00000000000000000D04CD3EB546EE3B0000000000000000BD3786350000803F00000000000000002506813D0000000000000000000000000000000062 +Len=160 +Name=stock - Modern Vocal + +[Preset15] +Data=6D636572EF5EEDFE0400000001000000000000000200000000000000040000000000000008000000000000000200000001000000000000000200000000000000540000000000000000000000EFBEADDE0DF0ADDEE115B43D903CF33D000000009F91203CF36F6E3B000000000000803F23349D3D0000000000000000BD3786350000803F000000000000000000000000000000000000803F0000000000000000A2 +Len=160 +Name=stock - BackGroundVocals + +[Preset16] +Data=6D636572EF5EEDFE0400000001000000000000000200000000000000040000000000000008000000000000000200000001000000000000000200000000000000540000000000000000000000EFBEADDE0DF0ADDE43EBA83DD2D3553D3485003D677A023D00000000000000001160A83C000000000000000000000000BD3786350000803F00000000C1CAE13EE7FB293E0000000000000000000000000000000021 +Len=160 +Name=stock - Acoustic Guitar + +[Preset17] +Data=6D636572EF5EEDFE0400000001000000000000000200000000000000040000000000000008000000000000000200000001000000000000000200000000000000540000000000000000000000EFBEADDE0DF0ADDE9B24003E50C8AF3B3485003D0AD7A33C00000000000000009E7C173FBB6C4F3B91296C3F00000000BD3786350000803F000000001E6D44400000000000000000000000000000000000000000C3 +Len=160 +Name=stock - Master Bus Glue + +[Preset18] +Data=6D636572EF5EEDFE0400000001000000000000000200000000000000040000000000000008000000000000000200000001000000000000000200000000000000540000000000000000000000EFBEADDE0DF0ADDEE115B43D25F3403E50C8AF3B639FAC3B00000000000000004BBAED3EBB6C4F3B0000000000000000319EC93EAEF8333F00000000000000006DE77B3E000000000000000000000000D9899D3D8B +Len=160 +Name=stock - Master Bus NY Comp + +[Preset19] +Data=6D636572EF5EEDFE040000000100000000000000020000000000000004000000000000000800000000000000040000000100000000000000020000000000000004000000000000000800000000000000540000000000000000000000EFBEADDE0DF0ADDEBB03213C0000803FCDCCCC3E8FC2753D0000803F000000000000803FA69B443B8CD4F13A00000000BD3786350000803F00000000000020405555D53E0000000000000000000000000000000000556C747261736368616C6C202D204475636B696E6700000000009E +Len=203 +Name=Ultraschall - Ducking + +[Preset2] +Data=6D636572EF5EEDFE0400000001000000000000000200000000000000040000000000000008000000000000000200000001000000000000000200000000000000540000000000000000000000EFBEADDE0DF0ADDE9B24003ED2D3553D000000007CA6913C71B90B3C000000000000803F3C12173C0000000000000000BD3786350000803F000000000000000000000000000000000000000000000000000000006D +Len=160 +Name=stock - steady rock kick + +[Preset3] +Data=6D636572EF5EEDFE0400000001000000000000000200000000000000040000000000000008000000000000000200000001000000000000000200000000000000540000000000000000000000EFBEADDE0DF0ADDE9B24003ED2D3553DE269D83C3967DF3C00000000000000006B9DD93C8F0F8C3B0000000000000000BD3786350000803F00000000CDCCCC3D0000000000000000000000000000000000000000EB +Len=160 +Name=stock - HardRock kick + +[Preset4] +Data=6D636572EF5EEDFE0400000001000000000000000200000000000000040000000000000008000000000000000200000001000000000000000200000000000000540000000000000000000000EFBEADDE0DF0ADDEE115B43D6373AC3DD7F9203C3967DF3C00000000000000005D7A093E8F0F8C3B0000000000000000BD3786350000803F0000000066DACE3E0000000000000000000000000000000000000000D5 +Len=160 +Name=stock - Death Metal kick + +[Preset5] +Data=6D636572EF5EEDFE0400000001000000000000000200000000000000040000000000000008000000000000000200000001000000000000000200000000000000540000000000000000000000EFBEADDE0DF0ADDE707E8C3D8DCD913D1A17A63A9F91203C0000000000000000FDDEA23E5554323B91296C3F00000000BD3786350000803F000000005070813ECBA1853E000000000000803F000000000000000098 +Len=160 +Name=stock - Vintage Overheads + +[Preset6] +Data=6D636572EF5EEDFE0400000001000000000000000200000000000000040000000000000008000000000000000200000001000000000000000200000000000000540000000000000000000000EFBEADDE0DF0ADDE43EBA83D3485003D3485003D775D3A3D00000000000000005D7A093E5554323B0000000000000000BD3786350000803F00000000000000002506013E0000000000000000000000000000000061 +Len=160 +Name=stock - Attack Overheads + +[Preset7] +Data=6D636572EF5EEDFE0400000001000000000000000200000000000000040000000000000008000000000000000200000001000000000000000200000000000000540000000000000000000000EFBEADDE0DF0ADDEE115B43D25F3403E65F1373CD5390F3C00000000000000004BBAED3EBB6C4F3B0000000000000000AD34B53E0000803F00000000BC57AD3E6DE77B3E000000000000803F00000000D9899D3D24 +Len=160 +Name=stock - NY Drum Buss + +[Preset8] +Data=6D636572EF5EEDFE0400000001000000000000000200000000000000040000000000000008000000000000000200000001000000000000000200000000000000540000000000000000000000EFBEADDE0DF0ADDE6637753D3115E83D7425773E8EE0DC3D00000000000000000A8B823DD6FD733B0000000000000000BD3786350000803F00000000CDCC4C3D00000000000000000000803F00000000D9899D3DFA +Len=160 +Name=stock - Driving Rock Bass + +[Preset9] +Data=6D636572EF5EEDFE0400000001000000000000000200000000000000040000000000000008000000000000000200000001000000000000000200000000000000540000000000000000000000EFBEADDE0DF0ADDEE115B43D6D4C643DCC3BEC3C3C2D473D0000000000000000EEFE9B3EEE32003D0000000000000000BD3786350000803F000000000000000000000000000000000000000000000000D9899D3D34 +Len=160 +Name=stock - Spanky Bass + diff --git a/presets/vst-readelay.ini b/presets/vst-readelay.ini new file mode 100644 index 0000000..e4ab3ee --- /dev/null +++ b/presets/vst-readelay.ini @@ -0,0 +1,49 @@ +[General] +LastDefImpTime=1471083268 +NbPresets=9 + +[Preset0] +Data=6C646572EE5EEDFE020000000100000000000000020000000000000002000000010000000000000002000000000000004C00000001000000000000000000000000000000010000002C00000002000000000000003FC6803E0000803F000000000000803F000000000000003BC9182D3EA4A92E3EFAED6B3B0000803F0000803F0000803F0000003FEE +Len=136 +Name=stock - vocal slapback + +[Preset1] +Data=6C646572EE5EEDFE020000000100000000000000020000000000000002000000010000000000000002000000000000004C00000001000000000000000000000000000000010000002C00000002000000000000009CC3FC3E0000803F000000000000803F000000000000003B5F09923EA4A92E3EFAED6B3B0000803F0000803F0000803F0000003FB0 +Len=136 +Name=stock - slap fb + +[Preset2] +Data=6C646572EE5EEDFE02000000010000000000000002000000000000000200000001000000000000000200000000000000FC00000001000000000000000000000000000000050000002C00000002000000040000000000803F0000803F000000000000803F000000000000803BBD3786350000803F000000000000803F0000803F0000803F00000000000000000000803F000000000000003C000000000000803F000000000000803F0000803FEF3B353F0000803F000000000000803F000000000000403CBD3786350000803F000000000000803F0000803FCE4D003FA69B843E000000000000803F000000000000803CBD3786350000803F000000000000803F0000803F1AAAB53EA4703D3F000000000000803F000000000000A03CBD3786350000803F000000000000803F0000803FCC9B803E0000003F71 +Len=312 +Name=stock - basic 5 tap ping pong + +[Preset3] +Data=6C646572EE5EEDFE020000000100000000000000020000000000000002000000010000000000000002000000000000007800000001000000000000000000000000000000020000002C00000002000000010000009CC3FC3E0000803F000000000000803F0000000048BB9B3ABD378635A4A92E3E255AF23B0000803F0000803F0000803FE7FB293E000000000000803F00000000FF8D1A3A000000003719653E89B40D3C0000803F0000803FEF3B353F52B85E3FF6 +Len=180 +Name=stock - vocal fattener + +[Preset4] +Data=6C646572EE5EEDFE02000000010000000000000002000000000000000200000001000000000000000200000000000000D000000001000000000000000000000000000000040000002C00000002000000010000009CC3FC3E0000803F000000000000803F000000000000C03BBD378635A4A92E3E255AF23B0000803F0000803F0000803FE7FB293E000000000000803F000000000000203C1437483E3719653E89B40D3C0000803F0000803FF11B303F508D173E000000000000803F0AD7233C0000803CBD3786355DDD713E000000000000803F0000803FF11B303F23DB593F000000000000803F0AD7233C0000B03CBD3786355DDD713E000000000000803F0000803F25F6FF3E23DB593FF9 +Len=268 +Name=stock - dehuminator + +[Preset5] +Data=6C646572EE5EEDFE020000000100000000000000020000000000000002000000010000000000000002000000000000002801000001000000000000000000000000000000060000002C00000002000000000000009CC3FC3E0000803F000000000000803F17C38B3A00000000CE4D003F0AD7233F8FC2F53B0000803F0000803F0000803F00000000000000000000803F60947B3A00000000CE4D003F0AD7233F8FC2F53B0000803F0000803FAC065A3F0000803F000000000000803F27B1353A00000000CE4D003F1C27CD3E8FC2F53B0000803F0000803F0000803FA69B843E000000000000803FF0F0E83A00000000CE4D003F1C27CD3E8FC2F53B0000803F0000803F0000803FD34D423F000000000000803FFB54BA3900000000CE4D003F245E5E3E8FC2F53B0000803F0000803F0000803F2506213F000000000000803FB15BBA3A000000009CC3FC3EDDB5043F8FC2F53B0000803F0000803F0000803FFA7EAA3EA9 +Len=356 +Name=stock - small room + +[Preset6] +Data=6C646572EE5EEDFE020000000100000000000000020000000000000002000000010000000000000002000000000000002801000001000000000000000000000000000000060000002C00000002000000050000009CC3FC3E0000803F000000000000803F933D1D3B00000000CE4D003F0AD7233F8FC2F53B0000803F0000803F0000803F00000000000000000000803FC81D003B00000000CE4D003F0AD7233F8FC2F53B0000803F0000803FAC065A3F0000803F000000000000803FF09AA13B000000003FC6803E1C27CD3E8FC2F53B0000803F0000803F0000803FA69B843E000000000000803FF0F0683A00000000CE4D003F1C27CD3E8FC2F53B0000803F0000803F0000803FD34D423F000000000000803FCF79573B00000000CE4D003F245E5E3E8FC2F53B0000803F0000803F0000803F2506213F000000000000803FB15B3A3A000000009CC3FC3EDDB5043F8FC2F53B0000803F0000803F0000803FFA7EAA3ECE +Len=356 +Name=stock - large room + +[Preset7] +Data=6C646572EE5EEDFE02000000010000000000000002000000000000000200000001000000000000000200000000000000A400000001000000000000000000000000000000030000002C0000000200000002000000D9D3753E0000803F000000000000803F000000000000003B5A4D5B3D0AD7233F8FC2F53B0000803F0000803F0000803FE7FB293E000000000000803F000000000000803B5FD9713D0AD7233F8FC2F53B0000803F0000803FF11B303F7D3F553F000000000000803F000000000000C03B5824A33E0000803F255AF23B0000803F0000803F25F6FF3E8FC2753E2A +Len=224 +Name=stock - snare rhythm + +[Preset8] +Data=6C646572EE5EEDFE02000000010000000000000002000000000000000200000001000000000000000200000000000000A400000001000000000000000000000000000000030000002C0000000200000002000000689A053F0000803F000000000000803F000000000000403B5A4D5B3DF9A3C83D8FC2F53B0000803F0000803F0000803F7D3F553F000000000000803F000000000000A03B5FD9713DA984A73D8FC2F53B0000803F0000803FF11B303FE7FB293E000000000000803F000000000000E03BC485733E14D0C43E0AD7233C0000803F0000803F25F6FF3EFA7E2A3FF2 +Len=224 +Name=stock - kick rhythm + diff --git a/presets/vst-reaeq.ini b/presets/vst-reaeq.ini new file mode 100644 index 0000000..01bce45 --- /dev/null +++ b/presets/vst-reaeq.ini @@ -0,0 +1,149 @@ +[General] +LastDefImpTime=1513128078 +NbPresets=29 + +[Preset0] +Data=71656572EE5EEDFE02000000010000000000000002000000000000000200000001000000000000000200000000000000780100000100000000000000200000000B00000002000000010000000000000000004940000000000000F03F000000000000F03F02000000010000000000000000005940000000000000F03F8195438B6CE7EF3F02000000010000000000000000006940000000000000F03F000000000000F03F02000000010000000000000000007940000000000000F03F000000000000F03F02000000010000000000000000008940000000000000F03F000000000000F03F02000000010000000000000000709740000000000000F03F000000000000F03F0200000001000000000000000070A740000000000000F03F000000000000F03F0200000001000000000000000088B340000000000000F03F000000000000F03F0200000001000000000000000058BB40000000000000F03F000000000000F03F0200000001000000000000000088C340000000000000F03F000000000000F03F020000000100000000000000004CCD40000000000000F03F000000000000F03F0100000001000000000000000000F03FC2 +Len=436 +Name=stock - Basic 11 band + +[Preset1] +Data=71656572EE5EEDFE02000000010000000000000002000000000000000200000001000000000000000200000000000000780100000100000000000000200000000B00000002000000000000000000000000004940000000000000F03F000000000000F03F02000000000000000000000000005940000000000000F03F8195438B6CE7EF3F02000000010000000000000000006940CAD86D519CCCDE3F9EEFA7C64B37F63F00000000010000000000000000007940169C04FD6616E83F000000000000004002000000000000000000000000008940000000000000F03F000000000000F03F02000000000000000000000000709740000000000000F03F000000000000F03F0200000000000000000000000070A740000000000000F03F000000000000F03F0200000000000000000000000088B340000000000000F03F000000000000F03F0200000000000000000000000058BB40000000000000F03F000000000000F03F0200000001000000000000000088C340D76FF8F35973F33F295C8FC2F528F03F020000000100000000000000004CCD40EE191665C962F63F9EEFA7C64B37F63F0100000001000000000000000000F03F51 +Len=436 +Name=stock - Basic 11 band Cymbals + +[Preset10] +Data=71656572EE5EEDFE02000000010000000000000002000000000000000200000001000000000000000200000000000000980000000100000000000000200000000400000004000000010000000000000000C06240000000000000F03F000000000000004002000000010000000000000000B07340524233CFB909E03F7F6ABC749318E03F0200000001000000000000000000844020B8B4929E97E63F000000000000F03F0200000001000000171C00ED47EEB740D90A61E91A04F33F00000000000000400100000001000000000000000000F03FEC +Len=212 +Name=stock - Mud Free + +[Preset11] +Data=71656572EE5EEDFE02000000010000000000000002000000000000000200000001000000000000000200000000000000980000000100000000000000200000000400000004000000010000000000000000C06240000000000000F03F000000000000004002000000010000000000000000B07340524233CFB909E03F7F6ABC749318E03F02000000010000000000000000008440000000000000F03F000000000000F03F0200000001000000000000000070C740D90A61E91A04F33F00000000000000400100000001000000000000000000F03FCE +Len=212 +Name=stock - Track Default + +[Preset12] +Data=71656572EE5EEDFE02000000010000000000000002000000000000000200000001000000000000000200000000000000780100000100000000000000200000000B00000002000000010000000000000000004940000000000000F03F000000000000F03F02000000010000000000000000005940F18305AF0B02D73F295C8FC2F528F03F020000000100000000000000000069405344F937E528F43F295C8FC2F528F03F02000000010000000000000000007940000000000000F03F000000000000F03F0200000001000000000000000000894020B8B4929E97E63F9EEFA7C64B37F63F02000000000000000000000000709740FCF89D2894CBDF3F9EEFA7C64B37F63F0200000001000000000000000070A740784E8172E9A0E73F000000000000F03F0200000001000000000000000088B3404411D90D6BEDF23F14AE47E17A14F63F0200000001000000000000000058BB40000000000000F03F295C8FC2F528F03F0200000001000000000000000088C340000000000000F03F000000000000F03F020000000100000000000000004CCD40000000000000F03F000000000000F03F0100000001000000000000000000F03FF8 +Len=436 +Name=stock - Basic 11 band Fender or Mesa + +[Preset13] +Data=71656572EE5EEDFE02000000010000000000000002000000000000000200000001000000000000000200000000000000780100000100000000000000200000000B00000002000000010000000000000000004940000000000000F03F000000000000F03F02000000010000000000000000005940C391C2A936D3F43F295C8FC2F528F03F02000000010000000000000000006940000000000000F03F295C8FC2F528F03F0200000001000000000000000000794020B8B4929E97E63F000000000000F03F02000000010000000000000000008940000000000000F03F9EEFA7C64B37F63F0200000001000000000000000070974099CB7D7CF8D4E93F9EEFA7C64B37F63F0200000001000000000000000070A740652AB6A65F5BF13F14AE47E17A14F63F0200000001000000000000000088B340529F34EF9F52EA3F6ABC74931804E63F0200000001000000000000000058BB40000000000000F03F295C8FC2F528F03F0200000001000000000000000088C340000000000000F03F000000000000F03F020000000100000000000000004CCD40000000000000F03F000000000000F03F0100000001000000000000000000F03F02 +Len=436 +Name=stock - Basic 11 band Marshall + +[Preset14] +Data=71656572EE5EEDFE0200000001000000000000000200000000000000020000000100000000000000020000000000000098000000010000000000000020000000040000000400000001000000447F2EFAFF105E40000000000000F03F0000000000000040020000000100000005DF2089D23084402736BDA1793CF33F8195438B6CE7EF3F02000000000000009E2CD1CDF41F9540010675177216F43F000000000000F03F02000000010000009F4C78C3CBC2B04034A2FCD99C60F33F1D5A643BDF4FE93F0100000001000000000000000000F03FFF +Len=212 +Name=stock - Wide male vocal + +[Preset15] +Data=71656572EE5EEDFE02000000010000000000000002000000000000000200000001000000000000000200000000000000780100000100000000000000200000000B00000004000000010000000000000000004940000000000000F03F000000000000F03F02000000010000000000000000005940000000000000F03F8195438B6CE7EF3F02000000010000000000000000006940EE191665C962F63F8FC2F5285C8FFE3F02000000010000000000000000007940000000000000F03F8FC2F5285C8FFE3F02000000010000000000000000008940000000000000F03F000000000000F03F02000000010000000000000000709740000000000000F03F000000000000F03F0200000001000000000000000070A740C028DFDD7F0AF03F14AE47E17A14F63F0200000001000000000000000088B340000000000000F03F000000000000F03F0200000001000000000000000058BB40000000000000F03F000000000000F03F0200000001000000000000000088C340DFD158299090F53F14AE47E17A14F63F020000000100000000000000004CCD40000000000000F03F000000000000F03F0100000001000000000000000000F03FC4 +Len=436 +Name=stock - Basic 11 band Full Vocals + +[Preset16] +Data=71656572EE5EEDFE02000000010000000000000002000000000000000200000001000000000000000200000000000000780100000100000000000000200000000B00000004000000010000000000000000004940000000000000F03F000000000000F03F02000000010000000000000000005940000000000000F03F8195438B6CE7EF3F0200000001000000000000000000694020B8B4929E97E63F8FC2F5285C8FFE3F0200000001000000000000000000794095F29683C63AEE3F8FC2F5285C8FFE3F02000000010000000000000000008940000000000000F03F000000000000F03F02000000010000000000000000709740000000000000F03F000000000000F03F0200000001000000000000000070A740C028DFDD7F0AF03F14AE47E17A14F63F0200000001000000000000000088B3405344F937E528F43F000000000000F03F0200000001000000000000000058BB40000000000000F03F000000000000F03F0200000001000000000000000088C340000000000000F03F14AE47E17A14F63F020000000100000000000000004CCD405344F937E528F43FD7A3703D0AD7F73F0100000001000000000000000000F03F61 +Len=436 +Name=stock - Basic 11 band Clear Vocals + +[Preset17] +Data=71656572EE5EEDFE02000000010000000000000002000000000000000200000001000000000000000200000000000000780100000100000000000000200000000B00000004000000010000000000000000004940000000000000F03F000000000000F03F02000000010000000000000000005940000000000000F03F8195438B6CE7EF3F02000000010000000000000000006940000000000000F03F8FC2F5285C8FFE3F02000000010000000000000000007940000000000000F03F8FC2F5285C8FFE3F02000000010000000000000000008940000000000000F03F000000000000F03F02000000010000000000000000709740000000000000F03F000000000000F03F0200000001000000000000000070A74020B8B4929E97E63F14AE47E17A14F63F0200000001000000000000000088B34020B8B4929E97E63F000000000000F03F0300000000000000000000000058BB40000000000000F03F1F85EB51B81E06400200000001000000000000000088C34020B8B4929E97E63F14AE47E17A14F63F020000000100000000000000004CCD40711C9023B80BF23FD7A3703D0AD7F73F0100000001000000000000000000F03F4A +Len=436 +Name=stock - Basic 11 BackGroundVocals + +[Preset18] +Data=71656572EE5EEDFE02000000010000000000000002000000000000000200000001000000000000000200000000000000780100000100000000000000200000000B00000004000000010000000000000000004940000000000000F03F000000000000F03F02000000010000000000000000005940000000000000F03F8195438B6CE7EF3F02000000010000000000000000006940000000000000F03F8FC2F5285C8FFE3F02000000010000000000000000007940000000000000F03F8FC2F5285C8FFE3F02000000010000000000000000008940000000000000F03F000000000000F03F02000000010000000000000000709740000000000000F03F000000000000F03F0200000001000000000000000070A74020B8B4929E97E63F14AE47E17A14F63F0200000001000000000000000088B34020B8B4929E97E63F000000000000F03F0300000000000000000000000058BB40000000000000F03F1F85EB51B81E06400200000001000000000000000088C34020B8B4929E97E63F14AE47E17A14F63F020000000100000000000000004CCD40711C9023B80BF23FD7A3703D0AD7F73F0100000001000000000000000000F03F4A +Len=436 +Name=stock - Basic 11 band BackGroundVocals + +[Preset19] +Data=71656572EE5EEDFE02000000010000000000000002000000000000000200000001000000000000000200000000000000980000000100000000000000200000000400000004000000010000000000000000C06240000000000000F03F000000000000004002000000010000000000000000C07240000000000000F03F0000000000000040020000000100000055EAF888F9B083408AABE8EA7DA7E63F00000000000000400200000001000000171C00ED47EEB7405344F937E528F43F00000000000000400100000001000000000000000000F03FEA +Len=212 +Name=stock - Close Mic Acoustic + +[Preset2] +Data=71656572EE5EEDFE02000000010000000000000002000000000000000200000001000000000000000200000000000000780100000100000000000000200000000B000000020000000100000000000000000049405344F937E528F43F295C8FC2F528F03F02000000000000000000000000005940000000000000F03F000000000000F03F02000000000000000000000000006940000000000000F03F000000000000F03F02000000010000000000000000007940FCF89D2894CBDF3F295C8FC2F528F03F02000000000000000000000000008940000000000000F03F000000000000F03F02000000000000000000000000709740000000000000F03F000000000000F03F0200000001000000000000000070A7404411D90D6BEDF23F0C022B8716D9E63F0200000000000000000000000088B340000000000000F03F000000000000F03F0200000001000000000000000058BB405344F937E528F43F0C022B8716D9E63F0200000000000000000000000088C340000000000000F03F000000000000F03F020000000000000000000000004CCD40000000000000F03F000000000000F03F0100000001000000000000000000F03F01 +Len=436 +Name=stock - Basic 11 band Kick + +[Preset20] +Data=71656572EF5EEDFE02000000010000000000000002000000000000000200000001000000000000000200000000000000DC000000010000000000000020000000060000000000000001000000E2A247CB066D3E40F7764BF205A8CE3F000000000000004002000000010000006CA6E40AFAB35840B8896F286B44F13F00000000000000400200000001000000DAA17A2A3D4C6E400A10FD9752B5E63F9C9999999999E93F0100000001000000D0098179AB3DB64020FDD5C1A9CDEE3F00000000000000400200000001000000ECEC32E1811EA040DA29EB495F65EF3F00000000000000400300000000000000C307E128E16FD7407DA7515E1E9FF03F00000000000000400100000000000000000000000000F03F01000000DD +Len=280 +Name=stock - Electro Drums Smooth [snk] + +[Preset21] +Data=71656572EF5EEDFE020000000100000000000000020000000000000002000000010000000000000002000000000000009C000000010000000000000020000000040000000400000001000000002CC2EE6E0D6940000000000000F03F000000000000004002000000010000000000000000C07240000000000000F03F00000000000000400200000000000000E3B9215A71388D40B8896F286B44F13F363333333333E33F0100000001000000E1B67326EFD3BC40273F66EA560BE83F00000000000000400100000000000000000000000000F03F0100000044 +Len=216 +Name=stock - Pads locut [snk] + +[Preset22] +Data=71656572EF5EEDFE020000000100000000000000020000000000000002000000010000000000000002000000000000009C000000010000000000000020000000040000000400000001000000B4EB69A844D83E40000000000000F03F000000000000004002000000000000000000000000C07240000000000000F03F00000000000000400200000000000000E3B9215A71388D40B8896F286B44F13F363333333333E33F030000000100000071C67C9801FE8240EC91069026A3DA3F00000000000000400100000000000000000000000000F03F0100000064 +Len=216 +Name=stock - Bass Lopass [snk] + +[Preset23] +Data=71656572EF5EEDFE020000000100000000000000020000000000000002000000010000000000000002000000000000009C000000010000000000000020000000040000000000000001000000CBC2D621C7A63440263F66EA560BE83F0000000000000040060000000100000086B6E8B6B1E34B40B9896F286B44F13F000000000000004002000000010000000000000000408F40000000000000F03F00000000000000400100000001000000000000000088B340000000000000F03F00000000000000400100000000000000000000000000F03F0100000029 +Len=216 +Name=stock - Notch@50hz [snk] + +[Preset24] +Data=71656572EE5EEDFE02000000010000000000000002000000000000000200000001000000000000000200000000000000E200000001000000000010002100000006000000000000000100000000188D6F85524A4000EEB5A0F7C6B03E000000000000004001080000000100000009C58959927A5540166CE8FF8B37F83F0000000000000040010800000001000000A6C14B778E70C840AA73922A898001400000000000000040010100000001000000FDCDDF7CF8D2D44000EEB5A0F7C6B03E0000000000000040010800000001000000A8A0957E00A869403532145B312FED3F0000000000000040010800000001000000FAE528FD35C3C04084D4F674CD30E43F0000000000000040010100000001000000000000000000F03F0000000000556C747261736368616C6C0010000000BA +Len=303 +Name=Ultraschall + +[Preset25] +Data=71656572EE5EEDFE02000000010000000000000002000000000000000200000001000000000000000200000000000000C1000000010000000000100021000000050000000800000001000000F90189F54461B340F3E843409032FF3FC6490C022B87FA3F010800000001000000FF2684E745468F40B08D820A2B48E33FFAC0CAA145B6E73F01080000000100000046DB11A604F1374000EEB5A0F7C6B03E0800000000001040010800000001000000B37E1460B0825A40AF2506AA2B900440A2F97E6ABC74004001010000000100000017B1BBF8728EC640C0B45B2D98ECFF3F005C8FC2F528D43F010100000001000000000000000000F03F0000000000556C747261736368616C6C32001000000094 +Len=271 +Name=Ultraschall2 + +[Preset26] +Data=71656572EE5EEDFE020000000100000000000000020000000000000002000000010000000000000002000000000000007F000000010000000000000021000000030000000400000001000000E845AADF19148540000000000000F03F00000000000000400002000000010000005EAF5FB76034A54058E291BE3DF42440000000000000F03F0007000000010000002A89EABF029B864000000000000000000000000000000040000100000001000000000000000000F03F0100000000556C747261736368616C6C202D2054656C6570686F6E65000000000063 +Len=216 +Name=Ultraschall - Telephone + +[Preset27] +Data=71656572EE5EEDFE02000000010000000000000002000000000000000200000001000000000000000200000000000000C1000000010000000000100021000000050000000800000001000000FE0189F54461B340FCE843409032FF3FC1490C022B87FA3F010800000001000000FF2684E745468F40B98D820A2B48E33FFEC0CAA145B6E73F01080000000100000042DB11A604F1374000EEB5A0F7C6B03E0200000000001040010800000001000000BB7E1460B0825A40AA473C0AD6A0F63FA1F97E6ABC74004001010000000100000012B1BBF8728EC640C0B45B2D98ECFF3F005C8FC2F528D43F010100000001000000000000000000F03F0000000000556C747261736368616C6C33001000000002 +Len=271 +Name=Ultraschall3 + +[Preset28] +Data=71656572EE5EEDFE02000000010000000000000002000000000000000200000001000000000000000200000000000000C1000000010000000000100021000000050000000800000001000000FF0189F54461B340FFE843409032FF3FC1490C022B87FA3F010800000001000000FF2684E745468F40BE8D820A2B48E33FFFC0CAA145B6E73F01080000000100000041DB11A604F1374000EEB5A0F7C6B03E0100000000001040010800000001000000BF7E1460B0825A402B6EE8F7C099F63FA1F97E6ABC74004001010000000100000011B1BBF8728EC640C0B45B2D98ECFF3F005C8FC2F528D43F010100000001000000000000000000F03F0000000000484D433636300010000000F3 +Len=265 +Name=HMC660 + +[Preset3] +Data=71656572EE5EEDFE02000000010000000000000002000000000000000200000001000000000000000200000000000000780100000100000000000000200000000B00000000000000010000000000000000004940FCF89D2894CBDF3FC976BE9F1A2FF73F02000000010000000000000000005940EE191665C962F63F333333333333F33F0200000001000000000000000000694020B8B4929E97E63FCDCCCCCCCCCCF43F02000000010000000000000000007940D76FF8F35973F33FCDCCCCCCCCCCF43F020000000100000000000000000089404411D90D6BEDF23F295C8FC2F528F03F02000000010000000000000000709740EE191665C962F63F295C8FC2F528F03F0200000001000000000000000070A7404411D90D6BEDF23F295C8FC2F528F03F0200000001000000000000000088B340000000000000F03F000000000000F03F0200000001000000000000000058BB40000000000000F03F000000000000F03F0200000001000000000000000088C340000000000000F03F000000000000F03F020000000100000000000000004CCD40000000000000F03F000000000000F03F0100000001000000000000000000F03FFE +Len=436 +Name=stock - Basic 11 band Rock Bass + +[Preset4] +Data=71656572EE5EEDFE02000000010000000000000002000000000000000200000001000000000000000200000000000000780100000100000000000000200000000B00000002000000000000000000000000004940000000000000F03F000000000000F03F02000000000000000000000000005940000000000000F03FFA7E6ABC7493F23F0200000001000000000000000000694082C606EAF66CF93F295C8FC2F528F03F02000000000000000000000000007940000000000000F03F000000000000F03F0200000001000000000000000000894073809B846A29E73F000000000000F03F02000000000000000000000000709740000000000000F03F000000000000F03F0200000001000000000000000070A740EE191665C962F63FE17A14AE47E1E23F0200000000000000000000000088B340000000000000F03F000000000000F03F0200000001000000000000000058BB4082C606EAF66CF93F333333333333E33F0200000000000000000000000088C340000000000000F03F000000000000F03F020000000000000000000000004CCD40000000000000F03F000000000000F03F0100000001000000000000000000F03F10 +Len=436 +Name=stock - Basic 11 band Rock Snare + +[Preset5] +Data=71656572EE5EEDFE02000000010000000000000002000000000000000200000001000000000000000200000000000000780100000100000000000000200000000B00000002000000010000000000000000004940EE191665C962F63F295C8FC2F528F03F02000000000000000000000000005940000000000000F03F8195438B6CE7EF3F02000000000000000000000000006940000000000000F03F000000000000F03F02000000010000000000000000007940B7B5B84B9E21E53F295C8FC2F528F03F02000000000000000000000000008940000000000000F03F000000000000F03F02000000000000000000000000709740000000000000F03F000000000000F03F0200000000000000000000000070A740000000000000F03F000000000000F03F0200000001000000000000000088B340EE191665C962F63F000000000000F03F0200000001000000000000000058BB40000000000000F03F000000000000F03F0200000000000000000000000088C340000000000000F03F000000000000F03F020000000000000000000000004CCD40000000000000F03F000000000000F03F0100000001000000000000000000F03F2A +Len=436 +Name=stock - Basic 11 band Toms + +[Preset6] +Data=71656572EE5EEDFE02000000010000000000000002000000000000000200000001000000000000000200000000000000980000000100000000000000200000000400000004000000010000000000000000005940000000000000F03F000000000000004002000000010000000000000000B07340000000000000F03F7F6ABC749318E03F02000000010000000000000000008440000000000000F03F000000000000F03F0100000001000000000000000070C740000000000000F03F00000000000000400100000001000000000000000000F03F6E +Len=212 +Name=stock - Basic 100 HPF + +[Preset7] +Data=71656572EE5EEDFE02000000010000000000000002000000000000000200000001000000000000000200000000000000980000000100000000000000200000000400000004000000010000000000000000C06240000000000000F03F000000000000004002000000010000000000000000B07340000000000000F03F7F6ABC749318E03F02000000010000000000000000008440000000000000F03F000000000000F03F0100000001000000000000000070C740000000000000F03F00000000000000400100000001000000000000000000F03F37 +Len=212 +Name=stock - Basic 150 HPF + +[Preset8] +Data=71656572EE5EEDFE02000000010000000000000002000000000000000200000001000000000000000200000000000000980000000100000000000000200000000400000004000000010000000000000000005440000000000000F03F0000000000000040020000000100000015FDFEC8A33B7A4069DE7E4E2EAFF33F8195438B6CE7EF3F02000000010000001A6D547319019240FA1FD34C5093E53F000000000000F03F0200000001000000ED3FDD7654E3A340A4F590DDF74BF73F1D5A643BDF4FE93F0100000001000000000000000000F03F0F +Len=212 +Name=stock - Intimate female vocal + +[Preset9] +Data=71656572EE5EEDFE02000000010000000000000002000000000000000200000001000000000000000200000000000000980000000100000000000000200000000400000004000000010000000000000000C06240000000000000F03F000000000000004002000000010000000000000000B07340524233CFB909E03F7F6ABC749318E03F0200000001000000ED3FDD7654E3A34020B8B4929E97E63F000000000000F03F0300000001000000213D3E87F293BF40B7B5B84B9E21E53FDF4F8D976E120A400100000001000000000000000000F03FCE +Len=212 +Name=stock - Move to the Back + diff --git a/presets/vst-reagate.ini b/presets/vst-reagate.ini new file mode 100644 index 0000000..1308f7b --- /dev/null +++ b/presets/vst-reagate.ini @@ -0,0 +1,39 @@ +[General] +LastDefImpTime=1484534512 +NbPresets=7 + +[Preset0] +Data=74676572EF5EEDFE0400000001000000000000000200000000000000040000000000000008000000000000000200000001000000000000000200000000000000500000000000000000000000EFBEADDE0DF0ADDEFB74F73D1A17A63A9F91203C71B90B3C7B49A33DCD2F1B3CEC91B83A0000000000000000BD3786350000803FBD3786358081BD3F0000000000000000000000002C160B3F00000000CF +Len=156 +Name=stock - kick gate + +[Preset1] +Data=74676572EF5EEDFE0400000001000000000000000200000000000000040000000000000008000000000000000200000001000000000000000200000000000000500000000000000000000000EFBEADDE0DF0ADDEFB74F73D7968153BF98F543DD7F9203CB6679A3D2744193ECD2F1B3C0000000000000000BD3786350000803FBD378635F143363F0000000000000000000000002C160B3F0000000086 +Len=156 +Name=stock - snare gate + +[Preset2] +Data=74676572EF5EEDFE0400000001000000000000000200000000000000040000000000000008000000000000000200000001000000000000000200000000000000500000000000000000000000EFBEADDE0DF0ADDEA162B63D7968153BB933E83DD7F9203CB6679A3DD945093CEC91B83A0000000000000000BD3786350000803FBD378635F143363F0000000000000000000000002C160B3F000000008E +Len=156 +Name=stock - tom gate + +[Preset3] +Data=74676572EF5EEDFE0400000001000000000000000200000000000000040000000000000008000000000000000200000001000000000000000200000000000000500000000000000000000000EFBEADDE0DF0ADDEE364F63EBFFE3E3B25DD913ED7F9203CDC98663E3BD05B3EC2BDF13B0000000000000000BD3786350000803FBD3786353FF9E13E0000000000000000000000002C160B3F0000000027 +Len=156 +Name=stock - Electric Guitar solo gate + +[Preset4] +Data=74676572EF5EEDFE0400000001000000000000000200000000000000040000000000000008000000000000000200000001000000000000000200000000000000500000000000000000000000EFBEADDE0DF0ADDE167A7A3EBFFE3E3B98B1F13CD7F9203CDC98663E3BD05B3EC2BDF13B0000000000000000BD3786350000803FBD378635DD7B233F0000000000000000000000002C160B3F00000000FC +Len=156 +Name=stock - Electric Guitar Rhythm + +[Preset5] +Data=74676572EF5EEDFE0400000001000000000000000200000000000000040000000000000008000000000000000200000001000000000000000200000000000000500000000000000000000000EFBEADDE0DF0ADDE167A7A3EBFFE3E3BD5390F3CD7F9203CE269D83CCD2F1B3CD160093B0000000000000000BD37863500000000BD378635D474014000000000000000000000803F4522913E0000000018 +Len=156 +Name=stock - Kick to MIDI + +[Preset6] +Data=74676572EF5EEDFE0400000001000000000000000200000000000000040000000000000008000000000000000200000001000000000000000200000000000000500000000000000000000000EFBEADDE0DF0ADDE167A7A3EBFFE3E3B639FAC3BD7F9203C7F246B3CBCFFE73DC2BDF13B0000000000000000BD37863500000000BD378635D474014000000000000000000000803F6532993E000000008D +Len=156 +Name=stock - Snare to MIDI + diff --git a/presets/vst-reaverb.ini b/presets/vst-reaverb.ini new file mode 100644 index 0000000..0ee6dd5 --- /dev/null +++ b/presets/vst-reaverb.ini @@ -0,0 +1,14 @@ +[General] +LastDefImpTime=1512519081 +NbPresets=2 + +[Preset0] +Data=62766572EE5EEDFE02000000010000000000000002000000000000000200000001000000000000000200000000000000600000000100000000000000000080C0CC9B803E0000803F000000000000803F5645524247454E00180000000000000091E057441DACB440DEB2BB42C1C88C42000080BF4543484F47454E001C000000CBF8B640B52375425DCDD33FA2C75F3F9951AF3C91CD8C409CC4003F7F +Len=156 +Name=sweetverbo + +[Preset1] +Data=62766572EE5EEDFE02000000010000000000000002000000000000000200000001000000000000000200000000000000750000000100000000000000000080C02AFF743E0000803F000000000000803F4543484F47454E001C000000294C944210DD6644AEE8F24029CE313F43D2CF3B064667400000003F4543484F47454E001C0000000000A041000020420000F04155427F3F6F166C3F000000000000003F46494C5400080000005B7B493E8940E43B3F +Len=177 +Name=bad crunch + diff --git a/presets/vst-reaverbate.ini b/presets/vst-reaverbate.ini new file mode 100644 index 0000000..d74ba6e --- /dev/null +++ b/presets/vst-reaverbate.ini @@ -0,0 +1,119 @@ +[General] +LastDefImpTime=1471083268 +NbPresets=23 + +[Preset0] +Data=38627672EF5EEDFE02000000010000000000000002000000000000000200000001000000000000000200000000000000280000000000000000000000EFBEADDE0DF0ADDEF9F4B03E0000803FF92EA53B0000003F79E9463F98DD133DA54ACA3E851E193C27 +Len=100 +Name=insert - MixAlive + +[Preset1] +Data=38627672EF5EEDFE02000000010000000000000002000000000000000200000001000000000000000200000000000000280000000000000000000000EFBEADDE0DF0ADDEF143363F0000803F75ADDD3E000000000000803F6005F83CD878593E648C813D3E +Len=100 +Name=insert - Snare Trap + +[Preset10] +Data=38627672EF5EEDFE02000000010000000000000002000000000000000200000001000000000000000200000000000000280000000000000000000000EFBEADDE0DF0ADDE0DAC1E3F0000803FF92EA53C0000003F0000803FF92EA53CC874FA3D20D0A43CD2 +Len=100 +Name=insert - Acoustic in the Mix + +[Preset11] +Data=38627672EF5EEDFE02000000010000000000000002000000000000000200000001000000000000000200000000000000280000000000000000000000EFBEADDE0DF0ADDEEF3B353FEF3B353F40FC203F0000003F1F856B3F630E823C8DB3643D9A9D3C3CCF +Len=100 +Name=insert - intimate vocal + +[Preset12] +Data=38627672EF5EEDFE02000000010000000000000002000000000000000200000001000000000000000200000000000000280000000000000000000000EFBEADDE0DF0ADDEEF3B353F0000803F05DE493D06838B3D0000803F048DB93DA54ACA3E1DC7F83B17 +Len=100 +Name=insert - Live Vocal + +[Preset13] +Data=38627672EF5EEDFE02000000010000000000000002000000000000000200000001000000000000000200000000000000280000000000000000000000EFBEADDE0DF0ADDE0000803F00000000EC51D83E59854D3FB6F37D3F048DB93D15724C3F807D563DB6 +Len=100 +Name=send - BGV Enhancer + +[Preset14] +Data=38627672EF5EEDFE02000000010000000000000002000000000000000200000001000000000000000200000000000000280000000000000000000000EFBEADDE0DF0ADDE0000803F00000000CEE06F3ECD72F93EB6F37D3F048DB93D5C3FB63EBF52AD3BB0 +Len=100 +Name=send - BGVs + +[Preset15] +Data=38627672EF5EEDFE02000000010000000000000002000000000000000200000001000000000000000200000000000000280000000000000000000000EFBEADDE0DF0ADDEEF3B353FEF3B353F4695653FA435163F0000803FF706DF3C0000803F22DB903BF3 +Len=100 +Name=sink - dark corridor + +[Preset16] +Data=38627672EF5EEDFE02000000010000000000000002000000000000000200000001000000000000000200000000000000280000000000000000000000EFBEADDE0DF0ADDEEF3B353FEF3B353F78B8613FD28AEF3E9CC4003FB3ECC93C2D65C13E736B193A46 +Len=100 +Name=sink - kick rvb + +[Preset17] +Data=38627672EF5EEDFE02000000010000000000000002000000000000000200000001000000000000000200000000000000280000000000000000000000EFBEADDE0DF0ADDEEF3B353FEF3B353F035C743FDDB5043D508D573F000000002AE62E3F9F8DA23BC6 +Len=100 +Name=sink - wide wide + +[Preset18] +Data=38627672EF5EEDFE02000000010000000000000002000000000000000200000001000000000000000200000000000000280000000000000000000000EFBEADDE0DF0ADDEEF3B353F2AE00C3FA435163EDDB5043D2DB21D3F000000002AE62E3FB5310F3B87 +Len=100 +Name=sink - discrete room + +[Preset19] +Data=38627672EF5EEDFE02000000010000000000000002000000000000000200000001000000000000000200000000000000280000000000000000000000EFBEADDE0DF0ADDEEF3B353F2AE00C3FA435163EDDB5043D2DB21D3FC5CA283E2AE62E3FB5310F3B7C +Len=100 +Name=sink - flutterize + +[Preset2] +Data=38627672EF5EEDFE02000000010000000000000002000000000000000200000001000000000000000200000000000000280000000000000000000000EFBEADDE0DF0ADDEF143363F0000803F315D903E06838B3D0000803F18249D3DDABF9C3E1DC7F83B20 +Len=100 +Name=insert - Club Snare + +[Preset20] +Data=38627672EF5EEDFE02000000010000000000000002000000000000000200000001000000000000000200000000000000280000000000000000001000EFBEADDE0DF0ADDECBFFAA3E0AD1603FA9697B3FEC51B83D0000803FEC51B83D8A27FB3EEC0A153C00556C747261736368616C6C202D20436875726368001000000061 +Len=126 +Name=Ultraschall - Church + +[Preset21] +Data=38627672EF5EEDFE02000000010000000000000002000000000000000200000001000000000000000200000000000000280000000000000000000000EFBEADDE0DF0ADDECE53D63E1E42113F0000000006838B3E0000803F000000002AE62E3FB5310F3B00556C747261736368616C6C202D20536D616C6C20526F6F6D0000000000F1 +Len=130 +Name=Ultraschall - Small Room + +[Preset22] +Data=38627672EF5EEDFE02000000010000000000000002000000000000000200000001000000000000000200000000000000280000000000000000000000EFBEADDE0DF0ADDECB6A103FECF7F13EECC01D3FA0DF773D0000803F000000000000803FA368763C00556C747261736368616C6C202D204C6172676520526F6F6D00000000004C +Len=130 +Name=Ultraschall - Large Room + +[Preset3] +Data=38627672EF5EEDFE02000000010000000000000002000000000000000200000001000000000000000200000000000000280000000000000000000000EFBEADDE0DF0ADDE9BCE7E3F0000803F6F63173FB6A2313F0000803F98DD133CAE60503C6314853BD5 +Len=100 +Name=insert - Rocket Snare + +[Preset4] +Data=38627672EF5EEDFE02000000010000000000000002000000000000000200000001000000000000000200000000000000280000000000000000000000EFBEADDE0DF0ADDEC368063F0000803F6005F83B0000803F79E9463FACAD583DD878593EBF52AD3BE7 +Len=100 +Name=insert - Snare subtle touch of life + +[Preset5] +Data=38627672EF5EEDFE02000000010000000000000002000000000000000200000001000000000000000200000000000000280000000000000000000000EFBEADDE0DF0ADDE0000803F000000008FE02A3FDD96E83E0000803F98DD133CC8DDF63C6B882B3B8F +Len=100 +Name=Send - Cannon Toms + +[Preset6] +Data=38627672EF5EEDFE02000000010000000000000002000000000000000200000001000000000000000200000000000000280000000000000000000000EFBEADDE0DF0ADDEA4CEF43E0000803F0132943DCEE06F3E0000003F1FBDE13C6C5B183E9BA8B73DFA +Len=100 +Name=insert - Snappy Kick + +[Preset7] +Data=38627672EF5EEDFE02000000010000000000000002000000000000000200000001000000000000000200000000000000280000000000000000000000EFBEADDE0DF0ADDEF9F4B03E0000803F2717833DCEE06F3E0000003F98DD133C4F48503E6314853BFE +Len=100 +Name=insert - Mono Kick Ambience + +[Preset8] +Data=38627672EF5EEDFE02000000010000000000000002000000000000000200000001000000000000000200000000000000280000000000000000000000EFBEADDE0DF0ADDE2B40893E0000803FA0DF773DAC8B3F3F0000803FCD72F93DF051213F20D0A43C2A +Len=100 +Name=insert - Bomb Toms + +[Preset9] +Data=38627672EF5EEDFE02000000010000000000000002000000000000000200000001000000000000000200000000000000280000000000000000000000EFBEADDE0DF0ADDEEF3B353F47395F3F6F63173F1FBDE13C0000803F00000000F0D3233DC8DDF63C42 +Len=100 +Name=insert - Cymbal Softener + diff --git a/presets/vst-reaxcomp.ini b/presets/vst-reaxcomp.ini new file mode 100644 index 0000000..12fcfb7 --- /dev/null +++ b/presets/vst-reaxcomp.ini @@ -0,0 +1,54 @@ +[General] +LastDefImpTime=1512519081 +NbPresets=10 + +[Preset0] +Data=71656572EE5EEDFE02000000010000000000000002000000000000000200000001000000000000000200000000000000C400000001000000000000003800000003000000161C109F50396340000000000000F03FE5184B313739C13F35643C4A25FCF73F4C37894160E500401C000000E3000000640000000600000088F9B80103CBB740000000000000F03F19008B93759DC13F35643C4A25FCF73F000000000000000025000000AB0000009C00000006000000FDFFFFFFFF6FD740000000000000F03F34E4BAC334F2C03F35643C4A25FCF73F17D9CEF753E3F53F0C000000330000005000000006000000010000000100000081847DF80FE8F53F000000005C +Len=256 +Name=griz: super smooth 3 band + +[Preset1] +Data=71656572EE5EEDFE02000000010000000000000002000000000000000200000001000000000000000200000000000000FC00000001000000000000003800000004000000BE644F7C82AA5540000000000000F03F96683BD536A2BC3FAAF8BF232AB40F404C37894160E5004014000000C10000001400000007000000ECE61F993D419240000000000000F03F19008B93759DC13F1A5CEDD4E590F43F00000000000000000F0000006A00000013000000060000006219C3903EA5BF40000000000000F03F34E4BAC334F2C03F0D83C8BB2BF8F63F00000000000000000C000000450000001100000006000000000000000070D740000000000000F03F2066B20CAC52C03F0000000000000040FA7E6ABC7493C83F0C0000001C0000000200000006000000010000000100000020793C074DDBF53F00000000D4 +Len=312 +Name=griz: supersolid2 + +[Preset2] +Data=71656572EE5EEDFE02000000010000000000000002000000000000000200000001000000000000000200000000000000C40000000100000000000000380000000300000045B4BB9760C56840000000000000F03FF36AE33C1A72C03F1D93C5FD47A6F33FB81E85EB51B8EE3F1C000000B000000005000000060000006C93A7D5F93CBF40000000000000F03F2F15A0D5667EB93F7FFB3A70CE88F23FB81E85EB51B8EE3F12000000480000002000000006000000FDFFFFFFFF6FD740000000000000F03FA591F0B74C2EC03F1D93C5FD47A6F33FB81E85EB51B8EE3F0800000014000000500000000600000001000000010000008B728DF9A228F43F000000003F +Len=256 +Name=griz: mastering 3 band : smile + +[Preset3] +Data=71656572EE5EEDFE02000000010000000000000002000000000000000200000001000000000000000200000000000000C40000000100000000000000380000000300000045B4BB9760C56840000000000000F03FF36AE33C1A72C03F1D93C5FD47A6F33FB81E85EB51B8EE3F1C0000006E00000005000000000000006C93A7D5F93CBF40000000000000F03F2F15A0D5667EB93F7FFB3A70CE88F23FB81E85EB51B8EE3F12000000480000000500000000000000FDFFFFFFFF6FD740000000000000F03FA591F0B74C2EC03F1D93C5FD47A6F33FB81E85EB51B8EE3F0800000014000000070000000000000001000000010000008B728DF9A228F43F0000000087 +Len=256 +Name=griz: mastering 3 band electro + +[Preset4] +Data=71656572EE5EEDFE02000000010000000000000002000000000000000200000001000000000000000200000000000000A401000001000000000000003800000007000000C5E6908FBE1A5940000000000000F03FF36AE33C1A72C03F1D93C5FD47A6F33FB81E85EB51B8EE3F1C000000C60000000500000006000000054B674D34198F40000000000000F03F34EFC71C600FC03F7FFB3A70CE88F23FB81E85EB51B8EE3F120000007300000020000000060000003C134DFFB959B240000000000000F03F34EFC71C600FC03F228AC91B60E6F63FB81E85EB51B8EE3F12000000730000002000000006000000C4FDA05ED1E6BC40000000000000F03F365F72E80FB3BA3F8C7DC9C6832D0440B81E85EB51B8EE3F120000008D0000002000000002000000E9632EE47596C540000000000000F03FD7E6A1EEBA72B23F61C3D32B65790240B81E85EB51B8EE3F1200000048000000200000000200000014ACADCD12D1CF40000000000000F03F1B41630B9031B63F2716F88A6E3D0040B81E85EB51B8EE3F12000000140000002000000002000000FDFFFFFFFF6FD740000000000000F03F42EFC71C600FC03F2716F88A6E3D0040B81E85EB51B8EE3F120000000F000000200000000200000001000000010000008B728DF9A228F43F00000000FF +Len=480 +Name=griz: hardness remover + +[Preset5] +Data=71656572EE5EEDFE02000000010000000000000002000000000000000200000001000000000000000200000000000000C400000001000000000000003800000003000000C5E6908FBE1A5940000000000000F03F000000000000C03F1D93C5FD47A6F33FB81E85EB51B8EE3F1C000000B000000005000000060000009B2AD24EF119C140000000000000F03F37EFC71C600FC03F7FFB3A70CE88F23FB81E85EB51B8EE3F12000000480000002000000006000000FDFFFFFFFF6FD740000000000000F03F000000000000C03F1D93C5FD47A6F33FB81E85EB51B8EE3F080000000C000000500000000600000001000000010000008B728DF9A228F43F000000001E +Len=256 +Name=griz: mastering 3 band + +[Preset6] +Data=71656572EE5EEDFE02000000010000000000000002000000000000000200000001000000000000000200000000000000FC00000001000000000000003800000004000000BE644F7C82AA5540000000000000F03F4C9C8A7743B3A53F5C7605C158A7F93F000000000000000022000000CC0000001300000001000000ECE61F993D419240000000000000F03F1D15A0D5667EB93F1A5CEDD4E590F43F000000000000000014000000CC00000013000000060000006219C3903EA5BF40000000000000F03FA0EBE076F862B43F0D83C8BB2BF8F63F000000000000000014000000560000001100000006000000000000000070D740000000000000F03F15DB049CF02BAF3F0000000000000040FA7E6ABC7493C83F0A0000000C00000002000000020000000100000001000000000000000000F03F000000007B +Len=312 +Name=griz: supersolid bass, nice opto mids + +[Preset7] +Data=71656572EE5EEDFE02000000010000000000000002000000000000000200000001000000000000000200000000000000FC00000001000000000000003800000004000000BE644F7C82AA5540000000000000F03FB192484723E4C23F5C7605C158A7F93F000000000000000028000000EF0000001300000002000000ECE61F993D419240000000000000F03FFD81520652F6BB3F1A5CEDD4E590F43F00000000000000000F0000006A00000013000000020000006219C3903EA5BF40000000000000F03F21533815CC59B53F0D83C8BB2BF8F63F00000000000000000C000000450000001100000002000000000000000070D740000000000000F03F4E8CB19B45E7B13F0000000000000040FA7E6ABC7493C83F0C0000001C00000002000000020000000100000001000000460BF2CCA00DF23F00000000EE +Len=312 +Name=griz: spectral control + +[Preset8] +Data=71656572EE5EEDFE02000000010000000000000002000000000000000200000001000000000000000200000000000000C400000001000000000000003800000003000000A74D2018B502B640000000000000F03F000000000000C03F3D484F9143C4F03F00000000000000000F000000950000000500000000000000F4A1870C0177C340000000000000F03FD065B405D9A0853FE4839ECDAA754440000000000000000003000000000000000D00000000000000FDFFFFFFFF6FD740000000000000F03F000000000000C03F000000000000F03F00000000000000000F0000009500000005000000020000000100000001000000000000000000F03F0000000073 +Len=256 +Name=griz: female de-ess (change band 2 for your singer) + +[Preset9] +Data=71656572EE5EEDFE02000000010000000000000002000000000000000200000001000000000000000200000000000000C400000001000000000000003800000003000000141FFE8181A0B440000000000000F03F000000000000C03F3D484F9143C4F03F00000000000000000F0000009500000005000000000000002806F21416A9BD40000000000000F03FD065B405D9A0853FE4839ECDAA754440000000000000000003000000000000000D00000000000000FDFFFFFFFF6FD740000000000000F03F000000000000C03F000000000000F03F00000000000000000F0000009500000005000000000000000100000001000000000000000000F03F00000000AC +Len=256 +Name=griz: male de-ess (change band 2 freqs for your singer) + diff --git a/reaninjam.ini b/reaninjam.ini new file mode 100644 index 0000000..d5cc947 --- /dev/null +++ b/reaninjam.ini @@ -0,0 +1,16 @@ +[ninjam] +lc_0=0 source '1024' bc 1 mute 0 solo 0 volume 1.000000 pan 0.000000 jesus 0 flag 0 name `default channel` +lc_cnt=1 +mastermute=0 +masterpan=0.000000 +mastervol=1.000000 +metromute=0 +metropan=0.000000 +metrovol=0.500000 +wnd_div1=0 +wnd_h=480 +wnd_state=0 +wnd_w=812 +wnd_x=224 +wnd_y=148 + diff --git a/reaper-auplugins64-bc.ini b/reaper-auplugins64-bc.ini new file mode 100644 index 0000000..ef1f21f --- /dev/null +++ b/reaper-auplugins64-bc.ini @@ -0,0 +1,27 @@ +AU "jackosx.com: JACK-insert" "ElementiCaotici JackAudioServer Insert" 1635083896 2 +AU "Apple: AUBandpass" "Apple's bandpass filter unit" 1635083896 2 +AU "Apple: AUDynamicsProcessor" "Apple's compressor/expander" 1635083896 2 +AU "Apple: AUDelay" "Apple's time delay unit" 1635083896 2 +AU "Apple: AUDistortion" "Apple's distortion unit" 1635083896 2 +AU "Apple: AUFilter" "Apple's multi-band filter" 1635083896 2 +AU "Apple: AUGraphicEQ" "Apple's graphic EQ unit" 1635083896 2 +AU "Apple: AUHipass" "Apple's highpass filter unit" 1635083896 2 +AU "Apple: AUHighShelfFilter" "Apple's high shelf filter unit" 1635083896 2 +AU "Apple: AUPeakLimiter" "Apple's peak limiter unit" 1635083896 2 +AU "Apple: AULowpass" "Apple's lowpass filter unit" 1635083896 2 +AU "Apple: AULowShelfFilter" "Apple's low shelf filter unit" 1635083896 2 +AU "Apple: AUMultibandCompressor" "Apple's four-band compressor" 1635083896 2 +AU "Apple: AUMatrixReverb" "Apple's matrix reverb unit" 1635083896 2 +AU "Apple: AUNBandEQ" "Apple's N-band Graphic Equalizer" 1635083896 2 +AU "Apple: AUNetSend" "Transmit audio to AU Network Receiver" 1635083896 2 +AU "Apple: AUParametricEQ" "Apple's parametric EQ unit" 1635083896 2 +AU "Apple: RoundTripAAC" "Apple's AAC encode then decode unit" 1635083896 2 +AU "Apple: AURogerBeep" "Apple's Roger beep unit" 1635083896 2 +AU "Apple: AUSampleDelay" "Delays samples on input by specified number of samples to output" 1635083896 2 +AU "Apple: AUPitch" "Apple's pitch-shifter" 1635083896 2 +AU "Apple: AUAudioFilePlayer" "Apple's audio file player" 1635084142 2 +AU "Apple: AUNetReceive" "Receive audio from AU Network Sender" 1635084142 2 +AU "Apple: AUScheduledSoundPlayer" "Apple's scheduled sound player" 1635084142 2 +AU "FXpansion: BFD2" "BFD2 AU" 1635085685 2 +AU "Apple: DLSMusicDevice" "Apple's DLS or SoundFont based software synthesizer" 1635085685 2 +AU "Apple: AUSampler" "Apple's mono-timbral software sampler/synthesizer" 1635085685 2 diff --git a/reaper-auplugins64.ini b/reaper-auplugins64.ini new file mode 100644 index 0000000..b4a5702 --- /dev/null +++ b/reaper-auplugins64.ini @@ -0,0 +1,41 @@ +[auplugins] +Apple: AUAudioFilePlayer= +Apple: AUBandpass= +Apple: AUDelay= +Apple: AUDistortion= +Apple: AUDynamicsProcessor= +Apple: AUFilter= +Apple: AUGraphicEQ= +Apple: AUHighShelfFilter= +Apple: AUHipass= +Apple: AULowpass= +Apple: AULowShelfFilter= +Apple: AUMatrixReverb= +Apple: AUMIDISynth= +Apple: AUMultibandCompressor= +Apple: AUNBandEQ= +Apple: AUNetReceive= +Apple: AUNetSend= +Apple: AUNewPitch= +Apple: AUParametricEQ= +Apple: AUPeakLimiter= +Apple: AUPitch= +Apple: AUReverb2= +Apple: AURogerBeep= +Apple: AURoundTripAAC= +Apple: AUSampleDelay= +Apple: AUSampler= +Apple: AUScheduledSoundPlayer= +Apple: AUSpeechSynthesis= +Apple: DLSMusicDevice= +Apple: RoundTripAAC= +beDSP.net: L-Normalizer= +FXpansion: BFD2= +ITSR: StudioLink= +ITSR: StudioLinkOnAir= +jackosx.com: JACK-insert= +Klangfreund: LUFS Meter= +StudioLinkOnAir= +StudioLinkOnAir (ITSR)= +Ultraschall: Soundboard= + diff --git a/reaper-defpresets.ini b/reaper-defpresets.ini new file mode 100644 index 0000000..ed376d3 --- /dev/null +++ b/reaper-defpresets.ini @@ -0,0 +1,11 @@ +[defaultpresets] +au-Apple: AUDynamicsProcessor=Ultraschall +js-dynamics/general_dynamics=Ultraschall (soft noisegate) +js-dynamics/Ultraschall_Dynamics=Basic +vst-reacomp=Ultraschall - Ducking +vst-reacomp.vst=Ultraschall - Ducking +vst-reaeq=Ultraschall3 +vst-reaeq.vst=Ultraschall3 +vst-reaverbate=Ultraschall - Church +vst-reaverbate.vst=Ultraschall - Church + diff --git a/reaper-dxplugins64.ini b/reaper-dxplugins64.ini new file mode 100644 index 0000000..572f34a --- /dev/null +++ b/reaper-dxplugins64.ini @@ -0,0 +1,18 @@ +[{6A08CF80-0E18-11CF-A24D-0020AFD79767}] +Name=ACM Wrapper +Load=0 +[{17CCA71B-ECD7-11D0-B908-00A0C9223196}] +Name=Tee/Sink-to-Sink-Konvertierung +Load=0 +[{B86F6BEE-E7C0-4D03-8D52-5B4430CF6C88}] +Name=ffdshow Audio Processor +Load=0 +[{C1F400A0-3F08-11D3-9F0B-006008039E37}] +Name=SampleGrabber +Load=0 +[{F8388A40-D5BB-11D0-BE5A-0080C706568E}] +Name=Infinite Pin Tee Filter +Load=0 +[{E55A0B49-2F73-44D4-AD66-48966DED31BA}] +Name=Media Center Extender Encryption Filter +Load=0 diff --git a/reaper-extstate.ini b/reaper-extstate.ini new file mode 100644 index 0000000..267488c --- /dev/null +++ b/reaper-extstate.ini @@ -0,0 +1,25 @@ +[ultraschall_bom] +found_items=8 +item_1=Ultraschall REAPER Extension 3.1 +item_2=Ultraschall REAPER Theme 3.1 +item_3=UltraschallHub 1.0.1 +item_4=Ultraschall Soundboard 3.1.0 +item_5=StudioLink Plug-in 17.03.1 +item_6=StudioLink OnAir Plug-in 17.03.1 +item_7=SWS REAPER Extension 2.9.7 +item_8=REAPER 5.70 + +[ultraschall_update] +last_update_check=1.519e+09 +update_check=1 + +[ultraschall_versions] +plugin=20180114 +theme=20180114 + +[Ultraschall_Windows] +Ultraschall 3=-1.0 +Ultraschall Color Picker=0.0 +Ultraschall Export Assistant=0.0 +Ultraschall Routing Snapshots=0.0 + diff --git a/reaper-fxfolders.ini b/reaper-fxfolders.ini new file mode 100644 index 0000000..5786475 --- /dev/null +++ b/reaper-fxfolders.ini @@ -0,0 +1,38 @@ +[Folder0] +Item0=/Applications/REAPER64.app/Contents/Plugins/FX/reaeq.vst.dylib +Item1=/Users/ralfstockmann/Library/Audio/Plug-ins/VST/Soundboard.vst +Item2=/Library/Audio/Plug-ins/VST/Soundboard.vst +Item3=/Applications/REAPER64.app/Contents/Plugins/FX/reacomp.vst.dylib +Item4=/Applications/REAPER64.app/Contents/Plugins/FX/reaverbate.vst.dylib +Item5=Ultraschall: Soundboard +Item6=ITSR: StudioLink +Item7=IT-Service Sebastian Reimers: StudioLinkLive +Item8=/Applications/REAPER64.app/Contents/Plugins/FX/reafir.vst.dylib +Item9=loser/MGA_JSLimiter +Item10=ITSR: StudioLinkOnAir +Item11=dynamics/Ultraschall_Dynamics +Item12=/Applications/Ultraschall.app/Contents/Plugins/FX/reaeq.vst.dylib +Item13=/Applications/Ultraschall.app/Contents/Plugins/FX/reafir.vst.dylib +Item14=/Applications/Ultraschall.app/Contents/Plugins/FX/reacomp.vst.dylib +Nb=15 +Type0=3 +Type1=3 +Type2=3 +Type3=3 +Type4=3 +Type5=5 +Type6=5 +Type7=5 +Type8=3 +Type9=2 +Type10=5 +Type11=2 +Type12=3 +Type13=3 +Type14=3 + +[Folders] +Id0=0 +Name0=Favorites +NbFolders=1 + diff --git a/reaper-fxtags.ini b/reaper-fxtags.ini new file mode 100644 index 0000000..4db84cf --- /dev/null +++ b/reaper-fxtags.ini @@ -0,0 +1,101 @@ +[category] +reacast.vst.dylib=External +reacomp.vst.dylib=Dynamics +reacontrolMIDI.vst.dylib=MIDI +readelay.vst.dylib=Delay +reaeq.vst.dylib=EQ +reafir.vst.dylib=Tools +reagate.vst.dylib=Gate +reainsert.vst.dylib=External +reaninjam.vst.dylib=External +reapitch.vst.dylib=Pitch Correction +reasamplomatic.vst.dylib=Sampler +reastream.vst.dylib=External +reasurround.vst.dylib=Surround +reasyndr.vst.dylib=Synth +reasynth.vst.dylib=Synth +reatune.vst.dylib=Tuner +reaverb.vst.dylib=Reverb +reaverbate.vst.dylib=Reverb +reavocode.vst.dylib=Tools +reavoice.vst.dylib=Tools +reaxcomp.vst.dylib=Dynamics +reacast.dll=External +reacomp.dll=Dynamics +reacontrolmidi.dll=MIDI +readelay.dll=Delay +reaeq.dll=EQ +reafir.dll=Tools +reagate.dll=Gate +reainsert.dll=External +reaninjam.dll=External +reapitch.dll=Pitch Correction +reasamplomatic.dll=Sampler +reastream.dll=External +reasurround.dll=Surround +reasyndr.dll=Synth +reasynth.dll=Synth +reatune.dll=Tuner +reaverb.dll=Reverb +reaverbate.dll=Reverb +reavocode.dll=Tools +reavoice.dll=Tools +reaxcomp.dll=Dynamics +MT_PowerDrumKit.dll=Synth + +[developer] +Apple: AUMIDISynth=Apple +Apple: AUNBandEQ=Apple +Apple: AUNewPitch=Apple +Apple: AUReverb2=Apple +Apple: AURoundTripAAC=Apple +beDSP.net: L-Normalizer=beDSP.net +ITSR: StudioLink=ITSR +ITSR: StudioLinkOnAir=ITSR +jackosx.com: JACK-insert=jackosx.com +Klangfreund: LUFS Meter=Klangfreund +reacast.vst.dylib=Cockos +reacomp.vst.dylib=Cockos +reacontrolMIDI.vst.dylib=Cockos +readelay.vst.dylib=Cockos +reaeq.vst.dylib=Cockos +reafir.vst.dylib=Cockos +reagate.vst.dylib=Cockos +reainsert.vst.dylib=Cockos +reaninjam.vst.dylib=Cockos +reapitch.vst.dylib=Cockos +reasamplomatic.vst.dylib=Cockos +reastream.vst.dylib=Cockos +reasurround.vst.dylib=Cockos +reasyndr.vst.dylib=Cockos +reasynth.vst.dylib=Cockos +reatune.vst.dylib=Cockos +reaverb.vst.dylib=Cockos +reaverbate.vst.dylib=Cockos +reavocode.vst.dylib=Cockos +reavoice.vst.dylib=Cockos +reaxcomp.vst.dylib=Cockos +Ultraschall: Soundboard=Ultraschall + +reacast.dll=Cockos +reacomp.dll=Cockos +reacontrolmidi.dll=Cockos +readelay.dll=Cockos +reaeq.dll=Cockos +reafir.dll=Cockos +reagate.dll=Cockos +reainsert.dll=Cockos +reaninjam.dll=Cockos +reapitch.dll=Cockos +reasamplomatic.dll=Cockos +reastream.dll=Cockos +reasurround.dll=Cockos +reasyndr.dll=Cockos +reasynth.dll=Cockos +reatune.dll=Cockos +reaverb.dll=Cockos +reaverbate.dll=Cockos +reavocode.dll=Cockos +reavoice.dll=Cockos +reaxcomp.dll=Cockos +MT_PowerDrumKit.dll=MANDA AUDIO diff --git a/reaper-hwoutfx.ini b/reaper-hwoutfx.ini new file mode 100644 index 0000000..0724b14 --- /dev/null +++ b/reaper-hwoutfx.ini @@ -0,0 +1,4 @@ +WNDRECT 46 458 724 387 +SHOW 0 +LASTSEL 0 +DOCKED 1 diff --git a/reaper-install-rev.txt b/reaper-install-rev.txt new file mode 100644 index 0000000..1d96fa9 Binary files /dev/null and b/reaper-install-rev.txt differ diff --git a/reaper-install.ini b/reaper-install.ini new file mode 100644 index 0000000..9e25685 --- /dev/null +++ b/reaper-install.ini @@ -0,0 +1,10 @@ +[REAPERinst] +jsdata=1 +reaper_host32=1 +reaper_host64=1 +reamote=1 +rearoute=0 +rewire=0 +desktop=0 +startmenu=0 +assoc=0 diff --git a/reaper-joystick.ini b/reaper-joystick.ini new file mode 100644 index 0000000..8aa9bfe --- /dev/null +++ b/reaper-joystick.ini @@ -0,0 +1,10 @@ +[reaper_joysticks] +dev0=1 "{00000000-0000-0000-1400-000000000000}" "" 0 - +dev1=1 "{00000000-0000-0000-1500-0000F8000000}" "" 0 - +dev2=1 "{00000000-0000-0000-1500-0000F8000000}" "" 0 - +dev3=1 "{00000000-0000-0000-1500-0000F8000000}" "" 0 - +dev4=1 "{00000000-0000-0000-1500-0000F8000000}" "" 0 - +dev5=1 "{00000000-0000-0000-1500-0000F8000000}" "" 0 - +dev6=1 "{00000000-0000-0000-0000-000000000000}" "" 0 - +numdev=1 + diff --git a/reaper-jsfx.ini b/reaper-jsfx.ini new file mode 100644 index 0000000..ab3d23a --- /dev/null +++ b/reaper-jsfx.ini @@ -0,0 +1,491 @@ +VERSION 1 +NAME analysis/compscope "JS: compscope_src -> compressor -> compscope" +NAME analysis/compscope_src "JS: compscope_src -> compressor -> compscope [analysis/compscope_src]" +NAME analysis/fft_noise_generator "JS: fft noise generator" +NAME analysis/gain_reduction_scope "JS: Gain Reduction Scope (Cockos)" +NAME analysis/gfxanalyzer "JS: Frequency Spectrum Analyzer Meter (Cockos)" +NAME analysis/gfxscope "JS: Oscilloscope Meter (Cockos)" +NAME analysis/gfxspectrograph "JS: Spectrograph Spectrogram Meter (Cockos)" +NAME analysis/spectropaint "JS: Spectropaint Synthesis" +NAME analysis/WigMCVUMeter "JS: WigWare Multi-channel Peak VU Meter" +NAME analysis/zoomanalyzer "JS: Zoom Analyzer Demo" +NAME delay/delay "JS: Delay" +NAME delay/delay_chfun "JS: Delay w/Stereo Bounce" +NAME delay/delay_chorus "JS: Delay w/Chorus" +NAME delay/delay_lowres "JS: Delay (Lo-Fi)" +NAME delay/delay_sustain "JS: Delay w/Sustain" +NAME delay/delay_tone "JS: Delay w/Tone Control" +NAME delay/delay_varlen "JS: Delay w/LFO-Modulated Length" +NAME delay/fft-delay "JS: FFT delayer" +NAME delay/scratchy "JS: scratchy" +NAME delay/time_adjustment "JS: Time Adjustment Delay" +NAME dynamics/general_dynamics "JS: General Dynamics (Cockos)" +NAME dynamics/Ultraschall_Dynamics "JS: Ultraschall Dynamics (Ultraschall.fm)" +NAME filters/autopeakfilter "JS: FFT Peak-Following Filter" +NAME filters/bandpass "JS: band pass filter" +NAME filters/dc_remove "JS: DC Filter" +NAME filters/fft-filter "JS: New FFT filter" +NAME filters/FIR_8 "JS: 8 tap FIR filter" +NAME filters/lowpass "JS: low pass filter" +NAME filters/mdct-filter "JS: MDCT Filter" +NAME filters/mdct-volsweep "JS: MDCT Sweeping Filter" +NAME filters/parametric_eq "JS: parametric equalizer" +NAME filters/resonantlowpass "JS: Resonant Lowpass Filter" +NAME filters/spectro_filter_paint "JS: Spectropaint Filter" +NAME filters/sweepinglowpass "JS: Sweeping Resonant Lowpass Filter" +NAME guitar/amp-model "JS: Convolution Amp/Cab Modeler" +NAME guitar/amp-model-dual "JS: Convolution Dual Amp Modeler" +NAME guitar/chorus "JS: Chorus" +NAME guitar/distort-fuzz "JS: Distortion (Fuzz)" +NAME guitar/distortion "JS: Distortion" +NAME guitar/flanger "JS: Flanger" +NAME guitar/phaser "JS: 4-Tap Phaser" +NAME guitar/tremolo "JS: Tremolo" +NAME guitar/wah "JS: Wah-Wah" +NAME ix/MIDI_CCRider "JS: MIDI CC LFO Generator" +NAME ix/MIDI_DuplicateFilter "JS: MIDI Duplicate Note Filter" +NAME ix/MIDI_KeyMap "JS: MIDI Map To Key v2" +NAME ix/MIDI_KeySnap "JS: MIDI Snap To Key" +NAME ix/MIDI_Router "JS: MIDI Router/Transpose" +NAME ix/MIDI_Tool "JS: MIDI Tool" +NAME "ix/MIDI_Tool II" "JS: MIDI Tool v2" +NAME ix/MIDI_Variant "JS: MIDI Pattern/Scale Variation Generator" +NAME "ix/MIDI_Velocifier II" "JS: MIDI Velocity Variation Generator" +NAME ix/MIDI_Wobulator "JS: MIDI Pitch Wheel LFO" +NAME ix/Mixer_8xM-1xS "JS: 8x Mono to 1x Stereo Mixer" +NAME ix/Mixer_8xS-1xS "JS: 8x Stereo to 1x Stereo Mixer" +NAME ix/PhaseAdjustingRouter "JS: Channel Router w/Polarity" +NAME ix/StereoPhaseInvert "JS: Channel Polarity Control" +NAME ix/Switcher "JS: 8 channel input switcher" +NAME ix/Switcher2 "JS: 8-Channel Input Switcher" +NAME ix/SwixMitch "JS: SwixMitch (4x Stereo In, 2 Bus X-Fader)" +NAME Liteon/3bandpeakfilter "JS: 3-Band Peak Filter" +NAME Liteon/applefilter12db "JS: Apple 2-Pole Lowpass Filter" +NAME Liteon/applefilter72db "JS: Apple 12-Pole Filter" +NAME Liteon/bassmanager "JS: Bass Manager/Booster" +NAME Liteon/butterworth24db "JS: Butterworth 4-Pole Filter" +NAME Liteon/cheby24db "JS: Chebyshev 4-Pole Filter" +NAME Liteon/deesser "JS: De-esser" +NAME Liteon/lorenzattractor "JS: Lorenz Attractor" +NAME Liteon/moog24db "JS: Moog 4-Pole Filter" +NAME Liteon/nonlinear "JS: Non-Linear Processor" +NAME Liteon/np1136peaklimiter "JS: NP1136 Peak Limiter" +NAME Liteon/pinknoisegen "JS: Pink Noise Generator" +NAME Liteon/presenceeq "JS: Presence EQ" +NAME Liteon/pseudostereo "JS: MDA Pseudo-Stereo" +NAME Liteon/rbjstereofilter12db "JS: RBJ Stereo Image Filter" +NAME Liteon/ringmodulator "JS: Ring Modulator" +NAME Liteon/shelvingfilter "JS: Shelving Filter" +NAME Liteon/simplelp6db "JS: Simple 1-Pole Filter" +NAME Liteon/statevariable "JS: State Variable Morphing Filter" +NAME Liteon/tilteq "JS: Tilt Equalizer" +NAME Liteon/vumetergfx "JS: VU Meter" +NAME Liteon/vumetergfxsum "JS: VU Meter (Summed)" +NAME Liteon/waveshapermulti "JS: Multi Waveshaper" +NAME loopsamplers/autoloop "JS: Auto Looper" +NAME loopsamplers/loopsampler-granul "JS: Granular Loop Sampler" +NAME loopsamplers/loopsampler-m2 "JS: Loop Sampler" +NAME loopsamplers/loopsampler-m2-midi "JS: Loop Sampler w/MIDI Triggers" +NAME loopsamplers/super8 "JS: Super8 MIDI-controlled synchronized looper (Cockos)" +NAME loser/3BandEQ "JS: 3-Band EQ" +NAME loser/3BandJoiner "JS: 3-Band Joiner" +NAME loser/3BandSplitter "JS: 3-Band Splitter" +NAME loser/4BandEQ "JS: 4-Band EQ" +NAME loser/4BandJoiner "JS: 4-Band Joiner" +NAME loser/4BandSplitter "JS: 4-Band Splitter" +NAME loser/50HzKicker "JS: 50 Hz Kicker" +NAME loser/5BandJoiner "JS: 5-Band Joiner" +NAME loser/5BandSplitter "JS: 5-Band Splitter" +NAME loser/amplitudeModulator "JS: Amplitude Modulator" +NAME loser/CenterCanceler "JS: Center Canceler" +NAME loser/Compciter "JS: Compciter" +NAME loser/DDC "JS: Digital Drum Compressor" +NAME loser/DVC2JS "JS: Digital Versatile Compressor v2" +NAME loser/DVCJS "JS: Digital Versatile Compressor" +NAME loser/Exciter "JS: Exciter" +NAME loser/gfxGoniometer "JS: Goniometer" +NAME loser/gmemReceive "JS: gmem Receive" +NAME loser/gmemSend "JS: gmem Send" +NAME loser/masterLimiter "JS: Master Limiter" +NAME loser/MGA_JSLimiter "JS: MGA JS Limiter" +NAME loser/MGA_JSLimiterST "JS: MGA JS Limiter (Unlinked Stereo)" +NAME loser/MIDI_EQ_Ducker "JS: MIDI EQ Ducker" +NAME loser/phaseMeter "JS: Channel Phase Meter" +NAME loser/ppp "JS: Ping Pong Pan" +NAME loser/Saturation "JS: Saturation" +NAME loser/SP1LimiterJS "JS: Simple Peak-1 Limiter" +NAME loser/stereo "JS: Stereo Upmix" +NAME loser/stereoEnhancer "JS: Stereo Enhancer" +NAME loser/StereoField "JS: Stereo Field Manipulator" +NAME loser/TimeDelayer "JS: Channel Time Delayer" +NAME loser/timeDifferencePan "JS: Time Difference Pan" +NAME loser/transhape "JS: Transhape (for Drums)" +NAME loser/TransientController "JS: Transient Controller" +NAME loser/TransientKiller "JS: Transient Killer" +NAME loser/UpwardExpander "JS: Upward Expander" +NAME loser/waveShapingDstr "JS: Waveshaping Distortion" +NAME loser/WhiteNoise "JS: White Noise Generator" +NAME loser/ZeroCrossingMaximizer "JS: Zero Crossing Maximizer" +NAME meters/dynamics_meter "JS: Dynamic Range Meter" +NAME meters/tonemeter "JS: tone meter (left channel only) -- doesnt really work" +NAME meters/tuner "JS: schmitt-triggering tuner" +NAME meters/vumeter "JS: VU meter" +NAME midi/drumtrigger "JS: Audio To MIDI Drum Trigger" +NAME midi/midi_arp "JS: MIDI Arpeggiator" +NAME midi/midi_CC_mapper "JS: MIDI CC Mapper" +NAME midi/midi_choke "JS: MIDI Choke" +NAME midi/midi_chorderizer "JS: MIDI Chorderizer" +NAME midi/midi_chordkey "JS: MIDI Chord In Key" +NAME midi/midi_delay "JS: MIDI Delay" +NAME midi/midi_eater "JS: midi eater" +NAME midi/midi_logger "JS: MIDI Logger" +NAME midi/midi_maptokey "JS: MIDI Map To Key" +NAME midi/midi_note2channel "JS: MIDI Route Note To Channel" +NAME midi/midi_note_filter "JS: MIDI Note Filter" +NAME midi/midi_note_hold "JS: MIDI Note Hold" +NAME midi/midi_note_repeater "JS: MIDI Note Repeater" +NAME midi/midi_transpose "JS: MIDI Transpose Notes" +NAME midi/midi_velocitycontrol "JS: MIDI Velocity Control" +NAME midi/midinoteondelay "JS: MIDI Note-On Delay" +NAME midi/mtc_logger "JS: MTC Logger" +NAME midi/program_bank_onload "JS: MIDI Program/Bank Switch on Load" +NAME midi/sequencer_baby "JS: MIDI Sequencer Baby" +NAME midi/sequencer_baby_v2 "JS: MIDI Sequencer Baby v2" +NAME midi/sequencer_megababy "JS: MIDI Sequencer Megababy" +NAME misc/adpcm_simulator "JS: ADPCM Simulator" +NAME misc/noisegate "JS: noise gate (simple)" +NAME misc/reverseness "JS: Delay w/Reverseness" +NAME misc/tonifier "JS: Tonifier" +NAME misc/tonifier2 "JS: Tonifier v2" +NAME old_unsupported/bitred "JS: bit depth reduction" +NAME old_unsupported/dither "JS: Bit Reduction/Dither" +NAME pitch/fft-ps "JS: New FFT pitch-experimenter" +NAME pitch/mdct-shift "JS: MDCT Shifter" +NAME pitch/octavedown "JS: Pitch an Octave Down" +NAME pitch/octaveup "JS: Pitch an Octave Up" +NAME pitch/pitch2 "JS: Pitch Down-Shifter 2" +NAME pitch/pitchdown "JS: Pitch Down-Shifter" +NAME pitch/superpitch "JS: Pitch Shifter 2" +NAME remaincalm_org/avocado_glitch "JS: Avocado Ducking Glitch Generator" +NAME remaincalm_org/floaty_delay "JS: Delay (Floaty)" +NAME remaincalm_org/paranoia_mangler "JS: Paranoia Mangler" +NAME remaincalm_org/tonegate "JS: Tone Gate" +NAME sault-4xlimiter/sault-4xlimiter.txt "JS: sault :: 4x oversampled peak limiter" +NAME schwa/audio_statistics "JS: Audio Statistics" +NAME schwa/fft_splitter "JS: FFT Splitter" +NAME schwa/gaussian_noise_generator "JS: Gaussian Noise Generator" +NAME schwa/midi_examine "JS: MIDI Examiner" +NAME schwa/midi_humanizer "JS: MIDI Velocity and Timing Humanizer" +NAME schwa/midi_modal_randomness "JS: MIDI Modal Randomness" +NAME schwa/soft_clipper "JS: Soft Clipper/Limiter" +NAME sstillwell/1175 "JS: 1175 Compressor" +NAME sstillwell/3x3 "JS: 3x3 EQ" +NAME sstillwell/3x3_6dbSlope "JS: 3x3 EQ (1-Pole Crossover)" +NAME sstillwell/4x4 "JS: 4x4 EQ" +NAME sstillwell/autoexpand "JS: Auto Expander" +NAME sstillwell/badbussmojo "JS: Bad Buss Mojo Waveshaper" +NAME sstillwell/badbussmojo_aa "JS: Bad Buss Mojo Waveshaper w/AA" +NAME sstillwell/chorus "JS: Chorus (Improved Shaping)" +NAME sstillwell/chorus_stereo "JS: Chorus (Stereo)" +NAME sstillwell/delay_pong "JS: Delay w/Tempo Ping-Pong" +NAME sstillwell/delay_tempo "JS: Delay w/Tempo Length" +NAME sstillwell/dirtsqueeze "JS: Dirt Squeeze Compressor" +NAME sstillwell/drumtrigger "JS: Turn audio signal into velocity-sensitive drum trigger" +NAME sstillwell/eventhorizon "JS: Event Horizon Clipper" +NAME sstillwell/eventhorizon2 "JS: Event Horizon Limiter/Clipper" +NAME sstillwell/exciter "JS: Exciter (Treble Enhancer)" +NAME sstillwell/expander "JS: Downward Expander" +NAME sstillwell/expressbus "JS: Express Bus Compressor" +NAME sstillwell/fairlychildish "JS: Fairly Childish Compressor/Limiter" +NAME sstillwell/fairlychildish2 "JS: Fairly Childish Stereo Compressor/Limiter" +NAME sstillwell/flangebaby "JS: Flange Baby" +NAME sstillwell/hpflpf "JS: RBJ Highpass/Lowpass Filters" +NAME sstillwell/hugebooty "JS: Huge Booty Bass Enhancer" +NAME sstillwell/louderizer "JS: Louderizer" +NAME sstillwell/louderizer_lpf "JS: Louderizer LP" +NAME sstillwell/majortom "JS: Major Tom Compressor" +NAME sstillwell/mastertom "JS: Master Tom Compressor" +NAME sstillwell/ozzifier "JS: Ozzifier Chorus" +NAME sstillwell/randomizer "JS: MIDI Note Randomize" +NAME sstillwell/rbj1073 "JS: RBJ 1073 EQ" +NAME sstillwell/rbj4eq "JS: RBJ 4-Band Semi-Parametric EQ" +NAME sstillwell/rbj7eq "JS: RBJ 7-Band Graphic EQ" +NAME sstillwell/realoud "JS: ReaLoud" +NAME sstillwell/realoud_lpf "JS: ReaLoud LP" +NAME sstillwell/stereowidth "JS: Stereo Width" +NAME sstillwell/thunderkick "JS: Thunderkick" +NAME sstillwell/volscale "JS: MIDI Velocity Scaler/Compressor" +NAME sstillwell/width "JS: Subtractive Stereo Enhancer" +NAME synthesis/midi_drumseq "JS: MIDI drum sequencer" +NAME synthesis/sine_sweep "JS: Sine Sweep Generator" +NAME synthesis/spectral_hold "JS: Spectral Hold (Cockos)" +NAME synthesis/tonegenerator "JS: Tone Generator" +NAME Teej/rbj12eq-teej "JS: RBJ 12-Band EQ w/HPF" +NAME Teej/rbj4eq-teej "JS: RBJ 4-Band Semi-Parametric EQ v2" +NAME Teej/rbj4notch-teej "JS: RBJ 4-Band Notch Filter" +NAME "Till/Auto-Wideness v1.0" "JS: Auto-Wideness" +NAME "Till/Transient-driven Auto-Pan v1.0 (Master)" "JS: Transient-Driven Auto-Pan (Master)" +NAME "Till/Transient-driven Auto-Pan v1.0 (Slave)" "JS: Transient-Driven Auto-Pan (Slave)" +NAME "Till/Transient-driven Auto-Pan v1.1 (Master)" "JS: Transient-Driven Auto-Pan v1.1 (Master)" +NAME "Till/Transient-driven Auto-Pan v1.1 (Slave)" "JS: Transient-Driven Auto-Pan v1.1 (Slave)" +NAME utility/bufsave "JS: buffer save/restore" +NAME utility/chanmix2 "JS: Stereo Channel Volume/Pan/Polarity Control" +NAME utility/channelmixer "JS: Channel Mixer" +NAME utility/dither_psycho "JS: Bit Reduction/Dither w/Noise Shaping" +NAME utility/KanakaMS5 "JS: Mid/Side Decoder" +NAME utility/KanakaMSEncoder1 "JS: Mid/Side Encoder" +NAME utility/limiter "JS: hard limiter" +NAME utility/phase_adjust "JS: Phase Rotator" +NAME utility/smpte_ltc_reader "JS: SMPTE LTC Reader/Meter" +NAME utility/vca_master "JS: VCA Master" +NAME utility/vca_slave "JS: VCA Slave" +NAME utility/volume "JS: Volume Adjustment" +NAME utility/volume_pan "JS: Volume/Pan Smoother" +NAME utility/volume_pan_sample_accurate_auto "JS: Volume/Pan Smoother v5" +NAME waveshapers/graphdist "JS: Graphical Waveshaper" +NAME waveshapers/graphdist-dyn "JS: Graphical Dynamic Waveshaper" +REV "1175 Compressor" sstillwell/1175 +REV "3-Band EQ" loser/3BandEQ +REV "3-Band Joiner" loser/3BandJoiner +REV "3-Band Peak Filter" Liteon/3bandpeakfilter +REV "3-Band Splitter" loser/3BandSplitter +REV "3x3 EQ" sstillwell/3x3 +REV "3x3 EQ (1-Pole Crossover)" sstillwell/3x3_6dbSlope +REV "4-Band EQ" loser/4BandEQ +REV "4-Band Joiner" loser/4BandJoiner +REV "4-Band Splitter" loser/4BandSplitter +REV "4-Tap Phaser" guitar/phaser +REV "4x4 EQ" sstillwell/4x4 +REV "5-Band Joiner" loser/5BandJoiner +REV "5-Band Splitter" loser/5BandSplitter +REV "50 Hz Kicker" loser/50HzKicker +REV "8 channel input switcher" ix/Switcher +REV "8 tap FIR filter" filters/FIR_8 +REV "8-Channel Input Switcher" ix/Switcher2 +REV "8x Mono to 1x Stereo Mixer" ix/Mixer_8xM-1xS +REV "8x Stereo to 1x Stereo Mixer" ix/Mixer_8xS-1xS +REV "ADPCM Simulator" misc/adpcm_simulator +REV "Amplitude Modulator" loser/amplitudeModulator +REV "Apple 12-Pole Filter" Liteon/applefilter72db +REV "Apple 2-Pole Lowpass Filter" Liteon/applefilter12db +REV "Audio Statistics" schwa/audio_statistics +REV "Audio To MIDI Drum Trigger" midi/drumtrigger +REV "Auto Expander" sstillwell/autoexpand +REV "Auto Looper" loopsamplers/autoloop +REV Auto-Wideness "Till/Auto-Wideness v1.0" +REV "Avocado Ducking Glitch Generator" remaincalm_org/avocado_glitch +REV "Bad Buss Mojo Waveshaper" sstillwell/badbussmojo +REV "Bad Buss Mojo Waveshaper w/AA" sstillwell/badbussmojo_aa +REV "Bass Manager/Booster" Liteon/bassmanager +REV "Bit Reduction/Dither" old_unsupported/dither +REV "Bit Reduction/Dither w/Noise Shaping" utility/dither_psycho +REV "Butterworth 4-Pole Filter" Liteon/butterworth24db +REV "Center Canceler" loser/CenterCanceler +REV "Channel Mixer" utility/channelmixer +REV "Channel Phase Meter" loser/phaseMeter +REV "Channel Polarity Control" ix/StereoPhaseInvert +REV "Channel Router w/Polarity" ix/PhaseAdjustingRouter +REV "Channel Time Delayer" loser/TimeDelayer +REV "Chebyshev 4-Pole Filter" Liteon/cheby24db +REV Chorus guitar/chorus +REV "Chorus (Improved Shaping)" sstillwell/chorus +REV "Chorus (Stereo)" sstillwell/chorus_stereo +REV Compciter loser/Compciter +REV "Convolution Amp/Cab Modeler" guitar/amp-model +REV "Convolution Dual Amp Modeler" guitar/amp-model-dual +REV "DC Filter" filters/dc_remove +REV De-esser Liteon/deesser +REV Delay delay/delay +REV "Delay (Floaty)" remaincalm_org/floaty_delay +REV "Delay (Lo-Fi)" delay/delay_lowres +REV "Delay w/Chorus" delay/delay_chorus +REV "Delay w/LFO-Modulated Length" delay/delay_varlen +REV "Delay w/Reverseness" misc/reverseness +REV "Delay w/Stereo Bounce" delay/delay_chfun +REV "Delay w/Sustain" delay/delay_sustain +REV "Delay w/Tempo Length" sstillwell/delay_tempo +REV "Delay w/Tempo Ping-Pong" sstillwell/delay_pong +REV "Delay w/Tone Control" delay/delay_tone +REV "Digital Drum Compressor" loser/DDC +REV "Digital Versatile Compressor" loser/DVCJS +REV "Digital Versatile Compressor v2" loser/DVC2JS +REV "Dirt Squeeze Compressor" sstillwell/dirtsqueeze +REV Distortion guitar/distortion +REV "Distortion (Fuzz)" guitar/distort-fuzz +REV "Downward Expander" sstillwell/expander +REV "Dynamic Range Meter" meters/dynamics_meter +REV "Event Horizon Clipper" sstillwell/eventhorizon +REV "Event Horizon Limiter/Clipper" sstillwell/eventhorizon2 +REV Exciter loser/Exciter +REV "Exciter (Treble Enhancer)" sstillwell/exciter +REV "Express Bus Compressor" sstillwell/expressbus +REV "FFT Peak-Following Filter" filters/autopeakfilter +REV "FFT Splitter" schwa/fft_splitter +REV "FFT delayer" delay/fft-delay +REV "Fairly Childish Compressor/Limiter" sstillwell/fairlychildish +REV "Fairly Childish Stereo Compressor/Limiter" sstillwell/fairlychildish2 +REV "Flange Baby" sstillwell/flangebaby +REV Flanger guitar/flanger +REV "Frequency Spectrum Analyzer Meter (Cockos)" analysis/gfxanalyzer +REV "Gain Reduction Scope (Cockos)" analysis/gain_reduction_scope +REV "Gaussian Noise Generator" schwa/gaussian_noise_generator +REV "General Dynamics (Cockos)" dynamics/general_dynamics +REV Goniometer loser/gfxGoniometer +REV "Granular Loop Sampler" loopsamplers/loopsampler-granul +REV "Graphical Dynamic Waveshaper" waveshapers/graphdist-dyn +REV "Graphical Waveshaper" waveshapers/graphdist +REV "Huge Booty Bass Enhancer" sstillwell/hugebooty +REV "Loop Sampler" loopsamplers/loopsampler-m2 +REV "Loop Sampler w/MIDI Triggers" loopsamplers/loopsampler-m2-midi +REV "Lorenz Attractor" Liteon/lorenzattractor +REV Louderizer sstillwell/louderizer +REV "Louderizer LP" sstillwell/louderizer_lpf +REV "MDA Pseudo-Stereo" Liteon/pseudostereo +REV "MDCT Filter" filters/mdct-filter +REV "MDCT Shifter" pitch/mdct-shift +REV "MDCT Sweeping Filter" filters/mdct-volsweep +REV "MGA JS Limiter" loser/MGA_JSLimiter +REV "MGA JS Limiter (Unlinked Stereo)" loser/MGA_JSLimiterST +REV "MIDI Arpeggiator" midi/midi_arp +REV "MIDI CC LFO Generator" ix/MIDI_CCRider +REV "MIDI CC Mapper" midi/midi_CC_mapper +REV "MIDI Choke" midi/midi_choke +REV "MIDI Chord In Key" midi/midi_chordkey +REV "MIDI Chorderizer" midi/midi_chorderizer +REV "MIDI Delay" midi/midi_delay +REV "MIDI Duplicate Note Filter" ix/MIDI_DuplicateFilter +REV "MIDI EQ Ducker" loser/MIDI_EQ_Ducker +REV "MIDI Examiner" schwa/midi_examine +REV "MIDI Logger" midi/midi_logger +REV "MIDI Map To Key" midi/midi_maptokey +REV "MIDI Map To Key v2" ix/MIDI_KeyMap +REV "MIDI Modal Randomness" schwa/midi_modal_randomness +REV "MIDI Note Filter" midi/midi_note_filter +REV "MIDI Note Hold" midi/midi_note_hold +REV "MIDI Note Randomize" sstillwell/randomizer +REV "MIDI Note Repeater" midi/midi_note_repeater +REV "MIDI Note-On Delay" midi/midinoteondelay +REV "MIDI Pattern/Scale Variation Generator" ix/MIDI_Variant +REV "MIDI Pitch Wheel LFO" ix/MIDI_Wobulator +REV "MIDI Program/Bank Switch on Load" midi/program_bank_onload +REV "MIDI Route Note To Channel" midi/midi_note2channel +REV "MIDI Router/Transpose" ix/MIDI_Router +REV "MIDI Sequencer Baby" midi/sequencer_baby +REV "MIDI Sequencer Baby v2" midi/sequencer_baby_v2 +REV "MIDI Sequencer Megababy" midi/sequencer_megababy +REV "MIDI Snap To Key" ix/MIDI_KeySnap +REV "MIDI Tool" ix/MIDI_Tool +REV "MIDI Tool v2" "ix/MIDI_Tool II" +REV "MIDI Transpose Notes" midi/midi_transpose +REV "MIDI Velocity Control" midi/midi_velocitycontrol +REV "MIDI Velocity Scaler/Compressor" sstillwell/volscale +REV "MIDI Velocity Variation Generator" "ix/MIDI_Velocifier II" +REV "MIDI Velocity and Timing Humanizer" schwa/midi_humanizer +REV "MIDI drum sequencer" synthesis/midi_drumseq +REV "MTC Logger" midi/mtc_logger +REV "Major Tom Compressor" sstillwell/majortom +REV "Master Limiter" loser/masterLimiter +REV "Master Tom Compressor" sstillwell/mastertom +REV "Mid/Side Decoder" utility/KanakaMS5 +REV "Mid/Side Encoder" utility/KanakaMSEncoder1 +REV "Moog 4-Pole Filter" Liteon/moog24db +REV "Multi Waveshaper" Liteon/waveshapermulti +REV "NP1136 Peak Limiter" Liteon/np1136peaklimiter +REV "New FFT filter" filters/fft-filter +REV "New FFT pitch-experimenter" pitch/fft-ps +REV "Non-Linear Processor" Liteon/nonlinear +REV "Oscilloscope Meter (Cockos)" analysis/gfxscope +REV "Ozzifier Chorus" sstillwell/ozzifier +REV "Paranoia Mangler" remaincalm_org/paranoia_mangler +REV "Phase Rotator" utility/phase_adjust +REV "Ping Pong Pan" loser/ppp +REV "Pink Noise Generator" Liteon/pinknoisegen +REV "Pitch Down-Shifter" pitch/pitchdown +REV "Pitch Down-Shifter 2" pitch/pitch2 +REV "Pitch Shifter 2" pitch/superpitch +REV "Pitch an Octave Down" pitch/octavedown +REV "Pitch an Octave Up" pitch/octaveup +REV "Presence EQ" Liteon/presenceeq +REV "RBJ 1073 EQ" sstillwell/rbj1073 +REV "RBJ 12-Band EQ w/HPF" Teej/rbj12eq-teej +REV "RBJ 4-Band Notch Filter" Teej/rbj4notch-teej +REV "RBJ 4-Band Semi-Parametric EQ" sstillwell/rbj4eq +REV "RBJ 4-Band Semi-Parametric EQ v2" Teej/rbj4eq-teej +REV "RBJ 7-Band Graphic EQ" sstillwell/rbj7eq +REV "RBJ Highpass/Lowpass Filters" sstillwell/hpflpf +REV "RBJ Stereo Image Filter" Liteon/rbjstereofilter12db +REV ReaLoud sstillwell/realoud +REV "ReaLoud LP" sstillwell/realoud_lpf +REV "Resonant Lowpass Filter" filters/resonantlowpass +REV "Ring Modulator" Liteon/ringmodulator +REV "SMPTE LTC Reader/Meter" utility/smpte_ltc_reader +REV Saturation loser/Saturation +REV "Shelving Filter" Liteon/shelvingfilter +REV "Simple 1-Pole Filter" Liteon/simplelp6db +REV "Simple Peak-1 Limiter" loser/SP1LimiterJS +REV "Sine Sweep Generator" synthesis/sine_sweep +REV "Soft Clipper/Limiter" schwa/soft_clipper +REV "Spectral Hold (Cockos)" synthesis/spectral_hold +REV "Spectrograph Spectrogram Meter (Cockos)" analysis/gfxspectrograph +REV "Spectropaint Filter" filters/spectro_filter_paint +REV "Spectropaint Synthesis" analysis/spectropaint +REV "State Variable Morphing Filter" Liteon/statevariable +REV "Stereo Channel Volume/Pan/Polarity Control" utility/chanmix2 +REV "Stereo Enhancer" loser/stereoEnhancer +REV "Stereo Field Manipulator" loser/StereoField +REV "Stereo Upmix" loser/stereo +REV "Stereo Width" sstillwell/stereowidth +REV "Subtractive Stereo Enhancer" sstillwell/width +REV "Super8 MIDI-controlled synchronized looper (Cockos)" loopsamplers/super8 +REV "Sweeping Resonant Lowpass Filter" filters/sweepinglowpass +REV "SwixMitch (4x Stereo In, 2 Bus X-Fader)" ix/SwixMitch +REV Thunderkick sstillwell/thunderkick +REV "Tilt Equalizer" Liteon/tilteq +REV "Time Adjustment Delay" delay/time_adjustment +REV "Time Difference Pan" loser/timeDifferencePan +REV "Tone Gate" remaincalm_org/tonegate +REV "Tone Generator" synthesis/tonegenerator +REV Tonifier misc/tonifier +REV "Tonifier v2" misc/tonifier2 +REV "Transhape (for Drums)" loser/transhape +REV "Transient Controller" loser/TransientController +REV "Transient Killer" loser/TransientKiller +REV "Transient-Driven Auto-Pan (Master)" "Till/Transient-driven Auto-Pan v1.0 (Master)" +REV "Transient-Driven Auto-Pan (Slave)" "Till/Transient-driven Auto-Pan v1.0 (Slave)" +REV "Transient-Driven Auto-Pan v1.1 (Master)" "Till/Transient-driven Auto-Pan v1.1 (Master)" +REV "Transient-Driven Auto-Pan v1.1 (Slave)" "Till/Transient-driven Auto-Pan v1.1 (Slave)" +REV Tremolo guitar/tremolo +REV "Turn audio signal into velocity-sensitive drum trigger" sstillwell/drumtrigger +REV "Ultraschall Dynamics (Ultraschall.fm)" dynamics/Ultraschall_Dynamics +REV "Upward Expander" loser/UpwardExpander +REV "VCA Master" utility/vca_master +REV "VCA Slave" utility/vca_slave +REV "VU Meter" Liteon/vumetergfx +REV "VU Meter (Summed)" Liteon/vumetergfxsum +REV "VU meter" meters/vumeter +REV "Volume Adjustment" utility/volume +REV "Volume/Pan Smoother" utility/volume_pan +REV "Volume/Pan Smoother v5" utility/volume_pan_sample_accurate_auto +REV Wah-Wah guitar/wah +REV "Waveshaping Distortion" loser/waveShapingDstr +REV "White Noise Generator" loser/WhiteNoise +REV "WigWare Multi-channel Peak VU Meter" analysis/WigMCVUMeter +REV "Zero Crossing Maximizer" loser/ZeroCrossingMaximizer +REV "Zoom Analyzer Demo" analysis/zoomanalyzer +REV "band pass filter" filters/bandpass +REV "bit depth reduction" old_unsupported/bitred +REV "buffer save/restore" utility/bufsave +REV "compscope_src -> compressor -> compscope" analysis/compscope +REV "compscope_src -> compressor -> compscope [analysis/compscope_src]" analysis/compscope_src +REV "fft noise generator" analysis/fft_noise_generator +REV "gmem Receive" loser/gmemReceive +REV "gmem Send" loser/gmemSend +REV "hard limiter" utility/limiter +REV "low pass filter" filters/lowpass +REV "midi eater" midi/midi_eater +REV "noise gate (simple)" misc/noisegate +REV "parametric equalizer" filters/parametric_eq +REV "sault :: 4x oversampled peak limiter" sault-4xlimiter/sault-4xlimiter.txt +REV "schmitt-triggering tuner" meters/tuner +REV scratchy delay/scratchy +REV "tone meter (left channel only) -- doesnt really work" meters/tonemeter diff --git a/reaper-kb.ini b/reaper-kb.ini new file mode 100644 index 0000000..1b4dc4b --- /dev/null +++ b/reaper-kb.ini @@ -0,0 +1,287 @@ +ACT 0 0 "Ultraschall_Remove_Silence" "ULTRASCHALL: Remove silence" 40421 40760 +ACT 0 0 "Ultraschall_Insert_ChapterMarker" "ULTRASCHALL: Insert chapter markers at the start of every item" 40421 _XENAKIOS_CRTMARKERSFROMITEMS1 +ACT 0 0 "Ultraschall_Activate_CoughButton" "ULTRASCHALL: Activate cough button for selected tracks" 40866 40867 40403 40888 +ACT 0 0 "Ultraschall_ZoomToSelection" "ULTRASCHALL: Zoom to selection 40031" _Ultraschall_Remove_Studiolink_FX +ACT 0 0 "Ultraschall_ResetPlaybackRate_and_RenderProject" "ULTRASCHALL: Reset playback rate and render project..." 40296 40521 40015 +ACT 0 0 "Ultraschall_FocusPosition" "Custom: ULTRASCHALL: Focus position" _BR_FOCUS_ARRANGE_WND _BR_FOCUS_TRACKS 40150 +ACT 0 0 "Ultraschall_Slice_and_AddMetadata" "Custom: ULTRASCHALL: Slice and add metadata" 40061 _XENAKIOS_RENMTAKE +ACT 0 0 "Ultraschall_FocusZoomIn" "Custom: ULTRASCHALL: Focus zoom in" _BR_FOCUS_TRACKS 1012 +ACT 0 0 "Ultraschall_ImportChapterMarkersFromWav" "Custom: ULTRASCHALL: Import chapter markers from wav" 40182 40692 40289 +ACT 0 0 "Ultraschall_SkipLoopPlayback" "Custom: ULTRASCHALL: Skip loop playback" 40630 41666 41666 41666 41666 40317 +ACT 0 0 "Ultraschall_MP3_Render" "Custom: ULTRASCHALL MP3 Render" 40521 40015 +ACT 0 0 "Ultraschall_Unselect_All" "Custom: ULTRASCHALL: Unselect" 0 _SWS_UNSELALL 40020 +ACT 0 0 "Ultraschall_SkipLoopPlayback_Absolute" "Custom: ULTRASCHALL: Skip loop playback absolute" 40630 _XENAKIOS_MOVECURRLEFTCONFSECS 40317 +ACT 0 0 "Ultraschall_PlayFromInpoint" "Custom: ULTRASCHALL: Play from inpoint" 40630 1007 +ACT 0 0 "Ultraschall_PlayFromOutpoint" "Custom: ULTRASCHALL: Play from outpoint" 40631 1007 +ACT 0 0 "Ultraschall_Zoom_In_Horizontal" "Custom: ULTRASCHALL: Zoom-in horizontal" _Ultraschall_Pause_Follow_One_Cycle 1012 +ACT 0 0 "Ultraschall_Zoom_Out_Horizontal" "Custom: ULTRASCHALL: Zoom out horizontal" _Ultraschall_Pause_Follow_One_Cycle 1011 +ACT 0 0 "Ultraschall_Play_From_Editcursor_Position" "Custom: ULTRASCHALL: Play from editcursor position" _Ultraschall_Pause_Follow_One_Cycle 1007 +SCR 4 0 Ultraschall_Pause_Follow_One_Cycle "Custom: ULTRASCHALL: Pause follow-mode one check cycle" ultraschall_pause_follow.lua +SCR 4 0 Ultraschall_Set_Edit "Custom: ULTRASCHALL: Insert edit marker*" ultraschall_set_edit.lua +SCR 4 0 Ultraschall_Insert_Chapter_Marker_Back_In_Time "Custom: ULTRASCHALL: Insert chapter marker back in time*" ultraschall_set_edit_past.lua +SCR 4 0 Ultraschall_Delete_Last_Marker "Custom: ULTRASCHALL: Delete last marker*" ultraschall_delete_last_marker.lua +SCR 4 0 Ultraschall_Set_Marker "Custom: ULTRASCHALL: Insert chapter marker*" ultraschall_set_marker.lua +SCR 4 0 Ultraschall_Set_NamedMarker "Custom: ULTRASCHALL: Insert chapter marker and edit name...*" ultraschall_set_namedmarker.lua +SCR 4 0 Ultraschall_Safemode_Start_Stop "Custom: ULTRASCHALL: Start/stop (safemode)*" ultraschall_safemode_start_stop.lua +SCR 4 0 Ultraschall_Safemode_Start_Pause "Custom: ULTRASCHALL: Start/pause (safemode)*" ultraschall_safemode_start_pause.lua +SCR 4 0 Ultraschall_Select_Track1 "Custom: ULTRASCHALL: Toggle track 1 selection*" ultraschall_select_track1.lua +SCR 4 0 Ultraschall_Select_Track2 "Custom: ULTRASCHALL: Toggle track 2 selection*" ultraschall_select_track2.lua +SCR 4 0 Ultraschall_Select_Track3 "Custom: ULTRASCHALL: Toggle track 3 selection*" ultraschall_select_track3.lua +SCR 4 0 Ultraschall_Select_Track4 "Custom: ULTRASCHALL: Toggle track 4 selection*" ultraschall_select_track4.lua +SCR 4 0 Ultraschall_Select_Track5 "Custom: ULTRASCHALL: Toggle track 5 selection*" ultraschall_select_track5.lua +SCR 4 0 Ultraschall_Select_Track6 "Custom: ULTRASCHALL: Toggle track 6 selection*" ultraschall_select_track6.lua +SCR 4 0 Ultraschall_Select_Track7 "Custom: ULTRASCHALL: Toggle track 7 selection*" ultraschall_select_track7.lua +SCR 4 0 Ultraschall_Select_Track8 "Custom: ULTRASCHALL: Toggle track 8 selection*" ultraschall_select_track8.lua +SCR 4 0 Ultraschall_Mute_Envelope "Custom: ULTRASCHALL: Mute envelope button*" ultraschall_mute_envelope.lua +SCR 4 0 Ultraschall_Midi_Dump "Custom: ULTRASCHALL: Midi dump" ultraschall_midi_dump.lua +SCR 4 0 Ultraschall_Trim_Loop "Custom: ULTRASCHALL: Trim loop" ultraschall_trim_loop.lua +SCR 4 0 Ultraschall_Trim_Inpoint "Custom: ULTRASCHALL: Trim inpoint" ultraschall_trim_inpoint.lua +SCR 4 0 Ultraschall_Trim_Outpoint "Custom: ULTRASCHALL: Trim outpoint" ultraschall_trim_outpoint.lua +SCR 4 0 Ultraschall_Trim_Inpoint_Absolut "Custom: ULTRASCHALL: Trim inpoint absolute" ultraschall_trim_inpoint_absolut.lua +SCR 4 0 Ultraschall_OnAir "Custom: ULTRASCHALL: OnAir with Studiolink" ultraschall_onair.lua +SCR 4 0 Ultraschall_Remove_Studiolink_FX "Custom: ULTRASCHALL: Remove StudioLink FX from all tracks*" ultraschall_remove_studiolink_fx.lua +SCR 4 0 Ultraschall_Set_Colors_To_Sonic_Rainboom "Custom: ULTRASCHALL: Set colors to Gentle Sonic Rainboom*" ultraschall_set_colors_to_sonic_rainboom.lua +SCR 4 0 Ultraschall_Set_Colors_To_Sonic_Rainboom_Spread "Custom: ULTRASCHALL: Set colors to Adjusted Sonic Rainboom*" ultraschall_set_colors_to_sonic_rainboom_spread.lua +SCR 4 0 Ultraschall_Get_ID3_Tags "Custom: ULTRASCHALL: Get ID3 tags" ultraschall_get_id3_tags.lua +SCR 4 0 Ultraschall_Edit_ID3_Tags "Custom: ULTRACHALL: Edit ID3 metadata*" ultraschall_edit_id3_tags.lua +SCR 4 0 Ultraschall__Startup "Custom: ULTRASCHALL: __startup" __startup.lua +SCR 4 0 Ultraschall_Set_View_Setup "Custom: ULTRASCHALL: Set view Setup" ultraschall_set_view_setup.lua +SCR 4 0 Ultraschall_Set_View_Record "Custom: ULTRASCHALL: Set view Record" ultraschall_set_view_record.lua +SCR 4 0 Ultraschall_Set_View_Story "Custom: ULTRASCHALL: Set view Story" ultraschall_set_view_story.lua +SCR 4 0 Ultraschall_Set_View_Edit "Custom: ULTRASCHALL: Set view Edit" ultraschall_set_view_edit.lua +SCR 4 0 Ultraschall_Toggle_Mouse_Selection "ULTRASCHALL: Toggle mouse selection" ultraschall_toggle_mouse_selection.lua +SCR 4 0 Ultraschall_Reset_FirstStart "Custom: ULTRASCHALL: Reset firststart" ultraschall_reset_firststart.lua +SCR 516 0 Ultraschall_StartScreen "Custom: ULTRASCHALL: Startscreen" ultraschall_startscreen.lua +SCR 516 0 Ultraschall_ColorPicker "Custom: ULTRASCHALL: Colorpicker" ultraschall_colorpicker.lua +SCR 4 0 Ultraschall_Midi_Move_Start_Of_Time_Selection "Custom: ULTRASCHALL: Midi move start of time-selection" ultraschall_midi_move_start_of_time_slection.lua +SCR 4 0 Ultraschall_Midi_Move_End_Of_Time_Selection "Custom: ULTRASCHALL: Midi move end of time-selection" ultraschall_midi_move_end_of_time_slection.lua +SCR 516 0 Ultraschall_Export_Assistant "Custom: ULTRASCHALL: Export assistant" ultraschall_export_assistant.lua +SCR 4 0 Ultraschall_KeyMap "Custom: ULTRASCHALL: Keymap" ultraschall_keymap.lua +SCR 4 0 Ultraschall_Open_Project_Folder "Custom: ULTRASCHALL: Open project-folder" ultraschall_open_project_folder.lua +SCR 4 0 Ultraschall_Select_StudioLink "Custom: ULTRASCHALL: Select Studiolink" ultraschall_select_studiolink.lua +SCR 4 0 Ultraschall_Prepare_For_Editing "Custom: ULTRASCHALL: Prepare for editing" ultraschall_prepare_for_editing.lua +SCR 4 0 Ultraschall_MetaData "Custom: ULTRASCHALL: Metadata" ultraschall_metadata.lua +SCR 4 0 Ultraschall_Ripple_Cut "Custom: ULTRASCHALL: Ripplecut" ultraschall_ripple_cut.lua +SCR 4 0 Ultraschall_Toggle_Track_Height "Custom: ULTRASCHALL: Toggle trackheight" ultraschall_toggle_track_height.lua +SCR 4 0 Ultraschall_Routing_Snapshots_Functions "Custom: ULTRASCHALL: Routing snapshots-functions" ultraschall_routing_snapshots_functions.lua +SCR 4 0 Ultraschall_Gui_Lib "Custom: ULTRASCHALL: Gui-lib" ultraschall_gui_lib.lua +SCR 4 0 Ultraschall_Snapshot_Write_4 "Custom: ULTRASCHALL: Snapshot write 4" ultraschall_snapshot_write_4.lua +SCR 4 0 Ultraschall_Snapshot_Write_3 "Custom: ULTRASCHALL: Snapshot write 3" ultraschall_snapshot_write_3.lua +SCR 4 0 Ultraschall_Snapshot_Write_2 "Custom: ULTRASCHALL: Snapshot write 2" ultraschall_snapshot_write_2.lua +SCR 4 0 Ultraschall_Snapshot_Write_1 "Custom: ULTRASCHALL: Snapshot write 1" ultraschall_snapshot_write_1.lua +SCR 516 0 Ultraschall_Snapshot_4 "Custom: ULTRASCHALL: Snapshot 4" ultraschall_snapshot_4.lua +SCR 516 0 Ultraschall_Snapshot_3 "Custom: ULTRASCHALL: Snapshot 3" ultraschall_snapshot_3.lua +SCR 516 0 Ultraschall_Snapshot_2 "Custom: ULTRASCHALL: Snapshot 2" ultraschall_snapshot_2.lua +SCR 516 0 Ultraschall_Snapshot_1 "Custom: ULTRASCHALL: Snapshot 1" ultraschall_snapshot_1.lua +SCR 516 0 Ultraschall_Snapshot_Editor "Custom: ULTRASCHALL: Snapshot editor" ultraschall_snapshot_editor.lua +SCR 4 0 Ultraschall_Slice "Custom: ULTRASCHALL: Slice" ultraschall_slice.lua +SCR 4 0 Ultraschall_Toggle_Safemode_Recording "Custom: ULTRASCHALL Toolbox: Toggle safemode for recording" ultraschall_toggle_safemode_recording.lua +SCR 4 0 Ultraschall_Toggle_Safemode_Recording_Message "Custom: ULTRASCHALL Toolbox: Toggle safemode for recording and status show message" ultraschall_toggle_safemode_recording_message.lua +SCR 4 0 Ultraschall_Toggle_Peak_Gain_Normal_Max "Custom: ULTRASCHALL: Toggle peak gain normal max*" ultraschall_toggle_peak_gain_normal_max.lua +SCR 4 0 Ultraschall_Toggle_Follow "Custom: ULTRASCHALL: Toggle Followmode" ultraschall_toggle_follow.lua +SCR 260 0 Ultraschall_Toggle_Reset "Custom: ULTRASCHALL: Followmode reset on stopped scrolling" ultraschall_followmode_reset.lua +SCR 4 0 Ultraschall_Set_Next_Planned_Marker "Custom: ULTRASCHALL: Set next planned marker" ultraschall_set_next_planned_marker.lua +SCR 4 0 Ultraschall_Mute_Selected_Items_In_Time_Range "Custom: ULTRASCHALL: Mute selected items in time-range" ultraschall_mute_selected_items_in_time_range.lua +SCR 4 0 Ultraschall_Unmute_Selected_Items_In_Time_Range "Custom: ULTRASCHALL: Unmute selected items in time-range" ultraschall_unmute_selected_items_in_time_range.lua +SCR 4 0 Ultraschall_Toggle_Envelope_Height "Custom: ULTRASCHALL: Toggle envelope height" ultraschall_toggle_envelope_height.lua +SCR 4 0 Ultraschall_Mastermind "Custom: ULTRASCHALL: Mastermind" ultraschall_mastermind.lua +SCR 4 0 Ultraschall_Toggle_Arrange_Zoom "Custom: ULTRASCHALL: Toggle arrange zoom" ultraschall_toggle_arrange_zoom.lua +SCR 4 0 Ultraschall_Import_Markers_As_Planned_From_Clipboard "Custom: ULTRASCHALL: Import markers as planned from clipboard" ultraschall_import_markers_as_planned_from_clipboard.lua +SCR 4 0 Ultraschall_Set_All_Markers_To_Planning_Stage "Custom: ULTRASCHALL: Set all markers to planning stage" ultraschall_set_all_markers_to_planning_stage.lua +SCR 4 0 Ultraschall_Set_Mute_To_Time_Selection "Custom: ULTRASCHALL: Set mute to time-selection" ultraschall_set_mute_to_time_selection.lua +SCR 4 0 Ultraschall_Center_Arrangeview_To_Cursor "Custom: ULTRASCHALL Toolbox: Center arrangeview to Cursorposition" ultraschall_center_arrangeview_to_cursor.lua +ACT 1 0 "Ultraschall_ZoomIn_Center_To_Cursorposition" "Custom: ULTRASCHALL: zoom in centered to cursorposition" _WOL_SETHZOOMC_EDITPLAYCUR 1012 _WOL_SETHZOOMC_MOUSECUR +ACT 1 0 "Ultraschall_ZoomOut_Center_To_Cursorposition" "Custom: ULTRASCHALL: zoom out centered to cursorposition" _WOL_SETHZOOMC_EDITPLAYCUR _Ultraschall_ZoomOut_Limiter _WOL_SETHZOOMC_MOUSECUR +SCR 4 0 Ultraschall_Toggle_All_Track_Recarm_States "Custom: ULTRASCHALL Toolbox: Toggle all recarm-states on/off when not recording" ultraschall_toggle_all_track_recarm_states.lua +ACT 1 0 "Ultraschall_Insert_And_Arm_New_Audio_Track" "Custom: ULTRASCHALL: Insert and Arm new Audio Track" 40001 817 +SCR 260 0 Ultraschall_Clock "Custom: ULTRASCHALL Clock" ultraclock.lua +SCR 4 0 Ultraschall_Set_Marker_Play "Custom: ULTRASCHALL: Set Marker at Play/Rec Position" ultraschall_set_marker_play.lua +SCR 4 0 Ultraschall_Set_Namedmarker_Play "Custom: ULTRASCHALL: Set Named Marker at Play/Rec Position" ultraschall_set_namedmarker_play.lua +SCR 4 0 Ultraschall_Set_Edit_Play "Custom: ULTRASCHALL: Set Edit Marker at Play/Rec Position" ultraschall_set_edit_play.lua +SCR 4 0 Ultraschall_Zoomlimiter "Custom: ULTRASCHALL: Adjust zoom, limited to projectlength" ultraschall_zoomlimiter.lua +SCR 4 32060 RS7d3c_1ee9bb229dabffe151848d7efa3c10f748e1a1cf "Custom: lyrics.lua" Cockos/lyrics.lua +SCR 4 0 RS1ee9bb229dabffe151848d7efa3c10f748e1a1cf "Custom: lyrics.lua" Cockos/lyrics.lua +SCR 4 0 Ultraschall_Go_To_Cursor "Custom: ULTRASCHALL: Go to Cursor" ultraschall_go_to_cursor.lua +SCR 4 0 Ultraschall_Toggle_Playrate "Custom: ULTRASCHALL: Toggle playrate" ultraschall_toggle_playrate.lua +SCR 4 0 Ultraschall_ZoomOut_Limiter "Custom: ULTRASCHALL: Zoom out limited to projectend" ultraschall_zoom_out_limiter.lua +ACT 1 0 "Ultraschall_Zoom_Out_Centered_Cursorposition" "Custom: ULTRASCHALL: zoom out centered to cursorposition (unlimited)" _WOL_SETHZOOMC_EDITPLAYCUR 1011 _WOL_SETHZOOMC_MOUSECUR +SCR 4 0 Ultraschall_State_Inspector "Custom: ULTRASCHALL Toolbox: State Inspector (Developer)" ultraschall_StateInspector.lua +SCR 4 0 Ultraschall_Turn_Off_Followmode "Custom: ULTRASCHALL: Turn off Followmode" ultraschall_turn_off_follow.lua +SCR 4 0 Ultraschall_Turn_On_Followmode "Custom: ULTRASCHALL: Turn on Followmode" ultraschall_turn_on_follow.lua +ACT 0 0 "Ultraschall_Go_To_Start_Of_Project" "Custom: ULTRASCHALL: Go to start of project" 40042 _Ultraschall_Turn_Off_Followmode +ACT 0 0 "Ultraschall_Go_To_End_Of_Project" "Custom: ULTRASCHALL: Go to end of project" 40043 _Ultraschall_Turn_Off_Followmode +ACT 0 0 "Ultraschall_Go_To_Next_Marker_Projectend" "Custom: ULTRASCHALL: Go to next marker/project end" 40173 _Ultraschall_Turn_Off_Followmode +ACT 0 0 "Ultraschall_Go_To_Previous_Marker_Projectstart" "Custom: ULTRASCHALL: Go to previous marker/project start" 40172 _Ultraschall_Turn_Off_Followmode +SCR 4 0 Ultraschall_Force_Playcursor_To_Center_Followmode "Custom: ULTRASCHALL: Force playcursor to center in followmode" Ultraschall_Force_Playcursor_To_Center_In_Follow.lua +SCR 4 0 Ultraschall_Single_Click_Workaround "Custom: ULTRASCHALL: Workaround for single click circumventing Reaper's sloppy click-management" ultraschall_single_click_workaround.lua +ACT 0 0 "Ultraschall_Select_Item_And_Move_Edit_Cursor" "Custom: ULTRASCHALL: Select item and move edit cursor" _Ultraschall_Single_Click_Workaround 40513 40528 +SCR 4 0 Ultraschall_Set_Next_Planned_Marker_Play "Custom: ULTRASCHALL: Set next planned marker at play-/rec-position" ultraschall_set_next_planned_marker_play.lua +KEY 1 86 0 0 +KEY 255 218 0 0 +KEY 0 96 0 0 +KEY 5 69 0 0 +KEY 8 93 0 0 +KEY 8 91 0 0 +KEY 9 32814 0 0 +KEY 9 32802 0 0 +KEY 25 32806 0 0 +KEY 0 61 0 0 +KEY 25 32808 0 0 +KEY 5 70 0 0 +KEY 0 125 0 0 +KEY 0 123 0 0 +KEY 1 70 0 0 +KEY 5 86 0 0 +KEY 25 83 0 0 +KEY 0 34 0 0 +KEY 0 39 0 0 +KEY 1 87 0 0 +KEY 1 84 0 0 +KEY 0 126 0 0 +KEY 176 1 26 0 +KEY 176 2 34 0 +KEY 176 3 42 0 +KEY 176 4 50 0 +KEY 255 216 988 0 +KEY 255 248 989 0 +KEY 255 251 990 0 +KEY 176 432 990 0 +KEY 176 1080 992 0 +KEY 176 182 992 0 +KEY 176 433 996 0 +KEY 176 1204 998 0 +KEY 255 8650 998 0 +KEY 17 65 1155 0 +KEY 1 123 40009 0 +KEY 13 83 40022 0 +KEY 0 62 40038 0 +KEY 1 32805 40104 0 +KEY 1 32807 40105 0 +KEY 5 220 40113 0 +KEY 5 84 40142 0 +KEY 0 63 40151 0 +KEY 8 46 40175 0 +KEY 144 16274 40201 0 +KEY 17 8 40201 0 +KEY 16 45 40295 0 +KEY 17 34 40295 0 +KEY 1 57 40296 0 +KEY 1 48 40297 0 +KEY 9 8 40307 0 +KEY 0 60 40320 0 +KEY 1 89 40321 0 +KEY 1 88 40322 0 +KEY 1 67 40323 0 +KEY 17 86 40408 0 +KEY 1 117 40422 0 +KEY 0 93 40434 0 +KEY 1 1048 40434 0 +KEY 5 121 40477 0 +KEY 16 44 40605 0 +KEY 144 16268 40625 0 +KEY 1 73 40625 0 +KEY 144 16269 40626 0 +KEY 1 79 40626 0 +KEY 17 73 40630 0 +KEY 17 79 40631 0 +KEY 17 70 40638 0 +KEY 17 76 40651 0 +KEY 1 76 40687 0 +KEY 1 32814 40697 0 +KEY 1 8 40697 0 +KEY 1 83 40759 0 +KEY 16 46 40867 0 +KEY 5 78 40936 0 +KEY 17 32806 41167 0 +KEY 17 32808 41168 0 +KEY 21 68 41172 0 +KEY 17 32807 41249 0 +KEY 17 32805 41250 0 +KEY 9 49 41357 0 +KEY 21 72 42307 0 +KEY 1 65 _Ultraschall_Play_From_Editcursor_Position 0 +KEY 9 32801 _Ultraschall_ZoomToSelection 0 +KEY 0 228 _Ultraschall_ZoomToSelection 0 +KEY 25 82 _Ultraschall_ResetPlaybackRate_and_RenderProject 0 +KEY 17 83 _Ultraschall_Slice_and_AddMetadata 0 +KEY 17 80 _Ultraschall_SkipLoopPlayback 0 +KEY 1 27 _Ultraschall_Unselect_All 0 +KEY 1 80 _Ultraschall_SkipLoopPlayback_Absolute 0 +KEY 5 73 _Ultraschall_PlayFromInpoint 0 +KEY 5 79 _Ultraschall_PlayFromOutpoint 0 +KEY 1 107 _Ultraschall_Zoom_In_Horizontal 0 +KEY 1 32806 _Ultraschall_Zoom_In_Horizontal 0 +KEY 1 109 _Ultraschall_Zoom_Out_Horizontal 0 +KEY 0 91 _Ultraschall_Zoom_Out_Horizontal 0 +KEY 1 32808 _Ultraschall_Zoom_Out_Horizontal 0 +KEY 144 16258 _Ultraschall_Set_Edit 0 +KEY 1 69 _Ultraschall_Set_Edit 0 +KEY 17 77 _Ultraschall_Insert_Chapter_Marker_Back_In_Time 0 +KEY 5 8 _Ultraschall_Delete_Last_Marker 0 +KEY 1 77 _Ultraschall_Set_Marker 0 +KEY 144 16256 _Ultraschall_Set_Marker 0 +KEY 5 77 _Ultraschall_Set_NamedMarker 0 +KEY 144 16270 _Ultraschall_Safemode_Start_Stop 0 +KEY 144 16290 _Ultraschall_Safemode_Start_Stop 0 +KEY 1 13 _Ultraschall_Safemode_Start_Stop 0 +KEY 1 32 _Ultraschall_Safemode_Start_Pause 0 +KEY 144 16271 _Ultraschall_Safemode_Start_Pause 0 +KEY 144 16291 _Ultraschall_Safemode_Start_Pause 0 +KEY 1 49 _Ultraschall_Select_Track1 0 +KEY 1 50 _Ultraschall_Select_Track2 0 +KEY 1 51 _Ultraschall_Select_Track3 0 +KEY 1 52 _Ultraschall_Select_Track4 0 +KEY 1 53 _Ultraschall_Select_Track5 0 +KEY 1 54 _Ultraschall_Select_Track6 0 +KEY 1 55 _Ultraschall_Select_Track7 0 +KEY 1 56 _Ultraschall_Select_Track8 0 +KEY 0 46 _Ultraschall_Mute_Envelope 0 +KEY 176 178 _Ultraschall_Trim_Inpoint 0 +KEY 176 179 _Ultraschall_Trim_Outpoint 0 +KEY 1 118 _Ultraschall_Set_View_Setup 0 +KEY 1 119 _Ultraschall_Set_View_Record 0 +KEY 1 121 _Ultraschall_Set_View_Story 0 +KEY 1 120 _Ultraschall_Set_View_Edit 0 +KEY 5 51 _Ultraschall_Toggle_Mouse_Selection 0 +KEY 5 55 _Ultraschall_Toggle_Mouse_Selection 0 +KEY 17 67 _Ultraschall_ColorPicker 0 +KEY 9 75 _Ultraschall_KeyMap 0 +KEY 17 66 _Ultraschall_Open_Project_Folder 0 +KEY 9 88 _Ultraschall_Ripple_Cut 0 +KEY 1 72 _Ultraschall_Toggle_Track_Height 0 +KEY 5 115 _Ultraschall_Snapshot_Write_4 0 +KEY 5 114 _Ultraschall_Snapshot_Write_3 0 +KEY 5 113 _Ultraschall_Snapshot_Write_2 0 +KEY 5 112 _Ultraschall_Snapshot_Write_1 0 +KEY 1 115 _Ultraschall_Snapshot_4 0 +KEY 1 114 _Ultraschall_Snapshot_3 0 +KEY 1 113 _Ultraschall_Snapshot_2 0 +KEY 1 112 _Ultraschall_Snapshot_1 0 +KEY 1 116 _Ultraschall_Snapshot_Editor 0 +KEY 17 72 _Ultraschall_Toggle_Peak_Gain_Normal_Max 0 +KEY 9 70 _Ultraschall_Toggle_Follow 0 +KEY 9 1034 _Ultraschall_Toggle_Follow 0 +KEY 1 66 _Ultraschall_Set_Next_Planned_Marker 0 +KEY 9 89 _Ultraschall_Mute_Selected_Items_In_Time_Range 0 +KEY 13 89 _Ultraschall_Unmute_Selected_Items_In_Time_Range 0 +KEY 5 72 _Ultraschall_Toggle_Envelope_Height 0 +KEY 29 85 _Ultraschall_Mastermind 0 +KEY 1 90 _Ultraschall_Toggle_Arrange_Zoom 0 +KEY 0 43 _Ultraschall_ZoomIn_Center_To_Cursorposition 0 +KEY 0 45 _Ultraschall_ZoomOut_Center_To_Cursorposition 0 +KEY 5 65 _Ultraschall_Toggle_All_Track_Recarm_States 0 +KEY 9 84 _Ultraschall_Insert_And_Arm_New_Audio_Track 0 +KEY 9 77 _Ultraschall_Set_Marker_Play 0 +KEY 13 77 _Ultraschall_Set_Namedmarker_Play 0 +KEY 9 69 _Ultraschall_Set_Edit_Play 0 +KEY 255 250 _Ultraschall_Zoomlimiter 0 +KEY 255 200 _Ultraschall_Zoomlimiter 0 +KEY 1 1034 _Ultraschall_Go_To_Cursor 0 +KEY 17 74 _Ultraschall_Toggle_Playrate 0 +KEY 24 45 _Ultraschall_Zoom_Out_Centered_Cursorposition 0 +KEY 17 87 _Ultraschall_Go_To_Start_Of_Project 0 +KEY 1 32804 _Ultraschall_Go_To_Start_Of_Project 0 +KEY 1 32803 _Ultraschall_Go_To_End_Of_Project 0 +KEY 9 32807 _Ultraschall_Go_To_Next_Marker_Projectend 0 +KEY 9 32805 _Ultraschall_Go_To_Previous_Marker_Projectstart 0 +KEY 9 66 _Ultraschall_Set_Next_Planned_Marker_Play 0 diff --git a/reaper-menu.ini b/reaper-menu.ini new file mode 100644 index 0000000..591b9c1 --- /dev/null +++ b/reaper-menu.ini @@ -0,0 +1,954 @@ +[Floating toolbar 1] +icon_0=00_toolbar_zoom2.png +icon_1=00_toolbar_follow.png +icon_3=toolbar_views_txt.png +icon_4=toolbar_Fader.png +icon_5=toolbar_tape.png +icon_6=toolbar_Trim.png +icon_7=toolbar_Idee.png +item_0=40295 View: Zoom out project +item_1=_Ultraschall_Toggle_Follow View: Toggle Followmode +item_2=-1 +item_3=40422 View: Show screen/track/item sets window +item_4=_Ultraschall_Set_View_Setup View: Setup view +item_5=_Ultraschall_Set_View_Record View: Record view +item_6=_Ultraschall_Set_View_Edit View: Edit view +item_7=_Ultraschall_Set_View_Story View: Storyboard view +title=Ultraschall: Storyboard View + +[Floating toolbar 2] +icon_0=toolbar_zoom_time_selection.png +icon_3=toolbar_ultraschall_views.png +icon_4=00_toolbar_icons_fader.png +icon_5=00_toolbar_tape.png +icon_6=00_toolbar_waveform.png +icon_11=toolbar_envelope_mute.png +item_0=40295 View: Zoom out project +item_1=-1 +item_2=-1 +item_3=40422 View: Show screen/track/item sets window +item_4=40454 Screen Layout #01 +item_5=40455 Screen Layout #02 +item_6=40456 Screen Layout #03 +item_7=-1 +item_8=-1 +item_9=-1 +item_10=-1 +item_11=41152 Envelope: Toggle show all envelopes for all tracks +title=Toolbar 2 + +[Floating toolbar 3] +title=Toolbar 3 + +[Floating toolbar 4] +title=Toolbar 4 + +[Floating toolbar 5] +icon_0=toolbar_routing_txt.png +icon_1=toolbar_Music.png +icon_2=toolbar_mic.png +icon_3=toolbar_bier.png +icon_4=toolbar_Trim.png +icon_6=toolbar_OnAir.png +item_0=_Ultraschall_Snapshot_Editor Routing: Routing-Snapshot editor +item_1=_Ultraschall_Snapshot_1 Routing: Recall Preshow routing +item_2=_Ultraschall_Snapshot_2 Routing: Recall Recording routing +item_3=_Ultraschall_Snapshot_3 Routing: Recall Aftershow routing +item_4=_Ultraschall_Snapshot_4 Routing: Recall Editing routing +item_5=-1 +item_6=_Ultraschall_OnAir Broadcast: Toggle Broadcast-OnAir via Studiolink +title=Routing + +[Floating toolbar 7] +icon_0=toolbar_export_txt.png +icon_1=toolbar_Grid.png +icon_2=toolbar_export.png +icon_3=toolbar_mp3.png +icon_4=toolbar_Folder.png +item_0=40024 Show record path in finder +item_1=_ULTRASCHALL_SAVE_CHAPTERS_TO_PROJECT Export: Save chapter markers to project folder +item_2=_Ultraschall_ResetPlaybackRate_and_RenderProject Export: Reset playback rate and render project... +item_3=_Ultraschall_Export_Assistant Export: Podcastexport assistant +item_4=_Ultraschall_Open_Project_Folder File: Open project folder +title=Export Toolbar + +[Floating toolbar 8] +icon_1=toolbar_tool_scissors_cut_trim.png +item_0=41671 Edit me +item_1=_S&M_EXCL_TGL1 SWS/S&M: Exclusive toggle A01 +item_2=_S&M_EXCL_TGL2 SWS/S&M: Exclusive toggle A02 +item_3=_S&M_EXCL_TGL3 SWS/S&M: Exclusive toggle A03 +item_4=_S&M_EXCL_TGL4 SWS/S&M: Exclusive toggle A04 +title=Toolbar 8 + +[Floating toolbar 9] +icon_0=toolbar_link.png +icon_1=toolbar_unlink.png +icon_4=toolbar_txtlabel.png +icon_7=toolbar_txt.png +icon_8=toolbar_newitem.png +icon_9=toolbar_newregion.png +item_0=40032 Item grouping: Group items +item_1=40033 Item grouping: Remove items from group +item_2=-1 +item_3=-1 +item_4=40651 View: Toggle show/hide item labels +item_5=-1 +item_6=-1 +item_7=40142 Insert empty item +item_8=_Ultraschall_Slice_and_AddMetadata Metadata: Take metadata +item_9=40174 Markers: Insert region from time selection +title=Insert Text Item + +[Main file] +title=&File + +[Main insert] +item_0=-4 1. Setup +item_1=-1 +item_2=_Ultraschall_Set_View_Setup Screenset: setup +item_3=40099 Audio device settings... +item_4=-2 Project templates +item_5=48000 (project template list) +item_6=40394 Save project as template... +item_7=-3 +item_8=-2 Insert StudioLink and Soundboard tracks +item_9=46001 (track template list) +item_10=-3 +item_11=_Ultraschall_Insert_And_Arm_New_Audio_Track Insert and arm new audio track +item_12=_Ultraschall_Snapshot_Editor Show routing snapshots +item_13=_Ultraschall_ColorPicker Color Picker +item_14=_Ultraschall_Activate_CoughButton Activate cough button for selected tracks +item_15=40022 Save project as... +item_16=-1 +item_17=-4 2. Recording +item_18=-1 +item_19=_Ultraschall_Set_View_Record Screenset: recording +item_20=-2 Markers +item_21=_Ultraschall_Set_Marker Insert chapter marker +item_22=_Ultraschall_Set_NamedMarker Insert chapter marker and edit name... +item_23=_Ultraschall_Insert_Chapter_Marker_Back_In_Time Insert chapter marker back in time (-2min) +item_24=_Ultraschall_Set_Edit Insert edit marker +item_25=_Ultraschall_Delete_Last_Marker Delete last marker (left to cursor) +item_26=_Ultraschall_Import_Markers_As_Planned_From_Clipboard Insert planned markers from clipboard +item_27=_Ultraschall_Set_All_Markers_To_Planning_Stage Set all markers to planning stage +item_28=_Ultraschall_Set_Next_Planned_Marker Set next planned marker +item_29=-3 +item_30=_Ultraschall_OnAir Toggle StudioLink-OnAir broadcasting +item_31=-1 +item_32=-4 3. Production +item_33=-1 +item_34=_Ultraschall_Prepare_For_Editing ★ Prepare all tracks for editing +item_35=-1 +item_36=_Ultraschall_Set_View_Edit Screenset: editing +item_37=_Ultraschall_Set_View_Story Screenset: storyboard +item_38=40142 Insert text item +item_39=40032 Group selected items +item_40=40033 Remove selected items from group +item_41=-2 Selection +item_42=_Ultraschall_ZoomToSelection Zoom to selection +item_43=40061 Split items at time selection +item_44=40201 Remove contens of time selection (Ripple Edit) +item_45=40307 Cut selected area of items +item_46=_Ultraschall_Slice_and_AddMetadata Split selected items at time selection and edit name +item_47=40174 Insert region from time selection +item_48=40625 Set start point +item_49=40626 Set end point +item_50=40320 Nudge start of selection left +item_51=40321 Nudge start of time selection right +item_52=40322 Nudge end of time selection left +item_53=40323 Nudge end of time selection right +item_54=_Ultraschall_SkipLoopPlayback_Absolute Preview cut (skip selection playback) +item_55=_Ultraschall_SkipLoopPlayback Preview cut - relative to zoom +item_56=_Ultraschall_Mute_Selected_Items_In_Time_Range Mute selected items in time selection +item_57=_Ultraschall_Unmute_Selected_Items_In_Time_Range Unmute selected items in time selection +item_58=40020 Remove time selection +item_59=-3 +item_60=-2 Chapter markers +item_61=40326 Show chapter marker editor +item_62=_Ultraschall_Insert_ChapterMarker Insert chapter markers at the start of every item of track +item_63=_Ultraschall_ImportChapterMarkersFromWav Import chapter markers from WAV items +item_64=_ULTRASCHALL_INSERT_CHAPTERS Import chapter markers from file... +item_65=_ULTRASCHALL_SAVE_CHAPTERS Export chapter markers to file... +item_66=_ULTRASCHALL_SAVE_CHAPTERS_TO_PROJECT Export chapter markers to project folder +item_67=-3 +item_68=-1 +item_69=-2 Export +item_70=_Ultraschall_Export_Assistant Start Export Assistant +item_71=_Ultraschall_Edit_ID3_Tags Edit ID3V2 metadata +item_72=_ULTRASCHALL_INSERT_MEDIA_PROPERTIES Insert metadata into MP3 target... +item_73=_Ultraschall_ResetPlaybackRate_and_RenderProject Render project... +item_74=-3 +item_75=_Ultraschall_Open_Project_Folder Open project folder +item_76=-1 +item_77=-4 Miscellaneous +item_78=-1 +item_79=-2 View +item_80=40251 Show routing matrix +item_81=_Ultraschall_Snapshot_Editor Show routing snapshots +item_82=40422 Show screen/track/item sets window +item_83=_Ultraschall_Toggle_Follow Toggle follow mode +item_84=40651 Toggle item labels +item_85=_S&M_CYCLACTION_10 Toggle visibility of mute envelopes +item_86=40891 Toggle mute envelope in lane for selected track +item_87=_Ultraschall_Toggle_Peak_Gain_Normal_Max Toggle peak gain: normal - mid - max +item_88=42307 Toggle rectify peaks +item_89=_Ultraschall_Toggle_Arrange_Zoom Toggle arrange zoom +item_90=-3 +item_91=-2 Navigation +item_92=40173 Go to next marker +item_93=40172 Go to previous marker +item_94=40319 Go to next item +item_95=40318 Go to previous item +item_96=_Ultraschall_FocusPosition Go to play position +item_97=40630 Go to start of time selection +item_98=40631 Go to end of time selection +item_99=_Ultraschall_Safemode_Start_Pause Start/Pause +item_100=_Ultraschall_Safemode_Start_Stop Start/Stop +item_101=-3 +item_102=-2 Customize +item_103=40605 Shortcuts and action list... +item_104=40899 Set track icon... +item_105=41930 Show theme configuration window... +item_106=40690 Show theme element finder... +item_107=42074 Peaks Display Settings +item_108=_Ultraschall_Set_Colors_To_Sonic_Rainboom Set Colors to Gentle Sonic Rainboom +item_109=_Ultraschall_Set_Colors_To_Sonic_Rainboom_Spread Set Colors to Adjusted Sonic Rainboom +item_110=_SWSAUTOCOLOR_OPEN Auto color... +item_111=-3 +item_112=_Ultraschall_KeyMap Ultraschall Keymap (url) +item_113=-1 +item_114=_Ultraschall_StartScreen Show Startscreen / About Ultraschall... +title=Podcast + +[Main item] +item_0=40006 Remove items +item_1=40508 Trim items to selected area +item_2=-1 +item_3=40182 Select all +item_4=40012 Split items at cursor +item_5=40061 Split items at time selection +item_6=40548 Heal splits in items +item_7=-2 Spectral Editing +item_8=42302 Spectrogram: Add spectral edit to item +item_9=42303 Spectrogram: Toggle show spectrogram for selected items +item_10=-3 +item_11=-1 +item_12=-2 Item settings +item_13=40175 Mute +item_14=40636 Loop item source +item_15=40437 Play all takes +item_16=40687 Lock item +item_17=-1 +item_18=40181 Invert phase +item_19=40547 Loop section of item source +item_20=40566 Preserve pitch when changing playrate +item_21=41051 Reverse active take +item_22=-1 +item_23=40176 Take channel mode: Normal +item_24=40177 Take channel mode: Reverse Stereo +item_25=40178 Take channel mode: Mono (Downmix) +item_26=40179 Take channel mode: Mono (Left) +item_27=40180 Take channel mode: Mono (Right) +item_28=-1 +item_29=40380 Set item timebase to project/track default +item_30=40433 Set item timebase to time +item_31=40484 Set item timebase to beats (position, length, rate) +item_32=40485 Set item timebase to beats (position only) +item_33=-3 +item_34=41589 Item properties... +item_35=40011 Source properties... +item_36=-1 +item_37=-2 Group +item_38=40032 Group items +item_39=40033 Remove items from group +item_40=40034 Select all items in group +item_41=-3 +item_42=40108 Normalize items +item_43=40254 Normalize items (common gain) +item_44=-1 +item_45=40760 Dynamic split items... +item_46=-1 +item_47=40362 Glue items +item_48=41588 Glue items within time selection +item_49=-1 +item_50=-2 Peaks +item_51=40047 Build peaks +item_52=40048 Rebuild all peaks +item_53=40441 Rebuild peaks for selected items +item_54=40097 Remove all peaks (and do not rebuild) +item_55=-3 +item_56=-2 Media +item_57=40101 Set all media online +item_58=40439 Set selected media online +item_59=40100 Set all media offline +item_60=40440 Set selected media offline +item_61=-3 +title=Ite&m + +[Main options] +item_0=40041 Auto-crossfade media items when editing +item_1=41117 Trim content behind media items when editing +item_2=-1 +item_3=40435 Show all takes in lanes (when room) +item_4=-1 +item_5=1155 Ripple editing: off +item_6=1156 Item grouping enabled +item_7=-1 +item_8=1157 Enable snapping +item_9=40145 Show grid +item_10=40071 Snap/grid settings... +item_11=-1 +item_12=-2 Envelope points +item_13=40070 Move envelope points with media items +item_14=41576 Envelope point selection follows time selection +item_15=40648 Add edge points when moving envelope points +item_16=40649 Add edge points when ripple editing or inserting time +item_17=40650 Reduce envelope point data when recording or drawing automation +item_18=-3 +item_19=-1 +item_20=40036 Automatically scroll view during playback +item_21=41817 Continuous scrolling +item_22=40390 Smooth seeking (seeks at end of measure) +item_23=-1 +item_24=40027 Show REAPER resource path in explorer/finder... +item_25=1528 Customize menus/toolbars... +item_26=-2 Themes +item_27=41930 Show theme editor +item_28=45500 Default Classic +item_29=-3 +item_30=-2 Layouts +item_31=48500 Default Layout +item_32=-3 +item_33=40016 Preferences... +title=&Options + +[Main toolbar] +icon_0=toolbar_rippleone.png +icon_1=toolbar_rippleall.png +icon_3=toolbar_Marker.png +icon_4=toolbar_glue.png +icon_6=toolbar_Cut.png +icon_7=toolbar_mouse_select.png +icon_8=toolbar_cut_selection.png +icon_9=toolbar_Mute.png +item_0=41990 Toggle ripple editing per-track +item_1=41991 Toggle ripple editing all tracks +item_2=-1 +item_3=_Ultraschall_Set_Marker Marker: Set marker +item_4=_Ultraschall_Set_Edit Marker: Set edit-marker +item_5=-1 +item_6=40759 Item: Split items at edit cursor (select right) +item_7=_Ultraschall_Toggle_Mouse_Selection Selection: Mouse-selection - On: Time-selection, Off: Move Item +item_8=_Ultraschall_Ripple_Cut Edit: Ripple-Cut +item_9=_Ultraschall_Mute_Envelope Tracks: Show mute-envelopes of selected tracks +title=Set edit marker + +[Main track] +item_0=40001 Insert new track +item_1=40702 Insert new track at end of track list +item_2=-1 +item_3=40005 Remove tracks +item_4=40062 Duplicate tracks +item_5=-2 Render/freeze tracks +item_6=40789 Render tracks to mono stem tracks (and mute originals) +item_7=40788 Render tracks to stereo stem tracks (and mute originals) +item_8=40893 Render tracks to multichannel stem tracks (and mute originals) +item_9=-1 +item_10=40901 Freeze tracks to mono (render pre-fader, save/remove items and online FX) +item_11=41223 Freeze tracks to stereo (render pre-fader, save/remove items and online FX) +item_12=40877 Freeze tracks to multichannel (render pre-fader, save/remove items and online FX) +item_13=-1 +item_14=41644 Unfreeze tracks (restore previous items and FX) +item_15=-3 +item_16=41726 Multichannel track metering +item_17=-1 +item_18=-2 Track color +item_19=40357 Set tracks to custom color... +item_20=40358 Set tracks to random colors +item_21=40360 Set tracks to one random color +item_22=40359 Set tracks to default color +item_23=-3 +item_24=-2 Track icon +item_25=40899 Set track icon... +item_26=40900 Remove track icon +item_27=-3 +item_28=-1 +item_29=-2 Set track automation mode +item_30=40400 Trim/Read +item_31=40401 Read +item_32=40402 Touch +item_33=40404 Latch +item_34=40403 Write +item_35=-3 +item_36=-2 Envelopes +item_37=40052 Toggle volume active +item_38=40053 Toggle pan active +item_39=40050 Toggle volume (pre-FX) active +item_40=40051 Toggle pan (pre-FX) active +item_41=40406 Toggle volume visible +item_42=40407 Toggle pan visible +item_43=40408 Toggle volume (pre-FX) visible +item_44=40409 Toggle pan (pre-FX) visible +item_45=-1 +item_46=40332 Select all points +item_47=40331 Unselect all points +item_48=40330 Select points in time selection +item_49=-2 Set shape for selected points +item_50=40189 Linear +item_51=40190 Square +item_52=40424 Slow start/end +item_53=40428 Fast start +item_54=40429 Fast end +item_55=40683 Bezier +item_56=-3 +item_57=-1 +item_58=40333 Remove envelope points +item_59=40089 Remove envelope points in time selection +item_60=-1 +item_61=40334 Invert selected points +item_62=40415 Reset selected points to zero/center +item_63=-1 +item_64=-2 Set envelope default point shape +item_65=40187 Linear +item_66=40188 Square +item_67=40425 Slow start/end +item_68=40430 Fast start +item_69=40431 Fast end +item_70=40681 Bezier +item_71=-3 +item_72=40065 Clear envelope +item_73=-3 +item_74=-1 +item_75=40772 Track grouping parameters... +item_76=40771 Track grouping enabled +item_77=40867 Track: Toggle track mute envelope visible +title=&Track + +[Main view] +title=&View + +[Media item context] +item_0=-4 Ultraschall +item_1=_Ultraschall_ColorPicker Colorpicker +item_2=40707 Reset to Track Color +item_3=-1 +item_4=-2 Item settings +item_5=40175 Mute +item_6=40636 Loop item source +item_7=40437 Play all takes +item_8=40687 Lock item +item_9=40850 Item notes... +item_10=-1 +item_11=40181 Invert phase +item_12=40547 Loop section of item source +item_13=40566 Preserve pitch when changing playrate +item_14=41051 Reverse active take +item_15=-1 +item_16=40176 Take channel mode: Normal +item_17=40177 Take channel mode: Reverse stereo +item_18=40178 Take channel mode: Mono (downmix) +item_19=40179 Take channel mode: Mono (left) +item_20=40180 Take channel mode: Mono (right) +item_21=-2 Take channel mode: Mono (3-64) +item_22=41388 Mono 3 +item_23=41389 Mono 4 +item_24=41390 Mono 5 +item_25=41391 Mono 6 +item_26=41392 Mono 7 +item_27=41393 Mono 8 +item_28=41394 Mono 9 +item_29=41395 Mono 10 +item_30=41396 Mono 11 +item_31=41397 Mono 12 +item_32=41398 Mono 13 +item_33=41399 Mono 14 +item_34=41400 Mono 15 +item_35=41401 Mono 16 +item_36=41402 Mono 17 +item_37=41403 Mono 18 +item_38=41404 Mono 19 +item_39=41405 Mono 20 +item_40=41406 Mono 21 +item_41=41407 Mono 22 +item_42=41408 Mono 23 +item_43=41409 Mono 24 +item_44=41410 Mono 25 +item_45=41411 Mono 26 +item_46=41412 Mono 27 +item_47=41413 Mono 28 +item_48=41414 Mono 29 +item_49=41415 Mono 30 +item_50=41416 Mono 31 +item_51=41417 Mono 32 +item_52=41418 Mono 33 +item_53=41419 Mono 34 +item_54=41420 Mono 35 +item_55=41421 Mono 36 +item_56=41422 Mono 37 +item_57=41423 Mono 38 +item_58=41424 Mono 39 +item_59=41425 Mono 40 +item_60=41426 Mono 41 +item_61=41427 Mono 42 +item_62=41428 Mono 43 +item_63=41429 Mono 44 +item_64=41430 Mono 45 +item_65=41431 Mono 46 +item_66=41432 Mono 47 +item_67=41433 Mono 48 +item_68=41434 Mono 49 +item_69=41435 Mono 50 +item_70=41436 Mono 51 +item_71=41437 Mono 52 +item_72=41438 Mono 53 +item_73=41439 Mono 54 +item_74=41440 Mono 55 +item_75=41441 Mono 56 +item_76=41442 Mono 57 +item_77=41443 Mono 58 +item_78=41444 Mono 59 +item_79=41445 Mono 60 +item_80=41446 Mono 61 +item_81=41447 Mono 62 +item_82=41448 Mono 63 +item_83=41449 Mono 64 +item_84=-3 +item_85=-2 Take channel mode: Stereo (1-64) +item_86=41450 Stereo 1/2 +item_87=41451 Stereo 2/3 +item_88=41452 Stereo 3/4 +item_89=41453 Stereo 4/5 +item_90=41454 Stereo 5/6 +item_91=41455 Stereo 6/7 +item_92=41456 Stereo 7/8 +item_93=41457 Stereo 8/9 +item_94=41458 Stereo 9/10 +item_95=41459 Stereo 10/11 +item_96=41460 Stereo 11/12 +item_97=41461 Stereo 12/13 +item_98=41462 Stereo 13/14 +item_99=41463 Stereo 14/15 +item_100=41464 Stereo 15/16 +item_101=41465 Stereo 16/17 +item_102=41466 Stereo 17/18 +item_103=41467 Stereo 18/19 +item_104=41468 Stereo 19/20 +item_105=41469 Stereo 20/21 +item_106=41470 Stereo 21/22 +item_107=41471 Stereo 22/23 +item_108=41472 Stereo 23/24 +item_109=41473 Stereo 24/25 +item_110=41474 Stereo 25/26 +item_111=41475 Stereo 26/27 +item_112=41476 Stereo 27/28 +item_113=41477 Stereo 28/29 +item_114=41478 Stereo 29/30 +item_115=41479 Stereo 30/31 +item_116=41480 Stereo 31/32 +item_117=41481 Stereo 32/33 +item_118=41482 Stereo 33/34 +item_119=41483 Stereo 34/35 +item_120=41484 Stereo 35/36 +item_121=41485 Stereo 36/37 +item_122=41486 Stereo 37/38 +item_123=41487 Stereo 38/39 +item_124=41488 Stereo 39/40 +item_125=41489 Stereo 40/41 +item_126=41490 Stereo 41/42 +item_127=41491 Stereo 42/43 +item_128=41492 Stereo 43/44 +item_129=41493 Stereo 44/45 +item_130=41494 Stereo 45/46 +item_131=41495 Stereo 46/47 +item_132=41496 Stereo 47/48 +item_133=41497 Stereo 48/49 +item_134=41498 Stereo 49/50 +item_135=41499 Stereo 50/51 +item_136=41500 Stereo 51/52 +item_137=41501 Stereo 52/53 +item_138=41502 Stereo 53/54 +item_139=41503 Stereo 54/55 +item_140=41504 Stereo 55/56 +item_141=41505 Stereo 56/57 +item_142=41506 Stereo 57/58 +item_143=41507 Stereo 58/59 +item_144=41508 Stereo 59/60 +item_145=41509 Stereo 60/61 +item_146=41510 Stereo 61/62 +item_147=41511 Stereo 62/63 +item_148=41512 Stereo 63/64 +item_149=-3 +item_150=-1 +item_151=40380 Set item timebase to project/track default +item_152=40433 Set item timebase to time +item_153=40484 Set item timebase to beats (position, length, rate) +item_154=40485 Set item timebase to beats (position only) +item_155=-3 +item_156=41589 Item properties... +item_157=40011 Source properties... +item_158=-1 +item_159=-2 Group +item_160=40032 Group items +item_161=40033 Remove items from group +item_162=40034 Select all items in group +item_163=-3 +item_164=-2 Take +item_165=40125 Next take +item_166=40126 Previous take +item_167=40129 Delete active take +item_168=40131 Crop to active take +item_169=40639 Duplicate active take +item_170=41339 Lock to active take +item_171=-1 +item_172=40638 Show FX chain for active take +item_173=40640 Remove FX for active take +item_174=-1 +item_175=41974 Take envelopes... +item_176=40693 Take volume envelope +item_177=40694 Take pan envelope +item_178=40695 Take mute envelope +item_179=41612 Take pitch envelope +item_180=-1 +item_181=40224 Explode all takes to new tracks +item_182=40642 Explode all takes (in place) +item_183=40643 Explode all takes (in order) +item_184=40438 Implode items across tracks into takes +item_185=40543 Implode items on same track into takes +item_186=40603 Paste to takes in items +item_187=-1 +item_188=45000 (take list) +item_189=-3 +item_190=-2 Comps +item_191=41373 Save/rename active comp... +item_192=41374 Remove active comp from list +item_193=41379 Crop list to active comp +item_194=41378 Move active comp to top lane +item_195=-1 +item_196=45100 (comp list) +item_197=-3 +item_198=-2 Item and take colors +item_199=40704 Set items to custom color... +item_200=40705 Set items to random colors +item_201=40706 Set items to one random color +item_202=40707 Set items to default color +item_203=-1 +item_204=41331 Set active takes to custom color... +item_205=41332 Set active takes to one random color +item_206=41333 Set active takes to default color +item_207=41337 Set all takes of selected items to default color +item_208=-3 +item_209=-2 Item processing +item_210=40108 Normalize items +item_211=40254 Normalize items (common gain) +item_212=-1 +item_213=40760 Dynamic split items... +item_214=40316 Quantize item positions to grid... +item_215=-1 +item_216=40299 Move items to source preferred position (BWF) +item_217=40644 Implode items across tracks into items on one track +item_218=40645 Auto-reposition items in free item positioning mode +item_219=-1 +item_220=40894 Explode multichannel audio or MIDI items to new one-channel items +item_221=40920 Explode MIDI item by note row (pitch) +item_222=-1 +item_223=40684 Convert active take MIDI to in-project source data +item_224=40685 Convert active take MIDI to .mid file reference +item_225=-1 +item_226=40692 Import media cues from items as project markers +item_227=-1 +item_228=41976 Propagate take to similarly-named active takes on track +item_229=41977 Propagate item to similarly-named items on track +item_230=41978 Propagate take to all similarly-named active takes +item_231=41979 Propagate item to all similarly-named items +item_232=-3 +item_233=-2 Spectral Editing +item_234=42303 Spectrogram: Toggle show spectrogram for selected items +item_235=42302 Spectrogram: Add spectral edit to item +item_236=-3 +item_237=-2 Stretch markers +item_238=41842 Add stretch marker at cursor +item_239=41843 Add stretch markers at time selection +item_240=-1 +item_241=-2 Stretch marker at cursor +item_242=41989 Reset +item_243=41988 Edit rate +item_244=41859 Remove +item_245=-3 +item_246=-2 Stretch markers in selected items +item_247=41846 Snap to grid +item_248=41844 Remove +item_249=-3 +item_250=-2 Stretch markers in selected items within time selection +item_251=41847 Snap to grid +item_252=41845 Remove +item_253=-3 +item_254=-1 +item_255=41857 Use tonal optimized mode +item_256=-3 +item_257=-2 Open items in editor +item_258=40109 Open in editor +item_259=40202 Open in secondary editor +item_260=-1 +item_261=40132 Open copies in editor +item_262=40203 Open copies in secondary editor +item_263=-1 +item_264=40847 Open in inline editor +item_265=41816 Open associated project in new tab +item_266=-3 +item_267=40153 Open in built-in MIDI editor (set default behavior in preferences) +item_268=-1 +item_269=40209 Apply track/take FX to items as new take +item_270=40361 Apply track/take FX to items as new take (mono output) +item_271=41993 Apply track/take FX to items as new take (multichannel output) +item_272=40436 Apply track/take FX to items as new take (MIDI output) +item_273=40601 Render items as new take +item_274=40270 Reverse items as new take +item_275=40362 Glue items +item_276=41588 Glue items within time selection +item_277=-1 +item_278=40057 Copy items +item_279=40060 Copy selected area of items +item_280=40014 Copy loop of selected area of items +item_281=40059 Cut items +item_282=40307 Cut selected area of items +item_283=40058 Paste +item_284=40006 Remove items +item_285=40508 Trim items to selected area +item_286=-1 +item_287=41228 Nudge/set items... +item_288=40012 Split items at cursor +item_289=40792 Split items at prior zero crossing +item_290=40061 Split items at time selection +item_291=40548 Heal splits in items +title=Media item context + +[Ruler/arrange context] +item_0=40020 &Remove selection +item_1=40031 Zoom selection +item_2=40290 Set selection to items +item_3=40802 Extend selection to next transient in items +item_4=-1 +item_5=40171 Insert marker... +item_6=_Ultraschall_Set_Edit Insert edit marker* +item_7=_Ultraschall_Set_Next_Planned_Marker Set next planned marker +item_8=40174 Create region from selection +item_9=40256 Insert tempo/time signature marker... +item_10=40420 Remove all markers from time selection +item_11=_Ultraschall_Set_All_Markers_To_Planning_Stage Set all markers to planning stage +item_12=_Ultraschall_Import_Markers_As_Planned_From_Clipboard Import markers as planned from clipboard +item_13=-1 +item_14=41597 Set project tempo from time selection (detect tempo) +item_15=40843 Set project tempo from time selection (new time signature)... +item_16=40002 Set project tempo from time selection (detect tempo, align items) +item_17=40338 Create measure from time selection (detect tempo) +item_18=40801 Create measure from time selection (new time signature)... +item_19=-1 +item_20=40049 Crop project to selection +item_21=40200 Insert empty space in selection +item_22=40201 Remove contents of selection (moving later items) +item_23=-1 +item_24=40058 &Paste +item_25=40012 Split items at cursor +item_26=40061 Split items at time selection +item_27=40182 Select all +item_28=40060 Copy selected area of items +item_29=40014 Copy loop of selected area of items +item_30=-1 +item_31=40365 Minutes:Seconds +item_32=40366 Measures.Beats / Minutes:Seconds +item_33=40367 Measures.Beats +item_34=41916 Measures.Beats (minimal) +item_35=41918 Measures.Beats (minimal) / Minutes:Seconds +item_36=40368 Seconds +item_37=40369 Samples +item_38=40370 Hours:Minutes:Seconds:Frames +item_39=41973 Absolute Frames +item_40=-1 +title=Ruler/arrange context + +[Track control panel context] +item_0=-4 Ultraschall +item_1=_Ultraschall_ColorPicker Color Picker +item_2=_Ultraschall_Set_Colors_To_Sonic_Rainboom Set Colors to Gentle Sonic Rainboom +item_3=_Ultraschall_Set_Colors_To_Sonic_Rainboom_Spread Set Colors to Adjusted Sonic Rainboom +item_4=_Ultraschall_Activate_CoughButton Activate cough button +item_5=40891 Toggle mute envelope in lane +item_6=-1 +item_7=40001 Insert new track +item_8=40702 Insert new track at end of track list +item_9=40701 Insert virtual instrument on new track... +item_10=-2 Insert track from template +item_11=46000 Open template... +item_12=41722 Offset template items by edit cursor +item_13=-1 +item_14=46001 (track template list) +item_15=-3 +item_16=40392 Save tracks as track template... +item_17=-1 +item_18=40005 Remove tracks +item_19=40062 Duplicate tracks +item_20=-2 Render/freeze tracks +item_21=40789 Render tracks to mono stem tracks (and mute originals) +item_22=40788 Render tracks to stereo stem tracks (and mute originals) +item_23=40893 Render tracks to multichannel stem tracks (and mute originals) +item_24=-1 +item_25=40901 Freeze tracks to mono (render pre-fader, save/remove items and online FX) +item_26=41223 Freeze tracks to stereo (render pre-fader, save/remove items and online FX) +item_27=40877 Freeze tracks to multichannel (render pre-fader, save/remove items and online FX) +item_28=-1 +item_29=41644 Unfreeze tracks (restore previous items and FX) +item_30=-3 +item_31=-1 +item_32=-2 MIDI track controls +item_33=40907 Show MIDI track control panel +item_34=-1 +item_35=41556 Link track volume/pan to all MIDI channels +item_36=-2 Link track volume/pan to MIDI channel +item_37=41539 1 +item_38=41540 2 +item_39=41541 3 +item_40=41542 4 +item_41=41543 5 +item_42=41544 6 +item_43=41545 7 +item_44=41546 8 +item_45=41547 9 +item_46=41548 10 +item_47=41549 11 +item_48=41550 12 +item_49=41551 13 +item_50=41552 14 +item_51=41553 15 +item_52=41554 16 +item_53=-3 +item_54=41538 Do not link track volume/pan to MIDI +item_55=-3 +item_56=41314 Lock track controls +item_57=40641 Enable track free item positioning +item_58=40736 Automatic record-arm when track selected +item_59=41726 Multichannel track metering +item_60=-1 +item_61=40906 Track Manager (show/hide tracks)... +item_62=-2 Track color +item_63=40357 Set tracks to custom color... +item_64=40358 Set tracks to random colors +item_65=40360 Set tracks to one random color +item_66=40359 Set tracks to default color +item_67=-2 SWS track color +item_68=_SWS_TRACKRANDCOL Set to one random custom color +item_69=_SWS_TRACKRANDCOLS Set to random custom color(s) +item_70=_SWS_TRACKGRAD Set to color gradient +item_71=_SWS_COLCHILDREN Set children to same color +item_72=_SWS_TRACKCUSTCOL1 Set to custom color 1 +item_73=_SWS_TRACKCUSTCOL2 Set to custom color 2 +item_74=_SWS_TRACKCUSTCOL3 Set to custom color 3 +item_75=_SWS_TRACKCUSTCOL4 Set to custom color 4 +item_76=_SWS_TRACKCUSTCOL5 Set to custom color 5 +item_77=_SWS_TRACKCUSTCOL6 Set to custom color 6 +item_78=_SWS_TRACKCUSTCOL7 Set to custom color 7 +item_79=_SWS_TRACKCUSTCOL8 Set to custom color 8 +item_80=_SWS_TRACKCUSTCOL9 Set to custom color 9 +item_81=_SWS_TRACKCUSTCOL10 Set to custom color 10 +item_82=_SWS_TRACKCUSTCOL11 Set to custom color 11 +item_83=_SWS_TRACKCUSTCOL12 Set to custom color 12 +item_84=_SWS_TRACKCUSTCOL13 Set to custom color 13 +item_85=_SWS_TRACKCUSTCOL14 Set to custom color 14 +item_86=_SWS_TRACKCUSTCOL15 Set to custom color 15 +item_87=_SWS_TRACKCUSTCOL16 Set to custom color 16 +item_88=_SWSCOLORWND Show color management +item_89=-3 +item_90=-3 +item_91=-2 Track icon +item_92=40899 Set track icon... +item_93=40900 Remove track icon +item_94=-3 +item_95=-1 +item_96=-2 Set track timebase +item_97=40486 Project timebase +item_98=40487 Time +item_99=40488 Beats (position, length, rate) +item_100=40489 Beats (position only) +item_101=-3 +item_102=-2 Set track automation mode +item_103=40400 Trim/Read +item_104=40401 Read +item_105=40402 Touch +item_106=40404 Latch +item_107=40403 Write +item_108=-3 +item_109=-2 Track performance options +item_110=40607 Allow media buffering +item_111=40608 Prevent media buffering +item_112=40609 Allow anticipative FX +item_113=40610 Prevent anticipative FX +item_114=41744 Enable track metering +item_115=-3 +item_116=-2 Set track layout +item_117=48400 Default +item_118=-3 +item_119=-2 Envelopes +item_120=40052 Toggle volume active +item_121=40053 Toggle pan active +item_122=40050 Toggle volume (pre-FX) active +item_123=40051 Toggle pan (pre-FX) active +item_124=40406 Toggle volume visible +item_125=40407 Toggle pan visible +item_126=40408 Toggle volume (pre-FX) visible +item_127=40409 Toggle pan (pre-FX) visible +item_128=-1 +item_129=40332 Select all points +item_130=40331 Unselect all points +item_131=40330 Select points in time selection +item_132=40335 Copy selected envelope points +item_133=40336 Cut selected envelope points +item_134=-2 Set shape for all selected points +item_135=40189 Linear +item_136=40190 Square +item_137=40424 Slow start/end +item_138=40428 Fast start +item_139=40429 Fast end +item_140=40683 Bezier +item_141=-3 +item_142=-1 +item_143=40333 Delete selected envelope points +item_144=40089 Delete envelope points in time selection +item_145=-1 +item_146=40334 Invert selected points +item_147=40415 Reset selected points to zero/center +item_148=-1 +item_149=-2 Set envelope default point shape +item_150=40187 Linear +item_151=40188 Square +item_152=40425 Slow start/end +item_153=40430 Fast start +item_154=40431 Fast end +item_155=40681 Bezier +item_156=-3 +item_157=40065 Clear envelope +item_158=-3 +item_159=-1 +item_160=40772 Track grouping parameters... +item_161=40771 Track grouping enabled +item_162=-1 +item_163=-2 SWS Snapshots +item_164=_SWSSNAPSHOT_OPEN Show snapshots list and settings +item_165=_SWSSNAPSHOT_ADD Add selected track(s) to current snapshot +item_166=_SWSSNAPSHOTS_ADD Add selected track(s) to all snapshots +item_167=_SWSSNAPSHOT_DEL Delete selected track(s) from current snapshot +item_168=_SWSSNAPSHOTS_DEL Delete selected track(s) from all snapshots +item_169=_SWSSNAPSHOT_SEL Select current snapshot's track(s) +item_170=-1 +item_171=_SWSSNAPSHOT_NEWALL New snapshot (all tracks) +item_172=_SWSSNAPSHOT_NEWSEL New snapshot (selected track(s)) +item_173=_SWSSNAPSHOT_SAVE Save over current snapshot +item_174=_SWSSNAPSHOT_GET Recall current snapshot +item_175=_SWSSNAPSHOT_GET_PREVIOUS Recall previous snapshot +item_176=_SWSSNAPSHOT_GET_NEXT Recall next snapshot +item_177=_SWSSNAPSHOT_COPY Copy current snapshot +item_178=_SWSSNAPSHOT_COPYSEL Copy new snapshot (selected track(s)) +item_179=_SWSSNAPSHOT_COPYALL Copy new snapshot (all track(s)) +item_180=_SWSSNAPSHOT_PASTE Paste snapshot +item_181=-3 +title=Track control panel context + diff --git a/reaper-midihw.ini b/reaper-midihw.ini new file mode 100644 index 0000000..babc4be --- /dev/null +++ b/reaper-midihw.ini @@ -0,0 +1,106 @@ +[mididevcache] +ia0= +ia1= +ia10= +ia11= +ia2= +ia3= +ia4= +ia5=Ultraschall-Midi +ia6= +ia7= +ia8= +ia9= +in0=USB-MIDI-Gerät +in1=US-800 +in10=Port 1 +in11= +in2=AudioBox 1818 VSL +in3=OSCulator Out +in4=Soundboard +in5=Bus 1 +in6=PAD +in7=MIDI Out +in8=FastTrack Pro +in9=MIDI 8 +it0=1413305013 +it1=1459005977 +it10=1486305421 +it11=1484179027 +it2=1463216848 +it3=1457885541 +it4=1392491851 +it5=1418939206 +it6=1430570386 +it7=1449175921 +it8=1458390660 +it9=1484230565 +ix0=Allgemein - USB-MIDI-Gerät +ix1=TASCAM - US-800 +ix10=Hercules - DJ Control MP3 e2 - Port 1 +ix11=Guillemot Corporation - DJControl Compact +ix2=Presonus - AudioBox 1818 VSL +ix3=OSCulator Out +ix4=Soundboard +ix5=Apple Inc. - IAC-Treiber - Bus 1 +ix6=KORG INC. - nanoPAD2 - PAD +ix7=Allen&Heath Ltd - QU-16 - MIDI Out +ix8=M-Audio - FastTrack Pro +ix9=MyUSB_HID - MIDI 8 +oa0= +oa1= +oa10= +oa11= +oa12= +oa13= +oa2= +oa3= +oa4= +oa5=Ultraschall-Midi +oa6= +oa7= +oa8= +oa9= +on0=USB-MIDI-Gerät +on1=US-800 +on10=MIDI 8 +on11=MIDI Loupe +on12=Port 1 +on13=Microsoft GS Wavetable Synth +on2=AudioBox 1818 VSL +on3=OSCulator In (8000) +on4=Soundboard +on5=Bus 1 +on6=CTRL +on7=OSCulator In (8000) +on8=MIDI In +on9=FastTrack Pro +ot0=1413305013 +ot1=1459005977 +ot10=1484230565 +ot11=1484230565 +ot12=1486305421 +ot13=1515731431 +ot2=1463216848 +ot3=1457885541 +ot4=1392491851 +ot5=1418939206 +ot6=1430570386 +ot7=1432989127 +ot8=1449175921 +ot9=1458390660 +ox0=Allgemein - USB-MIDI-Gerät +ox1=TASCAM - US-800 +ox10=MyUSB_HID - MIDI 8 +ox11=MIDI Loupe +ox12=Hercules - DJ Control MP3 e2 - Port 1 +ox13=Guillemot Corporation - DJControl Compact +ox2=Presonus - AudioBox 1818 VSL +ox3=OSCulator In (8000) +ox4=Soundboard +ox5=Apple Inc. - IAC-Treiber - Bus 1 +ox6=KORG INC. - nanoPAD2 - CTRL +ox7=OSCulator In (8000) +ox8=Allen&Heath Ltd - QU-16 - MIDI In +ox9=M-Audio - FastTrack Pro + diff --git a/reaper-mouse.ini b/reaper-mouse.ini new file mode 100644 index 0000000..94f8afa --- /dev/null +++ b/reaper-mouse.ini @@ -0,0 +1,54 @@ +[hasimported] +MM_CTX_ARRANGE_MMOUSE=1 +MM_CTX_ARRANGE_MMOUSE_CLK=1 +MM_CTX_ARRANGE_RMOUSE=1 +MM_CTX_CURSORHANDLE=1 +MM_CTX_ENVLANE=1 +MM_CTX_ENVPT=1 +MM_CTX_ENVSEG=1 +MM_CTX_ENVSEG_DBLCLK=1 +MM_CTX_ITEM=1 +MM_CTX_ITEM_CLK=1 +MM_CTX_ITEM_DBLCLK=1 +MM_CTX_ITEMEDGE=1 +MM_CTX_MIDI_CCLANE=1 +MM_CTX_MIDI_NOTE=1 +MM_CTX_MIDI_NOTE_CLK=1 +MM_CTX_MIDI_NOTE_DBLCLK=1 +MM_CTX_MIDI_PIANOROLL_CLK=1 +MM_CTX_MIDI_PIANOROLL_DBLCLK=1 +MM_CTX_MIDI_RMOUSE=1 +MM_CTX_MIDI_RULER=1 +MM_CTX_RULER=1 +MM_CTX_TRACK=1 + +[MM_CTX_ENVLANE] +mm_0=2 + +[MM_CTX_ENVPT] +mm_0=2 + +[MM_CTX_ENVSEG] +mm_0=2 + +[MM_CTX_ITEM] +mm_0=29 + +[MM_CTX_ITEM_CLK] +mm_0=_Ultraschall_Single_Click_Workaround +mm_6=0 + +[MM_CTX_ITEM_DBLCLK] +mm_0=_Ultraschall_Play_From_Editcursor_Position + +[MM_CTX_MARKER_REGIONEDGE] +mm_0=2 +mm_1=1 + +[MM_CTX_MIDI_NOTE_CLK] +mm_0=1 +mm_4=2 + +[MM_CTX_RULER_DBLCLK] +mm_0=_BR_PLAY_MOUSECURSOR + diff --git a/reaper-pinstates.ini b/reaper-pinstates.ini new file mode 100644 index 0000000..86c72d5 --- /dev/null +++ b/reaper-pinstates.ini @@ -0,0 +1,14 @@ +[pins] +32c06164d378053f=0 +333381fe3732d4ca=0 +4ad1a8d6ea267154=0 +4d2918d9d032b518=0 +5bc0a9e465805b6d=0 +64167792b8531e95=0 +9c02cea21f54e5a3=0 +9fff89752588c427=0 +d95fd94bfbfa307c=0 +dc1f5cf873521396=0 +e7124b3a20c289df=0 + +b65f0a6e86976e9a=0 diff --git a/reaper-recentfx.ini b/reaper-recentfx.ini new file mode 100644 index 0000000..85647d0 --- /dev/null +++ b/reaper-recentfx.ini @@ -0,0 +1,62 @@ +[Recent] +Nb=30 +Type0=3 +Name0=/Users/rstockm/Documents/ULTRASCHALL/Ultraschall 3.1 Vanilla/REAPER64.app/Contents/Plugins/FX/reacomp.vst.dylib +Type1=5 +Name1=Ultraschall: Soundboard +Type2=2 +Name2=dynamics/Ultraschall_Dynamics +Type3=3 +Name3=/Users/rstockm/Documents/ULTRASCHALL/Ultraschall 3.1 Vanilla/REAPER64.app/Contents/Plugins/FX/reaeq.vst.dylib +Type4=3 +Name4=/Applications/Ultraschall.app/Contents/Plugins/FX/reacomp.vst.dylib +Type5=3 +Name5=/Applications/Ultraschall.app/Contents/Plugins/FX/reaeq.vst.dylib +Type6=5 +Name6=Apple: AUPeakLimiter +Type7=2 +Name7=dynamics/general_dynamics +Type8=5 +Name8=ITSR: StudioLink +Type9=2 +Name9=loser/MGA_JSLimiter +Type10=5 +Name10=StudioLinkOnAir (ITSR) +Type11=3 +Name11=C:\REAPER5_70_Follow3\Plugins\FX\reaeq.dll +Type12=3 +Name12=C:\REAPER5_70\Plugins\FX\reaeq.dll +Type13=5 +Name13=StudioLinkOnAir +Type14=5 +Name14=ITSR: StudioLinkOnAir +Type15=3 +Name15=/Applications/Ultraschall.app/Contents/Plugins/FX/reaxcomp.vst.dylib +Type16=3 +Name16=/Applications/Ultraschall.app/Contents/Plugins/FX/reaverb.vst.dylib +Type17=3 +Name17=/Applications/REAPER64.app/Contents/Plugins/FX/reaxcomp.vst.dylib +Type18=3 +Name18=/Applications/REAPER64.app/Contents/Plugins/FX/reaverb.vst.dylib +Type19=3 +Name19=/Applications/REAPER64.app/Contents/Plugins/FX/reaeq.vst.dylib +Type20=2 +Name20=Delay/delay_chorus +Type21=5 +Name21=Apple: AUDynamicsProcessor +Type22=3 +Name22=/Applications/Ultraschall.app/Contents/Plugins/FX/reafir.vst.dylib +Type23=5 +Name23=Apple: AUHipass +Type24=3 +Name24=/Applications/REAPER64.app/Contents/Plugins/FX/reacomp.vst.dylib +Type25=3 +Name25=/Applications/REAPER64.app/Contents/Plugins/FX/reastream.vst.dylib +Type26=3 +Name26=/Applications/REAPER64.app/Contents/Plugins/FX/reacast.vst.dylib +Type27=3 +Name27=/Applications/REAPER64.app/Contents/Plugins/FX/reafir.vst.dylib +Type28=2 +Name28=sstillwell/eventhorizon2 +Type29=2 +Name29=sault-4xlimiter/sault-4xlimiter.txt diff --git a/reaper-reginfo2.ini b/reaper-reginfo2.ini new file mode 100644 index 0000000..12b9f1d --- /dev/null +++ b/reaper-reginfo2.ini @@ -0,0 +1,3 @@ +[us] +uss=6D297A5A9EA301000B000000000000000000000092ED00397C3C5DEBF0E2FD73C07B61D105B159406D + diff --git a/reaper-render.ini b/reaper-render.ini new file mode 100644 index 0000000..a0f10d8 --- /dev/null +++ b/reaper-render.ini @@ -0,0 +1,12 @@ + +RENDERPRESET_OUTPUT "Auphonic Multichannel" 1 0 0 3 0 $tracknumber_$track 1 + +RENDERPRESET_OUTPUT m4a 1 0 0 0 0 $project 1 + +RENDERPRESET_OUTPUT MP3 1 0 0 0 0 $project 1 diff --git a/reaper-screensets.ini b/reaper-screensets.ini new file mode 100644 index 0000000..2ef1bc5 --- /dev/null +++ b/reaper-screensets.ini @@ -0,0 +1,1269 @@ +[screensets] +nb=10 + +[sset0] +dockersel=mixer +dockersel1=toolbar:1 +dockersel2=toolbar:2 +dockersel3=toolbar:7 +dockersel5=routing +layouts=<"" 'trans' "Ultraschall 2 Trans" 'master_mcp' "Ultraschall 2" 'mcp' "Ultraschall 2" 'master_tcp' "3. Black Master Track" 'tcp' "Ultraschall 2"> +leftpanel_size=271 +mainwnd_rect=3F0000002A0000002F0500002A030000CA +mainwnd_status=0 +mask=-1026 +mixer_flag1=11 +mixer_flag2=52 +name=Setup +poslist0_data=020100000000000000000000000000000000000003 +poslist0_id=explorer +poslist0_sz=20 +poslist2_data=1B030000A8010000390500000403000000000000000000000C +poslist2_id=SWSAutoColor +poslist2_sz=24 +poslist3_data=BD02000068000000630500005F0200000000000000000000F0 +poslist3_id=SWSMarkerList +poslist3_sz=24 +poslist4_data=8F0100004301000001040000140200000000000000000000EF +poslist4_id=ReaConsole +poslist4_sz=24 +poslist6_data=32000000E1010000330200006D0300000000000000000000B9 +poslist6_id=SWSTrackList +poslist6_sz=24 +poslist7_data=320000007C020000AE0100006D0300000000000000000000CF +poslist7_id=SWSProjectList +poslist7_sz=24 +poslist8_data=3200000086020000B3010000B6030000000000000000000027 +poslist8_id=FNGGroove +poslist8_sz=24 +poslist9_data=410000006700000023040000150300000000000000000000E7 +poslist9_id=BR - ContextualToolbars WndPos +poslist9_sz=24 +poslist10_data=00000000000000000000000000000000000000000000000000 +poslist10_id=BR - AnalyzeLoudness WndPos +poslist10_sz=24 +poslist11_data=7C0000002A010000F6040000E5020000000000000000000088 +poslist11_id=SnMLiveConfigs +poslist11_sz=24 +poslist12_data=00000000000000000000000000000000000000000000000000 +poslist12_id=SnMLiveConfigMonitor1 +poslist12_sz=24 +poslist13_data=00000000000000000000000000000000000000000000000000 +poslist13_id=SnMLiveConfigMonitor2 +poslist13_sz=24 +poslist14_data=00000000000000000000000000000000000000000000000000 +poslist14_id=SnMLiveConfigMonitor3 +poslist14_sz=24 +poslist15_data=00000000000000000000000000000000000000000000000000 +poslist15_id=SnMLiveConfigMonitor4 +poslist15_sz=24 +poslist16_data=00000000000000000000000000000000000000000000000000 +poslist16_id=SnMLiveConfigMonitor5 +poslist16_sz=24 +poslist17_data=00000000000000000000000000000000000000000000000000 +poslist17_id=SnMLiveConfigMonitor6 +poslist17_sz=24 +poslist18_data=00000000000000000000000000000000000000000000000000 +poslist18_id=SnMLiveConfigMonitor7 +poslist18_sz=24 +poslist19_data=00000000000000000000000000000000000000000000000000 +poslist19_id=SnMLiveConfigMonitor8 +poslist19_sz=24 +poslist1_data=000000000000000000000000000000000000000000 +poslist1_id=video +poslist1_sz=20 +poslist20_data=720000007F020000C403000094030000020000000400000057 +poslist20_id=SnMResources +poslist20_sz=24 +poslist21_data=35020000D201000012040000BC0200000000000005000000E3 +poslist21_id=SnMNotesHelp +poslist21_sz=24 +poslist22_data=84020000800000003E0400005A0200000000000000000000A4 +poslist22_id=SnMFind +poslist22_sz=24 +poslist23_data=C7010000BF000000810300004301000000000000000000004F +poslist23_id=SnMImage +poslist23_sz=24 +poslist24_data=32000000B802000086010000B603000000000000000000002C +poslist24_id=SnMRgnPlaylist +poslist24_sz=24 +poslist25_data=8E00000087000000330500006C0200000000000000000000BB +poslist25_id=SnMCyclaction +poslist25_sz=24 +poslist26_data=03020000910000000F0300001202000060030000040000000000000023 +poslist26_id=toolbar:1 +poslist26_sz=28 +poslist27_data=03030000F2000000F402000073020000450300000400000004000000B3 +poslist27_id=toolbar:2 +poslist27_sz=28 +poslist28_data=02040000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0400000002000000FC +poslist28_id=toolbar:3 +poslist28_sz=28 +poslist29_data=02040000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0400000003000000FD +poslist29_id=toolbar:4 +poslist29_sz=28 +poslist30_data=02030000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0400000004000000FD +poslist30_id=toolbar:5 +poslist30_sz=28 +poslist31_data=00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0400000005000000F9 +poslist31_id=toolbar:6 +poslist31_sz=28 +poslist32_data=03040000890000003A0300000A0200008B030000040000000600000071 +poslist32_id=toolbar:7 +poslist32_sz=28 +poslist33_data=02030000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF040000000700000000 +poslist33_id=toolbar:8 +poslist33_sz=28 +poslist34_data=02040000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF040000000800000002 +poslist34_id=toolbar:9 +poslist34_sz=28 +poslist35_data=02040000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF040000000900000003 +poslist35_id=toolbar:10 +poslist35_sz=28 +poslist36_data=00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF040000000A000000FE +poslist36_id=toolbar:11 +poslist36_sz=28 +poslist37_data=00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF040000000B000000FF +poslist37_id=toolbar:12 +poslist37_sz=28 +poslist38_data=00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF040000000C00000000 +poslist38_id=toolbar:13 +poslist38_sz=28 +poslist39_data=00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF040000000C00000000 +poslist39_id=toolbar:14 +poslist39_sz=28 +poslist40_data=00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF040000000C00000000 +poslist40_id=toolbar:15 +poslist40_sz=28 +poslist41_data=00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF040000000C00000000 +poslist41_id=toolbar:16 +poslist41_sz=28 +poslist42_data=02050000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF040000000F0000000A +poslist42_id=toolbar:17 +poslist42_sz=28 +poslist43_data=00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF040000001000000004 +poslist43_id=toolbar:18 +poslist43_sz=28 +poslist44_data=00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF040000001100000005 +poslist44_id=toolbar:19 +poslist44_sz=28 +poslist45_data=00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF040000001200000006 +poslist45_id=toolbar:20 +poslist45_sz=28 +poslist46_data=00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF040000001300000007 +poslist46_id=toolbar:21 +poslist46_sz=28 +poslist47_data=00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF040000001400000008 +poslist47_id=toolbar:22 +poslist47_sz=28 +poslist48_data=00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF040000001500000009 +poslist48_id=toolbar:23 +poslist48_sz=28 +poslist49_data=02100000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF04000000150000001B +poslist49_id=toolbar:24 +poslist49_sz=28 +poslist50_data=00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF04000000170000000B +poslist50_id=toolbar:25 +poslist50_sz=28 +poslist51_data=00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF04000000180000000C +poslist51_id=toolbar:26 +poslist51_sz=28 +poslist52_data=00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF04000000190000000D +poslist52_id=toolbar:27 +poslist52_sz=28 +poslist53_data=00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF040000001A0000000E +poslist53_id=toolbar:28 +poslist53_sz=28 +poslist54_id=mastermixer +poslist54_sz=0 +poslist55_data=02010000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000F3 +poslist55_id=navigator +poslist55_sz=24 +poslist56_data=02050000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000F7 +poslist56_id=perf +poslist56_sz=24 +poslist57_data=00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000F0 +poslist57_id=vkb +poslist57_sz=24 +poslist58_data=02050000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000F7 +poslist58_id=bigclock +poslist58_sz=24 +poslist59_data=00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000F0 +poslist59_id=converter +poslist59_sz=24 +poslist5_data=91000000C701000016020000600300000200000000000000D6 +poslist5_id=SWSSnapshots +poslist5_sz=24 +poslist60_data=00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000F0 +poslist60_id=actions +poslist60_sz=24 +poslist61_data=00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000F0 +poslist61_id=itemprops +poslist61_sz=24 +poslist62_data=00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000F0 +poslist62_id=trackmgr +poslist62_sz=24 +poslist63_data=02060000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000F8 +poslist63_id=regmgr +poslist63_sz=24 +poslist64_data=00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000F0 +poslist64_id=fadeedit +poslist64_sz=24 +poslist65_data=02070000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000F9 +poslist65_id=projbay_0 +poslist65_sz=24 +poslist66_data=00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000F0 +poslist66_id=projbay_1 +poslist66_sz=24 +poslist67_data=00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000F0 +poslist67_id=projbay_2 +poslist67_sz=24 +poslist68_data=00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000F0 +poslist68_id=projbay_3 +poslist68_sz=24 +poslist69_data=00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000F0 +poslist69_id=projbay_4 +poslist69_sz=24 +poslist70_data=00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000F0 +poslist70_id=projbay_5 +poslist70_sz=24 +poslist71_data=00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000F0 +poslist71_id=projbay_6 +poslist71_sz=24 +poslist72_data=00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000F0 +poslist72_id=projbay_7 +poslist72_sz=24 +poslist73_data=030100000000000000000000000000004A0100004F +poslist73_id=mixer +poslist73_sz=20 +poslist74_data=020100000000000000000000000000000000000003 +poslist74_id=undo +poslist74_sz=20 +poslist75_data=030600002D00000095020000670300006D030000A7 +poslist75_id=routing +poslist75_sz=20 +poslist76_data=030000000000000000000000110400006A0000000300000085 +poslist76_id=transport +poslist76_sz=24 +poslist77_data=00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEC +poslist77_id=fxbrowser +poslist77_sz=24 +poslist78_id=nudge +poslist78_sz=0 +poslist79_data=00000000000000000000000000000000000000000000000000000000570100002F0000002F00000050000000000000008A37813F0000000087 +poslist79_id=docker_0 +poslist79_sz=56 +poslist80_data=0100000000000000000000000000000000000000000000005F14973F0000803D07 +poslist80_id=docker_1 +poslist80_sz=32 +poslist81_data=010000000000000000000000000000000000000000000000E345843F0000003E2A +poslist81_id=docker_2 +poslist81_sz=32 +poslist82_data=0100000000000000000000000000000000000000000000007B4B493F0000403ECD +poslist82_id=docker_3 +poslist82_sz=32 +poslist83_data=030000000000000000000000000000000000000000000000A088113F0000803E39 +poslist83_id=docker_4 +poslist83_sz=32 +poslist84_data=000000000000000000000000000000000000000000000000ED907D3F0000A03E17 +poslist84_id=docker_5 +poslist84_sz=32 +poslist85_data=0000000000000000000000000000000000000000000000000000803F0000C03EBD +poslist85_id=docker_6 +poslist85_sz=32 +poslist86_data=0000000000000000000000000000000000000000000000000000803F0000E03EDD +poslist86_id=docker_7 +poslist86_sz=32 +poslist87_data=0000000000000000000000000000000000000000000000000000803F0000003FFE +poslist87_id=docker_8 +poslist87_sz=32 +poslist88_data=0000000000000000000000000000000000000000000000000000803F0000103F0E +poslist88_id=docker_9 +poslist88_sz=32 +poslist89_data=0000000000000000000000000000000000000000000000000000803F0000203F1E +poslist89_id=docker_10 +poslist89_sz=32 +poslist90_data=0000000000000000000000000000000000000000000000000000803F0000303F2E +poslist90_id=docker_11 +poslist90_sz=32 +poslist91_data=0000000000000000000000000000000000000000000000000000803F0000403F3E +poslist91_id=docker_12 +poslist91_sz=32 +poslist92_data=0000000000000000000000000000000000000000000000000000803F0000503F4E +poslist92_id=docker_13 +poslist92_sz=32 +poslist93_data=0000000000000000000000000000000000000000000000000000803F0000603F5E +poslist93_id=docker_14 +poslist93_sz=32 +poslist94_data=0080000000000000000000000000000000000000000000000000803F0000703FEE +poslist94_id=docker_15 +poslist94_sz=32 +poslist95_data=020600002E000000CA010000020300004D03000056 +poslist95_id=fxchain:hwout +poslist95_sz=20 +poslist_size=96 + +[sset1] +dockersel=mixer +dockersel1=toolbar:1 +dockersel2=toolbar:2 +dockersel3=toolbar:7 +dockersel5=regmgr +layouts=<"" 'trans' "Ultraschall 2 Trans" 'master_mcp' "Ultraschall 2" 'mcp' "Ultraschall 2" 'master_tcp' "3. Black Master Track" 'tcp' "Ultraschall 2"> +leftpanel_size=271 +mainwnd_rect=5900000046000000490500004603000036 +mainwnd_status=0 +mask=-1026 +mixer_flag1=11 +mixer_flag2=52 +name=Record +poslist0_data=020100000000000000000000000000000000000003 +poslist0_id=explorer +poslist0_sz=20 +poslist2_data=11020000B80000002F04000014020000000000000000000014 +poslist2_id=SWSAutoColor +poslist2_sz=24 +poslist3_data=910000004F0200000F02000060030000000000000000000056 +poslist3_id=SWSMarkerList +poslist3_sz=24 +poslist4_data=91000000F9020000F6010000600300000000000000000000E6 +poslist4_id=ReaConsole +poslist4_sz=24 +poslist6_data=00000000000000000000000000000000000000000000000000 +poslist6_id=SWSTrackList +poslist6_sz=24 +poslist7_data=00000000000000000000000000000000000000000000000000 +poslist7_id=SWSProjectList +poslist7_sz=24 +poslist8_data=00000000000000000000000000000000000000000000000000 +poslist8_id=FNGGroove +poslist8_sz=24 +poslist9_data=410000006700000023040000150300000000000000000000E7 +poslist9_id=BR - ContextualToolbars WndPos +poslist9_sz=24 +poslist10_data=00000000000000000000000000000000000000000000000000 +poslist10_id=BR - AnalyzeLoudness WndPos +poslist10_sz=24 +poslist11_data=7C0000002A010000F6040000E5020000000000000000000088 +poslist11_id=SnMLiveConfigs +poslist11_sz=24 +poslist12_data=00000000000000000000000000000000000000000000000000 +poslist12_id=SnMLiveConfigMonitor1 +poslist12_sz=24 +poslist13_data=00000000000000000000000000000000000000000000000000 +poslist13_id=SnMLiveConfigMonitor2 +poslist13_sz=24 +poslist14_data=00000000000000000000000000000000000000000000000000 +poslist14_id=SnMLiveConfigMonitor3 +poslist14_sz=24 +poslist15_data=00000000000000000000000000000000000000000000000000 +poslist15_id=SnMLiveConfigMonitor4 +poslist15_sz=24 +poslist16_data=00000000000000000000000000000000000000000000000000 +poslist16_id=SnMLiveConfigMonitor5 +poslist16_sz=24 +poslist17_data=00000000000000000000000000000000000000000000000000 +poslist17_id=SnMLiveConfigMonitor6 +poslist17_sz=24 +poslist18_data=00000000000000000000000000000000000000000000000000 +poslist18_id=SnMLiveConfigMonitor7 +poslist18_sz=24 +poslist19_data=00000000000000000000000000000000000000000000000000 +poslist19_id=SnMLiveConfigMonitor8 +poslist19_sz=24 +poslist1_data=000000000000000000000000000000000000000000 +poslist1_id=video +poslist1_sz=20 +poslist20_data=720000007F020000C403000094030000020000000400000057 +poslist20_id=SnMResources +poslist20_sz=24 +poslist21_data=35020000D201000012040000BC0200000000000005000000E3 +poslist21_id=SnMNotesHelp +poslist21_sz=24 +poslist22_data=84020000800000003E0400005A0200000000000000000000A4 +poslist22_id=SnMFind +poslist22_sz=24 +poslist23_data=C7010000BF000000810300004301000000000000000000004F +poslist23_id=SnMImage +poslist23_sz=24 +poslist24_data=32000000B802000086010000B603000000000000000000002C +poslist24_id=SnMRgnPlaylist +poslist24_sz=24 +poslist25_data=8E00000087000000330500006C0200000000000000000000BB +poslist25_id=SnMCyclaction +poslist25_sz=24 +poslist26_data=03020000910000000F0300001202000060030000040000000000000023 +poslist26_id=toolbar:1 +poslist26_sz=28 +poslist27_data=03030000F2000000F402000073020000450300000400000004000000B3 +poslist27_id=toolbar:2 +poslist27_sz=28 +poslist28_data=0000000066000000980300008D0000007C020000040000000200000012 +poslist28_id=toolbar:3 +poslist28_sz=28 +poslist29_data=0207000041000000C4020000C2010000150300000400000003000000F2 +poslist29_id=toolbar:4 +poslist29_sz=28 +poslist30_data=00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0400000004000000F8 +poslist30_id=toolbar:5 +poslist30_sz=28 +poslist31_data=00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0400000005000000F9 +poslist31_id=toolbar:6 +poslist31_sz=28 +poslist32_data=03040000890000003A0300000A0200008B030000040000000600000071 +poslist32_id=toolbar:7 +poslist32_sz=28 +poslist33_data=02030000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF040000000700000000 +poslist33_id=toolbar:8 +poslist33_sz=28 +poslist34_data=00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0400000008000000FC +poslist34_id=toolbar:9 +poslist34_sz=28 +poslist35_data=00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0400000009000000FD +poslist35_id=toolbar:10 +poslist35_sz=28 +poslist36_data=00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF040000000A000000FE +poslist36_id=toolbar:11 +poslist36_sz=28 +poslist37_data=00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF040000000B000000FF +poslist37_id=toolbar:12 +poslist37_sz=28 +poslist38_data=02020000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF040000000C00000004 +poslist38_id=toolbar:13 +poslist38_sz=28 +poslist39_data=00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF040000000C00000000 +poslist39_id=toolbar:14 +poslist39_sz=28 +poslist40_data=00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF040000000C00000000 +poslist40_id=toolbar:15 +poslist40_sz=28 +poslist41_data=00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF040000000C00000000 +poslist41_id=toolbar:16 +poslist41_sz=28 +poslist42_data=00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF040000000F00000003 +poslist42_id=toolbar:17 +poslist42_sz=28 +poslist43_data=00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF040000001000000004 +poslist43_id=toolbar:18 +poslist43_sz=28 +poslist44_data=00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF040000001100000005 +poslist44_id=toolbar:19 +poslist44_sz=28 +poslist45_data=00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF040000001200000006 +poslist45_id=toolbar:20 +poslist45_sz=28 +poslist46_data=00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF040000001300000007 +poslist46_id=toolbar:21 +poslist46_sz=28 +poslist47_data=00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF040000001400000008 +poslist47_id=toolbar:22 +poslist47_sz=28 +poslist48_data=00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF040000001500000009 +poslist48_id=toolbar:23 +poslist48_sz=28 +poslist49_data=02100000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF04000000150000001B +poslist49_id=toolbar:24 +poslist49_sz=28 +poslist50_data=00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF04000000170000000B +poslist50_id=toolbar:25 +poslist50_sz=28 +poslist51_data=00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF04000000180000000C +poslist51_id=toolbar:26 +poslist51_sz=28 +poslist52_data=00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF04000000190000000D +poslist52_id=toolbar:27 +poslist52_sz=28 +poslist53_data=00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF040000001A0000000E +poslist53_id=toolbar:28 +poslist53_sz=28 +poslist54_id=mastermixer +poslist54_sz=0 +poslist55_data=02010000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000F3 +poslist55_id=navigator +poslist55_sz=24 +poslist56_data=02050000F100000038020000EE01000069030000000000008D +poslist56_id=perf +poslist56_sz=24 +poslist57_data=00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000F0 +poslist57_id=vkb +poslist57_sz=24 +poslist58_data=02050000D700000075010000D6020000350200000000000063 +poslist58_id=bigclock +poslist58_sz=24 +poslist59_data=00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000F0 +poslist59_id=converter +poslist59_sz=24 +poslist5_data=91000000C701000016020000600300000200000000000000D6 +poslist5_id=SWSSnapshots +poslist5_sz=24 +poslist60_data=000000004100000056010000B7020000150300000000000069 +poslist60_id=actions +poslist60_sz=24 +poslist61_data=00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000F0 +poslist61_id=itemprops +poslist61_sz=24 +poslist62_data=00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000F0 +poslist62_id=trackmgr +poslist62_sz=24 +poslist63_data=030600008E00000084020000B60200005F0300000000000037 +poslist63_id=regmgr +poslist63_sz=24 +poslist64_data=00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000F0 +poslist64_id=fadeedit +poslist64_sz=24 +poslist65_data=00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000F0 +poslist65_id=projbay_0 +poslist65_sz=24 +poslist66_data=00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000F0 +poslist66_id=projbay_1 +poslist66_sz=24 +poslist67_data=00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000F0 +poslist67_id=projbay_2 +poslist67_sz=24 +poslist68_data=00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000F0 +poslist68_id=projbay_3 +poslist68_sz=24 +poslist69_data=00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000F0 +poslist69_id=projbay_4 +poslist69_sz=24 +poslist70_data=00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000F0 +poslist70_id=projbay_5 +poslist70_sz=24 +poslist71_data=00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000F0 +poslist71_id=projbay_6 +poslist71_sz=24 +poslist72_data=00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000F0 +poslist72_id=projbay_7 +poslist72_sz=24 +poslist73_data=030100000000000000000000000000004A0100004F +poslist73_id=mixer +poslist73_sz=20 +poslist74_data=020100000000000000000000000000000000000003 +poslist74_id=undo +poslist74_sz=20 +poslist75_data=0306000000000000000000005000000050000000A9 +poslist75_id=routing +poslist75_sz=20 +poslist76_data=030000000000000000000000110400006B0000000300000086 +poslist76_id=transport +poslist76_sz=24 +poslist77_data=00000000B2000000690100004A030000B9020000AE000000D2 +poslist77_id=fxbrowser +poslist77_sz=24 +poslist78_id=nudge +poslist78_sz=0 +poslist79_data=00000000000000000000000000000000000000000000000000000000560100002F0000002F00000050000000000000007D0A703F000000003B +poslist79_id=docker_0 +poslist79_sz=56 +poslist80_data=010000000000000000000000000000000000000000000000C6AF973F0000803D09 +poslist80_id=docker_1 +poslist80_sz=32 +poslist81_data=010000000000000000000000000000000000000000000000FEA0833F0000003E9F +poslist81_id=docker_2 +poslist81_sz=32 +poslist82_data=010000000000000000000000000000000000000000000000785E493F0000403EDD +poslist82_id=docker_3 +poslist82_sz=32 +poslist83_data=000000000000000000000000000000000000000000000000EDCB0B3F0000803EC0 +poslist83_id=docker_4 +poslist83_sz=32 +poslist84_data=000000000000000000000000000000000000000000000000CB14C23F0000A03EBE +poslist84_id=docker_5 +poslist84_sz=32 +poslist85_data=00000000000000000000000000000000000000000000000039F06D3D0000C03ED1 +poslist85_id=docker_6 +poslist85_sz=32 +poslist86_data=0300000000000000000000000000000000000000000000000000803F0000E03EE0 +poslist86_id=docker_7 +poslist86_sz=32 +poslist87_data=0000000000000000000000000000000000000000000000000000803F0000003FFE +poslist87_id=docker_8 +poslist87_sz=32 +poslist88_data=0000000000000000000000000000000000000000000000000000803F0000103F0E +poslist88_id=docker_9 +poslist88_sz=32 +poslist89_data=0000000000000000000000000000000000000000000000000000803F0000203F1E +poslist89_id=docker_10 +poslist89_sz=32 +poslist90_data=0000000000000000000000000000000000000000000000000000803F0000303F2E +poslist90_id=docker_11 +poslist90_sz=32 +poslist91_data=0000000000000000000000000000000000000000000000000000803F0000403F3E +poslist91_id=docker_12 +poslist91_sz=32 +poslist92_data=0000000000000000000000000000000000000000000000000000803F0000503F4E +poslist92_id=docker_13 +poslist92_sz=32 +poslist93_data=0000000000000000000000000000000000000000000000000000803F0000603F5E +poslist93_id=docker_14 +poslist93_sz=32 +poslist94_data=008000000000000065010000A200000035020000E10000000000803F0000703F0E +poslist94_id=docker_15 +poslist94_sz=32 +poslist95_data=020600000000000000000000000000000000000008 +poslist95_id=fxchain:hwout +poslist95_sz=20 +poslist_size=96 + +[sset2] +dockersel=mixer +dockersel1=toolbar:1 +dockersel2=toolbar:2 +dockersel3=toolbar:7 +dockersel4=navigator +dockersel5=regmgr +layouts=<"" 'trans' "Ultraschall 2 Trans" 'master_mcp' "Ultraschall 2" 'mcp' "Ultraschall 2" 'master_tcp' "3. Black Master Track" 'tcp' "Ultraschall 2"> +leftpanel_size=271 +mainwnd_rect=0400000009000000F40400000903000011 +mainwnd_status=0 +mask=-1026 +mixer_flag1=11 +mixer_flag2=52 +name=Edit +poslist0_data=020100000000000000000000000000000000000003 +poslist0_id=explorer +poslist0_sz=20 +poslist2_data=D6010000F3000000F40300004F020000000000000000000012 +poslist2_id=SWSAutoColor +poslist2_sz=24 +poslist3_data=BD02000068000000630500005F0200000000000000000000F0 +poslist3_id=SWSMarkerList +poslist3_sz=24 +poslist4_data=91000000F9020000F6010000600300000000000000000000E6 +poslist4_id=ReaConsole +poslist4_sz=24 +poslist6_data=320000002A02000033020000B603000000000000000000004C +poslist6_id=SWSTrackList +poslist6_sz=24 +poslist7_data=32000000C5020000AE010000B6030000000000000000000061 +poslist7_id=SWSProjectList +poslist7_sz=24 +poslist8_data=3200000086020000B3010000B6030000000000000000000027 +poslist8_id=FNGGroove +poslist8_sz=24 +poslist9_data=410000006700000023040000150300000000000000000000E7 +poslist9_id=BR - ContextualToolbars WndPos +poslist9_sz=24 +poslist10_data=98010000E8000000BC040000ED010000030000000000000032 +poslist10_id=BR - AnalyzeLoudness WndPos +poslist10_sz=24 +poslist11_data=7C0000002A010000F6040000E5020000000000000000000088 +poslist11_id=SnMLiveConfigs +poslist11_sz=24 +poslist12_data=00000000000000000000000000000000000000000000000000 +poslist12_id=SnMLiveConfigMonitor1 +poslist12_sz=24 +poslist13_data=00000000000000000000000000000000000000000000000000 +poslist13_id=SnMLiveConfigMonitor2 +poslist13_sz=24 +poslist14_data=00000000000000000000000000000000000000000000000000 +poslist14_id=SnMLiveConfigMonitor3 +poslist14_sz=24 +poslist15_data=00000000000000000000000000000000000000000000000000 +poslist15_id=SnMLiveConfigMonitor4 +poslist15_sz=24 +poslist16_data=00000000000000000000000000000000000000000000000000 +poslist16_id=SnMLiveConfigMonitor5 +poslist16_sz=24 +poslist17_data=00000000000000000000000000000000000000000000000000 +poslist17_id=SnMLiveConfigMonitor6 +poslist17_sz=24 +poslist18_data=00000000000000000000000000000000000000000000000000 +poslist18_id=SnMLiveConfigMonitor7 +poslist18_sz=24 +poslist19_data=00000000000000000000000000000000000000000000000000 +poslist19_id=SnMLiveConfigMonitor8 +poslist19_sz=24 +poslist1_data=000000000000000000000000000000000000000000 +poslist1_id=video +poslist1_sz=20 +poslist20_data=720000007F020000C403000094030000020000000400000057 +poslist20_id=SnMResources +poslist20_sz=24 +poslist21_data=35020000D201000012040000BC0200000000000005000000E3 +poslist21_id=SnMNotesHelp +poslist21_sz=24 +poslist22_data=84020000800000003E0400005A0200000000000000000000A4 +poslist22_id=SnMFind +poslist22_sz=24 +poslist23_data=C7010000BF000000810300004301000000000000000000004F +poslist23_id=SnMImage +poslist23_sz=24 +poslist24_data=32000000B802000086010000B603000000000000000000002C +poslist24_id=SnMRgnPlaylist +poslist24_sz=24 +poslist25_data=8E00000087000000330500006C0200000000000000000000BB +poslist25_id=SnMCyclaction +poslist25_sz=24 +poslist26_data=03020000910000000F0300001202000060030000040000000000000023 +poslist26_id=toolbar:1 +poslist26_sz=28 +poslist27_data=03030000F2000000F402000073020000450300000400000004000000B3 +poslist27_id=toolbar:2 +poslist27_sz=28 +poslist28_data=02040000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0400000002000000FC +poslist28_id=toolbar:3 +poslist28_sz=28 +poslist29_data=02040000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0400000003000000FD +poslist29_id=toolbar:4 +poslist29_sz=28 +poslist30_data=02030000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0400000004000000FD +poslist30_id=toolbar:5 +poslist30_sz=28 +poslist31_data=00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0400000005000000F9 +poslist31_id=toolbar:6 +poslist31_sz=28 +poslist32_data=03040000890000003A0300000A0200008B030000040000000600000071 +poslist32_id=toolbar:7 +poslist32_sz=28 +poslist33_data=02030000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF040000000700000000 +poslist33_id=toolbar:8 +poslist33_sz=28 +poslist34_data=02040000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF040000000800000002 +poslist34_id=toolbar:9 +poslist34_sz=28 +poslist35_data=02040000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF040000000900000003 +poslist35_id=toolbar:10 +poslist35_sz=28 +poslist36_data=00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF040000000A000000FE +poslist36_id=toolbar:11 +poslist36_sz=28 +poslist37_data=00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF040000000B000000FF +poslist37_id=toolbar:12 +poslist37_sz=28 +poslist38_data=02020000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF040000000C00000004 +poslist38_id=toolbar:13 +poslist38_sz=28 +poslist39_data=00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF040000000C00000000 +poslist39_id=toolbar:14 +poslist39_sz=28 +poslist40_data=00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF040000000C00000000 +poslist40_id=toolbar:15 +poslist40_sz=28 +poslist41_data=00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF040000000C00000000 +poslist41_id=toolbar:16 +poslist41_sz=28 +poslist42_data=0205000038000000CE020000B90100001F030000040000000F000000FE +poslist42_id=toolbar:17 +poslist42_sz=28 +poslist43_data=00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF040000001000000004 +poslist43_id=toolbar:18 +poslist43_sz=28 +poslist44_data=00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF040000001100000005 +poslist44_id=toolbar:19 +poslist44_sz=28 +poslist45_data=00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF040000001200000006 +poslist45_id=toolbar:20 +poslist45_sz=28 +poslist46_data=00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF040000001300000007 +poslist46_id=toolbar:21 +poslist46_sz=28 +poslist47_data=00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF040000001400000008 +poslist47_id=toolbar:22 +poslist47_sz=28 +poslist48_data=00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF040000001500000009 +poslist48_id=toolbar:23 +poslist48_sz=28 +poslist49_data=02100000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF04000000150000001B +poslist49_id=toolbar:24 +poslist49_sz=28 +poslist50_data=00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF04000000170000000B +poslist50_id=toolbar:25 +poslist50_sz=28 +poslist51_data=00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF04000000180000000C +poslist51_id=toolbar:26 +poslist51_sz=28 +poslist52_data=00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF04000000190000000D +poslist52_id=toolbar:27 +poslist52_sz=28 +poslist53_data=00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF040000001A0000000E +poslist53_id=toolbar:28 +poslist53_sz=28 +poslist54_id=mastermixer +poslist54_sz=0 +poslist55_data=03050000380000000C020000080200001F030000000000007A +poslist55_id=navigator +poslist55_sz=24 +poslist56_data=02050000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000F7 +poslist56_id=perf +poslist56_sz=24 +poslist57_data=00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000F0 +poslist57_id=vkb +poslist57_sz=24 +poslist58_data=02050000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000F7 +poslist58_id=bigclock +poslist58_sz=24 +poslist59_data=00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000F0 +poslist59_id=converter +poslist59_sz=24 +poslist5_data=91000000C701000016020000600300000200000000000000D6 +poslist5_id=SWSSnapshots +poslist5_sz=24 +poslist60_data=000000003800000060010000AE0200001F030000000000006B +poslist60_id=actions +poslist60_sz=24 +poslist61_data=00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000F0 +poslist61_id=itemprops +poslist61_sz=24 +poslist62_data=00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000F0 +poslist62_id=trackmgr +poslist62_sz=24 +poslist63_data=030600008E00000084020000B60200005F0300000000000037 +poslist63_id=regmgr +poslist63_sz=24 +poslist64_data=00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000F0 +poslist64_id=fadeedit +poslist64_sz=24 +poslist65_data=0207000038000000C6010000580300001F0300000000000085 +poslist65_id=projbay_0 +poslist65_sz=24 +poslist66_data=00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000F0 +poslist66_id=projbay_1 +poslist66_sz=24 +poslist67_data=00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000F0 +poslist67_id=projbay_2 +poslist67_sz=24 +poslist68_data=00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000F0 +poslist68_id=projbay_3 +poslist68_sz=24 +poslist69_data=00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000F0 +poslist69_id=projbay_4 +poslist69_sz=24 +poslist70_data=00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000F0 +poslist70_id=projbay_5 +poslist70_sz=24 +poslist71_data=00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000F0 +poslist71_id=projbay_6 +poslist71_sz=24 +poslist72_data=00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000F0 +poslist72_id=projbay_7 +poslist72_sz=24 +poslist73_data=030100000000000000000000000000004A0100004F +poslist73_id=mixer +poslist73_sz=20 +poslist74_data=020100000000000000000000000000000000000003 +poslist74_id=undo +poslist74_sz=20 +poslist75_data=02060000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8 +poslist75_id=routing +poslist75_sz=20 +poslist76_data=030000000000000000000000110400006B0000000303000089 +poslist76_id=transport +poslist76_sz=24 +poslist77_data=00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEC +poslist77_id=fxbrowser +poslist77_sz=24 +poslist78_id=nudge +poslist78_sz=0 +poslist79_data=00000000000000000000000000000000000000000000000000000000110100002F0000002A000000180100000000000059D6603F0000000052 +poslist79_id=docker_0 +poslist79_sz=56 +poslist80_data=010000000000000000000000000000000000000000000000E5B4973F0000803D2D +poslist80_id=docker_1 +poslist80_sz=32 +poslist81_data=01000000000000000000000000000000000000000000000071A5833F0000003E17 +poslist81_id=docker_2 +poslist81_sz=32 +poslist82_data=010000000000000000000000000000000000000000000000534B493F0000403EA5 +poslist82_id=docker_3 +poslist82_sz=32 +poslist83_data=020000000000000000000000000000000000000000000000206C033D0000803E8C +poslist83_id=docker_4 +poslist83_sz=32 +poslist84_data=000000000000000000000000000000000000000000000000D3948F3F0000A03E13 +poslist84_id=docker_5 +poslist84_sz=32 +poslist85_data=0300000000000000000000000000000000000000000000009FE4FB3F0000C03EBE +poslist85_id=docker_6 +poslist85_sz=32 +poslist86_data=0000000000000000000000000000000000000000000000000000803F0000E03EDD +poslist86_id=docker_7 +poslist86_sz=32 +poslist87_data=0000000000000000000000000000000000000000000000000000803F0000003FFE +poslist87_id=docker_8 +poslist87_sz=32 +poslist88_data=0000000000000000000000000000000000000000000000000000803F0000103F0E +poslist88_id=docker_9 +poslist88_sz=32 +poslist89_data=0000000000000000000000000000000000000000000000000000803F0000203F1E +poslist89_id=docker_10 +poslist89_sz=32 +poslist90_data=0000000000000000000000000000000000000000000000000000803F0000303F2E +poslist90_id=docker_11 +poslist90_sz=32 +poslist91_data=0000000000000000000000000000000000000000000000000000803F0000403F3E +poslist91_id=docker_12 +poslist91_sz=32 +poslist92_data=0000000000000000000000000000000000000000000000000000803F0000503F4E +poslist92_id=docker_13 +poslist92_sz=32 +poslist93_data=0000000000000000000000000000000000000000000000000000803F0000603F5E +poslist93_id=docker_14 +poslist93_sz=32 +poslist94_data=0080000000000000000000000000000000000000000000000000803F0000703FEE +poslist94_id=docker_15 +poslist94_sz=32 +poslist95_data=0206000020000000CA010000F40200006903000055 +poslist95_id=fxchain:hwout +poslist95_sz=20 +poslist_size=96 + +[sset3] +dockersel=mixer +dockersel1=toolbar:1 +dockersel2=toolbar:2 +dockersel3=toolbar:7 +dockersel4=toolbar:17 +dockersel5=regmgr +dockersel6=projbay_0 +dockersel7=navigator +layouts=<"" 'trans' "Ultraschall 2 Trans" 'master_mcp' "Ultraschall 2" 'mcp' "Ultraschall 2" 'master_tcp' "3. Black Master Track" 'tcp' "Ultraschall 2"> +leftpanel_size=271 +mainwnd_rect=0400000009000000F40400000903000011 +mainwnd_status=0 +mask=-1026 +mixer_flag1=11 +mixer_flag2=52 +name=Storyboard +poslist0_data=020100000000000000000000000000000000000003 +poslist0_id=explorer +poslist0_sz=20 +poslist1_data=000000000000000000000000000000000000000000 +poslist1_id=video +poslist1_sz=20 +poslist3_data=BD02000068000000630500005F0200000000000000000000F0 +poslist3_id=SWSMarkerList +poslist3_sz=24 +poslist4_data=91000000F9020000F6010000600300000000000000000000E6 +poslist4_id=ReaConsole +poslist4_sz=24 +poslist6_data=320000002A02000033020000B603000000000000000000004C +poslist6_id=SWSTrackList +poslist6_sz=24 +poslist7_data=32000000C5020000AE010000B6030000000000000000000061 +poslist7_id=SWSProjectList +poslist7_sz=24 +poslist8_data=3200000086020000B3010000B6030000000000000000000027 +poslist8_id=FNGGroove +poslist8_sz=24 +poslist9_data=00000000000000000000000000000000000000000000000000 +poslist9_id=BR - ContextualToolbars WndPos +poslist9_sz=24 +poslist10_data=00000000000000000000000000000000000000000000000000 +poslist10_id=BR - AnalyzeLoudness WndPos +poslist10_sz=24 +poslist11_data=7C0000002A010000F6040000E5020000000000000000000088 +poslist11_id=SnMLiveConfigs +poslist11_sz=24 +poslist12_data=00000000000000000000000000000000000000000000000000 +poslist12_id=SnMLiveConfigMonitor1 +poslist12_sz=24 +poslist13_data=00000000000000000000000000000000000000000000000000 +poslist13_id=SnMLiveConfigMonitor2 +poslist13_sz=24 +poslist14_data=00000000000000000000000000000000000000000000000000 +poslist14_id=SnMLiveConfigMonitor3 +poslist14_sz=24 +poslist15_data=00000000000000000000000000000000000000000000000000 +poslist15_id=SnMLiveConfigMonitor4 +poslist15_sz=24 +poslist16_data=00000000000000000000000000000000000000000000000000 +poslist16_id=SnMLiveConfigMonitor5 +poslist16_sz=24 +poslist17_data=00000000000000000000000000000000000000000000000000 +poslist17_id=SnMLiveConfigMonitor6 +poslist17_sz=24 +poslist18_data=00000000000000000000000000000000000000000000000000 +poslist18_id=SnMLiveConfigMonitor7 +poslist18_sz=24 +poslist19_data=00000000000000000000000000000000000000000000000000 +poslist19_id=SnMLiveConfigMonitor8 +poslist19_sz=24 +poslist20_data=720000007F020000C403000094030000020000000400000057 +poslist20_id=SnMResources +poslist20_sz=24 +poslist21_data=350200001A02000012040000BC02000003000000050000002F +poslist21_id=SnMNotesHelp +poslist21_sz=24 +poslist22_data=84020000800000003E0400005A0200000000000000000000A4 +poslist22_id=SnMFind +poslist22_sz=24 +poslist23_data=C7010000BF000000810300004301000000000000000000004F +poslist23_id=SnMImage +poslist23_sz=24 +poslist24_data=32000000B802000086010000B603000000000000000000002C +poslist24_id=SnMRgnPlaylist +poslist24_sz=24 +poslist25_data=0E010000AA0000006F050000960200000000000000000000C5 +poslist25_id=SnMCyclaction +poslist25_sz=24 +poslist26_data=03020000910000000F0300001202000060030000040000000000000023 +poslist26_id=toolbar:1 +poslist26_sz=28 +poslist27_data=03030000F2000000F402000073020000450300000400000004000000B3 +poslist27_id=toolbar:2 +poslist27_sz=28 +poslist28_data=02040000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0400000002000000FC +poslist28_id=toolbar:3 +poslist28_sz=28 +poslist29_data=02040000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0400000003000000FD +poslist29_id=toolbar:4 +poslist29_sz=28 +poslist2_data=D6010000F3000000F40300004F020000000000000000000012 +poslist2_id=SWSAutoColor +poslist2_sz=24 +poslist30_data=02030000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0400000004000000FD +poslist30_id=toolbar:5 +poslist30_sz=28 +poslist31_data=00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0400000005000000F9 +poslist31_id=toolbar:6 +poslist31_sz=28 +poslist32_data=03040000890000003A0300000A0200008B030000040000000600000071 +poslist32_id=toolbar:7 +poslist32_sz=28 +poslist33_data=02030000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF040000000700000000 +poslist33_id=toolbar:8 +poslist33_sz=28 +poslist34_data=02040000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF040000000800000002 +poslist34_id=toolbar:9 +poslist34_sz=28 +poslist35_data=02040000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF040000000900000003 +poslist35_id=toolbar:10 +poslist35_sz=28 +poslist36_data=00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF040000000A000000FE +poslist36_id=toolbar:11 +poslist36_sz=28 +poslist37_data=00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF040000000B000000FF +poslist37_id=toolbar:12 +poslist37_sz=28 +poslist38_data=02020000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF040000000C00000004 +poslist38_id=toolbar:13 +poslist38_sz=28 +poslist39_data=00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF040000000C00000000 +poslist39_id=toolbar:14 +poslist39_sz=28 +poslist40_data=00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF040000000C00000000 +poslist40_id=toolbar:15 +poslist40_sz=28 +poslist41_data=00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF040000000C00000000 +poslist41_id=toolbar:16 +poslist41_sz=28 +poslist42_data=0305000038000000CE020000B90100001F030000040000000F000000FF +poslist42_id=toolbar:17 +poslist42_sz=28 +poslist43_data=00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF040000001000000004 +poslist43_id=toolbar:18 +poslist43_sz=28 +poslist44_data=00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF040000001100000005 +poslist44_id=toolbar:19 +poslist44_sz=28 +poslist45_data=00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF040000001200000006 +poslist45_id=toolbar:20 +poslist45_sz=28 +poslist46_data=00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF040000001300000007 +poslist46_id=toolbar:21 +poslist46_sz=28 +poslist47_data=00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF040000001400000008 +poslist47_id=toolbar:22 +poslist47_sz=28 +poslist48_data=00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF040000001500000009 +poslist48_id=toolbar:23 +poslist48_sz=28 +poslist49_data=02100000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF04000000150000001B +poslist49_id=toolbar:24 +poslist49_sz=28 +poslist50_data=00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF04000000170000000B +poslist50_id=toolbar:25 +poslist50_sz=28 +poslist51_data=00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF04000000180000000C +poslist51_id=toolbar:26 +poslist51_sz=28 +poslist52_data=00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF04000000190000000D +poslist52_id=toolbar:27 +poslist52_sz=28 +poslist53_data=00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF040000001A0000000E +poslist53_id=toolbar:28 +poslist53_sz=28 +poslist54_id=mastermixer +poslist54_sz=0 +poslist55_data=0308000038000000F601000008020000090300000000000050 +poslist55_id=navigator +poslist55_sz=24 +poslist56_data=02050000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000F7 +poslist56_id=perf +poslist56_sz=24 +poslist57_data=00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000F0 +poslist57_id=vkb +poslist57_sz=24 +poslist58_data=02050000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000F7 +poslist58_id=bigclock +poslist58_sz=24 +poslist59_data=00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000F0 +poslist59_id=converter +poslist59_sz=24 +poslist5_data=91000000C701000016020000600300000200000000000000D6 +poslist5_id=SWSSnapshots +poslist5_sz=24 +poslist60_data=000000005C020000E7000000D2040000A602000000000000C3 +poslist60_id=actions +poslist60_sz=24 +poslist61_data=00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000F0 +poslist61_id=itemprops +poslist61_sz=24 +poslist62_data=00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000F0 +poslist62_id=trackmgr +poslist62_sz=24 +poslist63_data=030600008E00000084020000B60200005F0300000000000037 +poslist63_id=regmgr +poslist63_sz=24 +poslist64_data=00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000F0 +poslist64_id=fadeedit +poslist64_sz=24 +poslist65_data=0307000038000000C6010000580300001F0300000000000086 +poslist65_id=projbay_0 +poslist65_sz=24 +poslist66_data=00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000F0 +poslist66_id=projbay_1 +poslist66_sz=24 +poslist67_data=00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000F0 +poslist67_id=projbay_2 +poslist67_sz=24 +poslist68_data=00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000F0 +poslist68_id=projbay_3 +poslist68_sz=24 +poslist69_data=00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000F0 +poslist69_id=projbay_4 +poslist69_sz=24 +poslist70_data=00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000F0 +poslist70_id=projbay_5 +poslist70_sz=24 +poslist71_data=00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000F0 +poslist71_id=projbay_6 +poslist71_sz=24 +poslist72_data=00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000F0 +poslist72_id=projbay_7 +poslist72_sz=24 +poslist73_data=030100000000000000000000000000004A0100004F +poslist73_id=mixer +poslist73_sz=20 +poslist74_data=020100000000000000000000000000000000000003 +poslist74_id=undo +poslist74_sz=20 +poslist75_data=02060000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8 +poslist75_id=routing +poslist75_sz=20 +poslist76_data=030000000000000000000000110400006B0000000303000089 +poslist76_id=transport +poslist76_sz=24 +poslist77_data=00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEC +poslist77_id=fxbrowser +poslist77_sz=24 +poslist78_id=nudge +poslist78_sz=0 +poslist79_data=00000000000000000000000000000000000000000000000000000000F30000002F0000002A000000180100000000000059D6603F0000000033 +poslist79_id=docker_0 +poslist79_sz=56 +poslist80_data=010000000000000000000000000000000000000000000000FAB4973F0000803D42 +poslist80_id=docker_1 +poslist80_sz=32 +poslist81_data=01000000000000000000000000000000000000000000000082A5833F0000003E28 +poslist81_id=docker_2 +poslist81_sz=32 +poslist82_data=010000000000000000000000000000000000000000000000064B493F0000403E58 +poslist82_id=docker_3 +poslist82_sz=32 +poslist83_data=0300000000000000000000000000000000000000000000002049923D0000803EF9 +poslist83_id=docker_4 +poslist83_sz=32 +poslist84_data=000000000000000000000000000000000000000000000000D3948F3F0000A03E13 +poslist84_id=docker_5 +poslist84_sz=32 +poslist85_data=0300000000000000000000000000000000000000000000006EDBF63F0000C03E7F +poslist85_id=docker_6 +poslist85_sz=32 +poslist86_data=0200000000000000000000000000000000000000000000000000803F0000E03EDF +poslist86_id=docker_7 +poslist86_sz=32 +poslist87_data=0000000000000000000000000000000000000000000000000000803F0000003FFE +poslist87_id=docker_8 +poslist87_sz=32 +poslist88_data=0000000000000000000000000000000000000000000000000000803F0000103F0E +poslist88_id=docker_9 +poslist88_sz=32 +poslist89_data=0000000000000000000000000000000000000000000000000000803F0000203F1E +poslist89_id=docker_10 +poslist89_sz=32 +poslist90_data=0000000000000000000000000000000000000000000000000000803F0000303F2E +poslist90_id=docker_11 +poslist90_sz=32 +poslist91_data=0000000000000000000000000000000000000000000000000000803F0000403F3E +poslist91_id=docker_12 +poslist91_sz=32 +poslist92_data=0000000000000000000000000000000000000000000000000000803F0000503F4E +poslist92_id=docker_13 +poslist92_sz=32 +poslist93_data=0000000000000000000000000000000000000000000000000000803F0000603F5E +poslist93_id=docker_14 +poslist93_sz=32 +poslist94_data=0080000000000000000000000000000000000000000000000000803F0000703FEE +poslist94_id=docker_15 +poslist94_sz=32 +poslist95_data=0206000020000000CA010000F40200006903000055 +poslist95_id=fxchain:hwout +poslist95_sz=20 +poslist_size=96 + +[sset4] +leftpanel_size=-1 +mainwnd_rect=0000000000000000000000000000000000 +mainwnd_status=0 +mask=0 +mixer_flag1=0 +mixer_flag2=0 +poslist_size=0 + +[sset5] +leftpanel_size=-1 +mainwnd_rect=0000000000000000000000000000000000 +mainwnd_status=0 +mask=0 +mixer_flag1=0 +mixer_flag2=0 +poslist_size=0 + +[sset6] +leftpanel_size=-1 +mainwnd_rect=0000000000000000000000000000000000 +mainwnd_status=0 +mask=0 +mixer_flag1=0 +mixer_flag2=0 +poslist_size=0 + +[sset7] +leftpanel_size=-1 +mainwnd_rect=0000000000000000000000000000000000 +mainwnd_status=0 +mask=0 +mixer_flag1=0 +mixer_flag2=0 +poslist_size=0 + +[sset8] +leftpanel_size=-1 +mainwnd_rect=0000000000000000000000000000000000 +mainwnd_status=0 +mask=0 +mixer_flag1=0 +mixer_flag2=0 +poslist_size=0 + +[sset9] +leftpanel_size=-1 +mainwnd_rect=0000000000000000000000000000000000 +mainwnd_status=0 +mask=0 +mixer_flag1=0 +mixer_flag2=0 +poslist_size=0 + diff --git a/reaper-vstplugins64.ini b/reaper-vstplugins64.ini new file mode 100644 index 0000000..5056b90 --- /dev/null +++ b/reaper-vstplugins64.ini @@ -0,0 +1,45 @@ +[vstcache] +reacast.vst.dylib=806489ACB073D301,1919246691,ReaCast (Cockos) +reacomp.vst.dylib=806489ACB073D301,1919247213,ReaComp (Cockos) +reacontrolMIDI.vst.dylib=806489ACB073D301,1919118692,ReaControlMIDI (Cockos) +readelay.vst.dylib=806489ACB073D301,1919247468,ReaDelay (Cockos) +reaeq.vst.dylib=806489ACB073D301,1919247729,ReaEQ (Cockos) +reafir.vst.dylib=806489ACB073D301,1919247986,ReaFir (FFT EQ+Dynamics Processor) (Cockos) +reagate.vst.dylib=806489ACB073D301,1919248244,ReaGate (Cockos) +reainsert.vst.dylib=806489ACB073D301,1919250281,ReaInsert (Cockos) +reaninjam.vst.dylib=806489ACB073D301,1919250026,ReaNINJAM (Cockos) +reapitch.vst.dylib=806489ACB073D301,1919250531,ReaPitch (Cockos) +reasamplomatic.vst.dylib=806489ACB073D301,1920167789,ReaSamplOmatic5000 (Cockos)!!!VSTi +reastream.vst.dylib=806489ACB073D301,1920169074,ReaStream (Cockos) (8ch) +reasurround.vst.dylib=806489ACB073D301,1920168548,ReaSurround (Cockos) +reasyndr.vst.dylib=806489ACB073D301,1919251300,ReaSynDr (Cockos) (4 out)!!!VSTi +reasynth.vst.dylib=806489ACB073D301,1919251321,ReaSynth (Cockos)!!!VSTi +reatune.vst.dylib=806489ACB073D301,1919251566,ReaTune (Cockos) +reaverb.vst.dylib=806489ACB073D301,1919252066,ReaVerb (Cockos) +reaverbate.vst.dylib=806489ACB073D301,1920361016,ReaVerbate (Cockos) +reavocode.vst.dylib=806489ACB073D301,1919252068,ReaVocode (Cockos) +reavoice.vst.dylib=806489ACB073D301,1919252067,ReaVoice (Cockos) +reaxcomp.vst.dylib=806489ACB073D301,1919252579,ReaXcomp (Cockos) + +reacast.dll=00A141400558D301,1919246691,ReaCast (Cockos) +reacomp.dll=00F762C30558D301,1919247213,ReaComp (Cockos) +reacontrolmidi.dll=008DA2610558D301,1919118692,ReaControlMIDI (Cockos) +readelay.dll=003577B70558D301,1919247468,ReaDelay (Cockos) +reaeq.dll=0070CFBF0558D301,1919247729,ReaEQ (Cockos) +reafir.dll=008FD9B90558D301,1919247986,ReaFir (FFT EQ+Dynamics Processor) (Cockos) +reagate.dll=00DB14B50558D301,1919248244,ReaGate (Cockos) +reainsert.dll=0081B2B20558D301,1919250281,ReaInsert (Cockos) +reaninjam.dll=009D00C10558D301,1919250026,ReaNINJAM (Cockos) +reapitch.dll=0081B2B20558D301,1919250531,ReaPitch (Cockos) +reasamplomatic.dll=005481B10558D301,1920167789,ReaSamplOmatic5000 (Cockos)!!!VSTi +reastream.dll=00FA1EAF0558D301,1920169074,ReaStream (Cockos) (8ch) +reasurround.dll=0036FC4A0558D301,1920168548,ReaSurround (Cockos) +reasyndr.dll=001929A90558D301,1919251300,ReaSynDr (Cockos) (4 out)!!!VSTi +reasynth.dll=00BFC6A60558D301,1919251321,ReaSynth (Cockos)!!!VSTi +reatune.dll=001929A90558D301,1919251566,ReaTune (Cockos) +reaverb.dll=00FA1EAF0558D301,1919252066,ReaVerb (Cockos) +reaverbate.dll=003577B70558D301,1920361016,ReaVerbate (Cockos) +reavocode.dll=003833A30558D301,1919252068,ReaVocode (Cockos) +reavoice.dll=003833A30558D301,1919252067,ReaVoice (Cockos) +reaxcomp.dll=00846E9E0558D301,1919252579,ReaXcomp (Cockos) +MT_PowerDrumKit.dll=007A4E3F22A7D201,1297371204,MT-PowerDrumKit (MANDA AUDIO) (16 out)!!!VSTi diff --git a/reaper.ini b/reaper.ini new file mode 100644 index 0000000..0bb1fcf --- /dev/null +++ b/reaper.ini @@ -0,0 +1,1522 @@ +[actions] +dock=0 +wnd_height=447 +wnd_left=65 +wnd_top=342 +wnd_vis=0 +wnd_width=630 + +[aiff sink defaults] +default=666669611000A6 +default_size=6 + +[alias_in_CoreAudio_Hauptgerä] +ch0=0 +ch1=1 +ch2=2 +ch3=3 +ch4=4 +ch5=5 +ch6=6 +ch7=7 +map_hwnch=8 +map_size=8 +name0=USH Einspieler +name1=USH Einspieler +name2= +name3= +name4= +name5= +name6=Skype Gast +name7=Skype Send + +[alias_out_CoreAudio_Hauptgerä] +ch0=0 +ch1=1 +ch2=2 +ch3=3 +ch4=4 +ch5=5 +ch6=6 +ch7=7 +map_hwnch=8 +map_size=8 +name0=USH Einspieler +name1=USH Einspieler +name2=Skype Gast +name3=Skype Send +name4=USH Stream +name5=USH Stream +name6= +name7= + +[alias_out_CoreAudio_Test1] +ch0=0 +ch1=1 +ch2=2 +ch3=3 +ch4=4 +map_hwnch=5 +map_size=5 +name0=H6 -L +name1=H6 -R +name2=Stream -L +name3=Stream -R +name4=SKYPE Speak + +[audioconfig] +allow_sr_override=1 +asio_bsize=256 +asio_bsize_use=0 +asio_driver=0 +asio_driver_name="US-1800" +asio_input0=0 +asio_input1=7 +asio_output0=0 +asio_output1=3 +asio_resetignore=0 +asio_srate=44100 +asio_srate_use=0 +asio_zeromode=0 +dsound_bps=16 +dsound_bs=1024 +dsound_devicein_0=0 +dsound_devicein_1=0 +dsound_devicein_2=0 +dsound_devicein_3=0 +dsound_deviceout_0=0 +dsound_deviceout_1=0 +dsound_deviceout_2=0 +dsound_deviceout_3=0 +dsound_nch_in=2 +dsound_nch_out=2 +dsound_numblocks=8 +dsound_srate=44100 +dummy_blocksize=1024 +dummy_srate=44100 +ks_bps=16 +ks_bs=512 +ks_devin=-1 +ks_devout=-1 +ks_driver_in= +ks_driver_out= +ks_nch_in=2 +ks_nch_out=2 +ks_numblocks=4 +ks_srate=48000 +mode=5 +wasapi_bps=16 +wasapi_bs=512 +wasapi_devin=-1 +wasapi_devin2=-1 +wasapi_devout=-1 +wasapi_devout2=-1 +wasapi_driver_in= +wasapi_driver_out= +wasapi_mode=0 +wasapi_nch_in=2 +wasapi_nch_out=2 +wasapi_srate=48000 +waveout_bps=16 +waveout_bs=1024 +waveout_devicein=-1 +waveout_deviceout=-1 +waveout_driver_in= +waveout_driver_out= +waveout_nch_in=2 +waveout_nch_out=2 +waveout_numblocks=8 +waveout_srate=44100 + +[bigclock] +dock=1 +time_mode=5 +wnd_height=192 +wnd_left=215 +wnd_top=373 +wnd_vis=0 +wnd_width=511 + +[color theme] +activetake_tag=0 +auto_item_unsel=6316128 +col_arrangebg=1842204 +col_buttonbg=-2144983514 +col_cursor=5224447 +col_cursor2=5224447 +col_env1=8444928 +col_env10=16384 +col_env11=16776960 +col_env12=65535 +col_env13=16711808 +col_env14=8421440 +col_env15=16711680 +col_env16=8388863 +col_env2=4227136 +col_env3=255 +col_env4=38655 +col_env5=0 +col_env6=16776960 +col_env7=128 +col_env8=8421376 +col_env9=12615680 +col_envlane1_divline=2368548 +col_envlane2_divline=2368548 +col_fadearm=2239893 +col_fadearm2=1710618 +col_fadearm3=1644825 +col_gridlines=10197915 +col_gridlines2=3947580 +col_gridlines3=3947580 +col_main_3dhl=3881787 +col_main_3dsh=2368548 +col_main_bg=-2144128205 +col_main_bg2=2829099 +col_main_editbk=2302755 +col_main_resize=3355443 +col_main_text=11776947 +col_main_text2=2829099 +col_main_textshadow=1907218 +col_mi_bg=2500134 +col_mi_bg2=2500134 +col_mi_fade2=0 +col_mi_fade2_drawmode=163844 +col_mi_fades=3355443 +col_mi_label=12829635 +col_mi_label_float=7368816 +col_mi_label_float_sel=7368816 +col_mi_label_sel=16777215 +col_mixerbg=3355443 +col_offlinetext=32767 +col_peaksedge=13816530 +col_peaksedge2=13816530 +col_peaksedgesel=2763306 +col_peaksedgesel2=2763306 +col_peaksfade1=65280 +col_peaksfade2=255 +col_routinghl1=12648447 +col_routinghl2=16744576 +col_seltrack=13816530 +col_seltrack2=-2134917185 +col_stretchmarker=2368548 +col_stretchmarker_b=2368548 +col_stretchmarker_h0=9868950 +col_stretchmarker_h1=65280 +col_stretchmarker_h2=16711935 +col_stretchmarker_text=2302755 +col_stretchmarker_tm=59904 +col_stretchmarkerm=196608 +col_tcp_text=1907218 +col_tcp_textsel=1907218 +col_tl_bg=1644825 +col_tl_bgsel=16777215 +col_tl_bgsel2=5224447 +col_tl_fg=6710886 +col_tl_fg2=3552822 +col_toolbar_frame=2829099 +col_toolbar_text=10461087 +col_toolbar_text_on=12647359 +col_tr1_bg=1644825 +col_tr1_divline=1644825 +col_tr1_itembgsel=14737629 +col_tr1_peaks=13421772 +col_tr1_ps2=16777215 +col_tr2_bg=1644825 +col_tr2_divline=1644825 +col_tr2_itembgsel=15132386 +col_tr2_peaks=13421772 +col_tr2_ps2=16777215 +col_tracklistbg=3355443 +col_trans_bg=3355443 +col_trans_fg=11776947 +col_transport_editbk=3355443 +col_tsigmark=255 +col_vubot=12566272 +col_vuclip=255 +col_vudoint=0 +col_vuind1=2105376 +col_vuind2=10240 +col_vuind3=65312 +col_vuind4=65535 +col_vuintcol=2105376 +col_vumid=11393536 +col_vumidi=255 +col_vutop=7697781 +docker_bg=2829099 +docker_selface=3355443 +docker_shadow=1907218 +docker_text=11776947 +docker_text_sel=13421772 +docker_unselface=3355443 +env_item_mute=49344 +env_item_pan=8421376 +env_item_pitch=16776960 +env_item_vol=128 +env_sends_mute=49344 +env_track_mute=1074934 +fadearea_color=1644825 +fadearea_drawmode=131072 +fadezone_color=0 +fadezone_drawmode=170243 +genlist_bg=2500135 +genlist_fg=11776947 +genlist_grid=1710618 +genlist_selbg=5921370 +genlist_selfg=16777215 +genlist_seliabg=5921370 +genlist_seliafg=15132390 +group_0=16753246 +group_1=15774556 +group_10=4120575 +group_11=4100351 +group_12=5073919 +group_13=4803058 +group_14=7555570 +group_15=11225586 +group_16=15878614 +group_17=16741328 +group_18=16741270 +group_19=16747136 +group_2=15451994 +group_20=12615680 +group_21=32960 +group_22=12583040 +group_23=49280 +group_24=64 +group_25=16384 +group_26=4194304 +group_27=16448 +group_28=4194368 +group_29=4210688 +group_3=15129178 +group_30=4194368 +group_31=4210688 +group_4=14016600 +group_5=12245846 +group_6=9098835 +group_7=6082898 +group_8=4837750 +group_9=2806183 +guideline_color=8618883 +guideline_drawmode=150529 +io_3dhl=1973790 +io_3dsh=4539717 +io_text=15132390 +item_grouphl=5816063 +itembg_drawmode=196608 +marker=6710886 +marker_lane_bg=1644825 +marker_lane_text=11776947 +marquee_drawmode=189953 +marquee_fill=2236962 +marquee_outline=16777215 +marqueezoom_drawmode=147458 +marqueezoom_fill=16777215 +marqueezoom_outline=65280 +mcp_fx_bypassed=10461087 +mcp_fx_normal=7328767 +mcp_fx_offlined=4474039 +mcp_fxparm_bypassed=6522520 +mcp_fxparm_normal=10724259 +mcp_fxparm_offlined=6513560 +mcp_send_midihw=2631720 +mcp_sends_levels=4670000 +mcp_sends_muted=6522520 +mcp_sends_normal=12561781 +midi_editcurs=2368674 +midi_endpt=3815994 +midi_grid1=2763306 +midi_grid2=2763306 +midi_grid3=2763306 +midi_inline_trackbg1=12961221 +midi_inline_trackbg2=11908533 +midi_itemctl=12961221 +midi_notebg=7109467 +midi_notefg=3223857 +midi_notemute=3487029 +midi_notemute_sel=1579032 +midi_noteon_flash=64 +midi_ofsn=3881787 +midi_ofsnsel=3881787 +midi_pkey1=16777215 +midi_pkey2=0 +midi_pkey3=6118749 +midi_rulerbg=3355443 +midi_rulerfg=7237230 +midi_selbg=16777215 +midi_selbg_drawmode=135169 +midi_selpitch1=5066061 +midi_selpitch2=5066061 +midi_trackbg1=3355443 +midi_trackbg2=2960685 +midi_trackbg_outer1=2697513 +midi_trackbg_outer2=2500134 +midieditorlist_bg=16777215 +midieditorlist_bg2=14799570 +midieditorlist_fg=0 +midieditorlist_fg2=0 +midieditorlist_grid=14737632 +midieditorlist_selbg=16750899 +midieditorlist_selbg2=15763235 +midieditorlist_selfg=16777215 +midieditorlist_selfg2=16777215 +midieditorlist_seliabg=15790320 +midieditorlist_seliafg=0 +midifont_col_dark=4210752 +midifont_col_light=12632256 +midioct=5921370 +midioct_inline=9474192 +playcursor_color=13200430 +playcursor_drawmode=189953 +playrate_edited=6710886 +region=9079434 +region_lane_bg=1644825 +region_lane_text=2434847 +score_bg=16777215 +score_fg=0 +score_loop=49407 +score_sel=16711680 +score_timesel=14745599 +selitem_tag=16777215 +tcplocked_color=0 +tcplocked_drawmode=170240 +timesel_drawmode=147458 +toolbararmed_color=3288468 +toolbararmed_drawmode=163841 +ts_lane_bg=1644825 +ts_lane_text=2171169 +windowtab_bg=3355443 + +[dynamicsplit] +beatbase=0 +chrommidi=0 +dostretchmarkers=0 +gatehyst=-4650 +gatethresh=-3762 +lastsplitslider=16 +leadpad=0 +minlenLR=0 +minsilence=68503 +minslice=3042 +padfade=0 +postfx=0 +removesilence=1 +snapoffs=0 +snapoffstime=5000 +splitcnten=0 +splitflag=6 +splitgroups=0 +trailpad=0 + +[fadeedit] +wnd_height=426 +wnd_left=120 +wnd_top=357 +wnd_vis=0 +wnd_width=542 + +[fingers] +groove_strength=100 +groove_velstrength=100 + +[flac encoder defaults] +default=63616C661000000005000000AB +default_size=12 + +[itemprops] +wnd_height=642 +wnd_left=120 +wnd_top=121 +wnd_vis=0 +wnd_width=470 + +[jsfx] +watch_c1=100 +watch_c2=110 +watch_c3=20 +watch_divpos=186 +watch_lh=827 +watch_lmax=0 +watch_lw=1411 +watch_lx=29 +watch_ly=21 + +[mastermixer] +dock=0 +wnd_height=258 +wnd_left=0 +wnd_top=0 +wnd_vis=0 +wnd_width=608 + +[midiedit] +lane0=100 -1 0 +lastdrummode=0 +lasttimebase=0 +numlanes=1 +scnotes=0 +window_h=715 +window_max=0 +window_w=1228 +window_x=50 +window_y=162 + +[mp3 encoder defaults] +default=6C33706D800000000100000005000000FFFFFFFF04000000800000000000000082 +default_size=32 + +[nag] +nag=0FCD7A5A1FB8FC03073378F223C4B1ABE2440F11D114F62BB9 + +[navigator] +dock=1 +wnd_height=0 +wnd_left=-1 +wnd_top=-1 +wnd_vis=0 +wnd_width=0 + +[perf] +dock=1 +wid1=50 +wid2=80 +wid3=40 +wid4=40 +wnd_height=305 +wnd_left=241 +wnd_top=568 +wnd_vis=0 +wnd_width=253 + +[projbay] +colorder_12=2 +colorder_13=4 +colorder_15=5 +colorder_16=6 +colorder_17=7 +colorder_18=1 +colwid_09=473 +colwid_11=133 +colwid_14=78 +colwid_17=0 +colwid_18=149 +colwid_19=0 +colwid_24=114 +colwid_38=0 +colwid_47=0 +colwid_48=0 +colwid_57=0 +colwid_58=0 +curbay_0= +curbay_1= +curtab_0=1 +curtab_1=0 +filterflag=2696 +previewvol=1.000000 +tabsort_0=8 +tabsort_1=19 + +[projbay_0] +dock=1 +wnd_height=0 +wnd_left=-1 +wnd_top=-1 +wnd_vis=0 +wnd_width=0 + +[projbay_1] +wnd_height=345 +wnd_left=223 +wnd_top=222 +wnd_vis=0 +wnd_width=800 + +[Reamote] +NbSlaves=0 + +[REAPER] +actioncolwid_0=206 +actioncolwid_1=536 +actioncolwid_2=55 +actioncolwid_3=201 +actioncolwid_4=310 +actionflag=11 +actionmenu=1 +adjreclat=1 +adjrecmanlat=0 +adjrecmanlatin=0 +afxcfg_sz=0 +allstereopairs=0 +altpeaks=4 +altpeaksopathlist= +altpeakspath= +alwaysallowkb=0 +apiconsole_h=560 +apiconsole_w=630 +apiconsole_x=488 +apiconsole_y=317 +applyfxtail=1000 +audioasync=1 +audiocloseinactive=0 +audioclosestop=0 +audioprshift=1 +audiothreadpr=-1 +autoclosetrackwnds=1 +automute=2 +automuteflags=0 +automuteval=7.94328235 +autonbworkerthreads=1 +autoreturntime=0.10000000 +autoreturntime_action=0.10000000 +autosavedir= +autosaveint=5 +autosavemode=0 +autosaveonrender=0 +autosaveonrender2=0 +autoxfade=1 +ccresettab= +chooseproj_pos=344 361 751 395 +config_toolbar=783 +configexport_lastflag=8191 +configimport_rem=0 +cons_entproj=1 +cons_maxsil=30 +cons_maxsil_en=1 +cons_nch2=0 +cons_rsplmode=3 +cons_saveflags=7 +cons_srate2=0 +cons_tracks=0 +conswavefmt=63616C661000000005000000AB +conswavefmt_sz=12 +copyimpmedia=0 +coreaudiobs=512 +coreaudiobsuse=1 +coreaudioignorereset=0 +coreaudioignprojsr=0 +coreaudioindevnew= +coreaudiooutdevnew= +coreaudiosrate=48000 +coreaudiosrateuse=1 +cpuallowed=0 +csurf_0=MCU 0 9 11 13 0 +csurf_cnt=0 +csurfrate=15 +customactionwnd_h=307 +customactionwnd_w=1191 +customactionwnd_x=0 +customactionwnd_y=460 +custommenu=261 +custommenuwnd_h=693 +custommenuwnd_w=1093 +custommenuwnd_x=187 +custommenuwnd_y=4 +defautomode=0 +defenvs=0 +deffadelen=0.01000000 +deffadeshape=1 +defhwvol=1.00000000 +deflearnccmode=0 +deflearnselonly=0 +defpitchcfg=393216 +defrecpath= +defrenderpath= +defsavepath= +defsendflag=0 +defsendvol=1.00000000 +defsplitxfadelen=0.01000000 +deftrackrecflags=256 +deftrackrecinput=0 +deftrackvol=1.00000000 +defvzoom=17 +defxfadeshape=7 +diskcheck=19 +diskcheckmb=1024 +dockcompactsingle=3 +docker15_bottom=225 +docker15_left=357 +docker15_right=565 +docker15_top=162 +docker5_bottom=550 +docker5_left=343 +docker5_right=1189 +docker5_top=71 +docker_bottom=603 +docker_left=219 +docker_right=1045 +docker_top=306 +dockermode0=0 +dockermode1=1 +dockermode10=0 +dockermode11=0 +dockermode12=0 +dockermode13=0 +dockermode14=0 +dockermode15=32768 +dockermode2=1 +dockermode3=1 +dockermode4=3 +dockermode5=0 +dockermode6=0 +dockermode7=0 +dockermode8=0 +dockermode9=0 +dockerpprio0=0.00000000 +dockerpprio1=0.06250000 +dockerpprio10=0.62500000 +dockerpprio11=0.68750000 +dockerpprio12=0.75000000 +dockerpprio13=0.81250000 +dockerpprio14=0.87500000 +dockerpprio15=0.93750000 +dockerpprio2=0.12500000 +dockerpprio3=0.18750000 +dockerpprio4=0.25000000 +dockerpprio5=0.31250000 +dockerpprio6=0.37500000 +dockerpprio7=0.43750000 +dockerpprio8=0.50000000 +dockerpprio9=0.56250000 +dockersel0=mixer +dockersel1=toolbar:13 +dockersel15=toolbar:1 +dockersel2=toolbar:1 +dockersel3=toolbar:2 +dockersel4=navigator +dockersel5=fxchain:{823E36CC-4BB7-A44C-AF47-17588496D1E3} +dockersel6=projbay_0 +dockerwprio0=1.00950742 +dockerwprio1=1.18030918 +dockerwprio10=1.00000000 +dockerwprio11=1.00000000 +dockerwprio12=1.00000000 +dockerwprio13=1.00000000 +dockerwprio14=1.00000000 +dockerwprio15=1.00000000 +dockerwprio2=1.03338277 +dockerwprio3=0.78630799 +dockerwprio4=0.56849098 +dockerwprio5=0.99049264 +dockerwprio6=1.00000000 +dockerwprio7=1.00000000 +dockerwprio8=1.00000000 +dockerwprio9=1.00000000 +dockheight=343 +dockheight_l=47 +dockheight_r=80 +dockheight_t=47 +dockposflags=0 +dynsplit_x=201 +dynsplit_y=70 +edit_fontsize=13 +env_autoadd=5 +env_deffoc=0 +env_ol_minh=-41 +env_options=0 +env_reduce=3 +envattach=1 +envclicksegmode=137 +envlanes=23 +envtranstime=0.00050000 +envtrimadjmode=0 +envwritepasschg=0 +errnowarn=6 +fadeeditflags=0 +fadeeditlink=0 +fadeeditpostsel=1.00000000 +fadeeditpresel=1.00000000 +feedbackmode=0 +fsautohidedock=0 +fullscreenRectB=872 +fullscreenRectL=12 +fullscreenRectR=1309 +fullscreenRectT=35 +fxadd_divx=174 +fxadd_dock=0 +fxadd_h=336 +fxadd_vis=0 +fxadd_w=664 +fxadd_x=139 +fxadd_y=424 +fxchainw=94 +fxdenorm=1 +fxfloat_focus=115 +fxresize=3 +griddot=1 +gridinbg=1 +gridinbg2=0 +groupdispmode=0 +guidelines2=1 +handzoom=0 +hasrecentsec=1 +help=16 +hwfadex=3 +hwfx_failed=0 +hwoutfx_bypass=0 +iconpicker_h=652 +iconpicker_w=481 +iconpicker_x=799 +iconpicker_y=57 +insertmtrack=3 +isFullscreen=0 +itemclickmovecurs=23 +itemeditpr=1000 +itemfade_minheight=8 +itemfade_minwidth=28 +itemfadehandle_maxwidth=4 +itemfxtail=2000 +itemicons=37205 +itemicons_minheight=49 +itemlabel_minheight=28 +itemlowerhalf_minheight=44 +itemmixflag=0 +itemsnap=8 +itemtexthide=1 +itemtimelock=0 +itemvolmode=0 +kbd_usealt=0 +labelitems2=11 +langpack=<> +lastconspath= +lastcwd= +lastmenusetdir= +lastproject= +lastprojuiref= +lastrenderpath= +lastrenderpath5= +lastscript= +lastthemefn4= +lastthemefn5=/Users/rstockm/Documents/ULTRASCHALL/Ultraschall 3.1 Vanilla/ColorThemes/Ultraschall_3.1.ReaperTheme +layout_master_mcp=Ultraschall 2 +layout_master_tcp=3. Black Master Track +layout_mcp=Ultraschall 2 +layout_tcp=Ultraschall 2 +layout_trans=Ultraschall 2 Trans +lazyupds=0 +lb_font=0A00000000000000000000000000000090010000000000010000000048656C766574696361004E657565000000000000000000000000000000000000BE +lb_font2=0E000000000000000000000000000000BC020000000000000302012248656C766574696361204E657565007400726966000000000000000000000000EB +leftpanewid=271 +leftpanewid_alt=0 +loadlastproj=16 +locklooptotime=1 +loop=0 +loopclickmode=2 +loopgran=0 +loopgranlen=4.00000000 +loopnewitems=0 +loopselpr=1000 +loopstopfx=0 +manuallat=0 +manuallatin=0 +markerexportpath= +mastermutesolo=0 +maxrecent=50 +maxrecsize=1024 +maxrecsize_use=0 +maxsnaptrack=10 +mf_sdir= +mf_sopts=512 +mi_font=0E00000000000000000000000000000090010000000000000302012248656C766574696361005400425400636F646500000000000000000000000000E1 +mididefcolormap= +midieditor=64 +midiins=1640 +midiins_cs=1640 +midiins_cs_h=0 +midiins_h=0 +midioctoffs=1 +midiouts=40 +midiouts_clock=0 +midiouts_clock_h=0 +midiouts_clock_nospp=0 +midiouts_clock_nospp_h=0 +midiouts_h=0 +midioutthread=0 +midisendflags=67 +miditicksperbeat=960 +midivu=0 +mixerflag=2 +mixeruiflag=11 +mixrowflags=48 +mixwnd_dock=1 +mixwnd_h=330 +mixwnd_max=0 +mixwnd_vis=1 +mixwnd_w=0 +mixwnd_x=0 +mixwnd_y=0 +mousewheelmode=16 +msicon=0 +multinst=4 +multiprojopt=16 +multitouch=1026 +mutefadems10=50 +mvu_rmsgain=0 +mvu_rmsmode=5 +mvu_rmsoffs2=0 +mvu_rmsred=0 +mvu_rmssize=2000 +nativedrawtext2=1 +newfnopt=7 +newprojdo=0 +newprojtmpl= +newtflag=3 +nometers=0 +norunmute=1 +noteswnd_x=520 +noteswnd_y=358 +nudge=0 +nudge_vis=0 +nudge_x=118 +nudge_y=712 +nudgeamt=1.000000 +nudgecopies=1 +numrecent=0 +offlineinact=0 +opencopyprompt=32 +opendlgnewtab=1 +opennotes=0 +optimizesilence=0 +osxnomiddlemancocoa=0 +pandispmode=0 +panlaw=1.00000000 +panmode=3 +peakcachegenmode=3 +peakcachegenrs=300 +peakrecbm=0 +peakscfg_vis=0 +peakscfg_x=110 +peakscfg_y=231 +peaksedges=8 +pitchenvrange=3 +playcursormode=2 +playrate=1.00000000 +playresamplemode=0 +pmfol=1 +pooledenvs=0 +prebufperb=100 +prefs_x=468 +prefs_y=225 +prefspage=139 +projalignbeatsrate=0 +projbpm=120.00000000 +projdefrecpath=Recordings +projdefrecpath2= +projecttab1= +projecttab2= +projecttab3= +projecttab4= +projecttabs=0 +projfridx=8 +projgriddiv=1.00000000 +projgriddivsnap=1.00000000 +projgridframe=0 +projgridmin=8 +projgridsnapmin=8 +projgroupover=0 +projgroupsel=0 +projintmix=0 +projmasternch=2 +projmastervuflags=2 +projmaxlen=600.00000000 +projmaxlenuse=0 +projmeaslen=4 +projmeasoffs=-1 +projmetrobeatlen=4 +projmetrocountin=2.00000000 +projmetroen=6 +projmetrof1=800 +projmetrof2=1600 +projmetrofn1= +projmetrofn2= +projmetrov1=0.25000000 +projmetrov2=0.12500000 +projpeaksgain=1.10000000 +projrecforopencopy=0 +projrecmode=1 +projrelpath=1 +projrelsnap=0 +projrenderaddtoproj=0 +projrenderdither=0 +projrenderlimit=0 +projrendernch=0 +projrenderqdelay=0 +projrenderrateinternal=1 +projrenderresample=7 +projrendersrate=2 +projrenderstems=0 +projripedit=0 +projsellock=1 +projshowgrid=3198 +projsmpteahead=1000 +projsmpteinput=0 +projsmptemaxfree=300 +projsmpteoffs=0.00000000 +projsmpterate=25.00000000 +projsmpterateuseproj=1 +projsmpteresync=100 +projsmpteskip=40 +projsmptesync=0 +projsrate=48000 +projsrateuse=1 +projtakelane=1 +projtimemode=0 +projtimemode2=0 +projtimeoffs=0.00000000 +projtrackgroupdisabled=1 +projtsdenom=4 +promptendrec=0 +psmaxv=1.50000000 +psminv=0.75000000 +pspage_last=0 +pythonlibpath64=/usr/lib +reamote_maxblock=32 +reamote_maxlat_render=1000 +reamote_maxpkt=32768 +reamote_smplfmt=0 +reascript=1 +reascriptout_h=401 +reascriptout_w=460 +reascriptout_x=490 +reascriptout_y=357 +recaddatloop=0 +reccfg=63616C661000000005000000AB +reccfg_sz=12 +recfile_wildcards=$tracknumber-$track-$project +recopts=0 +recupdatems=25 +relativeedges=1 +render_pattern_0=$project +render_pattern_1=$parenttrack +render_pattern_10=$tracknumber - $track - $project +render_pattern_11=$tracknumber $track $project render +render_pattern_2=$tracknumber - $track +render_pattern_3=$track +render_pattern_4=DT297 an VSL1818$track +render_pattern_5=$project/render/$project-$tracknumber-$track +render_pattern_6=$project/render/$project-$tracknumber-$track +render_pattern_7=$project/render/$project-$tracknumber-$track +render_pattern_8=$project-$tracknumber-$track +render_pattern_9=$tracknumber $track $project +renderaheadlen=200 +renderaheadlen2=100 +renderbsnew=0 +rendercfg=63616C661000000005000000AB +rendercfg_sz=12 +renderclosewhendone=1 +renderq_h=399 +renderq_w=602 +renderq_x=535 +renderq_y=196 +renderqdelay=-30 +rendertail=0 +renderwnd_x=186 +renderwnd_y=53 +replaceitem=0 +resetvuplay=0 +restrictcpu=0 +rewireslave=1 +rewireslavedelay=0 +rfprojfirst=0 +rightclickemulate=1 +ripplelockmode=2 +routing_dock=1 +routing_mode=0 +routing_show=-1572889 +routingwnd_h=80 +routingwnd_vis=1 +routingwnd_w=80 +routingwnd_x=0 +routingwnd_y=0 +rulerlabelmargin=24 +rulerlayout=0 +runafterstop=4000 +runallonstop=1 +sampleedges=1 +saveFlags=5 +saveFlags2=2 +saveFlags_fmtused=0 +saveopts=1 +saveundostatesproj=0 +scnameedit=1 +screenset_as_views=-1 +screenset_as_win=-1 +screenset_autosave=0 +screensetwnd_lasttab=0 +scrubloopend=0 +scrubloopstart=-88 +scrubmode=64 +scrubrelgain=1.00000000 +seekmodes=65528 +selitem_tintalpha=2 +showctinmix=1 +showlastundo=1 +showmaintrack=0 +showpeaks=515 +showpeaksbuild=1 +showrecitems=1 +slidermaxv=12.00000000 +sliderminv=-72.00000000 +slidershex=-1.00000000 +smoothseek=0 +smoothseekmeas=1 +snapextrad=2.00000000 +snapextraden=0 +solodimdb10=-180 +soloip=1 +specgram_preset0=0.569444 0.969444 2.000000 0.000000 0.000000 1.009577 0 +specpeak_alpha=255 +specpeak_bv=94 +specpeak_hueh=1.69888889 +specpeak_huel=0.62688889 +specpeak_na=5.77056386 +splash=0 +splash2=0 +splashimage= +splitautoxfade=0 +sset_save_mask=-1026 +sset_view_save_mask=-93 +stopendofloop=0 +stopprojlen=1 +syncsmpmax2=0 +syncsmpuse=0 +tabtotrans_x=145 +tabtotrans_y=686 +tabtotransflag=0 +tempoenvtimelock=0 +textflags=0 +tgrp_x=330 +tgrp_y=220 +thdr_top=0 +thdr_top_alt=15 +threadpr=4 +timeseledge=1 +tinttcp=1833 +titlebarreghide=1 +tl_font=0E000000000000000000000000000000BC020000000000000302012248656C766574696361204E6575650053657269660000000000000000000000002F +toolbar:2=4 +toolbar:24=21 +tooltipdelay=200 +tooltips=0 +toppane=68 +trackitemgap=3 +trackselonmouse=0 +trans_font=0F000000000000000000000000000000BC020000000000000302012248656C766574696361204E65756500000000000000000000000000000000000037 +transflags=8 +transport_dock=1 +transport_dock_pos=3 +transport_h=106 +transport_vis=1 +transport_w=1041 +transport_x=0 +transport_y=0 +trimmidionsplit=1 +ui_img=Ultraschall_2 +uiscale=1.00000000 +undomask=3 +undomaxmem=256 +unselitem_tintalpha=2 +use_reamote=0 +useinnc=0 +user_font0=0C00000000000000000000000000000090010000000000010000000048656C766574696361004E657565000000000000000000000000000000000000C0 +user_font1=F7FFFFFF000000000000000000000000900100000000000003020122417269616C00000000000000000000000000000000000000000000000000000096 +user_font2=0C000000000000000000000000000000900100000000000100000000417269616C00000000000000000000000000000000000000000000000000000087 +user_font3=0C000000000000000000000000000000900100000000000100000000417269616C00000000000000000000000000000000000000000000000000000087 +user_font4=0C000000000000000000000000000000900100000000000100000000417269616C00000000000000000000000000000000000000000000000000000087 +user_font5=0C000000000000000000000000000000900100000000000100000000417269616C00000000000000000000000000000000000000000000000000000087 +user_font6=0C000000000000000000000000000000900100000000000100000000417269616C00000000000000000000000000000000000000000000000000000087 +user_font7=0C000000000000000000000000000000900100000000000100000000417269616C00000000000000000000000000000000000000000000000000000087 +userewire=1 +verchk=0 +video_colorspace=3 +video_decprio= +video_delayms=0 +viewadvance=27 +volenvrange=7 +vstbr32=0 +vstfullstate=16965 +vstpath64=/Library/Audio/Plug-Ins/VST;/Library/Audio/Plug-Ins/VST3 +vuclipstick=1 +vudecay=120 +vumaxvol=6 +vuminvol=-58 +vuupdfreq=12 +vzoom2=7 +vzoommode=0 +warnmaxram64=0 +wnd_h=768 +wnd_state=0 +wnd_w=1264 +wnd_x=83 +wnd_y=34 +workbehvr=-1 +workbuffxuims=200 +workbufmsex=1200 +workrender=65 +workset_max=512 +workset_min=4 +workset_use=0 +workthreads=4 +zoom=4.59415082 +zoommode=3 +zoomshowarm=0 + +[REAPER-fxadd] +allp_root=0 +cat_root=0 +colwid0=303 +colwid1=152 +dev_root=0 +lastview=1024 +userf_root=1 + +[reaper_sexplorer] +autoplay=0 +col0=300 +col1=70 +col2=165 +col3=70 +lastdir=00.ReaperFileList +NbShortcuts=7 +outputidx=0 +peak_height=59 +repeat=0 +Shortcut0=Home +Shortcut1=Desktop +Shortcut2=Documents +temposync=0 +visible=0 +volume=4096 +window_h=0 +window_w=0 +window_x=0 +window_y=0 + +[reaper_video] +autoopen=0 +bottom=557 +docked=0 +fullscreen=0 +fx_mode=default (0=monitor fx are cached, 1=monitor fx are realtime, 2=monitor fx and master track fx are realtime) +keep_ar=1 +left=289 +resize_vidwin=0 +right=784 +top=252 +visible=0 + +[REAPERdockpref] +bigclock=0.40396735 4 +BR - AnalyzeLoudness WndPos=2.90396738 0 +explorer=1.50000000 0 +fxchain=1.50000000 5 +fxchain:hwout=0.50000000 5 +fxchain:master=1.50000000 5 +fxchain:{1F1EAE80-5DE4-1A4C-91BC-F257799C1094}=0.40396735 4 +fxchain:{49F93BDB-4846-AF40-8F3C-B492EC9FB542}=2.00000000 3 +fxchain:{55739130-CB5D-EB4D-AC6E-563785B47D62}=0.00000000 4 +fxchain:{594A8FB2-A10C-7B45-985D-13F2C4B4F9F0}=0.00000000 4 +fxchain:{666E0554-5D41-284E-B04B-22BD0F9CF441}=0.40396735 4 +fxchain:{78347310-F7EA-C44F-A169-F6EF056BEBED}=1.00000000 4 +fxchain:{79701EA3-1929-BB4C-8A4D-2AAC5CFD6CC5}=0.50000000 4 +fxchain:{7D38C6DA-7133-6C4C-9D9E-0785A723C10D}=1.00000000 4 +fxchain:{823E36CC-4BB7-A44C-AF47-17588496D1E3}=1.25000000 5 +fxchain:{86A03645-52A2-BD4C-A44D-2542043EB640}=1.50000000 5 +fxchain:{8B53BAFF-A840-E54F-B98A-E24E1F6911E3}=2.00000000 5 +fxchain:{8CC0BC23-6AAE-6841-A77E-089D11050C6D}=2.00000000 4 +fxchain:{9C22B46E-84B4-4C4E-A769-E791AB744EE0}=0.50000000 1 +fxchain:{9C99CA89-2FF9-1F43-82E7-D3B4CB87225B}=1.00000000 3 +fxchain:{A7A1A96A-C221-5349-B047-571E309C4A58}=1.00000000 4 +fxchain:{B5CCB37D-8330-BC49-A200-BF6833038012}=2.00000000 5 +fxchain:{BACD27E3-4858-C84F-B473-7763F53231F5}=2.00000000 5 +fxchain:{C6A83E6B-6CED-0A4B-9E21-6D91B8D77F8A}=1.50000000 4 +fxchain:{DDBFD34A-10FD-894F-B9CC-813E277D23AE}=0.50000000 4 +fxchain:{F8763CC9-B3F1-F542-91C2-4D5BCF129E86}=2.00000000 5 +mastermixer=0.50000000 7 +mixer=0.50000000 0 +navigator=0.50000000 0 +perf=1.33898783 4 +projbay_0=2.00000000 6 +regmgr=1.00000000 5 +routing=1.00000000 5 +SnMNotesHelp=1.50000000 5 +SnMResources=1.45198369 4 +SWSMarkerList=1.25000000 0 +SWSSnapshots=2.90396738 0 +toolbar=0.50000000 15 +toolbar:1=-0.50000000 1 +toolbar:10=0.50000000 3 +toolbar:13=0.50000000 1 +toolbar:17=0.50000000 4 +toolbar:2=0.00000000 2 +toolbar:24=0.50000000 15 +toolbar:3=0.00000000 3 +toolbar:4=0.50000000 3 +toolbar:5=0.50000000 2 +toolbar:7=0.50000000 3 +toolbar:8=2.00000000 2 +toolbar:9=0.50000000 3 +ultraclock.lua=0.50000000 4 +ultraschall_clock.lua=0.90396738 4 +ultraschall_colorpicker.lua=1.50000000 0 +video=0.50000000 5 + +[reascriptedit] +watch_c1=111 +watch_c2=463 +watch_divpos=282 +watch_docked=0 +watch_lh=808 +watch_lmax=0 +watch_lw=1288 +watch_lx=44 +watch_ly=19 + +[Recent] +recent01=/Users/rstockm/Downloads/bug/bugtest/bugtest.rpp +recent02= +recent03= +recent04= +recent05= +recent06= +recent07= +recent08= +recent09= +recent10= +recent11= +recent12= +recent13= +recent14= +recent15= +recent16= +recent17= +recent18= +recent19= +recent20= +recent21= +recent22= +recent23= +recent24= + +[RecentFX] +Count=16 +RecentFX01=itsr +RecentFX02=reaf +RecentFX03=ultraschall +RecentFX04=ultra +RecentFX05=dynam +RecentFX06=reastream +RecentFX07=cast +RecentFX08=dyna +RecentFX09=limiter +RecentFX10=soundb +RecentFX11=studio +RecentFX12=onai +RecentFX13=studiol +RecentFX14=cent +RecentFX15=general +RecentFX16=loud + +[regmgr] +colwid_2=281 +colwid_3=76 +colwid_4=0 +colwid_5=0 +colwid_6=0 +dock=1 +flags=7 +sort=3 +wnd_height=0 +wnd_left=-1 +wnd_top=-1 +wnd_vis=0 +wnd_width=0 + +[screensets] +wnd_height=375 +wnd_left=442 +wnd_top=182 +wnd_vis=0 +wnd_width=469 + +[SWS] +AutoColorViewState=1 25 0 72 1 185 2 70 3 200 4 100 5 100 6 +AutorenderAllowStemRender=1 +AutorenderDefaultRenderPath= +AutorenderPrefsWindowPos=480 345 479 418 +AutorenderWindowPos=480 510 479 198 +BR - AnalyzeLoudness=0 1 1 1 1 1 1 0 0 +BR - AnalyzeLoudness WndPos=00000000000000000000000000000000000000000000000000 +BR - AnalyzeLoudnessView WndPos=1 25 0 110 1 110 2 70 3 70 4 70 5 115 6 115 7 +BR - ContextualToolbars WndPos=410000006700000023040000150300000000000000000000E7 +BR - ContextualToolbarsView WndPos=1 163 0 105 1 62 2 81 3 +BR - LoudnessExportFormat=$id - $target: $integrated, Range: $range, True peak: $truepeak +BR - LoudnessPref=-16.000000 0 -41.000000 -14.000000 +BR - LoudnessPref WndPos=72 513 368 271 +BR - NormalizeLoudness=-16.000000 0 0 +BR - NormalizeLoudness WndPos=72 681 317 105 +BR - StartupVersionCheck=0 0 1418281762 +CloseConsoleOnReturnKey=0 +ColorDlgPos=615 456 209 270 +ColorGradients=3143 5598975 +CueBus Window Pos=613 308 547 404 +DefaultNbSnapsRecall=12 +DragZoomScale=0.10 +EnvProc Window Pos=63 484 377 302 +FNGGroove=3200000086020000B3010000B6030000000000000000000027 +InfoWindowPos=444 293 552 487 +LCyclactionViewState=1 50 0 260 1 50 2 +LiveConfigsViewState=1 95 0 150 1 150 2 175 3 175 4 150 5 150 6 150 7 +MarkerExport Format="ap d" +MarkerList View State=1 77 0 88 -1 30 -1 199 1 199 2 +MarkerlistOptions=1 1 +MergeViewState=1 120 0 120 1 +MergeWndPos=486 532 708 319 +ProjListViewState=1 30 0 100 1 185 -1 +RCyclactionViewState=1 115 0 463 1 +ReaConsole=8F0100004301000001040000140200000000000000000000EF +RecInputCheckWndPos=694 656 292 154 +Record input check=0 +RecRedRuler=0 +ResourcesViewState=2 65 0 370 1 250 -1 100 2 +RgnPlaylistViewState=1 50 0 150 1 70 2 50 3 50 4 50 5 +Snapshot Options=32 0 0 0 1 0 2 0 0 +Snapshots View State=1 20 0 364 1 60 -1 60 -1 100 -1 +SnMCyclaction=8E00000087000000330500006C0200000000000000000000BB +SnMFind=84020000800000003E0400005A0200000000000000000000A4 +SnMImage=C7010000BF000000810300004301000000000000000000004F +SnMLiveConfigs=7C0000002A010000F6040000E5020000000000000000000088 +SnMNotesHelp=35020000D201000012040000BC0200000000000005000000E3 +SnMResources=720000007F020000C403000094030000020000000400000057 +SnMRgnPlaylist=32000000B802000086010000B603000000000000000000002C +SWSAutoColor=EE000000010100000C0300005D02000000000000000000005E +SWSMarkerList=BD02000068000000630500005F0200000000000000000000F0 +SWSProjectList=320000007C020000AE0100006D0300000000000000000000CF +SWSSnapshots=91000000C701000016020000600300000200000000000000D6 +SWSTrackList=32000000E1010000330200006D0300000000000000000000B9 +Track List Options=0 0 +TrackList View State=1 25 0 250 1 40 2 40 3 40 -1 40 -1 40 -1 +ZoomPrefs=0 +ZoomPrefs WndPos=513 310 413 464 + +[toolbar:1] +dock=1 +wnd_height=81 +wnd_left=145 +wnd_top=783 +wnd_vis=1 +wnd_width=385 + +[toolbar:10] +dock=1 +wnd_height=0 +wnd_left=-1 +wnd_top=-1 +wnd_vis=0 +wnd_width=0 + +[toolbar:13] +dock=0 +wnd_height=64 +wnd_left=171 +wnd_top=225 +wnd_vis=0 +wnd_width=245 + +[toolbar:17] +dock=1 +wnd_height=0 +wnd_left=-1 +wnd_top=-1 +wnd_vis=0 +wnd_width=0 + +[toolbar:2] +dock=1 +wnd_height=81 +wnd_left=242 +wnd_top=756 +wnd_vis=1 +wnd_width=385 + +[toolbar:24] +dock=1 +wnd_height=81 +wnd_left=906 +wnd_top=370 +wnd_vis=0 +wnd_width=385 + +[toolbar:3] +dock=1 +wnd_height=0 +wnd_left=-1 +wnd_top=-1 +wnd_vis=0 +wnd_width=0 + +[toolbar:4] +dock=1 +wnd_height=81 +wnd_left=65 +wnd_top=708 +wnd_vis=0 +wnd_width=385 + +[toolbar:5] +dock=1 +wnd_height=0 +wnd_left=-1 +wnd_top=-1 +wnd_vis=0 +wnd_width=0 + +[toolbar:7] +dock=1 +wnd_height=81 +wnd_left=137 +wnd_top=826 +wnd_vis=1 +wnd_width=385 + +[toolbar:8] +dock=1 +wnd_height=81 +wnd_left=56 +wnd_top=718 +wnd_vis=0 +wnd_width=385 + +[toolbar:9] +dock=1 +wnd_height=0 +wnd_left=-1 +wnd_top=-1 +wnd_vis=0 +wnd_width=0 + +[trackmgr] +flags=1 +wnd_height=365 +wnd_left=318 +wnd_top=194 +wnd_vis=0 +wnd_width=748 + +[verchk] +lastt=1510122578 + +[vkb] +wnd_height=183 +wnd_left=112 +wnd_top=585 +wnd_vis=0 +wnd_width=664 + +[wave sink defaults] +default=65766177100000C3 +default_size=7 + +[wavpack encoder defaults] +default=6B70767700000000010000000000000000000000C9 +default_size=20 + diff --git a/sws-autocoloricon.ini b/sws-autocoloricon.ini new file mode 100644 index 0000000..2d8a5c0 --- /dev/null +++ b/sws-autocoloricon.ini @@ -0,0 +1,12 @@ +[SWS] +AutoColor 1=0 SKYPE 2874367 "" "" "" +AutoColor 2=0 Soundboard 3637303 "" "" "" +AutoColor 3=0 StudioLink 16541704 "" "" "" +AutoColor 4=0 (any) 6202111 "" "" "" +AutoColorCount=4 +AutoColorEnable=1 +AutoColorMarkerEnable=1 +AutoColorRegionEnable=0 +AutoIconEnable=0 +AutoLayoutEnable=0 + diff --git a/sws-autocoloricon_MAC.ini b/sws-autocoloricon_MAC.ini new file mode 100644 index 0000000..d4a8034 --- /dev/null +++ b/sws-autocoloricon_MAC.ini @@ -0,0 +1,12 @@ +[SWS] +AutoColor 1="0 SKYPE 2874367 """ +AutoColor 2="0 Soundboard 3637303 """ +AutoColor 3="0 StudioLink 16541704 """ +AutoColor 4="0 (any) 6202111 """ +AutoColor 5="1 chapter 2797246 """ +AutoColorCount=5 +AutoColorEnable=1 +AutoColorMarkerEnable=1 +AutoColorRegionEnable=0 +AutoIconEnable=0 + diff --git a/sws-autocoloricon_WIN.ini b/sws-autocoloricon_WIN.ini new file mode 100644 index 0000000..e9b3b57 --- /dev/null +++ b/sws-autocoloricon_WIN.ini @@ -0,0 +1,12 @@ +[SWS] +AutoColor 1="0 SKYPE 16767787 """ +AutoColor 2="0 Soundboard 3637303 """ +AutoColor 3="0 StudioLink 551164 """ +AutoColor 4="0 (any) 16753246 """ +AutoColor 5="1 chapter 2797246 """ +AutoColorCount=5 +AutoColorEnable=1 +AutoColorMarkerEnable=1 +AutoColorRegionEnable=0 +AutoIconEnable=0 + diff --git a/ultraschall.ini b/ultraschall.ini new file mode 100644 index 0000000..5df0275 --- /dev/null +++ b/ultraschall.ini @@ -0,0 +1,38 @@ +[ultraschall_clock] +docked=true +preset=3.0 + +[ultraschall_envelope] +EnvelopeMaxHeight=70 +EnvelopeMinHeight=24 +EnvelopeToggleState=false + +[ultraschall_follow] +state=1 + +[ultraschall_gui] +sec=0 +view=setup +views=55796 + +[ultraschall_mouse] +state=0 + +[ultraschall_playrate] +AlternativeRate=1.5 + +[ultraschall_start] +firststart=false +startscreen=1 + +[Ultraschall_Transport] +Safemode_Toggle=OFF + +[ultraschall_update] +update_check=1 + +[view] +old_zoomfactor=1692.9977788578 +zoom_toggle_state=false +zoomin_level=400 +