Win-G

Panner

Mar 22nd, 2025
54
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.28 KB | Source Code | 0 0
  1. desc: Panner PRO
  2. //tags: Pan & Stereo Balance Control
  3. //Original basic framework from "Volume/Pan Smoother v5" by Cockos Incorporated
  4. //Enhancements and New Functionality by Windows-G
  5.  
  6. slider1:0<-60,12,0.1>Volume (dB)
  7. slider2:0<-100,100,0.1>Pan (L/R)
  8. slider3:0<-6,6,0.5>Pan Law (dB)
  9. slider4:0<0,2,1{Linear/Stereo Balance,Sine,Square Root}>Pan Taper Type
  10.  
  11.  
  12. in_pin:left input
  13. in_pin:right input
  14. out_pin:left output
  15. out_pin:right output
  16.  
  17. @init
  18. ext_tail_size = -2;
  19. AMP_dB_i=1/8.68588963806504;
  20.  
  21. db=slider1; // initialize here but not in @slider for playback start
  22. pan=0.01*slider2;
  23.  
  24. @slider
  25.  
  26. panlaw=exp(slider3*AMP_DB_i);
  27. pancomp=(panlaw > 1.0 ? 1.0/panlaw : panlaw);
  28. ddb=0.0;
  29. dpan=0.0;
  30.  
  31. @block
  32. cnt=0;
  33. ddb=0.0;
  34. dpan=0.0;
  35.  
  36. db_chg_splpos=slider_next_chg(1, tgtdb);
  37. db_chg_splpos > 0 ?
  38. (
  39. db=slider1;
  40. ) : (
  41. tgtdb = slider1;
  42. db_chg_splpos = samplesblock;
  43. );
  44.  
  45. ddb=(tgtdb-db)/db_chg_splpos;
  46.  
  47. pan_chg_splpos=slider_next_chg(2, tgtpan);
  48. pan_chg_splpos > 0 ?
  49. (
  50. pan=0.01*slider2;
  51. ) : (
  52. tgtpan = slider2;
  53. pan_chg_splpos = samplesblock;
  54. );
  55. dpan=(tgtpan*0.01-pan)/pan_chg_splpos;
  56.  
  57. @sample
  58.  
  59. cnt == db_chg_splpos ?
  60. (
  61. ddb=0.0;
  62. db_chg_splpos=slider_next_chg(1, tgtdb);
  63. db_chg_splpos > cnt ?
  64. (
  65. ddb=(tgtdb-db)/(db_chg_splpos-cnt);
  66. );
  67. );
  68.  
  69. cnt == pan_chg_splpos ?
  70. (
  71. dpan=0.0;
  72. pan_chg_splpos=slider_next_chg(2, tgtpan);
  73. pan_chg_splpos > cnt ?
  74. (
  75. dpan=(tgtpan*0.01-pan)/(pan_chg_splpos-cnt);
  76. );
  77. );
  78.  
  79. adj=exp(db*AMP_DB_i);
  80. panlaw != 1.0 ?
  81. (
  82. panlaw > 1.0 ? adj *= panlaw;
  83. panatt = abs(pan);
  84. adj *= pancomp+(1.0-pancomp)*(2.0/(2.0-panatt)-1.0);
  85. );
  86.  
  87. // Apply the selected Pan Taper
  88. pan_mode = slider4;
  89.  
  90. pan_mode == 0 ? ( // Linear Taper/Stereo Balance
  91. adj0 = adj1 = adj;
  92. pan < 0.0 ? adj1 *= 1.0 + pan;
  93. pan > 0.0 ? adj0 *= 1.0 - pan;
  94.  
  95. spl0 *= adj0;
  96. spl1 *= adj1;
  97. ) :
  98. pan_mode == 1 ? ( // Sine Taper
  99. pan_angle = (pan + 1) * $pi / 4;
  100. adj0 = cos(pan_angle) * 1.414;
  101. adj1 = sin(pan_angle) * 1.414;
  102.  
  103. spl0 *= adj0 * adj;
  104. spl1 *= adj1 * adj;
  105. ) :
  106. pan_mode == 2 ? ( // Square-Root Taper
  107. adj0 = sqrt(0.5 * (1.0 - pan)) * 1.414;
  108. adj1 = sqrt(0.5 * (1.0 + pan)) * 1.414;
  109.  
  110. spl0 *= adj0 * adj;
  111. spl1 *= adj1 * adj;
  112. );
  113.  
  114. db += ddb;
  115. pan += dpan;
  116. cnt += 1;
  117.  
Advertisement
Add Comment
Please, Sign In to add comment