mirror of
				https://github.com/cookiengineer/audacity
				synced 2025-10-31 14:13:50 +01:00 
			
		
		
		
	New Nyquist crossfade effect added.
This commit is contained in:
		
							
								
								
									
										49
									
								
								plug-ins/crossfadetracks.ny
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										49
									
								
								plug-ins/crossfadetracks.ny
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,49 @@ | ||||
| ;nyquist plug-in | ||||
| ;version 4 | ||||
| ;type process | ||||
| ;name "Crossfade Tracks..." | ||||
| ;action "Crossfading..." | ||||
| ;preview disabled - cannot use preview because tracks are processed differently. | ||||
|  | ||||
| ;; crossfadetracks.ny by Steve Daulton Nov 2014. | ||||
| ;; Released under terms of the GNU General Public License version 2: | ||||
| ;; http://www.gnu.org/licenses/old-licenses/gpl-2.0.html . | ||||
|  | ||||
| ;control type "Fade type" choice "Constant Gain,Constant Power 1,Constant Power 2,Custom Curve" 0 | ||||
| ;control curve "Custom curve" real "" 0 0 1 | ||||
|  | ||||
| (defun crossfade (type) | ||||
|   (mult *track* | ||||
|     (cond | ||||
|       ((= (get '*track* 'index) 1)  ; fade out. | ||||
|         (case type | ||||
|           (0 (pwlv 1 1 0)) | ||||
|           (1 (osc (hz-to-step (/ (get-duration 4))) 1 *sine-table* 90)) | ||||
|           (2 (s-sqrt (pwlv 1 1 0))) | ||||
|           (T (custom curve 0)))) | ||||
|       (T  ; else fade in. | ||||
|         (setf *control-srate* *sound-srate*) | ||||
|         (case type | ||||
|           (0 (pwlv 0 1 1)) | ||||
|           (1 (osc (hz-to-step (/ (get-duration 4))) 1)) | ||||
|           (2 (s-sqrt (pwlv 0 1 1))) | ||||
|           (T (custom curve 1))))))) | ||||
|  | ||||
| (defun custom (curve inout) | ||||
|   ;; 'epsilon' defines the curvature of a logarithmc curve. | ||||
|   ;; To avoid log 0 or /0 it must be > 0 and < 1. | ||||
|   (let* ((curve (+ 0.99 (* -0.98 (min 1 (max 0 curve))))) | ||||
|          ; magic number 2.7 gives approx 'constant power' curve at 50% setting. | ||||
|          (epsilon (power curve 2.7))) | ||||
|     (if (= inout 0) | ||||
|         (setf logcurve (pwev epsilon 1 1)) | ||||
|         (setf logcurve (pwev 1 1 epsilon))) | ||||
|     (sum 1 | ||||
|          (mult (/ -1 (- 1 epsilon)) | ||||
|                (diff logcurve epsilon))))) | ||||
|  | ||||
| (let ((tracks (get '*selection* 'tracks))) | ||||
|   (case tracks | ||||
|     (1 "Only 1 track selected.\n'Crossfade Tracks' requires 2 tracks.") | ||||
|     (2 (crossfade type)) | ||||
|     (T "Too many tracks selected.\n'Crossfade Tracks' requires 2 tracks."))) | ||||
		Reference in New Issue
	
	Block a user