1 /* 2 * Copyright (c) 1999, 2003, Oracle and/or its affiliates. All rights reserved. 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4 * 5 * This code is free software; you can redistribute it and/or modify it 6 * under the terms of the GNU General Public License version 2 only, as 7 * published by the Free Software Foundation. Oracle designates this 8 * particular file as subject to the "Classpath" exception as provided 9 * by Oracle in the LICENSE file that accompanied this code. 10 * 11 * This code is distributed in the hope that it will be useful, but WITHOUT 12 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 13 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 14 * version 2 for more details (a copy is included in the LICENSE file that 15 * accompanied this code). 16 * 17 * You should have received a copy of the GNU General Public License version 18 * 2 along with this work; if not, write to the Free Software Foundation, 19 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 20 * 21 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 22 * or visit www.oracle.com if you need additional information or have any 23 * questions. 24 */ 25 26 package javax.sound.sampled.spi; 27 28 import javax.sound.sampled.Mixer; 29 30 /** 31 * A provider or factory for a particular mixer type. 32 * This mechanism allows the implementation to determine 33 * how resources are managed in creation / management of 34 * a mixer. 35 * 36 * @author Kara Kytle 37 * @since 1.3 38 */ 39 public abstract class MixerProvider { 40 41 42 /** 43 * Indicates whether the mixer provider supports the mixer represented by 44 * the specified mixer info object. 45 * <p> 46 * The full set of mixer info objects that represent the mixers supported 47 * by this {@code MixerProvider} may be obtained 48 * through the {@code getMixerInfo} method. 49 * 50 * @param info an info object that describes the mixer for which support is queried 51 * @return {@code true} if the specified mixer is supported, 52 * otherwise {@code false} 53 * @see #getMixerInfo() 54 */ 55 public boolean isMixerSupported(Mixer.Info info) { 56 57 Mixer.Info infos[] = getMixerInfo(); 58 59 for(int i=0; i<infos.length; i++){ 60 if( info.equals( infos[i] ) ) { 61 return true; 62 } 63 } 64 return false; 65 } 66 67 68 /** 69 * Obtains the set of info objects representing the mixer 70 * or mixers provided by this MixerProvider. 71 * <p> 72 * The {@code isMixerSupported} method returns {@code true} 73 * for all the info objects returned by this method. 74 * The corresponding mixer instances for the info objects 75 * are returned by the {@code getMixer} method. 76 * 77 * @return a set of mixer info objects 78 * @see #getMixer(javax.sound.sampled.Mixer.Info) getMixer(Mixer.Info) 79 * @see #isMixerSupported(javax.sound.sampled.Mixer.Info) isMixerSupported(Mixer.Info) 80 */ 81 public abstract Mixer.Info[] getMixerInfo(); 82 83 84 /** 85 * Obtains an instance of the mixer represented by the info object. 86 * <p> 87 * The full set of the mixer info objects that represent the mixers 88 * supported by this {@code MixerProvider} may be obtained 89 * through the {@code getMixerInfo} method. 90 * Use the {@code isMixerSupported} method to test whether 91 * this {@code MixerProvider} supports a particular mixer. 92 * 93 * @param info an info object that describes the desired mixer 94 * @return mixer instance 95 * @throws IllegalArgumentException if the info object specified does not 96 * match the info object for a mixer supported by this MixerProvider. 97 * @see #getMixerInfo() 98 * @see #isMixerSupported(javax.sound.sampled.Mixer.Info) isMixerSupported(Mixer.Info) 99 */ 100 public abstract Mixer getMixer(Mixer.Info info); 101 }