updated audacity plugin
authorPaul Brossier <piem@altern.org>
Wed, 15 Feb 2006 10:31:46 +0000 (10:31 +0000)
committerPaul Brossier <piem@altern.org>
Wed, 15 Feb 2006 10:31:46 +0000 (10:31 +0000)
updated audacity plugin

plugins/audacity/plug-ins/aubioonset.ny

index 7db5c3c9540db0b91e0073992911637a49cb1633..07b2cac1698cd5577e15bde7581ee9207232cd9f 100644 (file)
@@ -4,42 +4,87 @@
 ;name "Onset Detection..."
 ;action "Generate onset label track using aubioonset..."
 ;info "Aubio onset detector:\n Generates a label track with markers at the beginning of audio events"
-;control threshold "Detection threshold" real "[0.001-0.900...]" 0.1 0.001 1.0
+;control dmode "Detection Beats/Onsets" int "0=Beats 1=Onsets" 1 0 1
+;control threshold "Detection threshold" real "[0.001-0.900...]" 0.3 0.001 1.0
+;control omode "Mode" int "0=ComplexDomain 1=HFC 2=Specdiff 3=Phase 4=Energy" 0 0 3
+
+;Create a function to make the sum the two channels if they are stereo
+(defun mono-s (s-in) 
+  (if (arrayp s-in) (snd-add (aref s-in 0) (aref s-in 1)) s-in)
+)
+
+; path to aubio commands
+(cond 
+  ((= dmode 0)(setf aubiocmd "/home/piem/aubio/aubio/examples/aubiotrack"))
+  (t (setf aubiocmd "/home/piem/aubio/aubio/examples/aubioonset"))
+)
+
+(cond 
+  ((= omode 0)(setf onsetmode "complexdomain"))
+  ((= omode 1)(setf onsetmode "hfc"))
+  ((= omode 2)(setf onsetmode "specdiff"))
+  (t (setf onsetmode "dual"))
+)
 
 ; largest number of samples 
 (setf largenumber 1000000000) 
+
 ; some temporary files
-(setf infile "/tmp/test.wav")
-(setf tmfile "/tmp/test.txt")
+;(setf infile (system "mktmp tmp-aubio-XXXXXX"))
+;(setf tmfile (system "mktmp tmp-aubio-XXXXXX"))
+(setf infile "/tmp/aubio-insecure.wav")
+(setf tmfile "/tmp/aubio-insecure.txt")
+
 ; our command lines
-(setf aubiocmd (strcat "aubioonset -t " (ftoa threshold) " -i " infile " > " tmfile))
-(setf deletcmd "rm -f /tmp/test.wav /tmp/test.txt")
+(setf aubiocmd (strcat 
+        aubiocmd
+        " -O " onsetmode
+        " -t " (ftoa threshold) 
+        " -i " infile 
+        " > "  tmfile))
+(setf deletcmd (strcat "rm -f " infile " " tmfile))
+
+; save current sound selection into mono infile 
+(s-save (mono-s s) (snd-length (mono-s s) largenumber) infile)
 
-; save current selection in /tmp
-; bug: should check the sound is mono
-(s-save s (snd-length s largenumber) "/tmp/test.wav")
 ; run aubio
 (system aubiocmd)
 
 ; read the file and build the list of label in result
 (let* (
-       (fp (open "/tmp/test.txt"  :direction :input))
-       (result '())
-       (n 1)
-       (c (read-line fp))
+        (fp (open tmfile :direction :input))
+        (result '())
+        (n 1)
+        (c (read-line fp))
       )
  (read-line fp)
+ ;(setf oldc c)
  (while (not (not c))
    (setq result 
-       (append
-       result
-       (list (list (atof c) ""))
-       ))
+        (append
+        result
+        ;(list (list (strcat oldc "    " c) ""))
+        (list (list (atof c) ""))
+        ))
+   ;(setf oldc c)
    (setf c (read-line fp))
    (setq n (+ n 1))
   )
-(close fp)
-(system deletcmd)
-;uncomment to debug
-;(print result) 
-result)
+  (close fp)
+
+  (system deletcmd)
+
+  ;uncomment to debug
+  ;(print result) 
+
+
+  ;If no silence markers were found, return a message
+  (if (null result)
+   (setq result "No onsets or beats found, no passages marked")
+  )
+  
+  result
+
+)
+