Mercurial > hg > jslab
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 |