comparison src/scheme/old/audio.scm @ 0:bf79fb79ee13

Initial Mercurial check in.
author samer
date Tue, 17 Jan 2012 17:50:20 +0000
parents
children
comparison
equal deleted inserted replaced
-1:000000000000 0:bf79fb79ee13
1 ;(import "javax.sound.sampled.*")
2
3 ;;; getting mixers
4 (define (get-mixers) (vector->list (javax.sound.sampled.AudioSystem.getMixerInfo)))
5 (define (pr-mixers) (print (get-mixers)))
6 (define (mixer mi) (javax.sound.sampled.AudioSystem.getMixer mi))
7 (define (mixer-n n) (mixer (list-ref (get-mixers) n)))
8 (define (default-mixer) (mixer-n (Shell.getInt "mixer" 1)))
9
10
11
12 ;;; formats
13 (define (mono rate) (multi 1 rate))
14 (define (stereo rate) (multi 2 rate))
15 (define (multi chans rate) (format 16 chans rate))
16 (define (format bits chans rate) (javax.sound.sampled.AudioFormat. (.floatValue rate) bits chans #t #f))
17
18 ;;; construct line info from given format
19 (define (target format)
20 (javax.sound.sampled.DataLine$Info.
21 javax.sound.sampled.TargetDataLine.class format))
22
23 (define (source format)
24 (javax.sound.sampled.DataLine$Info.
25 javax.sound.sampled.SourceDataLine.class format))
26
27 ;;; these two just return the first target/source line info respectively
28 ;;; (define (target-info m) (vector-ref (.getTargetLineInfo m) 0))
29 ;;; (define (source-info m) (vector-ref (.getSourceLineInfo m) 0))
30
31 ;;; getting line from info and optional mixer
32 (define-method (line info) (javax.sound.sampled.AudioSystem.getLine info))
33 (define-method (line mixer info) (.getLine mixer info))
34
35 ;;; these two just return the mixer's first target/source line respectively
36 (define (target-line m) (line m (vector-ref (.getTargetLineInfo m) 0)))
37 (define (source-line m) (line m (vector-ref (.getSourceLineInfo m) 0)))
38
39 (define _src samer.audio.LineSource.)
40 (define _snk samer.audio.LineSink.)
41 (define (_op1 l) (.open l) l)
42 (define (_op2 l fmt) (.open l fmt) l)
43
44 (define-method (linesrc) (_op1 (_src)))
45 (define-method (linesrc fmt) (_op1 (_src (line (target fmt)))))
46 (define-method (linesrc m fmt) (_op2 (_src (target-line m)) fmt))
47 (define-method (linesnk fmt) (_op1 (_snk (line (source fmt)))))
48 (define-method (linesnk m fmt) (_op2 (_snk (source-line m)) fmt))
49
50 ;; to do: buffer size?
51 ;; integrate with LineSource.defaultLine and VLine.defaultFormat
52 ;; specify default mixer in user.props
53
54 (define (display-mixer m)
55 (print "\n **************************** \n")
56 (print (.getMixerInfo m))
57 ; (print "\n---controls:") (print(.getControls m))
58 (print "\n---source line info:") (print(.getSourceLineInfo m))
59 (print "\n---target line info:") (print(.getTargetLineInfo m))
60 ; (print "\n---source lines:") (print(.getSourceLines m))
61 ; (print "\n---target lines:") (print(.getTargetLines m))
62 #null
63 )
64
65 ;; default line in
66 (define-method (linein size step) (linein (linesrc) size step))
67
68
69 ;;; Format conversion
70 (define (convert format stream)
71 (javax.sound.sampled.AudioSystem.getAudioInputStream format stream))
72
73 ;;; get audio input stream from file object
74 (define-method (astream (f java.io.File))
75 (javax.sound.sampled.AudioSystem.getAudioInputStream f))
76
77 ;;; get audio input stream from named file
78 (define-method (astream (fn String)) (astream (java.io.File. fn)))
79