samer@0
|
1 % linein - Live input signal
|
samer@0
|
2 %
|
samer@0
|
3 % linein ::
|
samer@0
|
4 % C:natural ~'desired no. of channels',
|
samer@0
|
5 % R:nonneg ~'desired sample rate',
|
samer@0
|
6 % options {
|
samer@0
|
7 % bufsize :: natural/0 ~'desired buffer size, 0 is auto'
|
samer@0
|
8 % }
|
samer@0
|
9 % -> signal(C,R).
|
samer@0
|
10 classdef linein < sigbase
|
samer@0
|
11 properties (GetAccess=private, SetAccess=immutable)
|
samer@0
|
12 opts
|
samer@0
|
13 end
|
samer@0
|
14 methods
|
samer@0
|
15 function s=linein(channels,rate,varargin)
|
samer@0
|
16 s=s@sigbase(channels,rate);
|
samer@42
|
17 s.opts = options('bufsize',0,'bits',16,'quiet',0,varargin{:});
|
samer@0
|
18 end
|
samer@0
|
19 function c=tostring(sig), c='linein'; end
|
samer@0
|
20
|
samer@0
|
21 function s=construct(sig)
|
samer@0
|
22 import javax.sound.sampled.*;
|
samer@46
|
23 import ishara.audio.*;
|
samer@0
|
24
|
samer@0
|
25 src=LineSource(audio_format(sig.channels,sig.rate,sig.opts.bits),sig.opts.bufsize);
|
samer@0
|
26 ref=disposables('reg',src);
|
samer@42
|
27 if ~sig.opts.quiet
|
samer@42
|
28 fprintf('\nOpened audio input device:\n %s\n',char(src.toString));
|
samer@42
|
29 fprintf(' Actual buffer size is %d.\n',src.getLine.getBufferSize);
|
samer@42
|
30 end
|
samer@0
|
31
|
samer@0
|
32 s.stop = @stop;
|
samer@0
|
33 s.start = @start;
|
samer@0
|
34 s.dispose = @dispose;
|
samer@0
|
35 s.reader = @reader;
|
samer@0
|
36
|
samer@0
|
37 s.getLine = @()src.getLine();
|
samer@0
|
38
|
samer@0
|
39 function start, src.start(); src.check(); end
|
samer@0
|
40 function stop, src.check(); src.stop(); end
|
samer@0
|
41 function r=reader(n)
|
samer@0
|
42 ch=sig.channels;
|
samer@0
|
43 rdr=src.reader(ch*n);
|
samer@0
|
44 r=@next;
|
samer@0
|
45 function [x,rem]=next
|
samer@0
|
46 x=reshape(rdr.next(),ch,n); rem=0;
|
samer@0
|
47 end
|
samer@0
|
48 end
|
samer@0
|
49
|
samer@0
|
50 function dispose
|
samer@0
|
51 disposables('dereg',ref);
|
samer@0
|
52 src.dispose();
|
samer@0
|
53 end
|
samer@0
|
54 end
|
samer@0
|
55 end
|
samer@0
|
56 end
|