01: /*
02: * Copyright (c) 2000 Silvere Martin-Michiellot All Rights Reserved.
03: *
04: * Silvere Martin-Michiellot grants you ("Licensee") a non-exclusive,
05: * royalty free, license to use, modify and redistribute this
06: * software in source and binary code form,
07: * provided that i) this copyright notice and license appear on all copies of
08: * the software; and ii) Licensee does not utilize the software in a manner
09: * which is disparaging to Silvere Martin-Michiellot.
10: *
11: * This software is provided "AS IS," without a warranty of any kind. ALL
12: * EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES, INCLUDING ANY
13: * IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR
14: * NON-INFRINGEMENT, ARE HEREBY EXCLUDED. Silvere Martin-Michiellot
15: * AND ITS LICENSORS SHALL NOT BE LIABLE FOR ANY DAMAGES
16: * SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING
17: * OR DISTRIBUTING THE SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL
18: * Silvere Martin-Michiellot OR ITS LICENSORS BE LIABLE
19: * FOR ANY LOST REVENUE, PROFIT OR DATA, OR FOR DIRECT,
20: * INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE DAMAGES, HOWEVER
21: * CAUSED AND REGARDLESS OF THE THEORY OF LIABILITY, ARISING OUT OF THE USE OF
22: * OR INABILITY TO USE SOFTWARE, EVEN IF Silvere Martin-Michiellot HAS BEEN
23: * ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
24: *
25: * This software is not designed or intended for use in on-line control of
26: * aircraft, air traffic, aircraft navigation or aircraft communications; or in
27: * the design, construction, operation or maintenance of any nuclear
28: * facility. Licensee represents and warrants that it will not use or
29: * redistribute the Software for such purposes.
30: *
31: */
32:
33: // This code is repackaged after the code from Craig A. Lindley, from Digital Audio with Java
34: // Site ftp://ftp.prenhall.com/pub/ptr/professional_computer_science.w-022/digital_audio/
35: // Email
36: package com.db.media.audio.dsp.monitors;
37:
38: public class Scope extends AbstractAudio {
39:
40: // Private class data
41: private TriggerFlag tf;
42: private String name;
43: private int sampleRate;
44: private int numberOfChannels;
45:
46: public Scope() {
47:
48: super ("Scope", AbstractAudio.MONITOR);
49:
50: this .name = name;
51:
52: // Flag object for controlling scope triggering
53: tf = new TriggerFlag();
54:
55: }
56:
57: // Grab samples from previous stage and store for scope
58: public int getSamples(short[] buffer, int length) {
59:
60: if (length == 0)
61: return 0;
62:
63: // Get samples from the previous stage
64: int samples = previous.getSamples(buffer, length);
65:
66: // See if scope should trigger
67: if (!tf.trigger()) {
68:
69: // Indicate scope has triggered
70: tf.triggered();
71:
72: // Clone the array for the scope
73: short[] newBuffer = new short[samples];
74:
75: // Copy the data
76: System.arraycopy(buffer, 0, newBuffer, 0, length);
77:
78: }
79: // Return samples read
80: return samples;
81:
82: }
83:
84: public void minMaxSamplingRate(int min, int max, int preferred) {
85:
86: super .minMaxSamplingRate(min, max, preferred);
87: sampleRate = preferred;
88:
89: }
90:
91: // Negotiate the number of channels
92: public void minMaxChannels(int min, int max, int preferred) {
93:
94: super.minMaxChannels(min, max, preferred);
95: numberOfChannels = preferred;
96:
97: }
98:
99: }
|