[signals] First pass at signal module -- it doesn't import???
This commit is contained in:
		
							parent
							
								
									1375af7a07
								
							
						
					
					
						commit
						7ccf343f33
					
				
					 2 changed files with 49 additions and 0 deletions
				
			
		
							
								
								
									
										0
									
								
								signal/__init__.py
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										0
									
								
								signal/__init__.py
									
										
									
									
									
										Normal file
									
								
							
							
								
								
									
										49
									
								
								signal/waves.py
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										49
									
								
								signal/waves.py
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,49 @@ | |||
| # waves.py | ||||
| # Eryn Wells <eryn@erynwells.me> | ||||
| ''' | ||||
| Several functions for creating audio waves. | ||||
| ''' | ||||
| 
 | ||||
| import numpy as np | ||||
| 
 | ||||
| __default_num_harmonics = 10 | ||||
| 
 | ||||
| def sine(domain, freq=1.0): | ||||
|     '''Render a sine wave in the given domain with the specified frequency.''' | ||||
|     return np.sin(2.0 * np.pi * freq * domain) | ||||
| 
 | ||||
| def saw(domain, freq=1.0, num_harmonics=__default_num_harmonics): | ||||
|     ''' | ||||
|     Render a saw wave in the given domain at the specified frequency. | ||||
| 
 | ||||
|     This function produces a saw wave by computing the first `harmonics` terms of the | ||||
|     infinite series defining its shape. | ||||
|     ''' | ||||
|     harmonics = np.asarray([1.0 / h * sine(domain, freq=freq * h) for h in range(1, num_harmonics)]) | ||||
|     wave = np.sum(harmonics, axis=0) | ||||
|     return wave | ||||
| 
 | ||||
| def square(domain, freq=1, num_harmonics=__default_num_harmonics): | ||||
|     ''' | ||||
|     Render a square wave in the given domain at the specified frequency. | ||||
| 
 | ||||
|     This function produces a saw wave by computing the first `harmonics` terms of the | ||||
|     infinite series defining its shape. | ||||
|     ''' | ||||
|     harmonics = np.asarray([1.0 / h * sine(domain, freq=freq * h) for h in range(1, num_harmonics, 2)]) | ||||
|     wave = np.sum(harmonics, axis=0) | ||||
|     return wave | ||||
| 
 | ||||
| def triangle(domain, freq=1, num_harmonics=__default_num_harmonics): | ||||
|     ''' | ||||
|     Render a triangle wave in the given domain at the specified frequency. | ||||
| 
 | ||||
|     This function produces a saw wave by computing the first `num_harmonics` terms of the | ||||
|     infinite series defining its shape. | ||||
|     ''' | ||||
|     def label(i): | ||||
|         return 2.0 * i + 1.0 | ||||
|     harmonics = np.asarray([((-1) ** h) * (label(h) ** -2) * sine(domain, freq=freq * label(h)) for h in | ||||
|         range(num_harmonics)]) | ||||
|     wave = np.sum(harmonics, axis=0) | ||||
|     return wave | ||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue