mirror of
				https://github.com/alsa-project/alsa-tools.git
				synced 2025-11-03 09:01:51 -05:00 
			
		
		
		
	
		
			
				
	
	
		
			87 lines
		
	
	
	
		
			1.8 KiB
		
	
	
	
		
			NASM
		
	
	
	
	
	
			
		
		
	
	
			87 lines
		
	
	
	
		
			1.8 KiB
		
	
	
	
		
			NASM
		
	
	
	
	
	
;;; Simple Chorus
 | 
						|
;;; Author:Daniel Bertrand
 | 
						|
;;; Date: Oct 12, 2000
 | 
						|
 | 
						|
;;; 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 2 of the License, or     
 | 
						|
;;; (at your option) any later version.
 | 
						|
 | 
						|
;;; References:	
 | 
						|
;;; http://www.harmony-central.com/Effects/Articles/Chorus
 | 
						|
 | 
						|
			
 | 
						|
;;;  speed(formerly "delta")=2*pi*freq/48000
 | 
						|
;;;  this give us our delta value for a specific freq (0.1-0.3Hz is good)
 | 
						|
		
 | 
						|
 | 
						|
	include "emu_constants.asm"
 | 
						|
	name "Chorus"
 | 
						|
		
 | 
						|
in	IO
 | 
						|
out	equ in	
 | 
						|
 | 
						|
	
 | 
						|
	
 | 
						|
speed	  control  4e-05 , 0 , 1e-4 	; Controls frequency (radians)
 | 
						|
delay   control  &40e-3  ,&10e-3 , &80e-3; twice (2*) average delay (sec)
 | 
						|
width	  control  #0.3   ,0	 ,0.5	; width control 
 | 
						|
mix	  control  #1	 ,0      ,#1	; forward mix 
 | 
						|
 | 
						|
;; sine generator storage spaces:	
 | 
						|
sinx  sta  0	
 | 
						|
cosx  sta  #0.5
 | 
						|
			
 | 
						|
tmp  dyn 	
 | 
						|
tmp2 dyn
 | 
						|
	
 | 
						|
;;; Two Delay Lines:	
 | 
						|
	
 | 
						|
	
 | 
						|
dly   delay  &80e-3		;10msec delay line
 | 
						|
	
 | 
						|
write	twrite dly,0		; tram writes
 | 
						|
ready	tread dly,0		; tram reads
 | 
						|
reada   tread dly,0
 | 
						|
				
 | 
						|
;;;The code:	
 | 
						|
	
 | 
						|
		
 | 
						|
;;; two opcode sinewave generator (I love this chip!):
 | 
						|
	macs  sinx,sinx,speed,cosx
 | 
						|
	macs1 cosx,cosx,speed,sinx 
 | 
						|
 | 
						|
;;; 0.5Asint+0.5:	
 | 
						|
	macs tmp,C_2^30,sinx,width
 | 
						|
	
 | 
						|
;;; calculate address:
 | 
						|
	macs  ready.a,write.a,delay,tmp
 | 
						|
 | 
						|
;second addresses for interpolation:
 | 
						|
;(interesting how the emu engineers decided that $800 wasn't a needed value) 
 | 
						|
	macints reada.a,ready.a,C_8,C_256 
 | 
						|
 | 
						|
	
 | 
						|
;;; Write to the delay line:
 | 
						|
	
 | 
						|
	macs  write,C_0,in,C_2^29	
 | 
						|
		
 | 
						|
	
 | 
						|
;;; output values:		
 | 
						|
;;; 0x55 is 00100000 (?)
 | 
						|
	macints tmp,C_0,reada.a,C_LSshift; get least significant part of address
 | 
						|
	
 | 
						|
	interp tmp2,ready,tmp,reada ;interpolate in-between the two delay line readings
 | 
						|
	
 | 
						|
	macs  out,in,tmp2,mix
 | 
						|
	
 | 
						|
 | 
						|
 | 
						|
		
 | 
						|
	
 | 
						|
	end
 | 
						|
 | 
						|
 | 
						|
 | 
						|
 | 
						|
 |