mirror of
				https://github.com/cookiengineer/audacity
				synced 2025-11-01 06:33:53 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			91 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			Common Lisp
		
	
	
	
	
	
			
		
		
	
	
			91 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			Common Lisp
		
	
	
	
	
	
| ;; system.lsp -- system-dependent lisp code
 | |
| 
 | |
| ; local definition for play
 | |
| ;  this one is for Linux:
 | |
| 
 | |
| (if (not (boundp '*default-sf-format*))
 | |
|     (setf *default-sf-format* snd-head-wave))
 | |
| 
 | |
| (if (not (boundp '*default-sound-file*))
 | |
|     (compute-default-sound-file))
 | |
| 
 | |
| (if (not (boundp '*default-sf-dir*))
 | |
|     (setf *default-sf-dir* "./"))
 | |
| 
 | |
| (if (not (boundp '*default-sf-mode*))
 | |
|     (setf *default-sf-mode* snd-mode-pcm))
 | |
| 
 | |
| (if (not (boundp '*default-sf-bits*))
 | |
|     (setf *default-sf-bits* 16))
 | |
| 
 | |
| (if (not (boundp '*default-plot-file*))
 | |
|     (setf *default-plot-file* (strcat (get-user) "-points.dat")))
 | |
| 
 | |
| 
 | |
| ; FULL-NAME-P -- test if file name is a full path or relative path
 | |
| ;
 | |
| ; (otherwise the *default-sf-dir* will be prepended
 | |
| ;
 | |
| (defun full-name-p (filename)
 | |
|   (or (eq (char filename 0) #\/)
 | |
|       (eq (char filename 0) #\.)))
 | |
| 
 | |
| ; RELATIVE-PATH-P -- test if filename or path is a relative path
 | |
| ;
 | |
| (defun relative-path-p (filename)
 | |
|   (not (eq (char filename 0) #\/)))
 | |
| 
 | |
| (setf *file-separator* #\/)
 | |
| 
 | |
| 
 | |
| ;; PLAY-FILE - play a sound file
 | |
| ;;
 | |
| (defun play-file (name)
 | |
| ;;
 | |
| ;; WARNING: if you invoke an external program to play files, 
 | |
| ;; but Nyquist uses internal (portaudio) interface to
 | |
| ;; play synthesized sound, Nyquist may fail to open the
 | |
| ;; sound device while it is playing a sound file and then
 | |
| ;; refuse to play anything. -RBD dec05
 | |
| ;;  (system (strcat "sndplay " (soundfilename name))))
 | |
| ;;  (system (strcat "play " (soundfilename name) )))
 | |
| ;;
 | |
|   (play (s-read (soundfilename name))))
 | |
| 
 | |
| ;; R - replay last file written with PLAY
 | |
| (defun r () (play-file *default-sound-file*))
 | |
| 
 | |
| ;;;; use this old version if you want to use sndplay to play
 | |
| ;;;; the result file rather than play the samples as they
 | |
| ;;;; are computed. This version does not autonormalize.
 | |
| ;; PLAY - write value of an expression to file and play it
 | |
| ;;
 | |
| ;(defmacro play (expr)
 | |
| ;  `(prog (specs)
 | |
| ;	 (setf specs (s-save (force-srate *sound-srate* ,expr) 
 | |
| ;			   1000000000 *default-sound-file*))
 | |
| ;	 (r)))
 | |
| ;;;;
 | |
| 
 | |
| ; local definition for play
 | |
| (defmacro play (expr)
 | |
|   `(s-save-autonorm ,expr NY:ALL *default-sound-file* :play *soundenable*))
 | |
| 
 | |
| ;; for Linux, modify s-plot (defined in nyquist.lsp) by saving s-plot
 | |
| ;; in standard-s-plot, then call gnuplot to display the points.
 | |
| ;;
 | |
| ;; we also need to save the location of this file so we can find
 | |
| ;; nyquist-plot.txt, the command file for gnuplot
 | |
| ;;
 | |
| (setf *runtime-path* (current-path))
 | |
| (display "system.lsp" *runtime-path*)
 | |
| 
 | |
| (setfn standard-s-plot s-plot)
 | |
| 
 | |
| (defun s-plot (s &optional (n 1000) (dur 2.0))
 | |
|   (let (plot-file)
 | |
|     (standard-s-plot s n dur) ;; this calculates the data points
 | |
|     (setf plot-file (strcat *runtime-path* "nyquist-plot.txt"))
 | |
|     (system (strcat "gnuplot -persist " plot-file))))
 | |
| 
 |