Explicitly include a boost "windows" folder even on linux
[supercollider.git] / HelpSource / Classes / FreqScopeView.schelp
blob75b9b3b005e4a00670f8ea35879b92727062e9d2
1 class:: FreqScopeView
2 redirect:: implClass
3 summary:: Frequency analysis view
4 categories:: GUI>Views
5 related:: Classes/FreqScope
7 description::
8 FreqScopeView shows the frequency spectrum of a specified audio bus.
10 note::
12 The scope will remain active after a command-period. To turn it off you must use the 'active' method.
13 Very important: You must run code::kill():: when the parent window is closed to avoid problems. It also frees the buffers that the scope allocated and stops the FFT analysis synth. So:
14 code::
16 w = Window("My Analyzer", Rect(0, 0, 511, 300));
17 f = FreqScopeView(w, w.view.bounds);
18 w.onClose_({ f.kill }); // YOU MUST HAVE THIS
19 w.front;
26 classmethods::
28 method:: new
29 argument:: parent
30 The parent view.
31 argument:: bounds
32 An instance of link::Classes/Rect::, or a link::Classes/Point:: indicating code::width@height::.
33 discussion::
34 Example:
35 code::
36 // Start internal server
37 s = Server.internal.boot;
39 // Create analyzer in a window
41 w = Window("My Analyzer", Rect(0, 0, 511, 300)); // width should be 511
42 f = FreqScopeView(w, w.view.bounds);
43 f.active_(true); // turn it on the first time;
45 w.onClose_({ f.kill }); // you must have this
46 w.front;
47 { SinOsc.ar([500, 1000], 0, 0.25).mean.dup }.play(s); // start two sine waves
51 method:: response
52 Create a scope in a special frequency-response mode. This uses FFT-based spectral division to estimate the frequency response of some effect, on the assumption that the signal to bus1 is transformed to the signal at bus2 by some linear time-invariant process.
53 argument:: parent
54 The parent view.
55 argument:: bounds
56 An instance of link::Classes/Rect::, or a link::Classes/Point:: indicating code::width@height::.
57 argument:: bus1
58 The bus on which the "pre" signal is found.
59 argument:: bus2
60 The bus on which the "post" signal is found.
61 argument:: freqMode
62 Linear (0) or log(1) frequency mode. Defaults to 1.
63 discussion::
64 Example:
65 code::
66 Server.default = s = Stethoscope.defaultServer.boot;
68 // basic usage. try these. Each one will open a new window
69 // move the mouse left and right to test response in different ranges
70 LPF.scopeResponse
71 HPF.scopeResponse
72 MoogFF.scopeResponse
73 BBandPass.scopeResponse
74 BLowShelf.scopeResponse // by default BLowShelf doesn't mangle much
75 Resonz.scopeResponse
76 BRF.scopeResponse
77 Integrator.scopeResponse
78 Median.scopeResponse // nonlinear, and therefore interesting
80 // customize the parameters for more informative scoping
81 {|in| MoogFF.ar(in, freq: MouseX.kr(10, 10000, 1),
82 gain:MouseY.kr(4, 0))}.scopeResponse
85 subsection:: Subclassing and Internal Methods
87 The following methods are usually not used directly or are called by a primitive. Programmers can still call or override these as needed.
89 method:: viewClass
90 Returns link::Classes/SCScope::. See also Subclassing and Internal Methods in link::Classes/SCView::.
91 warning::Cocoa specific::
93 method:: initClass
94 Sets the classvar, code::server = Server.internal::.
96 method:: server
97 A classvar. Must be code::Server.internal::.
99 instancemethods::
101 method:: kill
102 Very important. This must be run when the parent window is closed to avoid problems. It also frees the buffers that the scope allocated and stops the FFT analysis synth.
104 method:: active
105 Turn the scope on or off.
106 argument:: bool
107 An instance of link::Classes/Boolean::.
109 method:: freqMode
110 argument:: mode
111 0 = linear, 1 = logarithmic.
113 method:: inBus
114 The bus to listen on.
115 argument:: num
116 An audio link::Classes/Bus:: number.
118 method:: dbRange
119 Get/set the amplitude range.
120 argument:: db
121 A link::Classes/Number::.
123 method:: special
124 Put the scope into a special mode using a user-specified link::Classes/SynthDef::. Note that only very particular SynthDefs should be used, namely ones that are derived from the code::\freqScope0:: or code::\freqScope1:: SynthDefs. Most users will not need to use this method directly, but it can be used to provide a customised analysis shown in the scope.
125 argument:: defname
126 Name of the link::Classes/SynthDef:: you wish to use.
127 argument:: extraArgs
128 Extra arguments that you may wish to pass to the synth.
131 subsection:: Subclassing and Internal Methods
133 The following methods are usually not used directly or are called by a primitive. Programmers can still call or override these as needed.
135 method:: start
137 method:: eventSeq
138 argument:: delta
139 argument:: funcs
141 method:: cmdPeriod
143 method:: initFreqScope
145 method:: sendSynthDefs
147 method:: allocBuffers
149 method:: freeBuffers
151 method:: node
153 method:: scopebuf
155 method:: fftbuf
157 method:: bufSize
159 examples::
161 code::
162 // Start internal server
163 s = Server.internal.boot;
166 // Create analyzer in a window
168 w = Window("My Analyzer", Rect(0, 0, 511, 300)); // width should be 511
169 f = FreqScopeView(w, w.view.bounds);
170 f.active_(true); // turn it on the first time;
172 w.onClose_({ f.kill }); // you must have this
173 w.front;
174 { SinOsc.ar([500, 1000], 0, 0.25).mean.dup }.play(s); // start two sine waves
177 f.freqMode_(1); // change to log scale so we can see them
178 f.inBus_(1); // look at bus 1
179 f.dbRange_(200); // expand amplitude range
180 f.active_(false); // turn scope off (watch CPU)
181 f.active_(true); // turn it back on
183 // Now press command-period. The scope is still running.
185 { Mix.ar(SinOsc.ar([500, 1200, 3000, 9000, 12000], 0, [0.2, 0.1, 0.05, 0.03, 0.01])) }.play(s); // restart some sines
187 // Close window and scope is killed.