;*********************************************************************
|
; OM-SoX, (c) 2011-2016 Marlon Schumacher (CIRMMT/McGill University) *
|
; http://sourceforge.net/projects/omsox/ *
|
; *
|
; Multichannel Audio Manipulation and Functional Batch Processing. *
|
; DSP based on SoX - (c) C.Bagwell and Contributors *
|
; http://sox.sourceforge.net/ *
|
;*********************************************************************
|
;
|
;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.
|
;
|
;See file LICENSE for further informations on licensing terms.
|
;
|
;This program is distributed in the hope that it will be useful,
|
;but WITHOUT ANY WARRANTY; without even the implied warranty of
|
;MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
;GNU General Public License for more details.
|
;
|
;You should have received a copy of the GNU General Public License
|
;along with this program; if not, write to the Free Software
|
;Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,10 USA.
|
;
|
;Authors: M. Schumacher
|
|
(in-package :om)
|
|
|
; Set OM Preferences
|
(defmethod put-external-preferences ((module (eql 'sox)) moduleprefs)
|
(when (get-pref moduleprefs :Sox-path)
|
(setf *SOX-PATH* (find-true-external (get-pref moduleprefs :Sox-path)))
|
(when (probe-file *SOX-PATH*)
|
(om-cmd-line (format nil "chmod 777 ~s" (namestring *sox-path*)) t))
|
))
|
|
; Set Normalization Module
|
(unless (find :sox *loaded-normalizers*)
|
(pushr :sox *loaded-normalizers*))
|
|
(defmethod get-def-normalize-value ((self (eql :sox))) 0.0)
|
(defmethod get-module-name ((self (eql :sox))) "sox")
|
(defmethod general-normalize ((norm (eql :sox)) inpath outpath val &optional resolution)
|
(let ((normval (or val *normalize-level*)))
|
(sox-process inpath (sox-normalize :level normval) :output outpath))) ; resolution could be added here: Or only if sox uses OM audio settings
|
|
(defparameter *om-sox-lib-path* (make-pathname :directory (pathname-directory *load-pathname*)))
|
(defparameter *om-sox-version* "1.0.1")
|
|
(load (om-make-pathname :directory (x-append (pathname-directory *load-pathname*) "sources") :name "preferences" :type "lisp"))
|
|
; Load Classes
|
(defparameter *sox-classes* '(
|
"sox-input"
|
"sox-concatenate"
|
"sox-hoaencode"
|
"sox-merge"
|
"sox-mix-console"
|
"sox-mix"
|
"sox-multiply"
|
"sox-pan"
|
"sox-record"
|
"sox-remix"
|
"sox-splice"
|
"sox-split"
|
))
|
|
(defun load-sox-classes (subdir &optional pack)
|
(loop for item in *sox-classes* do
|
(let ((itempath (om-relative-path subdir item)))
|
(compile&load itempath)
|
(let ((classname (intern (string-upcase item))))
|
(when (and pack (find-class classname nil))
|
(unless (equal item "sox-input")
|
(addclass2pack classname pack)))))
|
)
|
)
|
|
(load-sox-classes '("sources" "classes") (find-library "OM-SoX"))
|
|
; Load Functions
|
(defun recursive-load-files (dir &optional pack)
|
(loop for item in (om-directory dir) do
|
;(print item)
|
(if (directoryp item)
|
(unless (equal (car (last (pathname-directory item))) "classes") ;don't load classes
|
(let ((thepackage
|
(or (and pack (find (car (last (pathname-directory item)))
|
(subpackages pack) :key 'name :test 'string-equal))
|
pack)))
|
(recursive-load-files item thepackage)))
|
|
(cond ((and (>= *om-version* 6.07) (< *om-version* 6.08))
|
(when (string-equal (pathname-type item) "lisp")
|
(unless (or (string-equal (pathname-name item) "player-om606")
|
(string-equal (pathname-name item) "player-om608"))
|
(compile&load item))))
|
((>= *om-version* 6.08)
|
(when (string-equal (pathname-type item) "lisp")
|
(unless (or (string-equal (pathname-name item) "player-om606")
|
(string-equal (pathname-name item) "player-om607"))
|
(compile&load item))))
|
((string-equal (pathname-type item) "lisp")
|
(unless (or (string-equal (pathname-name item) "player-om607")
|
(string-equal (pathname-name item) "player-om608"))
|
(compile&load item))))
|
)))
|
|
(recursive-load-files (om-relative-path '("sources") nil) (find-library "OM-SoX"))
|
|
|
; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
|
(om::fill-library '(
|
;(sub-pack-name subpack-lists class-list function-list class-alias-list)
|
|
("Main functions" nil nil (sox-process sox-analysis) nil)
|
("Statistics" (
|
("Durations" nil nil (sox-samples sox-duration) nil)
|
("Amplitudes" nil nil (sox-peak-amplitude sox-max-positive-amplitude sox-max-negative-amplitude
|
sox-mid-amplitude sox-mean-amplitude sox-mean-norm-amplitude sox-rms-amplitude) nil)
|
("Levels" nil nil (sox-peak-level sox-rms-level sox-rms-peak-level sox-rms-trough-level sox-headroom) nil)
|
("Descriptors" nil nil (sox-fundamental-frequency sox-dc-offset sox-crest-factor sox-flat-factor sox-peak-count sox-dft) nil)
|
("Deltas" nil nil (sox-max-delta-amplitude sox-min-delta-amplitude sox-mean-delta-amplitude sox-rms-delta-amplitude) nil)
|
("Bits" nil nil (sox-bit-depth-ratio sox-scale-factor) nil)))
|
|
("Effects" (
|
("Editing" nil nil (sox-reverse sox-repeat sox-pad sox-trim sox-voicetrim sox-fade sox-trimsilence) nil)
|
("Modulation" nil nil (sox-tremolo sox-phaser sox-flanger sox-chorus) nil)
|
("Mastering" nil nil (sox-denoise sox-dcremove sox-riaa sox-invert sox-dither) nil )
|
("Time-Frequency" nil nil (sox-transpose sox-multi-transpose sox-stretch sox-speed) nil)
|
("Delays&Reverbs" nil nil (sox-delay sox-tapdelay sox-reverb sox-convolve) nil)
|
("Filters" nil nil (sox-lowpass sox-highpass sox-band sox-allpass sox-sinc sox-fir sox-shelf-eq sox-peak-eq sox-biquad sox-hilbert) nil)
|
("Dynamics" nil nil (sox-normalize sox-amplitude sox-level sox-compand sox-contrast sox-loudness sox-overdrive) nil))
|
)
|
))
|
|
|
; %%%%%%%% SPLASH SCREEN %%%%%%%%%
|
|
(om-message-dialog (string+
|
"===========================
|
OM-SoX " *om-sox-version*"
|
|
http://sourceforge.net/projects/omsox/
|
(c) Marlon Schumacher, 2011-2016
|
")
|
:window-title *om-sox-version*
|
|
:size (om-make-point 335 200)
|
:position (om-make-point 200 140)
|
)
|
|
(format *om-stream* (string+
|
"
|
=========================================
|
| OM-SoX "*om-sox-version*
|
"
|
| ----------------------
|
| Symbolic Multichannel Audio Manipulation and
|
| Functional Batch Processing
|
| http://sourceforge.net/projects/omsox/
|
|
|
| (c) M. Schumacher, CIRMMT/McGill 2011-2016
|
| www.idmil.org/people/marlon_schumacher
|
| ALL RIGHTS RESERVED
|
|
|
| dsp based on SoX - (c) C.Bagwell and Contributors
|
| http://sourceforge.net/projects/sox/
|
=========================================
|
"))
|
|
;%%%%%%%% URLs %%%%%%%%%
|
(defmethod! developer-page ()
|
:icon 98
|
:numouts 0
|
(sys:open-url "http://www.idmil.org/people/marlon_schumacher")
|
)
|
|
(defmethod! om-sox-mailing-list ()
|
:icon 98
|
:numouts 0
|
(sys:open-url "https://lists.sourceforge.net/lists/listinfo/omsox-users")
|
)
|
|
(defmethod! gnu-gpl3 ()
|
:icon 96
|
:numouts 0
|
(sys:open-url "http://www.gnu.org/licenses/gpl-3.0.html")
|
)
|
|
(defmethod! om-sox-page ()
|
:icon 99
|
:numouts 0
|
(sys:open-url "http://sourceforge.net/projects/omsox/")
|
)
|
|
(defmethod! sox-html-documentation ()
|
:icon 08
|
:numouts 0
|
(sys:open-url "http://sox.sourceforge.net/sox.html")
|
)
|
|
(defmethod! src.infinitewave.ca ()
|
:icon 96
|
:numouts 0
|
(sys:open-url "http://src.infinitewave.ca")
|
)
|
|
|
|
|
; Version control
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
; before committing
|
; (clean-sources *om-sox-lib-path*)
|
|
; Distribution
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
; generate html reference
|
; (gen-lib-reference "OM-SoX")
|
; before distribution
|
; (clean-repo *om-sox-lib-path*)
|
|
(set-lib-release 1.0)
|
;(reset-lib-doc)
|
;(om::set-lib-release 1.0 (find-library "OM-Sox"))
|
|
|
(defun clean-sources (&optional dir)
|
(let ((src-root (or dir (make-pathname :directory (butlast (pathname-directory *load-pathname*) 2)))))
|
(mapc #'(lambda (file)
|
(if (system::directory-pathname-p file)
|
(clean-sources file)
|
(when (and (pathname-type file)
|
(or (string-equal (pathname-type file) "xfasl")
|
(string-equal (pathname-type file) "fasl")
|
(string-equal (pathname-type file) "DS_STORE")
|
(string-equal (pathname-type file) "nfasl")
|
(string-equal (pathname-type file) "ofasl")
|
(string-equal (pathname-type file) "ufasl")
|
(string-equal (pathname-type file) "lisp~")
|
;(string-equal (pathname-type file) "html")
|
)) ;removes html reference
|
(print (concatenate 'string "Deleting " (namestring file) " ..."))
|
(delete-file file)
|
)))
|
(directory (namestring src-root) :directories t))
|
))
|
|
|
(defun clean-repo (&optional dir)
|
(let ((src-root (or dir (make-pathname :directory (butlast (pathname-directory *load-pathname*) 2)))))
|
(mapc #'(lambda (file)
|
|
(if (system::directory-pathname-p file)
|
(if (cond (
|
(string-equal ".git" (car (last (pathname-directory file))))
|
(string-equal ".dropbox" (car (last (pathname-directory file))))
|
(string-equal ".svn" (car (last (pathname-directory file))))
|
(system::call-system (concatenate 'string "rm -Rf \"" (namestring file) "\""))
|
(clean-repo file))
|
(when (and (pathname-type file)
|
(or (string-equal (pathname-type file) "xfasl")
|
(string-equal (pathname-type file) "fasl")
|
(string-equal (pathname-type file) "DS_STORE")
|
(string-equal (pathname-type file) "nfasl")
|
(string-equal (pathname-type file) "ofasl")
|
(string-equal (pathname-type file) "ufasl")
|
(string-equal (pathname-type file) "lisp~")))
|
(print (concatenate 'string "Deleting " (namestring file) " ..."))
|
(delete-file file)
|
))
|
)))
|
(directory (namestring src-root) :directories t))
|
))
|
|
|
|
|
#|
|
global audio variables:
|
(defvar *audio-sr* 44100) samplerate
|
(defvar *audio-res* 16) bitsize
|
(defvar *automatic-rename* nil) auto-rename
|
(defvar *delete-inter-file* t)
|
(defvar *def-snd-format* 'aiff)
|
(defvar *normalize* t)
|
(defvar *normalize-level* 0.0)
|
(defvar *normalizer* :csound)
|
|#
|