1f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/*
2f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *  Licensed to the Apache Software Foundation (ASF) under one or more
3f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *  contributor license agreements.  See the NOTICE file distributed with
4f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *  this work for additional information regarding copyright ownership.
5f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *  The ASF licenses this file to You under the Apache License, Version 2.0
6f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *  (the "License"); you may not use this file except in compliance with
7f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *  the License.  You may obtain a copy of the License at
8f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *
9f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *     http://www.apache.org/licenses/LICENSE-2.0
10f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *
11f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *  Unless required by applicable law or agreed to in writing, software
12f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *  distributed under the License is distributed on an "AS IS" BASIS,
13f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *  See the License for the specific language governing permissions and
15f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *  limitations under the License.
16f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */
17f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
18f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectpackage javax.sound.sampled;
19f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
20f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport org.apache.harmony.sound.internal.nls.Messages;
21f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
22f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectpublic abstract class FloatControl extends Control {
23f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
24f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public static class Type extends Control.Type {
25f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        public static final Type MASTER_GAIN = new Type("Master Gain"); //$NON-NLS-1$
26f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
27f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        public static final Type AUX_SEND = new Type("AUX Send"); //$NON-NLS-1$
28f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
29f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        public static final Type AUX_RETURN = new Type("AUX Return"); //$NON-NLS-1$
30f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
31f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        public static final Type REVERB_SEND = new Type("Reverb Send"); //$NON-NLS-1$
32f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
33f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        public static final Type REVERB_RETURN = new Type("Reverb Return"); //$NON-NLS-1$
34f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
35f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        public static final Type VOLUME = new Type("Volume"); //$NON-NLS-1$
36f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
37f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        public static final Type PAN = new Type("Pan"); //$NON-NLS-1$
38f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
39f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        public static final Type BALANCE = new Type("Balance"); //$NON-NLS-1$
40f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
41f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        public static final Type SAMPLE_RATE = new Type("Sample Rate"); //$NON-NLS-1$
42f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
43f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        protected Type(String name) {
44f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            super(name);
45f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
46f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
47f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
48f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    private float value;
49f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
50f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    private float maximum;
51f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
52f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    private float minimum;
53f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
54f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    private String units;
55f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
56f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    private String minLabel;
57f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
58f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    private String midLabel;
59f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
60f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    private String maxLabel;
61f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
62f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    private float precision;
63f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
64f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    private int updatePeriod;
65f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
66f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    protected FloatControl(FloatControl.Type type, float minimum,
67f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            float maximum, float precision, int updatePeriod,
68f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            float initialValue, String units, String minLabel, String midLabel,
69f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            String maxLabel) {
70f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        super(type);
71f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        this.maximum = maximum;
72f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        this.maxLabel = maxLabel;
73f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        this.midLabel = midLabel;
74f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        this.minLabel = minLabel;
75f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        this.minimum = minimum;
76f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        this.precision = precision;
77f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        this.units = units;
78f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        this.updatePeriod = updatePeriod;
79f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        this.value = initialValue;
80f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
81f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
82f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    protected FloatControl(FloatControl.Type type, float minimum,
83f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            float maximum, float precision, int updatePeriod,
84f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            float initialValue, String units) {
85f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        this(type, minimum, maximum, precision, updatePeriod, initialValue,
86f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                units, "", "", ""); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
87f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
88f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
89f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void setValue(float newValue) {
90f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        if (newValue > maximum || newValue < minimum) {
91f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            // sound.0F=value does not fall within the allowable range
92f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            throw new IllegalArgumentException(Messages.getString("sound.0F")); //$NON-NLS-1$
93f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
94f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        this.value = newValue;
95f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
96f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
97f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public float getValue() {
98f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        return this.value;
99f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
100f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
101f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public float getMaximum() {
102f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        return this.maximum;
103f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
104f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
105f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public float getMinimum() {
106f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        return this.minimum;
107f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
108f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
109f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public String getUnits() {
110f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        return this.units;
111f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
112f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
113f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public String getMinLabel() {
114f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        return this.minLabel;
115f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
116f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
117f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public String getMidLabel() {
118f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        return this.midLabel;
119f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
120f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
121f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public String getMaxLabel() {
122f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        return this.maxLabel;
123f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
124f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
125f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public float getPrecision() {
126f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        return this.precision;
127f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
128f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
129f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public int getUpdatePeriod() {
130f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        return this.updatePeriod;
131f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
132f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
133f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public void shift(float from, float to, int microseconds) {
134f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        setValue(to);
135f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
136f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
137f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public String toString() {
138f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        return getType() + " with current value: "+ value + " " + units  //$NON-NLS-1$ //$NON-NLS-2$
139f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            + " (range: " + minimum + " - " + maximum + ")"; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
140f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
141f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
142f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project}
143