summaryrefslogtreecommitdiff
path: root/misc.scm
blob: 146465aa6f7648bd97dd7c2e4a072a60007d7660 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
(provide 'snd-misc.scm)

(if (not (provided? 'snd-motif)) (snd-error "misc.scm only works in the Motif version of Snd."))

(require snd-snd-motif.scm snd-examp.scm snd-extensions.scm snd-dsp.scm snd-draw.scm snd-env.scm snd-enved.scm)
(require snd-hooks.scm snd-marks.scm snd-mix.scm snd-moog.scm snd-play.scm snd-rubber.scm snd-zip.scm snd-edit123.scm)
(require snd-new-effects.scm snd-special-menu.scm snd-marks-menu.scm snd-fft-menu.scm snd-effects-utils.scm)

(with-let *motif*

(keep-file-dialog-open-upon-ok)
(set! *ask-about-unsaved-edits* #t)
(if (not (hook-member show-disk-space after-open-hook))
    (hook-push after-open-hook show-disk-space))

#|
(let ((paint-all 
       (let ((wd (make-pixmap (cadr (main-widgets)) rough)))
	 (lambda (widget)
	   (for-each-child
	    widget
	    (lambda (w)
	      (if (and (Widget? w)
		       (or (not (XmIsPushButton w))
			   (member (XtName w) '("revscl-label" "contrast-label" "expand-label" "srate-label" "amp-label") string=?)))
		  (XtSetValues w (list XmNbackgroundPixmap wd)))))))))

  (define (hook-paint-all hook) 
    (paint-all (hook 'widget)))
  
  (paint-all (cadr (main-widgets)))
  (for-each
   (lambda (w)
     (if (and w
	      (Widget? w))
	 (paint-all w)))
   (dialog-widgets))
  
  (if (not (hook-member hook-paint-all new-widget-hook))
      (hook-push new-widget-hook hook-paint-all)))
|#

(set! *mix-waveform-height* 32)

;;; (with-level-meters 2)

(add-mark-pane)

(for-each add-sound-file-extension '("ogg" "OGG" "sf" "SF2" "mp3" "MP3" "W01" "W02" "W03" "W04" "W05" "W06" "W07" 
				     "W08" "W09" "W10" "w01" "w02" "w03" "w04" "w05" "w06" "w07" "w08" "w09" "w10"))

;;;
;;; disable original Play radio button
;;;

;(hook-push after-open-hook
;           (lambda (hook)
;             (XtUnmanageChild (find-child (list-ref (sound-widgets (hook 'snd)) 2) "play"))))


;;;
;;; main menu additions
;;;

;;; -------- add delete and rename options to the file menu

(define (add-delete-option)
  (add-to-menu 0 "Delete" ; add Delete option to File menu
	       (lambda ()
		 ;; close current sound and delete it
		 (if (>= (selected-sound) 0)
		     (let ((filename (file-name)))
		       (close-sound)
		       (delete-file filename))))
	       8)) ; place after File:New

(define (add-rename-option)
  (let ((rename-dialog #f)
	(rename-text #f))
    (add-to-menu 0 "Rename" 
      (lambda ()
	;; open dialog to get new name, save-as that name, open
	(unless rename-dialog
	  ;; make a standard dialog
	  (let* ((xdismiss (XmStringCreate "Go Away" XmFONTLIST_DEFAULT_TAG))
		 (xhelp (XmStringCreate "Help" XmFONTLIST_DEFAULT_TAG))
		 (xok (XmStringCreate "DoIt" XmFONTLIST_DEFAULT_TAG))
		 (titlestr (XmStringCreate "Rename" XmFONTLIST_DEFAULT_TAG))
		 (new-dialog (XmCreateTemplateDialog
			      (cadr (main-widgets)) "Rename"
			      (list XmNcancelLabelString   xdismiss
				    XmNhelpLabelString     xhelp
				    XmNokLabelString       xok
				    XmNautoUnmanage        #f
				    XmNdialogTitle         titlestr
				    XmNresizePolicy        XmRESIZE_GROW
				    XmNnoResize            #f
				    XmNbackground          *basic-color*
				    XmNtransient           #f))))
	    (for-each
	     (lambda (button color)
	       (XtVaSetValues
		(XmMessageBoxGetChild new-dialog button)
		(list XmNarmColor   *selection-color*
		      XmNbackground color)))
	     (list XmDIALOG_HELP_BUTTON XmDIALOG_CANCEL_BUTTON XmDIALOG_OK_BUTTON)
	     (list *highlight-color* *highlight-color* *highlight-color*))
	    
	    (XtAddCallback new-dialog XmNcancelCallback 
			   (lambda (w c i) (XtUnmanageChild w)))
	    
	    (XtAddCallback new-dialog XmNhelpCallback 
			   (lambda (w c i)
			     (help-dialog "Rename" "Give a new file name to rename the currently selected sound.")))
	    
	    (XtAddCallback new-dialog XmNokCallback 
			   (lambda (w c i)
			     (let ((new-name (XmTextFieldGetString rename-text)))
			       (when (and (string? new-name)
					  (> (length new-name) 0)
					  (>= (selected-sound) 0))
				 (save-sound-as new-name)
				 (close-sound)
				 (open-sound new-name)
				 (XtUnmanageChild w)))))
	    (for-each XmStringFree (vector xhelp xok xdismiss titlestr))
	    (set! rename-dialog new-dialog)
	    (let* ((mainform (XtCreateManagedWidget "formd" xmRowColumnWidgetClass rename-dialog
						    (list XmNleftAttachment      XmATTACH_FORM
							  XmNrightAttachment     XmATTACH_FORM
							  XmNtopAttachment       XmATTACH_FORM
							  XmNbottomAttachment    XmATTACH_WIDGET
							  XmNbottomWidget        (XmMessageBoxGetChild rename-dialog XmDIALOG_SEPARATOR)
							  XmNorientation         XmVERTICAL
							  XmNbackground          *basic-color*)))
		   (label (XtCreateManagedWidget "new name:" xmLabelWidgetClass mainform
						 (list XmNleftAttachment      XmATTACH_FORM
						       XmNrightAttachment     XmATTACH_NONE
						       XmNtopAttachment       XmATTACH_FORM
						       XmNbottomAttachment    XmATTACH_FORM
						       XmNbackground          *basic-color*))))
	      (set! rename-text 
		    (XtCreateManagedWidget "newname" xmTextFieldWidgetClass mainform
					   (list XmNleftAttachment      XmATTACH_WIDGET
						 XmNleftWidget          label
						 XmNrightAttachment     XmATTACH_FORM
						 XmNtopAttachment       XmATTACH_FORM
						 XmNbottomAttachment    XmATTACH_FORM
						 XmNbackground          *basic-color*)))
	      (XtAddEventHandler rename-text EnterWindowMask #f
				 (lambda (w context ev flag)
				   (XmProcessTraversal w XmTRAVERSE_CURRENT)
				   (XtSetValues w (list XmNbackground (white-pixel)))))
	      (XtAddEventHandler rename-text LeaveWindowMask #f
				 (lambda (w context ev flag)
				   (XtSetValues w (list XmNbackground *basic-color*)))))))
	((if (not (XtIsManaged rename-dialog)) XtManageChild raise-dialog) rename-dialog))
      8)))

(install-searcher-with-colors (lambda (file) #t))
(add-delete-option)
(add-rename-option)



(add-to-menu 1 #f #f) ; separator

;;;
;;; additions to Edit menu
;;;

;;; -------- cut selection -> new file

(define cut-selection->new
  (let ((selctr 0))
    (lambda ()
      (if (selection?)
	  (let ((new-file-name (format #f "sel-~D.snd" selctr)))
	    (set! selctr (+ selctr 1))
	    (save-selection new-file-name)
	    (delete-selection)
	    (open-sound new-file-name))))))

;;; (add-to-menu 1 "Cut Selection -> New" cut-selection->new)

;;; -------- append selection

(define (append-selection)
  (if (selection?)
      (insert-selection (framples))))

(add-to-menu 1 "Append Selection" append-selection)

;;; Replace with selection
;;;

(define (replace-with-selection)
  (let ((beg (cursor))
        (len (selection-framples)))
    (delete-samples beg len)
    (insert-selection beg)))

(add-to-menu 1 "Replace with Selection" replace-with-selection)

;;; (add-to-menu 1 #f #f)

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;
;;; open and convert stereo MP3 files automatically
;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

(hook-push open-raw-sound-hook
           (lambda (hook)
             (set! (hook 'result) (list 2 44100 (if (little-endian?) mus-lshort mus-bshort)))))

(hook-push open-hook
           (lambda (hook)
	     (let ((filename (hook 'name)))
	       (if (= (mus-sound-header-type filename) mus-raw)
		   (let ((rawfile (string-append filename ".raw")))
		     (system (format #f "mpg123 -s ~A > ~A" filename rawfile))
		     (set! (hook 'result) rawfile))))))

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;
;;; open and convert stereo OGG files automatically
;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

(hook-push open-raw-sound-hook
           (lambda (hook)
             (set! (hook 'result) (list 2 44100 (if (little-endian?) mus-lshort mus-bshort)))))

(hook-push open-hook
           (lambda (hook)
	     (let ((filename (hook 'name)))
	       (if (= (mus-sound-header-type filename) mus-raw)
		   (let ((rawfile (string-append filename ".raw")))
		     (system (format #f "ogg123 -d raw -f ~A ~A" rawfile filename))
		     (set! (hook 'result) rawfile))))))


;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;
;;; set up a region play list
;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

(define (region-play-list data)
  ;; data is list of lists (list (list time region)...), time in secs
  (for-each
   (lambda (tone)
     (let ((time (* 1000 (car tone)))
           (region (cadr tone)))
       (if (region? region)
           (in time (lambda () (play region))))))
   data))

;;; (region-play-list (list (list 0.0 0) (list 0.5 1) (list 1.0 2) (list 1.0 0)))

;;; Deselect function
;;;

(define deselect-all unselect-all)

)